web-dev-qa-db-ja.com

Torchのview()とunsqueeze()の違いは何ですか?

nsqueeze() の使用:

input = torch.Tensor(2, 4, 3) # input: 2 x 4 x 3
print(input.unsqueeze(0).size()) # prints - torch.size([1, 2, 4, 3])

view() の使用:

input = torch.Tensor(2, 4, 3) # input: 2 x 4 x 3
print(input.view(1, -1, -1, -1).size()) # prints - torch.size([1, 2, 4, 3])

ドキュメントによると、 nsqueeze() はパラメーターとして指定された位置にシングルトンdimを挿入し、 view()tensorに関連付けられたストレージの異なる次元のビューを作成します。

view() の動作は明確ですが、 nsqueeze() と区別することはできません。さらに、 view() を使用するタイミングと nsqueeze() ?を使用するタイミングがわからない

良い説明で助けていただければ幸いです!

18
Wasi Ahmad

view()は、単一の「-1」引数のみを取ることができます。

そのため、シングルトンディメンションを追加する場合は、すべてのディメンションを引数として提供する必要があります。たとえば、Aが2x3x4テンソルの場合、シングルトン次元を追加するには、A:view(2、1、3、4)を実行する必要があります。

ただし、操作が使用されているとき、入力の次元が不明な場合があります。したがって、Aが2x3x4であることはわかりませんが、それでもシングルトン次元を挿入したいと思います。これは、最後の次元が通常不明であるテンソルのミニバッチを使用する場合によく起こります。これらの場合、nn.Unsqueezeは便利であり、コードを記述するときに他のディメンションを明示的に意識せずにディメンションを挿入できます。

18
greenberet123