AlexNet原文
之前有看过一些自己方向的论文,但是总体还是属于一种蒙的状态,然后觉得还是有必要把一些Base paper拿出来看看,毕竟基础很重要嘛, 写写随笔谈谈收获。
上面这个就是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图像识别代码