这节课的目标:用最小实现跑通 Vanilla GAN 的训练闭环,理解对抗训练的基本逻辑:
- 判别器
D学会区分真/假 - 生成器
G学会“骗过”判别器 - 两个网络交替更新,loss 不一定单调下降,但训练应该稳定、无 NaN
离线冒烟(不下载数据):
python -m tracks.generative.lesson_02_gan_mnist.train --dataset fake --epochs 1 --max-train-batches 2 --device cpu --run-name smoke如果你安装了 torchvision,可以跑真实 MNIST(会下载数据):
python -m tracks.generative.lesson_02_gan_mnist.train --dataset mnist --epochs 10outputs/generative/lesson_02_gan_mnist/<run_name>/
config.jsonmetrics.jsonlsamples.pt(以及可选的samples.png)logs/train.logcheckpoints/checkpoint.pt(包含 G/D 的参数)
- 给
D加 label smoothing(例如 real label=0.9),观察稳定性。 - 把 BCE 换成 hinge loss 或 WGAN-GP(进阶)。
- 把结构从 MLP 换成小卷积(DCGAN 风格)。