在刚接触深度学习时,很多人会认为“调参”就是不断修改学习率、批次大小和训练轮数,直到模型取得更高的准确率。

实际上,真正有效的调参并不是盲目试数字,而是根据训练现象判断模型当前存在的问题,再有针对性地修改参数。

对于初学者来说,可以把深度学习调参理解为一个不断排查问题的过程:

  1. 数据有没有问题?

  2. 模型能不能学会训练集?

  3. 模型能不能推广到验证集?

  4. 训练过程是否稳定?

  5. 当前评价指标是否适合任务?

本文将以图像分类和语义分割任务为例,系统介绍深度学习模型训练中的常见参数、判断方法和推荐调参流程。

这里我也推荐一个租云服务器跑深度学习模型的网站AutoDL:AutoDL使用指南

云服务器训练:tmux后台训练指南:tmux教学


一、调参之前,先理解训练集、验证集和测试集

一个规范的深度学习实验,通常需要将数据划分为三个部分。

1. 训练集

训练集用于模型参数更新。

模型通过训练集计算损失函数,再利用反向传播不断调整网络中的权重。

可以把训练集理解为学生平时做的练习题。

2. 验证集

验证集用于:

  • 选择学习率;

  • 选择损失函数;

  • 判断模型是否过拟合;

  • 选择最佳训练轮数;

  • 对比不同模型和参数配置。

验证集类似于模拟考试。它不直接参与模型参数更新,但用于评价当前训练方案是否有效。

3. 测试集

测试集只用于模型最终评价。

模型结构和训练参数确定后,才应该在测试集上计算最终结果。

如果根据测试集结果反复修改模型,那么测试集就失去了客观评价的意义,相当于提前看到了考试答案。

因此,调参时主要观察验证集,不能根据测试集结果反复修改训练方案。


二、调参前必须观察哪些指标

训练过程中通常需要记录两类信息。

1. 损失函数

最常见的是:

  • 训练损失:Train Loss;

  • 验证损失:Validation Loss。

损失函数反映模型预测结果与真实标签之间的差距。一般来说,损失越低,说明模型预测越接近真实结果。

但损失函数只是训练目标,不一定能完全代表最终任务表现,因此还需要结合具体评价指标。

2. 评价指标

不同任务需要关注不同指标。

图像分类任务常见指标包括:

  • Accuracy;

  • Precision;

  • Recall;

  • F1-score。

语义分割任务常见指标包括:

  • IoU;

  • Dice;

  • Precision;

  • Recall;

  • Pixel Accuracy。

对于前景和背景比例严重不均衡的语义分割任务,不能只看 Accuracy。

例如,一张图像中有 95% 的像素属于背景,模型即使把所有像素都预测成背景,也可以取得 95% 的 Accuracy,但它实际上完全没有识别出目标。

因此,二分类语义分割任务通常更应该关注:

  • IoU;

  • Dice;

  • Recall;

  • Precision。


三、先判断模型属于哪一种训练状态

调参之前,首先要根据训练集和验证集表现判断模型状态。


四、训练集和验证集都很差:欠拟合

假设某个语义分割模型训练完成后得到:

Train Dice = 0.56
Validation Dice = 0.53

训练集和验证集指标都比较低,而且两者差距不大,通常说明模型存在欠拟合。

所谓欠拟合,是指模型连训练数据中的规律都没有充分学会。

常见原因

  • 学习率太小;

  • 训练轮数不足;

  • 模型结构过于简单;

  • 输入数据归一化错误;

  • 标签制作有问题;

  • 损失函数不适合当前任务;

  • 数据增强过强;

  • 输入特征本身区分度不足。

建议排查顺序

不要一看到指标低就立即更换更复杂的模型,而应按照以下顺序检查:

第一步,检查输入数据和标签是否正确。

第二步,观察训练损失是否持续下降。

第三步,适当增加训练轮数。

第四步,调整学习率。

第五步,再考虑提高模型容量或更换模型结构。

很多所谓的“模型性能差”,实际上并不是网络结构问题,而是数据、标签、归一化或学习率设置存在错误。


五、训练集很好,验证集很差:过拟合

假设模型得到:

Train Dice = 0.94
Validation Dice = 0.63

模型在训练集上的表现非常好,但验证集明显较差,这通常说明出现了过拟合。

过拟合是指模型记住了训练样本中的细节甚至噪声,却没有学到能够推广到新数据上的稳定规律。

