Pytorch 如何重用反向传递原语?

Pytorch 如何重用反向传递原语?,pytorch,Pytorch,我想实现一个PyTorch函数,它接受另一个函数和一个张量作为参数,应用它,在向后传递时匹配输入和输出之间的梯度方差。类似于下面的伪代码 导入火炬 从torch.autograd导入功能 进口火炬 进口火炬 #这意味着武断。 def f(x): 返回x*2 类变量匹配(函数): @静力学方法 def前进(ctx,x): y=f(x) ctx.save_for_backward(x,y) 返回y @静力学方法 def向后(ctx,梯度): x、 y=ctx.u张量 y、 向后(梯度) x、 梯度*

我想实现一个PyTorch
函数
,它接受另一个函数和一个张量作为参数,应用它,在向后传递时匹配输入和输出之间的梯度方差。类似于下面的伪代码

导入火炬
从torch.autograd导入功能
进口火炬
进口火炬
#这意味着武断。
def f(x):
返回x*2
类变量匹配(函数):
@静力学方法
def前进(ctx,x):
y=f(x)
ctx.save_for_backward(x,y)
返回y
@静力学方法
def向后(ctx,梯度):
x、 y=ctx.u张量
y、 向后(梯度)
x、 梯度*=火炬方形(火炬方形(梯度y)和(1)/火炬方形(x梯度)和(1))
返回火炬。类似于零(x)
i=火炬。标量张量(2,需要梯度=真)
x=差异匹配应用(i)
x、 向后(火炬标量张量(1))
打印(i.grad)
上面的内容只是为了表达我对代码应该做什么的意图,在
y.backward(grad_y)
调用中运行上面的内容会进入一个无限循环。我想以某种方式提取向后函数,并让它为我提供梯度,以便我可以重新缩放它们。

相关内容: