В чем разница между двумя операциями обратного распространения с pytorch? - PullRequest
0 голосов
/ 09 декабря 2018

У меня есть тензор x и x.shape=(batch_size,10)

Я хочу добавить один элемент ко всем элементам и выполнить две разные операции

  1. x=x+1
  2. for i in range(0,batch_size): x[i]=x[i]+1

Я получил одинаковые тензоры с двумя операциями, но когда я вызываю loss.backward(), (2) занимает намного больше времени, чем (1) при обратном распространении.

В чем разница между ними ???

1 Ответ

0 голосов
/ 09 декабря 2018

Этого следовало ожидать.Во-первых, форвард также намного медленнее: с вашим циклом for Python отправляет в PyTorch batch_size раз следующие запросы:

  1. выборка i-го элемента x
  2. добавить 1
  3. обновить i-й элемент x с увеличенным значением

Python работает медленно.Во второй версии Python отправляет единственное сообщение «добавь 1 везде» в PyTorch.PyTorch намного быстрее, чем Python (не говоря уже об ускорении GPU, на которое он способен).Это благодаря технике, называемой векторизация , и не относится только к PyTorch, но, по существу, ко всем математическим пакетам Python (и многим другим).

Во-вторых, для вашего обратного PyTorch необходимо отслеживатьиз всех операций, которые произошли с x и обратно через них.В первом случае их batch_size, во втором - только один.Опять же, векторизация побеждает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...