Machine learning 如何在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它的导数是什么

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

我知道在tensorflow中有一种相对简单的方法可以做到这一点,但我不知道如何在keras中实现它


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

看看定义了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)