【问题标题】:Keras layer.weights and layer.get_weights() give different valuesKeras layer.weights 和 layer.get_weights() 给出不同的值
【发布时间】:2019-01-01 02:35:29
【问题描述】:

我的 Keras 模型有密集层,我需要访问权重和偏差值。我可以使用 get_weights() 方法访问它们。它为我返回权重和偏差的预期大小矩阵(权重为 57X50)。

model.layers[0].get_weights()[0]

但是,以下代码 sn-p 为我提供了具有不同值的相同大小的矩阵。

import tensorflow as tf
init_op = tf.global_variables_initializer()
with tf.Session() as sess:
    sess.run(init_op)
    print(sess.run(model.layers[0].weights[0]))

在第二种方法中,所有模型的偏差值都返回为零,并且权重与 get_weights() 方法的输出不同。

你知道哪种方法是正确的,第二种方法到底是做什么的吗?

【问题讨论】:

    标签: tensorflow keras


    【解决方案1】:

    使用init_op,您可以初始化所有可训练变量,这意味着偏差为零,模型其他权重的随机值。试试:

    import keras.backend as K
    with K.get_session() as sess:
        print(sess.run(model.layers[0].weights[0]))
    

    【讨论】:

    • 太好了,您的代码块与 get_weights() 给出了相同的结果。重新运行我的第二个代码 sn-p 给了我相同的可重现的重量结果,这就是为什么我认为它不可能是随机的。非常感谢!
    猜你喜欢
    • 2018-07-11
    • 1970-01-01
    • 2016-11-14
    • 2010-10-22
    • 1970-01-01
    • 2019-05-17
    • 1970-01-01
    • 2023-01-20
    • 2021-07-16
    相关资源
    最近更新 更多