深度学习入门之第五章:经典卷积神经网络( 三 )


(2)第一个池化层 。 接着进行了2×2的最大值池化 , 因为最大值池化不消耗任何参数 , 所以参数个数为0 。
(3)第二个卷积层 。 接下来的卷积层 , 卷积核的大小仍为5×5 , 总共有16个卷积核 , 请注意 , 这里的输入矩阵有6个通道 , 因此权值参数个数应该是6×5×5=150 , 再加上一个偏置参数 , 一共是151个参数 , 总共16个卷积核 , 所以这层消耗的总参数个数为151×16=2416 。
(4)第二个池化层 。 这里仍然是一个最大值池化 , 同样不消耗任何参数 。
(5)第一个全连接层 。 接下来将5×5×16这个矩阵拉直成一个长度为400的向量 , 从这个位置开始 , 建立了第一个全连接层 , 总共有120个输出节点 , 首先需要400×120=48000个权重 , 因为每个节点又有一个偏置参数 , 所以参数总个数为48000+120=48120 。
(6)第二个全连接层 。 接下来第二个全连接层共有84个输出节点 , 同理 , 需要的参数个数为120×84+84=10164 。
(7)输出层 。 最后一层 , 输出节点10个 , 参数个数为84×10+10=850 。
至此 , LeNet-5各层的参数个数梳理完毕 , 这应该是初学者的一项技能 。 程序运行出来的模型概要表如图5.2所示 。
深度学习入门之第五章:经典卷积神经网络文章插图
图5.2 LeNet-5模型概要表
04
LeNet-5编译运行
模型编译通过model.compile实现 , 首先需要告诉TensorFlow这是一个多分类问题 , 它的损失函数是categorical_crossentroy , 这等价于要优化的是一个对数似然函数 。 选择Adam优化算法 , 需要监控预测精度 , 因此定义matrics为accuracy 。
模型拟合通过model.fit实现 , 其中训练数据集是XO,Y00 , 注意这里是one-hot编码形式的Y00 , 不是Y0 , 进行10个epoch循环 , batch size为200 , 测试数据集为X1 , YY1 。 从运行结果可以看出 , LeNet-5在测试集上的外样本精度很快可以达到99%以上 , 这已经是一个非常高的准确率了 。 具体如代码示例5-4所示 。
代码示例5-4:LeNet-5模型编译与拟合
1model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=[' accuracy'])2model.fit(X0, YY0, epochs=10, batch_size=200, validation_data=http://kandian.youth.cn/index/[X1,YY1])输出:
深度学习入门之第五章:经典卷积神经网络文章插图
5.2 AlexNet
AlexNet是2012年ImageNet竞赛冠军获得者Hinton和他的学生Krizhevsky Alex设计的[1] , 该模型Top5[2]预测的错误率为18.9% , 远超第二名 , 是ImageNet竞赛中第一个使用卷积神经网络的参赛者 。 在这之后 , 更多更深的卷积神经网络被提出 , 比如后面要介绍的VGG和GoogLeNet等 。
5.2.1
AlexNet网络结构
AlexNet处理的是1 000分类问题(详情参阅ImageNet竞赛) , 它采用8层神经网络 , 其中包含5个卷积层和3个全连接层(其中有3个卷积层后面加了最大值池化层) , 包含6亿3000万个连接 , 6 000万个参数和65万个神经元 。 图5.3为AlexNet的网络结构图 。 下面介绍AlexNet网络结构的各层 。
AlexNet的输入是一个227×227×3的三通道彩色图像 。
(1)第一层是卷积层 , 有96个卷积核 , 大小为11×11 , 步长为4 , 进行valid卷积 , 使用ReLU激活函数 , 经过卷积之后 , 像素大小的计算过程为:227-11=216 , 216/4=54 , 54+1=55 , 输出的像素为55×55 。
(2)第二层是池化层 , 池化层的大小为3×3 , 步长为2 , 进行valid最大值池化 , 输出像素矩阵大小的计算为:55-3=52 , 52/2=26 , 26+1=27 , 因此池化之后的像素为27×27 , 通道数为96不改变 。 其他层的推导以此类推 , 具体的网络结构如下 。