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)