生成对抗网络(GAN)生成手写数字图片实验
大约 2 分钟人工智能
一、实验目的
- 理解生成对抗网络(GAN)的基本结构与对抗训练原理。
- 掌握生成器(Generator)与判别器(Discriminator)的功能与关系。
- 基于 MNIST 手写数字数据集,使用 GAN 实现手写数字 5 的自动生成。
- 观察训练过程中损失函数变化,分析模型训练效果。
二、实验环境
- 训练设备:CPU
- 开发语言:Python
- 框架:PyTorch
- 数据集:MNIST 手写数字数据集(train-images-idx3-ubyte 等本地文件)
- 训练用:train-images-idx3-ubyte + train-labels-idx1-ubyte
- 用train-images作为真实样本,训练生成器和判别器
- 用train-labels筛选出数字 5 的样本,实现 “仅生成数字 5” 的需求
- 测试用:t10k-images-idx3-ubyte + t10k-labels-idx1-ubyte
- 可用于验证模型泛化能力,或对比生成图像与真实测试图像的相似度
- 训练用:train-images-idx3-ubyte + train-labels-idx1-ubyte
- 训练轮数:20轮/30轮
Python项目结构如下:
your_project/
├── data/
│ └── MNIST/
│ └── raw/
│ ├── train-images-idx3-ubyte
│ ├── train-labels-idx1-ubyte
│ ├── t10k-images-idx3-ubyte
│ └── t10k-labels-idx1-ubyte
└── gan_mnistdemo.py # 我们要写的代码三、实验原理
GAN 由生成器和判别器两个网络组成,二者进行对抗训练:
- 生成器:输入随机噪声,生成假的手写数字图片,目标是骗过判别器。
- 判别器:输入图片,判断是真实图片还是生成图片,目标是准确区分真假。
- 训练过程:二者相互博弈、交替更新,最终达到纳什均衡,生成器可输出高质量手写数字。

四、实验要求
- 从网上或者教师提供的数据集中下载 MNIST 数据集,并使用 PyTorch 的 torchvision 库进行数据预处理。
- 设计生成器(Generator)和判别器(Discriminator)的网络结构,并使用 PyTorch 的 nn.Module 类进行实现。
- 每个固定代数生成一次图片,比较随代数增加图像的清晰程度。思考在一定清晰程度之后图像清晰度不在变化的原因。
- 训练轮数:20轮/30轮
五、实验结果与分析(含日志说明

截自己的图,并说明含义
六、实验心得体会
结合实验结果书写体会
