Tensorarray初始化

时间:2016-10-31 09:30:09

标签: python arrays numpy tensorflow

我正在编写一个示例程序来学习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?请帮忙。

1 个答案:

答案 0 :(得分:2)

TensorArrays是"一次写入"数据结构:在它们被读取之后(例如用pack()),它们无法被写入。它们主要与tf.while_loop结合使用(请参阅TensorArray documentation)。

看起来TensorArrays并不适合这里。您可以使用Tensors的Python列表,这将避免TensorArray错误,尽管这会在循环多个值时导致大图。如果这成为一个问题,您可以将Python for循环切换到while_loop或其中一个higher-level looping constructs。它并不清楚你正在尝试做什么,但如果你想保存中间值,你可能会特别关注scan()。