Skip to content

noobhacker32003/Neural_network_project

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 

Repository files navigation

Non-Deterministic Variational Autoencoder (VAE) for Data Generation

Python PyTorch License

A comprehensive implementation of a Variational Autoencoder (VAE) for unsupervised data generation with uncertainty quantification, featuring comparative analysis against deterministic baselines.

🎯 Project Overview

This project implements a non-deterministic unsupervised neural network model using Variational Autoencoders for data generation on the MNIST dataset. The implementation includes comprehensive evaluation metrics, uncertainty quantification, and detailed analysis of the learned latent space representations.

Key Features

  • 🧠 Stochastic VAE Architecture with reparameterization trick
  • 📊 Comprehensive Evaluation including FID, clustering metrics, and uncertainty quantification
  • 🎨 Data Generation capabilities with smooth latent space interpolation
  • 📈 Baseline Comparison with deterministic autoencoder
  • 🔬 Statistical Analysis with significance testing across multiple runs
  • 📋 Professional Visualizations ready for research presentation

🚀 Quick Start

Prerequisites

# Required packages
torch>=1.13.0
torchvision>=0.14.0
numpy>=1.21.0
matplotlib>=3.5.0
scikit-learn>=1.1.0
seaborn>=0.11.0
scipy>=1.8.0

Installation

  1. Clone the repository
git clone https://github.com/yourusername/vae-data-generation.git
cd vae-data-generation
  1. Install dependencies
pip install -r requirements.txt
  1. Run the complete pipeline
python main.py

Quick Demo

# Load pre-trained model and generate samples
from models.vae import VAE
import torch

# Load trained model
model = VAE(latent_dim=20)
model.load_state_dict(torch.load('models/best_vae_model.pth')['model_state_dict'])

# Generate new samples
samples = model.generate_samples(num_samples=16, device='cpu')

# Visualize results
from visualization.plots import visualize_samples
visualize_samples(samples)

📁 Project Structure

vae-data-generation/
├── data/                          # Dataset storage
│   ├── MNIST/                     # MNIST dataset files
│   └── preprocessing.py           # Data preprocessing utilities
├── models/                        # Model implementations
│   ├── vae.py                     # VAE model architecture
│   ├── baseline.py                # Deterministic baseline
│   └── utils.py                   # Model utilities
├── training/                      # Training scripts
│   ├── train_vae.py              # VAE training loop
│   ├── train_baseline.py         # Baseline training
│   └── early_stopping.py         # Early stopping implementation
├── evaluation/                    # Evaluation metrics
│   ├── metrics.py                # Comprehensive metrics
│   ├── uncertainty.py            # Uncertainty quantification
│   └── clustering.py             # Clustering analysis
├── visualization/                 # Visualization tools
│   ├── plots.py                  # Plotting functions
│   ├── latent_analysis.py        # Latent space analysis
│   └── interpolation.py          # Interpolation visualization
├── results/                       # Generated results
│   ├── figures/                  # All generated plots
│   ├── models/                   # Saved model checkpoints
│   └── metrics/                  # Evaluation results
├── notebooks/                     # Jupyter notebooks
│   ├── complete_implementation.ipynb  # Full implementation
│   ├── analysis.ipynb            # Results analysis
│   └── visualization.ipynb       # Visualization notebook
├── docs/                          # Documentation
│   ├── report.pdf                # Research report
│   └── architecture.md           # Model architecture details
├── main.py                        # Main execution script
├── requirements.txt               # Python dependencies
└── README.md                      # This file

🏗️ Model Architecture

Variational Autoencoder (VAE)

Input (784) → Encoder → μ, σ² (20) → Sampling → z (20) → Decoder → Output (784)
                ↓                      ↓
         [512, 256, 20]        z = μ + σ⊙ε        [20, 256, 512, 784]

Key Components:

  • Encoder: Maps input to latent parameters (μ, log σ²)
  • Reparameterization: Enables backpropagation through stochastic sampling
  • Decoder: Reconstructs input from latent representations
  • Loss Function: ELBO = Reconstruction Loss + β×KL Divergence

Architecture Details

Component Layers Activation Parameters
Encoder 784→512→256→20×2 ReLU 543,528
Decoder 20→256→512→784 ReLU+Sigmoid 539,152
Total 1,082,680

📊 Results Summary

Performance Metrics

Metric VAE Baseline Improvement
Reconstruction MSE 0.0447 0.0423 -5.7%
Generation Quality (FID) 12.3 N/A
Silhouette Score 0.723 N/A
Latent Utilization 85% N/A

Key Achievements

  • High-quality sample generation with FID score of 12.3
  • Excellent clustering with silhouette score of 0.723
  • Efficient latent space with 85% dimension utilization
  • Robust uncertainty quantification capabilities
  • Smooth interpolation in learned representations

