700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 【caffe-Windows】mnist实例编译之model的使用-classification

【caffe-Windows】mnist实例编译之model的使用-classification

时间:2019-07-10 11:43:39

相关推荐

【caffe-Windows】mnist实例编译之model的使用-classification

【caffe-Windows】mnist实例编译之model的使用-classification 标签: 深度学习caffe -08-16 11:24 1349人阅读 评论(12) 收藏 举报 本文章已收录于:分类:作者同类文章X

版权声明:欢迎大家一起交流,有错误谢谢指正~~~多句嘴,CSDN会在每一行代码后面加两个空格,复制博客代码时请手动去掉,尤其是bat里面的代码

目录(?)[+]

第一步第二步第三步第四步第五步第六步第七步

仿照cifar10的模型使用,本文对mnist的训练方式做了部分修改

【注】本文caffe安装路径为E:\CaffeDev-GPU\caffe-master。请自行参考并修改相关路径(debug以及release参考你编译caffe时候采用的模式)

第一步

按照前面的model生成方法的前两步骤制作数据集,得到两个文件夹。并拷贝到E:\CaffeDev-GPU\caffe-master\Build\x64\Release

train:链接:/s/1cJZNI2 密码:ikz8

test:链接:/s/1gfuhmvx 密码:7krq

第二步

计算均值文件:在E:\CaffeDev-GPU\caffe-master\Build\x64\Release目录下新建bat文件mnist_mean.bat,内容如下

[html]view plaincopyprint? compute_image_mean.exemnist_train_leveldbmean.binaryprotopause

compute_image_mean.exe mnist_train_leveldb mean.binaryprotopause

得到mean.binaryproto

mean.binaryproto:链接:/s/1dFp19i5 密码:xhux

第三步

将上面两步的train和test数据集以及均值文件拷贝到E:\CaffeDev-GPU\caffe-master\examples\mnist文件夹下,方便后面的路径书写

修改此文件夹下的训练方法lenet_train_test1.prototxt的前两层,就是在原来的基础上把均值文件加进去。同时注意lenet_solver.prototxt中的net是你修改以后的prototxt文件,我是把修改后的prototxt训练文件命名为lenet_train_test1.prototxt了(加了一个1)

[html]view plaincopyprint? name:"LeNet"layer{name:"mnist"type:"Data"top:"data"top:"label"include{phase:TRAIN}transform_param{mean_file:"examples/mnist/mean.binaryproto"scale:0.00390625}data_param{source:"examples/mnist/mnist_train_leveldb"batch_size:64backend:LEVELDB}}layer{name:"mnist"type:"Data"top:"data"top:"label"include{phase:TEST}transform_param{mean_file:"examples/mnist/mean.binaryproto"scale:0.00390625}data_param{source:"examples/mnist/mnist_test_leveldb"batch_size:100backend:LEVELDB}}

name: "LeNet"layer {name: "mnist"type: "Data"top: "data"top: "label"include {phase: TRAIN}transform_param {mean_file: "examples/mnist/mean.binaryproto"scale: 0.00390625}data_param {source: "examples/mnist/mnist_train_leveldb"batch_size: 64backend: LEVELDB}}layer {name: "mnist"type: "Data"top: "data"top: "label"include {phase: TEST}transform_param {mean_file: "examples/mnist/mean.binaryproto"scale: 0.00390625}data_param {source: "examples/mnist/mnist_test_leveldb"batch_size: 100backend: LEVELDB}}

lenet_train_test1.prototxt:链接:/s/1skBN3Md 密码:ixzt

lenet_solver1.prototxt:链接:/s/1kVxwQl5 密码:3o5a

第四步

在E:\CaffeDev-GPU\caffe-master目录下新建训练bat文件train_minist.bat,内容如下:

[html]view plaincopyprint? .\Build\x64\Release\caffe.exetrain--solver=examples/mnist/lenet_solver1.prototxtpause

.\Build\x64\Release\caffe.exe train --solver=examples/mnist/lenet_solver1.prototxtpause

