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

Deep learning 为什么我的Keras内核是三维的?,deep-learning,keras,conv-neural-network,Deep Learning,Keras,Conv Neural Network,在典型的CNN中,conv层将具有尺寸为NxM的Y滤波器,因此它具有N x M x Y可训练参数(不包括偏置) 因此,在下面的简单keras模型中,我希望第二个conv层具有16个大小(7x7)的内核,因此具有大小(7x7x16)的内核权重那么,为什么它的重量实际大小(7x7x8x16)? 我理解正在发生的事情的机理:Conv2D层实际上正在进行三维卷积,将前一层的输出贴图视为通道。它有16个大小为7x7x8的3D内核。我不明白的是: 为什么这是Keras的默认行为 如何获得一个“传统”的卷积

在典型的CNN中,conv层将具有尺寸为NxM的Y滤波器,因此它具有N x M x Y可训练参数(不包括偏置)

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

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

  • 为什么这是Keras的默认行为
  • 如何获得一个“传统”的卷积层而不陷入低级API(避免这是我首先使用Keras的原因)
_


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

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

发件人:

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

小心“每一个”

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

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


参见Q1。

在典型的行话中,当有人提到具有N个大小(x,y)的内核的conv层时,这意味着内核实际上具有大小(x,y,z),其中z是输入卷到该层的深度

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

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

编辑:

我在最近的一篇文章中找到了一段很好的引语

“在卷积层中,输入特征映射X是一个W1×H1×D1立方体,W1、H1和D1分别表示其宽度、高度和深度(也称为通道数)。同样,输出特征映射是一个包含W2×H2×D2项的立方体Z。卷积Z=f(X)由D2卷积核参数化,每个核都是一个S×S×D1立方体。”

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