第二课 深度学习的“hello world”——基于mnist数据集的手写数字识别
来源:互联网 发布:淘宝退货运费多少钱 编辑:程序博客网 时间:2024/06/05 16:22
1,下载mnist所需的所有数据
mnist数据集http://yann.lecun.com/exdb/mnist/,这里需要注意的是caffe并不直接通过下载得到的四个文件进行训练,而是会把它转化为lmdb或leveldb格式进行读取。lmdb是lightning(闪电的) memory-mapped database manager的缩写,能够把原始数据通过更为高效的存储方式存储,从而加快读取和训练速度(lmdb比leveldb更快,可以看看刚刚的NugetPackages文件夹,当中就包含着对应的库)。
实现这个转化的代码是\examples\mnist的convert_mnist_data.cpp,但也没必要看,因为它的运行脚本create_mnist.sh显然是linux下的东西。想了想也可以理解,毕竟caffe本来也不支持windows,能移植过来就不错了,也不能指望大牛们把所有例子的代码都一并移植过来。目前更很好的办法就是直接网盘下载,这里分享一个
链接: https://pan.baidu.com/s/1i44s1JB 密码: ewi82,将下载下来的文件夹中的mnist_train_leveldb和mnist_test_leveldb两个文件夹复制到caffe-master\examples\mnist文件夹下
3,修改配置文件。
mnist目录下prototxt扩展名的都是配置文件。我们需要修改lenet_solver.prototxt,用vs2013打开,定位到最后一行:solver_mode: GPU,将GPU改为CPU。
另外需要修改 lenet_train_test.prototxt文件的第14,16,31,33行
4,编写bat脚本
在caffe-master根目录下新建一个train_mnist.txt并写入如下内容:
- .\Build\x64\Release\caffe.exe train --solver=examples/mnist/lenet_solver.prototxt
- pause
当迭代次数达到lenet_solver.prototxt定义的max_iter时,就可以认为训练结束了。并且最终会在目录\examples\mnist下产生训练出的模型(文件后缀名为caffemodel和solverstate),如下图所示:
5,用标准数据集测试模型
按上一步骤生成test_mnist.bat,内容如下:
.\Build\x64\Release\caffe.exe test--model=examples/mnist/lenet_train_test.prototxt -weights=examples\mnist\lenet_iter_10000.caffemodel
pause
双击运行,结果如下:
6,用自己的图片测试此模型:
(1)用Windows的画图工具自己手写一张图片(需为28*28像素的灰度图像):
为了方便直接调整写的数字的大小,如果你这里不调整大小,在matlab里面有相关的resize函数,自己查询调用方法,很简单
如下所示:
(2)
查看图片属性:
可以发现,这个保存下来的是RGB图像,三通道(如果是RGB图,位深度是24;如果是灰度和索引图,位深度是8),然而我们的测试集和训练集mnist都是灰度图像,即单通道,所以要用matlab或者python进行图像二值化处理,我这里用的是matlab
image=imread('C:\Users\sun\Desktop\8.png') %载入指定路径下的图像
im=255-rgb2gray(image) %将图像二值化,彩色图像转化为灰度图像,并且将白色背景变为黑色,黑色字体变为白色,突出字体。
imwrite(uint8(im),'C:\Users\sun\Desktop\8.bmp') %以bmp格式保存图片到指定路径
(3)
将二值化后的图片保存到caffe-master\examples\mnist文件夹下,并新建一个标签文件synset_words.txt,填入数字0到9
7,计算均值文件:在.\caffe-master\Build\x64\Release目录下新建bat文件mnist_mean.bat,内容如下:
.\Build\x64\Release\compute_image_mean.exe examples/mnist/mnist_train_leveldb examples/mnist/mean.binaryproto --backend=leveldb
pause
在mnist文件夹中生成mean.binaryproto
8,生成deploy.prototxt
这里参考了苏的专栏:http://blog.csdn.net/lanxuecc/article/details/52474476
用训练好的caffemodel来测试单张图片需要一个deploy.prototxt文件来指定网络的模型构造。
事实上deploy.prototxt文件与lenet_train_test.prototxt文件类似,只是首尾有些差别。
所以我们可以复制lenet_train_test.prototxt,粘贴到当前文件夹,即lenet_train_test.prototxt副本,将其重命名为deploy.prototxt
用vs2013打开,并修改其中三处代码:
第一:/将原来训练与测试两层数据层data部分用下边代码替换/:
layer { name: "data"
type:"Input"
top:"data"
input_param { shape: { dim:1dim:1dim:28dim:28 } }
}
总得来说,deploy.prototxt就是在lenet_train_test.prototxt的基础上稍作改动,input_param { shape: { dim: 1 dim: 1 dim: 28 dim: 28 } } 这四个dim参数分别是 :
(1)对待识别样本图片进行数据增广的数量,一个图片会变成10个,之后输入到网络进行识别。如果不进行数据增广,可以设置成1。
(2)图片的通道数,一般灰度图片为单通道,则值为1,如果为非灰度图3通道图片则为3。
(3)图片的高度,单位像素。
(4):图片的宽度,单位像素
第二:/删除了原有的测试模块的测试精度层/
第三:/*输出层的类型由SoftmaxWithLoss变成Softmax,训练是输出时是loss,应用时是prob。*/
layer{
name:"prob"
type:"Softmax"
bottom:"ip2"
top:"prob"
}
9,
在caffe-master根目录下新建mnist_class.txt,并填入下面内容:
.\Build\x64\Release\classification.exe examples/mnist/deploy.prototxt examples\mnist\lenet_iter_10000.caffemodel examples/mnist/mean.binaryproto examples/mnist/synset_words.txt examples/mnist/8.bmp
pause
改为bat文件,双击运行,结果如下:
bingo! 大功告成!
- 第二课 深度学习的“hello world”——基于mnist数据集的手写数字识别
- 基于tensorflow的MNIST手写数字识别
- 基于tensorflow的MNIST手写数字识别
- 利用tensorflow一步一步实现基于MNIST 数据集进行手写数字识别的神经网络,逻辑回归
- 在tensorflow上进行机器学习的“Hello World”:MNIST 手写识别
- ubuntu下运行caffe下的“Hello World”——mnist手写体数字识别例程
- MNIST手写数字的识别——CNN篇
- MNIST手写数字的识别——DNN篇
- MNIST手写数字的识别——kNN篇
- 基于tensorflow的MNIST手写数字识别--入门篇
- 基于Tensorflow的MNIST手写数字识别(一)
- 基于Tensorflow的MNIST手写数字识别(三)
- tensorflow的hellow world:mnist手写识别
- 神经网络与深度学习 1.6 使用Python实现基于梯度下降算法的神经网络和MNIST数据集的手写数字分类程序
- 神经网络与深度学习 使用Python实现基于梯度下降算法的神经网络和自制仿MNIST数据集的手写数字分类可视化程序 web版本
- 经典手写数字mnist数据集识别
- Tensorflow , MNIST 识别你自己手写的数字
- 《学习Tensorflow》——MNIST手写数字识别
- 启动三个线程,线程1打印1-5,线程2打印6-10,线程3打印11-15,接着线程1打印16-20……依此类推,打印到72.
- web app
- 触碰大师们的思想(一)之 简单工厂模式
- 安装linux需要做的几件事
- Tunnel Warfare HDU
- 第二课 深度学习的“hello world”——基于mnist数据集的手写数字识别
- 用户免登录功能
- 自定义按钮实现水波点击效果
- Python3中用什么替换commands模块的getstatusoutput()
- 对加载spring的认识spring监听器
- Spring4 + Spring MVC + MyBatis 整合思路
- STL中的无序容器
- 私人用,勿在意!
- Codeforces Round #388 (Div. 2)D. Leaving Auction