2017-09-01 24 views
5

मैं एक अजगर आवेदन में साथ model.fit() समानांतर कुछ विभिन्न मॉडलों को प्रशिक्षित करना चाहते हैं। प्रयुक्त मॉडल में कुछ सामान्य नहीं होता है, वे अलग-अलग समय में एक आवेदन में शुरू होते हैं।बहु सूत्रण/keras

सबसे पहले मैं एक अलग धागा तो मुख्य थ्रेड में कोई समस्या नहीं के साथ एक 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' 

वे दोनों कोड का एक ही लाइनों द्वारा एक विधि से शुरू हो रही है कर रहे हैं: अब मैं) एक दूसरे model.fit (शुरू करने के लिए चाहते हैं, तो मैं निम्न त्रुटि संदेश मिलता है गु बुलाया वर्ग/विधि इस प्रकार है:

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() पर कॉल करें ताकि इसे सुरक्षित रूप से अलग-अलग धागे के साथ साझा किया जा सके (जो इसे केवल पढ़ने के लिए)।

  • ग्राफ अंतिम रूप दिया जा भी आप अन्य स्थानों पर जहां अपने ग्राफ unintentionaly संशोधित किया जा रहा है खोजने में मदद मिलेगी।

आशा है कि आपकी मदद करता है।

संबंधित मुद्दे