我需要从5个人那里收集身高和体重信息,并将其用作训练数据,在Colab中学习线性回归模型。
我有一个示例代码,我已经对其进行了修改,但它从一开始就不工作。
我应该如何修正代码以使使用训练数据的线性回归模型正常工作?我目前修改的代码如下。下面的身高和体重数据是我随机选择的值。
import torchimport torch.optim as optim# 定义数据x_train=torch.Float Tensor([48],[52],[60],[65],[73])y_train=torch.Float Tensor([158],[162],[170],[175],[183])# 假设初始化W=torch.zeros(1,requires_grad=True)b=torch.zeros(1,requires_grad=True)# 定义优化器 optimizer=torch.optim.SGD([W,b],Ir=0.01)nb_epochs=1000for epoch in range(nb_epochs+1): # 计算 H(x) hypothesis=x_train*W+b # 计算成本 cost=torch.mean((hypothesis-y_train)**2) # 使用优化器进行学习 optimizer.zero_grad() cost.backward() optimizer.step() # 每100次输出日志 if epoch % 100 ==0: print('Epoch{:4d}/{}W:{:.3f},b:{:.3f}Coast:{:.6f}'.format( epoch,nb_epochs,W.item(),b.item(),cost.item() ))
回答:
代码片段中有几个小错误,实际上你可以从错误消息中读取这些错误
- torch.Tensor(),以及”torch.Tensor 是默认张量类型(torch.FloatTensor)的别名”
- 你输入的数据应该是Python列表或序列
- Ir->lr(不是ir,而是Lr)
- 尝试降低学习率(lr)来解决NaN问题
- 用足够的epochs进行训练
在最少的修改下,它可以工作
import torchimport torch.optim as optim# 定义数据x_train=torch.Tensor([[48],[52],[60],[65],[73]])y_train=torch.Tensor([[158],[162],[170],[175],[183]])# 假设初始化W=torch.zeros(1,requires_grad=True)b=torch.zeros(1,requires_grad=True)# 定义优化器 optimizer=torch.optim.SGD([W,b],lr=0.0001)nb_epochs=1000000for epoch in range(nb_epochs+1): # 计算 H(x) hypothesis=x_train*W+b # 计算成本 cost=torch.mean((hypothesis-y_train)**2) # 使用优化器进行学习 optimizer.zero_grad() cost.backward() optimizer.step() # 每200次输出日志 if epoch % 200 ==0: print('Epoch{:4d}/{}W:{:.3f},b:{:.3f}Coast:{:.6f}'.format( epoch,nb_epochs,W.item(),b.item(),cost.item() ))