PyTorch 常见用法介绍

文章目录

  • [1. PyTorch 介绍](#1. PyTorch 介绍)
  • [2. 张量基本操作](#2. 张量基本操作)
    • [2.1 创建张量](#2.1 创建张量)
    • [2.2 重塑张量](#2.2 重塑张量)
    • [2.3 索引和切片](#2.3 索引和切片)
    • [2.4 数据类型转换](#2.4 数据类型转换)
  • 3.深度学习相关的操作
    • 3.1损失函数
    • [3.2 层和模型](#3.2 层和模型)
    • [3.3 优化器](#3.3 优化器)
    • [3.4 自动求导](#3.4 自动求导)
    • [3.5 保存和加载模型](#3.5 保存和加载模型)

1. PyTorch 介绍

PyTorch 是一个开源的深度学习框架,由 Facebook 的人工智能研究团队开发和维护。它提供了丰富的工具和接口,用于构建和训练神经网络模型。PyTorch 被广泛应用于各种机器学习和深度学习任务,包括图像分类、目标检测、语义分割、自然语言处理、强化学习等。

PyTorch 具备:

  1. 动态计算图(Dynamic Computational Graph):
    PyTorch 使用动态计算图的方式进行模型构建和计算。与静态计算图相比(如 TensorFlow),动态计算图更加灵活,允许用户在运行时动态地定义、修改和执行计算图。这使得 PyTorch 在实验和原型开发时更加方便,同时也更容易进行调试和可视化。
  2. 易于使用的接口:
    PyTorch 提供了简洁清晰的 Python 接口,使得用户可以以自然的方式构建神经网络模型。其接口设计和功能组织清晰,易于理解和使用,适合从初学者到专家的各种技能水平的开发者。
  3. 自动求导(Automatic Differentiation):
    PyTorch 的 autograd 模块实现了自动求导功能,可以根据输入和模型参数自动计算损失函数相对于参数的梯度。这简化了模型训练过程中梯度计算的操作,同时也支持高阶导数计算和动态计算图。
  4. 强大的 GPU 加速支持:
    PyTorch 提供了对 GPU 的原生支持,可以利用 GPU 的并行计算能力加速神经网络模型的训练和推理过程。用户可以通过简单的配置,将计算任务分配给 GPU 执行,从而显著提高计算效率。
  5. 活跃的社区和生态系统:
    PyTorch 拥有一个庞大而活跃的开发者社区,提供了丰富的教程、文档、示例代码和第三方库,使得用户可以快速入门和解决实际问题。此外,PyTorch 生态系统也在不断发展,涵盖了模型库、工具集、扩展库等丰富的资源。

Pytorch 的官方 API 介绍看这里

2. 张量基本操作

2.1 创建张量

  • torch.tensor(data):从给定的数据创建一个张量。
  • torch.zeros(shape)torch.ones(shape):创建全零或全一的张量。
  • torch.arange(start, end, step):创建一个从startend步长为step的张量。
  • torch.randn(*size)torch.normal(mean, std, size):创建服从正态分布的随机张量。
python 复制代码
import torch

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

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

# 创建一个服从均值为0,标准差为1的随机张量
random_tensor = torch.randn(2, 2)
print(random_tensor)
bash 复制代码
tensor([1., 2., 3., 4.])
tensor([[0., 0., 0.],
        [0., 0., 0.]])
tensor([[-1.1218, -0.5705],
        [-1.6551, -0.1511]])

2.2 重塑张量

  • torch.reshape(tensor, shape)tensor.reshape(shape):改变张量的形状,但不改变元素总数。
  • torch.view(tensor, shape)tensor.view(shape):类似reshape,但在可能的情况下会共享内存。
  • torch.Tensor.permute(dim0, dim1, ...)tensor.permute(...):按照指定顺序重新排列维度。
  • torch.transpose(tensor, dim0, dim1)tensor.t():交换张量的两个维度。
python 复制代码
# 创建一个1D张量并将其重塑为2D张量
t = torch.tensor([1, 2, 3, 4])
reshaped_t = t.reshape(2, 2)
print(reshaped_t)

# 重新排列张量的维度
t = torch.randn(2, 3, 4)
print(t)
transposed_t = t.permute(2, 0, 1)
print(transposed_t)
bash 复制代码
tensor([[1, 2],
        [3, 4]])
tensor([[[-0.1610,  1.0187,  1.5717, -0.2264],
         [ 0.9088, -0.1546, -0.2941,  1.5809],
         [-0.3500, -0.0128, -2.0361, -0.7662]],

        [[-0.2943,  0.2772,  0.0761, -1.0888],
         [ 0.5634, -0.8135, -1.6208, -1.6874],
         [ 1.3876,  0.8068,  1.7220, -0.6855]]])
tensor([[[-0.1610,  0.9088, -0.3500],
         [-0.2943,  0.5634,  1.3876]],

        [[ 1.0187, -0.1546, -0.0128],
         [ 0.2772, -0.8135,  0.8068]],

        [[ 1.5717, -0.2941, -2.0361],
         [ 0.0761, -1.6208,  1.7220]],

        [[-0.2264,  1.5809, -0.7662],
         [-1.0888, -1.6874, -0.6855]]])

2.3 索引和切片

  • tensor[indexing]:通过标准Python索引规则访问或修改张量的部分元素。
  • tensor[:, :, ...]:用于多维索引。
python 复制代码
# 切片操作
t = torch.tensor([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
slice_t = t[1:, 1:]
print(slice_t)
bash 复制代码
tensor([[5, 6],
        [8, 9]])

2.4 数据类型转换

  • tensor.to(device):将张量移动到特定设备(CPU或GPU)。
  • tensor.numpy():将张量转换为NumPy数组。
  • torch.tensor(numpy_array):将NumPy数组转换为张量。
python 复制代码
import numpy as np
# 张量与NumPy数组互转
numpy_array = np.array([1, 2, 3])
tensor = torch.from_numpy(numpy_array)
back_to_numpy = tensor.numpy()
print(back_to_numpy)
bash 复制代码
[1 2 3]

3.深度学习相关的操作

3.1损失函数

  • torch.nn.CrossEntropyLoss():用于多类分类问题,通常不需要对标签进行one-hot编码。

3.2 层和模型

  • nn.Linear(in_features, out_features):定义线性层。
  • nn.LSTM(input_size, hidden_size, num_layers, ...):定义长短时记忆(LSTM)循环神经网络层。

3.3 优化器

  • torch.optim.SGD(model.parameters(), lr):定义使用随机梯度下降优化模型参数的优化器。
  • optimizer.step():执行一次优化步骤来更新模型参数。
  • optimizer.zero_grad():清零优化器中所有参数的梯度。

3.4 自动求导

  • x.requires_grad_(True):开启张量的自动求导追踪。
  • y.backward():计算张量y关于其依赖项的梯度。

3.5 保存和加载模型

  • torch.save(model.state_dict(), 'model.pth'):保存模型权重。
  • model.load_state_dict(torch.load('model.pth')):加载模型权重。
相关推荐
计算机相关知识分享3 分钟前
python基础知识(二)
开发语言·python
Python私教33 分钟前
PyPika:Python SQL 查询构建器
开发语言·python·sql
tzc_fly2 小时前
使用机器学习在单细胞水平识别肿瘤细胞
人工智能·机器学习
IT古董2 小时前
【漫话机器学习系列】021.类别特征(Categorical Feature)
人工智能·机器学习
湫ccc2 小时前
《机器学习》数据预处理简介
人工智能·机器学习
AI研习星球2 小时前
数据分析-50-客户价值分析-用Python实现RFM模型
python·机器学习·自然语言处理·数据挖掘·数据分析·算法学习·论文辅导
机器懒得学习2 小时前
打造智能化恶意软件检测桌面系统:从数据分析到一键报告生成
人工智能·python·算法·数据挖掘
szpc16213 小时前
100V宽压输入反激隔离电源,适用于N道沟MOSFET或GaN或5V栅极驱动器,无需光耦合
c语言·开发语言·人工智能·单片机·嵌入式硬件·生成对抗网络·fpga开发
tony3653 小时前
optuna和 lightgbm
pytorch·python·深度学习
weixin_543662863 小时前
伏羲0.13(文生图)
人工智能·深度学习