contiguous()
有些tensor并不是占用一整块内存,而是由不同的数据块组成。
contiguous()函数的作用:把tensor变成在内存中连续分布的形式。
来自链接一
contiguous一般与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数据;
参考资料
permute函数_Pytorch之contiguous函数_weixin_39626369的博客-CSDN博客//讲得贼拉好
pytorch中contiguous()_小妖精Fsky的博客-CSDN博客_pytorch中contiguous//讲得贼拉好
扫描二维码关注公众号,回复:
14136829 查看本文章
![](/qrcode.jpg)
Pytorch view() permute() contiguous() transpose()_我是天才很好的博客-CSDN博客