如何扩展GlobalAveragePooling2D()的输出以适合BiSeNet?

时间:2019-04-30 11:05:05

标签: tensorflow keras python-3.6

我正在尝试构建图中“ 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更加优雅。

谢谢!

1 个答案:

答案 0 :(得分:0)

这可以通过在tf.reduce_mean上使用lambda层来完成。

tf.keras.layers.Lambda(lambda x: tf.reduce_mean(x, axis=[1, 2], keep_dims=True))