Объясните разницу между "view" и "reshape" в PyTorch?
Этот вопрос проверяет различия между функциями view и reshape в PyTorch.
Короткий ответ
view изменяет форму тензора, не создавая нового объекта, но требует, чтобы тензор был "контегентным". В случае reshape, тензор может не быть контегентным, и он возвращает новый тензор с нужной формой, возможно с копированием данных.
Длинный ответ
view:
- Работает с оригинальным тензором, изменяя его форму без создания нового тензора. Он требует, чтобы тензор был контегентным (имеет непрерывную память).
- Если тензор не является контегентным, нужно использовать метод contiguous() перед применением view.
- Пример:
tensor = tensor.view(-1, 10)
reshape:
- Создаёт новый тензор с нужной формой, возможно копируя данные, и не требует, чтобы тензор был контегентным.
- Может использоваться с тензорами, не являющимися контегентными.
- Пример:
tensor = tensor.reshape(-1, 10)
view быстрее, но требует контегентности, в то время как reshape более гибкий и может работать с не контегентными тензорами.