【caffe-Windows】关于LSTM的使用-coco数据集

前言

建议大家使用Linux,因为Linux下的配置就没这么麻烦,各种make就行啦。Linux用户请绕道,因为此博客只针对Windows,可能比Linux麻烦很多倍。

在caffe-Windows新增LSTM层以后,相信很多人和我一样很好奇如何使用这一层,使用参数都有什么。找了三四个代码,但是大部分配置都出现了问题,因为它们都是基于Linux的,然而逮着一个折腾,还是折腾出来一个了。

源码GitHub:https://github.com/jeffdonahue/caffe/tree/recurrent

源码云盘:链接:http://pan.baidu.com/s/1kUCklO7 密码:j6ot

源码说明:https://github.com/BVLC/caffe/pull/2033

资料来源:https://groups.google.com/forum/#!topic/caffe-users/7pt6V_IC8TE

第一步

安装一些必要的东西:

①anaconda(Python2.7),用于执行内部Python文件进行数据集制作

官网:https://www.continuum.io/downloads

云盘:链接:http://pan.baidu.com/s/1c1Ydlio 密码:60ph

②Git(Windows):用于运行sh文件

官网:https://git-scm.com/

云盘:链接:http://pan.baidu.com/s/1jHNHAYU 密码:qjmb

③MinGW:用于执行make命令

云盘:链接:http://pan.baidu.com/s/1gfl4lCR 密码:6q7c

安装方法:http://blog.csdn.net/pdcxs007/article/details/8582559

其实可以不用看安装方法,直接傻瓜式安装,安装时,注意选择“download latest repository catalogues”以及“C和C++compiler”即可。

【注】这三个工具都没什么安装技巧,各种下一步即可。

第二步

下载了caffe-recurrent与我们加完LSTM的caffe-Windows比较一下,以确定还需要加哪些层到caffe-Windows中去。

然而发现caffe-recurrent中并不存在\include\caffe\layers并不存在,那就先不管了;再看两个代码中的\src\caffe\layers,发现也没啥可比性,那也暂时丢那不看,直接对比prototxt的序列化接口,也即caffe.proto,工具MATLAB。好像也没啥改的。那就不管了。

【注】没啥改的不是说完全一样,而是说这一个必须进行核对的一步中,需要修改的参数基本都在caffe-Windows的caffe.proto中定义了,虽然与caffe-recurrent的不一样,但是影响不大。

第三步

执行数据集的转换,但是在此之前,请确定“前言”的三个工具以安装无误,安装完git以后,有关sh的文件图标会更改为bat的图标,表示可以双击执行。以下步骤中严格注意路径的跳转。

现将caffe-recurrent解压到一个地方,我放到了caffe-DEV中了,如下


接下来进入到E:\CaffeDev\caffe-recurrent\data\coco对数据集进行处理


首先获取“train/val/test splits”,但是由于我们的windows没有安装wget,那么就手动下载吧

get_coco2014_aux.sh中的网址数据:http://dl.caffe.berkeleyvision.org/coco2014_aux.tar.gz

get_coco2014_aux.sh中的网址网盘:链接:http://pan.baidu.com/s/1gf1dskj 密码:b6fg

直接解压到当前文件夹E:\CaffeDev\caffe-recurrent\data\coco即可,类似于


然后下载“official COCO tool”,由于是git下载,所以直接双击download_tools.sh即可下载,如果网速慢或者其它原因,也可以去网址下载

COCOtool官网:https://github.com/pdollar/coco

COCOtool网盘:链接:http://pan.baidu.com/s/1nuKTC3B 密码:r588

解压到当前文件夹,并且将coco-master重命名为coco。


【注】如果有兴趣,可以看看置顶博客“网站收集”中关于Windows下的wget的安装方法,很简单。

接下来一步很烦人,很容易出错:

我们主要目的是编译这个COCOtool的PythonAPI包,所以按照说明,跳入到PythonAPI文件夹之后,直接使用这句话:

python setup.py install
这一步在Linux下毫无问题,但是Windows下错误百出,一定要自己慢慢解决。

我主要遇到的问题是两个:

①python Unable to find vcvarsall.bat

解决方法:添加系统环境变量——变量名:VS90COMNTOOLS   变量值:%VS120COMNTOOLS%;


如果还是不行,继续更改C:\Users\Bingo\Anaconda2\Lib\distutils下的msvc9compiler.py的243行为,严格注意对齐,这个地方有坑,注意对齐,不要用tab对齐,用空格

toolskey = "VS120COMNTOOLS"


②error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio 12.0\\\VC\\BIN\\cl.exe"' failed with exit status 2

