net = narxnet(inputDelays,feedbackDelays,hiddenLayerSize,'open',trainFcn);
net.trainParam.max_fail=25; % max validation failures
% Prepare the Data for Training and Simulation (data is shifted to fill up % tapped delay line) [x,xi,ai,t] = preparets(net,x1,{},t1);
% Setup Division of Data for Training, Validation, Testing
net.divideFcn = 'divideblock'; % Divide data blockwise
net.divideMode = 'time'; % for dynamic networks
net.divideParam.trainRatio = 80/100;
net.divideParam.valRatio = 10/100;
net.divideParam.testRatio = 10/100;
% Choose a Performance Function
net.performFcn = 'mse'; % Mean Squared Error (default)
% Choose Plot Functions % For a list of all plot functions type: help nnplot
net.plotFcns = {'plotperform','plottrainstate', 'ploterrhist', ...
'plotregression', 'plotresponse', 'ploterrcorr', 'plotinerrcorr'};
% Train the Network [net,tr] = train(net,x,t,xi,ai);
Mein Problem ist nun, dass die ersten Vorhersagewerte (closed loop) weit weg vom Zielwert liegen (siehe Grafik im Anhang). Für eine zunehmende Anzahl an Zeitschritten wird das meist besser.
Habe ich einen Fehler im Code? Ist das ein häufiges Problem? Oder muss das an meinen Daten und/oder sonstigen Parametern (Delays, Anzahl hidden nodes etc.) liegen?
Ich habe nun die Erfahrung gemacht, dass es manchmal hilft, wenn sich der Datensatz für die Vorhersage im closed loop um ein paar Zeitschritte mit den letzten Werten im open-loop "überlappt". Ich habe so versucht dem Netz "bekannte" Daten zu präsentieren um so den initialen Fehler bei der Vorhersage zu minimieren.
Dafür hatte ich aber noch "dividerand" statt "divideblock" verwendet, da bei letzterem der Testdatensatz ja nicht mehr für das Training verwendet wird und der gewünschte "Wiedererkennungseffekt" ausbleiben würde.
Ist sowas legitim oder war das keine besonders gute Idee?
Habt ihr ähnliche Erfahrungen gemacht und vielleicht sogar schon Lösungen gefunden?
Vielen Dank für Ideen und Anregungen.
Viele Grüße
uagka
PS: Falls mir jemand noch die Plots: "Error-Autocorrelation" und "Input-Error Cross-Correlation" (aufzufinden im nntraintool wenn ein narxnet trainiert wird) und was man wie genau daraus ablesen kann erklären könnte wäre das super. Ich bin mir nicht sicher ob ich das schon richtig verstanden habe.
ich hatte vor Ewigkeiten das gleiche Problem; ich wollte damals die Bewegung eines mechanischen Systems vorhersagen. Letztlich habe ich das Problem gelöst, indem ich die closeloop-Funktion über Bord geworfen und selber realisiert hab. Du bruachst dazu eigentlich nur eine Schleife, in der du den Ausgang deines Netzes als neuen Eingang definierst. Als ersten Eingang wählst du den letzten Punkt in deinen Trainingsdaten. Gruß
auf jeden Fall ein interessanter Vorschlag!
Verstehe ich das richtig, dass quasi immer nur "one step ahead" vorhergesagt wird und der entsprechende output dann über eine manuell eingefügte for-schleife für die vorhersage des nächsten Schrittes genutzt wird? Für beispielsweise 10 Vorhersageschritte würde auch 10 mal das Netz simuliert werden?
Wie geht man in dem Fall mit den Delays um? Das reicht bei einem Delay > 1 ja nicht um die tapped delay line zu durchlaufen?
Verstehe ich das richtig, dass quasi immer nur "one step ahead" vorhergesagt wird und der entsprechende output dann über eine manuell eingefügte for-schleife für die vorhersage des nächsten Schrittes genutzt wird? Für beispielsweise 10 Vorhersageschritte würde auch 10 mal das Netz simuliert werden?
Richtig
uagka hat Folgendes geschrieben:
Wie geht man in dem Fall mit den Delays um? Das reicht bei einem Delay > 1 ja nicht um die tapped delay line zu durchlaufen?
Da kann ich leider nichts zu sagen, ich hatte damals ein einfaches FeedForward Netz ohne Rückkopplungen; würde einfach mal ein paar KonfigurationenSzenarien ausprobieren. Falls du eine Lösung gefunden hast, lass es mich wissen, würde mich sehr interessieren Gruß
ich werde demnächst meine Masterarbeit beginnen. Die Aufgabe hierbei ist, mit Hilfe von künstlichen Neuronalen Netzen eine Hochwasservorhersage für ein Gewässer zu erstellen.
Ich glaube für meinen Anwendungsfall benötige ich einen ähnlichen Aufbau wie bei deinem Neuronalen Netz für die Grundwsserstände.
Ist es möglich, dass du mir ein bisschen genauer erklärst was du genau gemacht hast?
Zum Training des Netzes habe ich verschiedene Daten von Niederschlagsmessungen im Einzugsgebiet aus den letzten 15 Jahren zur Verfügung. Diese sollen als Netzinput dienen. Des Weiteren habe ich gemessene Wasserstände an einem Pegel für den die Vorhersage erstellt werden soll.
Ich habe bisher noch nicht mit MATLAB gearbeitet, habe aber in den letzten drei Wochen den Grundlagenkurs von Mathworks sowie den Kurs für Neuronale Netze bearbeitet. Leider ist mir immer noch nicht so richtig klar, wie ich das beschriebene Problem angehen soll.
Meine Fragen bisher:
1.) Welcher Netzwerktyp ist für diesen Fall am besten geeignet? Nach meinen bisherigen Recherchen würde ich zu einem Multylayer-Feedforward Netzwerk tendieren.
2.) Ist es möglich, mehrere verschiedene Niederschlagsmessungen als Input einzugeben, die dann aber nur in einem Output als Wasserstand resultieren?
3.) Wie kann der unterschiedliche zeitliche Versatz zwischen den verschiedenen Niederschlagsstationen und dem Pegel realisiert werden? Oder wird das automatisch durch das Neuronale Netz realisiert?
Ich hoffe du kannst mir ein paar hilfreiche Tipps geben. Gerne auch zu Tutorials oder ähnlichem, die über die von MATLAB zur Verfügung gestellten Lernmaterialien hinausgehen.
Viele Grüße
Georg
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.