Skip to content

codinggamer-dev/ConvNet

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

11 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿง  ConvNet-NumPy

PyPI Python NumPy CUDA Support License: MIT Status

A clean, educational Convolutional Neural Network framework built from scratch using pure Python and NumPy

This project was created as a school assignment with the goal of understanding deep learning from the ground up. It's designed to be easy to understand and learn from, implementing a complete CNN framework using only NumPy for core computations. Additional modules are used only for visualization (tqdm), optimization (Numba JIT), and optional GPU acceleration (CuPy).


๐ŸŒŸ Features

Core Functionality

  • โœ… Pure NumPy Core - All neural network math implemented from scratch
  • ๐Ÿ”ฅ Complete CNN Support - Conv2D, MaxPool2D, Flatten, Dense layers
  • ๐Ÿ“Š Modern Training - Batch normalization, dropout, early stopping
  • ๐ŸŽฏ Smart Optimizers - SGD with momentum and Adam optimizer
  • ๐Ÿ“ˆ Learning Rate Scheduling - Plateau-based LR reduction
  • ๐Ÿ’พ Model Persistence - Save/load models in HDF5 or NPZ format
  • ๐Ÿ”„ Data Augmentation Ready - Thread-pooled data loading

Performance Enhancements

  • โšก Numba JIT Compilation - Automatic acceleration of critical operations
  • ๐Ÿš€ Optional GPU Support - CUDA acceleration via CuPy
  • ๐Ÿงต Multi-threading - Auto-configured BLAS threads for CPU optimization
  • ๐Ÿ“ฆ Batch Processing - Efficient mini-batch training

Developer Experience

  • ๐Ÿ“š Clean Code - Well-documented and easy to follow
  • ๐ŸŽ“ Educational - Built for learning deep learning fundamentals
  • ๐Ÿ”ง Modular Design - Easy to extend and customize
  • ๐Ÿ’ป Examples Included - MNIST training example and GUI demo

๐Ÿš€ Quick Start

Installation

Install from PyPI (Recommended):

# Install the latest version from PyPI
pip install convnet

# Or install with GPU support
pip install convnet[cuda11]  # For CUDA 11.x
pip install convnet[cuda12]  # For CUDA 12.x
pip install convnet[cuda13]  # For CUDA 13.x

Install from Source:

# Clone the repository
git clone https://github.com/codinggamer-dev/ConvNet-NumPy.git
cd ConvNet-NumPy

# Install in development mode
pip install -e .

Your First Neural Network in 10 Lines

from convnet import Model
from convnet.layers import Conv2D, Activation, MaxPool2D, Flatten, Dense

# Build a simple CNN
model = Model([
    Conv2D(8, (3, 3)), Activation('relu'),
    MaxPool2D((2, 2)),
    Flatten(),
    Dense(10)
])

# Configure training
model.compile(loss='categorical_crossentropy', optimizer='adam', lr=0.001)

# Train on your data
history = model.fit(train_dataset, epochs=10, batch_size=32)

๐Ÿ“– Complete MNIST Example

Here's a full example training a CNN on MNIST:

import numpy as np
from convnet import Model, data
from convnet.layers import Conv2D, Activation, MaxPool2D, Flatten, Dense, Dropout

# Load MNIST data
train_data, test_data = data.load_mnist_gz('mnist_dataset')

# Build the model
model = Model([
    Conv2D(8, (3, 3)), Activation('relu'),
    MaxPool2D((2, 2)),
    Conv2D(16, (3, 3)), Activation('relu'),
    MaxPool2D((2, 2)),
    Flatten(),
    Dense(64), Activation('relu'), Dropout(0.2),
    Dense(10)  # 10 classes for MNIST
])

# Compile with Adam optimizer
model.compile(
    loss='categorical_crossentropy',
    optimizer='adam',
    lr=0.001,
    weight_decay=1e-4,
    clip_norm=5.0
)

# Create validation split
split_idx = int(0.9 * len(train_data))
X_val = train_data.images[split_idx:].astype(np.float32) / 255.0
y_val = train_data.labels[split_idx:]
train_subset = data.Dataset(train_data.images[:split_idx], train_data.labels[:split_idx])

# Train with early stopping and LR scheduling
history = model.fit(
    train_subset,
    epochs=100,
    batch_size=256,
    num_classes=10,
    val_data=(X_val, y_val),
    early_stopping=True,
    patience=15,
    lr_schedule='plateau',
    lr_factor=0.5,
    lr_patience=4
)

