Machine learning 如何在keras中定义自定义激活函数的导数
我有一个自定义激活函数及其导数,虽然我可以使用自定义激活函数,但我不知道如何告诉keras它的导数是什么 看起来它自己找到了一个,但我有一个参数,必须在函数和它的导数之间共享,所以我怎么能做到呢 我知道在tensorflow中有一种相对简单的方法可以做到这一点,但我不知道如何在keras中实现它Machine learning 如何在keras中定义自定义激活函数的导数,machine-learning,keras,deep-learning,activation-function,Machine Learning,Keras,Deep Learning,Activation Function,我有一个自定义激活函数及其导数,虽然我可以使用自定义激活函数,但我不知道如何告诉keras它的导数是什么 看起来它自己找到了一个,但我有一个参数,必须在函数和它的导数之间共享,所以我怎么能做到呢 我知道在tensorflow中有一种相对简单的方法可以做到这一点,但我不知道如何在keras中实现它 编辑:根据我得到的答案,也许我不够清楚。我想要的是为我的激活函数实现一个自定义导数,以便它在反向传播期间使用我的导数。我知道如何实现自定义激活功能。看看定义了Keras激活功能的源代码: keras/a
编辑:根据我得到的答案,也许我不够清楚。我想要的是为我的激活函数实现一个自定义导数,以便它在反向传播期间使用我的导数。我知道如何实现自定义激活功能。看看定义了Keras激活功能的源代码:
keras/activations.py
例如:
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)
假设您想在密集层中使用此激活,您只需将函数如下所示:
x = Dense(128, activation=my_activ(p1, p2))(input)
如果您的意思是希望实现自己的衍生工具: 如果激活函数是用可微分的Tensorflow/Keras函数编写的(例如,
K.dot()、tf.matmul()、tf.concat()等
),则将通过自动微分获得导数。在这种情况下,你不需要写你自己的导数
如果您仍然想重新编写导数,请查看此文档,您需要使用
tf注册梯度。RegisterGradient
Keras使用tensorflow,因此,将其定义为tensorflow op。正如我所说,我不知道如何在Keras中实现它在tensorflow中实现它。Keras将使用tensorflow函数。在层中使用activation=yourTensorflowFunc
。或者使用激活层激活(yourTensorflowFunc)
。这不是我的问题,我知道如何实现我自己的激活函数,我想实现的是在反向传播过程中使用的它的派生。这就是我想说的:在tensorflow中实现自定义激活和自定义派生,按照你的指示去做。Keras“确实使用了tensorflow函数”。我知道如何实现我自己的激活函数,我想要的是实现反向传播过程中使用的自定义导数
x = Dense(128, activation=my_activ(p1, p2))(input)