[caffe的python接口学习五]:一个完整的mnist实例

来源:转载



作者:JackGao16 CSDN
邮箱:[email protected]


mnist就像学习程序语言的“hello world”,是认识深度学习框架的开始,这个例子虽然很简单,但搞懂这个例子以后,对我们后续的任务的配置是一个很好的参考。


在这之前还是要弄清楚网络的参数和超参数的的设置,这样训练出来的网络模型才有应用的可能:
数据层及其参数
视觉层及其参数
solver超参数及其配置


1、获取数据

官网提供的mnist数据并不是图片,但我们以后做的实际项目可能是图片。这里有已经将数据转化为图片在徐老师的云盘上且可以点击下载:
mnist图片数据下载


数据分成了训练集(60000张共10类)和测试集(共10000张10类),每个类别放在一个单独的文件夹里。并且将所有的图片,都生成了txt列表清单(train.txt和test.txt)。在linux下安装rar然后才能解压,


sudo apt-get install rar
2、导入caffe库并设定文件的路径
import caffe
from caffe import layer as L,params as p,proto,to_proto
#设定文件的保存路径(这里的路径根据紫的数据集所在的目录以及生成的配置文件的目录灵活的设置)
root='/home/xxx/' #根目录
train_list=root+'caffe/mnist/train/train.txt' #训练图片列表
test_list=root+'caffe/mnist/test/test.txt'#测试图片列表
train_proto=root+'caffe/examples/mnist/train.prototxt'#训练配置文件
test_proto=root+'caffe/examples/mnist/test.prototxt' #测试配置文件
solver_proto=root+'examples/mnist/solver.prototxt' #参数文件
3、生成配置文件

生成配置文件的时候,可以选择图片数据直接生成,也可以先将体片数据转化成lmdb格式之后再


3.1、图片数据直接生成

这里直接利用图片进行操作,由于这种情况下的均值难以计算,所以就不减均值。
配置文件是一个类似于.txt的后缀名为prototxt的可直接在进行编写,也可以通过python来生成:


#编写一个函数,生成配置文件prototxt
def Lenet(img_list,batch_size,include_acc=False):
#第一层,数据输入层,以ImageData格式输入
data, label = L.ImageData(source=img_list, batch_size=batch_size, ntop=2,root_folder=root,
transform_param=dict(scale= 0.00390625))
#第二层:卷积层
conv1=L.Convolution(data, kernel_size=5, stride=1,num_output=20, pad=0,weight_filler=dict(type='xavier'))
#池化层
pool1=L.Pooling(conv1, pool=P.Pooling.MAX, kernel_size=2, stride=2)
#卷积层
conv2=L.Convolution(pool1, kernel_size=5, stride=1,num_output=50, pad=0,weight_filler=dict(type='xavier'))
#池化层
pool2=L.Pooling(conv2, pool=P.Pooling.MAX, kernel_size=2, stride=2)
#全连接层
fc3=L.InnerProduct(pool2, num_output=500,weight_filler=dict(type='xavier'))
#激活函数层
relu3=L.ReLU(fc3, in_place=True)
#全连接层
fc4 = L.InnerProduct(relu3, num_output=10,weight_filler=dict(type='xavier'))
#softmax层
loss = L.SoftmaxWithLoss(fc4, label)
if include_acc:# test阶段需要有accuracy层
acc = L.Accuracy(fc4, label)
return to_proto(loss, acc)
else:
return to_proto(loss)
def write_net():
#写入train.prototxt
with open(train_proto, 'w') as f:
f.write(str(Lenet(train_list,batch_size=64)))
#写入test.prototxt
with open(test_proto, 'w') as f:
f.write(str(Lenet(test_list,batch_size=100, include_acc=True)))
3.2、图片数据转换后生成配置文件
3.2.1、首先将图片转化为lmdb格式

1、首先,根据图像数据生成train.txt和test.txt的清单文件(而我们下载的图像数据中已经包含了相应的清单文件,所以这一步可以直接省略,具体的方法可以参考链接:训练和测试自己的文件)


2、获得清单文件之后,编写一个脚本,调用convert_imageset来转换数据的格式(注意,这个执行要在caffe的目录下进行):


vim mnist/create_lmdb.sh

脚本文件的编辑可供参考:




分享给朋友:
您可能感兴趣的文章:
随机阅读: