对于深度学习中的一下数据,我们通常是要变成tensor格式,并且需要对其调整形状,很多时候我们往往只关注view之后的结果(比如输出的尺寸),而不关心过程。但有时候还是要关注一下这个到底是怎么变换过来的,不仅要知道结果,还要了解过程。
假设这里有一个tensor是这样的
打印出来的结果是这样,两个batch 每个矩阵是2x3的形状。这种情况可以想成两个矩阵堆叠在一起的样子。
然后我对他进行reshap view 之类的操作,这些操作都可以改变tensor的形状,达到相同的结果。
结果如下,我们可以发现:这个view是把矩阵按批次拉升,也就是横着拉平了
这次我们换个玩法,把它变成列的,看它还是不是横着拉平的,并且试一下它view之后能不能变换回去。提示一下,这里view中的-1是让函数自动推理输出形状。从另一个角度来说 -1相当于是一个未知数x,让函数自己去求它的值,而这个x要满足输出的形状的乘积等于原始形状的乘积,即22x=223,自动求解x=3
通过这个结果我们可以发现,改变行数的view 也是先把之前的矩阵拉平,然后两两分组。然后我们发现是可以view成原来的样子的
我们再试一下增加维度的情况
可以发现,只要满足上面的方程关系,是都可以进行view操作的,也是进行将矩阵横向拉伸,每增加一个维度就是增加了一个括号。最后我们发现这种情况也是会还原程原来的样子