Ошибка Keras при прогнозировании многопоточности - PullRequest
0 голосов
/ 30 апреля 2018

Я пытаюсь создать четыре потока (каждый с собственным графиком и моделью), которые будут работать одновременно и выдавать прогнозы одинаковым образом.

Мой код темы выглядит примерно так:

        thread_locker.acquire()
        thread_graph = Graph()
        with thread_graph.as_default():
            thread_session = Session()
            with thread_session.as_default():
                #Model Training
                if (once_flag_raised == False):
                    try:
                        model = load_model('ten_step_forward_'+ timeframe +'.h5')
                    except OSError:
                        input_layer = Input(shape=(X_train.shape[1], 17,))

                        lstm = Bidirectional(
                            LSTM(250),
                            merge_mode='concat')(input_layer)

                        pred = Dense(10)(lstm)
                        model = Model(inputs=input_layer, outputs=pred)
                        model.compile(optimizer='adam', loss='mean_squared_error')
                    once_flag_raised = True

                model.fit(X_train, y_train, epochs=10, batch_size=128)
                thread_locker.acquire()
                nn_info_dict['model'] = model
                nn_info_dict['sc'] = sc
                model.save('ten_step_forward_'+ timeframe +'.h5')
                thread_locker.release()
        thread_locker.release()

        (....)
            thread_locker.acquire()
            thread_graph = Graph()
            with thread_graph.as_default():
                thread_session = Session()
                with thread_session.as_default():
                    pred_data= model.predict(X_pred)
            thread_locker.release()

в каждой теме.

Я продолжаю получать следующую ошибку (потоки - 1 раз), когда читаю предсказывающую часть кода:

ValueError: Tensor Tensor("dense_1/BiasAdd:0", shape=(?, 10), dtype=float32) is not an element of this graph.

Насколько я понимаю, один из потоков "требует" бэкэнда Tensorflow и его графика и сеанса по умолчанию.

Есть ли способ обойти это?

1 Ответ

0 голосов
/ 01 мая 2018

Я понял, что я делаю неправильно. Мое мышление было правильным, но я не должен был воссоздавать график и сессию ниже. Нижняя часть кода должна быть просто:

    thread_locker.acquire()
    with thread_graph.as_default():
        with thread_session.as_default():
            pred_data= model.predict(X_pred)
    thread_locker.release()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...