【发布时间】:2017-10-11 10:26:41
【问题描述】:
我已经在 Tensowrflow 图中实现了一些张量初始化作为分配网络。同时,这些赋值应该以正确的顺序调用,因为它们使用了另一个的结果。如果我将分配节点暴露给外部,用户(我自己也是)应该使用会话调用来运行它们
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 还是incorrect_init。为什么?如何强制下单?
【问题讨论】:
标签: python tensorflow variable-assignment