首页 > 解决方案 > Keras:加载多个模型并在不同线程中进行预测

问题描述

我正在使用带有 tensorflow 核心的 Keras。我想在构造函数中加载 2 个不同的模型,然后在不同的线程中进行预测(根据请求)。我试图在 tensorflow 图形上下文中加载这些模型,但没有奏效。我的代码:

from keras.models import load_model
from keras import Sequential

def __init__(self):
    self.graph_A = tf.Graph()
    with self.graph_A.as_default():
        self.model_A: Sequential = load_model('model_A_filename')

    self.graph_B = tf.Graph()
    with self.graph_B.as_default():
        self.model_B: Sequential = load_model('model_B_filename')


def predict_with_model_A(X):
    with self.graph_A.as_default():
        return self.model_A.predict(X)


def predict_with_model_B(X):
    with self.graph_B.as_default():
        return self.model_B.predict(X)

当我运行程序时,模型 A 已成功加载。但是我在加载模型 B 时收到错误消息:

TypeError: Cannot interpret feed_dict key as Tensor: Tensor     
Tensor("Placeholder:0", shape=(7626, 210), dtype=float32) is not an element 
of this graph.

会很高兴听到,如何正确地做。谢谢!

标签: pythontensorflowkeras

解决方案


每次处理后尝试重置图表。对于 keras,使用 K.clear_session()。为每个图表使用单独的会话。

class Model:
   @staticmethod
   def loadmodel(path):
        return loadmodel(path)

def ___init__(self, path):
   self.model = self.loadmodel(path)
   self.graph = tf.get_default_graph()

def predict(self, X):
    with self.graph.as_default():
        return self.model.predict(X)

model1 = Model('model1.h5')
model1.predict(test_data)

model2 = Model('model2.h5')
model2.predict(test_data)

推荐阅读