(1)用训练好的LeNet-5模型对数据进行预测,在git中敲入命令./Build/x64/Release/caffe.exe test -model examples/mnist/lenet_train_test.prototxt -weights examples/mnist/lenet_iter_10000.caffemodel -iterations 100 。
(这里是我们第一次使用caffe工具的test命令)表示只做预测(前向传播计算),不进行参数更新(后向传播计算),
-model 指定了模型描述文件即上一篇博文中详细分析过的文件,
-weights 指定模型预先训练好的权值文件,
-
iterations 指定测试迭代次数。
得到的输出日志本文的最后附录一,对比之前训练的输出日志,本次test输出日志有点类似train日志的后半部分,但是把后面的训练变为了测试,没有了lr=******,loss=******,而是全部变为了
accuracy = 0.99,
loss = 0.0303407类似的。
(2)梳理一下之前做的一些事情:
1、从网上下载了四个文件train-images、train-lables、t10k-image、t10k-lables分别是
训练数据集、训练数据集标签、测试数据集、测试数据集标签
2、使用脚本
create_mnist.sh 将上述4个文件转化为lmdb格式,供caffe工具识别。
3、运用caffe工具的
train 命令对数据集进行训练
(3)尝试将自己手写的图片转为
lmdb或leveldb(这次尝试是失败的,可以直接跳过,进入第(5)步)
首先当然是利用画图软件画一个手写字符啦,为了保险起见,图片尺寸设置为28*28,另存为jpg格式。(这个图片其实是有问题的,mnist训练的图片应该是黑底白字的)
然后就是查查资料http://www.cnblogs.com/denny402/p/5082341.html,看看如何转换
:
在caffe中,作者为我们提供了这样一个文件:convert_imageset.cpp,存放在D:\Caffe\caffe-master\tools文件夹下,在
D:\Caffe\caffe-master\Build\x64\Release下有convert_imageset.exe,这个文件的作用就是用于将图片文件转换成caffe框架中能直接使用的db文件。这个文件使用格式如下:
convert_imageset [FLAGS] ROOTFOLDER/ LISTFILE DB_NAME
共计4个参数:
FLAGS: 图片参数组,后面详细介绍
ROOTFOLDER/: 图片存放的绝对路径,从linux系统根目录开始
LISTFILE: 图片文件列表清单,一般为一个txt文件,一行一张图片
DB_NAME: 最终生成的db文件存放目录
详细看看第一个参数
FLAGS的使用说明:
-gray: 是否以灰度图的方式打开图片。程序调用opencv库中的imread()函数来打开图片,默认为false
-shuffle: 是否随机打乱图片顺序。默认为false
-backend:需要转换成的db文件格式,可选为leveldb或lmdb,默认为lmdb
-resize_width/resize_height: 改变图片的大小。在运行中,要求所有图片的尺寸一致,因此需要改变图片大小。程序调用opencv库的resize()函数来对图片放大缩小,默认为0,不改变
-check_size: 检查所有的数据是否有相同的尺寸。默认为false,不检查
-encoded: 是否将原图片编码放入最终的数据中,默认为false
-encode_type: 与前一个参数对应,将图片编码为哪一个格式:‘png','jpg'......
接下来就是准备需要的文件啦:我在D:\Caffe\caffe-master\examples\mnist\my_test目录下建立了两个文件,其中一个是之前画好的图片(这个图片其实是有问题的,后面再解释),另一个是
LISTFILE参数所需要的文件列表清单:
最后,当然是执行命令,打开git,cd到/d/Caffe/caffe-master目录下,执行./Build/x64/Release/convert_imageset.exe --resize_height=28 --resize_width=28 examples/mnist/my_test/ examples/mnist/my_test/test.txt examples/mnist/my _test_lmdb
同样,自动在D:\Caffe\caffe-master\examples\mnist\目录下建立了my_test_lmdb文件夹,其中生成了两个文件:
这应该就是我们需要的lmdb文件了吧。
(4)修改
lenet_train_test.prototxt使用该数据集,保险起见,先将给文件备份,修改其路径
然后,执行$ ./Build/x64/Release/caffe.exe test -model examples/mnist/lenet_train_test.prototxt -weights examples/mnist/lenet_iter_10000.caffemodel -iterations 100当然事情总不会那么顺利出现了错误,
Cannot copy param 0 weights from layer 'conv1'; shape mismatch.
Source param shape is 20 1 5 5 (500); target param shape is 20 3 5 5 (1500). To learn this layer's parameters from scratch rather than copying from a saved net, rename the layer.
又是查资料,
http://blog.csdn.net/u010417185/article/details/52649178,
“conv1” ; shape mismatch 已经很明确的给出了错误的原因,原始shape不一致,同时又很明确的指出了是cov1层出现的错误。所以直接找shape\cpnv1,之后才发现是训练模型文件与模型定义文件中的shape不相符,我训练时图像库中有的图像是一个通道,有的是使用的3个通道,所以默认使用三个通道,而我的模型定义文件中的shape,其通道数写的是1个通道,故出现错误。
我理解的意思大概,minst自带的图片集是黑白两色的,每个像素值只有一个通道,而我的图片虽然也是黑白色,但是其实是RGB格式的,且看如何修改。这个方法有很多,matlab可以进行这样的操作,但修改完毕后,按照以上步骤重新来一遍,问题依旧。