pytorch运行错误:RuntimeError: a leaf Variable that requires grad is being used in an in-place operation
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)