01 资料
caffe官网Examples中有关于mnist测试的详细介绍。http://caffe.berkeleyvision.org/gathered/examples/mnist.html。
caffe github下载的代码中有关于mnist的网络定义示例和下载数据sh文件。
目录 | 文件类型 | 文件作用 |
---|---|---|
examples\mnist | *.prototxt | caffe 网络定义文件 |
examples\mnist | create_mnist.sh | 生成lmdb的linxu shell脚本 |
examples\mnist | readme.md | 等同于官网mnist测试详细介绍 |
examples\mnist | train_*.sh | linxu下运行mnist测试的各种命令行脚本 |
data\mnist | get_mnist.sh | 下载mnist实验数据的linux shell脚本 |
02 测试操作步骤
02.01 下载测试数据
打开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
根据文件内容,到http://yann.lecun.com/exdb/mnist网站下载,并且保持在data\mnist\目录。
测试数据文件 |
---|
train-images-idx3-ubyte.gz |
train-labels-idx1-ubyte.gz |
t10k-images-idx3-ubyte.gz |
t10k-labels-idx1-ubyte.gz |
下载后,使用winrar等解压软件,把4个压缩文件解压到data\mnist\目录下。
解压后文件 |
---|
data\mnist\train-images.idx3-ubyte |
data\mnist\train-labels.idx1-ubyte |
data\mnist\t10k-images.idx3-ubyte |
data\mnist\t10k-labels.idx1-ubyte |
02.02 生成lmdb数据库
阅读caffe\examples\mnist\create_mnist.sh内容。这个是linux下面生成lmdb数据库的脚本。
#!/usr/bin/env sh
# This script converts the mnist data into lmdb/leveldb format,
# depending on the value assigned to $BACKEND.
set -e
EXAMPLE=examples/mnist
DATA=data/mnist
BUILD=build/examples/mnist
BACKEND="lmdb"
echo "Creating ${BACKEND}..."
rm -rf $EXAMPLE/mnist_train_${BACKEND}
rm -rf $EXAMPLE/mnist_test_${BACKEND}
$BUILD/convert_mnist_data.bin $DATA/train-images-idx3-ubyte \
$DATA/train-labels-idx1-ubyte $EXAMPLE/mnist_train_${BACKEND} --backend=${BACKEND}
$BUILD/convert_mnist_data.bin $DATA/t10k-images-idx3-ubyte \
$DATA/t10k-labels-idx1-ubyte $EXAMPLE/mnist_test_${BACKEND} --backend=${BACKEND}
echo "Done."
其中convert_mnist_data.bin对应vs2015的工程中的exaples目录下的convert_mnist_data。
生成的可执行文件是
build\x64\examples\mnist\Debug\convert_mnist_data-d.exe
build\x64\examples\mnist\Release\convert_mnist_data.exe
如果运行了INSTALL,build\x64\install\bin下面也会有对应的文件。
为了使用方便,模拟create_mnist.sh写一个windows版本的create_mnist.bat。放在create_mnist.sh相同目录下。(注意文本最好采用utf8格式保存)
@echo off & setlocal enabledelayedexpansion
:: This script converts the mnist data into lmdb/leveldb format,
:: depending on the value assigned to %BACKEND%.
:: 在caffe 根目录运行examples\mnist\create_mnist.bat
%~d0
cd %~dp0
echo %cd%
echo currentpath: %~dp0
:: 网络定义文件的位置,lmdb也生成在这里
set EXAMPLE=..\..\examples\mnist
:: 测试数据的位置,
set DATA=..\..\data\mnist
:: 工程文件生成的位置
::set cfg=Debug
::set BUILD=..\..\build\x64\examples\mnist\%cfg%
::set exename=convert_mnist_data-d.exe
:: 发布文件所在位置,即vs2015工程中运行INSTALL后,文件的安装位置
set BUILD=..\..\build\x64\install\bin
:: 可发布的release版本lmdb生成工具
set exename=convert_mnist_data.exe
:: 生成数据类型
set BACKEND=lmdb
echo "Creating !BACKEND! start"
:: 删除存在的数据库目录,如果目录存在,会运行失败
IF EXIST %EXAMPLE%\mnist_train_%BACKEND%. echo rmdir /S /Q %EXAMPLE%\mnist_train_%BACKEND%.
IF EXIST %EXAMPLE%\mnist_train_%BACKEND%. rmdir /S /Q %EXAMPLE%\mnist_train_%BACKEND%.
IF EXIST %EXAMPLE%\mnist_test_%BACKEND%. echo rmdir /S /Q %EXAMPLE%\mnist_test_%BACKEND%.
IF EXIST %EXAMPLE%\mnist_test_%BACKEND%. rmdir /S /Q %EXAMPLE%\mnist_test_%BACKEND%.
:: 生成训练数据库
::
echo %BUILD%\%exename% %DATA%\train-images.idx3-ubyte ^
%DATA%\train-labels.idx1-ubyte %EXAMPLE%\mnist_train_%BACKEND% --backend=%BACKEND%
%BUILD%\%exename% %DATA%\train-images.idx3-ubyte %DATA%\train-labels.idx1-ubyte %EXAMPLE%\mnist_train_%BACKEND% --backend=%BACKEND%
:: 生成测试数据库
::
echo %BUILD%\%exename% %DATA%\t10k-images.idx3-ubyte ^
%DATA%\t10k-labels.idx1-ubyte %EXAMPLE%\mnist_test_%BACKEND% --backend=%BACKEND%
%BUILD%\%exename% %DATA%\t10k-images.idx3-ubyte %DATA%\t10k-labels.idx1-ubyte %EXAMPLE%\mnist_test_%BACKEND% --backend=%BACKEND%
echo "Create !BACKEND! Done."
:: 根据example\mnist\下面的*.sh运行测试
::mkdir build\x64\log\
::build\x64\install\bin\caffe.exe train --solver=examples/mnist/lenet_solver.prototxt > build\x64\log\lenet_solver.log 2>&1
endlocal&goto :EOF
:EOF
保存examples\mnist\create_mnist.bat文件后,在caffe根目录运行:
examples\mnist\create_mnist.bat
或者在examples\mnist目录下直接运行如下语句。(运行前确保examples\mnist\目录下没有mnist_train_lmdb和mnist_test_lmdb目录)
功能 | 命令 |
---|---|
生成train数据 | ..\..\build\x64\install\bin\convert_mnist_data.exe ..\..\data\mnist\train-images.idx3-ubyte ..\..\data\mnist\train-labels.idx1-ubyte ..\..\examples\mnist\mnist_train_lmdb –backend=lmdb |
生成test数据 | ..\..\build\x64\install\bin\convert_mnist_data.exe ..\..\data\mnist\t10k-images.idx3-ubyte ..\..\data\mnist\t10k-labels.idx1-ubyte ..\..\examples\mnist\mnist_test_lmdb –backend=lmdb |
生成的数据库文件在examples\mnist\目录下。
02.03 运行测试数据
打开caffe\examples\mnist\train_lenet.sh脚本。内容如下:
#!/usr/bin/env sh
set -e
./build/tools/caffe train --solver=examples/mnist/lenet_solver.prototxt $@
根据train_lenet.sh内容,在caffe根目录运行如下命令:
build\x64\install\bin\caffe.exe train --solver=examples/mnist/lenet_solver.prototxt
::或者
::build\x64\tools\Release\caffe.exe train --solver=examples/mnist/lenet_solver.prototxt
::尽量不要运行debug版本,慢!
::build\x64\tools\Debug\caffe-d.exe train --solver=examples/mnist/lenet_solver.prototxt
运行结果如下:
02.04 保存运行日志
在caffe根目录下(D:\git\DeepLearning\caffe)运行如下命令。创建一个运行日志目录,运行测试用例。
mkdir build\x64\log\
build\x64\install\bin\caffe.exe train --solver=examples/mnist/lenet_solver.prototxt > build\x64\log\lenet_solver.log 2>&1
会在build\x64\log下面生产lenet_solver.log运行日志。
02.05 运行其他mnist测试用例
根据examples/mnist/*.sh,可以运行其他测试网络。
比如lenet_solver_adam.prototxt:
build\x64\install\bin\caffe.exe train --solver=examples/mnist/lenet_solver_adam.prototxt> build\x64\log\lenet_solver_adam.log 2>&1