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