在实际使用中老是忘记这些和维度相关操作的API用法,在这里记录一下,作为备忘。
unsqueeze指定某一个维度(如0),然后在该维度再插入一个维度,一般用来增加维度,尺寸只能为1。
从以下代码可以看出,经过unsuqeeze之后,tensor的尺寸在0的位置多了一个1。
In [2]: a = torch.tensor([1,2,3]) In [3]: a = a.unsqueeze(0) In [4]: a Out[4]: tensor([[1, 2, 3]]) In [5]: a.size() Out[5]: torch.Size([1, 3])
squeeze是Unsqueeze的逆过程。作用是降低维度。以下代码可以看出经过suqeeze之后的tensor在维度降低。
In [17]: a.size() Out[17]: torch.Size([1, 1, 1, 3]) In [18]: a = a.squeeze(0) In [19]: a.size() Out[19]: torch.Size([1, 1, 3])
cat 用来拼接tensor,按指定维度进行合并。
In [30]: a.size() Out[30]: torch.Size([1, 1, 3]) In [31]: b = torch.cat([a,a],0) #合并维度为 0 In [32]: b.size() Out[32]: torch.Size([2, 1, 3]) # 0维的尺寸增加 In [33]: b = torch.cat([a,a],1) #合并维度为1 In [34]: b.size() Out[34]: torch.Size([1, 2, 3])#维度1的tensor size 增加
view 用来对tensor的各个维度的尺寸进行变换。需要注意的是 view 并不会改变原来 tensor 的size,我们需要通过再次赋值才能改变。
In [47]: a = torch.tensor([1,2,3]) In [48]: a.view(-1,3) #-1 表示自动推导该位置的size。 Out[48]: tensor([[1, 2, 3]]) In [49]: a.size() Out[49]: torch.Size([3]) In [50]: a = a.view(-1,3) In [51]: a.size() Out[51]: torch.Size([1, 3])
stack的作用是以列表的形式,在指定维度拼接多个tensor,类似cat、
In [62]: a.size() Out[62]: torch.Size([1, 3]) In [63]: b = torch.stack([a,a],dim=1) In [64]: b.size() Out[64]: torch.Size([1, 2, 3]) In [65]: b = torch.stack([a,a],dim=0) In [66]: b.size() Out[66]: torch.Size([2, 1, 3])