pytorch常見報錯
阿新 • • 發佈:2022-05-09
1. RuntimeError: Can’t call numpy() on Tensor that requires grad. Use tensor.detach().numpy() instead.
待轉換型別的PyTorch Tensor變數帶有梯度,直接將其轉換為numpy資料將破壞計算圖,因此numpy拒絕進行資料轉換,實際上這是對開發者的一種提醒。如果自己在轉換資料時不需要保留梯度資訊,可以在變數轉換之前新增detach()呼叫。
2. Loss.backward() raises error ‘grad can be implicitly created only for scalar outputs’;在用多卡訓練時,如果損失函式的計算寫成這樣:self.loss_value = loc_loss + regresloss,
3. grad can be implicitly created only for scalar outputs;解決方法:
比如如下錯誤:
# 第一步:建立 tensor x = torch.ones(2,2,requires_grad=True) print(x) # 第二步:對 tensor 做處理 # x的平方 y = x**2 print(y) # 第三步:求梯度 y.backward() # 錯誤出現在這裡,因為 y 是一個張量,應該改為y.sum().backward()即可 print(x.grad)
其實問題2,3的錯誤本質上是一樣的。都是需要把以x為自變數的函式(比如y)先求和(也即變成了標量),再求梯度就行了。