Diwa
Lightweight implementation of Artificial Neural Network for resource-constrained environments
|
Lightweight Feedforward Artificial Neural Network (ANN) library tailored for microcontrollers. More...
#include <diwa.h>
Public Member Functions | |
Diwa () | |
Default constructor for the Diwa class. | |
~Diwa () | |
Destructor for the Diwa class. | |
DiwaError | initialize (int inputNeurons, int hiddenLayers, int hiddenNeurons, int outputNeurons, bool randomizeWeights=true) |
Initializes the Diwa neural network with specified parameters. | |
double * | inference (double *inputs) |
Perform inference on the neural network. | |
void | train (double learningRate, double *inputNeurons, double *outputNeurons) |
Train the neural network using backpropagation. | |
DiwaError | loadFromFile (T annFile) |
Load neural network model from file in Arduino environment. | |
DiwaError | saveToFile (T annFile) |
Save neural network model to file in Arduino environment. | |
double | calculateAccuracy (double *testInput, double *testExpectedOutput, int epoch) |
Calculates the accuracy of the neural network on test data. | |
double | calculateLoss (double *testInput, double *testExpectedOutput, int epoch) |
Calculates the loss of the neural network on test data. | |
void | setActivationFunction (diwa_activation activation) |
Sets the activation function for the neural network. | |
diwa_activation | getActivationFunction () const |
Retrieves the current activation function used by the neural network. | |
int | recommendedHiddenNeuronCount () |
Calculates the recommended number of hidden neurons based on the input and output neurons. | |
int | recommendedHiddenLayerCount (int numSamples, int alpha) |
Calculates the recommended number of hidden layers based on the dataset size and complexity. | |
int | getInputNeurons () const |
Get the number of input neurons in the neural network. | |
int | getHiddenNeurons () const |
Get the number of neurons in the hidden layer. | |
int | getHiddenLayers () const |
Get the number of hidden layers in the neural network. | |
int | getOutputNeurons () const |
Get the number of output neurons in the neural network. | |
int | getWeightCount () const |
Get the total number of weights in the neural network. | |
int | getNeuronCount () const |
Get the total number of neurons in the neural network. | |
void | getWeights (double *weights) |
Retrieve the weights of the neural network. | |
void | getOutputs (double *outputs) |
Retrieve the outputs of the neural network. | |
Lightweight Feedforward Artificial Neural Network (ANN) library tailored for microcontrollers.
The Diwa library is designed to provide a simple yet effective implementation of a Feedforward Artificial Neural Network (ANN) for resource-constrained microcontroller environments such as ESP8266, ESP32, and similar development boards.
Diwa::Diwa | ( | ) |
Diwa::~Diwa | ( | ) |
double Diwa::calculateAccuracy | ( | double * | testInput, |
double * | testExpectedOutput, | ||
int | epoch | ||
) |
Calculates the accuracy of the neural network on test data.
This function calculates the accuracy of the neural network on a given set of test data. It compares the inferred output with the expected output for each test sample and calculates the percentage of correct inferences.
testInput | Pointer to the input values of the test data. |
testExpectedOutput | Pointer to the expected output values of the test data. |
epoch | Total number of test samples in the test data. |
double Diwa::calculateLoss | ( | double * | testInput, |
double * | testExpectedOutput, | ||
int | epoch | ||
) |
Calculates the loss of the neural network on test data.
This function calculates the loss of the neural network on a given set of test data. It computes the percentage of test samples for which the inferred output does not match the expected output.
testInput | Pointer to the input values of the test data. |
testExpectedOutput | Pointer to the expected output values of the test data. |
epoch | Total number of test samples in the test data. |
diwa_activation Diwa::getActivationFunction | ( | ) | const |
Retrieves the current activation function used by the neural network.
This method returns the activation function currently set for the neurons in the neural network. It allows the user to query the current activation function being used for inference and training purposes. The activation function determines the output of a neuron based on its input. Different activation functions can be used depending on the nature of the problem being solved and the characteristics of the dataset. Common activation functions include sigmoid, ReLU, and tanh.
int Diwa::getHiddenLayers | ( | ) | const |
Get the number of hidden layers in the neural network.
This function returns the total number of hidden layers in the neural network. It helps to understand the depth of the network architecture.
int Diwa::getHiddenNeurons | ( | ) | const |
Get the number of neurons in the hidden layer.
This function returns the number of neurons in a single hidden layer of the neural network. If there are multiple hidden layers, this value represents the number of neurons per hidden layer.
int Diwa::getInputNeurons | ( | ) | const |
Get the number of input neurons in the neural network.
This function returns the number of input neurons in the neural network. It is useful for understanding the network's input size.
int Diwa::getNeuronCount | ( | ) | const |
Get the total number of neurons in the neural network.
This function calculates and returns the total number of neurons in the neural network, including input neurons, hidden neurons (across all layers), and output neurons.
int Diwa::getOutputNeurons | ( | ) | const |
Get the number of output neurons in the neural network.
This function returns the number of output neurons in the neural network. This is useful for understanding the size of the output layer and the expected output format.
void Diwa::getOutputs | ( | double * | outputs | ) |
Retrieve the outputs of the neural network.
This function copies the current outputs of the neural network into the provided array. The array must be pre-allocated with sufficient space to hold all the outputs.
outputs | Pointer to an array where the outputs will be copied. The size of the array should be at least getOutputNeurons() elements. |
int Diwa::getWeightCount | ( | ) | const |
Get the total number of weights in the neural network.
This function calculates and returns the total number of weights present in the neural network. This includes weights for connections between input neurons, hidden layers, and output neurons.
void Diwa::getWeights | ( | double * | weights | ) |
Retrieve the weights of the neural network.
This function copies the current weights of the neural network into the provided array. The array must be pre-allocated with sufficient space to hold all the weights.
weights | Pointer to an array where the weights will be copied. The size of the array should be at least getWeightCount() elements. |
double * Diwa::inference | ( | double * | inputs | ) |
Perform inference on the neural network.
Given an array of input values, this method computes and returns an array of output values through the neural network.
inputs | Array of input values for the neural network. |
DiwaError Diwa::initialize | ( | int | inputNeurons, |
int | hiddenLayers, | ||
int | hiddenNeurons, | ||
int | outputNeurons, | ||
bool | randomizeWeights = true |
||
) |
Initializes the Diwa neural network with specified parameters.
This method initializes the Diwa neural network with the given parameters, including the number of input neurons, hidden layers, hidden neurons per layer, and output neurons. Additionally, it allows the option to randomize the weights in the network if desired.
inputNeurons | Number of input neurons in the neural network. |
hiddenLayers | Number of hidden layers in the neural network. |
hiddenNeurons | Number of neurons in each hidden layer. |
outputNeurons | Number of output neurons in the neural network. |
randomizeWeights | Flag indicating whether to randomize weights in the network (default is true). |
DiwaError Diwa::loadFromFile | ( | T | annFile | ) |
Load neural network model from file in Arduino environment.
This method loads a previously saved neural network model from the specified file in an Arduino environment. It reads the model data from the given file and initializes the Diwa object with the loaded model parameters and weights.
annFile | File object representing the neural network model file. |
int Diwa::recommendedHiddenLayerCount | ( | int | numSamples, |
int | alpha | ||
) |
Calculates the recommended number of hidden layers based on the dataset size and complexity.
This function computes the recommended number of hidden layers for a neural network based on the size and complexity of the dataset. The recommendation is calculated using a heuristic formula that takes into account the number of samples, input neurons, output neurons, and a scaling factor alpha. The recommended number of hidden layers is determined as the total number of samples divided by (alpha times the sum of input and output neurons).
numSamples | The total number of samples in the dataset. |
alpha | A scaling factor used to adjust the recommendation based on dataset complexity. |
int Diwa::recommendedHiddenNeuronCount | ( | ) |
Calculates the recommended number of hidden neurons based on the input and output neurons.
This function computes the recommended number of hidden neurons for a neural network based on the number of input and output neurons. The recommendation is calculated using a heuristic formula that aims to strike a balance between model complexity and generalization ability. The recommended number of hidden neurons is determined as the square root of the product of the input and output neurons.
DiwaError Diwa::saveToFile | ( | T | annFile | ) |
Save neural network model to file in Arduino environment.
This method saves the current state of the neural network model to the specified file in an Arduino environment. It writes the model parameters and weights to the given file, allowing later retrieval and reuse of the trained model.
annFile | File object representing the destination file for the model. |
void Diwa::setActivationFunction | ( | diwa_activation | activation | ) |
Sets the activation function for the neural network.
This method allows the user to set the activation function used by the neurons in the neural network. The activation function determines the output of a neuron based on its input. Different activation functions can be used depending on the nature of the problem being solved and the characteristics of the dataset. Common activation functions include sigmoid, ReLU, and tanh.
activation | The activation function to be set for the neural network. |
void Diwa::train | ( | double | learningRate, |
double * | inputNeurons, | ||
double * | outputNeurons | ||
) |
Train the neural network using backpropagation.
This method facilitates the training of the neural network by adjusting its weights based on the provided input and target output values.
learningRate | Learning rate for the training process. |
inputNeurons | Array of input values for training. |
outputNeurons | Array of target output values for training. |