首页 > 解决方案 > 如何减少内存使用?

问题描述

我正在尝试在我的数据集上生成预测的 pickle 文件。但是在执行代码 6 小时后,PC 一次又一次地内存不足。我想知道是否有人可以帮助我解决这个问题?

from keras.models import load_model
import sys
sys.setrecursionlimit(10000)

import pickle
import os
import cv2
import glob

dirlist = []

imgdirs = os.listdir('/chars/')
imgdirs.sort(key=float)
for imgdir in imgdirs:
    imglist = []
    for imgfile in glob.glob(os.path.join('/chars/', imgdir, '*.png')):
        img = cv2.imread(imgfile)
        img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        model = load_model('mymodel.h5')
        predictions=model.predict(img)
        print('predicted model:', predictions)
        imglist.append(predictions)

      dirlist.append(imglist)
q = open("predict.pkl","wb")
pickle.dump(dirlist,q)
q.close()

标签: python-3.xdeep-learningkeras

解决方案


首先,为什么要为每个预测重新加载模型?如果您只加载一次模型然后进行预测,代码会快得多。此外,如果您一次加载多张图片并批量预测,这也将大大提高速度。

你得到什么内存不足错误?一个来自 tensorflow(或您正在使用的后端)还是一个来自 python?我最好的猜测是 load_model 在同一个 tensorflow 会话中一遍又一遍地加载相同的模型,直到您的资源耗尽。如上所述,解决方案是在开始时只加载模型一次。


推荐阅读