在典型的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 回答
Q1:and thus kernel weights of size (7x7x16). Why then are its weights actually size (7x7x8x16)?
不,内核权重不是大小(7x7x16) .
来自cs231n:
小心'每一个' .
在你的模型中,7x7是你的单个滤波器大小,它将连接到前一个转换层,因此单个滤波器上的参数是7x7x8,你有16个,所以总参数是7x7x8x16
Q2:why this is Keras's default behavior?
见Q1 .
在典型的术语中,当有人引用具有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立方体 .