1、首先配置环境
网上教程比较多,给大家推荐一篇博客
2、安装Git和wget
Git bash可以让你直接在windows下运行shell脚本。
下载地址
wget可以让你从互联网上获取资源。下载地址
为了外部调用wget,需要将wget所在目录加入环境变量
电脑-》属性-》高级系统设置-》环境变量-》(用户/系统都可以)
3、下载MNIST数据
用git bash运行caffe目录下的data/mnist下的get_mnist.sh
#!/usr/bin/env sh
# This scripts downloads the mnist data and unzips it.
DIR="$( cd "$(dirname "$0")" ; pwd -P )"
cd "$DIR"
echo "Downloading..."
for fname in train-images-idx3-ubyte train-labels-idx1-ubyte t10k-images-idx3-ubyte t10k-labels-idx1-ubyte
do
if [ ! -e $fname ]; then
wget --no-check-certificate http://yann.lecun.com/exdb/mnist/${fname}.gz
gunzip ${fname}.gz
fi
done
调用wget,从网络中直接下载数据集,下载完成后,如下图所示:
4、数据格式的转换
第三步从网络下载的数据是二进制数据,无法直接在caffe框架下使用,需要转换成lmdb或者leveldb格式的数据,本例中转换为lmdb格式。具体过程如下:
打开 caffe根目录/example/mnist/create_mnist.sh
#!/usr/bin/env sh
# This script converts the mnist data into lmdb/leveldb format,
# depending on the value assigned to $BACKEND.
set -e
EXAMPLE=D:\\Caffe\\Caffe_BVLC\\examples\\mnist
DATA=D:\\Caffe\\Caffe_BVLC\\data\\mnist
BUILD=D:\\Caffe\\Caffe_BVLC\\Build\\x64\\Release
BACKEND="lmdb"
echo "Creating ${BACKEND}..."
rm -rf $EXAMPLE/mnist_train_${BACKEND}
rm -rf $EXAMPLE/mnist_test_${BACKEND}
$BUILD/convert_mnist_data.exe $DATA/train-images-idx3-ubyte \
$DATA/train-labels-idx1-ubyte $EXAMPLE/mnist_train_${BACKEND} --backend=${BACKEND}
$BUILD/convert_mnist_data.exe $DATA/t10k-images-idx3-ubyte \
$DATA/t10k-labels-idx1-ubyte $EXAMPLE/mnist_test_${BACKEND} --backend=${BACKEND}
echo "Done."
红色部分换成自己的路径。
有一点需要注意:路径的设置,当我使用相对路径的时候,报了一个错误:Check failure stack trace
执行完该文件,会在example/mnist文件夹下出现两个新的文件夹,如下图:
至此,数据的转换已经完成。
5、训练神经网络
在根目录下新进一个文本文件,重命名为run_mnist.bat。在该文本中加入
.\Build\x64\Release\caffe.exe train --solver=examples/mnist/lenet_solver.prototxt
pause
打开lenet_solver.prototxt,在最后一行选择cpu或者gpu,根据自己的情况选择。
鼠标双击运行run_mnist.bat,整个训练过程在我电脑下用了10来分钟。训练结果如下
数据训练完成,会在example/mnist文件夹下出现5000次和10000次的模型,accuracy达到0.9891
6、测试模型
在根目录下创建test_mnist.bat,内容如下:
.\Build\x64\Release\caffe.exe test -model=examples\mnist\lenet_train_test.prototxt -weights=examples\mnist\lenet_iter_10000.caffemodel -iterations=100
pause
注意:这里一定不要因为一行过长,使用回车,不然会报错,Check failure stack trace:
我们可以观测到,精度达到了0.9903
至此:手写体从 原始二进制数据-》格式转换-》训练-》测试 已经完成