- LiFePO4 Speicher Test         
Seite 3 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 21 bis 30 von 31

Thema: NeuronalesNetz

  1. #21
    Benutzer Stammmitglied
    Registriert seit
    09.05.2007
    Beiträge
    99
    Anzeige

    Powerstation Test
    Ich würde es erst mal einfach halten und nicht mit verpointerten Knoten und Kanten anfangen. Hier ein kleines NN das XOR berechnet:
    Code:
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    
    typedef struct {int depth; int layer[10]; double weight[30];} NN;
    const double e=2.718281828459045, temperature=0.08;
    #define	sigmoid(x) (1.0/(1.0+pow(e, -x/temperature)))
    
    double* evaluate(NN &net, double cell[]) {
    	int Weight=0, Out=0;
    
    	for (int level = 1; level < net.depth; level++) {
    		int In = Out;
    		Out += net.layer[level-1];		
    		for (int j = 0; j < net.layer[level]; j++) {
    			double s = net.weight[Weight++]; // bias
    			for (int i = 0; i < net.layer[level-1]; i++) s += net.weight[Weight++] * cell[In+i];
    			cell[Out+j] = sigmoid(s);
    		}
    	}
    	return &cell[Out] ;
    };
    
    void xorNN(int a, int b) {
    	static NN net={3, /*layer*/ {2,2,1},
    		{/*inner1 node2 bias=*/-0.3, /*w0=*/+0.7, /*w1=*/-0.7,
    		 /*inner1 node3 bias=*/-0.4, /*w0=*/-0.6, /*w1=*/+0.5,
    		 /*outer2 node4 bias=*/-0.5, /*w2=*/+1.1, /*w3=*/+1.5,}};
    	double cell[2+2+1]={a,b};
    	printf("%d xor %d -> %d\n", a, b, evaluate(net, cell)[0]<0.5?0:1 );
    }
    
    int main(int argc, char* argv[]) {
    	xorNN(0,0);
    	xorNN(0,1);
    	xorNN(1,0);
    	xorNN(1,1);
    }
    Liefert als Ausgabe:
    Code:
    0 xor 0 -> 0
    0 xor 1 -> 1
    1 xor 0 -> 1
    1 xor 1 -> 0

  2. #22
    Neuer Benutzer Öfters hier
    Registriert seit
    21.07.2005
    Beiträge
    5

    aktueller stand

    Ertse Tests sind erfolgreich verlaufen. Die Simulationsumgebung habe ich vereinfacht, die Nezte haben jetz nur mehr einen Input ( Helligkeit ). Als Aktivierungsfunktion bin ich jetzt auf die Sigmoidfunktion umgestiegen ( da ich auf negative Werte im Netz verzichte ). Interessanterweise hat erreicht das Netz bereits nach etwa 3 Generationen ein Maximum. Leider muss ich noch einen Fehler beseitigen ( Winkelberechnung ) um festzustellen ob es bereits das Globale Maximum ist.


    Weiß jemand zufällig wie man Winkelberechnungen in c++ beschleunigen kann?

  3. #23
    Benutzer Stammmitglied
    Registriert seit
    22.11.2005
    Ort
    Stralsund
    Beiträge
    93
    Hey das ist super!

    Vieleicht reichen zur Winkelberechnung auch Näherungswerte aus, dann könntest Du überlegen ob du eine vorherberechnete Tabelle verwendest. Das kann man relativ schnell testen. Und so eine Map ist schnell abgefragt.
    Wüstenameisen berechnen zur Wegintegration auch kein Cosinus, sondern benutzen nur Näherungswerte.
    viele Grüße
    Gast1234

    fressen und gefressen werden

  4. #24
    Erfahrener Benutzer Begeisterter Techniker Avatar von .:Sebastian:.
    Registriert seit
    07.01.2006
    Ort
    Arkon I
    Beiträge
    203
    Moin Moin ...

    Ich hab vor einiger Zeit (1-2 Jahre) auch mal mit neuronalen Netzen gespielt.
    Allerdings waren meine Ansätze zum Thema Lernen und Training einfach nur Müll.
    Im Nachhinein verständlich weil mein Mathematisches Basiswissen große Lücken hatte.
    (Nur mit Mittelstufenmathematik, tut man sich etwas schwer irgendwelche Maxima zu bestimmen. o.ä.)

    Zum Thema Cosinus : Ich hatte auch schon ein zwei mal den Fall, dass die trigeometrischen Funktionen ein Perfomance-Engpass waren.
    Meistens bringt dich da eine Wertetabelle weiter.

    Allerdings ist mir gerade beim Lesen durch den Thread noch was anderes eingefallen.
    Und zwar hat eigentlich sich schonmal jemand Gedanken gemacht ob man ein neuronales Netz nicht mit OpenCL-Unterstützung implementieren könnte ?
    Also dass man quasi den rechenintensiven Teil auf eine Grafikkarte auslagert, ähnlich wie es manche Spiele mit der Physik machen.
    Ich habe mich neulich mal in OpenCL eingelesen, (sehr schwere Kost, viele Specs, wenige grundlegende Beispiele ) eigentlich mehr zum Spaß, weil ich gelesen hab, dass ich meine neue Grafikkarte für GPU-Computing benutzen kann.
    Dieser GPU-Ansatz taug ja immer für Situationen wo viele Werte parallel nach ähnlichen Schemata verrechnet werden. (Matrix-Rechenoperationen mit großen Matrizen).
    Und gerade wenn man so ein Netz quasi Schichtweise abarbeitet, kann man zumindest was in der einen Schicht drin passiert parallelisieren.
    (So wie ich das auf der ersten Seite verstanden hab)

    Wie gesagt ich hab keine praktische Erfahrung mit neuronalen Netzen und auch nicht wirklich mit OpenCL und dem dazugehörigen Zeug.
    Aber ich wollte einfach so mal eine Idee in den Raum stellen, vllt. is es ja als Ansatz brauchbar.

    EDIT: Ziemlich viiiiiel später mir das aufgefallen http://www.codeproject.com/KB/graphics/GPUNN.aspx

    Gruß
    Sebastian

  5. #25
    Benutzer Stammmitglied
    Registriert seit
    09.05.2007
    Beiträge
    99
    Ich habe gerade simbad aus dem Netz geladen. Das ist ein Roboter Simulator auf JAVA Basis. Verspricht somit auf vielen Plattformen lauffähig zu sein und ist unter meinem Windows XP extrem schnell und war dort simpelst zu installieren. Simbad ist ein 3D Robot Simulator sogar mit (kleiner) Physikengine und liegt (auch) im Quellcode vor.

    Obendrein - und jetzt kommt's - gibt es optional und zusätzlich die Pakete piconode und picoevo. Mit piconode kann man NNs vielfältiger Art erzeugen und trainieren (z.B. via BP). Oder, man kann die NNs mittels picoevo evolvieren lassen um letztendlich das Verhalten des Roboters zu steuern (bzw. zu entwickeln). Also all das, was hier im Thread angesprochen wurde und vieles mehr.

    Beispielcode ist vorhanden.

    Ich tobe mich gerade mit simbad pur aus (also noch ohne piconode und picoevo) und bin begeistert davon wie realistisch mein Roboter in meiner Arena mit Hilfe eines Distanzsensors den Hindernissen in der Arena ausweicht.

  6. #26
    Neuer Benutzer Öfters hier
    Registriert seit
    21.07.2005
    Beiträge
    5

    Neuer Stand

    So. Nach Studiumsstress hab ich fleißig weitergearbeitet.

    Dabei habe ich das Programm komplett umstrukturiert, sodass es nun eine klare Trennung zwischen Neuronalem Netz und Simulationsumgebung herrscht. Leider gestaltet sich die Implementierung einer schönen und vorallem beliebig erweiterbaren Simulationsumgebung als schwieriger als gedacht. Vorallem die Implementierung von Aktoren ( Beine, Geißeln) wirft einige grundlegende Fragestellungen auf.

    Leider ist der Code zu komplex um ihn in einem Forum zu posten (auch da er sich ständig ändert) Kennt jemand eine gute Möglichkeit ein Projekt übers Internet zu entwickeln?

    @gast 1234. Danke für die Artikellinks, bin erstaunt was mit relativ kleinen Netzen möglich ist.

    Nachdem ich mir Gedanken darüber gemacht wodurch ein Neuronales Netz definiert ist bin ich zu folgendem Schluss gekommen.

    1. Jeder Eingang kann Einfluss auf jeden Ausgang haben
    2. Durch Lernen kann jeder Eingang jeden Ausgang beliebig stark beeinflussen
    (3). Ein Zeitabhängiges Element existiert
    (4). Ein Element aus einer früheren Linie kann abhängig von einem Elemen aus einer späteren Linie sein ( Rückkopplung )

    Punkt 3 und 4 sind bei nicht unbedingt notwendig

    Das lässt eigentlich ziemlich viel Freiraum im Aufbau von Netzen
    Nachdem ein klassisches Neuronales Netz aufgrund von Multiplikationen nur schwer Hardwaremäßig implementierbar ist werde ich (irgendwann) versuchen ein digitales Netz zu entwerfen, welches nur mit logischen Grundoperationen auskommt. Gibt es so etwas schon ? Hat schon jemand Erfahrungen damit?


    Ich freue mich auch über Vorschläge für eventuelle Simulationsaufgaben (Licht folgen etc.) bzw über prinzipielle Vorschläge zur Simulationsumgebung

  7. #27
    Leider ist der Code zu komplex um ihn in einem Forum zu posten (auch da er sich ständig ändert) Kennt jemand eine gute Möglichkeit ein Projekt übers Internet zu entwickeln?
    http://sourceforge.net/


    over SVN

    http://sourceforge.net/apps/trac/sou...iki/Subversion

    is your coding friend.

    mfg

  8. #28
    Benutzer Stammmitglied
    Registriert seit
    17.08.2009
    Beiträge
    31
    Ich habe mich vor längerer Zeit auch mal mit der Materie befasst. Im Wesentlichen hatte ich zwei Projekte:
    * Buchstabenerkennung: Definition aller Buchstaben, jeweils in einem 5x7-Pixel-Raster. Eingabe des Netzes waren dann die 5x7=35 Bits des zu erkennenden Buchstabens. Hier lässt sich wunderbar Backpropagation anwenden, da der Eingabe eine eindeutig richtige Antwort zugeordnet werden kann. Leider hatte ich nur mäßige Ergebnisse, weit entfernt von zuverlässiger Buchstabenerkennung
    * Pacman: Ein neuronales Netz steuert den Gegner von Pacman durch ein einfaches Labyrinth um Pacman zu fangen. Dies habe ich mit Hilfe von Mutation/Selektion gemacht. Es hat deutlich besser geklappt als die Buchstabenerkennung. Auch hat man deutlich mehr Spaß dabei, die Lernfortschritte der Netze zu beobachten. Das Problem hierbei ist, dass man nicht eine einzelne Reaktion des NN auf eine Eingabe bewerten kann. Denn es braucht ja viele Schritte, um Pacman zu fangen. Ich habe also jedem Individuum 200 Schritte Zeit gegeben, Pacman zu fangen. Wer die geringste Entfernung zu Pacman hat, bzw. ihn in möglichst wenig Schritten gefangen hat, hat sich dupliziert. Die erfolglosesten Netze wurden verworfen.

  9. #29
    Neuer Benutzer Öfters hier
    Registriert seit
    11.12.2010
    Ort
    Hausten
    Alter
    27
    Beiträge
    11
    Ich habe MemBrain verwendet kann man direkt in c++ code umwandeln lassen.http://www.membrain-nn.de/german/download_de.htm
    .................................................. ...................................

  10. #30
    so lange ist her, hab sogar schon mein passwort vergessen... also original yodakohl. Ich habe nun das System auf eine 3d Umgebung umgebastelt eine physikengine dahintergeschnallt und einen kleinen 3d editor gebaut. Nach einer Gefühlten ewigkeit hab ich nun endlich ein erstes Ergebnis

Seite 3 von 4 ErsteErste 1234 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress