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

机器学习训练网络图表解读求助:验证集与训练集指标偏离

训练集与验证集指标偏离的原因及解决办法

你遇到的训练集(accuracy/loss)与验证集(val_accuracy/val_loss)指标偏离,本质是模型泛化能力不足(过拟合),或者存在数据/训练设置的问题,以下是具体原因和对应解决办法:

一、核心问题分析

通常这种偏离表现为:训练集准确率持续上升、损失持续下降,但验证集准确率停滞甚至下降、损失上升——这说明模型在训练集上过度拟合,无法泛化到未见过的验证数据。

二、具体原因与修复方案

1. 训练设置错误:早停监控指标选反了

你的EarlyStopping监控的是训练集的accuracy,这完全错误。早停的目的是防止过拟合,应该监控验证集的指标,比如val_accuracy或val_loss,否则模型会在训练集性能不再提升时停止,但此时验证集可能还在优化,或者已经开始过拟合。
修改代码:

# 正确的早停设置:监控验证集准确率,耐心7轮,恢复最优权重
callback_list = EarlyStopping(monitor='val_accuracy', mode='max', patience=7, restore_best_weights=True)

2. 模型容量过大,缺少正则化

你在卷积基(conv_base)后添加了两个512单元的全连接层,参数规模过大,尤其是如果conv_base是预训练的大模型(如VGG16、ResNet),很容易导致过拟合。
修复方案:

  • 添加Dropout层抑制过拟合:
model = Sequential()
model.add(conv_base)
model.add(layers.Flatten())
model.add(layers.Dense(units=512, activation='relu'))
model.add(layers.Dropout(0.5))  # 加入Dropout,随机丢弃50%的神经元
model.add(layers.Dense(units=512, activation='relu'))
model.add(layers.Dropout(0.5))
model.add(layers.Dense(units=3, activation='softmax'))
  • 可选:给全连接层添加L2正则化:
from tensorflow.keras import regularizers
model.add(layers.Dense(units=512, activation='relu', kernel_regularizer=regularizers.l2(0.001)))

3. 学习率设置过低

你使用的learning_rate=0.000001(1e-6)太小,模型收敛速度极慢,可能还没充分学习到通用特征就开始拟合训练集噪声,或者根本没学到有效特征。
建议调整为1e-4或1e-5,根据验证集性能再微调:

model.compile(optimizer=optimizers.RMSprop(learning_rate=1e-4),
             loss='categorical_crossentropy',
             metrics=['accuracy'])

4. 数据层面问题

  • 训练集未做数据增强:如果是图像任务,训练集必须做数据增强(旋转、平移、翻转等),让模型学习到更鲁棒的特征,避免记住训练样本。示例:
from tensorflow.keras.preprocessing.image import ImageDataGenerator

# 训练集数据增强
train_datagen = ImageDataGenerator(
    rescale=1./255,
    rotation_range=20,
    width_shift_range=0.2,
    height_shift_range=0.2,
    horizontal_flip=True
)

# 验证集仅做归一化,不增强
valid_datagen = ImageDataGenerator(rescale=1./255)

train_generator = train_datagen.flow_from_directory(...)
valid_generator = valid_datagen.flow_from_directory(...)
  • 训练/验证集分布不一致:检查两类数据集的样本类别比例、图像风格是否一致,确保划分时用分层抽样(比如train_test_split的stratify参数),保证类别分布匹配。
  • 样本量不足:如果总样本数太少,即使做了增强,大模型也容易过拟合,可以考虑减少全连接层的单元数(比如从512降到256),或者使用更小的卷积基。

5. 优化器的选择并非核心问题

你尝试的RMSprop、AdaMax等优化器,主要影响模型的收敛速度和稳定性,无法解决过拟合的核心问题。先解决上述数据、模型、训练设置的问题后,再根据收敛情况调整优化器即可。

内容的提问来源于stack exchange,提问作者Miron Smętek

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 17:12:42