【问题标题】:Why are my Keras Conv2D kernels 3-dimensional?为什么我的 Keras Conv2D 内核是 3 维的?
【发布时间】:2018-03-10 21:06:13
【问题描述】:

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

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

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

  • 为什么这是 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

【问题讨论】:

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


    【解决方案1】:

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

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

    来自cs231n:

    示例 2。假设输入卷的大小为 [16x16x20]。然后使用 3x3 的感受野大小示例,Conv 层中的 每个 神经元现在将总共有 3*3*20 = 180 个与输入体积的连接。请注意,连接性在空间中是局部的(例如 3x3),但沿输入深度(20)是完整的。

    小心“每一个”。

    在您的模型中,7x7 是您的单个过滤器大小,它将连接到之前的 conv 层,因此单个过滤器上的参数为 7x7x8,而您有 16 个,因此总参数为 7x7x8x16

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

    见第一季度。

    【讨论】:

      【解决方案2】:

      在典型的行话中,当有人提到具有 N 个大小为 (x, y) 的内核的卷积层时,暗示这些内核实际上具有 (x, y, z) 的大小,其中 z 是该层的输入量。

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

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

      编辑:

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

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

      【讨论】:

        猜你喜欢
        • 2021-02-16
        • 1970-01-01
        • 1970-01-01
        • 2019-09-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-15
        • 2019-09-07
        相关资源
        最近更新 更多