常见原因

  • 训练样本数量太少;

  • 模型参数量太大;

  • 训练轮数过多;

  • 数据增强不足;

  • 训练集和验证集分布差异较大;

  • 训练集和验证集划分方式不合理;

  • 正则化强度不足。

常见解决方法

可以尝试:

  • 增加数据增强;

  • 使用 Early Stopping;

  • 增大 Weight Decay;

  • 减小模型规模;

  • 使用 Dropout;

  • 增加训练样本;

  • 重新划分训练集和验证集;

  • 检查是否存在数据泄漏。

对于遥感影像、医学影像等空间相关性较强的数据,还要特别注意相邻图像块之间的数据泄漏。

例如,从同一张大影像中切出的相邻样本如果分别进入训练集和验证集,模型可能因为看到了高度相似的区域而取得虚高的验证结果。


六、指标剧烈波动:训练过程不稳定

假设验证集 Dice 在不同训练轮数之间出现:

0.48 → 0.65 → 0.51 → 0.68 → 0.49

这种现象通常说明训练过程不够稳定。

常见原因

  • 学习率过大;

  • Batch Size 太小;

  • 验证集样本太少;

  • 输入数据中存在异常值;

  • 数据归一化错误;

  • 类别分布严重不均衡;

  • BatchNorm 在小批次下不稳定。

优先处理方法

首先尝试降低学习率,例如:

1e-3 → 3e-4 → 1e-4

如果显存允许,也可以适当增大 Batch Size。

如果 Batch Size 只能设置为 1 或 2,而网络中大量使用 BatchNorm,可以考虑:

  • 冻结 BatchNorm;

  • 使用 GroupNorm;

  • 使用 InstanceNorm;

  • 使用梯度累积。


七、最重要的超参数:学习率

学习率决定模型每次更新参数时移动多大的距离。

可以把模型训练想象成从山顶向山谷寻找最低点:

  • 学习率太大,模型可能跨过最低点并不断震荡;

  • 学习率太小,模型移动速度很慢;

  • 学习率合适,模型可以较快且稳定地接近较优解。


八、学习率过大的表现

学习率过大时,常见现象包括:

  • Loss 剧烈震荡;

  • Loss 不降反升;

  • 验证指标忽高忽低;

  • 训练过程中出现 NaN;

  • 模型无法稳定收敛。

例如:

Epoch 1: Loss = 1.02
Epoch 2: Loss = 0.81
Epoch 3: Loss = 1.25
Epoch 4: Loss = 0.76
Epoch 5: Loss = NaN

这种情况下可以尝试:

1e-3 → 3e-4
3e-4 → 1e-4
1e-4 → 3e-5

九、学习率过小的表现

学习率过小时,模型通常表现为:

  • Loss 下降非常缓慢;

  • 训练很多轮后指标仍然较低;

  • 训练集和验证集都表现较差;

  • 模型看起来几乎没有学习。

例如训练 20 轮后:

Epoch 1: Loss = 0.704
Epoch 20: Loss = 0.692

如果确认数据和标签没有问题,可以适当提高学习率。


十、学习率应该怎么试

使用 Adam 或 AdamW 优化器时,可以优先比较:

3e-4
1e-4
3e-5

推荐采用控制变量法:

实验 学习率 其他参数
LR-1 3e-4 完全相同
LR-2 1e-4 完全相同
LR-3 3e-5 完全相同

比较时不能只看最后一轮结果,而应观察:

  • 最佳验证集指标;

  • 最佳指标出现在哪一轮;

  • 收敛速度;

  • 曲线是否稳定;

  • 是否出现过拟合。


十一、Batch Size 应该怎么设置

Batch Size 表示模型每次参数更新时同时使用多少个样本。

例如:

batch_size = 8

表示模型每次读取 8 个样本,计算一次平均梯度并更新参数。

Batch Size 较小

优点:

  • 显存占用较少;

  • 梯度带有一定随机性;

  • 有时泛化能力更好。

缺点:

  • 训练曲线更容易波动;

  • BatchNorm 可能不稳定;

  • 单轮训练时间可能增加。

Batch Size 较大

优点:

  • 梯度更加稳定;

  • GPU 利用率通常更高;

  • 训练曲线更加平滑。

缺点:

  • 占用更多显存;

  • 不一定带来更好的验证结果;

  • 学习率可能需要同步调整。

对于较大的遥感图像或医学图像,例如 512×512 输入,可以从以下范围开始:

