0

我正在运行一项服务,我使用 Keras 在有状态 LSTM 上运行推理。但是我想知道这里的线程语义是什么。我不是在问如何在每个烧瓶会话中存储模型,我对运行有状态模型时 Keras 引擎盖下发生的事情更感兴趣,例如每个线程创建一个新模型过度杀伤?Keras 是否自动处理每个线程的状态?

这个问题与所述的副本不同,因为副本明确处理每个烧瓶会话存储对象。这个问题涉及 Keras 如何处理线程之间的状态模型。

我的推理代码是这样的:

加载:

MODEL = model_from_json(
    open(f"{ROOT_DIR}/../../bias-model/bias-model.json", "r").read()
)
MODEL.load_weights(f"{ROOT_DIR}/../../bias-model/bias-model.h5")

推理:

for i in range(batch_input.shape[0]):
    prediction = MODEL.predict_on_batch(batch_input[i])[-1][0]
MODEL.reset_states()

因为我重置了模型上的状态,这是否意味着我应该为每个线程创建一个新模型,或者当我对全局创建的偏差模型运行预测时执行锁定,或者我可能缺少一些其他机制?

我应该补充一点,我在 Keras 2.4.3 上运行 TF 2.3.1。通常,当我研究解决方案时,它们与这些版本不兼容。

4

0 回答 0