view()使用的前提是variable是contiguous的,如果在view之前用了transpose, permute等,需要用contiguous()来返回一个contiguous copy。
有些tensor并不是占用一整块内存,而是由不同的数据块组成,而tensor的view()操作依赖于内存是整块的,这时只需要执行contiguous()这个函数,把tensor变成在内存中连续分布的形式。
在torch里面,view函数相当于numpy的reshape。
X.view(-1, 5)
这里-1表示一个不确定的数,就是你如果不确定你想要reshape成几行,但是你很肯定要reshape成5列,那不确定的地方就可以写成-1
例如 一个长度的20向量x,
x.view(-1, 4)等价于x.view(5, 4)
x.view(-1, 2)等价于x.view(10,2)