【AI课程领学】第三课3/5:深度学习基本结构——层、激活、损失、正则化、优化器与训练循环(含完整 PyTorch 训练骨架)
【AI课程领学】第三课3/5:深度学习基本结构——层、激活、损失、正则化、优化器与训练循环(含完整 PyTorch 训练骨架)
·
【AI课程领学】第三课3/5:深度学习基本结构——层、激活、损失、正则化、优化器与训练循环(含完整 PyTorch 训练骨架)
【AI课程领学】第三课3/5:深度学习基本结构——层、激活、损失、正则化、优化器与训练循环(含完整 PyTorch 训练骨架)
文章目录
欢迎铁子们点赞、关注、收藏!
祝大家逢考必过!逢投必中!上岸上岸上岸!upupup
大多数高校硕博生毕业要求需要参加学术会议,发表EI或者SCI检索的学术论文会议论文。详细信息可扫描博文下方二维码 “
学术会议小灵通”或参考学术信息专栏:https://ais.cn/u/mmmiUz
详细免费的AI课程可在这里获取→www.lab4ai.cn
1. 为什么“基本结构”很关键?
无论你做 CNN、Transformer、U-Net、Diffusion,本质都逃不开一个统一骨架:
- 数据 → 模型前向 → 损失 → 反向梯度 → 参数更新 → 验证与保存
理解这个骨架,你才能看懂任何深度学习论文与代码库。
2. 深度学习系统的 6 个组件
2.1 数据(Data)
- 输入张量形状(batch, channels, height, width)或(batch, features)
- 归一化/标准化是训练稳定性的关键之一
2.2 模型(Model)
由“层(Layer)”堆叠:
- Linear / Conv / Attention
- Norm(BatchNorm/LayerNorm)
- Dropout
- Residual connections
2.3 激活函数(Activation)
提供非线性,否则多层线性仍等价于一层线性。
常见:
- ReLU:稳定、快
- GELU:Transformer 常用
- Sigmoid/Tanh:容易饱和导致梯度小(但在门控结构仍常见)
2.4 损失函数(Loss)
- 回归:MSE、MAE、Huber
- 分类:Cross Entropy
- 分割:Dice、IoU Loss
- 检测:Focal Loss 等
2.5 正则化(Regularization)
防止过拟合与提升泛化:
- L2(weight decay)
- Dropout
- 数据增强
- Early stopping
2.6 优化器(Optimizer)
- SGD:经典,配合 momentum
- Adam/AdamW:默认强基线
- 学习率策略:cosine、step、warmup
3. 一个“可以复用到任何任务”的 PyTorch 训练骨架(建议你收藏当模板)
import torch
import torch.nn as nn
import torch.optim as optim
class Net(nn.Module):
def __init__(self, in_dim, out_dim):
super().__init__()
self.net = nn.Sequential(
nn.Linear(in_dim, 256),
nn.ReLU(),
nn.Dropout(0.2),
nn.Linear(256, 256),
nn.ReLU(),
nn.Linear(256, out_dim)
)
def forward(self, x):
return self.net(x)
def train_one_epoch(model, loader, optimizer, loss_fn, device):
model.train()
total_loss = 0.0
for X, y in loader:
X, y = X.to(device), y.to(device)
pred = model(X)
loss = loss_fn(pred, y)
optimizer.zero_grad()
loss.backward()
optimizer.step()
total_loss += loss.item() * X.size(0)
return total_loss / len(loader.dataset)
@torch.no_grad()
def evaluate(model, loader, loss_fn, device):
model.eval()
total_loss = 0.0
for X, y in loader:
X, y = X.to(device), y.to(device)
pred = model(X)
loss = loss_fn(pred, y)
total_loss += loss.item() * X.size(0)
return total_loss / len(loader.dataset)
def fit(model, train_loader, val_loader, epochs=50, lr=1e-3, wd=1e-4):
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model = model.to(device)
loss_fn = nn.MSELoss()
optimizer = optim.AdamW(model.parameters(), lr=lr, weight_decay=wd)
best_val = float("inf")
for epoch in range(1, epochs+1):
tr = train_one_epoch(model, train_loader, optimizer, loss_fn, device)
va = evaluate(model, val_loader, loss_fn, device)
if va < best_val:
best_val = va
torch.save(model.state_dict(), "best.pt")
if epoch % 5 == 0:
print(f"[{epoch:03d}] train={tr:.4f} val={va:.4f} best={best_val:.4f}")
print("Saved best model to best.pt")
你之后做任何任务(回归/分类/分割)都只需要改:
- 模型最后一层维度
- loss_fn
- evaluate 的指标
4. 基本结构与深度学习“训练稳定性”
训练稳定通常取决于:
- 输入尺度是否合理(标准化)
- 学习率是否合适
- 是否使用 Norm(BN/LN)
- 初始化是否合理(PyTorch 默认一般够用)
- batch size 与优化器匹配
5. 小结
- 结构的本质是:把“函数”写出来,并让它能被梯度驱动地优化。
下一篇我们专讲“前馈运算”,把 forward 的每一步都讲透。
更多推荐


所有评论(0)