2014-04-10 4 views
6

Ich habe ein 4 Input und 3 Output Neuronales Netzwerk trainiert durch Partikelschwarm-Optimierung (PSO) mit Mean Square Error (MSE) als Fitness-Funktion mit der IRIS-Datenbank von MATLAB zur Verfügung gestellt. Die Fitness-Funktion wird 50 mal ausgewertet. Das Experiment dient zum Klassifizieren von Features. Ich habe ein paar ZweifelKonzeptionelle Fragen zum Training neuronales Netzwerk mit Partikelschwarm-Optimierung

(1) Ist die PSO Iterationen/Generationen = Anzahl der Male die Fitness-Funktion ausgewertet wird?

(2) In vielen Zeitungen Training Curve Ich habe die Trainingskurve von MSE vs Generationen Plot gesehen. In dem Bild ist das Diagramm (a) auf der linken Seite ein Modell ähnlich zu NN. Es ist eine kognitive Karte mit 4 Eingängen-0 versteckter Schicht-3-Ausgabe. Und Graph (b) ist ein NN, der von demselben PSO trainiert wird. Der Zweck dieses Papiers war, die Wirksamkeit des neuen Modells in (a) über NN zu zeigen.

Aber sie erwähnen, dass das Experiment durchgeführt wird sagen Zyklen = 100 mal mit Generationen = 300. In diesem Fall hätte die Trainingskurve für (a) und (b) MSE vs Cycles und nicht MSE vs PSO generations sein sollen. Zum Beispiel Cycle1: PSO-Iteration 1-50 -> Ergebnis (Gewichte_1, Bias_1, MSE_1, Klassifikationsrate_1). Cycle2: PSO Iteration 1-50 -> Ergebnis (Weights_2, Bias_2, MSE_2, Classification Rate_2) und so weiter für 100 Zyklen. Wie kommt es, dass die X-Achse in (a), (b) anders ist und was bedeuten sie?

(3) Schließlich, für jeden unabhängigen Lauf des Programms (Lauf die m-Datei mehrmals unabhängig, über die Konsole), bekomme ich nie die gleiche Klassifikationsrate (CR) oder die gleiche Menge von Gewichten. Konkret, wenn ich das Programm zum ersten Mal ausführe, bekomme ich W (Gewichte) -Werte und CR = 100%. Wenn ich das Matlab-Code-Programm erneut ausführe, bekomme ich möglicherweise CR = 50% und einen weiteren Satz von Gewichten !! Wie unten für ein Beispiel gezeigt,

%Run1 (PSO generaions 1-50) 
>>PSO_NN.m 

Correlation = 

    0 

Classification rate = 25 



FinalWeightsBias = 

    -0.1156 0.2487 2.2868 0.4460 0.3013 2.5761 

%Run2 (PSO generaions 1-50) 
>>PSO_NN.m 
Correlation = 

    1 

Classification rate = 100 

%Run3 (PSO generaions 1-50) 
>>PSO_NN.m 
Correlation = 

    -0.1260 

Classification rate = 37.5 

    FinalWeightsBias = 

    -0.1726 0.3468 0.6298 -0.0373 0.2954 -0.3254 

Was sollte die richtige Methode sein? Also, welche Gewichtsmenge sollte ich schließlich nehmen und wie sage ich, dass das Netzwerk trainiert wurde? Ich bin mir bewusst, dass evolutionäre Algorithmen aufgrund ihrer Zufälligkeit niemals die gleiche Antwort geben werden, aber wie kann ich sicherstellen, dass das Netzwerk trainiert wurde? Wird zur Klarstellung verpflichtet.

+0

Werden Sie das Kopfgeld dem einzigen Mann geben, der Ihnen Aufmerksamkeit geschenkt hat? ;) – buzjwa

+1

Sorry, ich habe nicht verstanden, was du mit "Give Bounty" meinst. Ich klickte auf Akzeptieren Antwortsymbol auf der linken Seite. Gibt es noch etwas, das ich vermisst habe? – SKM

Antwort

4
  1. Wie bei den meisten maschinellen Lernmethoden ist die Anzahl der Iterationen in PSO die Anzahl der Aktualisierungen der Lösung. Im Fall von PSO ist dies die Anzahl der Aktualisierungsrunden über alle Partikel. Die Kostenfunktion wird hier ausgewertet, nachdem jedes Partikel aktualisiert wurde, also mehr als die Anzahl der Iterationen. Ungefähr, (# Kostenfunktionsaufrufe) = (# Iterationen) * (# Partikel).
  2. Die Graphen hier vergleichen verschiedene Klassifizierer, fuzzy cognitive maps für Graph (a) und neural network für Graph (b). Daher zeigt die X-Achse die relevanten Maße von Lernwiederholungen für jede an.
  3. Jedes Mal, wenn Sie Ihr NN ausführen, initialisieren Sie es mit verschiedenen zufälligen Werten, so dass die Ergebnisse nie gleich sind. Die Tatsache, dass die Ergebnisse von einem Lauf zum nächsten stark variieren, bedeutet, dass Sie ein Konvergenzproblem haben. In diesem Fall sollten Sie zunächst versuchen, weitere Iterationen auszuführen. Im Allgemeinen ist Konvergenz ein ziemlich kompliziertes Problem und die Lösungen variieren stark mit Anwendungen (und lesen Sie sorgfältig durch die Antwort und Kommentare Isaac gab Ihnen auf your other question). Wenn das Problem nach dem Erhöhen der Anzahl der Iterationen weiterhin besteht, können Sie es als neue Frage bereitstellen, indem Sie eine Stichprobe Ihrer Daten und den tatsächlichen Code angeben, den Sie zum Erstellen und Trainieren des Netzwerks verwenden.
+0

Vielen Dank für Ihre Antwort.(1) BUt Ich bin mir immer noch nicht sicher, wie die Lernkurve für PSO aussehen soll. Die X-Achse = Anzahl der Iterationen in PSO Nach jeder Generation oder Iteration von PSO wird die Fitness grafisch dargestellt. Habe ich Recht? (3) Wenn wir jedes Mal, wenn wir NN mit verschiedenen zufälligen Werten ausführen, gehen, werden die Gewichte, die wir als die Gewichte ansehen, die wir aus dem vorherigen Lauf erhalten haben, verloren gehen. Das selbe gilt für FCM, wenn ich das PSO für verschiedene Anfangswerte verwende (zB Run1 - PSO Iterationen 1: 300 gibt WeightMatrix1. Run2 - PSO Iterations 1: 300 gibt ein weiteres WeightMatrix2 usw. für 30 unabhängige Läufe) .Wie überprüfe ich dann die Performance? – SKM

+0

In Bezug auf Konvergenz, wenn ich NN OR FCM laufen bekomme ich negative Korrelation manchmal mit Klassifikationsrate = 0. Wenn ich dann wieder ausführen und neu ausführen, bekomme ich ein anderes Ergebnis. Daher sind die Ergebnisse schwankend.Bitte helfen Sie – SKM

+0

1) Ja. 3) Genau das meine ich mit dem Konvergenzproblem. Wie gesagt, Sie sollten Ihren Code und Ihre Daten wahrscheinlich veröffentlichen, wenn Sie Hilfe benötigen, um herauszufinden, warum Ihre Methode nicht konvergiert. – buzjwa

Verwandte Themen