batch_size = 2、4 或 8

对于普通分类任务,可以根据显存尝试更大的批次。

需要注意的是,Batch Size 改变后,训练行为也会发生变化,因此不能简单认为 Batch Size 越大越好。


十二、训练轮数 Epoch 怎么确定

Epoch 表示模型完整学习一遍训练集。

训练轮数太少,模型可能尚未充分收敛;训练轮数太多,则可能过拟合。

例如:

Epoch 30: Validation Dice = 0.68
Epoch 60: Validation Dice = 0.76
Epoch 90: Validation Dice = 0.71

说明模型在第 60 轮附近表现最好,后续训练可能已经开始过拟合。

因此,不能简单使用最后一轮模型。

推荐同时保存:

best_model.pth
last_model.pth

其中:

  • best_model.pth:验证集指标最高时保存的模型;

  • last_model.pth:训练最后一轮保存的模型。

实际测试时通常优先使用最佳验证模型。


十三、使用 Early Stopping

Early Stopping 是缓解过拟合的一种常见方法。

例如:

max_epochs = 100
patience = 15

表示:

  • 最多训练 100 轮;

  • 如果验证集指标连续 15 轮没有提高,就提前终止训练。

需要注意,Early Stopping 不应过于敏感。

如果 patience 只设置为 2 或 3,模型可能因为验证指标的正常波动而过早停止。


十四、优化器怎么选择

常见优化器包括:

  • SGD;

  • Adam;

  • AdamW。

对于初学者来说,AdamW 通常是一个比较稳定、容易使用的选择。

示例:

optimizer = torch.optim.AdamW(
    model.parameters(),
    lr=1e-4,
    weight_decay=1e-4
)

AdamW 的优点包括:

  • 收敛速度较快;

  • 对初始学习率相对不那么敏感;

  • 在分类、检测和分割任务中均有广泛应用;

  • Weight Decay 的实现方式更加规范。

SGD 也可能取得很好的最终结果,但通常更依赖合理的学习率、动量和学习率调度策略,因此初学阶段可以优先使用 AdamW。


十五、Weight Decay 是什么

Weight Decay 可以理解为对模型参数大小进行限制。

模型参数过大时,模型可能过度适应训练数据,产生过拟合。Weight Decay 会对较大的参数施加惩罚,使模型学习到相对平滑的特征。

常见尝试范围包括:

1e-5
1e-4
5e-4
1e-3

如果出现明显过拟合,可以适当增大 Weight Decay。

例如:

1e-4 → 5e-4

但 Weight Decay 也不是越大越好。

如果正则化强度过高,模型参数会受到过强限制,可能导致训练集和验证集指标都下降,形成欠拟合。


十六、为什么需要学习率调度器

在模型训练初期,参数距离较优位置通常较远,需要相对较大的学习率快速搜索。

到了训练后期,模型已经接近较优区域,此时需要较小的学习率进行精细调整。

因此,训练过程中经常会逐渐降低学习率。


十七、Cosine Annealing

Cosine Annealing 会按照余弦曲线逐渐降低学习率。

示例:

scheduler = torch.optim.lr_scheduler.CosineAnnealingLR(
    optimizer,
    T_max=100,
    eta_min=1e-6
)

它比较适合已经确定总训练轮数的任务。

例如:

初始学习率:1e-4
最低学习率:1e-6
训练轮数:100

训练初期更新幅度较大,后期逐步减小。


十八、ReduceLROnPlateau

ReduceLROnPlateau 会根据验证集表现调整学习率。

例如,当验证损失连续若干轮没有下降时,将学习率缩小。

示例逻辑:

验证损失连续 8 轮没有改善
学习率乘以 0.5

这种方法适合不知道模型会在什么时候进入平台期的情况。

初学阶段不建议同时叠加多个复杂的学习率调度器,否则出现变化时很难判断是哪种策略产生了作用。


十九、损失函数怎么选择

损失函数决定模型在训练时优化什么目标。

不同任务对应不同的损失函数。

分类任务

常见选择:

Cross Entropy Loss

二分类任务

常见选择:

Binary Cross Entropy Loss
BCEWithLogitsLoss

二分类语义分割

常见选择:

BCE Loss
Dice Loss
BCE + Dice Loss
Focal Loss
Tversky Loss

二十、BCE Loss 和 Dice Loss 的区别

BCE Loss 主要从单个像素的角度判断预测是否正确。

