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

Keras多分类模型测试精度远低于训练精度的调优求助

多分类模型过拟合问题调优方案

问题背景

训练阶段精度达到100%,但测试精度仅14.26%,存在严重过拟合,即使添加Dropout层也未改善。

模型代码

n_labels = len(unique(X_train_enc))
in_layer = Input(shape=(1,))
em_layer = Embedding(input_dim = int(n_labels)+1,output_dim = 7,
                     input_length = 1, name="embedding")(in_layer)

dense = Dense(512, activation='relu', kernel_initializer='he_normal')(em_layer)
dense = Dropout(0.2)(dense)
output = Dense(7, activation='softmax')(dense)
model = Model(inputs=in_layer, outputs=output)
model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(X_train_enc, y_train_enc, epochs=100, batch_size=100, verbose=1)

训练与测试结果

训练日志片段

Epoch 98/100
572/572 [================] - 11s 19ms/step - loss: 3.7565e-11 - accuracy: 1.0000
Epoch 99/100
313/572 [
=>..............] - ETA: 5s - loss: 2.2852e-11 - accuracy: 1.0000

测试结果

测试代码:

test_loss, test_acc = model.evaluate(X_test_enc, y_test_enc,verbose=1)
print('Test Accuracy: ', test_acc, '\nTest Loss: ', test_loss)
print('Accuracy: %.2f' % (test_acc*100))

输出:

766/766 [==============================] - 7s 9ms/step - loss: 20.4420 - accuracy: 0.1426
Test Accuracy: 0.1426003873348236
Test Loss: 20.441951751708984
Accuracy: 14.26

调优建议

  • 控制模型复杂度:当前Embedding层后直接连接512维Dense层,参数冗余导致过拟合。建议降低Dense层维度至64或128,缩小模型容量,避免对训练数据过度拟合。
  • 增强正则化强度:现有0.2的Dropout率正则化力度不足,可提升至0.3-0.5;同时给Dense层添加L2正则项,例如在Dense层中加入kernel_regularizer=l2(0.01),限制权重规模。
  • 提前停止训练:训练100轮已出现严重过拟合,使用EarlyStopping回调函数监测验证集性能,当验证集指标不再提升时自动终止训练,保留最优权重。示例代码:
    from tensorflow.keras.callbacks import EarlyStopping
    early_stop = EarlyStopping(monitor='val_loss', patience=5, restore_best_weights=True)
    model.fit(X_train_enc, y_train_enc, epochs=100, batch_size=100, 
              validation_split=0.1, callbacks=[early_stop], verbose=1)
    
  • 加入验证集监控:训练过程中引入验证集(通过validation_split或单独传入验证数据),实时对比训练集与验证集的精度、损失变化,及时发现过拟合迹象。
  • 调整Embedding层参数:Embedding的output_dim设为7与输出类别数一致,特征表达能力不足。可尝试增大至16或32,若输入标签数量庞大,也可给Embedding层添加正则项。
  • 检查数据合理性:确认训练集与测试集的类别分布是否一致,排查是否存在类别不平衡、数据泄露问题。若测试集分布与训练集差异过大,或训练混入测试数据,都会导致测试精度异常。
  • 优化学习策略:Adam默认学习率可能偏大,导致训练后期震荡或过拟合。可降低学习率至1e-4,或使用ReduceLROnPlateau回调函数实现学习率衰减。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 09:50:24