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

pytorch中的维度变换操作性质大总结:view, reshape, transpose, permute

在深度学习中,张量的维度变换是很重要的操作。在pytorch中,有四个用于维度变换的函数,view, reshape, transpose, permute。其中view, reshape都用于改变张量的形状,transpose, permute都用于重新排列张量的维度,但它们的功能和使用场景有所不同,下面将进行详细介绍,并给出测试验证代码,经过全面的了解,我们才能知道如何正确的使用这四个函数。

这里写目录标题

    • 1. torch.Tensor.view
    • 2. torch.reshape
    • 3. torch.transpose
    • 4. torch.permute
    • 5. torch.transpose与torch.permute的性质与原理

1. torch.Tensor.view

文档:Doc

  • view 方法返回一个新的张量,具有与原始张量相同的数据,但改变了形状。所以view返回的是原始数据的一个新尺寸的视图,这也就是为什么叫做view。
    import torch
    # 创建一个2x6的张量
    x = torch.tensor([[1, 2, 3, 4, 5, 6],[7, 8, 9, 10, 11, 12]])
    # 将其调整为3x4的形状
    y = x.view(3, 4)
    print("x shape: ", x.shape)
    print("y shape: ", y.shape)
    # 判断新旧张量是否数据是相同的
    print(x.data_ptr() == y.data_ptr())
    
    输出:
    x shape:  torch.Size([2, 6])
    y shape:  torch.Size([3, 4])
    True
    
  • view 要求原始张量是连续的(即在内存中是按顺序存储的),否则会抛出错误。
    import torch
    # 创建一个2x6的张量
    x = torch.tensor([[1, 2, 3, 4, 5, 6],[7, 8, 9, 10, 11, 12]])
    # 将向量转置,此时x不再是连续的
    x = x.T
    # 在不连续的张量上进行view将会报错
    y = x.view(3, 4)
    
    报错输出:
    RuntimeError: view size is not compatible with input tensor's size and stride (at least one dimension spans across two contiguous subspaces). Use .reshape(...) instead.
    
  • 如果张量不是连续的,可以使用 contiguous 方法先将其转换为连续的。

2. torch.reshape

文档:Doc

  • reshape不要求原始张量是连续的
  • 如果原始张量是连续的,那么实现的功能和view一样
  • 如果原始张量不是连续的,那么reshape就是tensor.contigous().view(),也就是会重新开辟一块内存空间,拷贝原始张量,使其连续;
  • 在连续张量上,view 和 reshape 性能相同。在非连续张量上,reshape 可能会稍慢一些,因为它可能需要创建新的连续张量。
    import torch
    # 创建一个2x6的张量
    x = torch.tensor([[1, 2, 3, 4, 5, 6],[7, 8, 9, 10, 11, 12]])
    # 将向量转置,此时x不再是连续的
    x = x.T
    # 在不连续的张量上可以进行reshape
    y = x.reshape(3, 4)
    print("x shape: ", x.shape)
    print("y shape: ", y.shape)
    # 但reshape返回的是新的内存中的张量
    print(x.data_ptr() == y.data_ptr())
    
    输出:
    x shape:  torch.Size([6, 2])
    y shape:  torch.Size([3, 4])
    False
    

3. torch.transpose

Doc

  • 功能:仅用于交换两个维度。它接受两个维度参数,分别表示要交换的维度。
  • 不改变数据:不会改变数据本身,只是改变数据的视图(即不复制数据)。
  • 生成的新张量也通常不是连续的。它只是交换两个维度的顺序,不改变数据在内存中的实际存储顺序。
  • 对原始张量是不是连续的没有要求
    import torch
    # 创建一个3x4的张量
    x = torch.tensor([[1, 2, 3, 4],[5, 6, 7, 8],[9, 10, 11, 12]])
    print(x.is_contiguous())
    # 交换第一个和第二个维度
    y = torch.transpose(x, 0, 1)
    print(y.is_contiguous())
    print("x shape: ", x.shape)
    print("y shape: ", y.shape)
    print(x.data_ptr() == y.data_ptr())
    
    输出:
    True
    False
    x shape:  torch.Size([3, 4])
    y shape:  torch.Size([4, 3])
    True
    

4. torch.permute

