小编Ale*_*tic的帖子

经过重新训练的keras模型评估在循环中调用时会泄漏内存

在我的应用程序中,我将重新使用在ImageNet上训练的现有MobileNet,并仅使用5个类来重新训练flowers数据集上的输出层。重新训练的模型将保存到磁盘。此后,在几次迭代中加载模型并执行评估,最终导致内存耗尽,整个应用程序崩溃。在进行了一些诊断之后,我意识到泄漏是来自model.evaluate()keras方法的。可以在独立的示例代码中重现该问题:

import os
import resource
import keras
import numpy as np

if __name__ == '__main__':
    init_alloc = resource.getrusage(resource.RUSAGE_SELF).ru_maxrss

    for it in range(4):
        x_valid = np.random.uniform(0, 1, (64, 224, 224, 3)).astype(np.float32)
        y_valid = keras.utils.to_categorical(np.random.uniform(0, 5, (64, )).astype(np.int32), 5)

        start_alloc = resource.getrusage(resource.RUSAGE_SELF).ru_maxrss

        model =  keras.models.load_model(os.path.abspath(os.path.join('.', 'mobilenet_flowers.h5')),
                                         custom_objects={'relu6': keras.applications.mobilenet.relu6,
                                                         'DepthwiseConv2D': keras.applications.mobilenet.DepthwiseConv2D})

        loss, _ = model.evaluate(x_valid, y_valid, batch_size=64, verbose=False)

        keras.backend.clear_session()
        del model

        end_alloc = resource.getrusage(resource.RUSAGE_SELF).ru_maxrss

        print('Iteration %d:' % it)
        print('  Memory alloc before evaluate() is %7d kilobytes'   % start_alloc)
        print('  Memory alloc after  evaluate() …
Run Code Online (Sandbox Code Playgroud)

keras

5
推荐指数
0
解决办法
306
查看次数

标签 统计

keras ×1