【深度学习】TensorFlow:卷积神经网络-卷积层(1)

1,413 阅读3分钟

1. 传统神经网络VS卷积神经网络

传统的神经网络通常只由输入层、隐藏层以及输出层构成。其中的隐藏层可以有多层,需要根据具体问题来确定其层数。卷积神经网络在原有的传统神经网络基础上,加入了更加有效的特征学习部分-卷积层和池化层(具体位置在全连接层前)。卷积神经网络的出现,使得神经网络层数更多更深(深度学习)。

简要发展历程:

LeNetLeNet(LeCun1989卷积神经网络之父)→ AlexNetAlexNet(2012, Dropout, ReLU)→ VGGVGG(2014,网络加深)GoogLeNetGoogLeNet(2014,卷积模块功能加强)→ ResNetResNet(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万现金大奖」