pytorch之坑持續更新。。

剛開始從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)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章