1、数据准备
之前的博客中已经对mnist数据集进行过介绍,这里我们直接将保存好的图片拿过来处理。数据分成了训练集(60000张共10类)和测试集(共10000张10类),将每个类别放在一个单独的文件夹里。并且将所有的图片,都生成了txt列表清单(train.txt和test.txt)。为节约时间,这里直接下载denny分享的数据集:http://pan.baidu.com/s/1pLMV4Kz
在caffe根目录下新建一个mnist文件夹,并将图片解压在该文件夹下。(一般caffe程序都是先将图片转换成lmdb文件,这里直接使用图片操作,导致均值很难计算,因此不进行减均值运算)
2、导入caffe库
import caffe
from caffe import layers as L,params as P,proto,to_proto
#设定文件的保存路径
root='D:/caffe/caffe-master/caffe-master/mnist/' #根目录
train_list=root+'mnist/train/train.txt' #训练图片列表
test_list=root+'mnist/test/test.txt' #测试图片列表
train_proto=root+'mnist/train.prototxt' #训练配置文件
test_proto=root+'mnist/test.prototxt' #测试配置文件
solver_proto=root+'mnist/solver.prototxt' #参数文件
压缩文件中除了包含了训练及测试图片外还包含相应的TXT文件。
3、生成配置文件
用python生成后缀名为prototxt的配置文件,即为network进行构造:
#编写一个函数,生成配置文件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)
#卷积层