用PyTorch实现线性回归

使用PyTorch构建训练模型的一般步骤
①准备数据集
②使用相关类构建模型,用以计算预测值
③使用PyTorch的应用接口来构建损失函数和优化器
④编写循环迭代的训练过程——前向计算,反向传播和梯度更新,训练过程如下——

  • 根据前向计算计算yhat
  • 使用损失函数类计算损失函数值
  • 进行反向传播,注意梯度清零
  • 权重更新

PyTorch相关知识:

①nn.Linear类中对__call()__方法进行了实现,且其内部有对函数forward()的调用,故在定义模型时需要对forward()函数进行实现。

②nn.Linear类相当于是对线性计算单元的封装,里面包含两个张量类型的成员:权重和偏置项
用PyTorch实现线性回归_第1张图片

③代码中模型与类之间的关系:
用PyTorch实现线性回归_第2张图片

实现步骤

1、准备数据

x_data = torch.tensor([[1.0],[2.0],[3.0]])
y_data = torch.tensor([[2.0],[4.0],[6.0]])

2、设计模型

class LinearModel(torch.nn.Module):
    def __init__(self):
        super(LinearModel,self).__init__()
        self.linear = torch.nn.Linear(1,1)
        
    def forward(self, x):
        y_pred = self.linear(x)
        return y_pred
        
model = LinearModel()  

3、构造损失函数和优化器

criterion = torch.nn.MSELoss(reduction='sum')
optimizer = torch.optim.SGD(model.parameters(),lr=0.01)

4、训练过程

epoch_list = []
loss_list = []
w_list = []
b_list = []
for epoch in range(1000):
    y_pred = model(x_data)                      # 计算预测值
    loss = criterion(y_pred, y_data)    # 计算损失
    print(epoch,loss)
    
    epoch_list.append(epoch)
    loss_list.append(loss.data.item())
    w_list.append(model.linear.weight.item())
    b_list.append(model.linear.bias.item())
    
    optimizer.zero_grad()   # 梯度归零
    loss.backward()         # 反向传播
    optimizer.step()        # 更新

5、结果展示

展示最终的权重和偏置:

# 输出权重和偏置
print('w = ',model.linear.weight.item())
print('b = ',model.linear.bias.item())

结果为:

w = 1.9998501539230347
b = 0.0003405189490877092

参考链接:https://www.jb51.net/article/240145.htm
https://blog.csdn.net/kodoshinichi/article/details/114540275

你可能感兴趣的:(python-pytorch,pytorch,线性回归,深度学习)