gpt4 book ai didi

python - 如何创建自定义 keras 层 "min pooling"但忽略零?

转载 作者:行者123 更新时间:2023-12-01 07:58:57 24 4
gpt4 key购买 nike

我正在研究带有 keras 和 tensorflow 后端的神经网络。通常它是由卷积层和最大池化层构建而成,例如 vgg16 中的做法。对于我的神经网络,我想将最大池化层更改为最小池化层,但池化时该层应忽略零。

例如:

[[0, 16], [72, 0]] 2x2 池化层应该池化 16 而不是 72(最大池化)。

keras 有没有一种简单的方法来编写这个自定义层?

我想最小池可以通过

min_x = -K.pool2d(-x, pool_size=(2, 2), strides=(2, 2))

现在它应该忽略零作为最小值。感谢您的帮助!

最佳答案

我发现的一种可能的解决方案如下。这是一种使用 minpooling 的解决方法,在 min pooling 之前向所有零添加一个高值,并在 min pooling 之后再次减去该高值。我仍在寻找更好的解决方案来解决此问题,因为我认为这不是最好的方法,特别是在性能方面。

def min_pool2d(x):

max_val = K.max(x) + 1 # we gonna replace all zeros with that value
# replace all 0s with very high numbers
is_zero = max_val * K.cast(K.equal(x,0), dtype=K.floatx())
x = is_zero + x

# execute pooling with 0s being replaced by a high number
min_x = -K.pool2d(-x, pool_size=(2, 2), strides=(2, 2))

# depending on the value we either substract the zero replacement or not
is_result_zero = max_val * K.cast(K.equal(min_x, max_val), dtype=K.floatx())
min_x = min_x - is_result_zero

return min_x # concatenate on channel

关于python - 如何创建自定义 keras 层 "min pooling"但忽略零?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55809286/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com