Pytorch实现线性回归

模型y=x*w+b,使用Pytorch实现梯度下降算法,构建线性回归模型

import torch
import sys
#3行1列的二位tensor
x_data=torch.Tensor([[1.0],[2.0],[3.0]])
y_data=torch.Tensor([[2.0],[4.0],[6.0]])

class LinearModel(torch.nn.Module):
    def __init__(self, *args, **kwargs) -> None:
        # 调用父类的__init__()方法,这是PyTorch的约定,确保子类正确地初始化父类的部分
        super(LinearModel,self).__init__()
        # 创建一个线性层,输入通道数为1,输出通道数为1。这通常被称为一个线性模型或者全连接层
        self.linear=torch.nn.Linear(1,1)

    def forward(self,x):
        #将输入数据x传递给线性层,并将结果存储在y_pred中。线性层将每个输入值映射到一个输出值。
        y_pred=self.linear(x)
        return y_pred

model=LinearModel()
# 创建一个均方误差损失函数对象,该对象用于衡量模型预测值与真实值之间的差异  
criterion=torch.nn.MSELoss(size_average=False)
# 创建一个随机梯度下降优化器对象,该对象用于更新模型的参数。这里的学习率被设置为0.01
optimizer=torch.optim.SGD(model.parameters(),lr=0.01)

for epoch in range(1000):
    # 调用模型的前向传播方法,计算出模型对训练数据的预测值 
    y_pred=model(x_data)
     # 使用损失函数计算出预测值与真实值之间的差异(损失)
    loss=criterion(y_pred,y_data)

    print(epoch,loss.item())

    optimizer.zero_grad()
    # 使用反向传播算法计算出每个参数的梯度。这是损失对每个参数的偏导数
    loss.backward()
    # 根据计算出的梯度对模型参数进行更新(也称为权重更新或参数更新)  
    optimizer.step()
print("w=",model.linear.weight.item())
print("b=",model.linear.bias.item())

x_test=torch.Tensor([[4.0]])
y_test=model(x_test)
print("y_pred=",y_test.data)
0 59.847930908203125
1 26.652393341064453
2 11.874536514282227
3 5.295718193054199
4 2.366877317428589
5 1.0629061460494995
...
998 9.690893421065994e-09
999 9.508596576779382e-09
w= 1.9999350309371948
b= 0.0001476586185162887
y_pred= tensor([[7.9999]])

你可能感兴趣的:(机器学习,pytorch,线性回归,人工智能)