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

TensorFlow2.6+Keras设置25轮训练仅跑5轮问题排查

TensorFlow 2.6 训练未跑满设定Epoch的排查与修复

训练未按设定跑完25轮的问题按以下优先级排查修复:

  • 优先排查硬编码steps参数与数据集规模不匹配问题
    这是2.6版本下最高发的诱因:你当前使用tf.keras.utils.image_dataset_from_directory生成的是tf.data.Dataset对象,这类数据集默认迭代完所有批次就会终止,不会自动循环。你代码里硬编码了steps_per_epoch=25、validation_steps=25,如果拆分后的训练集/验证集实际总批次数小于你硬编码的数值,框架会在数据集耗尽后直接结束训练,不会继续跑满设定的25轮。
    另外你的代码里定义了ImageDataGenerator但完全没有调用,当前训练根本没用到这个生成器,不要混淆旧版flow_from_directory的迭代逻辑和新版image_dataset_from_directory的逻辑。

    额外注意:你代码中定义的train_datagen、test_datagen没有被实际调用,当前读取的图片像素值没有做1/255归一化,就算训练流程修复,模型收敛效果也会受影响,可以给数据集加map操作完成归一化:

    def rescale(image, label):
        return image/255.0, label
    train_generator = train_generator.map(rescale)
    validation_generator = validation_generator.map(rescale)
    
    修复方式:直接删除model.fit中的steps_per_epoch和validation_steps参数,让框架自动根据数据集总样本量、batch_size计算每轮步数即可,修改后的fit代码如下:
    history = model.fit(
        train_generator,
        epochs = 25,
        validation_data = validation_generator,
        verbose = 1
    )
    
    如果必须手动指定步数,先通过以下代码获取数据集实际批次数,设定值不要超过这个结果:
    import tensorflow as tf
    train_batch_count = tf.data.experimental.cardinality(train_generator).numpy()
    val_batch_count = tf.data.experimental.cardinality(validation_generator).numpy()
    
    问题复现时的运行参考:
    运行截图
  • 排查被日志隐藏的运行时报错
    你当前配置了日志屏蔽规则,把TensorFlow低级别日志全部过滤了,训练到第5轮时如果触发OOM内存溢出、损坏图片读取失败、数据格式异常的问题,可能因为提示信息级别不够被隐藏,看起来像是“无理由停止”。临时注释掉日志配置再复现一次,就能看到完整报错信息:
    # 临时注释以下代码,复现问题查看完整输出
    # import logging
    # logging.getLogger("tensorflow").setLevel(logging.ERROR)
    
  • 排查隐式早停回调
    你贴出的代码里没有添加EarlyStopping早停回调,但要排查是否有其他导入的依赖、全局配置默认注入了回调规则,可以在调用fit前执行print(model.callbacks),打印所有绑定到模型的回调,确认没有意外的早停规则触发训练终止。
  • 校验框架版本安装正确性
    你贴出的安装命令在包名和版本号之间加了多余空格,可能导致安装到不兼容的混合版本。执行以下命令重新安装干净的2.6版本:
    pip uninstall -y tensorflow keras
    pip install tensorflow==2.6.0 keras==2.6.0
    
    安装完成后执行以下代码校验版本,确保两个框架版本都是2.6.0:
    import tensorflow as tf
    import keras
    print(tf.__version__, keras.__version__)
    
  • 排查数据集文件完整性
    如果训练到第5轮时刚好读取到损坏、格式不支持的图片文件,也会导致训练终止,可以遍历全量数据集文件排查坏图,尤其是第5轮对应批次的图片文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 00:06:32