【PyTorch学习-1】张量操作|自动求导|神经网络模块|优化器|数据加载与处理|GPU 加速...

【PyTorch学习-1】张量操作|自动求导|神经网络模块|优化器|数据加载与处理|GPU 加速...

【PyTorch学习-1】张量操作|自动求导|神经网络模块|优化器|数据加载与处理|GPU 加速...


文章目录

  • [【PyTorch学习-1】张量操作|自动求导|神经网络模块|优化器|数据加载与处理|GPU 加速...](#【PyTorch学习-1】张量操作|自动求导|神经网络模块|优化器|数据加载与处理|GPU 加速...)
  • 前言
  • [1. PyTorch 常用库和模块](#1. PyTorch 常用库和模块)
  • [2. 张量操作(Tensor)](#2. 张量操作(Tensor))
    • [2.1 创建张量](#2.1 创建张量)
    • [2.2 张量的属性](#2.2 张量的属性)
    • [2.3 张量的操作](#2.3 张量的操作)
    • [2.4 张量与 NumPy 的转换](#2.4 张量与 NumPy 的转换)
  • [3. 自动求导(Autograd)](#3. 自动求导(Autograd))
    • [3.1 自动求导的基本操作](#3.1 自动求导的基本操作)
    • [3.2 停止梯度追踪](#3.2 停止梯度追踪)
    • [3.3 计算图与梯度累积](#3.3 计算图与梯度累积)
  • [4. 神经网络模块(torch.nn)](#4. 神经网络模块(torch.nn))
    • [4.1 定义神经网络模型](#4.1 定义神经网络模型)
    • [4.2 常用层](#4.2 常用层)
    • [4.3 损失函数](#4.3 损失函数)
  • [5. 优化器(torch.optim)](#5. 优化器(torch.optim))
    • [5.1 常用优化器](#5.1 常用优化器)
    • [5.2 使用优化器](#5.2 使用优化器)
  • [6. 数据加载与处理(torch.utils.data)](#6. 数据加载与处理(torch.utils.data))
    • [6.1 Dataset 类](#6.1 Dataset 类)
    • [6.2 DataLoader 类](#6.2 DataLoader 类)
  • [7. GPU加速](#7. GPU加速)
    • [7.1 检查是否支持 GPU](#7.1 检查是否支持 GPU)
    • [7.2 将模型和张量迁移到 GPU](#7.2 将模型和张量迁移到 GPU)

欢迎宝子们点赞、关注、收藏!欢迎宝子们批评指正!

前言

PyTorch 是一个非常流行的深度学习框架,提供了灵活和易用的 API,支持张量计算、自动求导、构建神经网络、GPU 加速等。下面是 PyTorch 常用的语法和函数的全面介绍,涵盖张量操作、神经网络构建、优化器、自动求导、数据处理等。

1. PyTorch 常用库和模块

  • 1.torch:核心模块,包含张量操作、数学计算、自动求导等功能。
  • 2.torch.nn:神经网络相关的模块,提供各种层(如卷积、全连接等)和常用损失函数。
  • 3.torch.optim:优化器模块,用于定义优化算法,如 SGD、Adam 等。
  • 4.torch.autograd:自动求导模块,用于实现自动反向传播计算。
  • 5.torch.utils.data:数据处理模块,包含 DatasetDataLoader,用于处理和加载数据集。

2. 张量操作(Tensor)

张量是 PyTorch 的核心数据结构,类似于 NumPy 的数组,但可以在 GPU 上运行。

2.1 创建张量

  • 通过 torch.tensor() 创建张量:
csharp 复制代码
import torch
a = torch.tensor([1, 2, 3])
print(a)  # tensor([1, 2, 3])
  • 创建随机数张量:
csharp 复制代码
rand_tensor = torch.rand(3, 4)  # 3x4的随机数张量
print(rand_tensor)

2.2 张量的属性

  • shapedtypedevice
csharp 复制代码
tensor = torch.rand(3, 4)
print(tensor.shape)  # 输出张量的形状
print(tensor.dtype)  # 数据类型
print(tensor.device) # 设备(CPU or GPU)

2.3 张量的操作

  • 张量的数学运算,如加减乘除、矩阵乘法:
csharp 复制代码
a = torch.tensor([1, 2])
b = torch.tensor([3, 4])
print(a + b)  # 加法
print(a * b)  # 乘法
print(a @ b.T)  # 矩阵乘法
  • 维度变换:view()reshape()transpose() 用于改变张量形状:
csharp 复制代码
x = torch.randn(4, 3)
y = x.view(3, 4)  # 改变形状
print(y)
  • 索引和切片:
csharp 复制代码
x = torch.tensor([[1, 2], [3, 4], [5, 6]])
print(x[0])       # 选择第一行
print(x[:, 1])    # 选择第二列
print(x[1:, :])   # 选择从第二行开始的所有行

2.4 张量与 NumPy 的转换

  • torch.Tensor 转换为 numpy.array
csharp 复制代码
a = torch.ones(5)
b = a.numpy()
print(b)
  • numpy.array 转换为 torch.Tensor
csharp 复制代码
import numpy as np
a = np.ones(5)
b = torch.from_numpy(a)
print(b)

3. 自动求导(Autograd)

PyTorch 中的 autograd 模块支持自动求导功能,即反向传播。

3.1 自动求导的基本操作

  • requires_grad 标志用于启用对张量的梯度跟踪:
csharp 复制代码
x = torch.tensor([2.0, 3.0], requires_grad=True)
y = x ** 2  # y = [4, 9]
y.backward(torch.tensor([1.0, 1.0]))  # 计算梯度
print(x.grad)  # 输出 x 的梯度

3.2 停止梯度追踪

在推理阶段或者某些计算中,我们不需要计算梯度,可以使用 torch.no_grad()detach()

  • 使用 no_grad()
csharp 复制代码
with torch.no_grad():
    y = model(x)
  • 使用 detach()
csharp 复制代码
x = torch.tensor([1.0], requires_grad=True)
y = x ** 2
z = y.detach()  # z 不会计算梯度

3.3 计算图与梯度累积

  • 反向传播时,PyTorch 会默认将梯度累积到 grad 属性中,因此在每次反向传播之前,需要清零梯度:
csharp 复制代码
optimizer.zero_grad()
loss.backward()
optimizer.step()

4. 神经网络模块(torch.nn)

PyTorch 提供了 torch.nn 模块,用于定义神经网络的层和损失函数。

4.1 定义神经网络模型

torch.nn.Module 是所有神经网络的基类,通常需要在类的 __init__ 方法中定义网络的层,在 forward() 方法中定义前向传播过程。

  • 简单的前馈神经网络示例:
csharp 复制代码
import torch.nn as nn

class SimpleNet(nn.Module):
    def __init__(self):
        super(SimpleNet, self).__init__()
        self.fc1 = nn.Linear(10, 50)
        self.fc2 = nn.Linear(50, 1)

    def forward(self, x):
        x = torch.relu(self.fc1(x))
        x = self.fc2(x)
        return x

model = SimpleNet()

4.2 常用层

  • 全连接层torch.nn.Linear 用于实现全连接层。
csharp 复制代码
fc = nn.Linear(in_features=10, out_features=5)
  • 卷积层torch.nn.Conv2d 用于实现二维卷积。
csharp 复制代码
conv = nn.Conv2d(in_channels=3, out_channels=16, kernel_size=3)
  • 激活函数

    ReLU:torch.nn.ReLU()

    Sigmoid:torch.nn.Sigmoid()

    Tanh:torch.nn.Tanh()

  • 池化层:torch.nn.MaxPool2dtorch.nn.AvgPool2d 用于池化操作。

csharp 复制代码
pool = nn.MaxPool2d(kernel_size=2, stride=2)

4.3 损失函数

PyTorch 提供了多种常用的损失函数,如均方误差(MSE)、交叉熵损失(CrossEntropy)。

  • 均方误差(MSE)损失函数:
csharp 复制代码
loss_fn = nn.MSELoss()
loss = loss_fn(predicted_output, target_output)
  • 交叉熵损失函数:
csharp 复制代码
loss_fn = nn.CrossEntropyLoss()
loss = loss_fn(predictions, labels)

5. 优化器(torch.optim)

PyTorch 的 torch.optim 模块提供了多种优化算法,用于更新模型的参数。

5.1 常用优化器

  • 随机梯度下降(SGD):
csharp 复制代码
optimizer = torch.optim.SGD(model.parameters(), lr=0.01, momentum=0.9)
  • Adam 优化器:
csharp 复制代码
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)

5.2 使用优化器

  • 在每个训练迭代中,使用优化器更新模型参数的典型步骤:
csharp 复制代码
optimizer.zero_grad()  # 清空梯度
loss.backward()  # 反向传播
optimizer.step()  # 更新参数

6. 数据加载与处理(torch.utils.data)

6.1 Dataset 类

torch.utils.data.Dataset 是数据集的抽象类,用户可以通过继承 Dataset 类来自定义数据集。

  • 自定义数据集:
csharp 复制代码
from torch.utils.data import Dataset

class CustomDataset(Dataset):
    def __init__(self, data, labels):
        self.data = data
        self.labels = labels

    def __len__(self):
        return len(self.data)

    def __getitem__(self, index):
        return self.data[index], self.labels[index]

6.2 DataLoader 类

torch.utils.data.DataLoader 用于将 Dataset 打包成可迭代的数据批次,并支持多线程加载。

  • 使用 DataLoader
csharp 复制代码
from torch.utils.data import DataLoader

dataset = CustomDataset(data, labels)
dataloader = DataLoader(dataset, batch_size=32, shuffle=True)
for batch in dataloader:
    inputs, targets = batch

7. GPU加速

PyTorch 提供了对 GPU 的支持,可以使用 CUDA 设备加速计算。

7.1 检查是否支持 GPU

csharp 复制代码
print(torch.cuda.is_available())

7.2 将模型和张量迁移到 GPU

  • 将张量迁移到 GPU:
csharp 复制代码
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
tensor = tensor.to(device)
  • 将模型迁移到 GPU:
csharp 复制代码
model = model.to(device)

通过这份全面的 PyTorch 语法和函数介绍,你可以更好地掌握 PyTorch 的基本用法以及常用的深度学习相关功能。

相关推荐
luthane27 分钟前
python 实现algorithm topo卡恩拓扑算法
数据结构·python·算法
歌者長門35 分钟前
AD21中如何给过孔添加盖油
笔记·学习·pcb工艺
云翼时代科技1 小时前
【探索艺术新纪元:Midjourney中文版,让创意无界!】
人工智能
坚持学习的你1 小时前
Jax(Random、Numpy)常用函数
人工智能·pytorch·python·jax
KGback1 小时前
【项目记录】大模型基于llama.cpp在Qemu-riscv64向量扩展指令下的部署
人工智能·llama·riscv
ZPC82101 小时前
Pytorch详解-Pytorch核心模块
人工智能·pytorch·python·深度学习·机器学习
马甲是掉不了一点的<.<1 小时前
论文精读:基于渐进式转移的无监督域自适应舰船检测
人工智能·目标检测·计算机视觉·领域迁移
灵雀云1 小时前
CNAI趋势下,打造一体化AI赋能平台
人工智能
985小水博一枚呀1 小时前
【深度学习基础模型】极限学习机(Extreme Learning Machines, ELM)详细理解并附实现代码。
人工智能·python·深度学习·极限学习机