【发布时间】: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