Doc

  • 可以重新排列任意数量的维度,适用于复杂的维度变换。接受一个shape元组作为参数
  • 不改变数据:不会改变数据本身,只是改变数据的视图(即不复制数据)
  • 生成的新张量通常不是连续的。因为它仅改变维度顺序,不改变数据在内存中的实际顺序。
  • 对原始张量是不是连续的没有要求
    	import torch# 创建一个3x4x5的张量x = torch.randn(3, 4, 5)# 将其第一个和第二个维度交换y = torch.permute(x, (1, 0, 2))print(y.is_contiguous())print(x.data_ptr() == y.data_ptr())print(y.size())  # 输出:torch.Size([4, 3, 5])
    
    输出:
    False
    True
    torch.Size([4, 3, 5])
    

5. torch.transpose与torch.permute的性质与原理

这两者的功能和各方面的性质基本是相同的,只是一个只能交换两个维度,一个能进行更复杂的维度排列。他们的原理是:transpose 和 permute 通过改变张量的 strides(步幅)来重新排列维度。strides 定义了在内存中沿着每个维度移动的步长。它们不改变张量的数据,只是改变了访问数据的方式。因此,这些操作可以应用于任何张量,无论它们是否连续。

相关文章:

pytorch中的维度变换操作性质大总结:view, reshape, transpose, permute

在深度学习中,张量的维度变换是很重要的操作。在pytorch中,有四个用于维度变换的函数,view, reshape, transpose, permute。其中view, reshape都用于改变张量的形状,transpose, permute都用于重新排列张量的维度,但它们…...

LeetCode刷题 | Day 4 分割等和子集(Partition Equal Subset Sum)自底向上动态规划

LeetCode刷题 | Day 4 分割等和子集(Partition Equal Subset Sum)自底向上动态规划 文章目录 LeetCode刷题 | Day 4 分割等和子集(Partition Equal Subset Sum)自底向上动态规划前言一、题目概述二、解题方法2.1 一维表格的自底向上动态规划2.1.1 思路讲解2.1.2 伪代码 + 逐…...

基于工业互联网打造敏捷供应链的实现方式:创新路径与实践应用

引言 工业互联网和敏捷供应链是当今制造业发展中的两个重要概念。工业互联网以数字化、网络化和智能化为核心,致力于将传统工业生产与互联网技术相融合,从而实现生产过程的高效、智能和灵活。而敏捷供应链则强调快速响应市场需求、灵活调整生产和供应计划…...

碳化硅柱式膜的广泛应用

碳化硅柱式膜是一种高性能的过滤材料,以其独特的性质和广泛的应用领域在现代工业中占据着重要地位。以下是对碳化硅柱式膜的详细介绍: 一、基本概述 碳化硅柱式膜是以碳化硅超滤膜为过滤单元构成的,其过滤精度高达0.1微米。这种膜材料具有耐化…...

【QT】QFont字体设置

设置字体大小 f.setPointSize(12); // 设置字体大小为12点设置字体加粗 f.setBold(true); // 使字体加粗设置字体斜体 f.setItalic(true); // 使字体斜体设置字体下划线 f.setUnderline(true); // 给字体添加下划线设置字体删除线 f.setStrikeOut(true); // 给字体添加删除…...

Vue3+vite部署nginx的二级目录,使用hash模式

修改router访问路径 import { createRouter, createWebHashHistory } from vue-routerconst router createRouter({history: createWebHashHistory (/mall4pc-bbc/),routes: [XXX,] })配置package.json文件 "build:testTwo": "vite build --mode testing --ba…...

云南区块链商户平台发票助手成品

目录 1 概述2 功能对比3 项目演示图4 核心逻辑4.1智能赋码4.2 解密方法4.3 登录与检测4.4 发票金额大写转换4.5 检查登录是否失效4.6 验证码识别5 演示效果6 项目部署6.1 Web站点部署6.1.1 环境6.1.2 前端6.1.3 后端6.2 Docker部署6.2.1 构建镜像6.2.2 创建容器6.3.3 访问项目域…...

AI图书推荐:检索增强生成RAG赋能大语言模型

本书《检索增强生成RAG赋能大型语言模型》(Retrieval-Augmented Generation - Dr. Ray Islam :Mohammad Rubyet )深入探讨了如何通过结合检索系统与神经语言模型,提升人工智能在自然语言处理领域的能力。 以下是各章节内容的概要&…...

高效学习LabVIEW的方法

学习LabVIEW可以通过系统化课程、在线资源、自学实验、参与论坛、结合实际项目等多角度进行。系统课程提供全面基础,在线资源便于查漏补缺,自学实验强化理解,论坛互动解决疑难,结合实际项目应用提高实践技能。结合项目学习是最高效…...

