Verfasst am: 27.08.2012, 12:05
Titel: [neuronale Netze] Netz über 2 Inputs mit Daten füttern
Hi. Ich bin neu in der Materie der neuronalen Netze und auch neu, was MATLAB betrifft.
Zur Zeit schreibe Ich meine Bachelorarbeit am Lehrstuhl für Energietechnik über das Thema der Bateriemanagementoptimierung mittels neuronaler Netze. In den ersten 2 Wochen habe Ich mir jede Menge Theorie zu neuronalen Netzten angesehen und weitest gehend auch verstanden.
Nun hapert es ein wenig an der Umsetzung in MATLAB.
Ich werde demnächst wahrscheinlich mit einigen weiteren Fragen auf euch zukommen, falls es nichts ausmacht.
Nun aber zum eigentlichen Problem:
Ich versuche ein Cascaden Netzwerk mit 2 seperaten Inputs zu erstellen.
der Code sieht wie folgt aus: (versuche hiermit das XOR Problem zu lösen. Ich weiß, es geht einfacher, aber es dient für mich zur Übung und zum verständnis der Implementierung von neuronalen Netzen in MATLAB)
Code:
TESTnet=newcf(P,t,1,{'hardlim','hardlim'})
TESTnet.numInputs=2;
TESTnet.inputconnect=[11;11];
%TESTnet.Inputs{1,1}=[0011]; %der Code ist fehlerhaft
%TESTnet.Inputs{2,1}=[0101]; %der Code ist fehlerhaft
TESTnet.view
Das netz sieht so aus, wie Ich es haben will, allerdings werden alle eingaben im "ersten Input" gemacht. Der 2.Input bleibt leer. Wie muss Ich den Input eingeben, damit das Netz das richtig annimmt?
Vielen Dank schonmal im Vorraus. Bin grad echt am verzweifeln hier.
Zuletzt bearbeitet von Fabian Baumgarten am 27.08.2012, 13:06, insgesamt einmal bearbeitet
Ich kenne jetzt die Matlabtoolbox nicht, aber bei Cascade-Correlation wird zur Initialisierung keine direkte Schicht erzeugt, denn dies macht der Algorithmus. Die Initialisierung hat ein Netz, dass genau aus einem Eingabeneuron, einem Hiddenneuron und einem Ausgabeneuron besteht.
Für die Lösung des XOR Problems brauchst Du kein Cascade-Correlation
Danke für die schnelle Antwort.
Ich habe das Cascade-Feedforward Netz nur genommen, weil man damit anscheinend Schichten "überspringen" kann. mit dem normalen FF-Netz hatte Ich da so meine Probleme:
Wahrscheinlich brauche Ich zur Lösung des XOR-Problems weder ein cf-Netz noch 2 unabhängige Inputs. Das ganze geht bestimmt auch mit ff-Netz und einem vektoriellen Input. Das habe Ich nämlich auch zuerst versucht:
Code:
XORnet=newff(P,t,[11],{'hardlim','hardlim'});
XORnet.inputConnect([1,2])=1; %Eine Verbindung vom Input zu Layer 1
%und 2 wird aufgebaut
%XORnet.layerConnect(2,1)=1;%Verbindung zwischen Layer 1 und 2
%ist eh schon automatisch vorhanden
XORnet.layerConnect(3,2)=0; %Verbindung zwischen Layer 1 und 2
%ist eh schon automatisch vorhanden
%wird hier aber aus Gründen der
%Übersichtlichkeit deaktiviert
XORnet.layerConnect(3,1)=0; %Outputlayer ist hier gleich Layer 3
%Verbindung von Layer 1 zum Output gekappt
XORnet.outputConnect([1,2])=1; %Es erfolgt ein Output von Layer 1 und 2
XORnet.outputConnect(3)=0;
XORnet.b{1}=-1.5; %Die Bias's des 1. Layerssind-1.5
XORnet.b{2}=-0.5; %Die Bias's des 2. Layerssind-0.5
XORnet.b{3}=0; %Die Bias's des 3. (Output) Layers sind0
%Dies ist hier allerdings nicht relevant
XORnet.IW{1,1}=[11]; %Die Inputgewichte für die Verbindung von
%Layer 1(Input-Layer: 0 geht hier nicht) nach
%layer 1sind für den ersten Wert 1 und
%für den zweiten Wert 1
XORnet.IW{2,1}=[11]; %hier liegt vermutlich der Fehler, da die
%Gewichte vom Input auf Layer 2
%vermutlich 0sind.
XORnet.LW{2,1}=-2; %Das Gewicht der Verbindung zwischen
%Layer 1 und 2 beträgt -2.
Input_Weight_Matrix=XORnet.IW %Ausgabe der Eingangsgewichtematrix
Input_Weights_toL2=XORnet.IW{2,1} %Ausgabe der Gewichte vom Input nach Layer 2
Layer_Weights=XORnet.LW %Ausgabe der Layergewichtematrix
BIASes=XORnet.b %Ausgabe der BIAS Matrix
Das sieht dann so aus, wie an der unten angehängten Datei.
"MATLAB XOR FF Netz.png"
habe extra einen output nach Layyer 1 eingefügt, damit Ich sehen kann, wo der Fehler ist. Layer 1 ist nämlich korrekt. Der Fehler passiert irgendwo in Layer 2.
Die Ausgabe im Command Window ergibt dann folgendes:
Deshalb habe Ich auch feste Gewichte und BIAS's initialisiert.
Ich wäre echt dankbar, wenn mir einer sagen könnte, wo hier mein Fehler liegt. Für mich ist eigentlich alles richtig. Das Schema sollte auch passen, hab es von Hand durchgerechnet.
Ich wäre echt dankbar, wenn mir einer sagen könnte, wo hier mein Fehler liegt. Für mich ist eigentlich alles richtig. Das Schema sollte auch passen, hab es von Hand durchgerechnet.
Es nützt Dir rein gar nichts, wenn Dir hier gesagt wird "so und so muss Du das machen", das hilft für die Lösung Deiner Problemstellung nicht. Neuronale Netze, egal welche, sind sehr mächtige Strukturen, aber man muss auch einige Punkte beachten z.B. Oszillation, Momentumterme o.ä.
Nur weil Dein Beispiel funktioniert, kannst Du es noch lange nicht auf ein reales Problem übertragen. Ich halte es für fahrlässig ohne das Wissen zu den Algorithmen zu versuchen ein Netz zu erzeugen und dann ggf noch zu verwenden. Eine GUI in Matlab ist zwar nett, aber ohne das Wissen, was dort intern gemacht wird, wird das Problem zu einem ziellosen rumprobieren.
Im Vortrag über Elmannetze ist auch etwas über Feed-Forward-Netze und im Vortrag über die SVM sind die Grundlagen zum Perzeptron und zum Kernel erklärt. Ich kann Dir wirklich nur empfehlen zuerst die Theorie zu lernen, dann fällt auch die praktische Umsetzung leichter
Es nützt Dir rein gar nichts, wenn Dir hier gesagt wird "so und so muss Du das machen", das hilft für die Lösung Deiner Problemstellung nicht. Neuronale Netze, egal welche, sind sehr mächtige Strukturen, aber man muss auch einige Punkte beachten z.B. Oszillation, Momentumterme o.ä.
Oszillation und Momentumterme sind mir durchaus ein Begriff. Die Theorie zu neuronalen Netzen habe Ich bereits mit ausreichend fachliteratur abgearbeitet. Zumindest was SLP, MLP und einfache FF-Netze angeht.
Zitat:
Nur weil Dein Beispiel funktioniert, kannst Du es noch lange nicht auf ein reales Problem übertragen. Ich halte es für fahrlässig ohne das Wissen zu den Algorithmen zu versuchen ein Netz zu erzeugen und dann ggf noch zu verwenden.
Das war nie das Ziel. Wie bereits erwähnt, sollte es nur für mich als Übungszweck dienen. Das Netz hat mit der eigentlichen Aufgabe der Bateriemanagementoptimierung rein gar nichts zu tun!
Zitat:
Eine GUI in Matlab ist zwar nett, aber ohne das Wissen, was dort intern gemacht wird, wird das Problem zu einem ziellosen rumprobieren.
Ich habe anfangs mit der GUI gearbeitet. Die Beispiele und alles, was Ich hier gepostet habe sind von mir im Quellcode geschrieben worden. mit dem GUI ist man dann doch sehr eingeschränkt.
Das Problem ist einfach, dass Ich glaube zu wissen, was in den einzelnen Matritzen, die das Netzwerk beschreiben (numInputs,numLayers,biasConnect,inputConnect,layerConnect,outputConnect) vor sich geht und das Ich auch verstehe, wie so ein "einfaches" Netzwerk arbeitet. Aber genau deshalb verstehe Ich nicht warum meine 2 geposteten Beispiele nicht funktionieren.
Im Vortrag über Elmannetze ist auch etwas über Feed-Forward-Netze und im Vortrag über die SVM sind die Grundlagen zum Perzeptron und zum Kernel erklärt. Ich kann Dir wirklich nur empfehlen zuerst die Theorie zu lernen, dann fällt auch die praktische Umsetzung leichter
Deine Arbeiten werde Ich mir bei Gelegenheit mal anschauen. Danke schonmal dafür.
Das war nie das Ziel. Wie bereits erwähnt, sollte es nur für mich als Übungszweck dienen. Das Netz hat mit der eigentlichen Aufgabe der Bateriemanagementoptimierung rein gar nichts zu tun!
Ich bin davon ausgegangen, dass das Bsp eine Übung für das reale Projekt sein soll.
Fabian Baumgarten hat Folgendes geschrieben:
Ich habe anfangs mit der GUI gearbeitet. Die Beispiele und alles, was Ich hier gepostet habe sind von mir im Quellcode geschrieben worden. mit dem GUI ist man dann doch sehr eingeschränkt.
Ich mache keine NN in Matlab mehr, ich habe inzwischen alles nach C++ übertragen.
Probier mal alle Gewichte zufällig in [0,1] zu initialisieren, so wie ich den Code verstehe, setzt Du sie ja hart auf 1, d.h. jede Übertragung ist gleich wichtig. Beim XOR willst Du ja, dass sie die Neuronen spezialisieren, d.h. ein Zweig des Netzwerkes soll die eine, der andere Teil die andere Eingabe bearbeiten.
Evtl. habe Ich mich da ein wenig undeutlich ausgedrückt.
Der erste Absatz meines ersten Posts sollte nur kurz erklären, warum Ich die Matlab Toolbox der neuronalen Netze benutze.
gerade eben habe Ich es selber hinbekommen, nach 3 Tagen harter Arbeit. OMG!
Das Problem lag wohl darin, das MATLAB mit den Funktionen net=newff, oder net=newcf, oder welche Netzwerkart auch immer irgendwas im Hintergrund vordefiniert. Da läuft irgendwas ab, was Ich nicht kontrollieren kann.
Ich habe nämlich quasi den exakt gleichen Code heute mal als custom Netzwerk geschrieben und, tadaaa - es geht:
Trotzdem vielen Dank nochmal für deine Hilfe. Schließlich ist es ja nicht selbstverständlich, dass man seine Zeit für jemand anderen opfert.
Evtl. komme Ich ja morgen schon wieder mit dem nächsten Problem um die Ecke ^^
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.