您现在的位置是:首页 >其他 >PyTorch for Deeplearning 01PyTorch 工作流介绍网站首页其他

PyTorch for Deeplearning 01PyTorch 工作流介绍

2301_76646956 2026-03-28 00:01:04
简介PyTorch for Deeplearning 01PyTorch 工作流介绍

什么是 PyTorch?

PyTorch 是一种人工智能(AI)框架,可以帮助我们用代码来训练计算机发现规律并做预测。就像人类学习数学公式一样,PyTorch 可以帮计算机学习数学关系,并且自动调整参数,让它能更准确地做出预测。

你可以把 PyTorch 想象成:

  • 老师:教计算机如何发现规律。
  • 学生:计算机本身,它会根据数据来学习。
  • 作业:我们提供的数据,就像练习题一样,帮助计算机学习。
  • 考试:当计算机学会了之后,我们让它做新的题目,看看它表现得怎么样。

PyTorch 工作流介绍

PyTorch 是一个流行的深度学习框架,它的核心工作流通常包括以下几个步骤:

  1. 数据准备 (Data Preparation)
  2. 构建模型 (Model Building)
  3. 训练模型 (Training the Model)
  4. 预测与评估 (Inference & Evaluation)
  5. 保存与加载模型 (Saving & Loading a Model)
  6. 整合所有步骤 (Putting It All Together)

1. 数据准备

在 notebook 中,首先创建了一些 已知参数 (known parameters),然后生成了一组简单的线性数据。

# 创建已知参数
weight = 0.7
bias = 0.3

# 生成数据
start = 0
end = 1
step = 0.02
X = torch.arange(start, end, step).unsqueeze(dim=1)
y = weight * X + bias

X[:10], y[:10]

解释

  • weight = 0.7, bias = 0.3:表示直线方程 。

    y=0.7x+0.3y = 0.7x + 0.3

  • torch.arange(start, end, step).unsqueeze(dim=1):生成从 01 之间的数,并将其转换为 PyTorch 张量 (Tensor)。

  • y = weight * X + bias:根据线性关系计算 y 值。

这部分主要是创建一个简单的 线性数据集,用于训练模型。


2. 构建模型

在 PyTorch 中,我们可以使用 torch.nn.Module 来创建神经网络模型。

import torch
from torch import nn

# 创建一个简单的线性模型
class LinearRegressionModel(nn.Module):
    def __init__(self):
        super().__init__()
        self.linear = nn.Linear(in_features=1, out_features=1)  # 输入 1 维, 输出 1 维

    def forward(self, x):
        return self.linear(x)

model = LinearRegressionModel()

解释

  • nn.Module:所有神经网络模型的基类。
  • nn.Linear(in_features=1, out_features=1):创建一个 单输入、单输出 的线性层。
  • forward(self, x):定义前向传播,即模型如何处理输入 x 并返回输出。

这个模型用于 学习一个简单的线性关系


3. 训练模型

训练神经网络时,我们通常需要:

  • 损失函数 (Loss Function):衡量预测值与真实值之间的差距。
  • 优化器 (Optimizer):调整模型参数以最小化损失。
# 定义损失函数和优化器
loss_fn = nn.MSELoss()  # 均方误差损失
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)  # 随机梯度下降 (SGD)

# 训练循环
epochs = 100
for epoch in range(epochs):
    model.train()  # 设为训练模式

    # 计算预测值
    y_pred = model(X)

    # 计算损失
    loss = loss_fn(y_pred, y)

    # 清空梯度
    optimizer.zero_grad()

    # 反向传播
    loss.backward()

    # 更新参数
    optimizer.step()

    if epoch % 10 == 0:
        print(f"Epoch {epoch}: Loss = {loss.item()}")

解释

  • nn.MSELoss():使用 均方误差 (Mean Squared Error, MSE) 作为损失函数。
  • torch.optim.SGD(model.parameters(), lr=0.01):使用 随机梯度下降 (SGD) 优化器,学习率 0.01
  • optimizer.zero_grad():清空梯度,避免梯度累积。
  • loss.backward():计算梯度。
  • optimizer.step():更新模型参数。

这个训练循环运行 100 轮 (epochs),并在每 10 轮打印一次损失。


4. 预测与评估

训练完模型后,我们可以使用它来进行预测,并评估它的表现。

model.eval()  # 设为评估模式
with torch.no_grad():
    y_pred = model(X)

# 可视化结果
import matplotlib.pyplot as plt

plt.scatter(X, y, label="真实数据")
plt.plot(X, y_pred, color="red", label="预测结果")
plt.legend()
plt.show()

解释

  • model.eval():将模型设置为 评估模式,防止 dropout 或 batch normalization 影响结果。
  • with torch.no_grad():在 推理时不计算梯度,提高运行效率。
  • plt.scatter(X, y):绘制真实数据点。
  • plt.plot(X, y_pred):绘制模型的预测结果。

5. 保存与加载模型

训练完成后,我们可以保存模型,以便以后使用。

# 保存模型
torch.save(model.state_dict(), "linear_regression.pth")

# 加载模型
loaded_model = LinearRegressionModel()
loaded_model.load_state_dict(torch.load("linear_regression.pth"))
loaded_model.eval()

解释

  • torch.save(model.state_dict(), "linear_regression.pth"):保存 模型参数
  • torch.load("linear_regression.pth"):加载保存的参数。
  • loaded_model.load_state_dict(...):将参数加载到一个新的模型实例中。
  • loaded_model.eval():设置为评估模式。

这样我们就可以 随时重新加载训练好的模型,而不需要重新训练。


6. 整合所有步骤

最终,完整的 PyTorch 工作流如下:

  1. 准备数据
  2. 构建模型
  3. 定义损失函数和优化器
  4. 训练模型
  5. 进行预测和评估
  6. 保存和加载模型

这个流程不仅适用于 简单的线性回归,还可以扩展到 复杂的神经网络和深度学习任务

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。