无法理解自定义 Theano Op 中的 grad() 方法
can't understand the grad() method in custom Theano Op
当我阅读有关 Creating a new Op 的文档时,我无法理解示例中的 grad() http://deeplearning.net/software/theano/extending/extending_theano.html#example-op-definition。为什么他们 return 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() return 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()怎么写?
正如 the extended .grad()
documentation 指出的那样,output_grads
参数是
(其中 f 是您的 Op
输出之一,C 是您调用 theano.tensor.grad(...)
)
页面还说 Op
的 .grad(...)
方法必须 return
(其中 x 是 Op
的输入)
我认为 ax+b
的例子是错误的。如果您查看实际代码,例如 Sigmoid or the XLogX,
它似乎只是执行链式规则。
免责声明:到目前为止,我还没有实现自定义 Op
,我自己正在研究这个,这就是我的理解。
当我阅读有关 Creating a new Op 的文档时,我无法理解示例中的 grad() http://deeplearning.net/software/theano/extending/extending_theano.html#example-op-definition。为什么他们 return 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() return 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()怎么写?
正如 the extended .grad()
documentation 指出的那样,output_grads
参数是
(其中 f 是您的 Op
输出之一,C 是您调用 theano.tensor.grad(...)
)
页面还说 Op
的 .grad(...)
方法必须 return
(其中 x 是 Op
的输入)
我认为 ax+b
的例子是错误的。如果您查看实际代码,例如 Sigmoid or the XLogX,
它似乎只是执行链式规则。
免责声明:到目前为止,我还没有实现自定义 Op
,我自己正在研究这个,这就是我的理解。