Dice Loss 则更关注预测区域和真实区域之间的整体重叠程度。

对于前景和背景比例不均衡的语义分割任务,单独使用 BCE 可能会让模型更加偏向数量较多的背景类别。

因此,可以将 BCE 和 Dice 组合:

Total Loss = BCE Loss + Dice Loss

或者:

Total Loss = 0.5 × BCE Loss + 0.5 × Dice Loss

这是一种比较常见的二分类分割基线方案。


二十一、什么时候使用 Focal Loss

当数据中存在严重类别不均衡,或者大量简单背景样本主导训练时,可以考虑 Focal Loss。

Focal Loss 会降低简单样本对总损失的贡献,让模型更加关注难分类样本。

但它不一定在所有任务中都优于 BCE。

推荐先建立简单基线:

BCE + Dice

如果发现少数类别仍然难以识别,再比较:

Focal + Dice

不要一开始就堆叠过多复杂损失函数,否则不利于分析实验结果。


二十二、Precision 和 Recall 应该怎么平衡

在二分类任务中:

  • Precision 高,表示预测为目标的样本大多是正确的;

  • Recall 高,表示真实目标大多被检测出来了。

Recall 很低

说明模型漏检严重。

可以尝试:

  • 降低分类阈值;

  • 提高正类损失权重;

  • 使用 Dice、Focal 或 Tversky Loss;

  • 增加少数类别样本;

  • 检查目标是否过小。

Precision 很低

说明模型误检严重。

可以尝试:

  • 提高分类阈值;

  • 降低正类损失权重;

  • 增加困难负样本;

  • 改善标签质量;

  • 加强模型对背景的区分能力。

不能只追求某一个指标。

例如,过度提高正类权重可能使 Recall 上升,但也可能导致模型将大量背景误判为目标,从而降低 Precision。


二十三、数据增强往往比更换模型更重要

对于样本数量有限的任务,数据增强是缓解过拟合的重要手段。

常见空间增强

  • 水平翻转;

  • 垂直翻转;

  • 随机旋转;

  • 随机裁切;

  • 随机缩放;

  • 仿射变换。

常见图像增强

  • 亮度调整;

  • 对比度调整;

  • 色彩扰动;

  • 高斯噪声;

  • 模糊;

  • 随机遮挡。

对于遥感影像,水平翻转、垂直翻转和 90° 倍数旋转通常比较常见,因为遥感目标往往不具有固定朝向。

对于自然图像,则需要考虑增强是否符合真实场景。

例如,将车辆图像上下翻转,可能产生现实中不存在的图像,因此不一定适合作为训练数据。


二十四、图像和标签必须同步增强

在语义分割任务中,输入图像和标签必须执行完全相同的空间变换。

例如,输入图像进行了水平翻转,那么标签也必须水平翻转。

错误做法:

图像:水平翻转
标签:保持不变

这样会导致图像目标位置和标签位置不一致,模型无法正常学习。

对于多模态输入,例如光学影像、雷达影像和标签,也必须同步执行旋转、翻转和裁切。


二十五、数据增强不能过强

数据增强并不是越多越好。

增强过强时,可能出现:

  • 训练损失长期较高;

  • 模型难以收敛;

  • 图像失去真实物理意义;

  • 训练数据分布偏离真实测试数据;

  • 验证指标反而下降。

因此,应按照由弱到强的方式逐步增加增强。

例如:

实验 1:无增强
实验 2:翻转和旋转
实验 3:翻转、旋转和轻微颜色扰动
实验 4:加入噪声、模糊和随机遮挡

通过验证集确定哪一级增强最合适。


二十六、输入归一化为什么重要

不同输入特征的数值范围可能差异很大。

例如:

特征 A:0~1
特征 B:0~10000
特征 C:-30~5

如果直接将这些特征输入网络,数值范围较大的特征可能在梯度更新中占据主导地位,影响训练稳定性。

常见归一化方法包括:

Min-Max 归一化

x = (x - x_min) / (x_max - x_min)

将数据缩放到 0~1 范围。

标准化

x = (x - mean) / std

将数据转换为均值接近 0、标准差接近 1 的分布。

训练集的均值和标准差计算完成后,应将相同参数应用于验证集和测试集。

不能分别使用验证集或测试集计算自己的归一化参数,否则可能引入数据泄漏。


二十七、多模态数据要分别归一化

