我从stack question引用串联时引用了@parsethis,如果a连接到b(结果结合在一起),这就是这样做的:
我遇到了the following code,想知道在这种情况下keras.layers.concatenate
到底能做什么。
最佳猜想:
fire_module()
中,y
基于每个像素学习[kernel_size=1
)y1
基于activation map
(y
)的kernel_size=1
的每个像素学习”>y3
基于activation map
(y
)kernel_size=3
的3x3像素的面积进行学习>concatenate
将y1
和y3
放在一起,这意味着总filters
现在是y1
和y3
]中过滤器的总和。>非常感谢您的帮助。
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
我希望我足够清楚
我从stack question引用串联时引用了@parsethis,如果a连接到b(结果结合在一起),这就是这样做的: