# -*- coding:utf-8 -*- # çæMinstç½ç»ç»ææä»¶train.prototxtãtest.prototxtådeploy.prototxt from __future__ import print_function import caffe from caffe import layers as L from caffe import params as P # æ¤å½æ°çæLeNet5ç主ä½ç»æ def lenet5_body(net, from_layer): # ç½ç»åæ° kwargs = { # paramå®ä¹å¦ä¹ çï¼è¿éæ¯æåºç¡å¦ä¹ çstepçæ åµï¼lt_multä¹ä»¥åºç¡å¦ä¹ ç为å®é å¦ä¹ çï¼ä¸º0表示æé䏿´æ°ï¼decay_multåæéè¡°åç¸å ³ 'param': [dict(lr_mult=1, decay_mult=1), dict(lr_mult=2, decay_mult=0)], 'weight_filler': dict(type='xavier'), # æéåå§åæ¨¡å¼ 'bias_filler': dict(type='constant', value=0)} # æéåå·®åå§åæ¨¡å¼ # 夿æ¯å¦åå¨from_layerå± assert from_layer in net.keys() # conv1 net.conv1 = L.Convolution(net[from_layer], kernel_size=5, stride=1, num_output=20, pad=0, **kwargs) net.pool1 = L.Pooling(net.conv1, pool=P.Pooling.MAX, kernel_size=2, stride=2) net.conv2 = L.Convolution(net.pool1, kernel_size=5, stride=1, num_output=50, pad=0, **kwargs) net.pool2 = L.Pooling(net.conv2, pool=P.Pooling.MAX, kernel_size=2, stride=2) net.ip1 = L.InnerProduct(net.pool2, num_output=500, **kwargs) net.relu1 = L.ReLU(net.ip1, in_place=True) net.ip2 = L.InnerProduct(net.relu1, name='ip2', num_output=10, **kwargs) caffe_root = '../../' # caffe_root = 'E:/Code/Github/windows_caffe/' model_root = caffe_root + 'models/mnist/' # è®ç»æ°æ® train_data = caffe_root + "data/mnist/mnist_train_lmdb" # æµè¯æ°æ® test_data = caffe_root + "data/mnist/mnist_test_lmdb" # è®ç»ç½ç» train_net = caffe.NetSpec() # åºç¡ç½ç» # 带æ ç¾çæ°æ®è¾å ¥å± train_net.data, train_net.label = L.Data(source=train_data,backend=P.Data.LMDB, batch_size=64,ntop=2,transform_param=dict(scale=0.00390625)) # çæLeNet5ç主ä½ç»æ lenet5_body(train_net, 'data') # çæè¯¯å·®æå¤±å± train_net.loss = L.SoftmaxWithLoss(train_net.ip2, train_net.label) # æµè¯ç½ç» test_net = caffe.NetSpec() # åºç¡ç½ç» # 带æ ç¾çæ°æ®è¾å ¥å± test_net.data, test_net.label = L.Data(source=test_data, batch_size=100, backend=P.Data.LMDB, ntop=2,transform_param=dict(scale=0.00390625)) # çæLeNet5ç主ä½ç»æ lenet5_body(test_net, 'data') # çæè¯¯å·®æå¤±å± test_net.loss = L.SoftmaxWithLoss(test_net.ip2, test_net.label) # æ·»å ä¸ä¸ªç²¾ç¡®å± test_net.accuracy = L.Accuracy(test_net.ip2, test_net.label) # 宿½ç½ç» deploy_net = caffe.NetSpec() # åºç¡ç½ç» # 带æ ç¾çæ°æ®è¾å ¥å± deploy_net.data = L.Input(input_param=dict(shape=dict(dim=[64,1,28,28]))) # çæLeNet5ç主ä½ç»æ lenet5_body(deploy_net, 'data') deploy_net.prob = L.Softmax(deploy_net.ip2) # ä¿åè®ç»æä»¶ with open(model_root+'train.prototxt', 'w') as f: print('name: "LenNet5_train"', file=f) print(train_net.to_proto(), file=f) with open(model_root+'test.prototxt', 'w') as f: print('name: "LenNet5_test"', file=f) print(test_net.to_proto(), file=f) with open(model_root+'deploy.prototxt', 'w') as f: print('name: "LenNet5_test"', file=f) print(deploy_net.to_proto(), file=f)