关于Contiguous()方法
方法作用:返回一个内存连续的有相同数据的tensor,如果原tensor内存连续,则返回原tensor。 一般与transpose,permute,view等方法搭配使用。
使用示例:
- 使用transpose或permute进行维度变换后,需要调用contiguous,才可使用view对维度进行变形(如:tensor_var.contiguous().view() ),示例如下:
x = torch.Tensor(2,3)
y = x.permute(1,0) # permute:二维tensor的维度变换,此处功能相当于转置transpose
y.view(-1) # 报错,view使用前需调用contiguous()函数
y = x.permute(1,0).contiguous()
y.view(-1) # OK
具体原因有两种说法:
1. transpose、permute等维度变换操作后,tensor在内存中不再是连续存储的,而view操作要求tensor的内存连续存储,所以需要contiguous来返回一个contiguous copy;
2. 维度变换后的变量是之前变量的浅拷贝,指向同一区域,即view操作会连带原来的变量一同变形,这是不合法的,所以也会报错;---- 这个解释有部分道理,也即contiguous返回了tensor的深拷贝contiguous copy数据;
我感觉都还挺有道理的。
- 在pytorch中,只有很少几个操作是不改变tensor的内容本身,而只是重新定义下标与元素的对应关系。换句话说,这种操作不进行数据拷贝和数据的改变,变的是元数据,这些操作是:
narrow(),view(),expand(),transpose();
在使用transpose()进行转置操作时,pytorch并不会创建新的、转置后的tensor,而是修改了tensor中的一些属性(也就是元数据),使得此时的offset和stride是与转置tensor相对应的,而转置的tensor和原tensor的内存是共享的。
为了证明这一点,我们来看下面的代码:
x = torch.randn(3, 2)
y = x.transpose(x, 0, 1)
x[0, 0] = 233
print(y[0, 0]) # print 233
可以看到,改变了x的元素的值的同时,y的元素的值也发生了变化;也即,经过上述操作后得到的tensor,它内部数据的布局方式和从头开始创建一个常规的tensor的布局方式是不一样的!于是就有contiguous()的用武之地了。
在上面的例子中,x是contiguous的,但y不是(因为内部数据不是通常的布局方式)。注意:不要被contiguous的字面意思“连续的”误解,tensor中数据还是在内存中一块区域里,只是布局的问题!
简单来说,Contiguous()方法的作用就是:当调用contiguous()时,会强制拷贝一份tensor,让它的布局和从头创建的一模一样。
实际使用时候不用太担心,如果没在需要调用contiguous()的地方调用contiguous(),运行时会提示我们需要添加。
转载自: Pytorch之contiguous函数 - 知乎 感谢!
关于Contiguous()方法相关推荐
- torch.contiguous()方法
orch.contiguous()方法语义上是"连续的",经常与torch.permute().torch.transpose().torch.view()方法一起使用,要理解这样 ...
- 【PyTorch】contiguous==>保证Tensor是连续的,通常transpose、permute 操作后执行 view需要此方法
目录 PyTorch中的is_contiguous是什么含义? 行优先 为什么需要 contiguous ? contiguous 本身是形容词,表示连续的,关于 contiguous, PyTorc ...
- pytorch reshape_PyTorch中的contiguous
本文讲解了pytorch中contiguous的含义.定义.实现,以及contiguous存在的原因,非contiguous时的解决办法.并对比了numpy中的contiguous. contiguo ...
- Pytorch基础之张量的存储方式及维度操作:size,shape,view,reshape,contiguous
参考书目:张校捷,<深入浅出PyTorch:从模型到源码> Pytorch中张量的存储 假设存在一个k维张量,其维数为[ n 1 , n 2 . . . n k n_1,n_2...n_k ...
- PyTorch学习笔记(15) ——PyTorch中的contiguous
本文转载自栩风在知乎上的文章<PyTorch中的contiguous>.我觉得很好,特此转载. 0. 前言 本文讲解了pytorch中contiguous的含义.定义.实现,以及conti ...
- PyTorch中的contiguous解读
本文讲解了pytorch中contiguous的含义.定义.实现,以及contiguous存在的原因,非contiguous时的解决办法.并对比了numpy中的contiguous. contiguo ...
- 详解PyTorch中的contiguous
目录 前言 PyTorch中的is_contiguous是啥? 行优先 为什么需要 contiguous ? 为什么不在view 方法中默认调用contiguous方法? 前言 contiguous ...
- Pytorch学习笔记——Contiguous vs non-contiguous tensor
文章目录 前言 正文 调用contiguous会导致内存复制操作吗? 前言 原文地址:https://discuss.pytorch.org/t/contigious-vs-non-contigiou ...
- pytorch笔记:contiguous tensor 存储知识
1 contiguous contiguous直观的解释是Tensor底层一维数组元素的存储顺序与Tensor按行优先一维展开的元素顺序是否一致. 1.1 tensor的存储 Tensor多维数组底层 ...
最新文章
- linux怎么查看mysql安装在哪里_Linux下查看MySQL的安装路径
- MyEclipse移动开发教程:移动Web模拟器指南(一)
- 提取Java集合的元素-Java 8方法
- DataList分页,保存CheckBox控件状态
- python rq asyncio_python异步IO-asyncio
- html php上传图片验证判断,HTML_PHP实例:上传多个图片并校验的代码,单张的图片上传是不复杂的, - phpStudy...
- 短信接口与短信平台收费标准----速码云仅供参考
- Ionic3在ts中获取html中值的方法
- sp根据备份文件来创建DB
- 別人的心得。。。。。學習
- 【C语言视频教程完整版】从入门到进阶,适合C语言初学者计算机考研党考计算机二级大一大二学生学习观看~~~
- android设置计算器页面布局,Android计算器界面布局
- unity3D 插件plugins
- GCC警告warning: control reaches end of non-void function [-Wreturn-type]|
- 旷视科技计算机视觉算法研究员年薪,旷视科技算法研究员面经(21个问答)
- html5中css新增的属性,css3有哪些新增属性?常用的新增属性总结
- miktex+WinEdt 安装步骤
- java导出excel 方式_java导出Excel通用方法
- 十年Java架构师分享
- 10.5国庆作业(IIC实验)
热门文章
- 某IE订位源码分享与交流
- latex中插入两张子图片
- updated beforeUpdate() Updated() 生命周期-销毁阶段 vue的nextTick@stage3---week2--day4-1
- VScode前进和后退按钮,非快捷键
- C语言scanf函数用法详细解释!!!
- 加入先进制造的追光者-探索现代机械设计团队的高效协作方式
- mysql 1146 错误处理
- UVA - 12325 Zombie's Treasure Chest 暴力
- 英文最基本的五个时态
- android状态栏高度px,安卓720*1280界面尺寸规范参考