无法理解定制Theano Op中的grad()方法

时间:2017-04-28 03:07:35

标签: python theano

当我阅读有关创建新操作的文档时,我无法理解示例http://deeplearning.net/software/theano/extending/extending_theano.html#example-op-definition中的grad()。为什么他们返回output_grads[0] * 2而不是2?什么是output_grads[0]代表什么?

如果output_grads [0]表示相对于输入x的链导数,则在下一个示例http://deeplearning.net/software/theano/extending/extending_theano.html#example-props-definition中,为什么grad()返回a * output_grads[0] + b(它应该是self.a * output_grads[0] + self.b)不是self.a * output_grads[0]

更复杂的自定义操作怎么样?像y = exp(x1)/(a*(x1**3)+log(x2))一样,如何写出它的grad()?此外,如果输入是向量或矩阵,如何写入grad()?

1 个答案:

答案 0 :(得分:1)

正如the extended .grad() documentation指出的那样,output_grads参数是

dC/df

(其中 f 是您Op的输出之一, C 是您调用theano.tensor.grad(...)的费用

该页面还说明.grad(...)的{​​{1}}方法必须返回

dC/dx=(dC/df)(df/dx)

(其中 x Op的输入)

我认为Op示例是错误的。如果您查看实际代码,例如SigmoidXLogX, 它似乎只是实施了连锁规则。

免责声明:到目前为止,我还没有实现自定义ax+b,我自己正在研究这个问题,这就是我理解它的方式。