python - 在多线程上进行预测时出现 Keras 错误

标签 python multithreading tensorflow keras

我正在尝试创建四个线程(每个线程都有自己的图形和模型),它们将同时运行并以相同的方式发出预测。

我的线程代码是这样的:

        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 后端及其默认图形和 session 。

有什么办法可以解决这个问题吗?

最佳答案

我已经知道我做错了什么了。 我的想法是正确的,但我不应该重新创建下面的图表和 session 。 代码的底部应该只是:

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

关于python - 在多线程上进行预测时出现 Keras 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50099745/

相关文章:

python - 程序如何覆盖先前的输出行?

python - 只能在ROS包源码文件夹中运行OpenCV,不能直接在ROS包中运行

使用线程的 Pythonic 方式

tensorflow - TensorFlow 中的双向 LSTM 单元

python - python类的奇怪行为

python - 如何为 pandas 直方图设置 x 和 y 轴标签?

c++ - Intel x86 上的 C++ 原子是否需要内存屏障?

android - 如何将两种不同的数据类型传递给 AsyncTask,Android

python - 加载 keras 模型时出现 ValueError : ('Unrecognized keyword arguments:' , dict_keys( ['ragged' ]))

machine-learning - 如何加载检查点文件并使用略有不同的图形结构继续训练