自定义Lambda层是否包含在Keras中的反向传播中

自定义Lambda层是否包含在Keras中的反向传播中,keras,Keras,假设我有以下lambda层: l=λ(λx:1/(1+数学e**x)) 这是一个S形函数。现在,由于我没有在任何地方指定这个函数的导数,我很好奇它是否会包含在反向传播中。有没有什么神奇的自动装置能帮我做到这一点 是的,它将包含在反向传播中。然而,没有魔法。Theano将定义一个具有许多基本运算的预定义导数的计算图。只要可以使用这些基本表达式定义函数,就不必担心反向传播 在您的情况下,可以通过首先计算exp(x),然后计算1+exp(x),最后计算1/(1+exp(x))来构建向前传球。请注意,每

假设我有以下lambda层:

l=λ(λx:1/(1+数学e**x))


这是一个S形函数。现在,由于我没有在任何地方指定这个函数的导数,我很好奇它是否会包含在反向传播中。有没有什么神奇的自动装置能帮我做到这一点

是的,它将包含在反向传播中。然而,没有魔法。Theano将定义一个具有许多基本运算的预定义导数的计算图。只要可以使用这些基本表达式定义函数,就不必担心反向传播

在您的情况下,可以通过首先计算
exp(x)
,然后计算
1+exp(x)
,最后计算
1/(1+exp(x))
来构建向前传球。请注意,每一步都建立在前一步的基础上。向后传球也是如此,如下所示

在向后传球中,你有三个动作。首先是
1/Z(Z=1+exp(x))
的导数,然后是
1+Y(Y=exp(x))
的导数,最后是
exp(x)
的导数


对于Theano来说,为这三个操作构建计算图是非常容易的。现在,如果你有一个函数,比如说
1/(1+f(x))
,其中Theano既不知道
f(x)
的导数,也不知道它可以分解成一组基本表达式,那么你必须通过修改ano源代码来手动定义它的梯度。

谢谢你的回答。还有一件事。你提到我需要定义f(x)的导数。如果我没有呢?我会得到一些错误,还是f(x)会被简单地从backprop中排除?我想你会得到一个错误。为了澄清,您不必定义任何新的派生,因为
exp(x)
的派生是预定义的。