对于多模态模型,不同类型数据通常不能使用同一种归一化方法。

例如:

  • RGB 图像可能采用 ImageNet 均值和标准差;

  • 遥感反射率数据可能先缩放到 0~1;

  • 雷达 dB 数据可能需要裁剪异常值后再标准化;

  • 深度数据可能按照有效距离范围缩放。

如果不同模态的数值尺度差异过大,模型可能过度依赖某一种输入,导致融合效果不佳。

因此,多模态训练出现性能下降时,不一定说明融合结构无效,也可能是输入尺度、配准或数据质量存在问题。


二十八、二分类阈值也可以调

二分类模型通常输出 0~1 之间的概率。

默认规则是:

概率 ≥ 0.5:预测为正类
概率 < 0.5:预测为负类

但 0.5 不一定是最佳阈值。

可以在验证集上搜索:

0.30、0.35、0.40、0.45、0.50、0.55、0.60、0.65、0.70

例如:

阈值 Precision Recall Dice
0.35 0.62 0.84 0.71
0.50 0.73 0.69 0.71
0.65 0.82 0.52 0.64

一般来说:

  • 降低阈值,Recall 往往上升,Precision 可能下降;

  • 提高阈值,Precision 往往上升,Recall 可能下降。

阈值搜索应该放在训练方案基本确定之后进行。

它只能优化最终决策,不能弥补严重的数据问题或模型训练问题。


二十九、初学者推荐的标准调参顺序

调参最好按照固定顺序进行。

第一步:检查数据

随机可视化一部分训练样本,确认:

  • 图像能够正常读取;

  • 标签内容正确;

  • 图像与标签对齐;

  • 类别编号正确;

  • 没有大量空白样本;

  • 没有 NaN 或无穷值;

  • 训练集、验证集和测试集没有重复数据。

数据错误时,任何调参都没有意义。


第二步:建立简单基线

先使用一个结构清晰、能够稳定训练的模型。

例如,二分类分割任务可以建立如下基线:

模型:U-Net
损失函数:BCE + Dice
优化器:AdamW
学习率:1e-4
Weight Decay:1e-4
Batch Size:4
最大训练轮数:100
调度器:Cosine Annealing
Early Stopping:15

第一版基线不需要复杂。

基线的价值是为后续实验提供一个稳定参照。


第三步:优先调整学习率

固定其他参数,比较:

3e-4
1e-4
3e-5

观察最佳验证指标和训练稳定性。

学习率通常是最值得优先调整的超参数。


第四步:比较损失函数

确定较合适的学习率后,再比较:

BCE
Dice
BCE + Dice
Focal + Dice

一次只修改损失函数,不要同时改变模型、增强和 Batch Size。


第五步:调整数据增强

比较:

无增强
基础增强
中等增强
较强增强

根据验证集结果选择合适强度。


第六步:处理过拟合

如果训练集明显优于验证集,可以依次尝试:

  • 增加数据增强;

  • 使用 Early Stopping;

  • 增大 Weight Decay;

  • 减小网络宽度;

  • 增加 Dropout;

  • 增加训练数据。


第七步:调整模型结构

只有在数据、训练流程、学习率和损失函数都相对合理之后,再考虑:

  • 更换主干网络;

  • 加入注意力模块;

  • 增加多尺度结构;

  • 引入特征融合模块;

  • 使用预训练权重。

模型越复杂,不代表效果一定越好。

在小样本任务中,更复杂的模型甚至可能更容易过拟合。


第八步:搜索最佳阈值

最后在验证集上搜索分类阈值,再使用固定阈值评价测试集。


三十、一个适合初学者的最小调参实验表

不需要一开始就做几十组实验,可以先完成以下几组。

实验编号 修改内容 实验目的
E0 基线参数 建立参照结果
E1 学习率改为 3e-4 判断基线学习率是否偏小
E2 学习率改为 3e-5 判断基线学习率是否偏大
E3 只使用 BCE 比较损失函数
E4 使用 Focal + Dice 处理类别不平衡
E5 加入翻转和旋转 检查数据增强效果
E6 增大 Weight Decay 检查过拟合
E7 搜索分类阈值 优化最终决策

每次实验只改变一个主要变量,这种方法叫作控制变量法。

如果同时修改学习率、损失函数、网络结构和数据增强,即使结果提高,也无法确定究竟是哪一个修改起了作用。


三十一、每次实验应该记录什么

建议建立实验记录表。

