Reine C++-Klasse für neuronales Netz gesucht



  • Ich bin auf der Suche nach einer freien und möglichst gut verständlichen C++-Klasse für ein neuronales Netz in möglichst gutem C++ geschrieben, also ohne windows.h usw. Könnt ihr mir da einen Link geben?





  • Obige Klasse ist Spitze, hier ist noch ein Ansatz:
    http://www.linux-related.de/index.html?/coding/coding_main.htm



  • @cpp1: Danke, tolles Beispiel! Ich habe mir mal die Klasse CNeuralNet rausgeschält. Wie kann man diese Klasse CNeuralNet eigentlich trainieren, oder muss ich das selbst irgendwie machen über das Setzen der weights (da gibt es eine Funktion)? Ich finde irgendwie keine Funktion für das Training.

    Konkret: ich will vorne 2 Zahlen eingeben und hinten die Summe dieser beiden Zahlen haben. Folgendes code ich, aber weil die Klasse noch nicht trainiert ist, kommt nur Blödsinn raus. Ist die Verwendung der Klasse so richtig?

    #include <iostream>
    #include <vector>
    #include "CNeuralNet.h"
    
    using namespace std;
    
    int main()
    {
        CParams Parameter; //Parameter laden
        CNeuralNet net;    //Neuronales Netz erstellen 
    
        cout <<	"NumInputs:           " << CParams::iNumInputs << endl;  //2
        cout <<	"NumOutputs:          " << CParams::iNumOutputs << endl; //1
        cout <<	"NumHiddenLayers:     " << CParams::iNumHidden << endl;  //6
        cout <<	"NeuronsPerHiddenLyr: " << CParams::iNeuronsPerHiddenLayer << endl; //1           
        cout << "NumberOfWeights:     " << net.GetNumberOfWeights() << endl; //19 = 12+6(bias)+1(bias)
    
        vector<double> in;
        vector<double> out;
        in.reserve(CParams::iNumInputs);
        out.reserve(CParams::iNumOutputs);
        for(int i=0; i<30; ++i)
        {   
            in[0]=i;
            in[1]=i+1;
            out = net.Update(in);
            cout << in[0] << "  " << in[1] <<"  " << out[0] << endl;
        }   
    }
    


  • Bei CNeuralNet::Update(...) ist eine Schwachstelle. Ändere call-by-reference ab auf call-by-value, denn inputs wird in der Funktion manipuliert (als Kopie dann kein Problem), sollte aber konstant bleiben.



  • hew schrieb:

    @cpp1: Danke, tolles Beispiel! Ich habe mir mal die Klasse CNeuralNet rausgeschält. Wie kann man diese Klasse CNeuralNet eigentlich trainieren, oder muss ich das selbst irgendwie machen über das Setzen der weights (da gibt es eine Funktion)? Ich finde irgendwie keine Funktion für das Training.

    So wie ich das verstanden habe, nutzt er zum Trainieren einen genetischen Algorithmus.



  • So wie ich das verstanden habe, nutzt er zum Trainieren einen genetischen Algorithmus.

    Ja, so funktioniert dieses Programm. kennt jemand noch eine andere gute C++ Klasse zum Thema Neuronales Netzwerk? Man findet nur wenige Klassen/Programme, von denen sich die Mehrzahl mit Mustererkennung oder Botsteuerung beschäftigt.



  • Ich suche ein neuronales Klassensystem, das möglichst flexibel ist, also nicht auf Layer fixiert wie in obigen Klassen. Connections sollten auch Layers überspringen können. Gibt es so etwas?



  • das würde so ein NN auch nicht leistungsfähiger machen. Wenn es wirklich so prima ist an einer bestimmten Stelle das Signal einfach in den nächsten Layer durchzureichen, dann wird das NN das mit der Zeit auch rauskriegen.




Anmelden zum Antworten