2016-10-31 13 views
1

私は4つのノードで分散テンソルを学習するサンプルプログラムを書いています。私のプログラムは単純な数値配列に値を代入することから成っています。次に、それらをテンソルフロー配列に変換して、基本的な算術加算演算を行います。出力を別のテンソルフローアレイに保存します。最後に、この配列をテンソルに変換して出力に出力します。Tensorarrayの初期化

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) 

テンソルアレイ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ループの後に使用されたテンソルアレイを初期化する方法はありますか?助けてください。

答えて

2

TensorArraysは「write-once」データ構造です:(pack()などで)読み込まれた後、書き込みはできません。主にtf.while_loop(TensorArray documentationを参照)と組み合わせて使用​​します。

TensorArraysはここにはあまり適していないようです。 TensorArrayのエラーを回避するPythonのTensorsのリストを使用できますが、多くの値をループすると大きなグラフになります。それが問題になった場合は、ループをwhile_loopまたはhigher-level looping constructsのいずれかに切り替えることができます。あなたがしようとしていることははっきりしませんが、特に中間値を保存したい場合はscan()を見てください。