# Save the model
model.save('my_mnist_model.hdf5')

# Later... load and use
loaded_model = Model.load('my_mnist_model.hdf5')
predictions = loaded_model.predict(test_images)

๐Ÿงฉ Architecture Components

Available Layers

Layer Description Parameters
Conv2D(filters, kernel_size) 2D Convolutional layer filters, kernel_size, stride, padding
Dense(units) Fully connected layer units, use_bias
MaxPool2D(pool_size) Max pooling layer pool_size, stride
Activation(type) Activation function 'relu', 'tanh', 'sigmoid', 'softmax'
Flatten() Reshape to 1D None
Dropout(rate) Dropout regularization rate (0.0 to 1.0)
BatchNorm2D() Batch normalization momentum, epsilon

Optimizers

  • SGD - Stochastic Gradient Descent with momentum

    model.compile(optimizer='sgd', lr=0.01, momentum=0.9)
  • Adam - Adaptive Moment Estimation (recommended)

    model.compile(optimizer='adam', lr=0.001, beta1=0.9, beta2=0.999)

Loss Functions

  • 'categorical_crossentropy' - For multi-class classification
  • 'mse' - Mean Squared Error for regression

๐ŸŽฎ Examples & Demos

The examples/ directory contains several demonstrations:

1. MNIST Training (mnist_train-example.py)

Complete training pipeline with early stopping, LR scheduling, and model persistence.

python examples/mnist_train-example.py

2. Interactive GUI Demo (mnist_gui.py)

Draw digits and see real-time predictions! Requires tkinter.

python examples/mnist_gui.py

3. GPU Training Test (test_gpu_training.py)

Benchmark GPU vs CPU performance.

python examples/test_gpu_training.py

4. Numba Benchmark (benchmark_numba.py)

Compare Numba JIT vs pure NumPy performance.

python examples/benchmark_numba.py

โš™๏ธ Advanced Features

GPU Acceleration

ConvNet-NumPy automatically detects and uses CUDA GPUs when CuPy is installed:

# Install with GPU support using extras
pip install convnet[cuda11]  # For CUDA 11.x
pip install convnet[cuda12]  # For CUDA 12.x
pip install convnet[cuda13]  # For CUDA 13.x

# Or install CuPy separately
pip install cupy-cuda11x  # For CUDA 11.x
pip install cupy-cuda12x  # For CUDA 12.x
pip install cupy-cuda13x  # For CUDA 13.x

The framework will automatically:

  • Move tensors to GPU
  • Use GPU-accelerated operations
  • Handle CPU โ†” GPU transfers transparently

Regularization

model.compile(
    optimizer='adam',
    lr=0.001,
    weight_decay=1e-4,  # L2 regularization
    clip_norm=5.0        # Gradient clipping
)

Learning Rate Scheduling

history = model.fit(
    dataset,
    lr_schedule='plateau',  # Reduce LR when validation plateaus
    lr_factor=0.5,         # Multiply LR by 0.5
    lr_patience=5,         # Wait 5 epochs before reducing
    lr_min=1e-6           # Minimum learning rate
)

Early Stopping

history = model.fit(
    dataset,
    val_data=(X_val, y_val),
    early_stopping=True,
    patience=10,      # Stop after 10 epochs without improvement
    min_delta=0.001   # Minimum change to qualify as improvement
)

๐Ÿ“Š Model Inspection

# Print model architecture and parameter counts
model.summary()

# Output:
# Model summary:
# Conv2D: params=80
# Activation: params=0
# MaxPool2D: params=0
# Conv2D: params=1168
# Activation: params=0
# MaxPool2D: params=0
# Flatten: params=0
# Dense: params=40064
# Activation: params=0
# Dropout: params=0
# Dense: params=650
# Total params: 41962

๐Ÿ”ง Configuration

Thread Configuration

The framework automatically configures BLAS threads for optimal CPU performance:

import os
os.environ['NN_DISABLE_AUTO_THREADS'] = '1'  # Disable auto-configuration
import convnet

Custom RNG Seeds

For reproducibility:

import numpy as np
rng = np.random.default_rng(seed=42)

model = Model([
    Conv2D(8, (3, 3), rng=rng),
    Dense(10, rng=rng)
])

