Нанесение nn.Larine слоя в pytorch на дополнительные размеры - PullRequest
0 голосов
/ 30 января 2019

Каким образом полностью связанный слой (nn.Linear) в pytorch наносится на «дополнительные измерения»?Документация гласит, что она может применяться для подключения тензора (N,*,in_features) к (N,*,out_features), где N в количестве примеров в пакете, поэтому это не имеет значения, и *эти "дополнительные" размеры.Означает ли это, что один слой обучается с использованием всех возможных срезов в дополнительных измерениях или отдельные слои обучаются для каждого среза или что-то еще отличное?

1 Ответ

0 голосов
/ 30 января 2019

Параметры in_features * out_features изучены в linear.weight и out_features параметры изучены в linear.bias.Вы можете думать, что nn.Linear работает как

  1. , изменяя тензор до некоторого (N', in_features), где N' - это произведение N и все измерения, описанные с помощью *: input_2d = input.reshape(-1, in_features)
  2. Применение стандартного умножения матрицы на матрицу output_2d = linear.weight @ input_2d.
  3. Добавление смещения output_2d += linear.bias.reshape(1, in_features) (обратите внимание, что мы транслируем его по всем N' измерениям)
  4. Изменение формы выводаиметь те же размеры, что и input, кроме последнего: output = output_2d.reshape(*input.shape[:-1], out_features)
  5. return output

Таким образом, ведущий размер N рассматривается так же, как* размеры.Документация делает N явным, чтобы вы знали, что ввод должен быть по крайней мере 2d, но может быть настолько многомерным, насколько вы пожелаете.

...