【问题标题】:How can I get biases from a trained model in Keras?如何从 Keras 训练的模型中获取偏差?
【发布时间】:2017-06-22 12:46:15
【问题描述】:

我已经建立了一个简单的神经网络,

model = Sequential()
model.add(Dense(20, input_dim=5, activation='sigmoid'))
model.add(Dense(1, activation='sigmoid'))

我会得到它的权重:

summary = model.summary()
W_Input_Hidden = model.layers[0].get_weights()[0]
W_Output_Hidden = model.layers[1].get_weights()[0]

print(summary)
print('INPUT-HIDDEN LAYER WEIGHTS:')
print(W_Input_Hidden)
print('HIDDEN-OUTPUT LAYER WEIGHTS:')
print(W_Output_Hidden)

但是,通过这种方式,我只能得到没有偏差的权重矩阵 (5x20 , 1x20)。如何获得偏差值?

【问题讨论】:

标签: machine-learning keras


【解决方案1】:

很简单,它只是 get_weights() 返回的数组中的第二个元素(对于密集层):

B_Input_Hidden = model.layers[0].get_weights()[1]
B_Output_Hidden = model.layers[1].get_weights()[1]

【讨论】:

    【解决方案2】:

    这是一个完整的工作示例(使用 TensorFlow 2 和 Keras 实现)。

    import tensorflow as tf
    import numpy as np
    
    
    def get_model():
        inp = tf.keras.layers.Input(shape=(1,))
        # Use the parameter bias_initializer='random_uniform'
        # in case you want the initial biases different than zero.
        x = tf.keras.layers.Dense(8)(inp)
        out = tf.keras.layers.Dense(1)(x)
        model = tf.keras.models.Model(inputs=inp, outputs=out)
        return model
    
    
    def main():
        model = get_model()
        model.compile(loss="mse")
    
        weights = model.layers[1].get_weights()[0]
        biases = model.layers[1].get_weights()[1]
    
        print("initial weights =", weights)
        print("initial biases =", biases)
    
        X = np.random.randint(-10, 11, size=(1000, 1))
        y = np.random.randint(0, 2, size=(1000, 1))
    
        model.fit(X, y)
    
        weights = model.layers[1].get_weights()[0]
        biases = model.layers[1].get_weights()[1]
    
        print("learned weights =", weights)
    
        # Biases are similar because they are all initialized with zeros (by default).
        print("learned biases =", biases)
    
    
    if __name__ == '__main__':
        main()
    

    【讨论】:

      【解决方案3】:

      您可以使用以下代码查看和输出偏差和权重:

      for layer in model.layers:
          g=layer.get_config()
          h=layer.get_weights()
          print (g)
          print (h)
      

      如果您要从验证数据集中寻找权重和偏差,您需要对数据集中的每个向量执行model.predict

         for i in range(len(valData)):
              ValResults = model.predict(valData[i])
              B_Input_Hidden = model.layers[0].get_weights()[1]
              B_Output_Hidden = model.layers[1].get_weights()[1]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-05-28
        • 2020-04-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-16
        • 1970-01-01
        • 2019-11-28
        相关资源
        最近更新 更多