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() 给出不同的值的主要内容,如果未能解决你的问题,请参考以下文章

Google Colab 中的 Keras 调谐器和 TPU

重置 Keras 模型的所有权重

Keras序列模型学习

Keras官方中文文档:融合层Merge

莫凡PYthon之keras 1

Tensorflow+keras用代码给神经网络结构绘图