我正在编写一个示例程序来学习4个节点上的分布式张量流。我的程序包括为一个简单的numpy数组赋值。然后我将它们转换为tensorflow数组来进行基本的算术加法运算。我将输出存储在另一个tensorflowarray中。最后将此数组转换为张量以在输出中打印它。
import tensorflow as tf
import numpy as np
import datetime
u1 = tf.TensorArray(dtype=tf.float64,size=101)
u2 = tf.TensorArray(dtype=tf.float64,size=101)
u3 = tf.TensorArray(dtype=tf.float64,size=101)
u4 = tf.TensorArray(dtype=tf.float64,size=101)
u5 = tf.Variable(np.zeros(101))
u = np.zeros(101)
a = tf.Variable(0, dtype=tf.float64)
L = 100.0
x = tf.constant(2, dtype=tf.float64)
t1 = datetime.datetime.now()
with tf.device("/job:local/task:3"):
for i in range(2):
for j in range(101):
# u[j] = (np.sin(2*np.pi*j/L))
u[j] = j
u1 = u1.write(j,u[j])
u2 = u2.write(j,u[j])
u3 = u3.write(j,u1.read(j)+u2.read(j))
u4 = u3.pack()
assign = tf.assign(u5, u3(100))
model = tf.initialize_all_variables()
with tf.Session("grpc://localhost:2222") as sess:
sess.run(model)
print sess.run(u4)
print sess.run(assign)
# print (u4.eval())
t2 = datetime.datetime.now()
print('\n')
print "Multi node computation time: " + str(t2-t1)
我想覆盖tensorarrays u1,u2,u3,u4。上述编写的程序给出以下错误: -
InvalidArgumentError (see above for traceback): TensorArray TensorArray_1_21: Could not write to TensorArray index 0 because it has already been read.
在第一个for循环之后,是否还要初始化使用过的tensorarrays?请帮忙。
答案 0 :(得分:2)
TensorArrays是"一次写入"数据结构:在它们被读取之后(例如用pack()),它们无法被写入。它们主要与tf.while_loop结合使用(请参阅TensorArray documentation)。
看起来TensorArrays并不适合这里。您可以使用Tensors的Python列表,这将避免TensorArray错误,尽管这会在循环多个值时导致大图。如果这成为一个问题,您可以将Python for循环切换到while_loop或其中一个higher-level looping constructs。它并不清楚你正在尝试做什么,但如果你想保存中间值,你可能会特别关注scan()。