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

Pytorch基础:Tensor的reshape方法

        在Pytorch中,reshape是Tensor的一个重要方法,它与Numpy中的reshape类似,用于返回一个改变了形状但数据和数据顺序和原来一致的新Tensor对象。注意:此时返回的数据对象并不一定是新的,这取决于应用此方法的Tensor是否是连续的。

        reshape方法的语法如下所示:

Tensor.reshape(*shape) → Tensor
shape (tuple of ints or int...) - the desired shape

        reshape的用法如下所示:

import torch
# 创建一个张量
x = torch.randn(3, 4)
tensor([[ 0.1961, -0.9038,  0.9196, -1.1851],[ 1.1321,  0.3153,  0.3485,  0.7977],[-0.5279,  0.2062, -0.4224, -0.3993]])# 使用reshape方法将其重新塑造为2行6列的形状
y = x.reshape(2, 6) 
y = x.reshape((2,6)) #两种形式均可,y = x.reshape([2,6])也可
tensor([[ 0.1961, -0.9038,  0.9196, -1.1851,  1.1321,  0.3153],[ 0.3485,  0.7977, -0.5279,  0.2062, -0.4224, -0.3993]])

        可以看到,给出的参数既可以是多个整数(其中每个整数代表一个维度的大小,而整数的数量代表维度的数量),也可以是一个元组或是列表(其中每个元素代表一个维度的大小,而元素数量代表维度的数量)。而且reshape不改变Tensor中数据的排列顺序(指的是从上到下从左到右遍历的顺序),只改变形状,这也就对reshape各维度大小的乘积有要求,要与原Tensor一致。在上例中即3*4=2*6。

        另外reshape还有一个trick,即某一维的实参可以是-1,此时会自动根据原Tensor大小和给出的其他维度参数的大小,推断出这一维度的大小,举例如下:

import torch
# 创建一个张量
x = torch.randn(3, 4)
tensor([[ 0.1961, -0.9038,  0.9196, -1.1851],[ 1.1321,  0.3153,  0.3485,  0.7977],[-0.5279,  0.2062, -0.4224, -0.3993]])# 使用reshape方法将其重新塑造为6行n列的形状,n为自动推断出的值
y = x.reshape(6, -1)
tensor([[ 0.1961, -0.9038],[ 0.9196, -1.1851],[ 1.1321,  0.3153],[ 0.3485,  0.7977],[-0.5279,  0.2062],[-0.4224, -0.3993]])# 使用reshape方法将其重新塑造为(2,2,n)的形状,n为自动推断出的值
y = x.reshape(2, 2, -1)
tensor([[[ 0.1961, -0.9038,  0.9196],[-1.1851,  1.1321,  0.3153]],[[ 0.3485,  0.7977, -0.5279],[ 0.2062, -0.4224, -0.3993]]])# 不能在两个维度都指定-1,这时无法推断出唯一结果
y = x.reshape(2, -1, -1)
Traceback (most recent call last):File "<stdin>", line 1, in <module>
RuntimeError: only one dimension can be inferred

        除此之外,还可以使用torch.reshape()函数,这与使用reshape方式效果一致,torch.reshape()的语法如下所示。

torch.reshape(input, shape) → Tensor
input (Tensor) – the tensor to be reshaped
shape (tuple of python:int) – the new shapeimport torch
# 创建一个张量
x = torch.randn(3, 4)
tensor([[ 0.1961, -0.9038,  0.9196, -1.1851],[ 1.1321,  0.3153,  0.3485,  0.7977],[-0.5279,  0.2062, -0.4224, -0.3993]])# 使用reshape函数将其重新塑造为6行n列的形状,n为自动推断出的值
y = torch.reshape(x, (6, -1))
tensor([[ 0.1961, -0.9038],[ 0.9196, -1.1851],[ 1.1321,  0.3153],[ 0.3485,  0.7977],[-0.5279,  0.2062],[-0.4224, -0.3993]])

http://www.lryc.cn/news/180394.html

相关文章:

  • 【数据库——MySQL】(13)过程式对象程序设计——存储函数、错误处理以及事务管理
  • Spring Boot的魔法:构建高性能Java应用
  • 如何做好测试?(七)兼容性测试 (Compatibility Testing, CT)
  • 经典循环神经网络(一)RNN及其在歌词数据集上的应用
  • docker+mysql+flask+redis+vue3+uwsgi+docker部署
  • Spring boot接收zip包并获取其中excel文件的方法
  • Ubuntu镜像源cn.arichinve.ubuntu.com不可用原因分析和解决
  • Java基础面试,String,StringBuffer,StringBuilder区别以及使用场景
  • 基于SpringBoot的高校学科竞赛平台
  • excel如何让线条消失,直接设置网格即可,碰到不方便的地方优先百度,再采取蛮干
  • 抖音短视频seo矩阵系统源代码开发系统架构及功能解析
  • 在pycharm中弹出图后,需要关闭才会显示Process finished with exit code 0
  • 【计算机网络笔记六】应用层(三)HTTP 的 Cookie、缓存控制、代理服务、短连接和长连接
  • Vue中的数据分页与分页组件设计
  • TCP串流场景剖析
  • Windows历史版本下载
  • 企业级磁盘阵列存储系统由硬到软全析
  • V4L2 驱动架构介绍
  • 掌握这些技巧,让Excel批量数据清洗变得简单高效!
  • 成都瀚网科技:抖音上线地方方言自动翻译功能
  • 【k8s】【docker】web项目的部署
  • 【视频去噪】基于全变异正则化最小二乘反卷积是最标准的图像处理、视频去噪研究(Matlab代码实现)
  • 国庆day3---网络编程知识点脑图整合
  • 链表经典面试题(六)
  • SM2签名算法中随机数K的随机性对算法安全的影响
  • 郁金香2021年游戏辅助技术中级班(六)
  • 毛玻璃员工卡片悬停效果
  • 闪存工作原理
  • 从0到一配置单节点zookeeper
  • 【JVM】第三篇 JVM对象创建与内存分配机制深度剖析