或者是这个“Command line error D8021: invalid numeric argument '/Wno-deprecated”,它俩一起出现的。

这个问题也比较麻烦,折腾最久。差点忘记是怎么解决的了,有可能读者运行不会出现这个问题,但是我就是遇到,没辙。

我的解决办法好像比较奇葩,没啥道理而言


删掉横线部分以后,命令行运行python setup.py install


接下来再恢复删掉的内容,再来一次python setup.py install,然后就好了。

不过为了与readme保持一致

To install:
-For Matlab, add coco/MatlabApi to the Matlab path (OSX/Linux binaries provided)
-For Python, run "make" under coco/PythonAPI
-For Lua, run “luarocks make LuaAPI/rocks/coco-scm-1.rockspec” under coco/
那就运行make编译Makefile吧,前面已经安装了git和make了,直接对着文件夹E:\CaffeDev\caffe-recurrent\data\coco\coco\PythonAPI右键调出Git Bash Here,进行make

这样就生成了一些东西,也不知道打包能不能直接用,毕竟是编译的,还是上传一下吧

pycocotools网盘:链接:http://pan.baidu.com/s/1o7Opvg2 密码:31xc

第四步

制作数据集:

①下载官网的coco数据集

数据集太大了,就不百度云了。下载2014就行了,因为本文主要是看看lstm的写法和运行,而非看结果。当然训练好应该有效果的

coco官网:http://mscoco.org/dataset/#download


我把annotation上传了一下:链接:http://pan.baidu.com/s/1slAStNf 密码:kwi6

然后随便哪里建立一个images文件夹,并且将三个文件解压进去。注意下图的三个文件夹中均为图片或者json,没有任何其他文件夹,不要解压错了。


②更改相关路径E:\CaffeDev\caffe-recurrent\examples\coco_caption\coco_to_hdf5_data.py的12~14行修改为

COCO_PATH = './data/coco/coco'
# COCO_TOOL_PATH = '%s/PythonAPI/build/lib/pycocotools' % COCO_PATH
COCO_TOOL_PATH = '%s/PythonAPI/pycocotools' % COCO_PATH
#COCO_IMAGE_ROOT = '%s/images' % COCO_PATH
COCO_IMAGE_ROOT = 'E:/COCO/images'
第216~217行修改为
#COCO_ANNO_PATH = '%s/annotations/captions_%%s2014.json' % COCO_PATH
#COCO_IMAGE_PATTERN = '%s/images/%%s2014' % COCO_PATH
COCO_ANNO_PATH = '%s/annotations/captions_%%s2014.json' % COCO_IMAGE_ROOT
COCO_IMAGE_PATTERN = '%s/%%s2014' % COCO_IMAGE_ROOT
COCO_IMAGE_ID_PATTERN = 'COCO_%s2014_%%012d.jpg'
在E:\CaffeDev\caffe-recurrent下新建bat文件splitdata.bat,内容如下

python ./examples/coco_caption/coco_to_hdf5_data.py
pause
运行出现
E:\CaffeDev\caffe-recurrent>python ./examples/coco_caption/coco_to_hdf5_data.pyTraceback (most recent call last):File "./examples/coco_caption/coco_to_hdf5_data.py", line 21, in <module>from coco import COCOFile "./data/coco/coco/PythonAPI/pycocotools\coco.py", line 55, in <module>from . import mask as maskUtils
ValueError: Attempted relative import in non-packageE:\CaffeDev\caffe-recurrent>pause
请按任意键继续. . .
将E:\CaffeDev\caffe-recurrent\data\coco\coco\PythonAPI\pycocotools\coco.py的第55行修改为

#from . import mask as maskUtils
import mask as maskUtils
保存以后再次运行splitdata.bat即能划分数据了

【注】此步骤强烈建议关注路径的修改,如果出现XXXdoesn't exist的问题,一定是路径问题,请自行核对解决。
切分完成的标志是


第五步

最后一步训练过程了,在E:\CaffeDev\caffe-recurrent下建立一个train_language_model.bat,内容为

E:\CaffeDev\caffe-master\Build\x64\Release\caffe train -solver=./examples/coco_caption/lstm_lm_solver.prototxt
pause

由于GPU借走了,所以只能用CPU模式了。修改E:\CaffeDev\caffe-recurrent\examples\coco_caption\lstm_lm_solver.prototxt第18行为

solver_mode: CPU
最后运行train_language_model.bat就可以训练咯,由于木有GPU,我就不训练看结果了,有兴趣按照此处的 步骤慢慢走一遍剩下几个模型的训练。等有时间把模型训练了,再看看结构是什么样子。博客后续更~~~~


