В чем разница между view() и unsqueeze() в Torch?

использование unsqueeze():

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])

согласно документации,unsqueeze() вставки singleton dim в позиции, заданной в качестве параметра и view () создает представление с различными размерами хранилища, связанного с tensor.

что view () не понятно мне, но я не могу отличить его от unsqueeze(). Более того, я не понимая, когда использовать view () и когда использовать unsqueeze()?

любая помощь с хорошим объяснением была бы оценена!

1 ответов


view () может принимать только один аргумент "-1".

Итак, если вы хотите добавить одноэлементное измерение, вам нужно будет предоставить все измерения в качестве аргументов. Например, если A является тензором 2x3x4, чтобы добавить одноэлементное измерение, вам нужно будет сделать: view(2, 1, 3, 4).

однако иногда размерность входного сигнала неизвестна при использовании операции. Таким образом, мы не знаем, что A-2x3x4, но мы все равно хотели бы вставить одноэлементное измерение. Этот случается много при использовании минибатчей тензоров, где последнее измерение обычно неизвестно. В этих случаях nn.Unsqueeze полезен и позволяет вставлять измерение, явно не зная о других измерениях при написании кода.