为什么我的Keras Conv2D内核是三维的?

时间:2017-09-29 02:04:12

标签: deep-learning keras conv-neural-network

在典型的CNN中,转换层将具有大小为NxM的Y滤波器,因此它具有N x M x Y可训练参数(不包括偏差)。

因此,在下面的简单keras模型中,我期望第二个conv层有16个大小(7x7)的内核,因此内核权重大小(7x7x16)。 为什么它的权重实际上是大小(7x7x8x16)?

我理解发生的事情的机制:Conv2D层实际上正在进行3D卷积,将前一层的输出映射视为通道。它有16个3D内核(7x7x8)。我不明白的是:

  • 为什么这是Keras的默认行为?
  • 如何获得"传统"卷积层,而不是降低到低级API(避免这是我首先使用Keras的原因)?

_

from keras.models import Sequential
from keras.layers import InputLayer, Conv2D

model = Sequential([
    InputLayer((101, 101, 1)),
    Conv2D(8, (11, 11)),
    Conv2D(16, (7, 7))
])
model.weights

2 个答案:

答案 0 :(得分:2)

Q1:因此内核权重(7x7x16)。那么为什么它的重量实际上是大小(7x7x8x16)?

不,内核权重不是大小(7x7x16)。

来自cs231n

  

示例2.假设输入音量大小为[16x16x20]。然后使用3x3的示例感知字段大小,Conv层中的每个神经元现在将具有到输入音量的总共3 * 3 * 20 = 180个连接。请注意,同样,连接在空间中是局部的(例如3x3),但在输入深度(20)上是完整的。

小心'每一个'。

在你的模型中,7x7是你的单个滤波器大小,它将连接到前一个转换层,因此单个滤波器上的参数是7x7x8,你有16个,所以总参数是7x7x8x16

Q2:为什么这是Keras的默认行为?

见Q1。

答案 1 :(得分:1)

在典型的术语中,当有人引用具有N个内核大小(x,y)的转换层时,暗示内核实际上具有大小(x,y,z),其中z是输入该层的数量。

想象一下当网络的输入图像有R,G和B通道时会发生什么:每个初始内核本身都有3个通道。后续图层相同,将输入音量视为多通道图像,其中通道现在是某些其他功能的地图。

3D内核在输入上“扫描”时的运动仅为2D,因此它仍被称为2D卷积,该卷积的输出是2D特征映射。

编辑:

我在最近的一篇论文https://arxiv.org/pdf/1809.02601v1.pdf

中找到了一个很好的引用

“在卷积层中,输入特征映射X是W 1 ×H 1 ×D 1 立方体,其中W < sub> 1 ,H 1 和D 1 分别表示其宽度,高度和深度(也称为通道数)。输出特征类似地,map是具有W 2 ×H 2 ×D 2 条目的立方体Z.卷积Z = f(X)被参数化通过D 2 卷积核,每个卷都是一个S×S×D 1 立方体。“