Keras:解释get_weights()的输出

Agr*_*ppa 8 keras

在Keras中运行神经网络时,我似乎找不到太多有关如何解释get_weights()输出的文档。据我了解,输出取决于网络的结构。因此,我在下面粘贴了网络结构的简化版本:

model.add(Dense(5, input_dim=2, activation = linear, use_bias=True, kernel_initializer=Orthogonal))
model.add(Dense(1, use_bias=True))
model.compile(loss='mae', optimizer='adam')
Run Code Online (Sandbox Code Playgroud)

训练后的get_weights()输出为:

     [array([[ 0.79376745,  0.79879117,  1.22406125,  1.07782006,  1.24107373],
           [ 0.88034034,  0.88281095,  1.13124955,  0.98677355,  1.14481246]], dtype=float32), 
      array([-0.09109745, -0.09036621,  0.0977743 , -0.07977977,  0.10829113], dtype=float32), 
      array([[-0.72631335],
           [-0.38004425],
           [ 0.62861812],
           [ 0.10909595],
           [ 0.30652359]], dtype=float32), 
      array([ 0.09278722], dtype=float32)]
Run Code Online (Sandbox Code Playgroud)

共有四个数组。每个代表什么?谢谢!

Dan*_*ler 6

  • 第一层的权重(2个输入x 5个单位)
  • 第一层的偏差(5个单位)
  • 第二层的权重(5个输入x 1个单位)
  • 第二层的偏移(1个单元)

您也总是可以逐层获取:

for lay in model.layers:
    print(lay.name)
    print(lay.get_weights())
Run Code Online (Sandbox Code Playgroud)

  • 这实际上使我意识到我误解了神经网络中权重的形状。我以为每个神经元有一个权重,但实际上每个神经元的权重数取决于它与上一层的连接数。另一方面,每个神经元只有一个偏差。我需要再次研究神经网络的数学。谢谢! (2认同)