模型训练出现val_loss=0、准确率1.0的异常问题求助
训练图像分类模型出现异常:验证集loss为0、准确率100%,但测试时全预测错误标签
各位好,我最近在训练一个4分类(F15、F16、Bird、Airplane)的图像分类模型,碰到了完全不符合预期的诡异问题,想请大家帮忙排查下:
问题现象
- 训练过程中,命令行输出的
val_loss一直是0.0000e+00,accuracy固定为1.0000——这显然不对,我的数据集不可能完美到没有任何误差 - 用训练好的模型做测试时,所有样本的预测结果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
相关产品推荐
相关产品推荐

