keras.layers.concatenate做什么

问题描述 投票:1回答:1

我遇到了the following code,想知道在这种情况下keras.layers.concatenate到底能做什么。

最佳猜想:

  1. fire_module()中,y基于每个像素学习[kernel_size=1
  2. [y1基于activation mapy)的kernel_size=1的每个像素学习”>
  3. [y3基于activation mapykernel_size=3的3x3像素的面积进行学习>
  4. [concatenatey1y3放在一起,这意味着总filters现在是y1y3]中过滤器的总和。>
  5. 此串联是基于每个像素的学习,基于3x3的学习的平均值,均基于先前基于每个像素的激活图,从而使模型更好?
  6. 非常感谢您的帮助。

    def fire(x, squeeze, expand):
        y  = Conv2D(filters=squeeze, kernel_size=1, activation='relu', padding='same')(x)
        y  = BatchNormalization(momentum=bnmomemtum)(y)
        y1 = Conv2D(filters=expand//2, kernel_size=1, activation='relu', padding='same')(y)
        y1 = BatchNormalization(momentum=bnmomemtum)(y1)
        y3 = Conv2D(filters=expand//2, kernel_size=3, activation='relu', padding='same')(y)
        y3 = BatchNormalization(momentum=bnmomemtum)(y3)
        return concatenate([y1, y3])
    
    def fire_module(squeeze, expand):
        return lambda x: fire(x, squeeze, expand)
    
    x = Input(shape=[144, 144, 3])
    y = BatchNormalization(center=True, scale=False)(x)
    y = Activation('relu')(y)
    y = Conv2D(kernel_size=5, filters=16, padding='same', use_bias=True, activation='relu')(x)
    y = BatchNormalization(momentum=bnmomemtum)(y)
    
    y = fire_module(16, 32)(y)
    y = MaxPooling2D(pool_size=2)(y)
    

编辑:

更具体一点,为什么不这样做:

# why not this?
def fire(x, squeeze, expand):
    y  = Conv2D(filters=squeeze, kernel_size=1, activation='relu', padding='same')(x)
    y  = BatchNormalization(momentum=bnmomemtum)(y)
    y = Conv2D(filters=expand//2, kernel_size=1, activation='relu', padding='same')(y)
    y = BatchNormalization(momentum=bnmomemtum)(y)
    y = Conv2D(filters=expand//2, kernel_size=3, activation='relu', padding='same')(y)
    y = BatchNormalization(momentum=bnmomemtum)(y)
    return y

我遇到了以下代码,并想知道keras.layers.concatenate在这种情况下到底能做什么。最佳猜测:在fire_module()中,y基于每个像素学习(kernel_size = 1)y1学习...

我从stack question引用串联时引用了@parsethis,如果a连接到b(结果结合在一起),这就是这样做的:

    a        b         c
a b c   g h i    a b c g h i
d e f   j k l    d e f j k l

[The documentation说它只是返回一个张量,其中包含所有输入的串联,只要它们共享一个维(即,相同的长度或witdh,取决于轴)]

您的情况似乎是这样:

Y 
 \
  Y1----
   \    |
    Y3  Y1

我希望我足够清楚

keras deep-learning conv-neural-network keras-layer tf.keras
1个回答
0
投票

我从stack question引用串联时引用了@parsethis,如果a连接到b(结果结合在一起),这就是这样做的:

© www.soinside.com 2019 - 2024. All rights reserved.