• reshape() 
  • squeeze()
  • unsqueeze()
  • transpose()
  • permute()
  • view()  == reshape() 
  • contiguous() == reshape() 

一、reshape() 函数

保证张量数据不变的前提下改变数据的维度,将其转换成指定的形状

def reshape_tensor():data = torch.tensor([[1, 2, 3], [4, 5, 6]])print(data, data.shape)  # pytorch中shape=size()  都可以获得张量的形状data1=data.reshape(1, 6) #reshape行列相乘要等于数据data的总个数# data1=data.reshape(6) # 等于上一行print(data1, data1.shape)data2=data.reshape(3,-1) #-1 自动推断,已知三行自动推断列数# data2=data.reshape(-1) #-1 自动推断print(data2, data2.shape)if __name__ == '__main__':reshape_tensor()

扩展

pytorch中 shape=size()  都可以获得张量的形状

# 扩展:size,和shape是等价的,都是看数据的维度
# print("data1-->", data1.shape, data1.size())
# shape[0] <=> size()[0] <=> size(0)
# shape[1] <=> size()[1] <=> size(1)print("data1-->", data, data.shape[0], data.size(1))

二、squeeze() 和 unsqueeze()

squeeze 函数删除 形状为 1 的维度(升维),unsqueeze 函数添加形状为1的维度(降维)。

# 生维与降维
def unsqueeze_squeeze_tensor():# 准备数据data = torch.tensor([1, 2, 3, 4, 5])print('data-->', data, data.shape)# 升维: unsqueeze(), 增加一个维度,这个维度的长度为1# data1 = data.unsqueeze(dim=0) # [1, 5]# data1 = data.unsqueeze(dim=1) # [5, 1]data1 = data.unsqueeze(dim=-1).unsqueeze(dim=0)  # [1, 5, 1]# data1 = data.unsqueeze(dim=2)  # [5, 1] 会报错,越界print("data1-->", data1, data1.shape)# 降维: squeeze(), 能够减少维度为1的维度# 所有长度为1的维度都会降低。data2 = data1.squeeze()# print("data2-->", data2, data2.shape)
if __name__ == '__main__':unsqueeze_squeeze_tensor()

三、transpose() 和 permute()

transpose 函数可以实现交换张量形状的指定维度, 例如: 一个张量的形状为 (2, 3, 4) 可以通过 transpose 函数把 3 和 4 进行交换, 将张量的形状变为 (2, 4, 3)

permute 函数可以一次交换更多的维度

def transpose_permute_tensor():# 生成随机张量,并设置随机种子,保持随机张量是固定值torch.manual_seed(0)data = torch.randint(0, 10, (3, 4, 5))print(data, data.shape)# .transpose指定交换的两个维度data1=data.transpose(1, 2) # torch.Size([3, 5, 4])# data1=data.transpose(0, 2)print(data1, data1.shape) # torch.Size([5, 4, 3])# .permute指定交换的多个维度data2 = data.permute(2,0,1)print(data2, data2.shape) # torch.Size([5, 3, 4])
if __name__ == '__main__':transpose_permute_tensor()

五、view() 和 contiguous()

        view 函数也可以用于修改张量的形状,但是其用法比较局限,只能用于存储在整块内存中的张量。在 PyTorch 中,有些张量是由不同的数据块组成的,它们并没有存储在整块的内存中,view 函数无法对这样的张量进行变形处理,例如: 一个张量经过了 transpose 函数的处理之后,就无法使用 view 函数进行形状操作。

view 函数也可以用于修改张量的形状, 但是它要求被转换的张量内存必须连续,所以一般配合 contiguous 函数使用。

def view_contiguous_tensor():torch.manual_seed(0)data = torch.randint(0, 10, (3, 4, 5))print(data, data.shape)data = data.transpose(1, 2)  # 不连续 torch.Size([3, 5, 4])# data = data.permute(1, 2, 0)# data = data.view(1, 2, -1) # data不连续后,调用view函数会报错print(data, data.shape)print(data.is_contiguous())  # 判断是否连续# print(data.contiguous().is_contiguous())  # 通过contiguous把不连续的内存空间变成连续print(data.contiguous().view(3,4,5))  # 再view()
if __name__ == '__main__':view_contiguous_tensor()

