【问题标题】:Implementing a minmax maxpooling layer实现一个 minmax maxpooling 层
【发布时间】:2021-07-14 04:07:36
【问题描述】:

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

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

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

我有一个想法,对输入张量 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)

【问题讨论】:

  • 您能详细说明您现在卡住的原因吗?如果您包含一个最小的、可重现的示例来展示您面临的任何问题,这将非常有帮助。
  • @jakub 我知道简单的循环,但我如何比较结果,然后在 4 维时收集它们。问题是我不能在 batch_size 上建立索引(因为它会引发我无法在非类型上建立索引的错误)所以在这种情况下我只能在高度和宽度上建立索引。
  • 为什么需要对batch维度进行索引?
  • @thushv89 如果我不索引,我如何比较正张量和负张量。我看到你是 tensorflow 的作者。如果您不想给出完整的解决方案,请给出一些提示。

标签: tensorflow keras deep-learning tensorflow2.0 keras-layer


【解决方案1】:

您可以直接使用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))

【讨论】:

  • 它不会输出负值。结果将是所有正数。从我发布的图像中,如果我使用您上面发布的代码,输出将是 5 而不是 -5。
猜你喜欢
  • 2011-05-03
  • 2019-01-30
  • 2011-01-16
  • 2011-07-15
  • 1970-01-01
  • 2018-11-15
  • 2017-03-21
  • 1970-01-01
  • 2018-02-14
相关资源
最近更新 更多