理解机器学习中的 Training、Validation、Testing
——模型如何学习、优化与最终评估的完整指南**
在机器学习和深度学习的世界里,Training(训练)、Validation(验证)、Testing(测试) 是构建优质模型的三大核心步骤。
很多初学者经常混淆它们的作用,或者不知道为什么必须划分这三类数据集。
本指南将以清晰、系统的方式解释整个流程,让你彻底理解模型如何从“学习”走向“真正能用”。
🔥 第1部分 — Training(训练):模型真正学习的阶段
训练阶段是模型根据数据更新参数、学习规律的过程。
每个 Epoch 包含:
- Forward Pass:模型进行前向推理,给出预测
- Loss 计算:计算预测与真实值之间的误差
- Backpropagation(反向传播):计算梯度
- Optimizer 更新参数
- 重复上述步骤多轮训练
✔ 训练的目标
- 从数据中学习模式
- 更新权重,使模型更准确
- 降低训练损失
✔ PyTorch 示例
model.train()
for x, y in train_loader:
optimizer.zero_grad()
preds = model(x)
loss = criterion(preds, y)
loss.backward()
optimizer.step()
训练是模型“变得更聪明”的过程。
🔍 第2部分 — Validation(验证):选择最佳模型的过程
验证阶段 不会更新模型权重。
这一步的目的是检查模型在未见过的数据上的表现,并用于:
- 判断是否过拟合
- 调整超参数(learning rate、dropout、网络结构等)
- 选择最佳模型
验证时我们会:
- 使用
model.eval() - 使用
torch.no_grad()(不计算梯度 → 不训练) - 计算验证损失
- 跟踪验证指标(如 accuracy、F1-score)
✔ PyTorch 示例
model.eval()
with torch.no_grad():
for x, y in val_loader:
preds = model(x)
val_loss += criterion(preds, y).item()
✔ 为什么验证非常重要?
- 防止模型过拟合训练集
- 帮助调整超参数
- 找到训练过程中性能最佳的模型(Best Checkpoint)
⭐ 第3部分 — “每个 Epoch 都验证 → 保存最佳模型”
每训练完一轮(epoch),就用验证集评估模型。
如果当前验证指标比之前最好成绩更优,就保存该模型:
| Epoch | Train Loss | Val Loss | 操作 |
|---|---|---|---|
| 1 | 0.50 | 0.42 | 保存 |
| 2 | 0.40 | 0.36 | 保存 |
| 3 | 0.32 | 0.30 | 保存 |
| 4 | 0.28 | 0.35 | 不保存 |
| 5 | 0.26 | 0.31 | 不保存 |
最佳模型来自 第3轮,即便后面的训练轮数更多。
这样可以避免最终模型被“过拟合后的结果”覆盖。
⚙️ 第4部分 — Early Stopping:自动停止训练避免浪费时间
Early Stopping(早停)用于在验证集长期不再提升时提前终止训练。
例如:
patience = 5
含义:
👉 如果连续 5 个 epoch 验证效果没提升 → 停止训练
优点:
- 避免过拟合
- 节省训练时间
- 自动找到最佳收敛点
🧪 第5部分 — Testing(测试):最终性能评估
测试集用于对最终模型做一次“期末考试”。
特点:
- 只使用一次
- 不能参与训练或调参
- 用于评估最终泛化能力
测试阶段使用的是:
👉 验证表现最好的模型(Best Checkpoint)
测试集告诉我们:
- 模型在真实世界能否表现良好
- 模型是否泛化
- 是否达到生产要求
📊 第6部分 — 完整工作流程(Mermaid.js 图)
flowchart TD
A[Dataset] --> B["划分:训练集 / 验证集 / 测试集"]
B --> C["Training Loop<br>前向传播 + 反向传播 + 更新参数"]
C --> D["Validation Loop<br>仅前向传播,无梯度"]
D --> E{"验证效果更好吗?"}
E -->|"是"| F["保存最佳模型"]
E -->|"否"| G["不保存"]
F --> H["继续训练"]
G --> H["继续训练"]
H --> I{"训练完成<br>或 Early Stopping?"}
I -->|"否"| C
I -->|"是"| J["加载最佳模型"]
J --> K["测试集评估"]
K --> L["最终性能指标"]
🧠 总结
| 阶段 | 作用 | 是否学习? |
|---|---|---|
| Training(训练) | 通过数据更新模型权重 | ✔ 是 |
| Validation(验证) | 选模型、调参、检测过拟合 | ❌ 否 |
| Testing(测试) | 最终评价模型性能 | ❌ 否 |
✨ 标准工作流程:
训练 → 验证 → 保存最佳模型 → 测试(一次)
这是确保模型既能学习得好,又能泛化得好的黄金流程。
Get in Touch with us
Related Posts
- The Accounting Software Your Firm Uses Is Built for Your Clients, Not for You
- 2026年本地大模型(Local LLM)硬件选型实用指南
- Choosing Hardware for Local LLMs in 2026: A Practical Sizing Guide
- Why Your Finance Team Spends 40% of Their Week on Work AI Can Now Do
- 用纯开源方案搭建生产级 SOC:Wazuh + DFIR-IRIS + 自研集成层实战记录
- How We Built a Real Security Operations Center With Open-Source Tools
- FarmScript:我们如何从零设计一门农业IoT领域特定语言
- FarmScript: How We Designed a Programming Language for Chanthaburi Durian Farmers
- 智慧农业项目为何止步于试点阶段
- Why Smart Farming Projects Fail Before They Leave the Pilot Stage
- ERP项目为何总是超支、延期,最终令人失望
- ERP Projects: Why They Cost More, Take Longer, and Disappoint More Than Expected
- AI Security in Production: What Enterprise Teams Must Know in 2026
- 弹性无人机蜂群设计:具备安全通信的无领导者容错网状网络
- Designing Resilient Drone Swarms: Leaderless-Tolerant Mesh Networks with Secure Communications
- NumPy广播规则详解:为什么`(3,)`和`(3,1)`行为不同——以及它何时会悄悄给出错误答案
- NumPy Broadcasting Rules: Why `(3,)` and `(3,1)` Behave Differently — and When It Silently Gives Wrong Answers
- 关键基础设施遭受攻击:从乌克兰电网战争看工业IT/OT安全
- Critical Infrastructure Under Fire: What IT/OT Security Teams Can Learn from Ukraine’s Energy Grid
- LM Studio代码开发的系统提示词工程:`temperature`、`context_length`与`stop`词详解













