1. 程式人生 > 其它 >pytorch常見報錯

pytorch常見報錯

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,

就會報上述錯誤,解決方法是將self.loss_value求平均或求和;self.loss_value = self.loss_value.mean();或self.loss_value = self.loss_value.sum()。

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)先求和(也即變成了標量),再求梯度就行了。