pytorch執行錯誤:RuntimeError: a leaf Variable that requires grad is being used in an in-place operation

Link的学习之路發表於2024-11-24

tensor 張量參與的運算,都會生成計算圖,哪怕其中只有一個tensor,剩下的也都會被強制型別轉換

因此每一步要分清實在構建計算圖還是在更新值。

每一個tensor分為grad 梯度和data。grad也是一個tensor。如果要更新,務必確保參與運算的每一個元素都是值(非tensor)

出現報錯的原因就是 更新值而錯誤的出現了tensor

 1 import torch
 2 x_data=[1,2,3]
 3 y_data=[2,4,6]
 4 w=torch.tensor(1.0,requires_grad=True)
 5 
 6 
 7 def forward(x):
 8     return x*w
 9 
10 def loss(x,y):
11     return (forward(x)-y)**2
12 
13 for epoch in range(100):
14 
15     for x,y in zip(x_data,y_data):
16         l=loss(x,y)
17         l.backward()
18 
19         w.data-=0.01*w.grad.item()
20         w.grad.zero_()
21         print(f"x={x},y={y},loss={l},w.grad:{w.grad.item()},w={w}")
22     print('epoch:{},w:{},loss:{}'.format(epoch,w,l))
23 print(w)

相關文章