您现在的位置是:首页 >其他 >PyTorch for Deeplearning 01PyTorch 工作流介绍网站首页其他
PyTorch for Deeplearning 01PyTorch 工作流介绍
简介PyTorch for Deeplearning 01PyTorch 工作流介绍
什么是 PyTorch?
PyTorch 是一种人工智能(AI)框架,可以帮助我们用代码来训练计算机去发现规律并做预测。就像人类学习数学公式一样,PyTorch 可以帮计算机学习数学关系,并且自动调整参数,让它能更准确地做出预测。
你可以把 PyTorch 想象成:
- 老师:教计算机如何发现规律。
- 学生:计算机本身,它会根据数据来学习。
- 作业:我们提供的数据,就像练习题一样,帮助计算机学习。
- 考试:当计算机学会了之后,我们让它做新的题目,看看它表现得怎么样。
PyTorch 工作流介绍
PyTorch 是一个流行的深度学习框架,它的核心工作流通常包括以下几个步骤:
- 数据准备 (Data Preparation)
- 构建模型 (Model Building)
- 训练模型 (Training the Model)
- 预测与评估 (Inference & Evaluation)
- 保存与加载模型 (Saving & Loading a Model)
- 整合所有步骤 (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):生成从0到1之间的数,并将其转换为 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 工作流如下:
- 准备数据
- 构建模型
- 定义损失函数和优化器
- 训练模型
- 进行预测和评估
- 保存和加载模型
这个流程不仅适用于 简单的线性回归,还可以扩展到 复杂的神经网络和深度学习任务。
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。





QT多线程的5种用法,通过使用线程解决UI主界面的耗时操作代码,防止界面卡死。...
U8W/U8W-Mini使用与常见问题解决
stm32使用HAL库配置串口中断收发数据(保姆级教程)
分享几个国内免费的ChatGPT镜像网址(亲测有效)
Allegro16.6差分等长设置及走线总结