开篇的这张图代表ILSVRC历年的Top-5错误率,我会按照以上经典网络出现的时间顺序对他们进行介绍,同时穿插一些其他的经典CNN网络。
这是卷积神经网络学习路线的第六篇文章,前面五篇文章从细节,超参数调节,网络解释性方面阐述了卷积神经网络。从这篇文章开始,卷积神经网络学习路线就开始代领大家一起探索从1998年到2019年的20多种经典的网络,体会每种网络的前世今身以及包含的深邃思想。本节就带大家来探索一下LeNet。
LeNet是CNN之父Yann LeCun在1998提出来的,LeNet通过巧妙的设计,利用卷积、参数共享、下采样等操作提取特征,避免了大量的计算成本,最后再使用全连接神经网络进行分类识别,这个网络也是近20年来大量神经网络架构的起源。
LeNet-5是LeNet系列最新的卷积神经网络,设计用于识别机器打印的字符,LeNet-5的网络结构如下图所示。
我们可以具体分析一下:
batch_size
。conv1
所用的卷积核尺寸为,滑动步长为,卷积核数目为,那么经过这一层后图像的尺寸变成,输出特征图的维度即为。max pooling
,池化操作后,图像尺寸减半,变为,输出特征图维度为。conv2
的卷积核尺寸为,步长,卷积核数目为,卷积后图像尺寸变为,输出特征图维度为。pool2
池化核尺寸为,步长,这是没有重叠的max pooling
,池化操作后,图像尺寸减半,变为,输出矩阵为。pool2
后面接全连接层fc1
,神经元数目为,再接relu
激活函数。fc2
,神经元个数为,得到维的特征向量,用于个数字的分类训练,再送入softmaxt
分类,得到分类结果的概率output
。我们来看一个keras
的LeNet-5
实现,
def LeNet():
model = Sequential()
model.add(Conv2D(32,(5,5),strides=(1,1),input_shape=(28,28,1),padding='valid',activation='relu',kernel_initializer='uniform'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Conv2D(64,(5,5),strides=(1,1),padding='valid',activation='relu',kernel_initializer='uniform'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Flatten())
model.add(Dense(100,activation='relu'))
model.add(Dense(10,activation='softmax'))
return model
没错就是这么简单。
因为LeNet是最简单的CNN网络,所以就讲得比较简短。虽然LeNet结构简单,准确率在解决现代很多视觉任务时已经力不从心了,但LeNet是CNN的开创者,我们仍然应该给予足够的尊重。
卷积神经网络学习路线(一)| 卷积神经网络的组件以及卷积层是如何在图像中起作用的?
卷积神经网络学习路线(二)| 卷积层有哪些参数及常用卷积核类型盘点?
卷积神经网络学习路线(三)| 盘点不同类型的池化层、1*1卷积的作用和卷积核是否一定越大越好?
本文分享自 GiantPandaCV 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!