第六步

分析此模型,用netscope画出网络结构看看


提取出其中层LSTM看看写法:

layer {name: "lstm1"type: "LSTM"bottom: "embedded_input_sentence"bottom: "cont_sentence"top: "lstm1"recurrent_param {num_output: 1000weight_filler {type: "uniform"min: -0.08max: 0.08}bias_filler {type: "constant"value: 0}}
}
这个于CNN结构很像,只不过输入需要两层,如果需要使用caffe的LSTM的话,完全可以研究一下这一模型,便可以实现自己的数据集的训练。

【注】本文只是为了避免纸上谈兵,实际找了一个模型进行调试输出,但是模型的最终结果并没有运行出来(CPU太慢),而且结果与本文主旨无关。本文主要是为了看到一个能够正确训练的关于LSTM的模型,进而进行后续的LSTM书写分析。如若有误请多多指正,谢谢大家。

下一篇博文可能会研究一个小例子,更加简明,参考地址先贴出来:http://christopher5106.github.io/deep/learning/2016/06/07/recurrent-neural-net-with-Caffe.html

最后再强调一遍:路径、路径、路径

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/246666.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【caffe-Windows】关于LSTM的简单小例子

前言 这里主要是看到了一个简单的LSTM例子&#xff0c;比上一个coco简单很多&#xff0c;所以在这里记录一下&#xff0c;便于后续的分析&#xff0c;参考博客在上一篇文章的末尾提到过&#xff1a;Recurrent neural nets with Caffe 需要说明的是这个例子也并非原原本本的使…

概率有向图模型

1. 前言 主要参考书籍《深度学习导论及案例分析》、维基百科“贝叶斯网络”、老笨妞的博客、PRML中文翻译&#xff0c;重点还是概念的掌握和几个小理论的推导&#xff0c;比较枯燥。加入了自己的一些简单理解。 个人感觉概率有向图模型最大的意义在于&#xff1a;一个特定的有…

概率无向图模型

1. 前言 前面看了概率有向图模型&#xff0c;必然对无向图模型也要研究一下。而且这个概率无向图模型对学习RBM有很大的帮助&#xff0c;它关系到能量函数的来源&#xff0c;所以还是看看吧。参考资料依旧是概率有向图模型中参考的三个资料。 有向图将一组变量上的联合概率分…

softmax理论及代码解读——UFLDL

前言 看了各种softmax以后迷迷糊糊的&#xff0c;还是研究一下UFLDL的教程稳点。当然还是得参考挺多教程的&#xff1a;UFLDL-softmax 、Softmax的理解与应用 、Logistic 分类器与 softmax分类器 、详解softmax函数以及相关求导过程 、Exercise:Softmax Regression 。 【UFLDL…

二值RBM与实值RBM理论及代码解读

1. 前言 虽然推导过二值形式的RBM&#xff0c;但是对于可见层为实值的输入还是半知半解的。最近写个深度学习相关综述&#xff0c;看了一些关于RBM的文献&#xff0c;这里做一下对比总结。但是不倾向于对实值RBM的推导&#xff0c;而是相关代码的实现。 2. RBM回顾 RBM是具有…

【caffe-Windows】添加工程-以classification为例

前言 兴趣所向&#xff0c;研究一下如何在caffe工程之外建立一个属于自己的工程&#xff0c;这里以分类为例&#xff0c;将classification.cpp提取出来&#xff0c;然后调用相应的三方库和libcaffe.lib进行编译。这里比较建议有一丢丢C功底的同志参考学习&#xff0c;主要涉及…

MKL学习——数学运算库安装调试

前言 最近要用C折腾一些东西&#xff0c;涉及到矩阵运算&#xff0c;看了一下网上推荐的数学库&#xff0c;貌似MKL还是蛮不错滴&#xff0c;放到VS2013里面试试 国际惯例&#xff0c;来波地址 blas, cblas, openblas, atlas, lapack, mkl性能对比 Compiling and Linking I…

MKL学习——向量操作

前言 推荐两个比较好的教程: BLAS (Basic Linear Algebra Subprograms) LAPACK for Windows 命名规范 BLAS基本线性代数子程序的函数命令都有一定规范&#xff0c;便于记忆 <character> <name> <mod> () character 定义的是数据类型 s实数域&#…

【caffe-Windows】识别率批量输出——matlab实现

前言 今天看到群里有人问”用matlab输出测试集的精度“&#xff0c;瞎试了一下&#xff0c;好像还成功了。主要还是依据前面所有在matlab中操作caffe的博客。 这里说一下&#xff1a;classification.m是适用单张图片的精度&#xff0c;类似于classification.exe的功能&#x…

