将自定义Keras图层中的最大值以外的所有内容都清除为零

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

我目前正在创建没有可训练参数的自定义keras图层

此层的输入具有形状(批大小,序列长度,特征)。这基本上与一维全局最大池化层的输入相同。

我正在尝试使用此自定义层,是在不降低尺寸的情况下执行一维全局最大池化。 (只想将每个功能的非最大条目归零)最重要的是,我希望输出具有一个额外的维度,以便可以将其传递到2D卷积层。

因此,此图层的输出应为形状(批大小,序列长度,特征,1)通过将所有不是最大值的零清零来执行一维全局最大池化]

这是图层的骨架

class GlobalMaxPoolZeroOutNonMax(Layer):

    def __init__(self, **kwargs):
        super(GlobalMaxPoolZeroOutNonMax, self).__init__(**kwargs)
        self.input_spec = InputSpec(ndim=3)
        self.data_format = K.normalize_data_format('channels_last')

    def compute_output_shape(self, input_shape):
        return (input_shape[0], input_shape[1], input_shape[2], 1)

    def call(self, inputs):
        # THIS IS WHERE I NEED HELP to zero out the non max and add a dimension
        raise NotImplemented

    def get_config(self):
        config = {'data_format': self.data_format}
        base_config = super(GlobalMaxPoolZeroOutNonMax, self).get_config()
        return dict(list(base_config.items()) + list(config.items()))

谢谢您的时间!

我目前正在创建没有可训练参数的自定义keras层,该层的输入具有形状(批处理大小,序列长度,特征)。这基本上是相同的...

tensorflow keras keras-layer
1个回答
0
投票

您不必使用子类化。您可以使用以下方法实现此目的。您要记住的一件事是,这将保留all

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