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

TensorFlow执行model.fit报train_function空日志错误排查

问题场景
  • 任务:基于TensorFlow Keras搭建U-Net模型实现语义分割
  • 数据管线:通过ImageDataGenerator分别构建训练集、验证集的图像-掩码配对数据生成器,模型定义、编译环节运行无异常
  • 训练配置:
    • 训练集样本量:130组图像-掩码对
    • 验证集样本量:33组图像-掩码对
    • 模型输入尺寸:224×224
    • batch_size:8
    • 损失函数:BinaryFocalLoss(gamma=2)
    • 评估指标:自定义dice_metric
  • 触发时机:调用model.fit()启动训练时抛出如下错误

Unexpected result of train_function(Empty logs). Please useModel.compile(..., run_eagerly=True), or tf.config.run_functions_eagerly(True)for more information of where went wrong, or file a issue/bug totf.keras.

核心触发原因

这个报错本质是TensorFlow图执行模式下,训练步执行完没有返回合法的损失、指标日志值,常见诱因有三类:

  • 数据生成器输出不符合要求
    双生成器配对逻辑错误、输出张量维度和模型输出/损失函数要求不匹配(比如二分类场景掩码维度不对、数值范围越界、图像掩码没有正确配对、生成器返回多余的标签张量),都会导致前向传播无法计算出合法损失值,最终返回空日志。
  • 自定义损失/指标函数存在运算bug
    自定义的Focal Loss、dice指标如果存在维度不匹配、除零、返回值不是标量的问题,在图模式下不会直接抛出具体运算错误,只会在训练步结束时返回空结果触发该报错。
  • 训练步数配置错误
    手动传入的steps_per_epoch/validation_steps计算值为0,或者生成器迭代到指定步数前就耗尽数据终止,也会触发空日志报错。
修复方案

按排查优先级依次操作即可:

  1. 开启eager模式定位具体错误
    直接在模型编译时传入run_eagerly=True参数,或者在代码初始化阶段执行tf.config.run_functions_eagerly(True),关闭图执行优化后重新运行训练代码,此时控制台会直接抛出具体的错误位置(比如哪一步张量维度不匹配、哪里出现除零、生成器返回值格式不对),无需盲目排查。
  2. 校验数据生成器输出
    从训练生成器中拉取一个batch的图像、掩码张量做校验:
    • 图像张量shape应为(8, 224, 224, 3),掩码张量shape必须和模型最后一层输出shape完全一致:二分类单通道输出场景下,掩码shape应为(8, 224, 224, 1),数值范围落在0~1区间
    • 抽样核对图像和掩码的配对关系,确认没有出现文件错配、掩码全0/全1的异常
    • 如果用flow_from_directory构建生成器,需将图像、掩码生成器的class_mode参数设为None,避免生成器额外返回分类标签张量,导致输入模型的参数数量不匹配
  3. 校验自定义损失与指标逻辑
    用刚才拉取的单batch数据做本地测试:将图像传入模型做一次前向推理得到预测结果,分别把预测值、真实掩码传入BinaryFocalLoss和dice_metric,确认返回值是合法的标量数值,不存在nan、inf或者维度不匹配的报错;dice计算时要在分母添加1e-7级别的平滑项,避免出现预测值、真实值全0时的除零错误。
  4. 校验训练步数配置
    若手动指定训练步数,需确认计算逻辑正确:本次配置下steps_per_epoch应为130 // 8 = 16,validation_steps应为33 // 8 = 4,不能出现0值;如果不手动指定步数,需确认生成器可以循环迭代,不会在训练过程中提前终止。

内容的提问来源于stack exchange,提问作者ECE182 Sourjya Mukherjee

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 12:57:14