import torch, torch.nn as nn, torch.optim as optim
model = nn.Sequential(
nn.Linear(784, 256), nn.BatchNorm1d(256), nn.ReLU(),
nn.Linear(256, 128), nn.BatchNorm1d(128), nn.ReLU(),
nn.Linear(128, 10)
)
optimizer = optim.AdamW(model.parameters(), lr=1e-3)
criterion = nn.CrossEntropyLoss(label_smoothing=0.1)
# 初始化权重 — 我们生来就带着某些天赋(随机初始化)
for epoch in range(100):
# 前向传播 — 用现有知识理解世界
predictions = model(train_images)
# 计算损失 — 认识到自己的不足
loss = criterion(predictions, train_labels)
# 反向传播 — 从错误中学习,计算每个权重的梯度
loss.backward()
# 更新权重 — 成长和改变,沿梯度方向微调参数
optimizer.step()
optimizer.zero_grad()
# 最终,我们不是要完美复制过去,而是要学会泛化到未来