2016-11-08 9 views
0

現在の入力データに従ってグラフ構造を構築する必要があります。テンソルフローは列車ステップごとにグラフ構造を変更できますか?

つまり、列車のステップごとに異なるグラフ構造を使用する必要があるかもしれません。

しかし、テンソルフローはグラフを1回だけ作成し、最後まで使用します。

この問題の解決方法はありますか?このような

シンプルコード:

import tensorflow as tf 

data = [[1, 2, 3], 
     [3, 2, 1]] 
index = 0 


def feed_dict(): 
    return data[index] 

with tf.Session() as sess: 
    embedding = tf.constant([[1, 1, 1], 
          [2, 2, 2], 
          [3, 3, 3], 
          [4, 4, 4]]) 

    words = tf.placeholder(tf.int32, [3]) 
    sess.run(tf.initialize_all_variables()) 
    embed = tf.nn.embedding_lookup(embedding, words) 
    word_list = tf.unpack(embed) 
    result = None 
    if tf.less(tf.reduce_sum(word_list[0]), tf.reduce_sum(word_list[1])).eval(feed_dict={words: feed_dict()}): 
     result = word_list[0] * word_list[1] + word_list[2] 
    else: 
     result = word_list[0] + word_list[1] * word_list[2] 

    for i in xrange(2): 
     print sess.run(result, feed_dict={words: feed_dict()}) 
     index += 1 

私はそれを印刷することができます希望:

[10, 10, 10] 

[10, 10, 10] 

が、私が手に:

[10, 10, 10] 

[14, 14, 14] 

それはセカンドランが同じグラフを使用することを伝えます最初の人として。

ありがとうございました!私はすべての助けを感謝します。

+0

私は中国人学生で、これが私の最初の質問です。だから私は私の記述を明確かつ正しいものにしたいと思う。そうでない場合は、私に知らせてください。ありがとう! – haolang

+0

すべてのステップでグラフ構造を変更できます。パフォーマンスペナルティがあります。グラフのサイズに応じて、実行コールごとに20〜100msが追加されます。 –

+0

ありがとうございます!しかし、どうしたらいいですか?つまり、コードはどのように見えますか? – haolang

答えて

0

これは予想される結果です。

まず、あなたはtf.lessを評価し、そのresult常にresult = world_list[0] * word_list[1] + word_list[2]になります。

埋め込みはゼロベースであるため、最初のケースでは2 * 3 + 4 = 10、次に2番目の4 * 3 + 2 = 14が表示されます。

実行時にtf.lessを評価する場合は、tf.condを使用してください。

+0

あなたの答えをありがとう!それは動作するはずです!私はできるだけ早くこれを試してみます。 – haolang

+0

それは働いた!ありがとうございました ! – haolang

関連する問題