gpt4 book ai didi

tensorflow - Keras 权重和 get_weights() 显示不同的值

转载 作者:行者123 更新时间:2023-12-02 00:42:05 27 4
gpt4 key购买 nike

我将 Keras 与 Tensorflow 结合使用。 Keras 层有一个方法“get_weights()”和一个属性“weights”。我的理解是“权重”输出权重的 Tensorflow 张量,“get_weights()”评估权重张量并将值输出为 numpy 数组。然而,两者实际上向我展示了不同的值(value)观。这是要复制的代码。

from keras.applications.vgg19 import VGG19
import tensorflow as tf

vgg19 = VGG19(weights='imagenet', include_top=False)

vgg19.get_layer('block5_conv1').get_weights()[0][0,0,0,0]
#result is 0.0028906602, this is actually the pretrained weight

sess = tf.Session()

sess.run(tf.global_variables_initializer())
#I have to run the initializer here. Otherwise, the next line will give me an error
sess.run(vgg19.get_layer('block5_conv1').weights[0][0,0,0,0])
#The result here is -0.017039195 for me. It seems to be a random number each time.

我的 Keras 版本是 2.0.6。我的 Tensorflow 是 1.3.0。谢谢!

最佳答案

方法 get_weights() 实际上只是评估属性 weights 给定的 Tensorflow 张量的值。我在 get_weights()sess.run(weight) 之间得到不同值的原因是我指的是两个不同 session 中的变量。当我运行 vgg19 = VGG19(weights='imagenet', include_top=False) 时,Keras 已经创建了一个 Tensorflow session 并在该 session 中使用预训练值初始化了权重。然后,我通过运行 sess = tf.Session() 创建了另一个名为 sess 的 Tensorflow session 。在此 session 中,权重尚未初始化。然后当我运行 sess.run(tf.global_variables_initializer()) 时,随机数被分配给这个 session 中的权重。所以关键是要确保您在使用 Tensorflow 和 Keras 时使用的是同一个 session 。以下代码显示 get_weights()sess.run(weight) 给出相同的值。

import tensorflow as tf
from keras import backend as K
from keras.applications.vgg19 import VGG19

sess = tf.Session()
K.set_session(sess)

vgg19 = VGG19(weights='imagenet', include_top=False)

vgg19.get_layer('block5_conv1').get_weights()[0][0,0,0,0]
#result is 0.0028906602, this is actually the pretrained weight

sess.run(vgg19.get_layer('block5_conv1').weights[0][0,0,0,0])
#The result here is also 0.0028906602

关于tensorflow - Keras 权重和 get_weights() 显示不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46063592/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com