我理想地将操作完全自包含(在同一文件中定义的渐变和操作)。官方教程只强调python实现。有谁知道是否有可能在C ++中实现渐变,以及如何实现它?
答案 0 :(得分:0)
目前仅在Python API中完全支持自动梯度计算。因此,仍应在Python中手动指定操作与其梯度操作的关联。假设您在C ++中定义了op Foo
及其渐变op FooGrad
,您应该获得相应的Python包装foo
和foo_grad
。在Python中,您可以编写以下内容:
@RegisterGradient("Foo"):
def _FooGrad(op, grad):
return foo_grad(op.inputs[0], op.outputs[0], grad)
请注意,我假设您的foo_grad
操作采用原始操作的输入和输出以及传入的渐变。您的情况可能会或可能不是,所以请相应调整。