Pytorch中tensor.view().permute().contiguous()函数理解

yolov3中有一行这样的代码,在此记录一下三个函数的含义

# 例子中batch_size为整型,len(self.anchors_mask[i])=3,self.bbox_attrs=25(voc数据集),最后两个参数也均为int
prediction = input.view(batch_size, len(self.anchors_mask[i]),self.bbox_attrs, input_height, input_width).permute(0, 1, 3, 4, 2).contiguous()

1 view()

view变换维度,把原先tensor中的数据按行优先的顺序排成一个一维数据,然后按照输入参数要求,组合成其他维度的tensor。

a=torch.Tensor([[[1,2,3],[4,5,6]]])      #  ——>  torch.Size([1, 2, 3])
print(a.view(3,2))      #  ——>  torch.Size([3, 2])
#输出为:
tensor([[1., 2.],[3., 4.],[5., 6.]])

2 permute()

permute将tensor中任意维度利用索引调换。b=a.permute(2,0,1),permute里的参数对应的是张量a的维度索引,利用索引来对内部数据调换。
a.permute(2,0,1):把a的最后一个维度放到最前面。

import torchinputs = [[[1, 2 ,3], [4, 5, 6]],[[7, 8, 9], [10, 11, 12]]]inputs = torch.tensor(inputs)
print("inputs:", inputs, inputs.shape)outputs = inputs.permute(0, 2, 1)
print("outputs:", outputs, outputs.shape)

输出:

inputs: tensor([[[ 1,  2,  3],[ 4,  5,  6]],[[ 7,  8,  9],[10, 11, 12]]]) torch.Size([2, 2, 3])
outputs: tensor([[[ 1,  4],[ 2,  5],[ 3,  6]],[[ 7, 10],[ 8, 11],[ 9, 12]]]) torch.Size([2, 3, 2])

3 contiguous()

细致理解Pytorch数据布局方式和内存关系可以参考链接
仅理解contiguous()函数,可以理解为一次深拷贝
当调用contiguous()时,会强制拷贝出一份tensor,让它的布局和从头创建的一模一样,但是两个tensor完全没有联系

 contiguous() → Tensor

返回一个内存连续的有相同数据的tensor,如果原tensor内存连续,则返回原tensor;

具体原因有两种说法:

1 transpose、permute等维度变换操作后,tensor在内存中不再是连续存储的,而view操作要求tensor的内存连续存储,所以需要contiguous来返回一个contiguous copy;

2 维度变换后的变量是之前变量的浅拷贝,指向同一区域,即view操作会连带原来的变量一同变形,这是不合法的,所以也会报错;---- 这个解释有部分道理,也即contiguous返回了tensor的深拷贝contiguous copy数据;

参考链接:

【view().permute().contiguous()】 Pytorch中tensor.view().permute().contiguous()函数理解 - 简书 (jianshu.com)

Pytorch中tensor.view().permute().contiguous()函数理解相关推荐

  1. pytorch中tensor.mean(axis, keepdim)参数理解小实验

    虽然没试过其他形式的多维数据,不过想来应该是一样的吧 -- 1.结论 keepdim=True 运算完之后的维度和原来一样,原来是三维数组现在还是三维数组(不过某一维度变成了1): keepdim=F ...

  2. pytorch 中 contiguous() 函数理解

    pytorch 中 contiguous() 函数理解 文章目录 pytorch 中 contiguous() 函数理解 引言 使用 contiguous() 后记 文章抄自 Pytorch中cont ...

  3. Pytorch中tensor维度和torch.max()函数中dim参数的理解

    Pytorch中tensor维度和torch.max()函数中dim参数的理解 维度 参考了 https://blog.csdn.net/qq_41375609/article/details/106 ...

  4. Pytorch中tensor.expand()和tensor.expand_as()函数

    Pytorch中tensor.expand函数 Tensor.expand()函数详解 Tensor.expand_as()函数 Tensor.expand()函数详解 函数语法: # 官方解释: D ...

  5. tensor.view().permute()

    tensor.view.permute tensor.view() tensor.permute() tensor.view()   tenor.view()的作用说通俗点就是:该函数返回一个有相同数 ...

  6. pytorch tensor查找0_在PyTorch中Tensor的查找和筛选例子

    本文源码基于版本1.0,交互界面基于0.4.1 import torch 按照指定轴上的坐标进行过滤 index_select() 沿着某tensor的一个轴dim筛选若干个坐标 >>&g ...

  7. Pytorch中Tensor的索引,切片以及花式索引(fancy indexing)

    目录 理解Tensor的dim 索引 简单索引 用1维的list,numpy,tensor索引 用booltensor索引 切片 花式索引 结语 前一段时间遇到一个花式索引的问题,在搜索良久之后没有找 ...

  8. 机器学习9:关于pytorch中的zero_grad()函数

    机器学习9:关于pytorch中的zero_grad()函数 本文参考了博客Pytorch 为什么每一轮batch需要设置optimizer.zero_grad. 1.zero_grad()函数的应用 ...

  9. tensor.view()函数--自己的理解《pytorch学习》

    引言:首先介绍一下,我们会在哪里遇到这个函数呢?最常见的就是在利用pytorch库搭建网络时,时不时的冒出一个,如果不会!你总是看不懂,以后也看不懂,如果有时间,大家一起来看看这个函数吧! 1.ten ...

最新文章

  1. Redis 那些故障转移、高可用方案
  2. 成功解决ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or
  3. 答网友问:如果用 OData 就能直接和 SAP 系统互通,BTP 和 CPI 这样的平台意义在哪里呢?
  4. 下载的c语言程序代码怎么运行,CFree怎么运行程序 编译运行C语言程序代码的方法...
  5. 软件测试用例_大话软件测试用例要素
  6. 搜索提示时jquery的focusout和click事件冲突问题完美解决
  7. c++中的结构体_C ++中的结构
  8. 初入WebService
  9. 使用jekins自动构建部署java maven项目(jdk1.7+tomcat7.0+jenkins2.19.3)
  10. java车牌号识别EasyPR_EasyPR-Java
  11. halcon安装教程
  12. Origin非线性拟合选项
  13. AT绑定句柄无效和拒绝访问
  14. PAT甲级 1116
  15. 一个在线免费短网址生成API
  16. 生产系统执行下线操作--泪奔
  17. springboot企业人力资源管理系统毕业设计源码291816
  18. 我理解的MOOC的重要性
  19. 三线性插值(Trilinear Interpolation)详解
  20. C++jump game跳跃游戏的算法(附完整源码)

热门文章

  1. 常用的行列式和矩阵的性质
  2. 已知由单链表表示的线性表中含有三类字符(数字,字母和其他字符)试编写算法来构造三个循环链表,使每个表中只含某一类字符,且利用原表中的结点空间作为这三个表的结点空间,头结点可另辟空间。
  3. Eclipse使用指南
  4. Android键盘操作的函数:onKeyDown, onKeyUp, on, onKeyMultiple
  5. 【算法】 二叉树遍历
  6. DSO详解-Direct Sparse Odometry论文解读
  7. ab进行压力测试详解
  8. DOTween的使用
  9. Redis学习笔记(四):配置文件详细说明(redis-3.2)
  10. 六十星系之43紫微天相坐辰戌