Skip to main content

This is a machine learning--more specifically deep learning--library from my independent study on deep learning. This library is both a result of my learning and a tool for AI development.

Project description

Deeplearning Package

Overview

This package is designed to be similar to the PyTorch system of a building block system. Providing the functions that can be mixed, matched, and customized as pleased for any given model. This library is bare bones and only includes the few methods and ideas I learned about while studying Deep Learning by Ian Goodfellow et. al.. AI was used in the project, but it was used sparingly.

Modules

This project has five main modules:

  • autogradient.py
  • sequence.py
  • optimizer.py
  • neural_net.py
  • cnn_layers.py

All of which are automatically part of the initial import of the package.

Detailed Module Descriptions

autogradient.py

This module forms the core of the automatic differentiation system, enabling the computation of gradients for complex mathematical operations. It introduces the Values class, which is central to tracking computational history.

  • Values Class: Encapsulates numerical values (vals) and their corresponding gradients (grad). It supports a wide array of arithmetic and mathematical operations (e.g., +, -, *, /, @, exp, log, relu, abs, sum, softmax, mean, __pow__, __getitem__, pad, _ (identity), T (transpose)). The __getattr__ method handles properties like T (transpose) and provides a pass-through for underlying numpy array attributes. Each operation automatically builds a computational graph by defining a _backward function. A static method, _broadcast_grad, meticulously handles gradient broadcasting to correctly match original tensor shapes. The backward() method then leverages this graph to efficiently compute and propagate gradients.

sequence.py

This module provides a mechanism to combine multiple operations or layers into a single, cohesive sequential model.

  • Sequence Class: Designed to take a list of callable objects (such as Layer, Dense, or Dropout instances). Its __call__ method ensures that input data is passed through each item in the sequence in the defined order. The params() method is crucial for model training, as it gathers all trainable parameters (weights and biases) from its constituent layers, making them accessible to optimizers.

optimizer.py

The optimizer.py module implements various algorithms used to update neural network parameters based on their computed gradients, facilitating the learning process.

  • Optimizer Base Class: Serves as the blueprint for all optimization algorithms, providing a step method that each specific optimizer overrides.
  • Subclasses: The module includes several widely used optimizers:
    • Optim_SGD: Implements Stochastic Gradient Descent, with an optional learning rate scheduler that adjusts the rate over time.
    • Optim_SGD_Momentum: Extends SGD by incorporating momentum, which helps accelerate convergence by considering an exponentially weighted average of past gradients.
    • Optim_AdaGrad: An adaptive learning rate optimizer that adjusts the learning rate for each parameter individually based on the historical sum of its squared gradients.
    • Optim_RMSPropclass: Similar to AdaGrad, RMSProp uses a moving average of squared gradients to normalize the learning rate, helping to mitigate issues with vanishing or exploding gradients.
    • Optim_Adam: A powerful and popular optimizer that combines elements of both Momentum and RMSProp, utilizing moving averages of both the gradients and the squared gradients to provide efficient and robust parameter updates.

cnn_layers.py

This module introduces fundamental building blocks for Convolutional Neural Networks (CNNs), including convolutional layers and pooling operations.

  • Convo2D Class: Implements a 2D convolutional layer. It takes a kernel_matrix as input and supports different padding strategies ('valid' and 'same') and stride values. The __call__ method performs the convolution operation, handling padding and strides to produce the output feature map. The params() method returns the kernel for optimization.
  • Pooling Base Class: An abstract base class for pooling operations, defining common attributes like pool_size and stride.
  • MaxPooling Class: A subclass of Pooling that implements max pooling. It extracts windows from the input and returns the maximum value within each window, reducing the spatial dimensions of the input.
  • AvgPooling Class: A subclass of Pooling that implements average pooling. Similar to max pooling, it extracts windows but returns the average value within each window, providing a smoothed down-sampled representation.

neural_net.py

