pytorch学習(一):tensorサイズを変更する
Tensor寸法変更操作
1.tensor.view
tensor.viewメソッドではtensorの形状を調整できますが、調整前後の要素の総数が一致することを保証する必要があります.viewは自身のデータを変更せず、返される新しいtensorはソースtensorとメモリを共有します.つまり、そのうちの1つを変更し、もう1つも変更します.例:
2.tensor.unsqueezeとtensor.squeeze
tensor.unsqueezeとtensor.squeezeはtensorの次元を増加または減少させるためにそれぞれ使用されます.例:
3.tensor.resize
tensor.resizeはtensorサイズを調整できる別の方法ですが、viewとは異なり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]])