Django中的Keras顺序模型-是否保留会话?

时间:2019-03-19 16:48:27

标签: python django tensorflow keras

我不知道如何在作为服务器运行的Django应用程序中“保留”我的Keras模型的图形/会话。

我已经构建了Keras顺序模型DeepModel,它可以作为独立的Python模块正常工作。但是现在我想将其嵌入到Django应用程序中,在该应用程序中我为模型定义了以下处理程序:

# instantiated by Django app
class DeepModelManager:

def __init__(self, params):

    self.graph = tf.Graph()
    self.sess = tf.Session()
    K.set_session(self.sess)
    with self.sess.as_default():
        self.instance = DeepModel(params)
        self.model = self.instance.build()

        optimizer = Adam()
        loss = "categorical_crossentropy"
        metrics = ["accuracy"]
        self.model.compile(loss=loss, optimizer=optimizer, metrics=metrics)

def train(self):
    X = ...
    y = ...

    K.set_session(self.sess)
    with self.sess.as_default():
        H = self.model.fit(X, y, epochs=20)

该过程以下列方式工作:

  • 首先Django应用等待来自外部客户端的初始化请求,然后实例化DeepModelManager(作为views模块变量),该实例实例化/构建/编译Keras DeepModel
  • 然后Django应用等待火车请求,该请求应触发上述train函数,即模型拟合

但是只要运行train方法,我就会不断收到错误消息

ValueError: Tensor("training/Adam/Const:0", shape=(), dtype=float32) must be from the same graph as Tensor("sub:0", shape=(), dtype=float32).

我怀疑这是由于在模型初始化和训练之间以某种方式清除了TensorFlow会话(或图形)。这就是为什么我尝试使用tf.Session()tf.Graph()(在独立DeepModel版本中,我没有碰它)的原因,但是它没有帮助。

0 个答案:

没有答案