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

运行食品数据集构建代码时笔记本电脑偶尔死机是什么原因

问题原因
  • 核心是内存溢出:你当前的实现会将所有图片读取后转成Python原生列表全量存入内存,Python列表的内存占用远高于NumPy数组,单张224*224分辨率的RGB图转成列表后内存占用可达1MB以上,若数据集规模过万,整体内存占用轻松超过10GB,普通笔记本内存不足时就会触发系统无响应、死机。
  • 归一化代码进一步放大内存压力:你给出的归一化代码语法不完整,若实际运行时用列表推导式全量计算train_x_float = [pixel/255.0 for pixel in train_x],会额外生成一份和train_x等大的浮点列表,瞬间翻倍内存占用,更容易触发故障。
  • 叠加诱因:如果你的图片分辨率更高、数据集规模更大,或者笔记本本身可用内存小于8G,同时没有开启足够大的交换分区/虚拟内存,会大幅提升死机概率。
解决方案
  • 优先改用批次加载方案
    模型训练不需要把所有数据一次性存入内存,每次只加载当前训练需要的少量数据即可,同时直接用NumPy数组存储图片数据、不要转成Python列表,内存占用可降到原有的1/4左右,示例实现如下:
import glob
import matplotlib.image as mpimg
import numpy as np

# 仅读取所有文件路径,路径数据内存占用可忽略
egg_files = glob.glob("/home/moumenshobaky/tensorflow_files/virtualenv/archive/training/Egg/*")
meat_files = glob.glob("/home/moumenshobaky/tensorflow_files/virtualenv/archive/training/Meat/*")
all_image_files = egg_files + meat_files

def batch_generator(file_list, batch_size=16):
    # 按批次生成训练数据
    for idx in range(0, len(file_list), batch_size):
        batch_files = file_list[idx: idx + batch_size]
        batch_data = []
        for f in batch_files:
            img = mpimg.imread(f)
            # 归一化直接在批次内完成,不需要存储全量归一化结果
            batch_data.append(img / 255.0)
        yield np.array(batch_data)

# 训练时按批次读取数据即可
for train_batch in batch_generator(all_image_files, batch_size=16):
    # 此处填写你的模型训练逻辑,例如:
    # model.train_on_batch(train_batch, train_label_batch)
    pass
  • 优化持久化存储格式
    如果确实需要全量处理数据集,不要用Python列表存储图片,可将数据转成NumPy的.npy格式或HDF5格式存储,内存和磁盘占用都远低于原生列表。
  • 临时缓解方案
    若暂时不想修改代码,可给Linux系统扩容交换分区,或给Windows系统扩容虚拟内存,可避免直接死机,但会大幅拖慢运行速度,仅作为临时方案使用。

内容的提问来源于stack exchange,提问作者moumenShobakey

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 01:27:03