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')):加载模型权重。
相关推荐
wxin_VXbishe13 分钟前
springboot合肥师范学院实习实训管理系统-计算机毕业设计源码31290
java·spring boot·python·spring·servlet·django·php
ITenderL18 分钟前
Python学习笔记-函数
python·学习笔记
Langchain20 分钟前
不可错过!CMU最新《生成式人工智能大模型》课程:从文本、图像到多模态大模型
人工智能·自然语言处理·langchain·大模型·llm·大语言模型·多模态大模型
zmjia11121 分钟前
全流程Python编程、机器学习与深度学习实践技术应用
python·深度学习·机器学习
龙的爹233332 分钟前
论文翻译 | Generated Knowledge Prompting for Commonsense Reasoning
人工智能·gpt·机器学习·语言模型·自然语言处理·nlp·prompt
龙的爹233333 分钟前
论文翻译 | Model-tuning Via Prompts Makes NLP Models Adversarially Robust
人工智能·gpt·语言模型·自然语言处理·nlp·prompt
方世恩1 小时前
【进阶OpenCV】 (5)--指纹验证
人工智能·opencv·目标检测·计算机视觉
_.Switch1 小时前
Python机器学习:自然语言处理、计算机视觉与强化学习
python·机器学习·计算机视觉·自然语言处理·架构·tensorflow·scikit-learn
JUNAI_Strive_ving1 小时前
番茄小说逆向爬取
javascript·python
彤银浦1 小时前
python学习记录7
python·学习