郭震 AI公众号:郭震AI

18 深度学习模型评估与调优之避免过拟合

发布日期:

最近更新:

分类: 深度学习小白

预计阅读: 4 分钟

阅读次数: 0

预计阅读4 分钟
结构重点9 个
图文要点6 张
正文规模1.5k 字

整理说明

这篇内容怎么整理

郭震 · 2026-06-04

独立整理围绕 9 个结构重点拆成环境、步骤、验证点和常见误区,尽量让读者能照着复现。
图文对照保留 6 张和配置、流程、判断结果有关的图片,方便快速定位正文重点。
持续校对工具、模型和命令变化较快,后续优先修正入口、参数和风险提醒。

阅读路线

先按这条路线读

先抓住主线,再回到代码、配置和图文细节,读起来会更稳。

图文要点

先看本文图文节点

按图先建立主线,再跳回正文核对步骤、配置和判断标准。

深度学习模型评估与调优之避免过拟合结构图查看大图
深度学习模型评估与调优之避免过拟合结构图

过拟合的表现是训练集越来越好,验证集却停滞甚至变差。它不是模型不努力,而是模型学到了训练集里的偶然细节。

别让模型只记住训练集核对图查看大图
别让模型只记住训练集核对图

发现过拟合时,优先看数据量和数据增强,再看模型容量和正则化。不要只靠继续训练解决。

在上一篇中,我们讨论了如何通过超参数调优来提升深度学习模型的性能。超参数的合理选择可以显著提高模型的泛化能力。然而,除了超参数外,另一个影响模型性能的重要因素就是“过拟合”。在本节中,我们将探讨避免过拟合的方法,并结合实际案例进行说明。

什么是过拟合?

过拟合是指模型在训练数据上表现得很好,但在未见过的测试数据上表现却很差的现象。这通常是由于模型复杂度过高,导致模型学习到了训练数据中的噪声和细节,而不是真正的潜在模式。

在深度学习中,过拟合的表现通常可以通过以下方式观察:

  • 训练集损失下降而验证集损失上升。
  • 模型在训练集上的准确率显著高于在验证集上的准确率。

如何识别过拟合?

我们可以通过绘制训练集和验证集的损失曲线来识别过拟合的情况。以下是一个可能的代码示例,用于绘制损失曲线:

import matplotlib.pyplot as plt

def plot_loss_curve(history):
    plt.plot(history.history['loss'], label='Training Loss')
    plt.plot(history.history['val_loss'], label='Validation Loss')
    plt.title('Loss Curve')
    plt.xlabel('Epochs')
    plt.ylabel('Loss')
    plt.legend()
    plt.show()

在训练过程中,我们会调用 plot_loss_curve 函数,并将模型的训练历史作为参数传入。如果我们发现验证集损失在某个时刻开始上升,而训练集损失持续下降,那么就说明模型开始过拟合。

避免过拟合的方法

常用的避免过拟合的方法包括:

1. 使用更少的特征

在某些情况下,模型可以通过减少输入特征数量来避免过拟合。这可以通过选择与目标变量相关性高的特征来实现。

2. 增加训练数据

增加数据量是防止过拟合的一种有效方法。如果可以收集到更多的训练数据,模型会面临更多的样本,从而能够学习到更普适的模式。

避免过拟合判断卡查看大图
避免过拟合判断卡

处理深度学习过拟合时,先看训练验证曲线、数据增强、正则化、模型容量、早停和测试集表现。

考虑使用数据增强(Data Augmentation)技术,可以在实际应用中通过增强现有样本来增加训练数据。例如在图像识别中,可以通过旋转、平移、缩放等方式生成新的图像样本。

from keras.preprocessing.image import ImageDataGenerator

datagen = ImageDataGenerator(
    rotation_range=40,
    width_shift_range=0.2,
    height_shift_range=0.2,
    shear_range=0.2,
    zoom_range=0.2,
    horizontal_flip=True)

