首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何创建自定义keras层"min pooling“而忽略零?

如何创建自定义keras层"min pooling“而忽略零?
EN

Stack Overflow用户
提问于 2019-04-23 18:33:13
回答 1查看 1.8K关注 0票数 2

我正在使用keras和tensorflow后端研究神经网络。通常它是用卷积层和最大池层构建的,比如在vgg16中就是这样。对于我的神经网络,我想将最大池化层更改为最小池化层,但在池化时,该层应该忽略零。

例如:

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

在keras中有没有一种简单的方法来编写这个定制层?

我猜min pooling是可以通过

代码语言:javascript
运行
复制
min_x = -K.pool2d(-x, pool_size=(2, 2), strides=(2, 2))

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-26 16:07:06

我找到的一个可能的解决方案是下面的一个。这是一种使用最小池化的变通方法,在最小池化之前向所有的零添加一个高值,在最小池化之后再次减去这个高值。我仍然在寻找一个更好的解决方案来解决这个问题,因为我认为这不是最好的方法,特别是在性能方面。

代码语言:javascript
运行
复制
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
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55809286

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档