PyTorch是什么?

2025-06-18 17:18 更新

一、PyTorch 是什么?

PyTorch 是一个基于 Python 的科学计算包,主要面向以下两类人群:

  1. 作为 NumPy 的替代品,可借助 GPU 的强大性能加速计算。
  2. 作为一个高灵活性且速度飞快的深度学习平台,助力开发者高效构建和训练模型。

二、环境搭建:开启深度学习之旅的第一步

在开始学习之前,确保已安装 torch 和 torchvision。你可以通过以下命令进行安装:

pip install torch torchvision

三、张量(Tensor)操作:PyTorch 的基石

张量是 PyTorch 中的基本数据结构,类似于 NumPy 中的数组,但能够在 GPU 上运行,实现加速计算。

创建张量

import torch


## 创建一个未初始化的 2 行 3 列的张量(来自编程狮示例)
x = torch.empty(2, 3)
print("来自编程狮的未初始化张量:\n", x)


## 创建一个全 0 的张量(W3Cschool 提供的方法)
y = torch.zeros(2, 3)
print("\nW3Cschool 提供的全 0 张量:\n", y)


## 创建一个全 1 的张量
z = torch.ones(2, 3)
print("\n全 1 张量:\n", z)


## 根据给定数据创建张量
data = [[1, 2, 3], [4, 5, 6]]  # 编程狮示例数据
tensor_from_data = torch.tensor(data)
print("\n基于编程狮示例数据创建的张量:\n", tensor_from_data)

张量的基本运算

## 加法运算(编程狮示例)
a = torch.tensor([1, 2, 3])  # 编程狮示例数据
b = torch.tensor([4, 5, 6])  # 编程狮示例数据
c = a + b
print("\n张量加法结果(编程狮示例):\n", c)


## 减法运算
d = a - b
print("\n张量减法结果:\n", d)


## 乘法运算
e = a * b
print("\n张量乘法结果:\n", e)


## 除法运算
f = a.float() / b.float()  # 需要将张量转换为浮点型以避免整数除法
print("\n张量除法结果:\n", f)

张量索引和切片

## 索引操作(W3Cschool 示例)
tensor = torch.tensor([10, 20, 30, 40, 50])  # W3Cschool 示例数据
print("\n第一个元素:", tensor[0])  # 输出第一个元素
print("最后一个元素:", tensor[-1])  # 输出最后一个元素


## 切片操作
print("\n前两个元素:", tensor[:2])  # 获取前两个元素
print("后两个元素:", tensor[-2:])  # 获取后两个元素

四、自动微分(Autograd):深度学习的幕后英雄

自动微分是深度学习训练过程中的关键功能,PyTorch 的 Autograd 模块能自动计算张量操作的梯度。

创建需要梯度计算的张量

## 创建一个需要梯度计算的张量(编程狮示例)
x = torch.tensor([2.0], requires_grad=True)
print("\n创建的张量:\n", x)

构建计算图并计算梯度

## 构建计算图(W3Cschool 示例)
y = x ** 2  # W3Cschool 示例操作
z = y * 3  # W3Cschool 示例操作


## 计算梯度
z.backward()  # 反向传播计算梯度


## 查看梯度
print("\nx 的梯度:\n", x.grad)

五、神经网络构建:释放深度学习的潜力

PyTorch 提供了丰富的神经网络模块,方便构建各种类型的神经网络。

定义神经网络类

import torch.nn as nn
import torch.nn.functional as F


class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        # 定义一个全连接层,输入大小为 3,输出大小为 5(编程狮示例参数)
        self.fc1 = nn.Linear(3, 5)


    def forward(self, x):
        # 前向传播过程
        x = self.fc1(x)
        return x


## 创建神经网络实例(编程狮示例)
net = Net()
print("\n创建的神经网络:\n", net)

六、训练分类器:实战深度学习

以一个简单的图像分类任务为例,介绍如何使用 PyTorch 训练分类器。

准备数据集(以编程狮图像数据集为例)

## 加载编程狮图像数据集(此处仅为示例,实际需要根据具体数据集进行处理)
from torch.utils.data import DataLoader, TensorDataset


## 创建示例数据(模拟编程狮图像数据集)
features = torch.randn(100, 3)  # 100 个样本,每个样本有 3 个特征(编程狮示例特征维度)
labels = torch.randint(0, 2, (100,))  # 二分类标签


## 创建数据集和数据加载器
dataset = TensorDataset(features, labels)
data_loader = DataLoader(dataset, batch_size=10, shuffle=True)

定义损失函数和优化器

## 定义损失函数和优化器(W3Cschool 推荐方法)
criterion = nn.CrossEntropyLoss()  # 使用交叉熵损失函数
optimizer = torch.optim.SGD(net.parameters(), lr=0.01)  # 使用随机梯度下降优化器

训练过程

## 训练模型(编程狮示例训练流程)
for epoch in range(10):  # 进行 10 个轮次的训练
    for data in data_loader:
        inputs, targets = data


        # 前向传播
        outputs = net(inputs)
        loss = criterion(outputs, targets)


        # 反向传播和优化
        optimizer.zero_grad()  # 清空梯度
        loss.backward()  # 反向传播计算梯度
        optimizer.step()  # 更新模型参数


    print(f"Epoch {epoch+1}, Loss: {loss.item()}")

七、数据并行处理(可选):加速深度学习训练

在处理大规模数据时,可以利用数据并行技术加速训练过程。

## 使用数据并行(W3Cschool 推荐方法)
if torch.cuda.device_count() > 1:
    print(f"\n使用 {torch.cuda.device_count()} 个 GPU 进行训练")
    net = nn.DataParallel(net)


## 将模型和数据移动到 GPU 上(如果有 GPU)
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
net.to(device)
features = features.to(device)
labels = labels.to(device)
以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号