深度学习02-pytorch-06-张量的形状操作

news2024/9/22 15:38:39

在 PyTorch 中,张量的形状操作是非常重要的,可以让你灵活地调整和处理张量的维度和数据结构。以下是一些常用的张量形状函数及其用法,带有详细解释和举例说明:

1. reshape()

功能: 改变张量的形状,但不改变数据的顺序。

语法: tensor.reshape(*shape)

示例:

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

输出:

tensor([[1, 2],
      [3, 4],
      [5, 6]])

在这个例子中,张量 x 被从形状 (2, 3) 重塑为 (3, 2)

2. squeeze()

功能: 去除张量中大小为1的维度(例如,形状是 (1, 3, 1) 会变成 (3))。

语法: tensor.squeeze(dim=None)

示例:

x = torch.tensor([[[1, 2, 3]]])  # shape: (1, 1, 3)
x_squeezed = x.squeeze()
print(x_squeezed)

输出:

tensor([1, 2, 3])

在这个例子中,squeeze() 去除了前两个大小为1的维度。

3. unsqueeze()

功能: 在指定的维度插入大小为1的新维度。

语法: tensor.unsqueeze(dim)

示例:

x = torch.tensor([1, 2, 3])  # shape: (3,)
x_unsqueezed = x.unsqueeze(0)  # 插入新的0维
print(x_unsqueezed.shape)  # 输出: torch.Size([1, 3])

在这个例子中,

unsqueeze(0) 在第0个维度插入一个新的大小为1的维度,将形状从 (3,) 变成 (1, 3)

4. transpose()

功能: 交换张量的两个维度。

语法: tensor.transpose(dim0, dim1)

示例:

x = torch.tensor([[1, 2, 3], [4, 5, 6]])  # shape: (2, 3)
x_transposed = x.transpose(0, 1)
print(x_transposed)

输出:

tensor([[1, 4],
      [2, 5],
      [3, 6]])

在这个例子中,transpose(0, 1) 交换了维度0和维度1,使张量的形状从 (2, 3) 变成 (3, 2)

5. permute()

功能: 改变张量的维度顺序,允许对多个维度进行交换。

语法: tensor.permute(*dims)

示例:

x = torch.randn(2, 3, 5)  # shape: (2, 3, 5)
x_permuted = x.permute(2, 0, 1)
print(x_permuted.shape)  # 输出: torch.Size([5, 2, 3])

在这个例子中,permute(2, 0, 1) 重新排列了维度顺序,

使得形状从 (2, 3, 5) 变为 (5, 2, 3)

6. view()

功能: 类似于 reshape(),但是 view() 需要张量在内存中是连续的。

语法: tensor.view(*shape)

示例:

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

输出:

tensor([[1, 2],
      [3, 4],
      [5, 6]])

view() 的使用需要张量是连续的,否则会报错。

关于连续性,可以结合 contiguous() 使用。

7. contiguous()

功能: 将非连续的张量转换为在内存中连续存储的张量。

语法: tensor.contiguous()

示例:

x = torch.randn(2, 3, 5)
x_permuted = x.permute(2, 0, 1)  # 这使得张量不再连续
x_contiguous = x_permuted.contiguous().view(5, 6)  # 转换为连续后再进行view操作
print(x_contiguous.shape)

permute() 操作后的张量不一定是连续的,因此需要 contiguous() 来保证可以使用 view()

8. expand()repeat()

功能: 扩展张量到更高的维度。

  • expand() 只是广播,不复制内存。

  • repeat() 会实际复制数据。

示例:

x = torch.tensor([1, 2, 3])
x_expanded = x.expand(3, 3)  # 广播
x_repeated = x.repeat(3, 1)  # 重复数据
print(x_expanded)
print(x_repeated)

输出:

tensor([[1, 2, 3],
      [1, 2, 3],
      [1, 2, 3]])
​
tensor([[1, 2, 3],
      [1, 2, 3],
      [1, 2, 3]])

区别在于 expand() 不会占用更多内存,而 repeat() 会真正复制数据。

总结