This module defines the fundamental building blocks for constructing neural networks, including various layers, network architectures, regularization techniques, loss functions, and a comprehensive model training framework.

  • Layer Class: Represents a single fully connected layer, equipped with trainable weights and biases. It supports different activation functions (e.g., 'relu', 'softmax'), which can be specified as strings and dynamically called. The params() method provides access to its weights and biases for optimization.
  • Dense Class: Facilitates the creation of multi-layered perceptrons by stacking multiple Layer instances. It allows for detailed configuration, including the number of layers, sizes of input, middle, and output layers, and distinct activation functions for hidden and final layers.
  • Dropout Class: Implements the dropout regularization technique, a method to prevent overfitting during training. During training, it randomly sets a fraction of input units to zero at each update, while scaling up the remaining activations to maintain the expected output.
  • Loss Functions: Essential for quantifying the error of a model. The module includes:
    • cross_entropy_loss: Calculates the categorical cross-entropy loss, primarily used for classification tasks.
    • mse_loss: Computes the Mean Squared Error loss, a common choice for regression problems.
  • Model Class: Serves as the central orchestrator for the neural network training process. It takes a list of blocks (e.g., Layer, Dense, Dropout instances) to define the network's architecture. It integrates an optimizer, a loss_fn, and an optional pen_fn (penalty function) for regularization. The train method manages the entire training loop, including batching, forward passes, loss calculation, backward propagation (leveraging autogradient), and parameter updates via the chosen optimizer.
  • Penalty Functions (Regularization): These functions are designed to prevent overfitting by adding a penalty term to the loss function.
    • l2_reg: Implements L2 regularization (also known as weight decay), which adds a penalty proportional to the sum of the squared values of the weights.
    • l1_reg: Implements L1 regularization, which adds a penalty proportional to the sum of the absolute values of the weights.

Making and Running a Model

When creating a model, use the Model class, which runs most of the functions included in the package itself. The first argument is a list of layers or blocks, each element is the steps in the network. These steps can be a Dense, Layer, or Dropout blocks (more will be made), a Dense is just multiple layers stacked back to back.
Training a model is done through: def train(epochs, x_t, y_t, x_v, y_v, val_run=1, l_rate=0.01, _lambda=0.1, batch_size = None) Where epochs is the number of times you train through the data, the #_t means training data and #_v means validation data, x means input, y means output, val_run is the epochs between when you want to test the validation data, l_rate is the learn rate, _lambda is a hyperparameter that determines the strength of the penalty functions, and batch_size determines how large batches will be (if the batch size isn’t a multiple of the data size then it will still run, there is just a smaller batch then the others).

Dependencies

The auto gradient–which is used for back propagation–relies heavily on numpy.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

rb_deeplearning_lib-0.3.5.tar.gz (15.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

rb_deeplearning_lib-0.3.5-py3-none-any.whl (13.9 kB view details)

Uploaded Python 3

File details

Details for the file rb_deeplearning_lib-0.3.5.tar.gz.

File metadata

  • Download URL: rb_deeplearning_lib-0.3.5.tar.gz
  • Upload date:
  • Size: 15.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.12

File hashes

Hashes for rb_deeplearning_lib-0.3.5.tar.gz
Algorithm Hash digest
SHA256 fc86966c641dff42714856fdf4be16dbac95e401c59f73bd581a0588e1e69334
MD5 84ed04b5f4e383249077ffb784c6cbd6
BLAKE2b-256 54908f7fd40a89945308df917b08ab654c71e794bc4d0353a4aa439196db7345

See more details on using hashes here.

File details

Details for the file rb_deeplearning_lib-0.3.5-py3-none-any.whl.

File metadata

File hashes

Hashes for rb_deeplearning_lib-0.3.5-py3-none-any.whl
Algorithm Hash digest
SHA256 cabae947b6d33b14e3bbaaaa58c11c571b956fcec547abdd756ce468750897ae
MD5 5d864a08fbede8fd5d60cd50980f5fa1
BLAKE2b-256 543575783c1e43b481ab5c9409866280e43fd37ffb66c299d3617ec9cffa247e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page