问题描述
在计算两个tensor的wassertein distance(记为loss)后,执行
loss.backward()
报错:
RuntimeError: there are no graph nodes that require computing gradients
问题原因
loss是中断梯度传播的变量,即:
(Pdb) loss.requires_grad
False
解决方法
把计算wassertein距离的最后一行:
loss = Variable(torch.from_numpy(Gs)).float().cuda()改为:
loss = Variable(torch.from_numpy(Gs), requires_grad=True).float().cuda()
总结
计算loss并进行反向传播时requires_grad非常重要。例如GAN训练时固定生成器参数不变更新D就是通过.detach()实现的。