第7章 卷积神经网络
第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层输出最终结果(概率)
7.2 卷积层
7.2.1 全连接层存在的问题
之前介绍的全连接的神经网络中使用了全连接层(Affine层)。在全连接 层中,相邻层的神经元全部连接在一起,输出的数量可以任意决定
而卷积层可以保持形状不变。当输入数据是图像时,卷积层会以3维 数据的形式接收输入数据,并同样以3维数据的形式输出至下一层。因此, 在CNN中,可以(有可能)正确理解图像等具有形状的数据。
CNN 中,有时将卷积层的输入输出数据称为特征图(feature map)。其中,卷积层的输入数据称为输入特征图(input feature map),输出 数据称为输出特征图(output feature map)。
7.2.2 卷积运算
卷积层进行的处理就是卷积运算。卷积运算相当于图像处理中的“滤波器运算”。
7.2.3 填充
在进行卷积层的处理之前,有时要向输入数据的周围填入固定的数据(比 如0等),这称为填充(padding),是卷积运算中经常会用到的处理。
7.2.4 步幅
综上,增大步幅后,输出大小会变小。而增大填充后,输出大小会变大。 如果将这样的关系写成算式,
7.2.5 3维数据的卷积运算
在3维数据的卷积运算中,输入数据和滤波器的通道数要设为相同的值
7.2.6 结合方块思考
7.2.7 批处理
7.3 池化层
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]