深度学习:基于python:第7章 卷积神经网络

第7章 卷积神经网络

  • 第7章 卷积神经网络
    • 7.1 整体结构
    • 7.2 卷积层
      • 7.2.1 全连接层存在的问题
      • 7.2.2 卷积运算
      • 7.2.3 填充
      • 7.2.4 步幅
      • 7.2.5 3维数据的卷积运算
      • 7.2.6 结合方块思考
      • 7.2.7 批处理
    • 7.3 池化层
    • 7.4 卷积层和池化层的实现
      • 7.4.1 4维数组
      • 7.4.2 基于 im2col的展开

第7章 卷积神经网络

本章的主题是卷积神经网络(Convolutional Neural Network,CNN)。 CNN被用于图像识别、语音识别等各种场合,在图像识别的比赛中,基于 深度学习的方法几乎都以CNN为基础。

7.1 整体结构

CNN中新出现了卷积层(Convolution层)和池化层(Pooling层)

之前介绍的神经网络中,相邻层的所有神经元之间都有连接,这称为全连接fully-connected)。另外,我们用Affine层实现了全连接层。如果使用这个Affine层,Affine层后面跟着激活函数ReLU 层(或者Sigmoid层)。这里堆叠了4层“Affine-ReLU”组合,然后第5层是 Affine层,最后由Softmax层输出最终结果(概率)

深度学习:基于python:第7章 卷积神经网络_第1张图片

7.2 卷积层

7.2.1 全连接层存在的问题

之前介绍的全连接的神经网络中使用了全连接层(Affine层)。在全连接 层中,相邻层的神经元全部连接在一起,输出的数量可以任意决定

而卷积层可以保持形状不变。当输入数据是图像时,卷积层会以3维 数据的形式接收输入数据,并同样以3维数据的形式输出至下一层。因此, 在CNN中,可以(有可能)正确理解图像等具有形状的数据。

CNN 中,有时将卷积层的输入输出数据称为特征图(feature map)。其中,卷积层的输入数据称为输入特征图(input feature map),输出 数据称为输出特征图(output feature map)。

7.2.2 卷积运算

卷积层进行的处理就是卷积运算。卷积运算相当于图像处理中的“滤波器运算”。
深度学习:基于python:第7章 卷积神经网络_第2张图片
深度学习:基于python:第7章 卷积神经网络_第3张图片

深度学习:基于python:第7章 卷积神经网络_第4张图片

7.2.3 填充

在进行卷积层的处理之前,有时要向输入数据的周围填入固定的数据(比 如0等),这称为填充(padding),是卷积运算中经常会用到的处理。
深度学习:基于python:第7章 卷积神经网络_第5张图片

7.2.4 步幅

深度学习:基于python:第7章 卷积神经网络_第6张图片

综上,增大步幅后,输出大小会变小。而增大填充后,输出大小会变大。 如果将这样的关系写成算式,
深度学习:基于python:第7章 卷积神经网络_第7张图片

7.2.5 3维数据的卷积运算

深度学习:基于python:第7章 卷积神经网络_第8张图片
深度学习:基于python:第7章 卷积神经网络_第9张图片

在3维数据的卷积运算中,输入数据和滤波器通道数要设为相同的值

7.2.6 结合方块思考

深度学习:基于python:第7章 卷积神经网络_第10张图片
深度学习:基于python:第7章 卷积神经网络_第11张图片
深度学习:基于python:第7章 卷积神经网络_第12张图片
深度学习:基于python:第7章 卷积神经网络_第13张图片

7.2.7 批处理

深度学习:基于python:第7章 卷积神经网络_第14张图片

7.3 池化层

深度学习:基于python:第7章 卷积神经网络_第15张图片
深度学习:基于python:第7章 卷积神经网络_第16张图片
深度学习:基于python:第7章 卷积神经网络_第17张图片

7.4 卷积层和池化层的实现

7.4.1 4维数组

CNN中各层间传递的数据是4维数据。所谓4维数据,比如 数据的形状是(10, 1, 28, 28),则它对应10个高为28、长为28、通道为1的数据。

x = np.random.rand(10, 1, 28, 28) # 随机生成数据
print(x.shape) #(10, 1, 28, 28)

如果要访问第1个数据,只要写x[0]就可以了(注意Python的索 引是从0开始的)。同样地,用x[1]可以访问第2个数据。

>>> x[1].shape # (1, 28, 28)	        访问第1个数据
>>> x[1].shape # (1, 28, 28)			访问第2个数据

#如果要访问第1个数据的第1个通道的空间数据
>>> x[0, 0] # 或者x[0][0]

7.4.2 基于 im2col的展开

你可能感兴趣的:(深度学习,python)