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

2024-05-15 01:50:43 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

from keras.models import load_model

model_names = ['birds', 'cats', 'dogs', 'phones']
models = dict()

for name in model_names:
    path = 'models/{}.h5'.format(name)
    m = load_model(path)
    models[name] = m

加载的模型越多,加载时间似乎就越长。指示值为:

  • 加载birds.h5需要1分钟
  • 加载cats.h5需要5分钟
  • 加载dogs.h5需要7分钟
  • 加载phones.h5需要15分钟

所有型号都基于相同的结构,每个h5文件占用磁盘上82Mb的空间。我在一个装有一个GPU的AWSp2.xlarge实例上运行这个

问题:

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

Tags: namefrom模型modelnamesmodels时间load
1条回答
网友
1楼 · 发布于 2024-05-15 01:50:43

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

Join the 4 models into a single one.

怎么做?

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

现在:

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)

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

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

相关问题 更多 >

    热门问题