记录
数据
数据分成了训练集(60000张共10类)和测试集(共10000张10类),每个类别放在一个单独的文件夹里。并且将所有的图片,都生成了txt列表清单(train.txt和test.txt)
下载数据
导入caffe库,并设定文件路径
我是将mnist直接放在根目录下的,所以代码如下:
其中train.txt 和test.txt文件已经有了,其它三个文件,我们需要自己编写。
此处注意:一般caffe程序都是先将图片转换成lmdb文件,但这样做有点麻烦。因此我就不转换了,我直接用原始图片进行操作,所不同的就是直接用图片操作,均值很难计算,因此可以不减均值。
生成配置文件
配置文件实际上就是一些txt文档,只是后缀名是prototxt,我们可以直接到编辑器里编写,也可以用代码生成。此处,我用python来生成。
配置文件里面存放的,就是我们所说的network。我这里生成的network,可能和原始的Lenet不太一样,不过影响不大。
生成参数文件solver
同样,可以在编辑器里面直接书写,也可以用代码生成。
开始训练模型
训练过程中,也在不停的测试。
训练部分完成的python文件
mnist.py
我将此文件放在根目录下的mnist文件夹下,因此可用以下代码执行
sudo python mnist/mnist.py
在训练过程中,会保存一些caffemodel。多久保存一次,保存多少次,都可以在solver参数文件里进行设置。
另外,如果caffe是only cpu模式,需要修改生产的solve参数文件设置为cpu模式,另外,需要将运行代码中的
caffe.set_device(0)
caffe.set_mode_gpu()
注释掉
我设置为训练10 epoch,9000多次,测试精度可以达到99%
生成deploy文件
如果要把训练好的模型拿来测试新的图片,那必须得要一个deploy.prototxt文件,这个文件实际上和test.prototxt文件差不多,只是头尾不相同而也。deploy文件没有第一层数据输入层,也没有最后的Accuracy层,但最后多了一个Softmax概率层。
这里我们采用代码的方式来自动生成该文件。
deploy.py
运行该文件后,会在mnist目录下,生成一个deploy.prototxt文件。
这个文件不推荐用代码来生成,反而麻烦。大家熟悉以后可以将test.prototxt复制一份,修改相应的地方就可以了,更加方便。
用训练好的模型(caffemodel)来分类新的图片
经过前面两篇博文的学习,我们已经训练好了一个caffemodel模型,并生成了一个deploy.prototxt文件,现在我们就利用这两个文件来对一个新的图片进行分类预测。
我们从mnist数据集的test集中随便找一张图片,用来进行实验。
最后输出 the class is : 5
分类正确。
如果是预测多张图片,可把上面这个文件写成一个函数,然后进行循环预测就可以了。
参考博文
http://www.cnblogs.com/denny402/p/5685909.html