【问题标题】:Keras: Interpreting the output of get_weights()Keras:解释 get_weights() 的输出
【发布时间】:2018-03-30 17:39:01
【问题描述】:

在 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')

训练后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)]

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

【问题讨论】:

    标签: keras


    【解决方案1】:
    • 第一层的权重(2 个输入 x 5 个单位)
    • 第一层的偏差(5 个单位)
    • 第二层的权重(5 个输入 x 1 个单位)
    • 第二层的偏差(1 个单位)

    你也可以按层获取:

    for lay in model.layers:
        print(lay.name)
        print(lay.get_weights())
    

    【讨论】:

    • 这实际上让我意识到我误解了神经网络中权重的形状。我认为每个神经元有一个权重,但实际上每个神经元的权重数量取决于它与前一层的连接数。另一方面,每个神经元只有一个偏差。我需要再次研究神经网络的数学。谢谢!
    • 一开始这对我帮助很大:neuralnetworksanddeeplearning.com/chap1.html
    • 谢谢。确认一下,对于第一个数组(即 2x5),第一个值(0.7937)是连接第一个神经元的第一个输入节点的权重,而最后一个值(1.144)是连接的第二个输入节点的权重到第 5 个神经元。
    • 是的 :) 就是这样。
    • 所以每一层都存储了“过渡”的权重,对吗?从输入值到第一个隐藏层“过渡”,权重存储在第一个隐藏层中。依此类推,直到输出层存储从最后一个隐藏层到输出层的“过渡”权重。我的想法正确吗?
    猜你喜欢
    • 2018-11-04
    • 2019-11-26
    • 1970-01-01
    • 2019-02-02
    • 2021-12-18
    • 2021-12-30
    • 1970-01-01
    • 2020-10-24
    • 2018-10-27
    相关资源
    最近更新 更多