问题描述
在PyTorch中,我要进行以下计算:
l1 = f(x.detach(),y)
l1.backward(retain_graph=True)
l2 = -1*f(x,y.detach())
l2.backward()
其中f
是一些函数,而x
和y
是需要梯度的张量。请注意,x
和y
可能都是利用共享参数的先前计算的结果(例如,x=g(z)
和y=g(w)
,其中g
是{ {1}}。
问题在于nn.Module
和l1
在数值上都是相同的,直到负号为止,并且重复两次计算l2
似乎很浪费。能够计算一次,并对结果应用两次f(x,y)
会更好。有什么办法吗?
一种可能性是手动调用backward
并更新每个autograd.grad
w.grad
的{{1}}字段。但是我想知道是否有一种更直接,更干净的方法,可以使用nn.Parameter
函数。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)