pytorch中的contiguous()函数的浅浅解释
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等维度变换操作后,在内存中不再是连续存储的,而view操作要求tensor的内存连续存储,所以需要contiguous来返回一个contiguous copy; 2 维度变换后的变量是之前变量的浅拷贝,指向同一区域,即view操作会连带原来的变量一同变形,这是不合法的,所以也会报错;---- 这个解释有部分道理,也即contiguous返回了tensor的深拷贝contiguous copy数据;
参考资料
//讲得贼拉好
//讲得贼拉好
上一篇:
JS实现多线程数据分片下载