Этого следовало ожидать.Во-первых, форвард также намного медленнее: с вашим циклом for
Python отправляет в PyTorch batch_size
раз следующие запросы:
- выборка
i
-го элемента x
- добавить 1
- обновить
i
-й элемент x
с увеличенным значением
Python работает медленно.Во второй версии Python отправляет единственное сообщение «добавь 1 везде» в PyTorch.PyTorch намного быстрее, чем Python (не говоря уже об ускорении GPU, на которое он способен).Это благодаря технике, называемой векторизация , и не относится только к PyTorch, но, по существу, ко всем математическим пакетам Python (и многим другим).
Во-вторых, для вашего обратного PyTorch необходимо отслеживатьиз всех операций, которые произошли с x
и обратно через них.В первом случае их batch_size
, во втором - только один.Опять же, векторизация побеждает.