pytorch学習(一):tensorサイズを変更する


Tensor寸法変更操作
1.tensor.view
tensor.viewメソッドではtensorの形状を調整できますが、調整前後の要素の総数が一致することを保証する必要があります.viewは自身のデータを変更せず、返される新しいtensorはソースtensorとメモリを共有します.つまり、そのうちの1つを変更し、もう1つも変更します.例:
In: import torch as t
     a = t.arange(0, 6)
     a.view(2, 3)
Out:tensor([[0, 1, 2],
        [3, 4, 5]])

In: b = a.view(-1, 3)#     -1   ,         
Out:tensor([[0, 1, 2],
        [3, 4, 5]])

2.tensor.unsqueezeとtensor.squeeze
tensor.unsqueezeとtensor.squeezeはtensorの次元を増加または減少させるためにそれぞれ使用されます.例:
In: b.unsqueeze(1)#    ,   1 (   0  )   “1”
Out:tensor([[[0, 1, 2]],
        [[3, 4, 5]]])
        
In: b.unsqueeze(-2) #-2         
Out:tensor([[[0, 1, 2]],
        [[3, 4, 5]]])
        
In: c = b.view(1, 1, 1, 2, 3)
     c.unsqueeze(0)#   0  “1”
Out:tensor([[[[[[0, 1, 2],
            [3, 4, 5]]]]]])
            
In: c.squeeze()  #      “1”   
Out:tensor([[0, 1, 2],
        [3, 4, 5]])
        
In:a[1] = 100
    b #a b    ,   a,b   
Out:tensor([[  0, 100,   2],
        [  3,   4,   5]])

3.tensor.resize
tensor.resizeはtensorサイズを調整できる別の方法ですが、viewとは異なりtensorサイズを変更できます.新しいサイズが元のサイズを超えると、新しいメモリ領域が自動的に割り当てられます.新しいサイズが元のサイズより小さい場合、以前のデータは保存されます.
In: b.resize_(1, 3)
Out:tensor([[  0, 100,   2]])

In: b.resize_(3, 3)#         ,           
Out:tensor([[                  0,                 100,                   2],
        [                  3,                   4,                   5],
        [                  0,                   0, 2323344073926471279]])