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

基于Keras Sequence实现DataGenerator遇FileNotFoundError求助

解决多进程下DataGenerator的FileNotFoundError问题

你遇到的核心问题是多进程训练时,子进程无法正确解析图片路径——哪怕你在主进程里确认路径没问题,子进程的工作目录可能和主进程不一致,导致imread找不到目标文件。下面是具体的修复方案:

核心修改:将路径转为绝对路径

在DataGenerator的初始化阶段,就把所有相对路径转换成绝对路径。这样不管子进程的工作目录是什么,都能精准定位到文件。

修改后的代码如下(需要新增os模块导入):

import tensorflow.keras as keras
from skimage.io import imread
from skimage.transform import resize
import numpy as np
import math
import os  # 新增导入os模块
from tensorflow.keras.utils import Sequence

class DataGenerator(Sequence):
    def __init__(self, x_set, y_set, batch_size):
        # 将所有图片路径转为绝对路径
        self.x = [os.path.abspath(file_path) for file_path in x_set]
        self.y = y_set
        self.batch_size = batch_size

    def __len__(self):
        return math.ceil(len(self.x) / self.batch_size)

    def __getitem__(self, idx):
        batch_x = self.x[idx * self.batch_size:(idx + 1) * self.batch_size]
        batch_y = self.y[idx * self.batch_size:(idx + 1) * self.batch_size]
        return np.array([ resize(imread(file_name), (224, 224)) for file_name in batch_x]), np.array(batch_y)

额外排查建议

为了提前发现路径问题,避免训练到一半才报错,可以在初始化时加个路径存在性检查:

def __init__(self, x_set, y_set, batch_size):
    self.x = []
    for file_path in x_set:
        abs_path = os.path.abspath(file_path)
        if not os.path.exists(abs_path):
            print(f"⚠️ 警告:找不到文件 {abs_path}")
        self.x.append(abs_path)
    self.y = y_set
    self.batch_size = batch_size

小优化:替换弃用的fit_generator

另外提一句,TensorFlow 2.0+中fit_generator已经被弃用了,你可以直接用model.fit()传入generator,用法完全一致:

model.fit(generator=training_generator,
          validation_data=validation_generator,
          steps_per_epoch = num_train_samples // 32,
          validation_steps = num_val_samples // 32,
          epochs = 10,
          use_multiprocessing=True,
          workers=2)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 09:12:56