You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TensorFlow图像分类程序内存持续增长致崩溃问题求助

解决TensorFlow图片分类循环中的内存泄漏问题

嗨,我来帮你排查这个内存越用越多的问题!你遇到的核心原因是每次调用classify_pictures函数时,都在重复加载TensorFlow模型图、创建新的Session,这些底层资源没有被彻底释放——Python的垃圾回收器(gc.collect())管不到TensorFlow C++后端的内存,所以强制回收也没用。

问题出在这些重复操作上

看你的代码,每次处理单张图片时:

  • 重新读取并加载整个retrained_graph.pb模型
  • 创建新的tf.Session()会话
  • 甚至连标签文件retrained_labels.txt都要重新读一遍

这些操作每次都会在内存中新增一批TensorFlow图节点和会话资源,循环次数一多,内存自然就爆了。

修复方案:复用模型和会话,只初始化一次

把模型加载、会话创建这些耗时且占内存的操作,移到函数外面(比如类的初始化方法里),只做一次,然后在循环中复用这些资源。

修改后的代码示例:

def __init__(self):
    os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
    # 一次性加载标签文件,避免重复读取
    self.label_lines = [line.rstrip() for line in tf.gfile.GFile("tf_files/retrained_labels.txt")]
    
    # 一次性加载模型图
    with tf.gfile.FastGFile("tf_files/retrained_graph.pb", 'rb') as f:
        graph_def = tf.GraphDef()
        graph_def.ParseFromString(f.read())
        _ = tf.import_graph_def(graph_def, name='')
    
    # 创建唯一的Session并保存,后续所有预测都用它
    self.sess = tf.Session()
    self.softmax_tensor = self.sess.graph.get_tensor_by_name('final_result:0')

def classify_pictures(self, files):
    # 用with语句读取图片,确保文件句柄被正确关闭
    with tf.gfile.FastGFile(files, 'rb') as f:
        image_data = f.read()
    
    # 复用已有的Session和Tensor进行预测
    predictions = self.sess.run(self.softmax_tensor, {'DecodeJpeg/contents:0': image_data})
    
    top_k = predictions[0].argsort()[-len(predictions[0]):][::-1]
    human_string = self.label_lines[top_k[0]]
    
    if human_string == "selfie":
        return "selfie"
    if "passport" in human_string:
        return "passport"
    if "statement" in human_string:
        return "bill"

# 程序结束时记得关闭Session,释放资源
def close(self):
    self.sess.close()

额外的小优化

  • 你原来的循环for each_picture in range(0, 10)其实没起到作用,因为第一个判断就直接return了,我帮你去掉了冗余循环。
  • 用with语句处理图片文件,避免文件句柄泄漏(虽然这个不是内存暴涨的主因,但也是好习惯)。

这样修改后,每次循环处理图片时,只会加载当前图片的数据,复用已经初始化好的模型和会话,内存就会保持稳定了。

内容的提问来源于stack exchange,提问作者Christof Küppers

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:36:00