剛開始從tf轉戰pytorch,開始記錄一下自己遇到的一些坑,不斷更新。
2018-9-10
1. one of the variables needed for gradient computation has been modified by an inplace operation
pytorch版本0.4
遇到這個問題之後,百度有以下解決方式:
解決方法一:如果使用的是pytorch0.4.0版本,回退到pytorch0.3.0版本
解決方法二:如果有inreplace參數,設爲False
解決方法三:報錯原因是pytorch0.4.0版本後tensor不支持inplace操作了,所以把所有inplace錯作去掉
我檢查之後發現自己的問題在於squeeze的使用。
我在model裏面直接使用了x.squeeze_() 導致報錯。改爲x=x.squeeze()無報錯
2.自定義了一個變量,報錯:不是葉子節點。
這個報錯不是程序報錯,而是我檢查出來的。使用x.is_leaf 返回None,並且x.grad=None
衆所周知,非葉子節點梯度計算完就被清空。
從頭檢查,,,,,
radius = torch.Tensor([0.1]).requires_grad_().cuda() 這個地方出了問題。。。應該更正如下格式:
radius = torch.Tensor([0.1]).cuda().requires_grad_()
3.自定義變量,有梯度但是不更新
需要將其加入優化器當中。如下格式:
your_variable 爲自己定義的變量,脫離model之外
optimizer = optim.Adam([{'params':model.parameters()}, {'params':your_variable}],
lr=opt.lr, weight_decay=opt.weight_decay)