Keras 局部连接层滤波器
我在理解如何在本地连接层中使用过滤器时遇到了一个问题。 例如,假设输入是Keras 局部连接层滤波器,keras,keras-layer,Keras,Keras Layer,我在理解如何在本地连接层中使用过滤器时遇到了一个问题。 例如,假设输入是6x6x3图像,我们使用一个Conv2D(相同的填充)和一个LocallyConnected2D,每个过滤器的大小为3x3 filters, biases = model.layers[2].get_weights() 当我在conv2D上使用layer.get_weights()时,它返回带有shape(3,3,3,4)和bias shape(4,)的过滤器,因为我们有4个带有shape3x3x3的过滤器 filters
6x6x3
图像,我们使用一个Conv2D(相同的填充)和一个LocallyConnected2D
,每个过滤器的大小为3x3
filters, biases = model.layers[2].get_weights()
当我在conv2D
上使用layer.get_weights()
时,它返回带有shape(3,3,3,4)
和bias shape(4,)
的过滤器,因为我们有4个带有shape3x3x3
的过滤器
filters, biases = model.layers[2].get_weights()
但是LocallyConnected2D
上的layer.get_weights()
返回带有形状(16,36,4)
和偏差形状(4,4,4)
的过滤器
为什么过滤器的形状是16x36
我知道本地连接层在每个输入补丁上使用不同的过滤器。如何仅使用4个过滤器在整个图像上滑动?读取带有输入32x32x3
和64个过滤器的图层的警告:
请注意,该层将使用(30*30)*(3*3*3*64)+(30*30)*64个参数
或:
- 内核:
(补丁x补丁)*(大小*大小*输入通道*输出通道)
- 偏差:
(贴片x贴片)*输出通道
翻译成你的情况:
该层将消耗(4*4)*(3*3*4*4)内核参数+(4*4)*4个偏置参数
说明:
- 您的内核大小是
3x3
(第二个括号的第一部分)
- 输入通道为4(第二个括号中的第三个数字),输出通道为4(第四个数字)
- 对于图像
6x6
和此内核大小,有4x4
补丁。(正如图像32x32
将有30x30
内核大小3x3
的补丁,无需填充)
对于偏置,4x4
贴片和4
输出通道 读取带有输入32x32x3
和64个过滤器的图层时会出现警告:
请注意,该层将使用(30*30)*(3*3*3*64)+(30*30)*64个参数
或:
- 内核:
(补丁x补丁)*(大小*大小*输入通道*输出通道)
- 偏差:
(贴片x贴片)*输出通道
翻译成你的情况:
该层将消耗(4*4)*(3*3*4*4)内核参数+(4*4)*4个偏置参数
说明:
- 您的内核大小是
3x3
(第二个括号的第一部分)
- 输入通道为4(第二个括号中的第三个数字),输出通道为4(第四个数字)
- 对于图像
6x6
和此内核大小,有4x4
补丁。(正如图像32x32
将有30x30
内核大小3x3
的补丁,无需填充)
对于偏置,4x4
贴片和4
输出通道 谢谢你的回答。我理解输出形状。但是,4个过滤器怎么能满足输出中4x4=16个神经元的需要呢?由于这是一个局部连接层,每个输出神经元必须有一个不同的滤波器(16个滤波器对应16个神经元)。但我只给了4个过滤器。那么这4个滤波器是如何在所有16个输出神经元之间共享的呢?内核有16
*36*4个参数,偏差有16
*4个参数。那么,遗漏了什么?我不知道我是否遗漏了什么。参数在那里,并正确地分配给每个输出神经元。但我使用了4个深度为4(3x3x4)的3x3过滤器。所以,我们有4x(3x3x4)=144个权重。那么,为什么会有16x36x4=2304个砝码呢。keras是如何实现这些额外重量的?它不是额外的,而是“本地连接的”。它是图像中每个补丁的过滤器。有4x4个补丁。4x4x144=2304因此,如果它是图像中每个面片的过滤器,则有4x4=16个面片。每个修补程序都需要一个单独的过滤器,而不是上一个修补程序中使用的过滤器。所以,我的问题是:1)我们不需要16个过滤器吗?我在这里只用了4个过滤器。2) 每个过滤器可以携带3x3x4=36个权重,因此36x4=144个权重。这是正确的吗?谢谢你的回答。我理解输出形状。但是,4个过滤器怎么能满足输出中4x4=16个神经元的需要呢?由于这是一个局部连接层,每个输出神经元必须有一个不同的滤波器(16个滤波器对应16个神经元)。但我只给了4个过滤器。那么这4个滤波器是如何在所有16个输出神经元之间共享的呢?内核有16
*36*4个参数,偏差有16
*4个参数。那么,遗漏了什么?我不知道我是否遗漏了什么。参数在那里,并正确地分配给每个输出神经元。但我使用了4个深度为4(3x3x4)的3x3过滤器。所以,我们有4x(3x3x4)=144个权重。那么,为什么会有16x36x4=2304个砝码呢。keras是如何实现这些额外重量的?它不是额外的,而是“本地连接的”。它是图像中每个补丁的过滤器。有4x4个补丁。4x4x144=2304因此,如果它是图像中每个面片的过滤器,则有4x4=16个面片。每个修补程序都需要一个单独的过滤器,而不是上一个修补程序中使用的过滤器。所以,我的问题是:1)我们不需要16个过滤器吗?我在这里只用了4个过滤器。2) 每个过滤器可以携带3x3x4=36个权重,因此36x4=144个权重。这是正确的吗?