caffe文件夹下有.sh文件,如果是在linux平台下训练caffe,可以直接在terminal上执行.sh文件,非常方便。但如果是在windows平台下就无法执行.sh文件。以create_mnist.sh为例,用记事本打开.,可以看到如下代码(中文部分是我添加的注解):
#!/usr/bin/env sh
# This script converts the mnist data into lmdb/leveldb format,
# depending on the value assigned to $BACKEND.
#把目录设置为变量
EXAMPLE=examples/mnist
DATA=data/mnist
BUILD=build/examples/mnist
#生成文件后缀
BACKEND="lmdb"
#在屏幕上显示文字
echo "Creating ${BACKEND}..."
# rm -rf 文件夹 该命令将目录及目录中的文件全部删除并且不用确认
# $表示引用目录变量
rm -rf $EXAMPLE/mnist_train_${BACKEND}
rm -rf $EXAMPLE/mnist_test_${BACKEND}
# .bin为编译生成的可执行文件,两个$DATA表示需要转换的文件,
# $EXAMPLE表示转换后的文件的存放目录,--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."
但是.sh的shell代码只能在linux下执行,对应到windows平台上,应该修改成.bat文件。修改之后的代码如下:
:: !\usr\bin\env sh
:: This script converts the mnist data into lmdb\leveldb format,
:: depending on the value assigned to $BACKEND.
::把目录设置为变量
::bat中用set来给变量赋值,set var=abcd
::取消赋值,set var=
set EXAMPLE=examples\mnist
set DATA=data\mnist
set BUILD=Build\x64\Release
::生成文件后缀
set BACKEND=lmdb
::在屏幕上显示文字,通过%%引用变量
echo "Creating %BACKEND%..."
::删除文件夹和文件夹中的文件,并且不需要确认
rd /s /q %EXAMPLE%\mnist_train_%BACKEND%
rd /s /q %EXAMPLE%\mnist_test_%BACKEND%
::执行.exe文件,两个$DATA表示需要转换的文件,
:: $EXAMPLE表示转换后的文件的存放目录,--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."
新建一个txt文件,命名为create_mnist.txt,把代码复制进去。注意,.sh代码里的斜杠都是“/”,但.bat文件里要改成“\”,否则会报错。保存之后把文件后缀改成.bat,在cmd里运行的时候,用start命令执行该.bat文件,效果和linux上运行.sh一样。具体运行步骤,参考caffe的examples/mnist/readme.md。