此处注意一下CPU与GPU的训练仅仅需要修改lenet_solver1.prototxt的最后一行即可

第五步

测试一下测试集的分批准确率,同样在E:\CaffeDev-GPU\caffe-master下新建test_mnist.bat,内容如下

[html]view plaincopyprint? .\Build\x64\Release\caffe.exetest--model=examples/mnist/lenet_train_test1.prototxt-weights=examples/mnist/lenet_iter_10000.caffemodel-gpu=0pause

.\Build\x64\Release\caffe.exe test --model=examples/mnist/lenet_train_test1.prototxt -weights=examples/mnist/lenet_iter_10000.caffemodel -gpu=0pause

运行之,得到如下结果:

第六步

这一步往后就比较实用了,先介绍如何制作手写数字的单张测试样本。两种方法:①按照我前面的博客,从mnist数据集里面摘取里面的某张或者某些图片;②用Windows的画图工具自己手写一张(怎么打开画图工具就不说了吧)

为了方便直接调整写的数字的大小,如果你这里不调整大小,在matlab里面有相关的resize函数,自己查询调用方法,很简单

然后,写几张,本人龙飞凤舞地画了几张:链接:/s/1o79lL5S 密码:umjl

可以发现,这个保存下来的是RGB图像,三通道,然而我们的测试集和训练集mnist都是灰度图像,怎么办,简单,用matlab转

[html]view plaincopyprint? %存储二值图像image=imread('009.png');im=255-rgb2gray(image);imshow(im)imwrite(uint8(im),'./binarybmp/9.bmp');

%存储二值图像image=imread('009.png');im=255-rgb2gray(image);imshow(im)imwrite(uint8(im),'./binarybmp/9.bmp');

【注意】这里不要手动去save那个figure哦,不然图像会比28*28大,一定要用imwrite,并且格式为bmp

转换完毕的测试集:链接:/s/1o7NySMu 密码:bead

第七步

把转换好的二值图像拷贝到E:\CaffeDev-GPU\caffe-master\examples\mnist\

在E:\CaffeDev-GPU\caffe-master\examples\mnist下建立标签文件synset_words.txt:

[html]view plaincopyprint? 0123456789

0123456789

调用classification.exe去识别某张图片,E:\CaffeDev-GPU\caffe-master目录新建mnist_class.bat

[cpp]view plaincopyprint? E:\CaffeDev-GPU\caffe-master\Build\x64\Release\classification.exeE:\CaffeDev-GPU\caffe-master\examples\mnist\lenet.prototxtE:\CaffeDev-GPU\caffe-master\examples\mnist\lenet_iter_10000.caffemodelE:\CaffeDev-GPU\caffe-master\examples\mnist\mean.binaryprotoE:\CaffeDev-GPU\caffe-master\examples\mnist\synset_words.txtE:\CaffeDev-GPU\caffe-master\examples\mnist\binarybmp\0.bmppause

E:\CaffeDev-GPU\caffe-master\Build\x64\Release\classification.exe E:\CaffeDev-GPU\caffe-master\examples\mnist\lenet.prototxt E:\CaffeDev-GPU\caffe-master\examples\mnist\lenet_iter_10000.caffemodel E:\CaffeDev-GPU\caffe-master\examples\mnist\mean.binaryproto E:\CaffeDev-GPU\caffe-master\examples\mnist\synset_words.txt E:\CaffeDev-GPU\caffe-master\examples\mnist\binarybmp\0.bmppause

运行就会得到结果

【已解决】【笔者注】现在正在研究matlab的实现,在预处理部分卡住了,在模型中加入均值计算以及归一化以后,这两个操作有没有先后顺序,在matlab中先进行了减均值计算,发现数据分布有大于0和小于0的,如果直接除以255,肯定不可能归一化到[0,1],此法测试效果很差,肯定错了。如果采用mapminmax(A,0,1)归一化到[0,1],结果也是错的。如果有想法的同学请私密我一下,一起探讨一下matlab的实现

参考预处理代码详解:/langb/article/details/51050213

Python的实现:/detail-57212.html

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。