gpt4 book ai didi

python - 如何控制Tensorflow中的分配顺序?

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

我已经在 Tensowrflow 图中实现了一些张量初始化作为 assigmnet。同时,这些作业应该以正确的顺序调用,因为其中一个作业使用另一个作业的结果。如果我将分配节点暴露给外部,用户(也是我自己)应该通过 session 调用来运行它们

sess.run([assign1, assign2, ...])

顺序正确,可能会出错。我可以将分配序列加入到单个操作中并仅公开它的运行吗?

更新

我写了这段代码,发现它打印了眼睛?为什么?它应该打印 b 的随机初始化,不是吗?

import tensorflow as tf

tf.reset_default_graph()

a = tf.eye(2, 2)
b = tf.get_variable("b", shape=(2,2))
c = tf.get_variable("c", shape=(2,2))

assign_c = tf.assign(c, b)
assign_b = tf.assign(b, a)

with tf.Session() as sess:

sess.run(tf.global_variables_initializer())

sess.run([assign_c, assign_b])

print(c.eval())

更新2

下面的代码显示我无法使用 group 控制分配者顺序:

import tensorflow as tf

tf.reset_default_graph()

a = tf.eye(2, 2)
b = tf.get_variable("b", shape=(2,2), initializer=tf.zeros_initializer)
c = tf.get_variable("c", shape=(2,2))

assign_c = tf.assign(c, b)
assign_b = tf.assign(b, a)

incorrect_init = tf.group(assign_b, assign_c)
correct_init = tf.group(assign_c, assign_b)

with tf.Session() as sess:

sess.run(tf.global_variables_initializer())

sess.run([incorrect_init])
#sess.run([correct_init])

print(c.eval())

结果总是

[[ 1.  0.]
[ 0. 1.]]

无论我调用 Correct_init 还是 in Correct_init 。为什么?如何强制下单?

最佳答案

单个 sess.run 调用中的变量顺序没有任何意义。

sess.run([assign1, assign2, ...])

它相当于

sess.run([..., assign2, assign1, ...])

真正重要的是您正在执行的节点之间的关系。

在您的示例中,c.eval() 的输出是 eye,因为:

  1. sess.run([assign_c, allocate_b]) 调用 assign_cassign_b
  2. assign_b 取决于 a
  3. assign_c 取决于 b
  4. 因此 c 依赖于 b,而 b 又依赖于 a

因此: -> 首先解析 a

关于python - 如何控制Tensorflow中的分配顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46685861/

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