C++卷积神经网络实例(一)
跟着这位博主来学习C++的卷积网络实例,因为作者一直在更新代码,所以新的代码和这位博主的分析有所不同;这位博主写的东西太泛了,没有讲到实质,
可以参考下他分析的类与类之间的关系图。。
前四节:http://blog.csdn.net/u013088062/article/details/50839015
http://blog.csdn.net/u013088062/article/details/50850459 (在运行代码时,新的代码不需要添加各种库就可以运行了,非常方便)
http://blog.csdn.net/u013088062/article/details/50859012 讲的是层间的继承关系,对整体理解代码很有帮助。
http://blog.csdn.net/u013088062/article/details/50866217分析了卷积层convolutional_layer这个类,不过新的代码有了点变化。
首先是变量的变化,新增了变量padding,解释是四舍五入策略,当其类型是valid时,只使用输入的有效像素,输出大小为output-size = (in-width - window_size + 1) * (in-height - window_size + 1) * out_channels;当其类型为same时,增加zero-padding ,使得输出大小为 output-size = in-width * in-height * out_channels。
构造函数的变化,新的代码一共定义了四个构造函数,其实区别并不大。前两个和后两个构造函数唯一的区别就是在传递卷积核大小时的方式不同。
对于前两个构造函数,采用的是默认的全零矩阵,即全连接模式。
后两个构造函数中connection_table常量人为指定与前一层的连接方式,
另外新的代码中,convolutional_layer类是公有继承自layer类的
首先看类layer.h文件。其中定义了两个类,虚基类layer_base,以及子类layer。
layer_base中定义了大量的初始化函数