Skip to content

LucaPrevi0o/NeuralPlusPlus

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

93 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Neural++ - Libreria per motori neurali MLP in C++

CC BY-NC-SA 4.0

Neural++ è una libreria C++ per la manipolazione di reti neurali basate su MLP (Multi-Layer Perceptron), pensata per applicazioni di machine learning e data science.

Si basa sul funzionamento della classe tensor::tensor, all'interno della libreria tensor.h, che fornisce tutte le funzionlità di algebra lineare. La classe neural::network, all'interno del proprio namespace, implementa funzioni per la creazione di reti neurali con dimensione variabile, il training, e anche il caricamento di dataset pre-generati tramite file CSV.

Struttura del progetto

tensor/
    tensor.h    # Classe tensor generica multi-dimensionale, alias matrix e tuple, funzioni matematiche
cnetwork/
    function.h  # Funzioni di attivazione, operazioni matematiche per reti neurali
    neural.h    # Strutture e algoritmi per reti neurali (layer, forward, backward, training)
    dataset/
        csv.h   # Caricamento e parsing di dataset CSV, split in features/target

Funzionalità principali

tensor.h (Libreria esterna)

  • Classe template tensor<A, N>: array multi-dimensionale generico
  • Alias matrix<A>: matrice 2D
  • Alias tuple<A>: vettore 1D
  • Operatori aritmetici: somma, sottrazione, prodotto, scalari
  • Funzioni matematiche: trasposizione, traccia, determinante, sottostruttura, aggiunta
  • Gestione memoria: costruttori, copy, assegnazione, confronto
  • Funzioni di attivazione: sigmoid, relu, tanh, softmax
  • Derivate delle funzioni: per backpropagation
  • Operazioni matematiche: normalizzazione, funzioni di costo
  • Definizione layer: fully connected, attivazione, output
  • Algoritmi di training: forward, backward, aggiornamento pesi
  • Gestione rete: creazione, configurazione, inferenza
  • Caricamento CSV: parsing efficiente di file CSV
  • Estrazione labels: lettura delle intestazioni
  • Split dataset: separazione automatica in features e target
  • Restituzione dati: tuple/matrix/tensor per uso diretto in reti neurali

Esempio d'uso

#include "include/tensor/tensor.h"
#include "include/cnetwork/neural.h"
#include "include/cnetwork/dataset/csv.h"
#include <stdio.h>
#include <time.h>

using namespace neural;
using namespace tensor;

int main() {

    srand(static_cast<unsigned int>(time(0)));

    try {

        printf("=== Example usage: CSV Data Loading ===\n");
        
        auto result = csv::load_split("Dataset.csv", 1);
        auto features = result.features; // Features from the dataset
        auto targets = result.targets;   // Target features

        auto batch_size = 64;          // Training/validation batch size
        auto train_samples = 2048;     // Number of samples for training
        auto validation_samples = 256; // Number of samples for validation

        // Construct training/validation matrices
        auto input_features      = matrix<float>(features.size(0), train_samples);
        auto validation_features = matrix<float>(features.size(0), validation_samples);

        for (int i = 0; i < input_features.size(0); i++) 
            for (int j = 0; j < input_features.size(1); j++) {
                input_features(i, j) = features(i, j);
            }

        for (int i = 0; i < validation_features.size(0); i++) 
            for (int j = 0; j < validation_features.size(1); j++) {
                validation_features(i, j) = features(i, j + train_samples);
            }

        // Start model training
        if (input_features.size(0) > 0 && input_features.size(1) > 0) {

            activation *sigmoid = new SIGMOID(); // activation function
            network csv_net(batch_size,                          // batch size = number of samples
                network::shape(input_features.size(0), sigmoid), // input size = number of features
                network::shape(10,                     sigmoid), // hidden layer with 10 neurons
                network::shape(8,                      sigmoid), // hidden layer with 8 neurons
                network::shape(targets.size(0),        sigmoid)  // output size = number of targets
            );

            // Training and validation for the model
            auto csv_trained = train(csv_net, input_features, targets, new MSE(), 35000, 0.001f, 0.001f);
            auto csv_output  = validate(csv_trained, validation_features, targets);

            printf("CSV Output error:\n");
            for (int k = 0; k < csv_output.size(2); k++)
                for (int i = 0; i < csv_output.size(1); i++) {

                    printf("[ ");
                    for (int j = 0; j < csv_output.size(0); j++) printf("%c%.3f ", csv_output(j, i, k) >= 0 ? ' ' : 0, csv_output(j, i, k));
                    printf("]\n");
                }
            printf("CSV training completed!\n");
            delete sigmoid; // clean memory
        } else printf("No data loaded from CSV. Please ensure 'Dataset.csv' exists and is properly formatted.\n");
        return 0;

    } catch (const char* e) {

        printf("Error: %s\n", e);
        return 1;
    }
}

Requisiti

  • C++11 o superiore
  • Librerie esterne:

Autori

Licenza

This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. Any modification to this software is permitted.

  • Any commercial use of this software is prohibited. This software is intended to be used and shared without payment.
  • Any re-distribution of this software is allowed, with attribution of the original source.
  • Any re-distribution of this software must be provided with share-alike license.

CC BY-NC-SA 4.0

About

MLP (multi-layer perceptron) neural network implementation for C++

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages