四、PyTorch实现线性回归

课后作业

模型训练四大步:数据集、设计模型、损失和优化器、训练次数
在这里插入图片描述

课上代码

损失函数:MSELoss
优化器:SGD
单一线性层模型

import torch
import matplotlib.pyplot as plt

x_data = torch.Tensor([[1.],[2.],[3.]])
y_data = torch.Tensor([[2.],[4.],[6.]])

class LinearModel(torch.nn.Module): #定义只有一层线性层的神经网络
    def __init__(self):
        super(LinearModel,self).__init__()
        self.linear = torch.nn.Linear(1,1) #x和y都是一维
    def forward(self,x):
        y_hat = self.linear(x)
        return y_hat

model = LinearModel()

lossf = torch.nn.MSELoss(size_average=False)             #损失函数
optimzer = torch.optim.SGD(model.parameters(),lr=0.001)  #优化器
#不同优化器的选择,只需要把SGD改成其他的优化器即可

loss_all = []
epoch_all = []

for epoch in range(10000):
    y_pred = model(x_data) #得到y_hat
    loss = lossf(y_pred,y_data) #调用MSELoss得到损失
    print("epoch:",epoch,"\tloss:",loss.item())
    epoch_all.append(epoch)
    loss_all.append(loss)
    
    optimzer.zero_grad()#梯度清除
    loss.backward() #反向传播
    optimzer.step() #更新参数

plt.plot(loss_all,epoch_all) #绘图
plt.ylabel('loss Value')
plt.xlabel('Epoch')
plt.show()

在这里插入图片描述

测试一下效果

test = torch.Tensor([[8.]])
print("predect:",8,model(test).item()) #看下预测x=8时,y的值是多少
"""
predect: 8 15.99902629852295
"""

效果还可以,和16很接近了。

猜你喜欢

转载自blog.csdn.net/qq_41264055/article/details/129841889