2017-05-08 7 views
2

私はTensorArrayとWHILE_LOOPの組み合わせのために非常に簡単な例を生成しようとしています:TensorArrayとwhile_loopはテンソルフローでどのように連携しますか?

# 1000 sequence in the length of 100 
matrix = tf.placeholder(tf.int32, shape=(100, 1000), name="input_matrix") 
matrix_rows = tf.shape(matrix)[0] 
ta = tf.TensorArray(tf.float32, size=matrix_rows) 
ta = ta.unstack(matrix) 

init_state = (0, ta) 
condition = lambda i, _: i < n 
body = lambda i, ta: (i + 1, ta.write(i,ta.read(i)*2)) 

# run the graph 
with tf.Session() as sess: 
    (n, ta_final) = sess.run(tf.while_loop(condition, body, init_state),feed_dict={matrix: tf.ones(tf.float32, shape=(100,1000))}) 
    print (ta_final.stack()) 

をしかし、私は次のエラーを取得しています:

ValueError: Tensor("while/LoopCond:0", shape=(), dtype=bool) must be from the same graph as Tensor("Merge:0", shape=(), dtype=float32). 

誰もが問題が何であるかという考えに持っていますか?

+0

:ここ

は、実施例です'session.run(TensorArray)'。 – sirfz

+0

申し訳ありませんが、私はあなたが意味するものを得ていませんでした。あなたは正しい書式を書いてくださいますか? –

答えて

3

コードにはいくつかの点が指摘されています。まず、TensorArrayをループ内で使用するために行列を展開する必要はありません。Tensorの本文を安全に参照し、matrix[i]という表記法を使用して索引付けすることができます。もう1つの問題は、行列の数値に2を掛けて、結果を配列に書き込むコードに基づいて、行列(tf.int32)とTensorArraytf.float32)の異なるデータ型です。最後に、ループの最終結果を読みたい場合は、TensorArray.stack()となります。session.run呼び出しで実行する必要があります。あなたは `代わりにあなたがすることはできませんので、失敗した直接ループを実行しているの` session.run(ta.stack())に必要TensorArray` `決勝を取得するには

import numpy as np 
import tensorflow as tf  

# 1000 sequence in the length of 100 
matrix = tf.placeholder(tf.int32, shape=(100, 1000), name="input_matrix") 
matrix_rows = tf.shape(matrix)[0] 
ta = tf.TensorArray(dtype=tf.int32, size=matrix_rows) 

init_state = (0, ta) 
condition = lambda i, _: i < matrix_rows 
body = lambda i, ta: (i + 1, ta.write(i, matrix[i] * 2)) 
n, ta_final = tf.while_loop(condition, body, init_state) 
# get the final result 
ta_final_result = ta_final.stack() 

# run the graph 
with tf.Session() as sess: 
    # print the output of ta_final_result 
    print sess.run(ta_final_result, feed_dict={matrix: np.ones(shape=(100,1000), dtype=np.int32)}) 
+0

素晴らしい!どうもありがとうございました!それは今働く。 –

+0

@ E.Asgariがうまくいってくれてうれしく思っています。 – sirfz

+0

これは、私が計算グラフの中でこれを使っていたかのように、フィード辞書を使わずに入力を指定することはできますか?どのようにテンソル配列がいくつかのテンソルに依存することを指定するには? – Rahul

関連する問題