我正在尝试创建四个线程(每个线程都有自己的图形和模型),它们将同时运行并以相同的方式发出预测。
我的线程代码是这样的:
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/