gpt4 book ai didi

python - 如何正确地为 TensorFlow 中的变量赋值?

转载 作者:行者123 更新时间:2023-12-01 02:35:06 24 4
gpt4 key购买 nike

我创建了一个用 TensorFlow 编写的逻辑分类模型。现在我需要手动设置模型参数的值并生成一些预测。这就是我所做的:

# instantiate the model
lr = logreg(inp_dim = 4, out_dim = 3)

# generate model parameters
w = np.array([
[ 1.0, 2.0, 3.0],
[ 4.0, 5.0, 6.0],
[ 7.0, 8.0, 9.0],
[10.0, 11.0, 12.0]
])
b = np.array([13.0, 14.0, 15.0])

# assign the values to the model
lr.w = tf.assign(lr.w, w)
lr.b = tf.assign(lr.b, b)

显然,这还不够。该模型仍然使用旧参数(模型实例化时随机生成的参数)。因此,我需要执行以下附加步骤:

init = tf.global_variables_initializer()
s = tf.Session()
s.run(init)

我认为在那一步之后模型应该使用参数的新值(因为我已经初始化了所有全局变量)。然而,事实并非如此。仅当我执行以下附加命令时,模型才开始看到参数的新值:

s.run(lr.w)
s.run(lr.b)

所以,事实上我已经成功实现了我想要的目标,但是,首先,我不清楚正在发生的事情,其次,我不确定这是设置值的正确方法模型参数。

有人可以解释一下 TensorFlow 中模型变量设置值背后的逻辑吗?

添加:

执行分配后,我需要执行运行。只有这样变量才会得到它的值。例如:

w = tf.assign(w, 3.0)
sess.run(w)

但是,如果我想要一个变量获取实例化时给出的值,为什么相同的逻辑不适用。例如,如果我执行

w = tf.Variable(3.0, tf.float32)

该变量将无法获取其值。我认为要解决这个问题,我会采取与之前相同的技巧(sess.run(w))。但事实并非如此,我需要执行以下魔法命令:

init = tf.global_variables_initializer()
sess.run(init)

最佳答案

这是因为当您运行 s.run(init) 时,您只运行图形及其父级中的初始化操作,而绝对不运行其他操作。事实上,lr.w 不是 init 操作的父级,因此 TensorFlow 不会运行它,因此您必须像以前一样手动运行它。

编辑:我的意思是TensorFlow graph它保存您定义的所有变量和操作(在您的情况下是 logreg 方法中的一个 + 您添加的 2 个赋值)。

init = tf.global_variables_initializer() 操作仅初始化变量,不运行任何其他操作(特别是您稍后定义的赋值操作)。

关于python - 如何正确地为 TensorFlow 中的变量赋值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46346565/

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