You need to enable JavaScript to run this app. Keras多输入自定义数据生成器训练时卡在首个Epoch无输出问题求助
优惠活动
大模型
产品
解决方案
定价
更多

Keras多输入自定义数据生成器训练时卡在首个Epoch无输出问题求助

问题排查与修复方案

1. 优先排查fit方法的多进程参数配置

  • 如果你的model.fit()中开启了use_multiprocessing=True或者workers>1,直接将这两个参数改为use_multiprocessing=False、workers=1验证是否恢复正常:

    ImageDataGenerator本身不是进程安全的,你封装的自定义生成器在多进程环境下调用next(df_gen)时,全量数据集场景下大概率出现迭代器资源竞争导致死锁,小数据集因为迭代周期短、冲突概率低所以能正常运行。

  • 如果必须使用多进程加速,不要复用全局的df_gen实例,改为在每个worker初始化时独立创建flow_from_dataframe实例,或者直接改用tf.data.Dataset接口构建数据流。

2. 修复生成器的迭代逻辑缺陷

  • 你当前用while True + next(df_gen)的写法,旧版本Keras的flow_from_dataframe迭代器迭代完一个epoch所有样本后不会自动重置,会触发静默的迭代终止异常,外层while True捕获不到就会卡住,可修改生成器逻辑自动重置迭代器:
    while True:
        try:
            data_batch = next(df_gen)
        except StopIteration:
            df_gen.reset()
            data_batch = next(df_gen)
        # 后续原有处理逻辑不变
    

3. 校验全量数据集的关联数值列合法性

  • 检查全量train_df的number_col列是否存在缺失值、非数值类型值、超出模型输入接收范围的异常值:
    你用随机数时所有值都在1-219范围内,真实数据如果存在异常值(比如0、负数、超过嵌入层输入维度的数值),会触发模型前向传播时的静默错误(Sagemaker环境默认可能关闭了异常抛出),导致流程卡住。
  • 确认原始number_col的数值全部在int32合法范围内,不存在浮点精度溢出导致的异常数值。

4. 临时定位方案

  • 先把flow_from_dataframe的shuffle参数改为True,同时将steps_per_epoch改为固定小数值比如10,验证跑10步是否正常,逐步放大步数定位触发卡死的临界数据批次,检查对应批次的number_col数值是否存在异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 03:06:03