我在理解如何在本地连接层中使用过滤器时遇到问题。
例如,假设输入是6x6x3
图像,我们使用一个Conv2D(相同的填充)和一个LocallyConnected2D
,其中包含4个大小为3x3
的滤镜。
filters, biases = model.layers[2].get_weights()
当我在layer.get_weights()
上使用conv2D
时,它将返回形状为(3,3,3,4)
且偏置形状为(4, )
的滤波器,这是我们期望的,因为我们有4个形状为{{1}的滤波器}。
但是3x3x3
上的layer.get_weights()
返回形状为LocallyConnected2D
且形状为(16,36,4)
的滤波器。
为什么过滤器形状为(4,4,4)
?
我知道本地连接的层在每个输入补丁处使用不同的过滤器。我们如何只用4个滤镜在整个图像上滑动?
答案 0 :(得分:0)
读取documentation时,警告输入为32x32x3
和64 filters
的图层:
请注意,该层将使用(30 * 30)*(3 * 3 * 3 * 64)+(30 * 30)* 64个参数
或者:
(patches x patches) * (size * size * input_channels * output_channels)
(patches x patches) * output_channels
翻译成您的案子
此层将消耗(4 * 4)*(3 * 3 * 4 * 4)个内核参数+(4 * 4)* 4个偏差参数。
说明:
3x3
(第二个括号的第一部分)6x6
和此内核大小,有4x4
个补丁。 (就像图像32x32
将具有30x30
个内核大小为3x3
的补丁一样,没有填充)对于偏差,请4x4
贴片和4
输出通道。