caffe for windows 训练cifar10 及若干问题
2016-04-23 13:08
399 查看
声明:有部分内容转载至笑笑魔导师
1,准备cifar10数据库
cifar10数据库由60000张32*32 彩色图片 共10类其中50000张训练
10000张测试
下载cifar10数据库:http://www.cs.toronto.edu/~kriz/cifar-10-binary.tar.gz
这是binary格式的,所以我们要把它转换成leveldb格式。
2,转换数据
在../caffe-windows/examples/cifar10文件夹中有一个 convert_cifar_data.cpp将他include到MainCaller.cpp中。如下:
然后重新编译,一次通过。这里会在bin文件夹下产生一个MainCaller.exe,这里把它改名为convert_cifar_data.exe即可。
可以在bin文件夹下新建一个input文件夹。将第一步下载的文件解压到input文件夹中,这样转换时就不用写路径了。如下图所示
cmd进入bin文件夹
执行后,在output文件夹下有cifar_train_leveldb和cifar_test_leveldb两个文件夹。里面是转化好的leveldb格式数据。
当然,也可以写一个bat文件处理,方便以后再次使用。(我是初学者,我也不会。原谅我。。。)
可能出现的问题:
在编译的时候,出现如下错误:convert_cifar_data.cpp(58): error C3861: “snprintf”: 找不到标识符
打开caffe for Windows\examples\cifar10\convert_cifar_data.cpp文件,这里有两个解决办法:
(1):找到snprintf,在前面加上下划线,或者直接双击错误,会弹出这个cpp,其中有3处都需要加下划线,保存,再编译 。
(2):在这个cpp文件前面 #define snprintf _snprintf 即可。
我用的是第二种方法,如下图:
3,求数据图像的均值
如下:在MainCaller中重新编译编译../../tools/comput_image_mean.cpp编译成功后。在这里会出现MainCaller.exe,这里把它修改为ompute_image_mean.exe
接下来就可以求图像mean了。
cmd进入bin。
可能出现的问题:
编译caffe例子cifar10时:出现Assertion failed:dummy_versions_.next_ == &dummy_versions_. file .\db\version_set.cc, line 803或者:db/version_set.cc:806: leveldb::VersionSet::~VersionSet(): Assertion `dummy_versions_.next_ == &dummy_versions_' failed.
遇到这个问题,怎么办?
在网上搜索,可以找到 Cynric的博客 有这么一段话:
在1.15版本中,如果使用NewIterator函数创建了leveldb::Iterator对象而没有delete该对象的话,在程序退出时将会报出如下错误:
db/version_set.cc:806: leveldb::VersionSet::~VersionSet(): Assertion `dummy_versions_.next_ == &dummy_versions_' failed.
根据代码分析,这里assert失败的原因主要是为了防止内存泄露。
参考上面的错误提示,打开源码:(在../tools/compute_image_mean.cpp里面),根据博客的提示,我就在创建lterator后进行delete。大概在源代码的第70行左右的位置。如下图所示:
然后重新编译,就可以解决了。
4,训练cifar网络
在.../examples/cifar10文件夹里已经有网络的配置文件,我们只需要将cifar_train_leveldb和cifar_test_leveldb两个文件夹还有mean.binaryproto文件拷到cifar10文件夹下。修改cifar10_quick_train.prototxt中的source: "cifar-train-leveldb" mean_file: "mean.binaryproto"
和cifar10_quick_test.prototxt中的source: "cifar-test-leveldb".(修改路径,使得其读取路径正确即可)
mean_file: "mean.binaryproto"就可以了,
后面再训练就类似于MNIST的训练。写一个train_quick.bat,内容如下:
copy ..\\..\\bin\\MainCaller.exe ..\\..\\bin\\train_net.exe SET GLOG_logtostderr=1 "../../bin/train_net.exe" cifar10_quick_solver.prototxt pause先编译一遍 train_net.cpp
运行train_quick.bat
5 运行结果
附录:
这里我的笔记本显卡太差,功能跟不上。然后,就直接阵亡了。所以,我没有出来这个结果。这里是网上借的图。。。。
----------------------------------------------------------
-----------我要买电脑-------------
----------------------------------------------------------
所以劳烦各位能赞助点。。。。
相关文章推荐
- Download Fedora 16 CD / DVD ISO
- 升级Xcode7.3出现Cannot create __weak reference in file using manual reference counting 解决方法:
- html5背景视频使用总结
- 《day17_String_StringBuffer》
- 拿到阿里,网易游戏,腾讯,smartx的offer的过程 (转)
- jsp页面报 $ is not defined
- javascript设计模式--Builder
- 还原JavaScript的真实历史~
- JavaScript类型总览(图)
- 前端要给力之:代码可以有多烂?
- 基础DOM和CSS操作(三)
- referrer地重要性
- javascript 传参练手
- JS百度分享栏
- 利用nodejs搭建server端
- VS2013将BCGControlBar Professional v.22.1 Retail库添加到静态MFC项目中
- 前端经常使用插件使用文档 以及demo
- AngularJS vs. jQuery,看看谁更胜一筹
- bootstrap editable 动态改变列的编辑状态
- 点滴收集JSP、HTML兼容头部信息,以及针对各种浏览器做相应嵌入兼容信息