当前位置: 首页 > article >正文

PyTorch 中常用的函数方法

文章目录

    • 一、张量操作
    • 二、神经网络构建和训练
    • 三、其他常用函数和方法
    • 示例代码
      • 一、张量操作
      • 二、神经网络构建和训练
      • 三、其他常用函数和方法

PyTorch是一个广泛使用的深度学习框架,它提供了丰富的函数和方法来处理张量、构建和训练神经网络。以下是一些PyTorch中常用的函数和方法:

一、张量操作

  1. 创建张量

    • torch.tensor(): 从数据(如列表或NumPy数组)创建张量。
    • torch.full(): 用指定值填充指定大小的张量。
    • torch.zeros(): 创建全零张量。
    • torch.ones(): 创建全一张量。
    • torch.randn(): 创建符合标准正态分布的随机张量。
  2. 张量形状和维度变换

    • view(): 改变张量的形状,不改变其数据。
    • t(): 对二维张量进行转置。
    • permute(): 重新排列张量的维度。
    • unsqueeze(): 增加张量的维度。
    • squeeze(): 去除张量中维度为1的维度。
    • transpose(): 交换张量的两个维度。
  3. 张量连接和分割

    • cat(): 沿指定维度连接张量。
    • stack(): 沿新维度连接张量。
    • chunk(): 将张量均匀分割成若干小块。
    • split(): 根据给定的分割大小或索引列表分割张量。
  4. 索引和切片

    • 使用索引和切片操作来访问张量的元素或子张量。
  5. 数学运算

    • 张量支持基本的数学运算,如加法、减法、乘法、除法等。
    • torch.sum(): 计算张量的元素和。
    • torch.mean(): 计算张量的平均值。
    • torch.max(): 返回张量中的最大值及其索引。
    • torch.min(): 返回张量中的最小值及其索引。
    • torch.topk(): 返回张量中指定维度上前k个最大的元素。

二、神经网络构建和训练

  1. 参数初始化

    • 使用nn.init模块中的函数(如normal_)来初始化神经网络的参数。
  2. 激活函数

    • ReLU(): 线性整流函数。
    • sigmoid(): S型函数,将输入映射到(0,1)之间。
    • tanh(): 双曲正切函数,将输入映射到(-1,1)之间。
  3. 损失函数

    • nn.MSELoss(): 均方误差损失。
    • nn.CrossEntropyLoss(): 交叉熵损失,常用于分类任务。
    • nn.CTCLoss(): 连接时序分类损失,用于处理序列数据。
  4. 优化器

    • optim.SGD(): 随机梯度下降优化器。
    • optim.Adam(): Adam优化器,一种基于一阶和二阶矩估计的自适应学习率优化算法。
  5. 训练过程

    • 使用model.train()model.eval()来切换模型的训练模式和评估模式。
    • 使用optimizer.zero_grad()来清除之前的梯度。
    • 使用loss.backward()来计算损失函数的梯度。
    • 使用optimizer.step()来更新模型的参数。
  6. 数据加载和预处理

    • 使用torchvision.transforms模块中的函数(如ToTensor()Normalize()等)来预处理图像数据。
    • 使用DataLoader来加载数据集,支持批量处理、打乱数据顺序等功能。

三、其他常用函数和方法

  1. 设备管理

    • torch.device(): 指定张量或模型所在的设备(CPU或GPU)。
    • torch.cuda.is_available(): 检查CUDA是否可用。
  2. 随机数和种子

    • torch.manual_seed(seed): 为CPU设置随机数种子。
    • torch.cuda.manual_seed_all(seed): 为所有GPU设置随机数种子。
  3. 梯度管理

    • tensor.detach(): 返回一个从当前计算图中分离的新张量,不再需要计算梯度。
    • tensor.requires_grad_(): 就地设置张量是否需要计算梯度。
    • with torch.no_grad(): 临时禁用梯度计算,用于推理或评估模式。
  4. 模型保存和加载

    • 使用torch.save()torch.load()来保存和加载模型参数。

PyTorch的函数和方法非常丰富,上述列举的只是一些常用的部分。在实际应用中,根据具体需求选择合适的函数和方法是非常重要的。

示例代码

一、张量操作

import torch


print("----------创建张量----------")

# 从列表创建张量
tensor_from_list = torch.tensor([1, 2, 3, 4])
print(tensor_from_list)

