Keras layer.weights 和 layer.get_weights() 给出不同的值
Posted
技术标签:
【中文标题】Keras layer.weights 和 layer.get_weights() 给出不同的值【英文标题】:Keras layer.weights and layer.get_weights() give different values 【发布时间】: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() 方法的输出不同。
你知道哪种方法是正确的,第二种方法到底是做什么的吗?
【问题讨论】:
【参考方案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 给了我相同的可重现的重量结果,这就是为什么我认为它不可能是随机的。非常感谢!以上是关于Keras layer.weights 和 layer.get_weights() 给出不同的值的主要内容,如果未能解决你的问题,请参考以下文章