Pytorch-contiguous()

在看代码的时候看到了contiguous的用法,特在此总结。

我的理解上这个的作用有点像deepcopy,如果有理解不对的地方,欢迎指出。

未使用contiguous.png

从图中我们可以看到对矩阵m进行转置之后,其实d指向的还是m。当我们修改了d中的数据之后,m中的数据也随之变化了,这其实和我们的本意是相违背的。

按照之前找的资料里面说d里面数据布局的方式和从头开始创建一个常规的tensor布局的方式是不一样的。听起来有些拗口。

我的理解就是这个可能只是python中之前常用的浅拷贝,d还是指向m变量所处的位置,只是说记录了transpose这个变化的布局。

在这里,如果想要拜托这两个变量之间的依赖(m本身是contiguous的),就要使用contiguous针对m进行变化,感觉上就是我们认为的深拷贝。

使用了contiguous.png

从上图 ,我们可以看到我们对d进行改变之后,和m没有关系了。(也就是我们理解的经过深拷贝了,和原来无关了)

在这里,要提醒大家一个我踩了的坑。一开始我被contiguous的字面意思“连续的”所误导了,以为在内存中不是存在一块连续的地址,其实tensor中的数据还是存在内存中的一块区域里,只是布局问题。、

所以当调用contiguous后,就会创建一个独立的布局和原来的那个变量独立开来。

在我们写代码的时候其实不用太担心,如果在需要调用contiguous的地方没有调用contiguous,系统会报错,到时候加上就好了。

参考资料:https://blog.csdn.net/gdymind/article/details/82662502

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,142评论 1 32
  • 赋能组织,是新型组织,与之对应的是传统的科层制组织。 在赋能组织中,创意精英因为志同道合而相聚在一起,勇敢试错锐意...
    建阳阅读 864评论 0 0
  • 今天简书发表的文章被和谐
    Maggielxx阅读 124评论 0 0
  • 冷月文 我看到你的手臂背向身后 我看到你的头发被风扬起 我看到你的额角沁出汗滴 我看你的眼睛半眨也不眨的望着我 我...
    edde9303997e冷月阅读 221评论 0 0