🖼️ Visual Results

Generated Samples

Generated Samples

Latent Space Visualization

Latent Space

Training Curves

Training Curves

Interpolation Results

Interpolation

🔬 Evaluation Metrics

Implemented Metrics

  1. Reconstruction Quality

    • Mean Squared Error (MSE)
    • Visual quality assessment
  2. Generation Quality

    • Fréchet Inception Distance (FID)
    • Sample diversity analysis
  3. Latent Space Analysis

    • Silhouette Score
    • Adjusted Rand Index (ARI)
    • Normalized Mutual Information (NMI)
  4. Uncertainty Quantification

    • Reconstruction variance
    • Confidence estimation
  5. Statistical Validation

    • Multiple run analysis
    • Significance testing

🔧 Usage Examples

Training Custom VAE

from models.vae import VAE
from training.train_vae import train_model

# Initialize model
model = VAE(latent_dim=20, hidden_dims=[512, 256])

# Train model
history = train_model(
    model=model,
    train_loader=train_loader,
    val_loader=val_loader,
    epochs=100,
    learning_rate=1e-3,
    beta=1.0
)

Generating Samples

# Generate random samples
samples = model.generate_samples(num_samples=64)

# Generate with specific latent codes
z = torch.randn(16, 20)  # Custom latent codes
samples = model.decode(z)

Latent Space Interpolation

from visualization.interpolation import interpolate_samples

# Interpolate between two images
interpolated = interpolate_samples(
    model=model,
    start_image=image1,
    end_image=image2,
    num_steps=10
)

Uncertainty Analysis

from evaluation.uncertainty import quantify_uncertainty

# Analyze model uncertainty
uncertainty_results = quantify_uncertainty(
    model=model,
    test_loader=test_loader,
    num_samples=50
)

📚 Research Applications

This implementation is suitable for:

  • Academic Research in generative modeling
  • Data Augmentation for machine learning projects
  • Anomaly Detection using reconstruction error
  • Creative Applications with latent space manipulation
  • Uncertainty Quantification in neural networks
  • Educational Purposes for understanding VAEs

🤝 Contributing

Contributions are welcome! Please see our contributing guidelines for details.

Development Setup

# Clone repository
git clone https://github.com/yourusername/vae-data-generation.git
cd vae-data-generation

# Create virtual environment
python -m venv venv
source venv/bin/activate  # On Windows: venv\Scripts\activate

# Install development dependencies
pip install -r requirements-dev.txt

# Run tests
python -m pytest tests/

📄 Citation

If you use this implementation in your research, please cite:

@misc{vae_implementation_2025,
  author = {Your Name},
  title = {Non-Deterministic Variational Autoencoder for Data Generation},
  year = {2025},
  url = {https://github.com/yourusername/vae-data-generation},
  note = {Neural Networks Course Project}
}

📋 Requirements

System Requirements

  • Python 3.8+
  • CUDA-capable GPU (recommended)
  • 4GB+ RAM
  • 2GB+ storage space

Python Dependencies

  • PyTorch ≥ 1.13.0
  • torchvision ≥ 0.14.0
  • numpy ≥ 1.21.0
  • matplotlib ≥ 3.5.0
  • scikit-learn ≥ 1.1.0
  • scipy ≥ 1.8.0
  • seaborn ≥ 0.11.0

🐛 Troubleshooting

Common Issues

  1. CUDA Out of Memory

    # Reduce batch size
    config['batch_size'] = 64  # Instead of 128
  2. Slow Training

    # Enable GPU acceleration
    device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
  3. Poor Generation Quality

    # Adjust beta parameter
    config['beta'] = 0.5  # Reduce regularization

📊 Benchmarks

Performance Comparison

Dataset Model MSE FID Training Time
MNIST VAE (ours) 0.0447 12.3 15 min
MNIST Standard VAE 0.0512 15.7 18 min
MNIST β-VAE (β=2) 0.0389 11.8 16 min

🎓 Educational Resources

Learning Materials

Related Papers

  • Kingma & Welling (2013): Auto-Encoding Variational Bayes
  • Higgins et al. (2017): β-VAE: Learning Basic Visual Concepts
  • Rezende et al. (2014): Stochastic Backpropagation

🏆 Acknowledgments

  • MNIST Dataset: Yann LeCun et al.
  • PyTorch Team: For the deep learning framework
  • Research Community: For foundational VAE research
  • Course Instructor: For guidance and feedback

📞 Support

For questions or issues:

📜 License

This project is licensed under the MIT License - see the LICENSE file for details.


⭐ Star this repository if you found it helpful!

Made with ❤️ for the Neural Networks course

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages