![]() |
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 (std::ifstream &annFile) |
Load neural network model from file in non-Arduino environment. | |
DiwaError | saveToFile (std::ofstream &annFile) |
Save neural network model to file in non-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. | |
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.
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 | ( | std::ifstream & | annFile | ) |
Load neural network model from file in non-Arduino environment.
This method loads a previously saved neural network model from the specified file in a non-Arduino environment. It reads the model data from the given file stream and initializes the Diwa object with the loaded model parameters and weights.
annFile | Input file stream 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 | ( | std::ofstream & | annFile | ) |
Save neural network model to file in non-Arduino environment.
This method saves the current state of the neural network model to the specified file in a non-Arduino environment. It writes the model parameters and weights to the given file stream, facilitating storage and retrieval of the trained model.
annFile | Output file stream 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. |