PyTorch是一个广泛使用的深度学习框架,它提供了丰富的函数和方法来处理张量、构建和训练神经网络。以下是一些PyTorch中常用的函数和方法:
一、张量操作
-
创建张量
torch.tensor()
: 从数据(如列表或NumPy数组)创建张量。torch.full()
: 用指定值填充指定大小的张量。torch.zeros()
: 创建全零张量。torch.ones()
: 创建全一张量。torch.randn()
: 创建符合标准正态分布的随机张量。
-
张量形状和维度变换
view()
: 改变张量的形状,不改变其数据。t()
: 对二维张量进行转置。permute()
: 重新排列张量的维度。unsqueeze()
: 增加张量的维度。squeeze()
: 去除张量中维度为1的维度。transpose()
: 交换张量的两个维度。
-
张量连接和分割
cat()
: 沿指定维度连接张量。stack()
: 沿新维度连接张量。chunk()
: 将张量均匀分割成若干小块。split()
: 根据给定的分割大小或索引列表分割张量。
-
索引和切片
- 使用索引和切片操作来访问张量的元素或子张量。
-
数学运算
- 张量支持基本的数学运算,如加法、减法、乘法、除法等。
torch.sum()
: 计算张量的元素和。torch.mean()
: 计算张量的平均值。torch.max()
: 返回张量中的最大值及其索引。torch.min()
: 返回张量中的最小值及其索引。torch.topk()
: 返回张量中指定维度上前k个最大的元素。
二、神经网络构建和训练
-
参数初始化
- 使用
nn.init
模块中的函数(如normal_
)来初始化神经网络的参数。
- 使用
-
激活函数
ReLU()
: 线性整流函数。sigmoid()
: S型函数,将输入映射到(0,1)之间。tanh()
: 双曲正切函数,将输入映射到(-1,1)之间。
-
损失函数
nn.MSELoss()
: 均方误差损失。nn.CrossEntropyLoss()
: 交叉熵损失,常用于分类任务。nn.CTCLoss()
: 连接时序分类损失,用于处理序列数据。
-
优化器
optim.SGD()
: 随机梯度下降优化器。optim.Adam()
: Adam优化器,一种基于一阶和二阶矩估计的自适应学习率优化算法。
-
训练过程
- 使用
model.train()
和model.eval()
来切换模型的训练模式和评估模式。 - 使用
optimizer.zero_grad()
来清除之前的梯度。 - 使用
loss.backward()
来计算损失函数的梯度。 - 使用
optimizer.step()
来更新模型的参数。
- 使用
-
数据加载和预处理
- 使用
torchvision.transforms
模块中的函数(如ToTensor()
、Normalize()
等)来预处理图像数据。 - 使用
DataLoader
来加载数据集,支持批量处理、打乱数据顺序等功能。
- 使用
三、其他常用函数和方法
-
设备管理
torch.device()
: 指定张量或模型所在的设备(CPU或GPU)。torch.cuda.is_available()
: 检查CUDA是否可用。
-
随机数和种子
torch.manual_seed(seed)
: 为CPU设置随机数种子。torch.cuda.manual_seed_all(seed)
: 为所有GPU设置随机数种子。
-
梯度管理
tensor.detach()
: 返回一个从当前计算图中分离的新张量,不再需要计算梯度。tensor.requires_grad_()
: 就地设置张量是否需要计算梯度。with torch.no_grad()
: 临时禁用梯度计算,用于推理或评估模式。
-
模型保存和加载
- 使用
torch.save()
和torch.load()
来保存和加载模型参数。
- 使用
PyTorch的函数和方法非常丰富,上述列举的只是一些常用的部分。在实际应用中,根据具体需求选择合适的函数和方法是非常重要的。
示例代码
一、张量操作
import torch
print("----------创建张量----------")
# 从列表创建张量
tensor_from_list