十分钟跑起卷积神经网络(Windows+CPU)

时间:2021-07-17 00:13:42

学习、使用卷积神经网络已经挺久了,期间一直在基于贾扬清大神的Caffe框架来研究别人的模型,抑或是在无聊的时候以近似于算命一样的方式,眼睛微闭,摇头晃脑,口中不时漏出几个音节,半晌便DIY出一个自认为改进颇多的模型,然后去跑一下,当然结果是非常惨淡的(要不然我就直接发论文了哪有这么闲还来写博客。。。),从这个过程中,我深刻地体会到了“前人栽树后人乘凉”这句话的正确性,,虽然贾大神这个前人也不比我等大上几岁。今天听说贾大神宣布了最新的可以在移动设备上进行训练和测试的Caffe框架,心想我知道的这点东西可能很快就要过时了,同时也考虑到一直想开一个博客装装逼,所以就把最近的所学所思拿上来写一写,争取能写到我坚持写完一个比较简陋的CNN框架,因为才疏学浅,我的希望仅仅是能让非计算机专业的同学能学会用这个框架,然后或许能写一个属于自己的非常简陋的框架,我边学边写,您边看边吐槽就行。

这个系列的第一篇文章主要是想从应用层面去大致地介绍一下这个伟大的框架,和别的一些教程不同,我所介绍的这一种应用方法不需要Linux,不需要GPU(这样会慢一点,不过还是先跑起来再考虑怎么优化咯,重要的是这样会便宜一点),仅需要windows系统以及CPU即可,是真正的十分钟跑起卷积神经网络,我在刚接触Caffe的时候,在配置环境和硬件问题上浪费了太多的时间,希望记录下来,各位以后不用再走弯路。

CNN基础知识:https://zhuanlan.zhihu.com/p/22038289?refer=intelligentunit(没基础的还应该另外了解一些神经网络算法的基础知识,例如前馈传递,BP算法等,有基础的也推荐再通过这个链接巩固一番,以下的文章会假设你对于CNN有比较全面和扎实的理解)

所需系统环境:windows7 sp1及以上系统,win7 sp1以下的会不会有什么错误我不知道,对了,是64位系统哦~

其他环境:Visual Studio 2013,cygwin 2.871(其他版本应该也可以,主要是用来在windows系统上模拟一个非常简易的linux环境,因为应用上只会用到一些很基础的命令,所以早一点的版本也无所谓)

Windows版Caffe框架:https://github.com/Microsoft/caffe

首先,需要将windows版本的Caffe框架下载到本地,随便下到哪都行,然后随便解压缩到哪都行,我解压完之后,Caffe框架的根目录就是H:\caffe-master\caffe-master。解压完之后,我们可以很明显地发现,这个框架还是一块未编译的“生肉”,是不能直接使用的,所以我们需要利用VS2013对其进行编译,但是在此之前,还有一个步骤,因为我们是小穷逼,我们没有动辄上万的GPU,但是贾大神所在的土豪实验室有用不完的GPU,所以这里默认的还是GPU模式的框架,我们需要对这一点进行修改,具体方式就是修改根目录中windows文件夹中的CommonSettings.props.example文件,具体修改方式是:

一、将该文件重命名为CommonSettings.props;

二、将该文件中的

<CpuOnlyBuild>false</CpuOnlyBuild>
<UseCuDNN>true</UseCuDNN>

改为

<CpuOnlyBuild>true</CpuOnlyBuild>
<UseCuDNN>false</UseCuDNN>

至于这里面的CuDNN是什么,之后会提到,现在先不用了解~

三、保存该文件。

在将框架改为CPU模式之后,就可以双击打开windows文件夹中的Caffe.sln文件,然后在VS2013中点击最上方的生成->重新生成解决方案即可,需要注意的是,进行这一步之前最好将Debug模式改成Release,就像这样。

经过一段时间的编译,在VS2013下端的显示台上会显示生成成功的信息,这时候这个框架就编译完成了,而生成的可执行文件caffe.exe的位置在根目录中的Build\x64\Release之中,同时还会生成一大堆的依赖包和各类库,这里各位先不用在意,今天的任务主要会和caffe.exe发生接触。

编译好了框架之后,可以说是万事俱备,只欠数据集和网络模型了,在第一次的尝试中,CSDN的卜居大神所推崇的使用Yann LeCun大神(我习惯于说成杨乐村大神)提出的LeNet-5网络模型来进行对MNIST数据集的学习是非常适合的。

MNIST数据集是一个手写数字的数据库,所以可想而知,这次训练的目的是让你的计算机学会“看懂数字”。

MNIST数据集在哪里获取呢?Caffe框架已经为你想到了这一点,所以在H:\caffe-master\caffe-master\data\mnist中的get_mnist.sh脚本就是用来帮你下载这个数据集的,理论上,这个脚本的运行需要Linux的环境支持,但是我们现在用的是windows环境,怎么办呢?很简单,还记得之前所说的cygwin吗?没错,就用它!有关cygwin的安装和配置可以看看这个。