MNIST数据集是一个手写数字数据集,它有60000个训练样本和10000个测试样本。
1.数据集准备
下载地址:http://yann.lecun.com/exdb/mnist/
一共包含四个压缩包:
train-images-idx3-ubyte.gz:训练集图片
train-labels-idx1-ubyte.gz:训练集图片对应数字标签
t10k-images-idx3-ubyte.gz:测试集图片
t10k-labels-idx1-ubyte.gz:测试集图片对应数字标签
将数据集下载到caffe-windows\examples\mnist下新建的文件夹mnist_data里,解压缩文件:
注意上图:解压缩后发现横线变成了点,所以最好改一下文件名,方便后面操作,比如我修改如下:
2.数据集格式转换
在windows下利用caffe进行训练支持两种格式的数据集,leveldb或者lmdb,因此需要先把数据集转换成这两种格式之一。caffe自带一些数据集格式转换工具的源代码,convert_mnist_data.cpp提供了mnist数据集转换的核心代码。
先在caffe解决方案下生成convert_mnist_data工程:
我使用Debug模式生成,则在.\caffe-windows\Build\x64\Debug文件夹下生成了convert_mnist_data.exe:
在caffe-windows\examples\mnist文件夹下新建convert-mnist-data-leveldb.txt,写入以下批处理命令:
..\..\Build\x64\Debug\convert_mnist_data.exe mnist_data\train-images mnist_data\train-labels mnist_data\mnist_train_leveldb -backend=leveldb
echo.
..\..\Build\x64\Debug\convert_mnist_data.exe mnist_data\test-images mnist_data\test-labels mnist_data\mnist_test_leveldb -backend=leveldb
pause
然后将文件后缀改为.bat保存。运行成功后:
得到转换好的leveldb格式数据集:
若要转换成lmdb格式则新建convert-mnist-data-lmdb.bat,写入以下命令:
..\..\Build\x64\Debug\convert_mnist_data.exe mnist_data\train-images mnist_data\train-labels mnist_data\mnist_train_lmdb -backend=lmdb
echo.
..\..\Build\x64\Debug\convert_mnist_data.exe mnist_data\test-images mnist_data\test-labels mnist_data\mnist_test_lmdb -backend=lmdb
pause
然后保存,运行,过程同上。
注意:转换成leveldb格式时一般没问题,但转换成lmdb格式时可能会出现以下错误:
在vs中打开convert_mnist_data工程里的convert_mnist_data.cpp做出修改:
将1099511627776改为104857600
这一行是lmdb类型操作环境参数,默认的1TB太大了,我们把它改小一点,比如改成104857600,也就是100M。
接着重新生成convert_mnist_data.exe,再运行convert-mnist-data-lmdb.bat进行lmdb格式转换就能成功了:
完成格式转换后将会在caffe-windows\examples\mnist\mnist_data目录下得到四个文件夹:
3.训练和测试
以leveldb格式数据训练为例进行说明。
为了方便处理,附上我转换后的数据集,大家可以直接下载使用:
- leveldb格式train:https://pan.baidu.com/s/1vAgP9sQ-1EHpsE_8FNRa3A 提取码: u9ur
- leveldb格式test:https://pan.baidu.com/s/1jAt73hlnVldxyPC05RA4_w 提取码: 8hin
- lmdb格式train:https://pan.baidu.com/s/1o0lc6S_Ug54PW6Flan138w 提取码: j8ew
- lmdb格式test:https://pan.baidu.com/s/1bRG72pYQrawcDjJ0GSzlMQ 提取码: ryfj
打开:caffe-windows\examples\mnist目录下的lenet_train_test.prototxt文件做如下修改并保存:
打开caffe-windows\examples\mnist目录下的lenet_solver.prototxt文件进行如下修改并保存:
在caffe-windows文件夹下新建train-minist.bat并写入以下命令:
.\Build\x64\Debug\caffe.exe train --solver=examples/mnist/lenet_solver.prototxt
pause
保存train-minist.bat并开始运行,mnist数据集就开始进行训练了,最后会得到test的accuracy和loss: