卷积神经网络学习路线(六)| 经典网络回顾之LeNet

2019-12-23 18:10:27 浏览数 (1)

开篇的这张图代表ILSVRC历年的Top-5错误率,我会按照以上经典网络出现的时间顺序对他们进行介绍,同时穿插一些其他的经典CNN网络。

前言

这是卷积神经网络学习路线的第六篇文章,前面五篇文章从细节,超参数调节,网络解释性方面阐述了卷积神经网络。从这篇文章开始,卷积神经网络学习路线就开始代领大家一起探索从1998年到2019年的20多种经典的网络,体会每种网络的前世今身以及包含的深邃思想。本节就带大家来探索一下LeNet。

背景&贡献

LeNet是CNN之父Yann LeCun在1998提出来的,LeNet通过巧妙的设计,利用卷积、参数共享、下采样等操作提取特征,避免了大量的计算成本,最后再使用全连接神经网络进行分类识别,这个网络也是近20年来大量神经网络架构的起源。

网络结构

LeNet-5是LeNet系列最新的卷积神经网络,设计用于识别机器打印的字符,LeNet-5的网络结构如下图所示。

我们可以具体分析一下:

  • 首先输入图像是单通道的大小的图像,用caffe中的Blob表示的话,维度就是。其中代表batch_size
  • 第一个卷积层conv1所用的卷积核尺寸为,滑动步长为,卷积核数目为,那么经过这一层后图像的尺寸变成,输出特征图的维度即为。
  • 第一个池化层的池化核尺寸为,步长,这是没有重叠的max pooling,池化操作后,图像尺寸减半,变为,输出特征图维度为。
  • 第二个卷积层conv2的卷积核尺寸为,步长,卷积核数目为,卷积后图像尺寸变为,输出特征图维度为。
  • 第二个池化层pool2池化核尺寸为,步长,这是没有重叠的max pooling,池化操作后,图像尺寸减半,变为,输出矩阵为。
  • pool2后面接全连接层fc1,神经元数目为,再接relu激活函数。
  • 最后再接fc2,神经元个数为,得到维的特征向量,用于个数字的分类训练,再送入softmaxt分类,得到分类结果的概率output

Keras实现

我们来看一个kerasLeNet-5实现,

代码语言:javascript复制
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卷积的作用和卷积核是否一定越大越好?

卷积神经网络学习路线(四)| 如何减少卷积层计算量,使用宽卷积的好处及转置卷积中的棋盘效应?

卷积神经网络学习路线(五)| 卷积神经网络参数设置,提高泛化能力?

0 人点赞