当我们需要两次反向传播时,如何避免重新计算一个函数?

问题描述

在PyTorch中,我要进行以下计算:

l1 = f(x.detach(),y)
l1.backward(retain_graph=True)
l2 = -1*f(x,y.detach())
l2.backward()

其中f是一些函数,而xy是需要梯度的张量。请注意,xy可能都是利用共享参数的先前计算的结果(例如,x=g(z)y=g(w),其中g是{ {1}}。

问题在于nn.Modulel1在数值上都是相同的,直到负号为止,并且重复两次计算l2似乎很浪费。能够计算一次,并对结果应用两次f(x,y)会更好。有什么办法吗?

一种可能性是手动调用backward并更新每个autograd.grad w.grad的{​​{1}}字段。但是我想知道是否有一种更直接,更干净的方法,可以使用nn.Parameter函数。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)