2016-02-28 57 views
1

在PTB RNN模型,創建三個PTBModel對象,即男,MVALID和MTEST:PTB RNN模型一個PTBModel對象,而不是三個

with tf.Graph().as_default(), tf.Session() as session: 
initializer = tf.random_uniform_initializer(-config.init_scale, 
              config.init_scale) 
with tf.variable_scope("model", reuse=None, initializer=initializer): 
    **m** = PTBModel(is_training=True, config=config) 
with tf.variable_scope("model", reuse=True, initializer=initializer): 
    **mvalid** = PTBModel(is_training=False, config=config) 
    **mtest** = PTBModel(is_training=False, config=eval_config) 

我的問題是:

  • 做所有這三個對象都住在同一個圖中? (看起來他們都生活在默認圖表下。)

  • 這三個對象是否共享相同的佔位符,例如_input_data?或者是每個PTBModel對象都創建了不同的佔位符集合,例如在同一個圖表中有三個_input_data佔位符(一個用於提供訓練數據的_input_data,另一個用於驗證,另一個用於測試)?

  • 假設我只創建一個PTBModel對象,是否有可能重用用於訓練的_input_data佔位符並更改其形狀並將其用於測試(第1維,num_steps在測試時設置爲1時間)?

謝謝!

回答

0

是的,這三個對象生活在同一個圖中。

佔位符不同,如果要評估圖形的特定部分,則需要使用正確的佔位符。

這在理論上是可行的,但它不是微不足道的。例如。您可以展開20步的訓練圖,但只使用一部分步驟進行評估。另一種可能性可能是使用dynamic_rnn功能。

一般來說,構建圖的幾個副本並不是很昂貴,可能不值得花費大量時間來優化分配節點的數量。

+0

感謝您的明確答案,幫助了很多。但是,我仍然不明白爲什麼你不能在_input_data佔位符中使用None作爲num_steps,如果None可以用於同一佔位符中的batch_size?我可以看到這在微型批次培訓中會出現問題,其中小批次中的序列可能有不同的長度;如果我們假設最小批量爲1,則會爲每個輸入工作提供不同的num_step值? – nddk

+0

batch_size和num_steps之間的區別在於num_steps的不同值會導致在圖中執行不同數量的節點。 更改批量大小不會使圖形除操作的形狀以外任何不同。這就是爲什麼如果我們想要支持多個值,將None設置爲有意義的原因。如果您更改步數,則執行圖非常不同。即你運行不同數量的LSTM步驟。 –

相關問題