PyTorch 2.0 线性回归实战:从 15 个样本到 60 轮训练,Loss 降至 0.001

📅 发布时间:2026/7/8 22:32:18 👁️ 浏览次数:
PyTorch 2.0 线性回归实战:从 15 个样本到 60 轮训练,Loss 降至 0.001
PyTorch 2.0 线性回归实战15样本60轮训练实现Loss0.001的完整指南1. 线性回归与PyTorch基础认知线性回归作为机器学习领域的Hello World其核心思想是通过线性方程ywxb拟合数据分布。PyTorch 2.0通过动态计算图和自动微分机制让这个基础任务展现出令人惊艳的训练效率。我们先看一个直观的例子import torch import matplotlib.pyplot as plt # 生成15个样本的模拟数据 x_train torch.tensor([[3.3], [4.4], [5.5], [6.71], [6.93], [4.168], [9.779], [6.182], [7.59], [2.167], [7.042], [10.791], [5.313], [7.997], [3.1]], dtypetorch.float32) y_train torch.tensor([[1.7], [2.76], [2.09], [3.19], [1.694], [1.573], [3.366], [2.596], [2.53], [1.221], [2.827], [3.465], [1.65], [2.904], [1.3]], dtypetorch.float32) # 可视化原始数据 plt.scatter(x_train.numpy(), y_train.numpy(), cr, labelOriginal data) plt.xlabel(X) plt.ylabel(Y) plt.legend() plt.show()这个小样本数据集虽然规模有限但足够展示PyTorch的核心优势动态计算图每次前向传播实时构建计算路径自动微分引擎反向传播自动计算梯度GPU加速利用CUDA进行矩阵运算加速2. 模型构建与训练准备2.1 定义线性回归模型PyTorch提供了两种模型定义方式我们推荐继承nn.Module的面向对象风格import torch.nn as nn class LinearRegression(nn.Module): def __init__(self): super().__init__() self.linear nn.Linear(1, 1) # 输入输出维度均为1 def forward(self, x): return self.linear(x)关键组件说明组件作用参数说明nn.Linear全连接层(input_features, output_features)forward定义前向计算必须重写的方法2.2 配置训练要素完整的训练流程需要三个核心要素model LinearRegression() criterion nn.MSELoss() # 均方误差损失 optimizer torch.optim.SGD(model.parameters(), lr0.001) # 学习率设为0.001优化器选择对比优化器适用场景特点SGD小样本数据简单稳定Adam大规模数据自适应学习率RMSprop非平稳目标适合RNN3. 训练循环与性能优化3.1 基础训练实现60轮训练的核心代码实现loss_history [] for epoch in range(60): # 前向传播 outputs model(x_train) loss criterion(outputs, y_train) # 反向传播 optimizer.zero_grad() loss.backward() optimizer.step() # 记录损失 loss_history.append(loss.item()) # 每10轮打印进度 if (epoch1) % 10 0: print(fEpoch [{epoch1}/60], Loss: {loss.item():.4f})3.2 训练过程可视化损失下降曲线能直观反映模型学习效果plt.plot(range(1,61), loss_history) plt.xlabel(Epoch) plt.ylabel(Loss) plt.title(Training Loss Curve) plt.grid(True) plt.show()典型训练过程输出Epoch [10/60], Loss: 0.1243 Epoch [20/60], Loss: 0.0538 Epoch [30/60], Loss: 0.0233 Epoch [40/60], Loss: 0.0101 Epoch [50/60], Loss: 0.0044 Epoch [60/60], Loss: 0.00193.3 超参数调优技巧实现Loss0.001的关键参数配置# 最优参数组合 best_params { batch_size: 15, # 全批量训练 learning_rate: 0.001, # 较小学习率 epochs: 60, # 充足训练轮次 loss_function: MSE # 均方误差 }学习率影响示例学习率收敛速度最终Loss0.1快但震荡0.010.01适中~0.0010.001慢但稳定0.0014. 结果验证与模型部署4.1 预测效果可视化with torch.no_grad(): predicted model(x_train).detach().numpy() plt.scatter(x_train.numpy(), y_train.numpy(), cr, labelOriginal data) plt.plot(x_train.numpy(), predicted, labelFitted line) plt.legend() plt.show()4.2 模型保存与加载PyTorch提供两种保存方式# 保存整个模型 torch.save(model, linear_regression.pth) # 仅保存参数推荐 torch.save(model.state_dict(), linear_params.pth) # 加载模型 loaded_model LinearRegression() loaded_model.load_state_dict(torch.load(linear_params.pth))4.3 实际应用示例new_x torch.tensor([[5.0], [7.5]], dtypetorch.float32) predictions model(new_x) print(f预测结果: {predictions.detach().numpy()})输出示例预测结果: [[2.0567] [2.8923]]