WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

[neuronale Netze] Netz über 2 Inputs mit Daten füttern

 

Fabian Baumgarten
Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 27.08.12
Wohnort: ---
Version: R2012a 7.14.0.739
     Beitrag Verfasst am: 27.08.2012, 12:05     Titel: [neuronale Netze] Netz über 2 Inputs mit Daten füttern
  Antworten mit Zitat      
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=[1 1;1 1];
%TESTnet.Inputs{1,1}=[0 0 1 1]; %der Code ist fehlerhaft
%TESTnet.Inputs{2,1}=[0 1 0 1]; %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
Private Nachricht senden Benutzer-Profile anzeigen


flashpixx
Forum-Guru

Forum-Guru


Beiträge: 355
Anmeldedatum: 19.04.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.08.2012, 12:24     Titel:
  Antworten mit Zitat      
Ich nehme mal an, dass Du http://de.wikipedia.org/wiki/Cascade_Correlation meinst.

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
Private Nachricht senden Benutzer-Profile anzeigen
 
Fabian Baumgarten
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 27.08.12
Wohnort: ---
Version: R2012a 7.14.0.739
     Beitrag Verfasst am: 27.08.2012, 13:05     Titel:
  Antworten mit Zitat      
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,[1 1],{'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. Layers sind -1.5
XORnet.b{2}=-0.5; %Die Bias's des 2. Layers sind -0.5
XORnet.b{3}=0;    %Die Bias's des 3. (Output) Layers sind 0
                  %Dies ist hier allerdings nicht relevant

XORnet.IW{1,1}=[1 1]; %Die Inputgewichte für die Verbindung von
                      %Layer 1(Input-Layer: 0 geht hier nicht) nach
                      %layer 1 sind für den ersten Wert 1 und
                      %für den zweiten Wert 1
XORnet.IW{2,1}=[1 1]; %hier liegt vermutlich der Fehler, da die
                       %Gewichte vom Input auf Layer 2
                       %vermutlich 0 sind.
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

o=sim(XORnet,P)

XORnet.view


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:

Code:
>> XOR_test

Input_Weight_Matrix =

    [1x2 double]
    [1x2 double]
    []


Input_Weights_toL2 =

     1     1


Layer_Weights =

      []    []    []
    [-2]    []    []
      []    []    []


BIASes =

    [-1.5000]
    [-0.5000]
    [      0]


o =

     0     0     0     1
     0     0     0     0


Die letzte Zeile sollte allerdings lauten: 0 1 1 0
Alles andere stimmt. Hab Ich ja auch so eingegeben.
Wo ist da mein Denkfehler?

Ich wollte das XOR-Problem so lösen, wie hier: http://dkriesel.com/_media/science/.....eta2-2col-dkrieselcom.pdf auf Seite 86 Abbildung 5.9

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.

MATLAB XOR FF Netz.png
 Beschreibung:

Download
 Dateiname:  MATLAB XOR FF Netz.png
 Dateigröße:  34.51 KB
 Heruntergeladen:  1024 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
flashpixx
Forum-Guru

Forum-Guru


Beiträge: 355
Anmeldedatum: 19.04.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.08.2012, 13:20     Titel:
  Antworten mit Zitat      
Fabian Baumgarten hat Folgendes geschrieben:
Danke für die schnelle Antwort.
Ich habe das Cascade-Feedforward Netz nur genommen, weil man damit anscheinend Schichten "überspringen" kann.


Nein "überspringen" ist falsch, das CC Netz verändert anhand des Trainings nur die Struktur, um eben den Fehler zu minimieren.

Fabian Baumgarten hat Folgendes geschrieben:

Das ganze geht bestimmt auch mit ff-Netz und einem vektoriellen Input.


Ja, oder mit einer SVM oder mit einem passenden Kernel ( http://de.wikipedia.org/wiki/Kernel_(Maschinelles_Lernen) )

Fabian Baumgarten hat Folgendes geschrieben:

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.

Hier einmal zwei Seminararbeiten von mir in diesem Bereich:
http://flashpixx.de/2009/07/elman-netze/
http://flashpixx.de/2008/01/support-vector-machine/

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
Private Nachricht senden Benutzer-Profile anzeigen
 
Fabian Baumgarten
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 27.08.12
Wohnort: ---
Version: R2012a 7.14.0.739
     Beitrag Verfasst am: 27.08.2012, 14:04     Titel:
  Antworten mit Zitat      
Zitat:
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.

Zitat:

Hier einmal zwei Seminararbeiten von mir in diesem Bereich:
http://flashpixx.de/2009/07/elman-netze/
http://flashpixx.de/2008/01/support-vector-machine/

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.
Private Nachricht senden Benutzer-Profile anzeigen
 
flashpixx
Forum-Guru

Forum-Guru


Beiträge: 355
Anmeldedatum: 19.04.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.08.2012, 19:34     Titel:
  Antworten mit Zitat      
Fabian Baumgarten hat Folgendes geschrieben:

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.
Private Nachricht senden Benutzer-Profile anzeigen
 
Fabian Baumgarten
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 27.08.12
Wohnort: ---
Version: R2012a 7.14.0.739
     Beitrag Verfasst am: 28.08.2012, 10:14     Titel:
  Antworten mit Zitat      
Hi.

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:

Code:
%Netzwerkstruktur
XORnet=network(1,2,[1;1],[1;1],[0 0;1 0],[0 1]);

%Aktivierungsfunktionen
XORnet.layers{1}.transferFcn='hardlim';
XORnet.layers{2}.transferFcn='hardlim';

%Definieren der Input Größe
XORnet.inputs{1}.size=2;

%Definieren der Layer Größen
XORnet.layers{1}.size=[1];
XORnet.layers{2}.size=[1];
%Die Größe des Outputs ergibt sich automatisch

%Initialisieren der BIAS's
XORnet.b{1}=-1.5 , XORnet.b{2}=-0.5;
B1=XORnet.b{1} , B2=XORnet.b{2}

%Initialisieren der Gewichte
XORnet.IW{1,1}=[1 1];
XORnet.IW{2,1}=[1 1];
XORnet.LW{2,1}=-2;

IW_auf_L1=XORnet.IW{1,1}
IW_auf_L2=XORnet.IW{2,1}
LW_L1_auf_L2=XORnet.LW{2,1}

%Simulieren des Netzwerks
o=sim(XORnet,P)

%Netzansicht aufrufen
XORnet.view


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 ^^
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.