相机矩阵(Camera Matrix)

前言 最近翻阅关于从2D视频或者图片中重构3D姿态的文章及其源码&#xff0c;发现都有关于摄像机参数的求解&#xff0c;查找了相关资料&#xff0c;做一下笔记。 国际惯例&#xff0c;来一波参考网址 透视变换、透镜畸变及校正模型、相机校正(Camera Calibration)、Matlab相…

损失函数梯度对比-均方差和交叉熵

前言 我们都知道在机器学习中&#xff0c;希望算法或者网络收敛更快&#xff0c;有些是对数据预处理&#xff0c;尤其是Batch Normalization&#xff0c;有些是采用不同的激活函数&#xff0c;尤其是Relu激活函数取得了巨大的成功&#xff0c;还有一种加速收敛方法是更换损失函…

如何选择深度学习优化器

前言 转载地址&#xff1a;如何选择深度学习优化器 作者&#xff1a;不会停的蜗牛 CSDN AI专栏作家 在很多机器学习和深度学习的应用中&#xff0c;我们发现用的最多的优化器是 Adam&#xff0c;为什么呢&#xff1f; 下面是 TensorFlow 中的优化器&#xff0c; https://w…

【caffe-Windows】基于Python多标签方法——VOC2012数据集

前言 按照上一篇博客所遗留的话题&#xff1a;多标签分类&#xff0c;进行初步探索&#xff0c;此篇博客针对caffe官网的多分类进行配置&#xff0c;只不过是Python接口的&#xff0c;不过官网在开头说明可以使用HDF5或者LMDB进行操作&#xff0c;只不过Python更加方便罢了 国…

【theano-windows】学习笔记二——theano中的函数和共享参数

前言 上一篇博客中学到了theano中的变量类型&#xff0c;也就是dscalar、dvector之类的, 然后还有一个theano.function和eval函数, 将我们所定义的操作转换成theano可执行的函数&#xff0c;类似于def, 还有就是简单的线性代数运算操作。 在神经网络(NN)中, 我们声明了权重、…

【theano-windows】学习笔记三——theano中的导数

前言 就一个NN而言&#xff0c;包含梯度、偏置、参数更新&#xff0c;而前面第一篇博客学习了theano中符号变量的定义, 第二篇博客学习了变量的随机初始化, 变量之间的互相操作(类似于sigmoid(w∗xb)), 但是参数更新还应涉及到损失函数的偏导计算&#xff0c;这一章节就是看看…

【theano-windows】学习笔记五——theano中张量部分函数

前言 至此感觉应该可以写出一个logistic回归程序了&#xff0c;但是为了达到对theano中张量的更灵活的使用, 还是先看一下thenao.tensor对变量都提供了哪些操作&#xff0c;最全的文档戳这里或者这里, 这里就稍微摘取一点自我感觉以后可能用得多的函数 基本张量函数 创建张量…

【theano-windows】学习笔记六——theano中的循环函数scan

前言 Scan是Theano中最基础的循环函数, 官方教程主要是通过大量的例子来说明用法. 不过在学习的时候我比较习惯先看看用途, 然后是参数说明, 最后再是研究实例. 国际惯例, 参考网址 官网关于Scan的11个例子 官网更全面的介绍 简介 用途 递归的一般形式, 可以被用于循环s…

【theano-windows】学习笔记九——softmax手写数字分类

前言 上一篇博客折腾了数据集的预备知识, 接下来按照官方的Deep learning 0.1 documentation一步步走, 先折腾softmax, 关于softmax和logistic回归分类的联系, 我在之前写过一个小博客 国际惯例, 参考博客走一波: Classifying MNIST digits using Logistic Regression soft…

【theano-windows】学习笔记十——多层感知机手写数字分类

前言 上一篇学习了softmax, 然后更进一步就是学习一下基本的多层感知机(MLP)了. 其实多层感知机同时就是w*xb用某个激活函数激活一下, 得到的结果作为下一层神经元的输入x, 类似于 output⋯f3(f2(f1(x∗w1b2)∗w2b2)∗w3b3)⋯output=\cdots f^3(f^2(f^1(x*w^1+b^2)*w^2+b^2)*…

【theano-windows】学习笔记十一——theano中与神经网络相关函数

前言 经过softmax和MLP的学习, 我们发现thenao.tensor中除了之前的博客【theano-windows】学习笔记五——theano中张量部分函数提到的张量的定义和基本运算外, 还有一个方法称为nnet, 如果自己实现过前面两篇博客中的代码就会发现用到了theano.tensor.nnet.sigmoid和thenao.te…