# 示例:为单张图像生成增强数据
img = load_img('path_to_image.jpg')  # 载入图像
x = img_to_array(img)  # 将图像转为数组
x = x.reshape((1,) + x.shape)  # 扩展维度

i = 0
for batch in datagen.flow(x, batch_size=1):
    plt.imshow(image.array_to_img(batch[0]))
    plt.show()
    i += 1
    if i > 20:  # 生成20个增强图像
        break

3. 正则化

正则化是一种通过添加惩罚项来控制模型复杂性的技术。常见的正则化方法有:

  • L1正则化(Lasso):通过在损失函数中添加特征绝对值和的惩罚项来缩小特征权重,从而促使模型选择更少的特征。
  • L2正则化(Ridge):通过在损失函数中添加特征权重平方和的惩罚项来缩小权重,防止模型过于复杂。

在Keras中,可以轻松实现正则化:

from keras import regularizers

model = Sequential()
model.add(Dense(64, input_dim=input_dim, 
                kernel_regularizer=regularizers.l2(0.01), 
                activation='relu'))

4. 使用Dropout层

Dropout是一种随机丢弃神经元的方法,防止模型对特定神经元的依赖,促进模型的泛化能力。Dropout层在训练过程中以一定的概率(如0.5)随机“丢弃”某些神经元。

深度学习阅读地图卡查看大图
深度学习阅读地图卡

《深度学习模型评估与调优之避免过拟合》读到最后,可以把图里的流程当成检查表:问题是否明确,操作是否落地,判断标准是否能复用。

from keras.layers import Dropout

model.add(Dropout(0.5))  # 丢弃50%的神经元

5. 早停法(Early Stopping)

早停法是一种监控验证集损失并在其开始上升之前停止训练的方法。这样可以确保模型在最优时刻停止训练,从而减少过拟合的风险。

from keras.callbacks import EarlyStopping

early_stopping = EarlyStopping(monitor='val_loss', patience=5)
model.fit(X_train, y_train, validation_data=(X_val, y_val), callbacks=[early_stopping])
深度学习模型评估与调优之避免过拟合应用复盘卡查看大图
深度学习模型评估与调优之避免过拟合应用复盘卡

学完《深度学习模型评估与调优之避免过拟合》后,不妨换一个自己的场景试一次,重点观察输入、处理和输出是否能对应起来。

深度学习模型评估与调优之避免过拟合应用检查卡查看大图
深度学习模型评估与调优之避免过拟合应用检查卡

如果想把《深度学习模型评估与调优之避免过拟合》用到自己的任务里,可以先缩小场景,只验证一个最关键的判断点。

结论

在深度学习模型的训练中,避免过拟合是提升模型泛化能力的关键。通过选择合适的特征、增加训练数据、应用正则化、使用Dropout层以及实施早停法,我们可以有效地控制模型复杂性,从而提高在未见数据上的表现。

在下一篇中,我们将探索深度学习的一个具体应用案例——图像识别。准备好一起深入实际应用的世界了吗?

继续阅读

从这篇继续找到相关教程

AI 教程总索引

常见问题

读前先确认这三点

深度学习模型评估与调优之避免过拟合适合谁读?

这是 深度学习入门 系列第 18 / 24 篇,适合正在学习深度学习入门,并且需要把概念落到操作步骤或判断标准里的读者。

读这篇深度学习入门教程要多久?

按中文技术文章阅读速度估算,通读大约 4 分钟;如果要跟着复现,建议把命令、配置和结果检查分开做。

这篇文章里的图文节点怎么用?

正文里有 6 个图文节点,可以先用它们抓住流程、配置和判断点,再回到对应段落细读。

分享文章

转发到常用平台

微信/朋友圈可先复制链接

相关教程

AI 教程总索引

继续阅读

继续找到相关 AI 教程

返回栏目

Reader Messages

读者留言

有问题、补充资料或实测结果,可以直接留下。这里不需要登录。

最多 800 字

为了防刷,每条留言会做长度、链接数量和提交频率限制。

0/800

留言列表

0
正在加载留言...