2016-11-08 85 views
0

我需要根據當前輸入數據構建我的圖結構。張量流程可以修改每個訓練步驟的圖形結構嗎?

這意味着我可能需要在每個列車步驟中使用不同的圖形結構。

但張量流只構造一次圖形,直到最後使用它。

那麼,是否有解決這個問題的方法?

簡單的代碼是這樣的:

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,並在第二4 * 3 + 2 = 14,如打印。

如果您的意思是在運行時評估tf.less,請使用tf.cond

+0

謝謝你的回答!它應該工作!我會盡快嘗試。 – haolang

+0

它的工作!謝謝 ! – haolang

相關問題