六、小结

  • reshape 函数可以在保证张量数据不变的前提下改变数据的维度
  • squeeze 和 unsqueeze 函数可以用来增加或者减少维度
  • transpose 函数可以实现交换张量形状的指定维度, permute 可以一次交换更多的维度
  • view 函数也可以用于修改张量的形状, 但是它要求被转换的张量内存必须连续, 所以一般配合 contiguous 函数使用

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第十八篇 开发网页教学:实现画布、绘画、简易 PS 方案

在网页开发领域&#xff0c;画布功能是实现交互创作的重要基础&#xff0c;无论是简单的绘画工具&#xff0c;还是具备基础修图能力的简易 PS 方案&#xff0c;都能为用户带来丰富的视觉交互体验。本篇教学将围绕 “学习 - 实践 - 实操” 的核心思路&#xff0c;从技术原理讲解…

封装形成用助焊剂:电子制造“隐形桥梁”的技术突围与全球产业重构

在5G通信、人工智能、新能源汽车等新兴技术驱动下&#xff0c;全球电子制造业正以年均6.8%的增速重构产业链。作为电子元件焊接的核心辅料&#xff0c;封装形成用助焊剂&#xff08;又称电子封装用助焊剂&#xff09;凭借其“优化焊接质量、提升可靠性、降低制造成本”的核心价…

【完整源码+数据集+部署教程】零件实例分割系统源码和数据集:改进yolo11-GhostHGNetV2

背景意义 研究背景与意义 随着工业自动化和智能制造的迅速发展&#xff0c;零件的高效识别与分割在生产线上的重要性日益凸显。传统的图像处理方法在处理复杂场景时往往面临着准确性不足和实时性差的问题&#xff0c;而深度学习技术的引入为这一领域带来了新的机遇。特别是基于…

墨色规则与血色节点:C++红黑树设计与实现探秘

前言​ 前几天攻克了AVL树&#xff0c;我们已然是平衡二叉树的强者。但旅程还未结束&#xff0c;下一个等待我们的&#xff0c;是更强大、也更传奇的**终极BOSS**——红黑树。它不仅是map和set的强大心脏&#xff0c;更是C STL皇冠上的明珠。准备好了吗&#xff1f;让我们一…

大数据时代时序数据库选型指南:为何 Apache IoTDB 成优选(含实操步骤)

在数字经济加速渗透的今天&#xff0c;工业物联网&#xff08;IIoT&#xff09;、智慧能源、金融交易、城市运维等领域每天产生海量 “带时间戳” 的数据 —— 从工业设备的实时温度、电压&#xff0c;到电网的负荷波动&#xff0c;再到金融市场的每秒行情&#xff0c;这类 “时…

MAZANOKE+cpolar让照片存储无上限

文章目录前言1. 关于MAZANOKE2. Docker部署3. 简单使用MAZANOKE4. 安装cpolar内网穿透5. 配置公网地址6. 配置固定公网地址总结当工具开始理解用户的需求痛点时&#xff0c;MAZANOKE与cpolar这对搭档给出了“轻量化”的解决方案。它不追求浮夸的功能堆砌&#xff0c;却用扎实的…

正则表达式 - 元字符

正则表达式中的元字符是具有特殊含义的字符&#xff0c;它们不表示字面意义&#xff0c;而是用于控制匹配模式。基本元字符. (点号)匹配除换行符(\n)外的任意单个字符示例&#xff1a;a.b 匹配 "aab", "a1b", "a b" 等^ (脱字符)匹配字符串的开始…

suricata源码解读-事务日志

