2016-11-28 16 views
12

Tôi đang sử dụng Python và Keras (hiện đang sử dụng chương trình phụ trợ của Theano, nhưng tôi không có vấn đề gì khi chuyển đổi). Tôi có một mạng nơ-ron mà tôi tải và xử lý nhiều nguồn thông tin song song. Hiện tại, tôi đã chạy từng cái một trong một quy trình riêng biệt và nó tải bản sao mạng riêng của nó từ tệp. Điều này có vẻ như một sự lãng phí RAM, vì vậy tôi đã nghĩ rằng nó sẽ hiệu quả hơn để có một quá trình đa luồng đơn với một ví dụ của mạng được sử dụng bởi tất cả các chủ đề. Tuy nhiên, tôi tự hỏi nếu Keras là thread an toàn với một trong hai phụ trợ. Nếu tôi chạy .predict(x) trên hai đầu vào khác nhau cùng một lúc trong các chủ đề khác nhau, liệu tôi có gặp phải các tình trạng chủng tộc hay các vấn đề khác không?Chủ đề Keras có an toàn không?

Cảm ơn

Trả lời

6

Có, Keras là an toàn, nếu bạn chú ý một chút đến nó.

Thực tế, trong học tập tăng cường có một thuật toán gọi là Asynchronous Advantage Actor Critics (A3C) trong đó mỗi tác nhân dựa vào cùng một mạng nơ-ron để cho họ biết họ nên làm gì trong một trạng thái nhất định. Nói cách khác, mỗi thread gọi model.predict đồng thời như trong vấn đề của bạn. Một ví dụ thực hiện với Keras của nó là here.

Bạn nên, tuy nhiên, trả thêm ý đến dòng này nếu bạn nhìn vào mã: model._make_predict_function() # have to initialize before threading

này không bao giờ được đề cập trong các tài liệu Keras, nhưng cần thiết của mình để làm cho nó hoạt động đồng thời. Tóm lại, _make_predict_function là một hàm biên dịch hàm predict. Trong cài đặt đa luồng, bạn phải tự gọi hàm này để biên dịch trước predict, nếu không, hàm predict sẽ không được biên dịch cho đến khi bạn chạy nó lần đầu tiên, điều này sẽ có vấn đề khi nhiều luồng gọi nó cùng một lúc. Bạn có thể xem giải thích chi tiết here.

Tôi chưa gặp bất kỳ sự cố nào khác với đa luồng trong Keras cho đến bây giờ.

Các vấn đề liên quan