# 创建全零张量
zeros_tensor = torch.zeros((2, 3))
print(zeros_tensor)

# 创建符合标准正态分布的随机张量
randn_tensor = torch.randn(2, 3)
print(randn_tensor)

print("----------张量形状和维度变换----------")

# 改变张量的形状
reshaped_tensor = tensor_from_list.view(-1, 2)  # -1表示自动计算该维度大小
print(reshaped_tensor)

# 转置二维张量
transposed_tensor = reshaped_tensor.t()
print(transposed_tensor)

# 增加张量的维度
unsqueeze_tensor = tensor_from_list.unsqueeze(0)  # 在第0维增加一个维度
print(unsqueeze_tensor.shape)

# 重新排列张量的维度
permute_1 = unsqueeze_tensor.permute(1, 0)
print(permute_1)

# 去除维度为1的维度
squeeze_tensor = unsqueeze_tensor.squeeze(0)
print(squeeze_tensor.shape)

print("----------张量连接----------")

# 沿第0维连接两个张量
tensor1 = torch.tensor([[1, 2], [3, 4]])
tensor2 = torch.tensor([[5, 6], [7, 8]])
concatenated_tensor = torch.cat((tensor1, tensor2), dim=0)
print(concatenated_tensor)

二、神经网络构建和训练

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

print("----------激活函数----------")

# 使用ReLU激活函数  
relu = nn.ReLU()  
input_tensor = torch.tensor([-1.0, 0.0, 1.0, 2.0])  
output_tensor = relu(input_tensor)  
print(output_tensor)  
  
# 使用sigmoid激活函数  
sigmoid = nn.Sigmoid()  
output_tensor = sigmoid(input_tensor)  
print(output_tensor)

print("----------损失函数和优化器----------")

# 假设有一个简单的线性模型  
model = nn.Linear(2, 1)  # 输入特征数为2,输出特征数为1  
  
# 损失函数  
criterion = nn.MSELoss()  
  
# 优化器  
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)  
  
# 假设有一些输入和目标数据  
inputs = torch.tensor([[1.0, 2.0], [2.0, 3.0]], requires_grad=True)  
targets = torch.tensor([[2.0], [4.0]])  
  
# 前向传播  
outputs = model(inputs)  
loss = criterion(outputs, targets)  
  
# 反向传播和优化  
optimizer.zero_grad()  
loss.backward()  
optimizer.step()  
  
print(loss.item())  # 打印损失值

三、其他常用函数和方法

import torch

"""   设备管理   """

# 检查CUDA是否可用  
if torch.cuda.is_available():  
    device = torch.device("cuda")  
    print("CUDA is available! Training on GPU.")  
else:  
    device = torch.device("cpu")  
    print("CUDA is not available. Training on CPU.")  
  
# 将模型移动到指定设备  
model.to(device)

""" 模型保存和加载 """

# 保存模型参数  
torch.save(model.state_dict(), "model.pth")  
  
# 加载模型参数  
model = nn.Linear(2, 1)  # 需要先创建一个相同结构的模型  
model.load_state_dict(torch.load("model.pth"))  
model.eval()  # 切换到评估模式


http://www.kler.cn/a/369757.html

相关文章:

  • 代码随想录:513. 找树左下角的值
  • 大数据新视界 -- 大数据大厂之大数据重塑影视娱乐产业的未来(4 - 1)
  • 项目组件:(Json\Muduo)
  • Linux系统操作篇 one -文件指令及文件知识铺垫
  • 计算机网络-MSTP的基础概念
  • 衡石分析平台系统分析人员手册-导入图表库图表
  • 数据库课程 第一周
  • 熵与信息论
  • ip命令设置固定IP(暂时设置,重启失效)
  • Ubuntu中VSCode以sudo开始GDB调试C程序方法
  • 【electron8】electron实现“图片”的另存为
  • JavaScript数组常用方法 - 2024最新版前端秋招面试短期突击面试题【100道】
  • cobalt strikemetasploit 小记
  • appium 的工作原理
  • 【教程】如何查看IEEE会员证书Membership Card
  • OpenCV中的坐标运算 [C#]
  • 记录一个容器间访问不通问题
  • 学习记录:js算法(七十八):划分字母区间
  • webpack常用插件有哪些??
  • .NET 8 中的 Mini WebApi