【深度学习】Pytorch 系列教程(九):PyTorch数据结构:2、张量操作(Tensor Operations):(3)张量变形

目录

一、前言

二、实验环境

三、PyTorch数据结构

0、分类

1、张量(Tensor)

[2、张量操作(Tensor Operations)](#2、张量操作(Tensor Operations))

[1. 数学运算](#1. 数学运算)

[2. 统计计算](#2. 统计计算)

[3. 张量变形](#3. 张量变形)

展开张量:flatten

改变张量的形状:view

改变张量形状:reshape

unsqueeze和squeeze

permute和transpose


一、前言

ChatGPT:

PyTorch是一个开源的机器学习框架,广泛应用于深度学习领域。它提供了丰富的工具和库,用于构建和训练各种类型的神经网络模型。下面是PyTorch的一些详细介绍:

  1. 动态计算图:PyTorch使用动态计算图的方式进行计算,这意味着在运行时可以动态地定义、修改和调整计算图,使得模型的构建和调试更加灵活和直观。

  2. 强大的GPU加速支持:PyTorch充分利用GPU进行计算,可以大幅提升训练和推理的速度。它提供了针对GPU的优化操作和内存管理,使得在GPU上运行模型更加高效。

  3. 自动求导:PyTorch内置了自动求导的功能,可以根据定义的计算图自动计算梯度。这简化了反向传播算法的实现,使得训练神经网络模型更加便捷。

  4. 大量的预训练模型和模型库:PyTorch生态系统中有许多预训练的模型和模型库可供使用,如TorchVision、TorchText和TorchAudio等,可以方便地加载和使用这些模型,加快模型开发的速度。

  5. 高级抽象接口:PyTorch提供了高级抽象接口,如nn.Modulenn.functional,用于快速构建神经网络模型。这些接口封装了常用的神经网络层和函数,简化了模型的定义和训练过程。

  6. 支持分布式训练:PyTorch支持在多个GPU和多台机器上进行分布式训练,可以加速训练过程,处理大规模的数据和模型。

总体而言,PyTorch提供了一个灵活而强大的平台,使得深度学习的研究和开发更加便捷和高效。它的简洁的API和丰富的功能使得用户可以快速实现复杂的神经网络模型,并在各种任务中取得优秀的性能。

二、实验环境

本系列实验使用如下环境

bash 复制代码
conda create -n DL python=3.7 
bash 复制代码
conda activate DL
bash 复制代码
pip install torch==1.8.1+cu102 torchvision==0.9.1+cu102 torchaudio==0.8.1 -f https://download.pytorch.org/whl/torch_stable.html
bash 复制代码
conda install matplotlib

关于配置环境问题,可参考前文的惨痛经历:

三、PyTorch数据结构

0、分类

  • Tensor(张量) :Tensor是PyTorch中最基本的数据结构,类似于多维数组。它可以表示标量、向量、矩阵或任意维度的数组。
    • Tensor的操作:PyTorch提供了丰富的操作函数,用于对Tensor进行各种操作,如数学运算、统计计算、张量变形、索引和切片等。这些操作函数能够高效地利用GPU进行并行计算,加速模型训练过程。
  • Variable(变量):Variable是对Tensor的封装,用于自动求导。在PyTorch中,Variable会自动跟踪和记录对其进行的操作,从而构建计算图并支持自动求导。在PyTorch 0.4.0及以后的版本中,Variable被废弃,可以直接使用Tensor来进行自动求导。
  • Dataset(数据集):Dataset是一个抽象类,用于表示数据集。通过继承Dataset类,可以自定义数据集,并实现数据加载、预处理和获取样本等功能。PyTorch还提供了一些内置的数据集类,如MNIST、CIFAR-10等,用于方便地加载常用的数据集。
  • DataLoader(数据加载器):DataLoader用于将Dataset中的数据按批次加载,并提供多线程和多进程的数据预读功能。它可以高效地加载大规模的数据集,并支持数据的随机打乱、并行加载和数据增强等操作。
  • Module(模块):Module是PyTorch中用于构建模型的基类。通过继承Module类,可以定义自己的模型,并实现前向传播和反向传播等方法。Module提供了参数管理、模型保存和加载等功能,方便模型的训练和部署。

1、张量( Tensor**)**

【深度学习】Pytorch 系列教程(一):PyTorch数据结构:1、Tensor(张量):维度(Dimensions)、数据类型(Data Types)_QomolangmaH的博客-CSDN博客https://blog.csdn.net/m0_63834988/article/details/132909219?spm=1001.2014.3001.5501https://blog.csdn.net/m0_63834988/article/details/132909219?spm=1001.2014.3001.5501编辑https://blog.csdn.net/m0_63834988/article/details/132909219?spm=1001.2014.3001.5501编辑https://blog.csdn.net/m0_63834988/article/details/132909219?spm=1001.2014.3001.5501https://blog.csdn.net/m0_63834988/article/details/132909219?spm=1001.2014.3001.5501

2、张量操作(Tensor Operations)

PyTorch提供了丰富的操作函数,用于对Tensor进行各种操作,如数学运算、统计计算、张量变形、索引和切片等。这些操作函数能够高效地利用GPU进行并行计算,加速模型训练过程。

1. 数学运算

2. 统计计算

3. 张量变形

展开张量:flatten

可以使用flatten方法将张量展开为一维的向量。

python 复制代码
import torch

x = torch.tensor([[1, 2, 3], [4, 5, 6]])
flattened_x = x.flatten()
print(flattened_x)

输出:

python 复制代码
tensor([1, 2, 3, 4, 5, 6])

改变张量的形状:view

python 复制代码
import torch

x = torch.tensor([[1, 2, 3], [4, 5, 6]])
reshaped_x = x.view(3, 2)
print(reshaped_x)

输出:

python 复制代码
tensor([[1, 2],
        [3, 4],
        [5, 6]])

改变张量形状:reshape

除了使用view方法外,还可以使用reshape函数来改变张量的形状。reshape函数与view方法的功能类似,但在某些情况下更灵活。

python 复制代码
import torch

x = torch.tensor([[1, 2, 3], [4, 5, 6]])
reshaped_x = x.reshape(3, 2)
print(reshaped_x)

输出:

python 复制代码
tensor([[1, 2],
        [3, 4],
        [5, 6]])

view方法不同的是,reshape函数可以创建一个新的张量,而不会共享内存。

unsqueezesqueeze

unsqueeze方法可以在指定的维度上增加一个大小为1的维度,而squeeze方法可以去除大小为1的维度。这在处理需要匹配张量形状的操作时非常有用。

python 复制代码
import torch

x = torch.tensor([1, 2, 3])
unsqueeze_x = x.unsqueeze(0)  # 在第0维度上增加一个大小为1的维度
print(unsqueeze_x)

输出:

python 复制代码
tensor([[1, 2, 3]])
python 复制代码
import torch

x = torch.tensor([[1, 2, 3]])
squeeze_x = x.squeeze(0)  # 去除第0维度的大小为1的维度
print(squeeze_x)

输出:

python 复制代码
tensor([1, 2, 3])

permutetranspose

permute方法可以重新排列张量的维度顺序,而transpose方法可以交换张量的两个维度。这在需要进行维度重排或转置操作时非常有用。

python 复制代码
import torch

x = torch.tensor([[1, 2, 3], [4, 5, 6]])
permuted_x = x.permute(1, 0)  # 交换维度顺序
print(permuted_x)

输出:

python 复制代码
tensor([[1, 4],
        [2, 5],
        [3, 6]])
python 复制代码
import torch

x = torch.tensor([[1, 2, 3], [4, 5, 6]])
transposed_x = x.transpose(0, 1)  # 转置维度
print(transposed_x)

输出:

python 复制代码
tensor([[1, 4],
        [2, 5],
        [3, 6]])
相关推荐
Jeremy_lf9 分钟前
【生成模型之三】ControlNet & Latent Diffusion Models论文详解
人工智能·深度学习·stable diffusion·aigc·扩散模型
桃花键神1 小时前
AI可信论坛亮点:合合信息分享视觉内容安全技术前沿
人工智能
野蛮的大西瓜1 小时前
开源呼叫中心中,如何将ASR与IVR菜单结合,实现动态的IVR交互
人工智能·机器人·自动化·音视频·信息与通信
CountingStars6192 小时前
目标检测常用评估指标(metrics)
人工智能·目标检测·目标跟踪
tangjunjun-owen2 小时前
第四节:GLM-4v-9b模型的tokenizer源码解读
人工智能·glm-4v-9b·多模态大模型教程
冰蓝蓝2 小时前
深度学习中的注意力机制:解锁智能模型的新视角
人工智能·深度学习
橙子小哥的代码世界2 小时前
【计算机视觉基础CV-图像分类】01- 从历史源头到深度时代:一文读懂计算机视觉的进化脉络、核心任务与产业蓝图
人工智能·计算机视觉
新加坡内哥谈技术3 小时前
苏黎世联邦理工学院与加州大学伯克利分校推出MaxInfoRL:平衡内在与外在探索的全新强化学习框架
大数据·人工智能·语言模型
fanstuck3 小时前
Prompt提示工程上手指南(七)Prompt编写实战-基于智能客服问答系统下的Prompt编写
人工智能·数据挖掘·openai
lovelin+v175030409663 小时前
安全性升级:API接口在零信任架构下的安全防护策略
大数据·数据库·人工智能·爬虫·数据分析