首页 > AI & 数据分析 > PyTorch入门教程 > 一小时入门 PyTorch

1.引言

欢迎阅读本篇“一小时入门 PyTorch”的教程!PyTorch 是一个开源的机器学习库,由 Facebook AI Research 开发,广泛用于构建和训练神经网络。它基于 Python,易于使用,特别适合初学者和研究人员。其动态计算图功能允许你在运行时修改模型,相比静态图框架(如 TensorFlow 的早期版本)更灵活。本教程旨在在一小时内帮助你掌握 PyTorch 的基本概念和实践,适合完全没有经验的初学者。

2.安装 PyTorch

首先,确保你已安装 Python。可以通过以下命令安装 PyTorch:

  • CPU 版本安装:
    pip install torch
  • 如果有 CUDA 支持的 GPU,可以安装 GPU 版本,参考 官方安装指南

安装完成后,你可以导入 PyTorch 并开始学习。

3.张量:PyTorch 的基础

张量是 PyTorch 的核心数据结构,类似于 NumPy 数组,但支持 GPU 加速,这对深度学习任务至关重要。

3.1 创建张量

  • 从 Python 列表创建
import torch a = torch.Tensor([[1, 2], [3, 4]]) print(a)
  • 从 NumPy 数组创建:
import numpy as np np_array = np.array([[1, 2], [3, 4]]) tensor_from_np = torch.from_numpy(np_array) print(tensor_from_np)
  • 使用特定函数创建:
b = torch.zeros(2, 3) # 2x3 的零张量 c = torch.ones(2, 3) # 2x3 的全 1 张量 d = torch.randn(2, 3) # 2x3 的随机值张量(正态分布)

3.2 张量操作

PyTorch 支持多种张量操作,类似于 NumPy:

  • 加法
x = torch.Tensor([1, 2]) y = torch.Tensor([3, 4]) z = x + y # 或 torch.add(x, y) print(z)
  • 乘法
z = x * y # 或 torch.mul(x, y) print(z)
  • 矩阵乘法:
a = torch.Tensor([[1, 2], [3, 4]]) b = torch.Tensor([[5, 6], [7, 8]]) c = torch.mm(a, b) # 或 a @ b(Python 3.6+) print(c)

3.3 张量属性

张量有形状(shape)、大小(size)和设备(CPU 或 GPU)等属性:

  • 查看形状:
print(a.size()) # 返回维度元组 print(a.shape) # 同 size()
  • 移动到 GPU:
if torch.cuda.is_available(): device = torch.device("cuda") a = a.to(device)

4. 自动微分(Autograd)

Autograd 是 PyTorch 的自动微分引擎,用于计算张量相对于某些参数的梯度,这是训练神经网络的关键。

4.1 Autograd 基础

创建具有 requires_grad=True 的张量时,它会跟踪操作以便计算梯度:

x = torch.Tensor([1, 2, 3], requires_grad=True) y = x * 2 z = y.sum() z.backward() # 计算梯度 print(x.grad) # 打印 x 的梯度

4.2 禁用 Autograd

有时你可能不想跟踪梯度(例如推理阶段),可以使用 torch.no_grad()

with torch.no_grad(): # 这里的操作不会跟踪梯度

5. 构建简单神经网络

我们将通过一个线性回归示例,学习如何定义和训练一个简单模型。

5.1 定义模型

使用 nn 模块定义一个线性模型:

import torch.nn as nn class LinearModel(nn.Module): def __init__(self): super(LinearModel, self).__init__() self.linear = nn.Linear(1, 1) # 输入 1 维,输出 1 维 def forward(self, x): return self.linear(x) model = LinearModel()

nn.Module 是所有神经网络模块的基类,forward 方法定义输入如何通过网络转换。

6. 训练模型

训练模型需要损失函数和优化器。

6.1 损失函数

对于回归任务,我们使用均方误差(MSE):

criterion = nn.MSELoss()

6.2 优化器

我们使用随机梯度下降(SGD):

optimizer = torch.optim.SGD(model.parameters(), lr=0.01)

6.3 训练循环

假设我们有输入数据 X_tensor 和目标数据 y_tensor,训练循环如下:

num_epochs = 100 for epoch in range(num_epochs): # 前向传播 outputs = model(X_tensor) loss = criterion(outputs, y_tensor) # 反向传播 optimizer.zero_grad() # 清零梯度 loss.backward() # 计算梯度 optimizer.step() # 更新参数 # 每 10 个 epoch 打印损失 if (epoch + 1) % 10 == 0: print(f'Epoch {epoch+1}, Loss: {loss.item()}')

7. 进行预测

训练完成后,可以使用模型进行预测:

with torch.no_grad(): new_data = torch.Tensor([[2.0]]) # 示例新数据点 prediction = model(new_data) print("Prediction:", prediction.item())

8. 保存和加载模型

8.1 保存模型:

torch.save(model.state_dict(), 'model.pth')

8.2 加载模型:

model = LinearModel() model.load_state_dict(torch.load('model.pth')) model.eval() # 设置为评估模式

9. 额外注意事项

  • **数据分割:**在实际场景中,建议将数据分为训练集和验证集,以监控模型在未见数据上的表现,帮助检测过拟合和调整超参数。
  • **进一步学习:**官方文档和教程是深入学习的宝贵资源,访问 PyTorch 官方教程 获取更多内容。

表格:PyTorch 核心组件总结

组件 描述 示例用法
张量 (Tensor) 多维数组,支持 GPU 加速 torch.Tensor([[1, 2], [3, 4]])
Autograd 自动微分引擎,计算梯度 x.requires_grad=True; x.backward()
nn.Module 神经网络模块基类,定义模型结构 class LinearModel(nn.Module): ...
损失函数 衡量预测与实际值差异(如 MSE) criterion = nn.MSELoss()
优化器 更新模型参数(如 SGD) optimizer = torch.optim.SGD(...)

10. 最后

本教程为你提供了一个坚实的基础,帮助你理解和使用 PyTorch 进行深度学习任务。通过实践和探索更高级主题,你可以利用 PyTorch 解决复杂的机器学习问题。

本文来自互联网用户投稿,不拥有所有权,该文观点仅代表作者本人,不代表本站立场。
访问者可将本网站提供的内容或服务用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯本网站及相关权利人的合法权利。
本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站,邮箱:80764001@qq.com,予以删除。
© 2023 PV138 · 站点地图 · 免责声明 · 联系我们 · 问题反馈