В чем разница между 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 полезен и позволяет вставлять измерение, явно не зная о других измерениях при написании кода.