PyTorch implementation of Deep Convolutional GAN (DCGAN) trained on MNIST dataset to generate handwritten digits.
- Generator Loss: 3.0775
- Discriminator Loss: 0.5094
- Training Time: 17.3 minutes
- D(fake) Accuracy: ~98%
- Generator Loss: 1.8848
- Discriminator Loss: 0.7077
- Training Time: 8.6 minutes
- D(fake) Accuracy: ~96%
dcgan_mnist_project/
├── README.md
├── requirements.txt
├── .gitignore
├── images/ # Original training generated samples
├── images_tuned/ # Tuned training generated samples
├── visualizations/ # Training curves and comparisons
├── checkpoints/ # Saved model weights (.pth files)
└── notebooks/ # Jupyter notebook implementation
Generator:
- Input: 100-dimensional noise vector
- Output: 28×28 grayscale images
- Architecture: Linear layer + transposed convolutions with batch normalization
Discriminator:
- Input: 28×28 grayscale images
- Output: Binary classification (real/fake probability)
- Architecture: Convolutional layers with batch normalization and LeakyReLU
- Discriminator Dominance: Both training runs experienced discriminator dominance (D_fake > 95%)
- Hyperparameter Impact: Lowering discriminator learning rate from 0.0002 to 0.0001 improved loss values by 39%
- Visual Quality vs Metrics: Generated high-quality digits despite suboptimal loss metrics
- Training Efficiency: Tuned approach achieved comparable results in half the epochs (25 vs 50)
torch>=2.0.0
torchvision>=0.15.0
matplotlib>=3.5.0
numpy>=1.21.0
Implementation based on DCGAN paper: Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks (https://arxiv.org/abs/1511.06434)