Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Keras 局部连接层滤波器_Keras_Keras Layer - Fatal编程技术网

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个带有shape
3x3x3
的过滤器

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个权重。这是正确的吗?