2017-09-01 41 views
5

Tôi muốn đào tạo một số mô hình khác nhau với model.fit() song song trong một ứng dụng python. Các mô hình được sử dụng không có một điểm chung nào đó, chúng được bắt đầu trong một ứng dụng tại các thời điểm khác nhau.Đa luồng trong tensorflow/keras

Trước tiên, tôi bắt đầu một mô hình.() Không có vấn đề gì trong một chuỗi riêng biệt, sau đó là chuỗi chính. Nếu bây giờ tôi muốn bắt đầu một model.fit thứ hai(), tôi nhận được thông báo lỗi sau:

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

Họ đều bắt đầu từ một phương pháp mà theo các dòng cùng một đoạn mã:

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() 

Th được gọi là lớp/phương pháp trông giống như sau:

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 

Tôi nghĩ bằng cách nào đó tôi phải gán một tf_session mới và một tf_graph mới cho mỗi chuỗi đơn. Nhưng tôi không hoàn toàn chắc chắn về điều đó. Tôi sẽ vui mừng về mọi ý tưởng ngắn, vì tôi đang ngồi đây quá lâu rồi.

Cảm ơn

Trả lời

0

Tôi không biết nếu bạn cố định vấn đề của bạn, nhưng điều này có vẻ như một câu hỏi I recently answered.

  • Bạn cần hoàn tất quá trình tạo biểu đồ trong chuỗi chính trước khi bắt đầu các mục khác.
  • Trong trường hợp của keras, đồ thị được khởi tạo lần đầu tiên chức năng phù hợp hoặc dự đoán được gọi. Bạn có thể buộc tạo đồ thị bằng cách gọi một số chức năng bên trong của mô hình:

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

    Nếu điều đó không hiệu quả, hãy thử khởi động mô hình bằng cách gọi dữ liệu giả.

  • Khi bạn hoàn thành việc tạo biểu đồ, hãy gọi finalize() trên biểu đồ chính để có thể chia sẻ nó một cách an toàn với các chuỗi khác nhau (sẽ làm cho chỉ đọc).

  • Hoàn thiện biểu đồ cũng sẽ giúp bạn tìm các địa điểm khác mà biểu đồ của bạn đang được sửa đổi không chủ định.

Hy vọng sẽ giúp bạn.