如何在 keras 层中实现 GlobalMinPool2D 函数?

Posted

技术标签:

【中文标题】如何在 keras 层中实现 GlobalMinPool2D 函数?【英文标题】:How to implement GlobalMinPool2D function in keras layers? 【发布时间】:2021-12-19 04:54:22 【问题描述】:

keras 层提供keras.layers.GlobalAvgPool2Dkeras.layers.GlobalAvgPool2D api 来实现全局平均2d 池化和最大池化。但是,Min Pooling 也可能有用,现在我想使用 GlobalMinPool2D,keras 层 api 没有实现。那么如何编写代码来实现 keras 层 GlobalMinPool2D?

【问题讨论】:

请注意min_pool(inputs) == -1 * max_pool(-1 * inputs)。也就是说,对输入取反取最大值就是取原始输入中的最小值,再取反又恢复原样。 【参考方案1】:

我们可以创建一个自定义层并调用tf.keras.backend.min()axis=[1,2] 来执行全局最小池化操作。这类似于GlobalMaxPool2D 中的source。

 class GlobalMinPool2D( tf.keras.layers.Layer ):

    def call(self , inputs ):
        return tf.keras.backend.min( inputs , axis=[ 1 , 2 ] )

我们可以尝试使用类似的张量,

layer = GlobalMinPool2D()
x = np.random.randn( 32 , 128 , 128 , 3 )
print( layer(x).shape )

输出,

(32, 3)

【讨论】:

以上是关于如何在 keras 层中实现 GlobalMinPool2D 函数?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 keras 层中实现 GlobalMinPool2D 函数?

在 Keras 中实现模型。如何解释填充/步幅值?

在 Keras/Tensorflow 中实现可训练的广义 Bump 函数层

Keras:如何在损失函数中使用层的权重?

如何在 keras 模型中实现汉明损失作为自定义指标

如何在 Keras 中实现分层 Transformer 用于文档分类?