【问题标题】:Custom sigmoid activation function自定义 sigmoid 激活函数
【发布时间】:2018-04-15 15:51:15
【问题描述】:

所以,我正在使用 Keras 来实现卷积神经网络。在我的解码拓扑结束时,有一个带有 sigmoid 激活的 Conv2D 层。

decoded = Conv2D(1, (3, 3), activation='sigmoid', padding='same')(x)

基本上,我想更改 sigmoid 实现,我的目标是使其成为二进制类型的激活,如果 sigmoid 函数的值低于 0.5,则返回 0,如果值等于或高于 0.5,则返回 1。

在 Tensorflow 实现中搜索,我发现 sigmoid 是这样的:

def sigmoid(x, name=None):
    with ops.name_scope(name, "Sigmoid", [x]) as name:
        x = ops.convert_to_tensor(x, name="x")
        return gen_math_ops._sigmoid(x, name=name)

我在操作 gen_math_ops 返回时遇到问题,将其值与 0.5 阈值进行比较。由于张量类型的限制,我知道通常的 if 不能使用,那么我应该如何解决这个问题?

【问题讨论】:

    标签: python neural-network keras conv-neural-network activation-function


    【解决方案1】:

    只是四舍五入你的输出。

    def hardsigmoid(x): 
      return tf.round(tf.nn.sigmoid(x))
    

    请记住,这种硬 sigmoid 在任何地方都有导数,因此您将无法使用任何基于梯度的技术对其进行训练。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-23
      • 2020-12-05
      • 2018-09-30
      • 2018-08-14
      • 2015-11-09
      • 2019-10-31
      • 1970-01-01
      • 2021-10-29
      相关资源
      最近更新 更多