注册事务日志线程模块 void TmModuleTxLoggerRegister (void) {tmm_modules[TMM_TXLOGGER].name "__tx_logger__";tmm_modules[TMM_TXLOGGER].ThreadInit OutputTxLogThreadInit;tmm_modules[TMM_TXLOGGER].Func OutputTxLog;tmm_modules[TMM_TXLOGGER].ThreadExi…

【CSS】层叠上下文和z-index

z-index 的作用范围受“层叠上下文&#xff08;stacking context&#xff09;”影响。&#x1f539; 1. z-index 的基本作用 控制元素在 同一个层叠上下文&#xff08;stacking context&#xff09; 内的堆叠顺序。值越大&#xff0c;显示层级越靠上。&#x1f539; 2. 什么是层…

自动化脚本的降本增效实践

一、自动化脚本的核心价值自动化脚本通过模拟人类操作完成重复性任务&#xff0c;其核心价值体现在三个维度&#xff1a;首先&#xff0c;在时间成本方面&#xff0c;标准化的数据处理流程可缩短90%以上的操作耗时&#xff1b;其次&#xff0c;在人力成本上&#xff0c;单个脚本…

【C语言】第七课 字符串与危险函数​​

C语言中的字符串处理既是基础&#xff0c;也是安全漏洞的重灾区。理解C风格字符串的底层原理及其危险函数的运作方式&#xff0c;对于编写安全代码和进行逆向工程分析至关重要。 &#x1f9e9; C风格字符串的本质 C风格字符串本质上是以空字符\0&#xff08;ASCII值为0&#xf…

Mac安装hadoop

1.在terminal中检查是否安装brew命令 brew --version 如果没有安装&#xff0c;在terminal中执行命令&#xff0c;安装brew /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" 安装完成后&#xff0c;再重新打…

多语言编码Agent解决方案(4)-Eclipse插件实现

Eclipse插件实现&#xff1a;支持多语言的编码Agent集成 本部分包含Eclipse插件的完整实现&#xff0c;包括多语言支持、命令注册、API调用和UI集成。插件使用Java开发&#xff0c;基于Eclipse Plugin Development Environment (PDE)。 1. Eclipse插件目录结构 eclipse-plugin/…

风险规则引擎-RPA 作为自动化依赖业务决策流程的强大工具

机器人流程自动化&#xff08;RPA&#xff09;听起来好像跟机器人统治世界似的&#xff0c;但其实不是那么回事。RPA 就是一套能在电脑上运行的程序&#xff0c;能快速、高效地自动完成日常重复的工作。RPA 让你能够设置一些软件“机器人”来执行特定的任务。RPA 的一个大好处就…

漏洞无效化学习

一、基础概念与原理1. 核心定义漏洞无效化&#xff08;Vulnerability Mitigation&#xff09;&#xff1a;并非直接修补漏洞本身&#xff0c;而是通过技术手段降低漏洞被成功利用的概率。其目标是让攻击者即使发现漏洞也无法达成攻击目的。 关键思路&#xff1a;通过访问控制、…

「Vue 项目中实现智能时间选择:带业务规则的级联选择器」

#创作灵感公司业务需要&#xff0c;某个时间节点前可以选择到月&#xff0c;某个时间节点后只能选择季度vue2 Vant2javascriptimport { Cascader, Field, Form, Popup, Button } from vant; import vant/lib/index.css;export default {name: CascaderPage,components: {VanCa…

day1———Qt———应用程序界面设置

1&#xff0c;定义一个Mystring类代替string的功能#include <iostream> #include <string.h>using namespace std; class Mystring {friend ostream &operator<<(ostream &cout,const Mystring &s);friend istream &operator>>(istrea…

apache实现LAMP+apache(URL重定向)

1.apache实现LAMPLAMP是指一组通常一起使用来运行动态网站的自由软件名称首字母的缩写a.L是指Linux操作系统b,.A是指Apache&#xff0c;用来提供Web服务c.M指MySQL&#xff0c;用来提供数据库服务d.P指PHP&#xff0c;是动态网站的一种开发语言1.1php运行方式说明php是脚本语言…

SAConv可切换空洞卷积

SAConv可切换空洞卷积 带来的改进机制时可切换的空洞卷积 是一种创新型卷积网络 专门为增强物体检测和分割任务&#xff0c;中特征提取去设计 SAC核心时相同的输入儿子应用到不同空洞率去进行卷积&#xff0c;设计特别开关函数融合这些不同卷积的成果 该方法可让网络更灵活的适…

基于Matlab的雾霾天气和夜间车牌识别系统

在复杂天气和低光照环境下&#xff0c;车牌识别系统的准确率和稳定性显著下降&#xff0c;严重影响交通管理与智能监控的可靠性。本文针对雾霾天气和夜间环境下车牌图像特征模糊、对比度低、噪声干扰严重的问题&#xff0c;提出了一种融合图像增强与模板匹配的车牌识别方法。系…