例如,我假设我有类似的东西:
run1 = tf.assign(y,x)
run2 = tf.assign(z,y)
sess.run(run2, feed_dict={x:a}
此调用是先运行run1,然后是run2,还是我需要先显式调用run1?
我在处理其他代码时遇到麻烦。这个错误有关系吗?
FailedPreconditionError:尝试使用未初始化的值 Variable_11 [[node Variable_11 / read(在 :20)]]
答案 0 :(得分:1)
首先,您应该运行下面的代码以消除错误。
sess.run(tf.global_variables_initializer())
之后,您应该分别调用run1和run2来将a分配给z。但是,如果要使用run2为z分配a,则应按以下方式定义run2:
run2 = tf.assign(z, run1)
使用此代码,当您尝试调用run2时,run1将运行,并且run1的结果将分配给z。
答案 1 :(得分:1)
要回答标题(并非总是如此),例如一个真实的例子:
import tensorflow as tf
x = tf.placeholder(dtype=tf.float32, name="input_vector1")
y = tf.placeholder(dtype=tf.float32, name="input_vector2")
mul1 = tf.multiply(x, y)
mul2 = tf.multiply(mul1, x)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
print(sess.run(mul2, feed_dict={x: 2, y: 3}))
运算符都已连接,x和y是sess.run中提供的输入,我请求mul2,因此必须首先计算mul1,它将在同一sess.run中自动发生。
不是这种情况的示例:
import tensorflow as tf
x = tf.placeholder(dtype=tf.float32, name="input_vector1")
y = tf.placeholder(dtype=tf.float32, name="input_vector2")
mul1 = tf.multiply(x, y)
mul2 = tf.multiply(y, x)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
print(sess.run(mul2, feed_dict={x: 2, y: 3}))
要计算mul2,不需要mul1,因此不会干扰tensorflow。 要查看连接了哪些运营商,您可以执行以下操作:
import tensorflow as tf
x = tf.placeholder(dtype=tf.float32, name="input_vector1")
y = tf.placeholder(dtype=tf.float32, name="input_vector2")
mul1 = tf.multiply(x, y)
mul2 = tf.multiply(mul1, x)
with tf.Session() as sess:
tf.summary.FileWriter("path/to/empty/folder", sess.graph)
此脚本会将日志文件记录到一个文件夹中,然后可以使用
读取该日志文件。
tensorboard --logdir=path/to/empty/folder
有关张量板的更多信息,请参阅the official guide
您遇到的错误是因为您没有运行sess.run(tf.global_variables_initializer())
,这会初始化所有变量