C++卷积神经网络实例:tiny_cnn代码详解(2)——代码试运行

来源:互联网 发布:爱五子棋打谱软件 编辑:程序博客网 时间:2024/06/03 08:47

在这篇博客中主要是对tiny_cnn的工程代码进行调试运行,毕竟目前对于我来说这是一个相对陌生的代码文件,拿到手里首先想到的自然是检验一下这个代码的正确性,能够顺利运行得到预期的结果之后,再开始对代码进行深度的剖析。

  一、现在tiny_cnn

  在上一篇博客中已经提供了项目下载地址,这里只需下载之后再解压,得到如下文件:

  项目文件中主要包含代码和训练样本两部分,data文件夹中存放了测试程序用的Mnist数据库:

  这里的训练样本是idx3-ubyte类型,在之后的博文中会专门介绍这类文件的读取,这里作者已经将数据库划分为测试样本集合训练样本集,并制作好了对应的标签矩阵,在调试程序的过程中只需要直接调用数据库即可,非常方便。

  在tiny_cnn文件夹下存放了该深度学习框架所用到的所用文件:

  这里框架的所有内容都是用的.h文件形式写的,刚开始可能会有点疑惑,不过开始调试代码的时候就会发现,作者在实现过程中全部用的模板(template),并且关键的代码都用的Lamda表达式,因此都以头文件声明的形式给出,在实际调试的过程中只需将这些头文件包含进当前的工程中即可。

  二、构建测试工程

  下载完项目文件之后,接下里开始构建实际工程来运行代码。在“vc”文件夹下有对应的工程文件(.vcxproj):

  不过这里我们并不直接使用作者给出的工程测试文件,而是采用自己建立工程,添加tiny_cnn框架的模式。具体方法很简答,首先按正常的方式新建一个win32控制台应用程序,然后将tiny_cnn文件夹下对应的所有头文件复制到工程目录下,并在VS中将它们添加到当前工程中:

  我们这里将工程命名为“MyTinyCnn”,接下来需要做的就是导入测试代码并替换当前的主函数。由于目前对这个卷积神经网路框架还不是很了解,手动编写测试代码来调用这个函数自然是不现实的,好在作者在文件中已经提供了一个测试代码文件,位于example文件夹下:

  接下来需要做的就是将这个cpp文件拷贝到当前工程路径下,改名为MyTinyCnn.cpp并替换现有的MyTinyCnn.cpp文件。OK,测试工程搭建完成。

  三、配置相关第三方库

  在完成测试项目MyTinyCnn的组建之后,接下来需要对项目进行相关配置,以便使得代码能够真正的跑起来。

  3.1、添加预编译头

  这算是一个个人习惯吧,我在使用VS新建工程的时候一般都喜欢加入预编译头这个东西,因此在这里首先需要向MyTinyCnn.cpp主程序文件中添加预编译头代码:

  3.2、配置opencv

  tiny_cnn是基于opencv的纯C++深度学习框架,因此需要配置opencv库,由于在之前的博客中已经详细的介绍过了OpenCv库的配置方法,这里不再赘述,具体参见:C++开发人脸性别识别教程(3)——OpenCv配置和ImageWatch插件介绍。

  3.3、配置TBB库

  TBB是Intel公司开发的并行编程得开源库,在tiny_cnn选择性的用到了这个开源库,因此需要实现配置TBB,当然在实际运行中我们可以选择关掉并行编程,具体开关标志位位于config.h文件中:

  至于有关TBB库的配置,网上有很多资源,如果在配置过程中遇到什么问题,可以给我发邮件交流。

  3.4、配置boost库

  tiny_cnn依赖C++的Boost库,同样需要对Boost库进行配置,Boost库作为C++标准库的扩展,里面封装了很多高效的C++算法,具体配置方法参见网络资源即可。

  3.5、修改数据库路径

  由于我们移动了main.cpp文件,可能会导致原有的训练数据库路径不可用,因此这里可以直接将路径改为全路径:

  四、运行

  配置到此时,程序应该能够正常运行,F5调试运行,程序正常执行:

  理想的运行结果应该如下:

  OK,程序正常运行,没有问题,在接下来的博客中开始正式对其进行分析。

  五、注意事项

  1、程序的运行结果

  这部分测试程序在内存小、没有启用并行加速的情况下运行速度较慢,需要耐心等待,其实个人觉得也没有必要一直等,只要程序调通,能够正常运行,就开始着手进行代码分析即可。

  2、github咨询

  tiny_cnn的作者十分热心,一直坚持不懈的在其github主页上对tiny_cnn的代码进行维护,如果大家有什么问题的话推荐直接去其项目主页上提问,作者一般都会回答的

  3、TBB和Boost的配置

  这两个库的配置网上介绍的都很清楚,因此没有在博客中再次进行详细的介绍,一般网上资源比较多的知识我在博文中都会简要叙述,望大家理解,有问题可以发邮件沟通。

0 0