上述这些张量操作函数在处理多维数据时非常有用,能够灵活地调整和转换张量的形状,以便进行各种操作和模型设计。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2155378.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Stable Diffusion 使用详解(12)--- 设计师风格变换

目录 背景 seg模型(语义分割) 描述 原理 实战-装修风格变换 现代风格 欧式风格转换 提示词及相关参数设置 模型选择 seg cn 加持 效果 还能做点啥 问题 解决方法 出图效果 二次优化调整 二次出图效果 地中海风格转换 参数修改 效果 …

软硬件项目运维方案(Doc原件完整版套用)

1 系统的服务内容 1.1 服务目标 1.2 信息资产统计服务 1.3 网络、安全系统运维服务 1.4 主机、存储系统运维服务 1.5 数据库系统运维服务 1.6 中间件运维服务 2 运维服务流程 3 服务管理制度规范 3.1 服务时间 3.2 行为规范 3.3 现场服务支持规范 3.4 问题记录规范…

C++容器list底层迭代器的实现逻辑~list相关函数模拟实现

目录 1.两个基本的结构体搭建 2.实现push_back函数 3.关于list现状的分析(对于我们如何实现这个迭代器很重要) 3.1和string,vector的比较 3.2对于list的分析 3.3总结 4.迭代器类的封装 5.list容器里面其他函数的实现 6.个人总结 7.代码附录 1.两…

【C++ Primer Plus习题】17.1

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: #include <iostream> using namespace std;int main() {char …

移动登录页:让用户开启一段美好的旅程吧。

Hi,大家好&#xff0c;我是大千UI工场&#xff0c;移动登录页千千万&#xff0c;这里最好看&#xff0c;本期分享一批移动端的登录页面&#xff0c;供大家欣赏。 本次分享的是毛玻璃/3D风格的登录页。

【Unity设计模式】Unity MVC/MVP架构介绍,及MVC/MVP框架的简单应用

文章目录 什么是MVC&#xff1f;MVC眼花缭乱设计图MVP和MVC最经典的MVC的业务流程Unity MVC 框架示例1. 创建项目结构2. 实现模型3. 实现视图4. 实现控制器5. 使用示例 总结参考完结 什么是MVC&#xff1f; MVC自1982年被设计出来&#xff0c;至今都有着很大比重的使用率&…

前端项目代码开发规范及工具配置

在项目开发中&#xff0c;良好的代码编写规范是项目组成的重要元素。本文将详细介绍在项目开发中如何集成相应的代码规范插件及使用方法。 项目规范及工具 集成 EditorConfig集成 Prettier1. 安装 Prettier2. 创建 Prettier 配置文件3. 配置 .prettierrc4. 使用 Prettier 集成 …

python--基础语法(2)

1.顺序语句 默认情况下&#xff0c;Python的代码执行顺序是按照从上到下的顺序&#xff0c;依次执行的。 2.条件语句 条件语句能够表达“如果 ...否则 ...”这样的语义这构成了计算机中基础的逻辑判定条件语&#xff0c; 也叫做 分支语句。表示了接下来的逻辑可能有几种走向…

HOSTS文件劫持--导致笔记本网络卡顿

写在前面&#xff1a; 因为笔记本网速卡顿&#xff0c;去维修店维修网卡&#xff0c;网卡咱们测试都没有问题&#xff0c;一直吐槽售后服务一般。自己也装过几次系统了 点击任务栏中的搜索图标&#xff0c;输入"cmd"&#xff0c;点击"命令提示符"选择&qu…

笔记整理—内核!启动!—linux应用编程、网络编程部分(2)linux的文件管理策略

关于硬盘中的静态文件与inode&#xff1a;例如文件存储在扇区中&#xff0c;一个文件占用10个字节&#xff0c;一个扇区为512字节&#xff0c;这样的情况下一个扇区就只放了一个实际为10字节的文件&#xff0c;余下的502字节不可存放其他文件&#xff0c;因为扇区已经是可以访问…

C++入门(07)标准输入输出_cin

文章目录 4.cin4.1 基本功能4.2 常见数据类型的输入4.3 cin多项输入中的分隔符如果需要将空格作为输入的一部分读入 4.4 使用 cin 一次读取多个整数方法一方法二 接上一篇 cout C入门(07)标准输入输出_cout、缓冲、\n endl 4.cin 4.1 基本功能 C 标准输入 cin 是一个控制台输…

