首页 文章

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

提问于
浏览
1

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

因此,在下面的简单keras模型中,我期望第二个conv层有16个大小(7x7)的内核,因此内核权重大小(7x7x16) . Why then are its weights actually size (7x7x8x16)?

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

  • 为什么这是Keras的默认行为?

  • how do I get a "traditional" convolutional layer 没有进入低级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 回答

  • 2

    Q1:and thus kernel weights of size (7x7x16). Why then are its weights actually size (7x7x8x16)?

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

    来自cs231n

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

    小心'每一个' .

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

    Q2:why this is Keras's default behavior?

    见Q1 .

  • 1

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

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

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

    编辑:

    我在最近的一篇论文中找到了一个很好的引用,https://arxiv.org/pdf/1809.02601v1.pdf

    “在卷积层中,输入特征映射X是W1×H1×D1立方体,W1,H1和D1分别表示其宽度,高度和深度(也称为通道数) . 输出特征映射类似地,是具有W2×H2×D2条目的立方体Z.卷积Z = f(X)由D2卷积核参数化,每个卷积核是S×S×D1立方体 .

相关问题