C语言 | Leetcode C语言题解之第136题只出现一次的数字

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<int> singleNumbers(vector<int>& nums) {int eor 0;for (int num:nums)eor ^ num;int rightOne eor & (~eor 1); // 提取出最右的1int onlyOne 0;for (int cur : nums) {if ((cur…...

如何利用Varjo混合现实技术改变飞机维修训练方式

自2017年以来&#xff0c;总部位于休斯顿的HTX实验室一直在推进混合现实技术&#xff0c;与美国空军密切合作&#xff0c;通过其EMPACT平台提供可扩展的沉浸式飞机维护虚拟现实培训。 虚拟和混合现实对维修训练的好处&#xff1a; l 实践技能&#xff1a;提供一个非常接近真实场…...

C++:按指定字符分割字符串

按指定字符分割字符串 [C]对string按指定分隔符分割(split) #include <iostream> #include <vector> #include <string> #include <sstream> using namespace std; int main() {string origin_str "hello world !"; // 需要进行分割的字符串…...

网络网络层之(6)ICMPv4协议

网络网络层之(6)ICMPv4协议 Author: Once Day Date: 2024年6月2日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 全系列文章可参考专栏: 通信网络技术_Once-Day的博客-CS…...

Opengrok代码在线查看平台

OpenGrok 是一个基于 Web 的源代码搜索引擎和交叉引用工具&#xff0c;它可以用来浏览和搜索代码库。虽然 OpenGrok 提供了代码搜索、查看文件和历史等功能&#xff0c;但它本身不是一个完整的在线集成开发环境&#xff08;IDE&#xff09;。然而&#xff0c;OpenGrok 可以作为…...

济南适宜地提取

题目: 网上下载中国的DEM、土地利用地图(1980、2000、2015年的)和一张最新济南市行政区划 图(要求:莱芜市并入济南后的区划图); 2.网上下载中国2015年年平均降水空间插值数据;3..网上下载中国2015年年平均气温空间插值数据; (注:以上数据可到资源环境科学与数据中心下载http…...

Windows 安装虚拟机(VMware+Ubuntu18.04)

Windows下虚拟机安装 一、资源下载1.1 VMware安装包下载1.2 Ubuntu镜像下载二、电脑分区三、Vmware安装四、Vmware检查4.1 注册信息查看4.2 检查网络适配器五、Ubuntu安装5.1 创建新的虚拟机5.2 打开虚拟机这是一篇介绍在Windows系统上安装Ubuntu虚拟机的操作教程。 一、资源下…...

图像算法---自动对焦AF

一&#xff0c;CDAF反差对焦原理 CDAF&#xff0c;全称Contrast Detection Auto Focus&#xff0c;即反差式对焦或对比度检测自动对焦&#xff0c;是一种广泛应用于入门级数码相机和相机模块化智能手机上的自动对焦技术。以下是关于CDAF反差对焦的详细介绍&#xff1a; 工作原…...

sqli-labs 靶场 less-5、6 第五关和第六关:判断注入点、使用错误函数注入爆库名、updatexml()函数

SQLi-Labs是一个用于学习和练习SQL注入漏洞的开源应用程序。通过它&#xff0c;我们可以学习如何识别和利用不同类型的SQL注入漏洞&#xff0c;并了解如何修复和防范这些漏洞。Less 5 SQLI DUMB SERIES-5 判断注入点&#xff1a;1. 首先&#xff0c;尝试正常的回显内容&#x…...

WebSocket详解与封装工具类

一、前言 在我们了解websocket之前&#xff0c;不妨先想想这几个问题&#xff1a; websocket是什么&#xff1f;websocket有什么好处和特点&#xff1f;为什么要用到websocket&#xff1f;什么情况下会用到websocket&#xff1f; 好了&#xff0c;带着这几个疑问一起来了解一…...

Linux学习, 进程和线程

进程 正在运行中的程序就是一个进程&#xff0c;进程有自己独有的内存空间和文件等等资源&#xff0c;进程中的资源一般都是相互隔离的。 进程内部还可以包含有多个线程&#xff0c;线程基本没有自己独占的资源&#xff08;独有栈除外&#xff09;&#xff0c;他与进程内的其…...

低代码组件“看似简单,上线即崩”?20年专家拆解5个被90%团队忽略的线程安全与事务传播陷阱

第一章&#xff1a;低代码组件“看似简单&#xff0c;上线即崩”的真相低代码平台承诺“拖拽即交付”&#xff0c;但真实生产环境中&#xff0c;大量业务系统在上线后数小时内便出现表单提交失败、数据丢失、权限错乱或页面白屏等问题。这些故障并非源于复杂逻辑&#xff0c;而…...

Z-Image-Turbo问题解决:手把手教你配置Gradio WebUI并映射本地端口

Z-Image-Turbo问题解决&#xff1a;手把手教你配置Gradio WebUI并映射本地端口 1. 为什么选择Z-Image-Turbo 如果你正在寻找一款既快速又高质量的AI图像生成工具&#xff0c;Z-Image-Turbo绝对值得考虑。这个由阿里通义实验室开源的高效文生图模型&#xff0c;在速度和质量的…...

【力扣100题】09.反转链表

一、题目描述 给定单链表的头节点 head&#xff0c;反转链表并返回反转后的链表。 示例 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1]输入&#xff1a;head [1,2] 输出&#xff1a;[2,1]输入&#xff1a;head [] 输出&#xff1a;[]二、核心思路 关键观察…...

GitHub功能全景:从代码创作到企业级方案的技术生态

【导语&#xff1a;GitHub作为全球知名的代码托管平台&#xff0c;提供了丰富多样的功能&#xff0c;涵盖AI代码创作、开发者工作流、应用程序安全等多个领域&#xff0c;还针对不同规模公司、用例和行业提供解决方案&#xff0c;对软件开发行业产生着深远影响。】【GitHub的多…...

像素史诗落地企业知识库:用Pixel Epic构建内部行业情报自动摘要系统

像素史诗落地企业知识库&#xff1a;用Pixel Epic构建内部行业情报自动摘要系统 1. 企业知识管理的新挑战 在信息爆炸的时代&#xff0c;企业面临的最大挑战不是获取信息&#xff0c;而是如何从海量数据中提取有价值的知识。传统知识管理系统存在几个关键痛点&#xff1a; 信…...

Graphormer部署案例:中小企业AI药物研发团队低成本GPU算力部署方案

Graphormer部署案例&#xff1a;中小企业AI药物研发团队低成本GPU算力部署方案 1. 项目背景与价值 在药物研发领域&#xff0c;分子属性预测是核心环节之一。传统实验方法成本高昂且周期漫长&#xff0c;而Graphormer作为基于纯Transformer架构的图神经网络&#xff0c;为这一…...

MiniCPM-V-2_6 Ubuntu 20.04一键部署教程:从安装到运行

MiniCPM-V-2_6 Ubuntu 20.04一键部署教程&#xff1a;从安装到运行 想试试那个能看懂图片还能跟你聊天的多模态大模型MiniCPM-V-2_6吗&#xff1f;很多朋友在第一步——部署上就被卡住了&#xff0c;不是环境依赖搞不定&#xff0c;就是权限问题报错&#xff0c;折腾半天模型还…...

Cocos Creator实战:5步搞定棋牌游戏大厅场景开发(附完整代码)

Cocos Creator实战&#xff1a;5步构建高交互棋牌游戏大厅&#xff08;附模块化代码&#xff09; 棋牌游戏大厅作为玩家进入游戏的第一印象&#xff0c;其体验直接决定了用户留存率。根据行业数据&#xff0c;精心设计的大厅界面能提升30%以上的玩家次日留存。不同于传统游戏开…...

从激光雷达到AI服务器:实战解析PCIe高速走线在车载与数据中心的不同设计策略

从激光雷达到AI服务器&#xff1a;实战解析PCIe高速走线在车载与数据中心的不同设计策略 在硬件设计领域&#xff0c;PCIe总线技术已经成为了高速数据传输的事实标准。从自动驾驶汽车的激光雷达到数据中心的AI加速卡&#xff0c;PCIe的身影无处不在。然而&#xff0c;看似相同的…...

5分钟零代码部署:Live2D AI虚拟助手让你的网站活起来

5分钟零代码部署&#xff1a;Live2D AI虚拟助手让你的网站活起来 【免费下载链接】live2d_ai 基于live2d.js实现的动画小人ai&#xff0c;拥有聊天功能&#xff0c;还有图片识别功能&#xff0c;可以嵌入到网页里 项目地址: https://gitcode.com/gh_mirrors/li/live2d_ai …...