Я работаю над моделью внимания, и перед запуском окончательной модели я просматривал тензорные формы, которые проходят через код. У меня есть операция, в которой мне нужно изменить форму тензора. Тензор имеет форму torch.Size([[30, 8, 9, 64]])
, где 30
— это batch_size
, 8
— это число головок внимания (это не имеет отношения к моему вопросу), 9
— это количество слов в предложении, а 64
— это некоторое промежуточное представление встраивания слова. Я должен изменить форму тензора до размера torch.size([30, 9, 512])
перед дальнейшей обработкой. Итак, я искал в Интернете некоторые ссылки, и они сделали следующее x.transpose(1, 2).contiguous().view(30, -1, 512)
, тогда как я думал, что это должно работать x.transpose(1, 2).reshape(30, -1, 512)
.
В первом случае grad_fn
равно <ViewBackward>
, тогда как в моем случае это <UnsafeViewBackward>
. Разве это не две одинаковые операции? Не приведет ли это к ошибке обучения?
grad_fn
. Посетите здесь для получения дополнительной информации. - person David Ng   schedule 27.04.2019