Если вы напечатаете именованные параметры, вы увидите, к какому слою относится параметр.Печать именованных параметров:
for p in net.named_parameters():
print(p)
Создает следующий вывод:
('hidden.weight', Parameter containing:
tensor([[ 0.8324],
[ 0.2166],
[-0.9786],
[ 0.3977],
[ 0.9008],
[-0.3102],
[ 0.5052],
[ 0.6589],
[ 0.0828],
[ 0.6505]], requires_grad=True))
('hidden.bias', Parameter containing:
tensor([ 0.6715, 0.5503, -0.6043, 0.1102, -0.2700, 0.7203, -0.6524, -0.6332,
-0.2513, -0.1316], requires_grad=True))
('predict.weight', Parameter containing:
tensor([[ 0.1486, 0.1528, -0.0835, -0.3050, 0.1184, -0.0422, -0.2786, -0.2549,
-0.1532, -0.0255]], requires_grad=True))
('predict.bias', Parameter containing:
tensor([0.2878], requires_grad=True))
Как вы можете видеть, слои соединены по 10 весов каждый, как вы и ожидали, но есть одно смещениеза нейрон на правой стороне «соединения».Таким образом, у вас есть 10 параметров смещения между вашим входом и вашим скрытым слоем и только один для расчета вашего окончательного прогноза.
Вы рассчитываете вход для каждого нейрона в l-м слое, как эта взвешенная сумма:
Таким образом, вам нужен вес для каждого соединения между нейронами двух слоев, но только одно смещение на нейрон в l-м слое.
В вашем случае:
- вход для скрытого: 10 весов и 10 смещений, потому что ваш скрытый слой имеет 10 нейронов
- скрытых для вывода / прогнозирования: 10 весови 1 смещение, поскольку вы выводите одно значение
, суммирующее до 31 параметра.