首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在keras中定义自定义激活函数的导数

如何在keras中定义自定义激活函数的导数
EN

Stack Overflow用户
提问于 2018-08-08 19:54:13
回答 1查看 2K关注 0票数 1

我有一个自定义激活函数及其导数,尽管我可以使用自定义激活函数,但我不知道如何告诉keras什么是它的导数。

看起来它自己找到了一个,但是我有一个参数必须在函数和它的导数之间共享,那么我怎么做呢?

我知道在tensorflow中有一种相对简单的方法,但是我不知道如何在keras here is how you do it in tensorflow中实现它

编辑:根据我得到的答案,也许我不够清楚。我想要的是为我的激活函数实现一个自定义导数,以便它在反向传播过程中使用我的导数。我知道如何实现自定义激活函数。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-09 13:38:45

看看定义Keras激活函数的源代码:

keras/activations.py

例如:

代码语言:javascript
复制
def relu(x, alpha=0., max_value=None):
    """Rectified Linear Unit.

    # Arguments
        x: Input tensor.
        alpha: Slope of the negative part. Defaults to zero.
        max_value: Maximum value for the output.

    # Returns
        The (leaky) rectified linear unit activation: `x` if `x > 0`,
        `alpha * x` if `x < 0`. If `max_value` is defined, the result
        is truncated to this value.
    """
    return K.relu(x, alpha=alpha, max_value=max_value)

另外,Keras层如何调用激活函数:self.activation = activations.get(activation)activation可以是字符串,也可以是可调用的。

因此,类似地,可以定义自己的激活函数,例如:

代码语言:javascript
复制
def my_activ(x, p1, p2):
    ...
    return ...

假设您希望在密集层中使用此激活,只需将您的函数如下所示:

代码语言:javascript
复制
x = Dense(128, activation=my_activ(p1, p2))(input)

如果您的意思是要实现您自己的导数:

如果你的激活函数是用可微运算(如K.dot(), tf.matmul(), tf.concat() etc.)的Tensorflow/Keras函数编写的,那么这些导数将通过自动微分differentiation得到。在这种情况下,你不需要写你自己的导数。

如果您仍然想重写导数,请检查这个文档op,在这里您需要使用tf.RegisterGradient注册渐变。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51754639

复制
相关文章

相似问题

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