1.下载cifar10数据库:http://www.cs.toronto.edu/~kriz/cifar-10-binary.tar.gz
2.下载的cifar10数据库是6个bin格式的文件,需要使用caffe for windows里的转化工具将bin格式的数据转化为leveldb格式。在../examples/cifar10文件夹下有个convert_cifar_data.cpp,将其include到MainCaller.cpp文件中,如下图所示
经过编译在../bin目录下产生MainCaller.exe可执行文件。注意,在visual studio 2012环境下,出现了错误:error C3861: “snprintf”: 找不到标识符,如下图所示:
主要原因是在vs环境下,snprintf被_snprintg替代。解决方法:在convert_cifar_data.cpp的开头加上以下语句:
<pre name="code" class="cpp">#if _MSC_VER
#define snprintf _snprintf#endif
如下图,即可通过编译
在../bin目录下建立input和output两个文件夹,将cifar-10-binary.tar.gz解压后得到的文件夹cifar-10-batches-bin放到input文件夹下。打开cmd,切换到../bin目录下
会在output文件夹下生成cifar-test-leveldb和cifar-train-leveldb两个文件夹。
3.接下来,求图像数据的平均值,在MainCaller.cpp中include文件../../tools/compute_image_mean.cpp文件,编译成功后,求mean。cmd进入../bin目录,运行MainCaller.exe output/cifar-train-leveldb mean.binaryproto命令,运行过程中会出现如下错误:
在网上找到消息,看了这篇博客:http://www.myexception.cn/image/1952480.html
解决方法:在../../tools/compute_image_mean.cpp文件70行左右添加语句
delete it;
即可在../bin目录下生成mean.binaryproto文件。
4.接下来就可以训练cifar网络了。将cifar-test-leveldb和cifar-train-leveldb两个文件夹以及生成的mean.binaryproto拷贝到../examples/cifar10文件夹下。修改cifar10_quick_train.prototxt和cifar10_quick_test.prototxt文件中的source和mean_file分别为
source: "cifar-train-leveldb"
mean_file: "mean.binaryproto"
source: "cifar-test-leveldb"
mean_file: "mean.binaryproto"
在MainCaller.cpp中include ../../tools/train_net.cpp文件,编译即可训练cifar网络。可以写一段train.bat语句,方便运行
SET GLOG_logtostderr=1
"../../bin/MainCaller.exe" cifar10_quick_solver.prototxt
pause
运行train.bat语句即可。