实验名 模型 学习率 Batch Loss 增强 最佳 Epoch Val IoU Val Dice Recall
E0 U-Net 1e-4 4 BCE+Dice 基础 62 0.61 0.72 0.75

除此之外,还应记录:

  • 随机种子;

  • 数据集版本;

  • 训练集和验证集划分;

  • 输入图像尺寸;

  • 优化器;

  • Weight Decay;

  • 学习率调度器;

  • 最佳模型保存路径;

  • 训练时间;

  • 是否出现 NaN;

  • 对实验现象的简要分析。

实验记录不是形式工作,而是调参过程中最重要的组成部分之一。

如果没有记录,当实验数量增加后,很容易忘记每组实验修改了什么。


三十二、常见训练现象与解决方法

训练现象 可能原因 优先处理方法
Loss 变成 NaN 学习率过大、异常值、梯度爆炸 降低学习率,检查数据
Loss 几乎不下降 学习率太小、标签错误 检查标签和归一化
训练集和验证集都差 欠拟合 调整学习率,增加训练
训练集好、验证集差 过拟合 增强、正则化、早停
验证指标剧烈波动 学习率大、Batch 小 降低学习率,增大批次
Accuracy 高但 Dice 低 类别严重不平衡 重点观察 IoU 和 Dice
Recall 很低 漏检严重 调损失权重或降低阈值
Precision 很低 误检严重 提高阈值或增加负样本
多模态效果反而下降 配准、归一化或融合有问题 分别检查每种输入
验证结果异常高 数据泄漏 重新检查数据划分

三十三、调参中常见的错误做法

1. 一次修改很多参数

例如同时修改:

  • 学习率;

  • 优化器;

  • 损失函数;

  • Batch Size;

  • 数据增强;

  • 模型结构。

即使结果提高,也无法解释提升来源。

2. 只看最后一轮结果

最佳模型可能出现在中间某一轮,而不是训练结束时。

应保存验证集指标最高的模型。

3. 只看 Accuracy

对于类别不均衡任务,Accuracy 可能具有误导性。

4. 频繁使用测试集

测试集应该用于最终评价,而不是参与日常调参。

5. 指标差就立即换模型

模型效果差可能来自:

  • 标签错误;

  • 输入异常;

  • 数据泄漏;

  • 归一化不合理;

  • 学习率不合适。

更换模型不能解决这些问题。

6. 只报告最好的一次结果

深度学习训练具有随机性。

更加规范的实验可以使用多个随机种子重复训练,并报告平均值和标准差。

例如:

Dice = 0.724 ± 0.008

三十四、进一步提高实验可靠性

当基础调参流程已经完成后,可以进一步采用以下方法。

1. 固定随机种子

固定:

  • Python;

  • NumPy;

  • PyTorch;

  • CUDA。

这样可以减少不同实验之间的随机差异。

2. 重复实验

对于关键模型,可以使用 3 个或 5 个随机种子分别训练。

3. 绘制训练曲线

至少绘制:

  • Train Loss;

  • Validation Loss;

  • Train Metric;

  • Validation Metric;

  • Learning Rate。

训练曲线往往比单个最终数字更能说明问题。

4. 保存配置文件

将每次实验的参数保存为 JSON 或 YAML,例如:

model: unet
learning_rate: 0.0001
batch_size: 4
epochs: 100
optimizer: adamw
weight_decay: 0.0001
loss: bce_dice
scheduler: cosine

这样可以提高实验的可复现性。


三十五、总结

深度学习调参不是盲目试数字,而是根据训练现象不断提出假设并进行验证。

对于初学者,可以记住以下原则:

先检查数据,再调整模型。

先调学习率,再调其他参数。

一次只修改一个主要变量。

使用验证集调参,不要反复查看测试集。

保存验证集表现最好的模型,而不是最后一轮模型。

训练集和验证集都差,通常是欠拟合。

训练集很好而验证集差,通常是过拟合。

小数据集首先解决过拟合,不要盲目增加模型复杂度。

一个可靠的调参流程,通常遵循:

检查数据
→ 建立基线
→ 调整学习率
→ 调整损失函数
→ 调整数据增强
→ 处理过拟合
→ 修改模型结构
→ 搜索最佳阈值
→ 最终测试

真正高质量的深度学习实验,不是模型结构越复杂越好,也不是尝试的参数越多越好,而是每一次实验都有明确目的,每一个结果都能够得到合理解释。

 

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