首页 > 解决方案 > 实现一个 minmax maxpooling 层

问题描述

我需要实现一个 minmax 池化层。我有 4 维张量,(batch_size,height,width,activation_maps)。

我想实现一种方法,其中具有最大绝对值的数字被传播到下一层,而不是选择最大元素。

我附上了一个例子来说明清楚。

在此处输入图像描述

我有一个想法,对输入张量 x 执行两次 maxpooling 操作。一次在原始张量上,第二次在否定它之后。之后,我可以比较两个获得的结果的值并选择最大的绝对值。但是,我被困住了。我已经粘贴了下面的代码。任何进一步的帮助都会很棒。

谢谢

class CustomMaxPooling(tf.keras.layers.Layer):
      def __init__(self, pool_size,strides,padding,shape):
        super(CustomMaxPooling, self).__init__()
    
        self.pool_size =pool_size
        self.strides=strides
        self.padding = padding
        self.shape = shape
    
        
      def call(self, x):
        positive = MaxPool2D(pool_size=self.pool_size,strides=self.strides, padding=self.padding,name =self.name)(x)
        negative = MaxPool2D(pool_size=self.pool_size,strides=self.strides, padding=self.padding,name =self.name)(-x)
       
        return

只是为了测试:

X = tf.random.normal([4,4,4,3],  dtype=tf.dtypes.float32, seed=None, name=None)
result = CustomMaxPooling(pool_size=(2, 2),strides=(1, 1),padding='valid',shape=X.shape)(X)

标签: tensorflowkerasdeep-learningtensorflow2.0keras-layer

解决方案


您可以直接使用以下方法汇集输入张量的绝对值tf.abs

X = tf.random.normal([4,4,4,3],  dtype=tf.dtypes.float32, seed=None, name=None)

# Pool the absolute of the input tensor
result = MaxPool2d()(tf.abs(X))

推荐阅读