Python can';我不理解自定义Theano Op中的grad()方法
当我阅读有关创建新Op的文档时,我无法理解示例中的grad()。为什么它们返回Python can';我不理解自定义Theano Op中的grad()方法,python,theano,Python,Theano,当我阅读有关创建新Op的文档时,我无法理解示例中的grad()。为什么它们返回output\u grads[0]*2而不是2?那么,output\u grads[0]代表什么 如果输出梯度[0]表示相对于输入x的链导数,在下一个示例中,为什么梯度()返回a*输出梯度[0]+b(它应该是self.a*输出梯度[0]+self.b)而不是self.a*输出梯度[0] 一个更复杂的定制Op怎么样?像y=exp(x1)/(a*(x1**3)+log(x2)),如何写入它的grad()?此外,如果输入是向
output\u grads[0]*2
而不是2
?那么,output\u grads[0]
代表什么
如果输出梯度[0]表示相对于输入x的链导数,在下一个示例中,为什么梯度()返回a*输出梯度[0]+b
(它应该是self.a*输出梯度[0]+self.b
)而不是self.a*输出梯度[0]
一个更复杂的定制Op怎么样?像y=exp(x1)/(a*(x1**3)+log(x2))
,如何写入它的grad()?此外,如果输入是向量或矩阵,那么如何编写grad()?正如前面指出的,输出\u grads
参数是
(其中f是Op
的输出之一,C是调用theano.tensor.grad(…)
的成本)
该页面还指出,Op
的.grad(…)
方法必须返回
(其中x是对操作的输入)
我认为ax+b
示例是错误的。如果您查看实际代码,例如,
它似乎只是实现了链式规则
免责声明:到目前为止,我还没有实现自定义的Op
,我自己也在研究这个问题,这就是我对它的理解。另请参见:谢谢!LDGN。我认为你是对的。输出_梯度[0]表示dC/df,其中f是Op的输出,即y1。如果没有下一级Op的输入包括y1,则输出_梯度[0]设置为1。