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

TensorFlow训练图像分类器报train_function空日志ValueError错误

报错根因

该报错不是Keras框架bug,由代码中三处配置问题共同导致:

  • 核心配置冲突:模型输出层使用activation='softmax',输出的是经归一化的概率值,但编译模型时给CategoricalCrossentropy传入了from_logits=True,该参数会告知框架模型输出为未经过激活的原始logits值,两者逻辑冲突会导致计算图执行异常,返回空训练日志。
  • 生成器参数缺失:调用flow_from_directory构造数据集时,未显式指定batch_size与class_mode,默认生成的数据批次大小、标签格式与后续训练逻辑不匹配,可能导致训练步骤取数为空。
  • 基础参数错误:像素归一化系数写为rescale=1./225,正确值应为除以255,该问题不会直接触发当前报错,但会严重影响模型收敛效果。
修复方案

按以下步骤修改代码即可解决问题:

  1. 解决损失函数与输出层的配置冲突,二选一即可:
    • 保留输出层softmax激活:将损失函数修改为tf.keras.losses.CategoricalCrossentropy(from_logits=False)
    • 保留from_logits=True配置:删除最后一层Dense的softmax激活,直接输出原始logits(该方式数值稳定性更优),对应代码修改为tf.keras.layers.Dense(num_classes)
  2. 补全图像数据生成器的缺失参数,保证与训练逻辑对齐:
# 注意BATCH_SIZE=32的定义要移到生成器初始化之前
BATCH_SIZE = 32

train_generator = datagen.flow_from_directory(
    TRAINING_DATA,
    shuffle=True,
    target_size=IMAGE_SHAPE,
    batch_size=BATCH_SIZE,
    class_mode='categorical'
)

valid_generator = datagen.flow_from_directory(
    VALID_DATA,
    shuffle=False,
    target_size=IMAGE_SHAPE,
    batch_size=BATCH_SIZE,
    class_mode='categorical'
)
  1. 修正归一化参数:将ImageDataGenerator中的rescale=1./225修改为rescale=1./255,将像素值从0-255区间正确缩放至0-1区间。
  2. (可选)若修改后仍需定位细粒度执行错误,可在模型编译时传入run_eagerly=True,即可看到具体报错的代码行,而非笼统的空日志提示。
额外注意事项
  • 最新版TensorFlow中tf.keras.optimizers.Adam的学习率参数名已从lr改为learning_rate,建议同步修改为learning_rate=0.0001,避免产生废弃参数警告。
  • 若数据集路径配置错误、目录下图片未被正确读取,或单类图片量过少导致train_generator.samples // BATCH_SIZE计算出的steps_per_epoch为0,也会触发同类空日志报错,出现该情况时优先检查数据集路径有效性、调整批次大小即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 19:09:24