Python Keras中的加载模型所需时间呈指数增长

Python Keras中的加载模型所需时间呈指数增长,python,tensorflow,keras,Python,Tensorflow,Keras,我有一系列以hdf5格式保存的Keras模型(包括结构和重量)。这些模型基于预先训练的数据集,并通过自定义数据集进行了进一步的微调 对于生产使用,我需要同时将所有这些模型加载到内存中 从keras.models导入负载模型 型号名称=[‘鸟’、‘猫’、‘狗’、‘电话’] 模型=dict() 对于模型_名称中的名称: 路径='models/{}.h5'。格式(名称) m=负载_模型(路径) 型号[名称]=m 加载的模型越多,加载时间似乎就越长。指示值为: 装载鸟类需要1分钟。h5 加载Cat.

我有一系列以hdf5格式保存的Keras模型(包括结构和重量)。这些模型基于预先训练的数据集,并通过自定义数据集进行了进一步的微调

对于生产使用,我需要同时将所有这些模型加载到内存中

从keras.models导入负载模型
型号名称=[‘鸟’、‘猫’、‘狗’、‘电话’]
模型=dict()
对于模型_名称中的名称:
路径='models/{}.h5'。格式(名称)
m=负载_模型(路径)
型号[名称]=m
加载的模型越多,加载时间似乎就越长。指示值为:

  • 装载
    鸟类需要1分钟。h5
  • 加载Cat.h5需要5分钟
  • 加载
    狗需要7分钟。h5
  • 加载
    手机需要15分钟。h5
所有型号都基于相同的结构,每个h5文件占用磁盘上82Mb的空间。我在一个AWS
p2.xlarge
实例上运行它,该实例配备了一个GPU

问题:

  • 为什么加载时间会随着已加载模型的数量而增长
  • 这是正常的还是我做错了什么
  • 如何提高总体加载时间

    • 这不是一个经过验证的答案,我在这里根据上面的评论详细说明,供您测试

      将4个模型合并为一个模型

      怎么做?

      加载它们并一直等待(这仍然不是生产)

      现在:

      保存此
      common_model
      ,查看在新会话中加载所需的时间


      您可以使用
      common\u model.layers[i]
      从中检索每个模型。请参见摘要中的哪个
      i
      是哪个层。如果使用名称定义子模型,则更容易:
      common\u model.get\u layer(model\u name)

      您可以尝试一种时髦的方法,即:用一个输入将四个模型连接到一个模型中(用输入调用每个模型,并从这个输入创建一个模型到每个输出)。保存此模型并查看其加载是否正常。您可以稍后从中检索每个模型。@DanielMöller听起来很有趣,但我不确定我是否完全遵循了。你能再详细一点吗?好的,现在它非常有意义。我要试试这个。
      common_input = Input(compatible_shape)  #assuming all models have similar inputs
      
      outputs = []
      for name in models:
          outputs.append(models[name](common_input))
      
      common_model = Model(common_input, outputs)