LLMs之MemLong:《MemLong: Memory-Augmented Retrieval for Long Text Modeling》翻译与解读

LLMs之MemLong&#xff1a;《MemLong: Memory-Augmented Retrieval for Long Text Modeling》翻译与解读 导读&#xff1a;MemLong 是一种新颖高效的解决 LLM 长文本处理难题的方法&#xff0c;它通过外部检索器获取历史信息&#xff0c;并将其与模型的内部检索过程相结合&…

IPsec-VPN中文解释

网络括谱图 IPSec-VPN 配置思路 1 配置IP地址 FWA:IP地址的配置 [FW1000-A]interface GigabitEthernet 1/0/0 [FW1000-A-GigabitEthernet1/0/0]ip address 10.1.1.1 24 //配置IP地址 [FW1000-A]interface GigabitEthernet 1/0/2 [FW1000-A-GigabitEthernet1/0/2]ip a…

C#测试调用PdfiumViewer浏览PDF文件的基本用法

印章管理项目后续准备实现打开浏览PDF文件并进行盖章的功能&#xff0c;需要在Winform中使用控件在线浏览PDF文件&#xff0c;在网上找了几个开源的PDF浏览控件进行测试&#xff0c;以便应用于印章管理项目。本文测试调用PdfiumViewer模块打开及浏览PDF文件。   PdfiumViewer…

VisionPro - 基础 - 模板匹配技术和在VP中的使用 - PMAlign - PatMax(4)- 控制模板的匹配

前言&#xff1a; 针对PatMax 的高级应用和原理&#xff0c;在这一节继续进行说明&#xff1a;这一节主要考虑的是PatMax模板匹配的原理&#xff1a;如何控制模板的匹配。 本节先介绍了几个模板匹配的衡量标准&#xff0c;比如模板匹配分数&#xff0c;和模板的几种模板匹配的…

JAVA并发编程系列之Semaphore信号量剖析

腾讯T2面试&#xff0c;现场限时3分钟限最多20行代码&#xff0c;模拟地铁口安检进站。其中安检入口10个&#xff0c;当前排队人数是100个&#xff0c;每个人安检进站耗时5秒。开始吧! 候选人&#xff0c;心中万马奔腾&#xff01;&#xff01;&#xff01;吐了一口82年老血&am…

re题(37)BUUCTF-[GWCTF 2019]xxor

BUUCTF在线评测 (buuoj.cn) 用ida打开文件&#xff0c;ctrle定位main函数 也可以用shiftF12查找字符串&#xff0c;找与我们解题有关的字符串 通过字符串定位到引用字符串的函数 进入main entry 但还不是我们要分析的代码 进入__libc_start_main中的main参数&#xff0c;是我们…

C++20 std::format

一、前言 1、传统 C 格式化的问题与挑战 可读性差&#xff1a;使用 C 中的 printf 和 scanf 家族函数进行格式化输出和输入时&#xff0c;它们的语法较为复杂&#xff0c;难以阅读。在较大的代码项目中&#xff0c;可读性差会导致维护困难。类型安全性差&#xff1a;printf 和…

IS-ISv4/6双栈

文章目录 IS-ISv4/6双栈实验要求配置 IS-ISv4/6双栈 实验要求 配置双栈 R1、2、3、4配置 IS-ISv4 和 IS-ISv6&#xff0c;配置IPv6多拓扑 上面为Level-1类型、中间为Level-1-2、下面是Level-2类型 还有就是说ATT位置1有一定要求连接L1/2连接L1或者L2类型路由器&#xff0c;至…

java23发布啦

2024年9月java23发布啦&#xff01;&#xff01;! JDK 23 提供了12 项增强功能&#xff0c;这些功能足以保证其自己的JDK 增强提案 - JEP &#xff0c;其中包括 8 项预览功能和 1 项孵化器功能。它们涵盖了对 Java 语言、API、性能和 JDK 中包含的工具的改进。除了 Java 平台上…