PyTorch - форма nn.Линейных весов - PullRequest
0 голосов
/ 25 ноября 2018

Вчера я столкнулся с этим вопросом и впервые заметил, что веса линейного слоя nn.Linear необходимо переставить перед применением matmul.

Код для наложения весов:

output = input.matmul(weight.t())


В чем причина этого?

Почему веса не находятся в транспонированной форме с самого начала, поэтому их не нужно переносить каждый раз перед нанесением слоя?

1 Ответ

0 голосов
/ 25 ноября 2018

Я нашел ответ здесь: Эффективный прямой проход в nn.Linear # 2159

Кажется, что за этим нет никаких реальных рассуждений.Однако операция транспонирования, похоже, не замедляет вычисления.

В соответствии с вышеупомянутой проблемой, во время пересылки , операция транспонирования является (почти) бесплатной с точки зрения вычислений.В то время как во время обратного прохода пропуск операции транспонирования фактически сделает вычисления менее эффективными с текущей реализацией.

Последний пост в этом выпуске довольно хорошо подводит итог:

Это историческое распределение веса, изменение которого обратно несовместимо.Если нет какой-либо БОЛЬШОЙ выгоды с точки зрения скорости или удобства, мы не будем нарушать пользовательское пространство.

https://github.com/pytorch/pytorch/issues/2159#issuecomment-390068272

...