1. 传统神经网络VS卷积神经网络
传统的神经网络通常只由输入层、隐藏层以及输出层构成。其中的隐藏层可以有多层,需要根据具体问题来确定其层数。卷积神经网络在原有的传统神经网络基础上,加入了更加有效的特征学习部分-卷积层和池化层(具体位置在全连接层前)。卷积神经网络的出现,使得神经网络层数更多更深(深度学习)。
简要发展历程:
(LeCun1989卷积神经网络之父)→ (2012, Dropout, ReLU)→ (2014,网络加深)(2014,卷积模块功能加强)→ (2015,深度残差网络)
卷积神经网络结构:
- 卷积层:有一个小窗口在原始图像上平移来提取特征
- 卷积神经网络中每层卷积层由若干卷积核组成
- 经过卷积层输出的大小由卷积核(filter)、步长和零填充大小决定
- 激活层:增加非线性分割能力
- 池化层:降低网络模型复杂度,减少学习的参数
- 全连接层:帮助进行最终的分类
2. 卷积层
下面将对TensorFLow中卷积层的定义语法进行讲解,卷积层内部参数需要按照要求进行传入,通常需要传入尺寸或者形状参数等等,需要额外注意。
卷积网络API:
tf.nn.conv2d(input, filter, strides= ,padding=, name=None)
- 在Tensorflow中使用卷积层
- input:给定的输入张量,通常为4阶张量[batch, height, width, channel],类型要求为float32,float64,否则会报错。
- filter:指定卷积核的权重数量,形状要求:[filter_height, filter_width, in_channels, out_channels],卷积核宽,卷积核高,输入图片的通道数,卷积核个数
- strides:步长,[1, strides, strides, 1]
- padding:表示零填充,可以选“SAME”(越过边缘取样,填充)和“VALID”(不越过边缘取样,多出来的特征不要了)
3. 卷积神经网络设计
下面我们将对Mnist手写数字识别进行卷积神经网络设计,Mnist数据集包括10类图像,每张图片都是单通道,28*28像素大小,需要使用神经网络解决该多分类问题,我们将主要对经过两个卷积层的张量形状变换进行分析。
输入原始图像形状:28×28
第一层卷积层参数设计:
- input:[None, 28, 28, 1]
- 32个卷积核(filter),卷积核大小:5×5,步长:1,padding:SAME
- filter形状:shape[5, 5, 1, 32]
- bias:32
- 输出形状:[None, 28, 28, 32]
- 激活函数:ReLU
- 池化大小:2×2,步长:2
- 池化后输出形状:[None, 14, 14, 32]
第二层卷积层参数设计:
- input:[None, 14, 14, 32]
- 64个卷积核(filter),卷积核大小:5×5,步长:1,padding:SAME
- filter形状:shape[5, 5, 32, 64]
- bias:64
- 输出的形状:[None, 14, 14, 64]
- 激活函数:ReLU
- 池化大小:2×2,步长:2
- 池化后输出形状:[None, 7, 7, 64]
全连接:
- [None, 7, 7, 64] → [None, 7×7×64]
- [None, 7×7×64] * [7×7×64, 10] = [None, 10]
- 因为最后是分成十类,所以形状是10列
4. 小结:
首先介绍了卷积神经网络的发展情况,基本构造和功能,着重介绍了卷积神经网络中的卷积层,对Tensorflow中卷积层定义的API进行详细解释,为后续搭建神经网络做铺垫。卷积核涉及到的相关参数总结如下:
- 卷积核大小通常根据经验进行选择:常用1×1,3×3,5×5。
- 每个卷积核会带若干权重,并且还会带1个偏执,这就相当于需要训练的参数
- 对于卷积核的步长,通常选择1
- 卷积核个数是根据具体情况去选择的
本文正在参加「金石计划 . 瓜分6万现金大奖」