c++卷积神经网络代码 卷积神经网络算法代码matlab_matlab卷积神经网络代码


AlexNet原文

之前有看过一些自己方向的论文,但是总体还是属于一种蒙的状态,然后觉得还是有必要把一些Base paper拿出来看看,毕竟基础很重要嘛, 写写随笔谈谈收获。


c++卷积神经网络代码 卷积神经网络算法代码matlab_池化_02


上面这个就是CNN的网络架构,跑的数据集是ImageNet

那么我们现在就来“剖析”一下,把deep Learning推上热门的CNN,因为Alex团队用了两个GPU跑,所以图片中的架构被分为两半,而我们下面放在一起进行讨论

Step 1:

输入图片数据(227 * 227 * 3),可能有人会有疑问上图中的大小是(224 * 224 * 3 )上图中的(224 * 224 * 3)应该是错的,为什么错呢,因为不符合公式,不符合逻辑,不符合常理,没道理呀,哈哈哈,所以也就是


Input


计算卷积后的图片大小的公式如下



h


Step 2:

对输入的图片进行第一层卷积

如论文中的图片,利用[11 * 11 * 3]的核对图片进行卷积,之后对卷积后的图片进行activation,normalization,和pooling, activation,normalization不会改变图像大小故不变。


Convolution


Step 3:

第一层的池化输出进行第二层卷积

采用了 'SAME'填充的方式,'SAME'也就是保存图片大小不变进行卷积


Convolution


Step 3:

第二层的池化输出进行第三层卷积

第三层卷积不再进行池化


Convolution


Step 4:

第三层的激活输出进行第四层卷积

第四层卷积同样不再进行池化


Convolution


Step 5:

第四层的激活输出进行第五层卷积


Convolution


Step 6:

第五层的池化层输出进行第六层全连接

平铺开我们第五层的池化层与第六层的4096个神经元进行全连接


全连接
fully_connect6 = [6 * 6 * 256, 4096]
fully_connect6 = relu(fully_connect6 )
dropout(fully_connect6)   #dropout随机失活,防止过拟合的一种方式


Step 7:

第六层的全连接输出进行第七层全连接

第六层4096个神经元与第七层的4096个神经元进行全连接


全连接


Step 8:

第七层的全连接输出进行第八层softmax输出层

第七层4096个神经元与第八层的1000个神经元进行全连接


输出层


因为有1000类所以输出为1000,利用softmax进行评分。

本人基于tensorflow搭了一个拙劣的cnn 跑了MNIST和cifar-10,Accuracy不高,只为通过代码更好的理解CNN,有兴趣的话点击下方查看代码:

MNIST手写体数字识别代码

cifar-10图像识别代码