Pytorch深度学习实践(4)使用Pytorch实现线性回归

使用Pytorch实现线性回归

基本步骤:

  • 准备数据集
  • 设计模型
  • 构造损失函数和优化器
  • 模型训练
    • forward计算损失
    • backward计算梯度
    • update更新参数

准备数据集

y p r e d ( 1 ) y p r e d ( 2 ) y p r e d ( 3 ) = ω x ( 1 ) x ( 2 ) x ( 3 ) + b \begin {bmatrix}y_{pred}^{(1)} \\ y_{pred}^{(2)} \\ y_{pred}^{(3)} \end{bmatrix} =\omega \begin {bmatrix}x^{(1)} \\ x^{(2)} \\ x^{(3)} \end{bmatrix} + b ypred(1)ypred(2)ypred(3) =ω x(1)x(2)x(3) +b

python 复制代码
import torch
## 注意x和y的值必须是矩阵
x_data = torch.tensor([[1.0], [2.0], [3.0]])
y_data = torch.tensor([[2.0], [4.0], [6.0]])

设计模型

在Pytorch里,重点是构造计算图

在这里使用的是仿射模型,即线性单元
z = w x + b z = wx + b z=wx+b

需要确定的是 w w w 和 b b b 的维度大小,即要通过输入和输出的维度来确定权重的维度

必须注意的是 l o s s loss loss一定要是一个标量

一般而言,会把模型设计成类

python 复制代码
class LinearModel(torch.nn.Module):  #继承自Module
    def __init__(self):  #构造函数
        super(LinearModel, self).__init__()  # 调用负类的构造
        self.linear = torch.nn.Linear(1, 1)  # 构造Linear对象 包含权重和偏置
    def forward(self, x):
        y_pred = self.linear(x)
        return y_pred

model = LinearModel()  # 实例化LinearModel()对象

torch.nn.Linear(in_features, out_features, bias=True)参数:

  • in_features 输入的每一个样本的维度
  • out_features 输出的每一个样本的维度
  • bias 是否需要添加偏置,默认为True

forward()方法中y_pred = self.linear(x)调用的是了python中的__call__函数。在Pytorch的Module.__call__()中有一个重要的语句就是forward(),也就是说,在这里我们必须写forward()来去覆盖

定义损失函数和优化器

损失函数

损失函数使用MSE

python 复制代码
criterion = torch.nn.MSELoss(size_average=False)

参数设置:

  • size_average,是否对损失求平均,默认为True
  • reduce,用来确定是否要把损失求和降维(特征降维)

一般而言,只考虑size_average

优化器

使用梯度下降

python 复制代码
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)

参数设置:

  • params,传入模型需要优化的权重
  • lr,学习率

模型训练

训练100次,主要是三个步骤

  • 前馈计算
  • 反向传播
  • 梯度更新

注意不要忘记梯度清零

python 复制代码
for epoch in range(100):
    y_pred = model(x_data)  # 前馈计算
    loss = criterion(y_pred, y_data)  # 计算损失
    print(epoch, loss)

    optimizer.zero_grad()  # 梯度清零
    loss.backward()  # 反向传播
    optimizer.step()  # 参数更新

## 损失数据可视化
plt.plot(np.arange(100), loss_history)
plt.xlabel('epoch')
plt.ylabel('loss')
plt.show()
## 打印训练后的参数
print("w = ", model.linear.weight.item())
print("b = ", model.linear.bias.item())

模型测试

python 复制代码
x_test = torch.tensor([[4.0]])
y_test = model(x_test)
print("y_pred = ", y_test.item())

测试结果如下

整体代码

python 复制代码
import torch
import matplotlib.pyplot as plt
import numpy as np

## 注意x和y的值必须是矩阵
x_data = torch.tensor([[1.0], [2.0], [3.0]])
y_data = torch.tensor([[2.0], [4.0], [6.0]])
loss_history = []

########## 模型的定义 ##########
class LinearModel(torch.nn.Module):  #继承自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()  # 实例化Linear()对象

########## 定义损失函数和优化器 ##########
## 损失函数
criterion = torch.nn.MSELoss(size_average=False)
## 优化器
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)

########## 模型训练 ##########
for epoch in range(100):
    y_pred = model(x_data)  # 前馈计算
    loss = criterion(y_pred, y_data)  # 计算损失
    print(epoch, loss)
    loss_history.append(loss.item())

    optimizer.zero_grad()  # 梯度清零
    loss.backward()  # 反向传播
    optimizer.step()  # 参数更新

## 损失数据可视化
plt.plot(np.arange(100), loss_history)
plt.xlabel('epoch')
plt.ylabel('loss')
plt.show()
## 打印训练后的参数
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.item())
相关推荐
燧机科技SuiJi7 小时前
山体坍塌落石滑坡泥石流监测系统 落石泥石流监控摄像机
大数据·人工智能·深度学习·yolo
商业白皮书11 小时前
人形机器人公司打算依托云端 GPU 资源扩充模型训练规模
人工智能·深度学习·机器人
数聚天成DeepSData16 小时前
夜间灯光可以代表经济活动吗?先处理年际一致性
人工智能·深度学习·机器学习·数据集·deepsdata
高洁0117 小时前
数字孪生、具身智能、世界模型三者交叉
人工智能·python·深度学习·机器学习
Smoothcloud润云17 小时前
PyTorch推理输入长度分桶与Padding优化实战:减少无效计算
人工智能·pytorch·python·深度学习·gpu算力
微三云云仔17 小时前
2026年10月微三云 GEO 优化技术拆解:AI引用机制、结构化部署与服务商评估框架
人工智能·深度学习·geo系统·微三云
禁默19 小时前
论文解读与思考:基于场所地图的标识感知机器人探索方法及工程参考的价值
人工智能·深度学习·算法·机器人
云和数据.ChenGuang19 小时前
Spring AI 入门实战:构建你的第一个 AI 应用
java·人工智能·深度学习·spring·机器学习·语言模型
GPU实战笔记20 小时前
TensorBoard 空面板排查:日志写入、--logdir 与访问入口分层
深度学习·tensorflow·模型训练·tensorboard
牧羊人.33320 小时前
自然语言处理基础 04|长短期记忆网络 LSTM
网络·人工智能·rnn·深度学习·学习·自然语言处理·lstm