我正在尝试构建图中“ https://github.com/Blaizzy/BiSeNet-Implementation”所示的BiseNet。
当我想在Keras(tf-后端)中使用GlobalAveragePooling2D()完成图(b)中的注意力细化模块时,我发现GlobalAveragePooling2D()的输出形状不适用于下一个卷积。 / p>
我在github上检查了BiSeNet代码的许多实现,但是,大多数都使用了AveragePooling2D(size =(1,1))。但是AveragePooling2D(size =(1,1))完全是胡说八道。
因此,我定义了一个Lambada图层来执行我想要的操作(所选代码如下所示)。 Lambada层有效,但看起来很丑:
def samesize_globalAveragePooling2D(inputtensor):
# inputtensor shape:(?, 28,28,32)
x = GlobalAveragePooling2D()(inputtensor) # x shape:(?, 32)
divide = tf.divide(inputtensor, inputtensor) # divide shape:(?, 28,28,32)
x2 = x * divide # x2 shape:(?, 28,28,32)
global_pool = Lambda(function=samesize_globalAveragePooling2D)(conv_0)
希望得到建议,使这款Lambada更加优雅。
谢谢!
答案 0 :(得分:0)
这可以通过在tf.reduce_mean上使用lambda层来完成。
tf.keras.layers.Lambda(lambda x: tf.reduce_mean(x, axis=[1, 2], keep_dims=True))