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

使用混合精度训练模型时遇ValueError:Target data is missing问题求助

问题分析与解决方案

核心原因

你遇到的ValueError: Target data is missing错误,本质是训练/验证数据集没有返回包含输入特征和目标标签的二元组。尽管Keras文档说明使用Dataset对象时可以省略y参数,但前提是Dataset必须以(input_tensor, label_tensor)的结构返回每一批数据。如果你的数据集只生成了输入图像,没有附带标签,Keras就无法找到计算sparse_categorical_crossentropy所需的目标数据。

排查与修复步骤

1. 验证数据集结构

先确认你的train_data是否包含标签:

# 取一批数据检查结构
for batch in train_data.take(1):
    print(f"批次元素数量: {len(batch)}")
    if len(batch) == 2:
        print("输入形状:", batch[0].shape)
        print("标签形状:", batch[1].shape)
    else:
        print("数据集未返回标签")

如果输出显示“数据集未返回标签”,说明问题出在数据集构建阶段。

2. 修正数据集构建代码

如果你是用tf.keras.utils.image_dataset_from_directory构建数据集,确保正确设置label_mode参数(对应sparse_categorical_crossentropy需要设为'int'):

train_data = tf.keras.utils.image_dataset_from_directory(
    directory=你的训练集路径,
    image_size=(224, 224),
    batch_size=32,  # 根据你的需求调整
    label_mode='int'  # 必须设置为'int',返回整数类型标签
)

test_data = tf.keras.utils.image_dataset_from_directory(
    directory=你的测试集路径,
    image_size=(224, 224),
    batch_size=32,
    label_mode='int'
)

如果是自定义数据集(比如继承tf.data.Dataset),确保返回的是(图像张量, 标签张量)的二元组,而非单独的图像张量。

3. 其他注意事项

  • 你的模型编译代码是正确的:sparse_categorical_crossentropy对应整数标签,和label_mode='int'的数据集匹配。
  • 混合精度配置:如果还没启用混合精度,需要在代码开头添加:
    import tensorflow as tf
    tf.keras.mixed_precision.set_global_policy('mixed_float16')
    
    你已经在输出层设置了dtype=tf.float32,这是正确的(避免softmax输出精度丢失)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 16:22:57