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

torch.view torch.expand

1 原始

tensor维度: [41]

torch.arange(*self.grid_conf['dbound'], dtype=torch.float)

2 torch.view

tensor维度:[41,1,1] 第2,3个维度为110单数维

torch.arange(*self.grid_conf['dbound'], dtype=torch.float).view(-1, 1, 1)

知识点:
①view(new_shape)将张量修改为指定形状,但要保持新张量和原张量在数量上一致。
②view中一个参数定为-1,代表自动调整这个维度上的元素个数,以保证元素的总数不变。
例如:

B,C,H,W=x.size()
# 合并HW
x=x.view(B,-1,C)或者x=x.view(B,H*W,C)

3 torch.expand

tensor维度:[41,8,22]

torch.arange(*self.grid_conf['dbound'], dtype=torch.float).view(-1, 1, 1).expand(-1, feat_H16, feat_W16)

知识点:
expand函数用于将张量中单数维的数据扩展到指定的size

首先解释下什么叫单数维(singleton dimensions),张量在某个维度上的size为1,则称为单数维。比如zeros(2,3,4)不存在单数维而zeros(2,1,4)在第二个维度(即维度1)上为单数维。expand函数仅仅能作用于这些单数维的维度上。

参数*sizes用于逐个指定各个维度扩展后的大小(也可以理解为拓展的次数),对于不需要或者无法(即非单数维)进行扩展的维度,对应位置可写上原始维度大小或直接写作-1

expand函数可能导致原始张量的升维,其作用在张量前面的维度上,因此通过expand函数可将张量数据复制多份(可理解为沿着第一个batch的维度上)。

另一个值得注意的点是:expand函数并不会重新分配内存,返回结果仅仅是原始张量上的一个视图。

下面为几个简单的示例:

import torch
a = tensor([1, 0, 2])
b = a.expand(2, -1)   # 第一个维度为升维,第二个维度保持原阳
# btensor([[1, 0, 2],  [1, 0, 2]])a = torch.tensor([[1], [0], [2]])
b = a.expand(-1, 2)   # 保持第一个维度,第二个维度只有一个元素,可扩展
# btensor([[1, 1],
#              [0, 0],
#              [2, 2]])

不修改值,只用于计算,尽量用 expand,否则用 repeat。


http://www.mrgr.cn/news/26023.html

相关文章:

  • MacOS wine中文乱码问题
  • 使用规则引擎简化特定场景的开发
  • 如何把提醒事项以倒数日的形式放在桌面上?
  • oracle 如何查询表被锁
  • springboot Web基础开发
  • 代理导致的git错误
  • OpenAI 宣布新AI模型——代号“Strawberry”,逐步解决复杂问题
  • Matlab-Matpower制作IEEE14-电力虚假数据注入攻击FDIA数据集
  • 智能匹配企业名录,让找客户变得简单高效
  • 单考一个OCP认证?还是OCP和OCM认证都要考?
  • 什么是外贸专用路由器?
  • (安装VMtools工具)将一个文件从主系统(windows)传送到VMware虚拟机的Linux系统中
  • 【算法专场】分治(上)
  • 至强Xeon与酷睿Core处理器的详细对比分析
  • 基于MMDetection的OV-Dino实战
  • 多渠道优化您的DTC品牌以提升邮件收入
  • C# WinForm 中 DataGridView 实现单元格cell 能进编辑状态但是不能修改单元格的效果
  • YModem在Android上的实现(二)
  • Spring模块详解Ⅳ(Spring ORM和Spring Transaction)
  • Win10录屏技巧分享:四款录屏软件推荐!