問題描述
在計算兩個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()實現的。