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

模型训练出现val_loss=0、准确率1.0的异常问题求助

训练图像分类模型出现异常:验证集loss为0、准确率100%,但测试时全预测错误标签

各位好,我最近在训练一个4分类(F15、F16、Bird、Airplane)的图像分类模型,碰到了完全不符合预期的诡异问题,想请大家帮忙排查下:

问题现象

  1. 训练过程中,命令行输出的val_loss一直是0.0000e+00,accuracy固定为1.0000——这显然不对,我的数据集不可能完美到没有任何误差
  2. 用训练好的模型做测试时,所有样本的预测结果100%指向同一个错误标签,另外3个标签的预测概率全是0%

我初步怀疑是数据集解析的环节出了问题,但不确定这是不是根本原因。下面把相关的信息都贴出来,麻烦各位帮忙看看:


数据集详情

  • 所有图片存在image目录下,下面分4个子文件夹,每个文件夹对应一个分类标签:F15、F16、Bird、Airplane
  • 每个子文件夹里大概有400张图片

训练代码

# 我的训练核心代码如下
import tensorflow as tf
from tensorflow.keras import layers, models

# 加载训练和验证集
train_dataset = tf.keras.utils.image_dataset_from_directory(
    "./image/train",
    image_size=(224, 224),
    batch_size=32,
    label_mode="int"
)
val_dataset = tf.keras.utils.image_dataset_from_directory(
    "./image/val",
    image_size=(224, 224),
    batch_size=32,
    label_mode="int"
)

# 数据预处理
normalization_layer = layers.Rescaling(1./255)
train_dataset = train_dataset.map(lambda x, y: (normalization_layer(x), y))
val_dataset = val_dataset.map(lambda x, y: (normalization_layer(x), y))

# 构建CNN模型
model = models.Sequential([
    layers.Conv2D(32, (3, 3), activation='relu', input_shape=(224, 224, 3)),
    layers.MaxPooling2D((2, 2)),
    layers.Conv2D(64, (3, 3), activation='relu'),
    layers.MaxPooling2D((2, 2)),
    layers.Flatten(),
    layers.Dense(128, activation='relu'),
    layers.Dense(4, activation='softmax')
])

# 编译与训练
model.compile(optimizer='adam',
              loss=tf.keras.losses.SparseCategoricalCrossentropy(),
              metrics=['accuracy'])

history = model.fit(
    train_dataset,
    validation_data=val_dataset,
    epochs=15
)

测试代码

# 测试模型的代码
import tensorflow as tf
import numpy as np

# 加载训练好的模型
model = tf.keras.models.load_model("./my_classifier.h5")

# 加载测试集
test_dataset = tf.keras.utils.image_dataset_from_directory(
    "./image/test",
    image_size=(224, 224),
    batch_size=1,
    label_mode="int"
)

# 遍历测试样本并输出结果
for img, true_label in test_dataset:
    pred_probs = model.predict(img, verbose=0)
    pred_label = np.argmax(pred_probs, axis=1)[0]
    print(f"真实标签: {true_label.numpy()[0]}, 预测标签: {pred_label}, 概率分布: {pred_probs[0]}")

训练命令

python train_model.py

目前我试过检查数据集的文件结构,看起来是每个标签对应一个文件夹,没有明显错误,但实在找不到问题出在哪。麻烦各位帮忙分析下可能的原因,谢谢!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 18:57:45