2017-09-01 75 views
5

我想用model.fit()在一個python應用程序中並行訓練一些不同的模型。使用的模型沒有必要的共同點,它們在不同的時間在一個應用程序中啓動。張量多線程/ keras

首先,我在一個單獨的線程中,然後在主線程中啓動一個model.fit(),沒有問題。如果我現在要開始第二model.fit(),我得到了以下錯誤消息:

start_learn(self:) 
    tf_session = K.get_session() # this creates a new session since one doesn't exist already. 
    tf_graph = tf.get_default_graph() 

    keras_learn_thread.Learn(learning_data, model, self.env_cont, tf_session, tf_graph) 
    learning_results.start() 

Exception in thread Thread-1: 
tensorflow.python.framework.errors_impl.InvalidArgumentError: Node 'hidden_1/BiasAdd': Unknown input node 'hidden_1/MatMul' 

他們都充分利用的方法通過相同的代碼行啓動釷叫做類/方法是這樣的:

def run(self): 
    tf_session = self.tf_session # take that from __init__() 
    tf_graph = self.tf_graph # take that from __init__() 

    with tf_session.as_default(): 
     with tf_graph.as_default(): 
      self.learn(self.learning_data, self.model, self.env_cont) 
      # now my learn method where model.fit() is located is being started 

我想我無論如何都必須指定一個新tf_session併爲每個單個線程新tf_graph。但我不太確定。我會很高興每一個簡短的想法,因爲我現在坐在這上太久了。

感謝

回答

0

我不知道,如果你固定您的問題,但是這看起來像另一個問題I recently answered

  • 您需要在 開始之前完成主線程中的圖形創建。
  • 在keras的情況下,圖形在第一次調用擬合或預測函數時被初始化。你可以通過調用一些模型的內部函數強制圖表生成:

    model._make_predict_function() 
    model._make_test_function() 
    model._make_train_function() 
    

    如果還是不行,請嘗試調用虛擬數據熱身模型。

  • 完成圖形創建後,請在您的主圖上調用finalize(),以便它可以安全地與不同線程共享(這將使其成爲只讀)。

  • 完成圖形還可以幫助您找到無意修改圖形的其他位置。

希望能幫到你。

相關問題