python-3.x - 如何减少内存使用?
问题描述
我正在尝试在我的数据集上生成预测的 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()
解决方案
首先,为什么要为每个预测重新加载模型?如果您只加载一次模型然后进行预测,代码会快得多。此外,如果您一次加载多张图片并批量预测,这也将大大提高速度。
你得到什么内存不足错误?一个来自 tensorflow(或您正在使用的后端)还是一个来自 python?我最好的猜测是 load_model 在同一个 tensorflow 会话中一遍又一遍地加载相同的模型,直到您的资源耗尽。如上所述,解决方案是在开始时只加载模型一次。
推荐阅读
- css - 如何抑制同一 CSS 类的段落之间的间距?
- python - Python Datareader 无法从晨星提取股票数据
- opencv - 使用opencv的ptr指针来操作像素
- node.js - Dynamodb TTL 24 小时
- c++ - 对 C++ 从函数返回引用的困惑
- android - Google Maps 如何获取当前的 CameraLocation 对象?
- excel - 比较两列日期并突出显示第一列是否较旧
- html - 如何区分
- r - Get help file description in R as an object
- regex - 以下标记模式匹配是什么:[A-Za-z0-9_]+(?=\\s+)