
深度学习项目标准模板:训练、验证、日志和配置
把散落在单文件里的 PyTorch 代码整理成可维护项目:配置、数据、模型、训练引擎、日志、检查点和推理各归其位,并保留可复现实验所需信息。
和「PyTorch」相关的文章都收在这里,方便沿着同一个主题继续读下去。
同一主题下的内容,会更容易看出思路是怎么慢慢长出来的。

把散落在单文件里的 PyTorch 代码整理成可维护项目:配置、数据、模型、训练引擎、日志、检查点和推理各归其位,并保留可复现实验所需信息。

准确率只能告诉你错了多少,混淆矩阵和错误样本才能告诉你错在哪里。这篇建立一套从类别指标、混淆矩阵到高置信度错误图的分析流程。

从数据增强、CNN、训练循环、验证指标到保存最佳权重,完整跑通一个 PyTorch 图像分类项目,并理解每一段代码为什么存在。

一张普通图片进入 PyTorch 后为什么会变成 [B, C, H, W]?这篇从 PIL、NumPy、Tensor、归一化和 DataLoader 出发,把图像送进 CNN 前的完整数据流讲清楚。

图像不能直接用全连接层处理——参数太多、丢失空间结构。CNN 用卷积提取局部特征,用池化压缩尺寸。这篇用最小代码讲清卷积核在做什么。

训练好的模型不能只活在内存里。这篇讲清怎么把模型存成文件、怎么加载回来预测、怎么做批量推理,以及断点续训的完整做法。

前面用造的数据练手,这次用真实 CSV 表格数据。从读取、预处理、模型搭建到训练评估,走完表格分类的完整流程。

准确率 99% 但不知道模型怎么分的?这篇把分类模型的决策边界画出来,让你亲眼看到模型在二维空间画了一条什么形状的分界线。

线性回归是连续预测,分类是离散判断。这篇从零搭建一个二分类神经网络,用二维数据让你能"看到"模型怎么把两类点分开。

前面 14 篇学了原理,现在第一次完整跑一个深度学习项目——从造数据、建模型、训练到预测。用最简单的线性回归,把全流程跑通。

训练 loss 不降?降了又升?训练好测试差?这篇把前面所有训练知识串成一套系统化的诊断流程,让你看曲线就知道问题在哪。

模型训练集准确率 99%,测试集只有 70%——这是过拟合。Weight Decay、Dropout、Early Stopping、数据增强怎么选?这篇建立完整的正则化方法地图。

RuntimeError: Expected all tensors to be on the same device —— 这是你用 GPU 训练时最常遇到的报错。模型在 GPU、数据在 CPU,它们碰不到一起。这篇讲清设备迁移的完整流程。

学习率是训练里最敏感的超参数——太大 loss 爆炸,太小 loss 不动。这篇讲清怎么判断学习率过大过小,以及 StepLR、CosineAnnealing 等衰减策略怎么选。

Adam 把 Momentum 的"方向惯性"和 RMSProp 的"自适应步长"合体,开箱即用。AdamW 修复了 Adam 权重衰减的耦合 bug,成为 Transformer 的标配。

SGD 给所有参数同一个学习率。但有些参数变化剧烈、有些几乎不动,统一步长不合理。AdaGrad 和 RMSProp 让每个参数有自己的自适应学习率。

梯度下降是所有优化器的祖宗。SGD 是最朴素的实现,Momentum 加了惯性。搞懂这两个,才能理解后面 Adam 在"智能"什么。

把所有权重初始化成 0,模型直接学不动。初始化成太大的随机数,梯度爆炸。初始化是训练的起跑线,起跑线错了后面全白费。这篇讲清为什么初始化重要、常见方法怎么选。

所有 PyTorch 模型都继承 nn.Module。但你可能不知道,它帮你做了参数注册、子模块管理、train/eval 切换、设备迁移四件大事。这篇把 nn.Module 的黑盒拆开。

第 17 篇你学了 DataLoader 的基本用法。但 batch_size 调多大、shuffle 为什么必须开、num_workers 设几、drop_last 有什么用——这些细节决定训练是 5 分钟还是 5 小时。

PyTorch 内置数据集只够入门练手。真实项目里你的数据可能是 CSV、文件夹图片、JSON 文本——这时候必须自己写 Dataset。这篇把 __len__ 和 __getitem__ 讲透,附带三个真实场景。

reshape 和 view 看起来一样,transpose 和 permute 也像兄弟,广播机制报错信息又长又看不懂。这篇用最小代码讲清它们的区别,让你不再瞎试。

深度学习代码 80% 的报错都是 Shape 不匹配。但 Shape 不只是维度对齐,它是模型每一层之间的数据契约。这篇把 batch、特征、类别维度和常见的 Shape 流水线一次讲透。

你写了 optimizer.zero_grad() 却不知道为什么要写。这一篇把 PyTorch 的动态计算图、叶子节点和梯度累积机制讲透,让你彻底明白"清梯度"不是仪式,是物理必然。

补齐 PyTorch 实际训练中最常用的 Tensor 操作:数据类型、设备迁移、索引、切片和布尔筛选。

从一个最小例子理解 PyTorch 如何记录计算过程、自动求梯度,以及为什么训练前要清空梯度。

用“预测、算错、追责、更新”串起一次神经网络训练,并用最小 PyTorch 代码看清 forward、backward 和 step 的分工。

Tensor 可以理解成更通用的数组,它承载数据、参数和梯度,是 PyTorch 训练流程的基础。

Linear 层本质上是一次线性变换,它把输入特征通过权重矩阵和偏置映射到新的输出空间。

DataLoader 负责把数据按批次送进模型,并处理 shuffle、batch size 和多进程加载等训练细节。

从准备数据、定义模型、选择损失函数和优化器,到训练循环和验证评估,把 PyTorch 训练主线串起来。