๐Ÿ“š Understanding the Code

This project is designed for learning. Here's how to explore:

Start Here

  1. convnet/layers.py - See how Conv2D, Dense, and other layers work
  2. convnet/model.py - Understand forward/backward propagation
  3. convnet/optim.py - Learn how optimizers update weights
  4. examples/mnist_train-example.py - Complete training example

Key Concepts Implemented

  • ๐Ÿ”„ Backpropagation - Full gradient computation chain
  • ๐Ÿ“‰ Gradient Descent - SGD and Adam optimization
  • ๐ŸŽฒ Weight Initialization - Glorot/Xavier uniform
  • ๐Ÿงฎ Convolution Math - Pure NumPy implementation
  • ๐Ÿ“Š Batch Normalization - Running mean/variance tracking
  • ๐ŸŽฏ Softmax & Cross-Entropy - Numerically stable implementation

๐ŸŽฏ Project Goals

This framework was built to:

  1. Understand deep learning by implementing it from scratch
  2. Learn how CNNs actually work under the hood
  3. Teach others the fundamentals of neural networks
  4. Provide a clean, readable codebase for education

Not for production use - Use PyTorch, TensorFlow, or JAX for real applications!


๐Ÿ“ฆ Project Structure

ConvNet-NumPy/
โ”œโ”€โ”€ convnet/              # Core framework
โ”‚   โ”œโ”€โ”€ __init__.py       # Package initialization & auto-config
โ”‚   โ”œโ”€โ”€ layers.py         # Layer implementations
โ”‚   โ”œโ”€โ”€ model.py          # Model class with training loop
โ”‚   โ”œโ”€โ”€ optim.py          # Optimizers (SGD, Adam)
โ”‚   โ”œโ”€โ”€ losses.py         # Loss functions
โ”‚   โ”œโ”€โ”€ data.py           # Data loading utilities
โ”‚   โ”œโ”€โ”€ utils.py          # Helper functions
โ”‚   โ”œโ”€โ”€ cuda.py           # GPU acceleration wrapper
โ”‚   โ”œโ”€โ”€ numba_ops.py      # JIT-compiled operations
โ”‚   โ””โ”€โ”€ io.py             # Model save/load
โ”œโ”€โ”€ examples/             # Example scripts
โ”‚   โ”œโ”€โ”€ mnist_train-example.py
โ”‚   โ”œโ”€โ”€ mnist_gui.py
โ”‚   โ”œโ”€โ”€ test_gpu_training.py
โ”‚   โ””โ”€โ”€ benchmark_numba.py
โ”œโ”€โ”€ requirements.txt      # Dependencies
โ”œโ”€โ”€ setup.py              # Package setup
โ”œโ”€โ”€ LICENSE.md            # MIT License
โ””โ”€โ”€ README.md             # This file

๐Ÿค Contributing

This is an educational project, but contributions are welcome! Feel free to:

  • ๐Ÿ› Report bugs
  • ๐Ÿ’ก Suggest improvements
  • ๐Ÿ“– Improve documentation
  • โœจ Add new features

๐Ÿ“ Requirements

Core Dependencies

  • Python 3.8 or higher
  • NumPy โ‰ฅ 1.20.0 (the star of the show! ๐ŸŒŸ)
  • tqdm โ‰ฅ 4.60.0 (progress bars)
  • h5py โ‰ฅ 3.0.0 (model serialization)
  • Numba โ‰ฅ 0.56.0 (JIT compilation)

Optional Dependencies

  • CuPy โ‰ฅ 10.0.0 (GPU acceleration)
  • tkinter (for GUI demo, usually included with Python)

๐Ÿ“„ License

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

Copyright (c) 2025 Tim Bauer


๐Ÿ™ Acknowledgments

  • Built as a school project to learn deep learning fundamentals
  • Inspired by PyTorch and TensorFlow's clean APIs
  • Thanks to the NumPy, Numba, and CuPy teams for amazing tools
  • MNIST dataset by Yann LeCun and Corinna Cortes - the perfect dataset for learning CNNs

๐Ÿ’ฌ Questions?

Feel free to open an issue on GitHub if you have questions or run into problems!


Made with โค๏ธ for learning and education

โญ If this helped you understand CNNs better, consider giving it a star! โญ

About

A multi-threaded Neural Network (mostly for ConvNets) module, only with NumPy and TQDM.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Languages