PyTorch 中 Tensor 的 `reshape`、`view`、`transpose`、`permute` 函数的区别

PyTorch 中 Tensor 的 `reshape`、`view`、`transpose`、`permute` 的区别

一、 reshape

1.1 简介

torch.reshape 用于改变张量的形状。新张量与原张量共享数据内存,但形状不同。

1.2 语法

torch.reshape(input, shape)

1.3 参数

  • input:待调整形状的张量。
  • shape:一个表示新形状的元组或列表。新形状的元素乘积必须等于原始张量的元素总数。

1.4 示例

import torch

x = torch.arange(8)
x_reshaped = torch.reshape(x, (2, 4))
print(x_reshaped)

输出:

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

二、 view

2.1 简介

torch.Tensor.view 也用于调整张量的形状,与 reshape 类似,新张量与原张量共享数据内存,但要求张量是连续(contiguous)的。

2.2 语法

tensor.view(*shape)

2.3 参数

  • tensor:待调整形状的张量。
  • *shape:一个表示新形状的整数序列。

2.4 示例

import torch

x = torch.arange(8)
x_viewed = x.view(2, 4)
print(x_viewed)

输出:

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

三、 transpose

3.1 简介

torch.transpose 用于交换张量的两个维度,新张量与原张量共享数据内存

3.2 语法

torch.transpose(input, dim0, dim1)

3.3 参数

  • input:待交换维度的张量。
  • dim0:第一个要交换的维度。
  • dim1:第二个要交换的维度。

3.4 示例

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

输出:

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

四、 permute

4.1 简介

torch.permute 用于根据指定顺序重新排列张量的所有维度,新张量与原张量共享数据内存

4.2 语法

tensor.permute(*dims)

4.3 参数

  • tensor:待调整维度的张量。
  • *dims:一个表示新维度顺序的整数序列。

4.4 示例

x = torch.randn(2, 3, 5)
x_permuted = x.permute(2, 0, 1)
print(x_permuted.shape)

输出:

torch.Size([5, 2, 3])

五、对比总结

  • reshape:用于改变张量形状,可以处理非连续张量。

  • view:用于改变张量形状,但只能用于连续张量。对于非连续张量,需要先调用 .contiguous() 方法。

  • transpose:用于交换两个维度。

  • permute:用于根据指定顺序重新排列所有维度。

  • 上述4个函数均共享内存,因此对上述函数的返回值进行修改原数据会受到影响,我们可以用下述代码来验证

    代码:

    import torch
    
    data = torch.tensor([1, 2, 3, 4, 5, 6, 7, 8], dtype=torch.float32)
    data1 = torch.tensor([9, 10, 11, 12, 13, 14, 15, 16], dtype=torch.float32)
    data2 = torch.tensor([[1, 2], [3, 4]], dtype=torch.float32)
    data3 = torch.tensor([[5, 6], [7, 8]], dtype=torch.float32)
    
    view = data.view((2, 4))
    reshape = data1.reshape((2, 4))
    transpose = data2.transpose(1, 0)
    permute = data3.permute(1, 0)
    
    print('修改前')
    print(data)
    print(data1)
    print(transpose)
    print(permute)
    
    view[0][0] = 100
    reshape[1][1] = 100
    transpose[0][0] = 100
    permute[1][1] = 100
    
    print('修改后')
    print(data)
    print(data1)
    print(data2)
    print(data3)
    

    输出:

    修改前
    tensor([1., 2., 3., 4., 5., 6., 7., 8.])
    tensor([ 9., 10., 11., 12., 13., 14., 15., 16.])
    tensor([[1., 3.],
            [2., 4.]])
    tensor([[5., 7.],
            [6., 8.]])
    修改后
    tensor([100.,   2.,   3.,   4.,   5.,   6.,   7.,   8.])
    tensor([  9.,  10.,  11.,  12.,  13., 100.,  15.,  16.])
    tensor([[100.,   2.],
            [  3.,   4.]])
    tensor([[  5.,   6.],
            [  7., 100.]])
    

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

08 - Python面向对象编程进阶

面向对象进阶 在前面的章节我们已经了解了面向对象的入门知识,知道了如何定义类,如何创建对象以及如何给对象发消息。为了能够更好的使用面向对象编程思想进行程序开发,我们还需要对Python中的面向对象编程进行更为深入的了解。 property装…

mst[讲课留档]

最小生成树(Minimum Spanning Tree) (1)概念 我们知道,树是有 n n n个结点, n − 1 n-1 n−1条边的无向无环的连通图。 一个连通图的生成树是一个极小的连通子图,它包含图中全部的 n n n个顶点,但只有构成一棵树的 n − 1 n-1 …

SAP实现特别总账的凭证预制

SAP实现特别总账的凭证预制 仔细理解只有”其他”的特殊总帐标识才可预制凭证这句话. F-29/f-48不可预制。F-29/f-48预制时出现错误消息号 FP 030,提示特殊总帐标志类型“汇票和”预付定金“的特别总帐标志的过帐代码不能预制,这是系统写死的&#xff…

骨传导耳机哪个牌子好?精选靠谱好用的TOP5骨传导耳机推荐!

在超过八成的音乐爱好者都面临听力健康问题的当下,骨传导耳机因其独特的听觉体验和对听力的保护,在音频设备市场中备受瞩目。但近期我发现不少用户在选购骨传导耳机时常常受到不专业产品的误导。身为有着5年经验的数码博主,在此提醒大家&…

Web基础与HTTP协议:

Web基础与HTTP协议 Web:就是我们所说的页面,打开网站所展示的页面。(全球广域网,万维网) 分布式图形信息系统。 http https (加密的)超文本传输协议 分布式:计算机系统或者应用程序…

数据分析与挖掘案例-电子商务网站用户行为分析及服务推荐

数据分析与挖掘案例-电子商务网站用户行为分析及服务推荐 文章目录 数据分析与挖掘案例-电子商务网站用户行为分析及服务推荐1. 背景与挖掘目标2. 分析方法与过程2.1 分析步骤与流程2.2 数据抽取2.3 数据探索分析1. 分析网页类型2. 分析网页点击次数 2.4 数据预处理1. 删除不符…

《昇思25天学习打卡营第23天 | 昇思MindSporeRNN实现情感分类》

23天 本节学习了RNN实现情感分类。 循环神经网络(RNN)是一类以序列(sequence)数据为输入,在序列的演进方向进行递归(recursion)且所有节点(循环单元)按链式连接的神经网…

C++视觉开发 一.OpenCV环境配置

一.OpenCV安装环境配置 1.OpenCV安装 (1)下载 官方下载链接:http://opencv.org/releases 这边选择需要的版本,我是在windows下的4.9.0。(科学上网下载很快,否则可能会有点慢) (2)安装 双击下…

【深度学习】图生图img3img论文原理,SD EDIT

https://arxiv.org/abs/2108.01073 摘要 引导图像合成技术使普通用户能够以最小的努力创建和编辑逼真的图像。关键挑战在于平衡对用户输入(例如,手绘的彩色笔画)的忠实度和合成图像的真实感。现有的基于GAN的方法试图通过使用条件GAN或GAN反…

【CT】LeetCode手撕—93. 复原 IP 地址

目录 题目1- 思路2- 实现⭐93. 复原 IP 地址——题解思路 3- ACM 实现 题目 原题连接:93. 复原 IP 地址 1- 思路 模式识别:给一个 String 字符串 ——> 复原 IP 地址 ——> 回溯三部曲 ,回溯的切割问题 ——> 实现一个左闭右闭区间…

小白入门云计算的最佳方式,是去考一张AWS证书

云计算的快速发展让它成为现代IT行业的核心技术之一。 作为一名初学者,如何高效地入门云计算? 我的建议是:考一张AWS证书。 AWS(Amazon Web Services)在云计算市场占据领先地位,它的认证体系既权威又全面&a…

实现Ubuntu计划任务的反弹shell

一、实验环境 Ubuntu:IP地址:192.168.223.156 Kali : IP地址:192.168.223.152 二、编写crontab计划任务 在Ubuntu的系统中使用crontab -e命令编写计划任务,如下所示: 作用:是将一个交互式的bash …

Kubernetes的发展历程:从Google内部项目到云原生计算的基石

目录 一、起源与背景 1.1 Google的内部项目 1.2 Omega的出现 二、Kubernetes的诞生 2.1 开源的决策 2.2 初期发布 三、Kubernetes的发展历程 3.1 社区的成长 3.2 生态系统的壮大 3.3 重大版本和功能 3.4 多云和混合云的支持 四、Kubernetes的核心概念 4.1 Pod 4.…

vscode 安装Vue插件

打开扩展面板 --> 点击左侧的扩展图标,或者按下快捷键 Ctrl Shift X 搜索插件,在搜索框中输入 Vue vue-helper 用来快捷提示,如果使用elementui的话,插件不会自动提示,安装了它,组件、属性都会有提示了 Vetur V…

硬核丨2024文本生成类AI产品横向评测报告

文本生成/写作”作为使用最高频的AI场景,各类产品如雨后春笋般出现。我们针对办公/学习的写作场景进行了全面系统的评测。希望此次评测结论能够帮您在工作学习中使用AI应用提效。 本次评测对象包含文心、通义、kimi等模型厂商及笔灵、迅捷、秘塔等应用厂商共13款产…

制造业如何拥抱数字化?百数服务商的转型策略与实践

制造业作为实体经济的主体部分,也是核心部分,发挥着基础性、主导性和引领性作用。推动制造业数字化转型是实现经济高质量发展的必由之路。 在这场数字化浪潮中,低代码平台作为一种新兴的技术手段,逐渐受到了企业的青睐。其能够在…

国产压缩包工具——JlmPackCore SDK说明(一)

一、什么是JlmPackCore SDK (1)自主可控 JlmPackCore是一套基于我国自主知识产权的核心算法发明专利——杰林码(详系请参考《杰林码原理及应用》一书,也可以参考后续发表的相关论文),其中一篇会议论文&…

Eagle Trader的交易魅力!

这就是 Eagle Trader 的独特魅力所在 - 让交易者能够敏锐地捕捉到市场的脉搏,将图表上的每一个波动转化为盈利的机遇。在这里,您可以凭借自己的智慧和勇气,将复杂的市场数据转化为实际的收益。 Eagle Trader 提供了丰富的交易工具和资源&…

开源网安荣获第一新声“2024中国最佳信创安全厂商”,信创实力获认可

近日,由权威机构【第一新声】与【天眼查】联合发起的“2024中国最佳信创厂商系列榜单”评选中,开源网安以其技术创新能力和在信创领域持续投入,成功入选“中国最佳信创安全厂商”。 开源网安,作为软件安全领域创领者,自…

Fooocus模型配置中文教程

很多同学这里不知道该怎么选择。不知道每个模型效果,针对这个整理了一个表格。参考表格就可生成预期效果图。 下载地址: https://download.csdn.net/download/yuanshiren133/89503764