Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung |
p:ki:zeitreihe [2024/02/06 19:00] – Ralf Kretzschmar | p:ki:zeitreihe [2024/05/02 08:57] (aktuell) – Tscherter, Vincent |
---|
- Starte das untenstehende Programm und studiere die folgenden Punkte (es dauert einen kleinen Moment, bis die Zeitreihe angezeigt wird). | - Starte das untenstehende Programm und studiere die folgenden Punkte (es dauert einen kleinen Moment, bis die Zeitreihe angezeigt wird). |
* Während dem Training wird der Trainingsfehler "loss" (MSE für die +1 Stundenprognose) angezeigt. | * Während dem Training wird der Trainingsfehler "loss" (MSE für die +1 Stundenprognose) angezeigt. |
* Danach wird eine Grafik erzeugt mit | * Danach wird eine Grafik für eine Prognosezeitreihe ausgehend von einem Startpunkt erzeugt mit |
* der wahren, beobachteten Zeitreihe (orange) | * der wahren, beobachteten Zeitreihe (orange) |
* der vorhergesagten Zeitreihe (grün) | * der vorhergesagten Zeitreihe (grün) |
* dem MAE für die +1, +2, +3, ... + 120 Stundenprognosen (violett) | * Zusätzlich wird der MAE für die +1, +2, +3, ... + 120 Stundenprognosen (violett) berechnet. Der MAE wird über mehrere Prognosenzeitreihen ausgehend von mehreren, verschiedenen Startpunkten aus gemittelt. |
* Du kannst nach dem Training zwischen einer Beschreibung des neuronalen Netzes, dem Trainingsfehler und der Vorhersage über die Register ''Modell'', ''Training'' und ''Resultat'' hin und her wechseln. | * Du kannst nach dem Training zwischen einer Beschreibung des neuronalen Netzes, dem Trainingsfehler und der Vorhersage über die Register ''Modell'', ''Training'' und ''Resultat'' hin und her wechseln. |
- Notiere den MAE für die +72 Stundenprognose, fahre dazu einfach mit der Maus auf die Grafik und suche den MAE für ''x = 72''. {{gem/plain?0=N4XyA#a71e8c87a540f361}} | - Notiere den MAE für die +72 Stundenprognose, fahre dazu einfach mit der Maus auf die Grafik und suche den MAE für ''x = 72''. {{gem/plain?0=N4XyA#a71e8c87a540f361}} |
- Warum wird der MAE tentenziell immer grösser mit fortschreitender Prognosezeit? Schreibe deine Vermutung in das Textfeld. {{gem/plain?0=N4XyA#5daa8fe086e55930}} | - Warum wird der MAE tentenziell immer grösser mit fortschreitender Prognosezeit? Schreibe deine Vermutung in das Textfeld. {{gem/plain?0=N4XyA#5daa8fe086e55930}} |
- Vergleiche deine Antwort mit ++unserer Antwort|\\ \\ Für die Prognosezeit +1 Stunde verwendet das neuronale Netz nur gemessene (beobachtete) Daten. Für die Prognosezeit +2 Stunden wird bereits ein vorhergesagter Wert verwendet, für +3 Stunden zwei etc. Irgendwann basiert die Prognose nur noch auf vorhergesagten Daten und bald einmal auf vorhergesagten Daten, die auf vorhergesagten Daten basieren etc. Daher wird mit fortschreitender Prognosedauer der Fehler immer grösser.\\ \\ ++ | - Vergleiche deine Antwort mit ++unserer Antwort|\\ \\ Für die Prognosezeit +1 Stunde verwendet das neuronale Netz nur gemessene (beobachtete) Daten. Für die Prognosezeit +2 Stunden wird bereits ein vorhergesagter Wert verwendet, für +3 Stunden zwei etc. Irgendwann basiert die Prognose nur noch auf vorhergesagten Daten und bald einmal auf vorhergesagten Daten, die auf vorhergesagten Daten basieren etc. Daher wird mit fortschreitender Prognosedauer der Fehler immer grösser.\\ \\ ++ |
{{exorciser/jspg?javascript=%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%2F%2F%20Diese%20Trainings-%20und%20Updateparameter%20d%C3%BCrfen%20ge%C3%A4ndert%20werden.%0A%0Aconst%20TIMESERIES_FEATURES%20%3D%2012%3B%20%2F%2F%20ganzahliger%20Wert%20von%201%20bis%2024%0A%0Aconst%20LERNRATE%20%3D%200.1%3B%20%2F%2F%20Dezimalzahl%20%3E%200%0Aconst%20ANZAHL_HIDDEN_NEURONS%20%3D%2020%3B%20%2F%2F%20ganzzahliger%20Wert%20%3E%200%0Aconst%20ANZAHL_EPOCHEN%20%3D%20200%3B%20%2F%2F%20ganzzahliger%20Wert%20%3E%200%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20CONSTANTS%20AND%20GLOBAL%20VARIABLES%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%20data%0Aconst%20hourArray%20%3D%20%5B0%2C%201%2C%202%2C%203%2C%204%2C%205%2C%206%2C%207%2C%208%2C%209%2C%2010%2C%2011%2C%2012%2C%2013%2C%2014%2C%2015%2C%2016%2C%2017%2C%2018%2C%2019%2C%2020%2C%2021%2C%2022%2C%2023%5D%3B%0Aconst%20valueArray%20%3D%20%5B0.5%2C%200.44%2C%200.41%2C%200.43%2C%200.5%2C%200.62%2C%200.75%2C%200.87%2C%200.93%2C%200.93%2C%200.84%2C%200.69%2C%200.5%2C%200.31%2C%200.16%2C%200.07%2C%200.07%2C%200.13%2C%200.25%2C%200.38%2C%200.5%2C%200.57%2C%200.59%2C%200.56%5D%3B%0A%0A%2F%2F%20further%20constants%0Aconst%20PREDICTION_LIMIT%20%3D%20120%3B%0Aconst%20PERIODICITY%20%3D%20hourArray.length%3B%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20DATA%20HANDLING%20FUNCTIONS%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%0A%2F%2F%20create%20input%20data%0A%2F%2F%0Afunction%20createInputArray%28valueArray%29%20%7B%0A%09let%20inputArray%20%3D%20new%20Array%28valueArray.length%29.fill%280%29.map%28%28%29%20%3D%3E%20new%20Array%28TIMESERIES_FEATURES%29.fill%280%29%29%3B%20%2F%2F%20empty%20two-dimensional%20array%0A%09for%20%28v%20%3D%200%3B%20v%20%3C%20valueArray.length%3B%20v%2B%2B%29%20%7B%0A%09%09for%20%28f%20%3D%200%3B%20f%20%3C%20TIMESERIES_FEATURES%3B%20f%2B%2B%29%20%7B%0A%09%09%09inputArray%5Bv%5D%5Bf%5D%20%3D%20valueArray%5B%28v%20%2B%20f%29%20%25%20valueArray.length%5D%3B%0A%09%09%7D%0A%09%7D%0A%09return%20inputArray%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20create%20output%20data%0A%2F%2F%0Afunction%20createOutputArray%28valueArray%29%20%7B%0A%09let%20outputArray%20%3D%20new%20Array%28valueArray.length%29.fill%280%29%3B%0A%09for%20%28v%20%3D%200%3B%20v%20%3C%20valueArray.length%3B%20v%2B%2B%29%20%7B%0A%09%09outputArray%5Bv%5D%20%3D%20valueArray%5B%28v%20%2B%20TIMESERIES_FEATURES%29%20%25%20valueArray.length%5D%3B%0A%09%7D%0A%09return%20outputArray%3B%0A%7D%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20NEURAL%20NETWORK%20FUNCTIONS%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%0A%2F%2F%20build%20model%0A%2F%2F%0Afunction%20buildModel%28%29%20%7B%0A%09const%20model%20%3D%20tf.sequential%28%7B%0A%09%09layers%3A%20%5B%0A%09%09%09tf.layers.dense%28%7B%0A%09%09%09%09name%3A%20%27HiddenLayer1%27%2C%0A%09%09%09%09inputShape%3A%20%5BTIMESERIES_FEATURES%5D%2C%0A%09%09%09%09units%3A%20ANZAHL_HIDDEN_NEURONS%2C%0A%09%09%09%09activation%3A%20%27tanh%27%0A%09%09%09%7D%29%2C%0A%09%09%09tf.layers.dense%28%7B%0A%09%09%09%09name%3A%20%27OutputLayer%27%2C%0A%09%09%09%09units%3A%201%2C%0A%09%09%09%09activation%3A%20%27linear%27%0A%09%09%09%7D%29%0A%09%09%5D%0A%09%7D%29%3B%0A%09%2F%2F%20neural%20network%20training%0A%09model.compile%28%7B%0A%09%09optimizer%3A%20tf.train.sgd%28LERNRATE%29%2C%0A%09%09loss%3A%20tf.losses.meanSquaredError%0A%09%7D%29%3B%0A%09return%20model%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20train%20model%0A%2F%2F%0Aasync%20function%20trainModel%28model%2C%20trainInput%2C%20trainOutput%29%20%7B%0A%09let%20history%20%3D%20await%20model.fit%28%0A%09%09tf.tensor%28trainInput%29%2C%20tf.tensor%28trainOutput%29%2C%20%7B%0A%09%09%09epochs%3A%20ANZAHL_EPOCHEN%20%2B%201%2C%0A%09%09%09batchSize%3A%20trainInput.length%2C%0A%09%09%09shuffle%3A%20true%2C%0A%09%09%09callbacks%3A%20%5B%0A%09%09%09%09tfvis.show.fitCallbacks%28%7B%0A%09%09%09%09%09name%3A%20%27Trainingsfehler%27%2C%0A%09%09%09%09%09tab%3A%20%27Training%27%0A%09%09%09%09%7D%2C%20%5B%27loss%27%5D%2C%20%7B%0A%09%09%09%09%09height%3A%20200%2C%0A%09%09%09%09%09callbacks%3A%20%5B%27onEpochEnd%27%5D%2C%0A%09%09%09%09%09yLabel%3A%20%27MSE%27%0A%09%09%09%09%7D%29%2C%0A%09%09%09%5D%0A%09%09%7D%29%3B%0A%09return%20history%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20predict%20timeseries%20ahead%20and%20return%20object%20for%20tfvis%0A%2F%2F%0Aasync%20function%20predictTimeseries%28model%2C%20inputArray%29%20%7B%0A%09let%20mae%20%3D%20%5B%5D%3B%0A%09let%20predictedOutput%20%3D%20%5B%5D%3B%0A%09let%20inputSample%20%3D%20%5BinputArray%5BinputArray.length%20-%20TIMESERIES_FEATURES%5D.slice%28%29%5D%3B%0A%09let%20outputTensor%2C%20outputArray%3B%0A%09for%20%28t%20%3D%200%3B%20t%20%3C%20PREDICTION_LIMIT%3B%20t%2B%2B%29%20%7B%0A%09%09%2F%2F%20predict%20one%20timestep%0A%09%09outputTensor%20%3D%20await%20model.predict%28tf.tensor%28inputSample%29%29%3B%0A%09%09outputArray%20%3D%20await%20outputTensor.arraySync%28%29%3B%0A%09%09%2F%2F%20shift%20timeseries%20by%20one%20step%0A%09%09for%20%28f%20%3D%201%3B%20f%20%3C%20TIMESERIES_FEATURES%3B%20f%2B%2B%29%20%7B%0A%09%09%09inputSample%5B0%5D%5Bf%20-%201%5D%20%3D%20inputSample%5B0%5D%5Bf%5D%3B%0A%09%09%7D%0A%09%09%2F%2F%20add%20prediction%20as%20most%20recent%20time%20in%20timeseries%0A%09%09inputSample%5B0%5D%5BTIMESERIES_FEATURES%20-%201%5D%20%3D%20outputArray%5B0%5D%5B0%5D%3B%0A%09%09%2F%2F%20store%20predicted%20time%0A%09%09predictedOutput.push%28outputArray%5B0%5D%5B0%5D%29%3B%0A%09%09%2F%2F%20store%20initial%20mae%20values%0A%09%09mae.push%28Math.abs%28outputArray%5B0%5D%5B0%5D%20-%20valueArray%5Bt%20%25%20PERIODICITY%5D%29%29%3B%0A%09%7D%0A%09%2F%2F%20summ%20mae%20values%20for%20shifted%20predictions%0A%09for%20%28s%20%3D%201%3B%20s%20%3C%20PERIODICITY%3B%20s%20%3D%20s%20%2B%201%29%20%7B%0A%09%09inputSample%20%3D%20%5BinputArray%5B%28inputArray.length%20-%20TIMESERIES_FEATURES%20%2B%20s%29%20%25%20PERIODICITY%5D.slice%28%29%5D%3B%0A%09%09for%20%28t%20%3D%200%3B%20t%20%3C%20PREDICTION_LIMIT%3B%20t%2B%2B%29%20%7B%0A%09%09%09%2F%2F%20predict%20one%20timestep%0A%09%09%09outputTensor%20%3D%20await%20model.predict%28tf.tensor%28inputSample%29%29%3B%0A%09%09%09outputArray%20%3D%20await%20outputTensor.arraySync%28%29%3B%0A%09%09%09%2F%2F%20shift%20timeseries%20by%20one%20step%0A%09%09%09for%20%28f%20%3D%201%3B%20f%20%3C%20TIMESERIES_FEATURES%3B%20f%2B%2B%29%20%7B%0A%09%09%09%09inputSample%5B0%5D%5Bf%20-%201%5D%20%3D%20inputSample%5B0%5D%5Bf%5D%3B%0A%09%09%09%7D%0A%09%09%09%2F%2F%20add%20prediction%20as%20most%20recent%20time%20in%20timeseries%0A%09%09%09inputSample%5B0%5D%5BTIMESERIES_FEATURES%20-%201%5D%20%3D%20outputArray%5B0%5D%5B0%5D%3B%0A%09%09%09%2F%2F%20add%20mae%20values%0A%09%09%09mae%5Bt%5D%20%2B%3D%20Math.abs%28outputArray%5B0%5D%5B0%5D%20-%20valueArray%5B%28t%20%2B%20s%29%20%25%20PERIODICITY%5D%29%3B%0A%09%09%7D%0A%09%7D%0A%09%2F%2F%20calculate%20mae%20mean%20values%0A%09for%20%28t%20%3D%200%3B%20t%20%3C%20mae.length%3B%20t%2B%2B%29%20%7B%0A%09%09mae%5Bt%5D%20%3D%20mae%5Bt%5D%20%2F%20PERIODICITY%3B%0A%09%7D%0A%09return%20%5BpredictedOutput%2C%20mae%5D%3B%0A%7D%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20FUNCTIONS%20FOR%20VISUALISATION%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%0A%2F%2F%20draw%20timeseries%20prediction%0A%2F%2F%0Afunction%20drawTimeseries%28trueArray%2C%20predictedArray%2C%20mae%29%20%7B%0A%09%2F%2F%20observed%20values%0A%09let%20trueArrayObject%20%3D%20%5B%5D%3B%0A%09for%20%28t%20%3D%200%3B%20t%20%3C%20predictedArray.length%3B%20t%2B%2B%29%20%7B%0A%09%09trueArrayObject.push%28%7B%0A%09%09%09x%3A%20t%2C%0A%09%09%09y%3A%20trueArray%5Bt%20%25%20trueArray.length%5D%20%2a%2010%0A%09%09%7D%29%3B%0A%09%7D%0A%09%2F%2F%20predicted%20values%0A%09let%20predictedArrayObject%20%3D%20%5B%5D%3B%0A%09for%20%28t%20%3D%200%3B%20t%20%3C%20predictedArray.length%3B%20t%2B%2B%29%20%7B%0A%09%09predictedArrayObject.push%28%7B%0A%09%09%09x%3A%20t%2C%0A%09%09%09y%3A%20predictedArray%5Bt%5D%20%2a%2010%0A%09%09%7D%29%3B%0A%09%7D%0A%09%2F%2F%20prediction%20error%0A%09let%20meanPredictionError%20%3D%20%5B%5D%3B%0A%09for%20%28t%20%3D%200%3B%20t%20%3C%20predictedArray.length%3B%20t%2B%2B%29%20%7B%0A%09%09meanPredictionError.push%28%7B%0A%09%09%09x%3A%20t%2C%0A%09%09%09y%3A%20mae%5Bt%5D%20%2a%2010%0A%09%09%7D%29%3B%0A%09%7D%0A%0A%09%2F%2F%20draw%20everything%0A%09let%20data%2C%20look%3B%0A%09let%20surface%20%3D%20%7B%0A%09%09name%3A%20%22Zeitreihenvorhersage%22%2C%0A%09%09tab%3A%20%27Resultat%27%0A%09%7D%3B%0A%09data%20%3D%20%7B%0A%09%09values%3A%20%5BtrueArrayObject%2C%20predictedArrayObject%2C%20meanPredictionError%5D%2C%0A%09%09series%3A%20%5B%22beobachtet%22%2C%20%22vorhergesagt%22%2C%20%22MAE%22%5D%0A%09%7D%3B%0A%09look%20%3D%20%7B%0A%09%09xLabel%3A%20%27Prognosezeit%20%28Stunden%29%27%2C%0A%09%09yLabel%3A%20%27Wert%27%2C%0A%09%09zoomToFit%3A%20true%2C%0A%09%09seriesColors%3A%20%5B%22darkmagenta%22%2C%20%22coral%22%2C%20%22limegreen%22%5D%0A%09%7D%3B%0A%09tfvis.render.linechart%28surface%2C%20data%2C%20look%29%3B%0A%7D%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20MAIN%20PROGRAM%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%0A%2F%2F%20main%20function%0A%2F%2F%0Aasync%20function%20run%28%29%20%7B%0A%09%2F%2Fnoprotect%0A%0A%09%2F%2F%20check%20number%20of%20TIME_SERIES_FEATURES%0A%09if%20%28TIMESERIES_FEATURES%20%3E%20PERIODICITY%20%7C%7C%20TIMESERIES_FEATURES%20%3C%200%29%20%7B%0A%09%09console.log%28%22%E2%9A%A0%EF%B8%8F%20TIMESERIES_FEATURES%20muss%20zwischen%200%20und%20%22%20%2B%20PERIODICITY%20%2B%20%22%20liegen%21%22%29%3B%0A%09%09return%3B%0A%09%7D%0A%0A%09%2F%2F%20write%20preferences%20on%20console%0A%09console.log%28%22Zeitreihenvorhersage%22%29%3B%0A%09console.log%28%22Neuronales%20Netz%3A%20Anzahl%20Eingangsgr%C3%B6ssen%3A%20%22%20%2B%20TIMESERIES_FEATURES%20%2B%20%22%2C%20Anzahl%20Hidden%20Neuronen%3A%20%22%20%2B%20ANZAHL_HIDDEN_NEURONS%29%3B%0A%09console.log%28%22Training%3A%20Lernrate%3A%20%22%20%2B%20LERNRATE%20%2B%20%22%2C%20Epochen%3A%20%22%20%2B%20ANZAHL_EPOCHEN%29%3B%0A%0A%09%2F%2F%20create%20input%20and%20output%20data%0A%09let%20inputArray%20%3D%20createInputArray%28valueArray%29%3B%0A%09let%20outputArray%20%3D%20createOutputArray%28valueArray%29%3B%0A%0A%09%2F%2F%20build%20and%20show%20model%0A%09let%20model%20%3D%20buildModel%28%29%3B%0A%09tfvis.show.modelSummary%28%7B%0A%09%09name%3A%20%27Neuronales%20Netz%27%2C%0A%09%09tab%3A%20%27Modell%27%0A%09%7D%2C%20model%29%3B%0A%0A%09%2F%2F%20train%20model%0A%09let%20history%20%3D%20await%20trainModel%28model%2C%20inputArray%2C%20outputArray%29%3B%0A%09console.log%28%22Entg%C3%BCltiger%20Trainingsfehler%20%28MSE%29%3A%20%22%20%2B%20history.history.loss%5BANZAHL_EPOCHEN%5D%29%3B%0A%0A%09%2F%2F%20predict%20and%20show%20timeseries%0A%09let%20%5BpredictedTimeseries%2C%20mae%5D%20%3D%20await%20predictTimeseries%28model%2C%20inputArray%29%3B%0A%09drawTimeseries%28valueArray%2C%20predictedTimeseries%2C%20mae%29%3B%0A%0A%7D%0Adocument.addEventListener%28%27DOMContentLoaded%27%2C%20run%29%3B&css=undefined&html=%3Cscript%20src%3D%22https%3A%2F%2Fcdn.jsdelivr.net%2Fnpm%2Fp5%22%3E%3C%2Fscript%3E%0A%3Cscript%20src%3D%22https%3A%2F%2Fcdn.jsdelivr.net%2Fnpm%2F%40tensorflow%2Ftfjs%40latest%2Fdist%2Ftf.min.js%22%3E%3C%2Fscript%3E%0A%3Cscript%20src%3D%22https%3A%2F%2Fcdn.jsdelivr.net%2Fnpm%2F%40tensorflow%2Ftfjs-vis%22%3E%3C%2Fscript%3E&autorun=off&height=700px#TimeseriesRaw}} | {{exorciser/jspg?javascript=%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%2F%2F%20Diese%20Trainings-%20und%20Updateparameter%20d%C3%BCrfen%20ge%C3%A4ndert%20werden.%0A%0Aconst%20TIMESERIES_FEATURES%20%3D%2012%3B%20%2F%2F%20ganzahliger%20Wert%20von%201%20bis%2024%0A%0Aconst%20LERNRATE%20%3D%200.1%3B%20%2F%2F%20Dezimalzahl%20%3E%200%0Aconst%20ANZAHL_HIDDEN_NEURONS%20%3D%2020%3B%20%2F%2F%20ganzzahliger%20Wert%20%3E%200%0Aconst%20ANZAHL_EPOCHEN%20%3D%20200%3B%20%2F%2F%20ganzzahliger%20Wert%20%3E%200%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20CONSTANTS%20AND%20GLOBAL%20VARIABLES%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%20data%0Aconst%20hourArray%20%3D%20%5B0%2C%201%2C%202%2C%203%2C%204%2C%205%2C%206%2C%207%2C%208%2C%209%2C%2010%2C%2011%2C%2012%2C%2013%2C%2014%2C%2015%2C%2016%2C%2017%2C%2018%2C%2019%2C%2020%2C%2021%2C%2022%2C%2023%5D%3B%0Aconst%20valueArray%20%3D%20%5B0.5%2C%200.44%2C%200.41%2C%200.43%2C%200.5%2C%200.62%2C%200.75%2C%200.87%2C%200.93%2C%200.93%2C%200.84%2C%200.69%2C%200.5%2C%200.31%2C%200.16%2C%200.07%2C%200.07%2C%200.13%2C%200.25%2C%200.38%2C%200.5%2C%200.57%2C%200.59%2C%200.56%5D%3B%0A%0A%2F%2F%20further%20constants%0Aconst%20PREDICTION_LIMIT%20%3D%20120%3B%0Aconst%20PERIODICITY%20%3D%20hourArray.length%3B%0Aconst%20GRAPH_WIDH%20%3D%20600%3B%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20DATA%20HANDLING%20FUNCTIONS%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%0A%2F%2F%20create%20input%20data%0A%2F%2F%0Afunction%20createInputArray%28valueArray%29%20%7B%0A%09let%20inputArray%20%3D%20new%20Array%28valueArray.length%29.fill%280%29.map%28%28%29%20%3D%3E%20new%20Array%28TIMESERIES_FEATURES%29.fill%280%29%29%3B%20%2F%2F%20empty%20two-dimensional%20array%0A%09for%20%28v%20%3D%200%3B%20v%20%3C%20valueArray.length%3B%20v%2B%2B%29%20%7B%0A%09%09for%20%28f%20%3D%200%3B%20f%20%3C%20TIMESERIES_FEATURES%3B%20f%2B%2B%29%20%7B%0A%09%09%09inputArray%5Bv%5D%5Bf%5D%20%3D%20valueArray%5B%28v%20%2B%20f%29%20%25%20valueArray.length%5D%3B%0A%09%09%7D%0A%09%7D%0A%09return%20inputArray%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20create%20output%20data%0A%2F%2F%0Afunction%20createOutputArray%28valueArray%29%20%7B%0A%09let%20outputArray%20%3D%20new%20Array%28valueArray.length%29.fill%280%29%3B%0A%09for%20%28v%20%3D%200%3B%20v%20%3C%20valueArray.length%3B%20v%2B%2B%29%20%7B%0A%09%09outputArray%5Bv%5D%20%3D%20valueArray%5B%28v%20%2B%20TIMESERIES_FEATURES%29%20%25%20valueArray.length%5D%3B%0A%09%7D%0A%09return%20outputArray%3B%0A%7D%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20NEURAL%20NETWORK%20FUNCTIONS%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%0A%2F%2F%20build%20model%0A%2F%2F%0Afunction%20buildModel%28%29%20%7B%0A%09const%20model%20%3D%20tf.sequential%28%7B%0A%09%09layers%3A%20%5B%0A%09%09%09tf.layers.dense%28%7B%0A%09%09%09%09name%3A%20%27HiddenLayer1%27%2C%0A%09%09%09%09inputShape%3A%20%5BTIMESERIES_FEATURES%5D%2C%0A%09%09%09%09units%3A%20ANZAHL_HIDDEN_NEURONS%2C%0A%09%09%09%09activation%3A%20%27tanh%27%0A%09%09%09%7D%29%2C%0A%09%09%09tf.layers.dense%28%7B%0A%09%09%09%09name%3A%20%27OutputLayer%27%2C%0A%09%09%09%09units%3A%201%2C%0A%09%09%09%09activation%3A%20%27linear%27%0A%09%09%09%7D%29%0A%09%09%5D%0A%09%7D%29%3B%0A%09%2F%2F%20neural%20network%20training%0A%09model.compile%28%7B%0A%09%09optimizer%3A%20tf.train.sgd%28LERNRATE%29%2C%0A%09%09loss%3A%20tf.losses.meanSquaredError%0A%09%7D%29%3B%0A%09return%20model%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20train%20model%0A%2F%2F%0Aasync%20function%20trainModel%28model%2C%20trainInput%2C%20trainOutput%29%20%7B%0A%09let%20history%20%3D%20await%20model.fit%28%0A%09%09tf.tensor%28trainInput%29%2C%20tf.tensor%28trainOutput%29%2C%20%7B%0A%09%09%09epochs%3A%20ANZAHL_EPOCHEN%20%2B%201%2C%0A%09%09%09batchSize%3A%20trainInput.length%2C%0A%09%09%09shuffle%3A%20true%2C%0A%09%09%09callbacks%3A%20%5B%0A%09%09%09%09tfvis.show.fitCallbacks%28%7B%0A%09%09%09%09%09name%3A%20%27Trainingsfehler%27%2C%0A%09%09%09%09%09tab%3A%20%27Training%27%2C%0A%09%09%09%09%09styles%3A%20%7B%0A%09%09%09%09%09%09width%3A%20GRAPH_WIDH%0A%09%09%09%09%09%7D%0A%09%09%09%09%7D%2C%20%5B%27loss%27%5D%2C%20%7B%0A%09%09%09%09%09height%3A%20200%2C%0A%09%09%09%09%09callbacks%3A%20%5B%27onEpochEnd%27%5D%2C%0A%09%09%09%09%09yLabel%3A%20%27MSE%27%0A%09%09%09%09%7D%29%2C%0A%09%09%09%5D%0A%09%09%7D%29%3B%0A%09return%20history%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20predict%20timeseries%20ahead%20and%20return%20object%20for%20tfvis%0A%2F%2F%0Aasync%20function%20predictTimeseries%28model%2C%20inputArray%29%20%7B%0A%09let%20mae%20%3D%20%5B%5D%3B%0A%09let%20predictedOutput%20%3D%20%5B%5D%3B%0A%09let%20inputSample%20%3D%20%5BinputArray%5BinputArray.length%20-%20TIMESERIES_FEATURES%5D.slice%28%29%5D%3B%0A%09let%20outputTensor%2C%20outputArray%3B%0A%09for%20%28t%20%3D%200%3B%20t%20%3C%20PREDICTION_LIMIT%3B%20t%2B%2B%29%20%7B%0A%09%09%2F%2F%20predict%20one%20timestep%0A%09%09outputTensor%20%3D%20await%20model.predict%28tf.tensor%28inputSample%29%29%3B%0A%09%09outputArray%20%3D%20await%20outputTensor.arraySync%28%29%3B%0A%09%09%2F%2F%20shift%20timeseries%20by%20one%20step%0A%09%09for%20%28f%20%3D%201%3B%20f%20%3C%20TIMESERIES_FEATURES%3B%20f%2B%2B%29%20%7B%0A%09%09%09inputSample%5B0%5D%5Bf%20-%201%5D%20%3D%20inputSample%5B0%5D%5Bf%5D%3B%0A%09%09%7D%0A%09%09%2F%2F%20add%20prediction%20as%20most%20recent%20time%20in%20timeseries%0A%09%09inputSample%5B0%5D%5BTIMESERIES_FEATURES%20-%201%5D%20%3D%20outputArray%5B0%5D%5B0%5D%3B%0A%09%09%2F%2F%20store%20predicted%20time%0A%09%09predictedOutput.push%28outputArray%5B0%5D%5B0%5D%29%3B%0A%09%09%2F%2F%20store%20initial%20mae%20values%0A%09%09mae.push%28Math.abs%28outputArray%5B0%5D%5B0%5D%20-%20valueArray%5Bt%20%25%20PERIODICITY%5D%29%29%3B%0A%09%7D%0A%09%2F%2F%20summ%20mae%20values%20for%20shifted%20predictions%0A%09for%20%28s%20%3D%201%3B%20s%20%3C%20PERIODICITY%3B%20s%20%3D%20s%20%2B%201%29%20%7B%0A%09%09inputSample%20%3D%20%5BinputArray%5B%28inputArray.length%20-%20TIMESERIES_FEATURES%20%2B%20s%29%20%25%20PERIODICITY%5D.slice%28%29%5D%3B%0A%09%09for%20%28t%20%3D%200%3B%20t%20%3C%20PREDICTION_LIMIT%3B%20t%2B%2B%29%20%7B%0A%09%09%09%2F%2F%20predict%20one%20timestep%0A%09%09%09outputTensor%20%3D%20await%20model.predict%28tf.tensor%28inputSample%29%29%3B%0A%09%09%09outputArray%20%3D%20await%20outputTensor.arraySync%28%29%3B%0A%09%09%09%2F%2F%20shift%20timeseries%20by%20one%20step%0A%09%09%09for%20%28f%20%3D%201%3B%20f%20%3C%20TIMESERIES_FEATURES%3B%20f%2B%2B%29%20%7B%0A%09%09%09%09inputSample%5B0%5D%5Bf%20-%201%5D%20%3D%20inputSample%5B0%5D%5Bf%5D%3B%0A%09%09%09%7D%0A%09%09%09%2F%2F%20add%20prediction%20as%20most%20recent%20time%20in%20timeseries%0A%09%09%09inputSample%5B0%5D%5BTIMESERIES_FEATURES%20-%201%5D%20%3D%20outputArray%5B0%5D%5B0%5D%3B%0A%09%09%09%2F%2F%20add%20mae%20values%0A%09%09%09mae%5Bt%5D%20%2B%3D%20Math.abs%28outputArray%5B0%5D%5B0%5D%20-%20valueArray%5B%28t%20%2B%20s%29%20%25%20PERIODICITY%5D%29%3B%0A%09%09%7D%0A%09%7D%0A%09%2F%2F%20calculate%20mae%20mean%20values%0A%09for%20%28t%20%3D%200%3B%20t%20%3C%20mae.length%3B%20t%2B%2B%29%20%7B%0A%09%09mae%5Bt%5D%20%3D%20mae%5Bt%5D%20%2F%20PERIODICITY%3B%0A%09%7D%0A%09return%20%5BpredictedOutput%2C%20mae%5D%3B%0A%7D%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20FUNCTIONS%20FOR%20VISUALISATION%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%0A%2F%2F%20draw%20timeseries%20prediction%0A%2F%2F%0Afunction%20drawTimeseries%28trueArray%2C%20predictedArray%2C%20mae%29%20%7B%0A%09%2F%2F%20observed%20values%0A%09let%20trueArrayObject%20%3D%20%5B%5D%3B%0A%09for%20%28t%20%3D%200%3B%20t%20%3C%20predictedArray.length%3B%20t%2B%2B%29%20%7B%0A%09%09trueArrayObject.push%28%7B%0A%09%09%09x%3A%20t%2C%0A%09%09%09y%3A%20trueArray%5Bt%20%25%20trueArray.length%5D%20%2a%2010%0A%09%09%7D%29%3B%0A%09%7D%0A%09%2F%2F%20predicted%20values%0A%09let%20predictedArrayObject%20%3D%20%5B%5D%3B%0A%09for%20%28t%20%3D%200%3B%20t%20%3C%20predictedArray.length%3B%20t%2B%2B%29%20%7B%0A%09%09predictedArrayObject.push%28%7B%0A%09%09%09x%3A%20t%2C%0A%09%09%09y%3A%20predictedArray%5Bt%5D%20%2a%2010%0A%09%09%7D%29%3B%0A%09%7D%0A%09%2F%2F%20prediction%20error%0A%09let%20meanPredictionError%20%3D%20%5B%5D%3B%0A%09for%20%28t%20%3D%200%3B%20t%20%3C%20predictedArray.length%3B%20t%2B%2B%29%20%7B%0A%09%09meanPredictionError.push%28%7B%0A%09%09%09x%3A%20t%2C%0A%09%09%09y%3A%20mae%5Bt%5D%20%2a%2010%0A%09%09%7D%29%3B%0A%09%7D%0A%0A%09%2F%2F%20draw%20everything%0A%09let%20data%2C%20look%3B%0A%09let%20surface%20%3D%20%7B%0A%09%09name%3A%20%22Zeitreihenvorhersage%22%2C%0A%09%09tab%3A%20%27Resultat%27%2C%0A%09%09styles%3A%20%7B%0A%09%09%09width%3A%20GRAPH_WIDH%0A%09%09%7D%0A%09%7D%3B%0A%09data%20%3D%20%7B%0A%09%09values%3A%20%5BtrueArrayObject%2C%20predictedArrayObject%2C%20meanPredictionError%5D%2C%0A%09%09series%3A%20%5B%22beobachtet%22%2C%20%22vorhergesagt%22%2C%20%22MAE%22%5D%0A%09%7D%3B%0A%09look%20%3D%20%7B%0A%09%09xLabel%3A%20%27Prognosezeit%20%28Stunden%29%27%2C%0A%09%09yLabel%3A%20%27Wert%27%2C%0A%09%09zoomToFit%3A%20true%2C%0A%09%09seriesColors%3A%20%5B%22darkmagenta%22%2C%20%22coral%22%2C%20%22limegreen%22%5D%0A%09%7D%3B%0A%09tfvis.render.linechart%28surface%2C%20data%2C%20look%29%3B%0A%7D%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20MAIN%20PROGRAM%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%0A%2F%2F%20main%20function%0A%2F%2F%0Aasync%20function%20run%28%29%20%7B%0A%09%2F%2Fnoprotect%0A%0A%09%2F%2F%20check%20number%20of%20TIME_SERIES_FEATURES%0A%09if%20%28TIMESERIES_FEATURES%20%3E%20PERIODICITY%20%7C%7C%20TIMESERIES_FEATURES%20%3C%200%29%20%7B%0A%09%09console.log%28%22%E2%9A%A0%EF%B8%8F%20TIMESERIES_FEATURES%20muss%20zwischen%200%20und%20%22%20%2B%20PERIODICITY%20%2B%20%22%20liegen%21%22%29%3B%0A%09%09return%3B%0A%09%7D%0A%0A%09%2F%2F%20write%20preferences%20on%20console%0A%09console.log%28%22Zeitreihenvorhersage%22%29%3B%0A%09console.log%28%22Neuronales%20Netz%3A%20Anzahl%20Eingangsgr%C3%B6ssen%3A%20%22%20%2B%20TIMESERIES_FEATURES%20%2B%20%22%2C%20Anzahl%20Hidden%20Neuronen%3A%20%22%20%2B%20ANZAHL_HIDDEN_NEURONS%29%3B%0A%09console.log%28%22Training%3A%20Lernrate%3A%20%22%20%2B%20LERNRATE%20%2B%20%22%2C%20Epochen%3A%20%22%20%2B%20ANZAHL_EPOCHEN%29%3B%0A%0A%09%2F%2F%20create%20input%20and%20output%20data%0A%09let%20inputArray%20%3D%20createInputArray%28valueArray%29%3B%0A%09let%20outputArray%20%3D%20createOutputArray%28valueArray%29%3B%0A%0A%09%2F%2F%20build%20and%20show%20model%0A%09let%20model%20%3D%20buildModel%28%29%3B%0A%09if%20%28%21tfvis.visor%28%29.isFullscreen%28%29%29%20%7B%0A%09%09tfvis.visor%28%29.toggleFullScreen%28%29%3B%0A%09%7D%0A%09tfvis.show.modelSummary%28%7B%0A%09%09name%3A%20%27Neuronales%20Netz%27%2C%0A%09%09tab%3A%20%27Modell%27%2C%0A%09%09styles%3A%20%7B%0A%09%09%09width%3A%20GRAPH_WIDH%0A%09%09%7D%0A%09%7D%2C%20model%29%3B%0A%0A%09%2F%2F%20train%20model%0A%09let%20history%20%3D%20await%20trainModel%28model%2C%20inputArray%2C%20outputArray%29%3B%0A%09console.log%28%22Entg%C3%BCltiger%20Trainingsfehler%20%28MSE%29%3A%20%22%20%2B%20history.history.loss%5BANZAHL_EPOCHEN%5D%29%3B%0A%0A%09%2F%2F%20predict%20and%20show%20timeseries%0A%09let%20%5BpredictedTimeseries%2C%20mae%5D%20%3D%20await%20predictTimeseries%28model%2C%20inputArray%29%3B%0A%09drawTimeseries%28valueArray%2C%20predictedTimeseries%2C%20mae%29%3B%0A%0A%7D%0Adocument.addEventListener%28%27DOMContentLoaded%27%2C%20run%29%3B&css=undefined&html=%3Cscript%20src%3D%22https%3A%2F%2Fapp.exorciser.ch%2Flib%2Fp5.js%22%3E%3C%2Fscript%3E%0A%3Cscript%20src%3D%22https%3A%2F%2Fcdn.jsdelivr.net%2Fnpm%2F%40tensorflow%2Ftfjs%40latest%2Fdist%2Ftf.min.js%22%3E%3C%2Fscript%3E%0A%3Cscript%20src%3D%22https%3A%2F%2Fcdn.jsdelivr.net%2Fnpm%2F%40tensorflow%2Ftfjs-vis%22%3E%3C%2Fscript%3E&autorun=off&height=700px#TimeseriesRaw}} |
| |
== ✍ Auftrag 1 – Teil 2 == | == ✍ Auftrag 1 – Teil 2 == |
- Verglichen mit dem MAE in "Auftrag 1 - Teil 1" ist das Resultat besser oder schlechter?{{gem/plain?0=N4XyA#21a4e7574c0199e5}} | - Verglichen mit dem MAE in "Auftrag 1 - Teil 1" ist das Resultat besser oder schlechter?{{gem/plain?0=N4XyA#21a4e7574c0199e5}} |
- Wenn du das Programm mehrfach startest, sind die Resultate in etwa gleich gut oder stellst du grössere Unterschiede fest? | - Wenn du das Programm mehrfach startest, sind die Resultate in etwa gleich gut oder stellst du grössere Unterschiede fest? |
{{exorciser/jspg?javascript=%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%2F%2F%20Diese%20Trainings-%20und%20Updateparameter%20d%C3%BCrfen%20ge%C3%A4ndert%20werden.%0A%0Aconst%20TIMESERIES_FEATURES%20%3D%2012%3B%20%2F%2F%20ganzahliger%20Wert%20von%201%20bis%2024%0A%0Aconst%20LERNRATE%20%3D%200.1%3B%20%2F%2F%20Dezimalzahl%20%3E%200%0Aconst%20ANZAHL_HIDDEN_NEURONS%20%3D%2020%3B%20%2F%2F%20ganzzahliger%20Wert%20%3E%200%0Aconst%20ANZAHL_EPOCHEN%20%3D%20200%3B%20%2F%2F%20ganzzahliger%20Wert%20%3E%200%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20CONSTANTS%20AND%20GLOBAL%20VARIABLES%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%20data%0Aconst%20hourArray%20%3D%20%5B0%2C%201%2C%202%2C%203%2C%204%2C%205%2C%206%2C%207%2C%208%2C%209%2C%2010%2C%2011%2C%2012%2C%2013%2C%2014%2C%2015%2C%2016%2C%2017%2C%2018%2C%2019%2C%2020%2C%2021%2C%2022%2C%2023%5D%3B%0Aconst%20valueArray%20%3D%20%5B0.5%2C%200.44%2C%200.41%2C%200.43%2C%200.5%2C%200.62%2C%200.75%2C%200.87%2C%200.93%2C%200.93%2C%200.84%2C%200.69%2C%200.5%2C%200.31%2C%200.16%2C%200.07%2C%200.07%2C%200.13%2C%200.25%2C%200.38%2C%200.5%2C%200.57%2C%200.59%2C%200.56%5D%3B%0A%0A%2F%2F%20further%20constants%0Aconst%20PREDICTION_LIMIT%20%3D%20120%3B%0Aconst%20PERIODICITY%20%3D%20hourArray.length%3B%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20DATA%20HANDLING%20FUNCTIONS%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%0A%2F%2F%20create%20input%20data%0A%2F%2F%0Afunction%20createInputArray%28valueArray%2C%20hourArray%29%20%7B%0A%09let%20inputArray%20%3D%20new%20Array%28valueArray.length%29.fill%280%29.map%28%28%29%20%3D%3E%20new%20Array%28TIMESERIES_FEATURES%20%2B%201%29.fill%280%29%29%3B%20%2F%2F%20empty%20two-dimensional%20array%0A%09for%20%28v%20%3D%200%3B%20v%20%3C%20valueArray.length%3B%20v%2B%2B%29%20%7B%0A%09%09for%20%28f%20%3D%200%3B%20f%20%3C%20TIMESERIES_FEATURES%3B%20f%2B%2B%29%20%7B%0A%09%09%09inputArray%5Bv%5D%5Bf%5D%20%3D%20valueArray%5B%28v%20%2B%20f%29%20%25%20valueArray.length%5D%3B%0A%09%09%7D%0A%09%09%2F%2F%20hour%20of%20%22actual%22%20time%20%28normalized%29%0A%09%09inputArray%5Bv%5D%5BTIMESERIES_FEATURES%5D%20%3D%20hourArray%5B%28v%20%2B%20TIMESERIES_FEATURES%20-%201%29%20%25%20hourArray.length%5D%20%2F%2012%20-%201%3B%0A%09%7D%0A%09return%20inputArray%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20create%20output%20data%0A%2F%2F%0Afunction%20createOutputArray%28valueArray%29%20%7B%0A%09let%20outputArray%20%3D%20new%20Array%28valueArray.length%29.fill%280%29%3B%0A%09for%20%28v%20%3D%200%3B%20v%20%3C%20valueArray.length%3B%20v%2B%2B%29%20%7B%0A%09%09outputArray%5Bv%5D%20%3D%20valueArray%5B%28v%20%2B%20TIMESERIES_FEATURES%29%20%25%20valueArray.length%5D%3B%0A%09%7D%0A%09return%20outputArray%3B%0A%7D%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20NEURAL%20NETWORK%20FUNCTIONS%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%0A%2F%2F%20build%20model%0A%2F%2F%0Afunction%20buildModel%28%29%20%7B%0A%09const%20model%20%3D%20tf.sequential%28%7B%0A%09%09layers%3A%20%5B%0A%09%09%09tf.layers.dense%28%7B%0A%09%09%09%09name%3A%20%27HiddenLayer1%27%2C%0A%09%09%09%09inputShape%3A%20%5BTIMESERIES_FEATURES%20%2B%201%5D%2C%0A%09%09%09%09units%3A%20ANZAHL_HIDDEN_NEURONS%2C%0A%09%09%09%09activation%3A%20%27tanh%27%0A%09%09%09%7D%29%2C%0A%09%09%09tf.layers.dense%28%7B%0A%09%09%09%09name%3A%20%27OutputLayer%27%2C%0A%09%09%09%09units%3A%201%2C%0A%09%09%09%09activation%3A%20%27linear%27%0A%09%09%09%7D%29%0A%09%09%5D%0A%09%7D%29%3B%0A%09%2F%2F%20neural%20network%20training%0A%09model.compile%28%7B%0A%09%09optimizer%3A%20tf.train.sgd%28LERNRATE%29%2C%0A%09%09loss%3A%20tf.losses.meanSquaredError%0A%09%7D%29%3B%0A%09return%20model%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20train%20model%0A%2F%2F%0Aasync%20function%20trainModel%28model%2C%20trainInput%2C%20trainOutput%29%20%7B%0A%09let%20history%20%3D%20await%20model.fit%28%0A%09%09tf.tensor%28trainInput%29%2C%20tf.tensor%28trainOutput%29%2C%20%7B%0A%09%09%09epochs%3A%20ANZAHL_EPOCHEN%20%2B%201%2C%0A%09%09%09batchSize%3A%20trainInput.length%2C%0A%09%09%09shuffle%3A%20true%2C%0A%09%09%09callbacks%3A%20%5B%0A%09%09%09%09tfvis.show.fitCallbacks%28%7B%0A%09%09%09%09%09name%3A%20%27Trainingsfehler%27%2C%0A%09%09%09%09%09tab%3A%20%27Training%27%0A%09%09%09%09%7D%2C%20%5B%27loss%27%5D%2C%20%7B%0A%09%09%09%09%09height%3A%20200%2C%0A%09%09%09%09%09callbacks%3A%20%5B%27onEpochEnd%27%5D%2C%0A%09%09%09%09%09yLabel%3A%20%27MSE%27%0A%09%09%09%09%7D%29%2C%0A%09%09%09%5D%0A%09%09%7D%29%3B%0A%09return%20history%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20predict%20timeseries%20ahead%20and%20return%20object%20for%20tfvis%0A%2F%2F%0Aasync%20function%20predictTimeseries%28model%2C%20inputArray%29%20%7B%0A%09let%20mae%20%3D%20%5B%5D%3B%0A%09let%20predictedOutput%20%3D%20%5B%5D%3B%0A%09let%20inputSample%20%3D%20%5BinputArray%5BinputArray.length%20-%20TIMESERIES_FEATURES%5D.slice%28%29%5D%3B%0A%09let%20outputTensor%2C%20outputArray%3B%0A%09for%20%28t%20%3D%200%3B%20t%20%3C%20PREDICTION_LIMIT%3B%20t%2B%2B%29%20%7B%0A%09%09%2F%2F%20predict%20one%20timestep%0A%09%09outputTensor%20%3D%20await%20model.predict%28tf.tensor%28inputSample%29%29%3B%0A%09%09outputArray%20%3D%20await%20outputTensor.arraySync%28%29%3B%0A%09%09%2F%2F%20shift%20timeseries%20by%20one%20step%0A%09%09for%20%28f%20%3D%201%3B%20f%20%3C%20TIMESERIES_FEATURES%3B%20f%2B%2B%29%20%7B%0A%09%09%09inputSample%5B0%5D%5Bf%20-%201%5D%20%3D%20inputSample%5B0%5D%5Bf%5D%3B%0A%09%09%7D%0A%09%09%2F%2F%20add%20prediction%20as%20most%20recent%20time%20in%20timeseries%0A%09%09inputSample%5B0%5D%5BTIMESERIES_FEATURES%20-%201%5D%20%3D%20outputArray%5B0%5D%5B0%5D%3B%0A%09%09%2F%2F%20update%20hour%20input%20feature%0A%09%09inputSample%5B0%5D%5BTIMESERIES_FEATURES%5D%20%3D%20inputArray%5B%28inputArray.length%20-%20TIMESERIES_FEATURES%20%2B%20t%20%2B%201%29%20%25%20inputArray.length%5D%5BinputArray%5B0%5D.length%20-%201%5D%3B%0A%09%09%2F%2F%20store%20predicted%20time%0A%09%09predictedOutput.push%28outputArray%5B0%5D%5B0%5D%29%3B%0A%09%09%2F%2F%20store%20initial%20mae%20values%0A%09%09mae.push%28Math.abs%28outputArray%5B0%5D%5B0%5D%20-%20valueArray%5Bt%20%25%20PERIODICITY%5D%29%29%3B%0A%09%7D%0A%09%2F%2F%20summ%20mae%20values%20for%20shifted%20predictions%0A%09for%20%28s%20%3D%201%3B%20s%20%3C%20PERIODICITY%3B%20s%20%3D%20s%20%2B%201%29%20%7B%0A%09%09inputSample%20%3D%20%5BinputArray%5B%28inputArray.length%20-%20TIMESERIES_FEATURES%20%2B%20s%29%20%25%20PERIODICITY%5D.slice%28%29%5D%3B%0A%09%09for%20%28t%20%3D%200%3B%20t%20%3C%20PREDICTION_LIMIT%3B%20t%2B%2B%29%20%7B%0A%09%09%09%2F%2F%20predict%20one%20timestep%0A%09%09%09outputTensor%20%3D%20await%20model.predict%28tf.tensor%28inputSample%29%29%3B%0A%09%09%09outputArray%20%3D%20await%20outputTensor.arraySync%28%29%3B%0A%09%09%09%2F%2F%20shift%20timeseries%20by%20one%20step%0A%09%09%09for%20%28f%20%3D%201%3B%20f%20%3C%20TIMESERIES_FEATURES%3B%20f%2B%2B%29%20%7B%0A%09%09%09%09inputSample%5B0%5D%5Bf%20-%201%5D%20%3D%20inputSample%5B0%5D%5Bf%5D%3B%0A%09%09%09%7D%0A%09%09%09%2F%2F%20add%20prediction%20as%20most%20recent%20time%20in%20timeseries%0A%09%09%09inputSample%5B0%5D%5BTIMESERIES_FEATURES%20-%201%5D%20%3D%20outputArray%5B0%5D%5B0%5D%3B%0A%09%09%09%2F%2F%20update%20hour%20input%20feature%0A%09%09%09inputSample%5B0%5D%5BTIMESERIES_FEATURES%5D%20%3D%20inputArray%5B%28inputArray.length%20-%20TIMESERIES_FEATURES%20%2B%20s%20%2B%20t%20%2B%201%29%20%25%20inputArray.length%5D%5BinputArray%5B0%5D.length%20-%201%5D%3B%0A%09%09%09%2F%2F%20add%20mae%20values%0A%09%09%09mae%5Bt%5D%20%2B%3D%20Math.abs%28outputArray%5B0%5D%5B0%5D%20-%20valueArray%5B%28t%20%2B%20s%29%20%25%20PERIODICITY%5D%29%3B%0A%09%09%7D%0A%09%7D%0A%09%2F%2F%20calculate%20mae%20mean%20values%0A%09for%20%28t%20%3D%200%3B%20t%20%3C%20mae.length%3B%20t%2B%2B%29%20%7B%0A%09%09mae%5Bt%5D%20%3D%20mae%5Bt%5D%20%2F%20PERIODICITY%3B%0A%09%7D%0A%09return%20%5BpredictedOutput%2C%20mae%5D%3B%0A%7D%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20FUNCTIONS%20FOR%20VISUALISATION%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%0A%2F%2F%20draw%20timeseries%20prediction%0A%2F%2F%0Afunction%20drawTimeseries%28trueArray%2C%20predictedArray%2C%20mae%29%20%7B%0A%09%2F%2F%20observed%20values%0A%09let%20trueArrayObject%20%3D%20%5B%5D%3B%0A%09for%20%28t%20%3D%200%3B%20t%20%3C%20predictedArray.length%3B%20t%2B%2B%29%20%7B%0A%09%09trueArrayObject.push%28%7B%0A%09%09%09x%3A%20t%2C%0A%09%09%09y%3A%20trueArray%5Bt%20%25%20trueArray.length%5D%20%2a%2010%0A%09%09%7D%29%3B%0A%09%7D%0A%09%2F%2F%20predicted%20values%0A%09let%20predictedArrayObject%20%3D%20%5B%5D%3B%0A%09for%20%28t%20%3D%200%3B%20t%20%3C%20predictedArray.length%3B%20t%2B%2B%29%20%7B%0A%09%09predictedArrayObject.push%28%7B%0A%09%09%09x%3A%20t%2C%0A%09%09%09y%3A%20predictedArray%5Bt%5D%20%2a%2010%0A%09%09%7D%29%3B%0A%09%7D%0A%09%2F%2F%20prediction%20error%0A%09let%20meanPredictionError%20%3D%20%5B%5D%3B%0A%09for%20%28t%20%3D%200%3B%20t%20%3C%20predictedArray.length%3B%20t%2B%2B%29%20%7B%0A%09%09meanPredictionError.push%28%7B%0A%09%09%09x%3A%20t%2C%0A%09%09%09y%3A%20mae%5Bt%5D%20%2a%2010%0A%09%09%7D%29%3B%0A%09%7D%0A%0A%09%2F%2F%20draw%20everything%0A%09let%20data%2C%20look%3B%0A%09let%20surface%20%3D%20%7B%0A%09%09name%3A%20%22Zeitreihenvorhersage%22%2C%0A%09%09tab%3A%20%27Resultat%27%0A%09%7D%3B%0A%09data%20%3D%20%7B%0A%09%09values%3A%20%5BtrueArrayObject%2C%20predictedArrayObject%2C%20meanPredictionError%5D%2C%0A%09%09series%3A%20%5B%22beobachtet%22%2C%20%22vorhergesagt%22%2C%20%22MAE%22%5D%0A%09%7D%3B%0A%09look%20%3D%20%7B%0A%09%09xLabel%3A%20%27Prognosezeit%20%28Stunden%29%27%2C%0A%09%09yLabel%3A%20%27Wert%27%2C%0A%09%09zoomToFit%3A%20true%2C%0A%09%09seriesColors%3A%20%5B%22darkmagenta%22%2C%20%22coral%22%2C%20%22limegreen%22%5D%0A%09%7D%3B%0A%09tfvis.render.linechart%28surface%2C%20data%2C%20look%29%3B%0A%7D%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20MAIN%20PROGRAM%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%0A%2F%2F%20main%20function%0A%2F%2F%0Aasync%20function%20run%28%29%20%7B%0A%09%2F%2Fnoprotect%0A%0A%09%2F%2F%20check%20number%20of%20TIME_SERIES_FEATURES%0A%09if%20%28TIMESERIES_FEATURES%20%3E%20PERIODICITY%20%7C%7C%20TIMESERIES_FEATURES%20%3C%200%29%20%7B%0A%09%09console.log%28%22%E2%9A%A0%EF%B8%8F%20TIMESERIES_FEATURES%20muss%20zwischen%200%20und%20%22%20%2B%20PERIODICITY%20%2B%20%22%20liegen%21%22%29%3B%0A%09%09return%3B%0A%09%7D%0A%0A%09%2F%2F%20write%20preferences%20on%20console%0A%09console.log%28%22Zeitreihenvorhersage%22%29%3B%0A%09console.log%28%22Neuronales%20Netz%3A%20Anzahl%20Eingangsgr%C3%B6ssen%3A%20%22%20%2B%20%28TIMESERIES_FEATURES%20%2B%201%29%20%2B%20%22%2C%20Anzahl%20Hidden%20Neuronen%3A%20%22%20%2B%20ANZAHL_HIDDEN_NEURONS%29%3B%0A%09console.log%28%22Training%3A%20Lernrate%3A%20%22%20%2B%20LERNRATE%20%2B%20%22%2C%20Epochen%3A%20%22%20%2B%20ANZAHL_EPOCHEN%29%3B%0A%0A%09%2F%2F%20create%20input%20and%20output%20data%0A%09let%20inputArray%20%3D%20createInputArray%28valueArray%2C%20hourArray%29%3B%0A%09let%20outputArray%20%3D%20createOutputArray%28valueArray%29%3B%0A%0A%09%2F%2F%20build%20and%20show%20model%0A%09let%20model%20%3D%20buildModel%28%29%3B%0A%09tfvis.show.modelSummary%28%7B%0A%09%09name%3A%20%27Neuronales%20Netz%27%2C%0A%09%09tab%3A%20%27Modell%27%0A%09%7D%2C%20model%29%3B%0A%0A%09%2F%2F%20train%20model%0A%09let%20history%20%3D%20await%20trainModel%28model%2C%20inputArray%2C%20outputArray%29%3B%0A%09console.log%28%22Entg%C3%BCltiger%20Trainingsfehler%20%28MSE%29%3A%20%22%20%2B%20history.history.loss%5BANZAHL_EPOCHEN%5D%29%3B%0A%0A%09%2F%2F%20predict%20and%20show%20timeseries%0A%09let%20%5BpredictedTimeseries%2C%20mae%5D%20%3D%20await%20predictTimeseries%28model%2C%20inputArray%29%3B%0A%09drawTimeseries%28valueArray%2C%20predictedTimeseries%2C%20mae%29%3B%0A%0A%7D%0Adocument.addEventListener%28%27DOMContentLoaded%27%2C%20run%29%3B&css=undefined&html=%3Cscript%20src%3D%22https%3A%2F%2Fcdn.jsdelivr.net%2Fnpm%2Fp5%22%3E%3C%2Fscript%3E%0A%3Cscript%20src%3D%22https%3A%2F%2Fcdn.jsdelivr.net%2Fnpm%2F%40tensorflow%2Ftfjs%40latest%2Fdist%2Ftf.min.js%22%3E%3C%2Fscript%3E%0A%3Cscript%20src%3D%22https%3A%2F%2Fcdn.jsdelivr.net%2Fnpm%2F%40tensorflow%2Ftfjs-vis%22%3E%3C%2Fscript%3E&autorun=off&height=700px#TimeseriesHour}} | {{exorciser/jspg?javascript=%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%2F%2F%20Diese%20Trainings-%20und%20Updateparameter%20d%C3%BCrfen%20ge%C3%A4ndert%20werden.%0A%0Aconst%20TIMESERIES_FEATURES%20%3D%2012%3B%20%2F%2F%20ganzahliger%20Wert%20von%201%20bis%2024%0A%0Aconst%20LERNRATE%20%3D%200.1%3B%20%2F%2F%20Dezimalzahl%20%3E%200%0Aconst%20ANZAHL_HIDDEN_NEURONS%20%3D%2020%3B%20%2F%2F%20ganzzahliger%20Wert%20%3E%200%0Aconst%20ANZAHL_EPOCHEN%20%3D%20200%3B%20%2F%2F%20ganzzahliger%20Wert%20%3E%200%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20CONSTANTS%20AND%20GLOBAL%20VARIABLES%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%20data%0Aconst%20hourArray%20%3D%20%5B0%2C%201%2C%202%2C%203%2C%204%2C%205%2C%206%2C%207%2C%208%2C%209%2C%2010%2C%2011%2C%2012%2C%2013%2C%2014%2C%2015%2C%2016%2C%2017%2C%2018%2C%2019%2C%2020%2C%2021%2C%2022%2C%2023%5D%3B%0Aconst%20valueArray%20%3D%20%5B0.5%2C%200.44%2C%200.41%2C%200.43%2C%200.5%2C%200.62%2C%200.75%2C%200.87%2C%200.93%2C%200.93%2C%200.84%2C%200.69%2C%200.5%2C%200.31%2C%200.16%2C%200.07%2C%200.07%2C%200.13%2C%200.25%2C%200.38%2C%200.5%2C%200.57%2C%200.59%2C%200.56%5D%3B%0A%0A%2F%2F%20further%20constants%0Aconst%20PREDICTION_LIMIT%20%3D%20120%3B%0Aconst%20PERIODICITY%20%3D%20hourArray.length%3B%0Aconst%20GRAPH_WIDH%20%3D%20600%3B%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20DATA%20HANDLING%20FUNCTIONS%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%0A%2F%2F%20create%20input%20data%0A%2F%2F%0Afunction%20createInputArray%28valueArray%2C%20hourArray%29%20%7B%0A%09let%20inputArray%20%3D%20new%20Array%28valueArray.length%29.fill%280%29.map%28%28%29%20%3D%3E%20new%20Array%28TIMESERIES_FEATURES%20%2B%201%29.fill%280%29%29%3B%20%2F%2F%20empty%20two-dimensional%20array%0A%09for%20%28v%20%3D%200%3B%20v%20%3C%20valueArray.length%3B%20v%2B%2B%29%20%7B%0A%09%09for%20%28f%20%3D%200%3B%20f%20%3C%20TIMESERIES_FEATURES%3B%20f%2B%2B%29%20%7B%0A%09%09%09inputArray%5Bv%5D%5Bf%5D%20%3D%20valueArray%5B%28v%20%2B%20f%29%20%25%20valueArray.length%5D%3B%0A%09%09%7D%0A%09%09%2F%2F%20hour%20of%20%22actual%22%20time%20%28normalized%29%0A%09%09inputArray%5Bv%5D%5BTIMESERIES_FEATURES%5D%20%3D%20hourArray%5B%28v%20%2B%20TIMESERIES_FEATURES%20-%201%29%20%25%20hourArray.length%5D%20%2F%2012%20-%201%3B%0A%09%7D%0A%09return%20inputArray%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20create%20output%20data%0A%2F%2F%0Afunction%20createOutputArray%28valueArray%29%20%7B%0A%09let%20outputArray%20%3D%20new%20Array%28valueArray.length%29.fill%280%29%3B%0A%09for%20%28v%20%3D%200%3B%20v%20%3C%20valueArray.length%3B%20v%2B%2B%29%20%7B%0A%09%09outputArray%5Bv%5D%20%3D%20valueArray%5B%28v%20%2B%20TIMESERIES_FEATURES%29%20%25%20valueArray.length%5D%3B%0A%09%7D%0A%09return%20outputArray%3B%0A%7D%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20NEURAL%20NETWORK%20FUNCTIONS%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%0A%2F%2F%20build%20model%0A%2F%2F%0Afunction%20buildModel%28%29%20%7B%0A%09const%20model%20%3D%20tf.sequential%28%7B%0A%09%09layers%3A%20%5B%0A%09%09%09tf.layers.dense%28%7B%0A%09%09%09%09name%3A%20%27HiddenLayer1%27%2C%0A%09%09%09%09inputShape%3A%20%5BTIMESERIES_FEATURES%20%2B%201%5D%2C%0A%09%09%09%09units%3A%20ANZAHL_HIDDEN_NEURONS%2C%0A%09%09%09%09activation%3A%20%27tanh%27%0A%09%09%09%7D%29%2C%0A%09%09%09tf.layers.dense%28%7B%0A%09%09%09%09name%3A%20%27OutputLayer%27%2C%0A%09%09%09%09units%3A%201%2C%0A%09%09%09%09activation%3A%20%27linear%27%0A%09%09%09%7D%29%0A%09%09%5D%0A%09%7D%29%3B%0A%09%2F%2F%20neural%20network%20training%0A%09model.compile%28%7B%0A%09%09optimizer%3A%20tf.train.sgd%28LERNRATE%29%2C%0A%09%09loss%3A%20tf.losses.meanSquaredError%0A%09%7D%29%3B%0A%09return%20model%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20train%20model%0A%2F%2F%0Aasync%20function%20trainModel%28model%2C%20trainInput%2C%20trainOutput%29%20%7B%0A%09let%20history%20%3D%20await%20model.fit%28%0A%09%09tf.tensor%28trainInput%29%2C%20tf.tensor%28trainOutput%29%2C%20%7B%0A%09%09%09epochs%3A%20ANZAHL_EPOCHEN%20%2B%201%2C%0A%09%09%09batchSize%3A%20trainInput.length%2C%0A%09%09%09shuffle%3A%20true%2C%0A%09%09%09callbacks%3A%20%5B%0A%09%09%09%09tfvis.show.fitCallbacks%28%7B%0A%09%09%09%09%09name%3A%20%27Trainingsfehler%27%2C%0A%09%09%09%09%09tab%3A%20%27Training%27%2C%0A%09%09%09%09%09styles%3A%20%7B%0A%09%09%09%09%09%09width%3A%20GRAPH_WIDH%0A%09%09%09%09%09%7D%0A%09%09%09%09%7D%2C%20%5B%27loss%27%5D%2C%20%7B%0A%09%09%09%09%09height%3A%20200%2C%0A%09%09%09%09%09callbacks%3A%20%5B%27onEpochEnd%27%5D%2C%0A%09%09%09%09%09yLabel%3A%20%27MSE%27%0A%09%09%09%09%7D%29%2C%0A%09%09%09%5D%0A%09%09%7D%29%3B%0A%09return%20history%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20predict%20timeseries%20ahead%20and%20return%20object%20for%20tfvis%0A%2F%2F%0Aasync%20function%20predictTimeseries%28model%2C%20inputArray%29%20%7B%0A%09let%20mae%20%3D%20%5B%5D%3B%0A%09let%20predictedOutput%20%3D%20%5B%5D%3B%0A%09let%20inputSample%20%3D%20%5BinputArray%5BinputArray.length%20-%20TIMESERIES_FEATURES%5D.slice%28%29%5D%3B%0A%09let%20outputTensor%2C%20outputArray%3B%0A%09for%20%28t%20%3D%200%3B%20t%20%3C%20PREDICTION_LIMIT%3B%20t%2B%2B%29%20%7B%0A%09%09%2F%2F%20predict%20one%20timestep%0A%09%09outputTensor%20%3D%20await%20model.predict%28tf.tensor%28inputSample%29%29%3B%0A%09%09outputArray%20%3D%20await%20outputTensor.arraySync%28%29%3B%0A%09%09%2F%2F%20shift%20timeseries%20by%20one%20step%0A%09%09for%20%28f%20%3D%201%3B%20f%20%3C%20TIMESERIES_FEATURES%3B%20f%2B%2B%29%20%7B%0A%09%09%09inputSample%5B0%5D%5Bf%20-%201%5D%20%3D%20inputSample%5B0%5D%5Bf%5D%3B%0A%09%09%7D%0A%09%09%2F%2F%20add%20prediction%20as%20most%20recent%20time%20in%20timeseries%0A%09%09inputSample%5B0%5D%5BTIMESERIES_FEATURES%20-%201%5D%20%3D%20outputArray%5B0%5D%5B0%5D%3B%0A%09%09%2F%2F%20update%20hour%20input%20feature%0A%09%09inputSample%5B0%5D%5BTIMESERIES_FEATURES%5D%20%3D%20inputArray%5B%28inputArray.length%20-%20TIMESERIES_FEATURES%20%2B%20t%20%2B%201%29%20%25%20inputArray.length%5D%5BinputArray%5B0%5D.length%20-%201%5D%3B%0A%09%09%2F%2F%20store%20predicted%20time%0A%09%09predictedOutput.push%28outputArray%5B0%5D%5B0%5D%29%3B%0A%09%09%2F%2F%20store%20initial%20mae%20values%0A%09%09mae.push%28Math.abs%28outputArray%5B0%5D%5B0%5D%20-%20valueArray%5Bt%20%25%20PERIODICITY%5D%29%29%3B%0A%09%7D%0A%09%2F%2F%20summ%20mae%20values%20for%20shifted%20predictions%0A%09for%20%28s%20%3D%201%3B%20s%20%3C%20PERIODICITY%3B%20s%20%3D%20s%20%2B%201%29%20%7B%0A%09%09inputSample%20%3D%20%5BinputArray%5B%28inputArray.length%20-%20TIMESERIES_FEATURES%20%2B%20s%29%20%25%20PERIODICITY%5D.slice%28%29%5D%3B%0A%09%09for%20%28t%20%3D%200%3B%20t%20%3C%20PREDICTION_LIMIT%3B%20t%2B%2B%29%20%7B%0A%09%09%09%2F%2F%20predict%20one%20timestep%0A%09%09%09outputTensor%20%3D%20await%20model.predict%28tf.tensor%28inputSample%29%29%3B%0A%09%09%09outputArray%20%3D%20await%20outputTensor.arraySync%28%29%3B%0A%09%09%09%2F%2F%20shift%20timeseries%20by%20one%20step%0A%09%09%09for%20%28f%20%3D%201%3B%20f%20%3C%20TIMESERIES_FEATURES%3B%20f%2B%2B%29%20%7B%0A%09%09%09%09inputSample%5B0%5D%5Bf%20-%201%5D%20%3D%20inputSample%5B0%5D%5Bf%5D%3B%0A%09%09%09%7D%0A%09%09%09%2F%2F%20add%20prediction%20as%20most%20recent%20time%20in%20timeseries%0A%09%09%09inputSample%5B0%5D%5BTIMESERIES_FEATURES%20-%201%5D%20%3D%20outputArray%5B0%5D%5B0%5D%3B%0A%09%09%09%2F%2F%20update%20hour%20input%20feature%0A%09%09%09inputSample%5B0%5D%5BTIMESERIES_FEATURES%5D%20%3D%20inputArray%5B%28inputArray.length%20-%20TIMESERIES_FEATURES%20%2B%20s%20%2B%20t%20%2B%201%29%20%25%20inputArray.length%5D%5BinputArray%5B0%5D.length%20-%201%5D%3B%0A%09%09%09%2F%2F%20add%20mae%20values%0A%09%09%09mae%5Bt%5D%20%2B%3D%20Math.abs%28outputArray%5B0%5D%5B0%5D%20-%20valueArray%5B%28t%20%2B%20s%29%20%25%20PERIODICITY%5D%29%3B%0A%09%09%7D%0A%09%7D%0A%09%2F%2F%20calculate%20mae%20mean%20values%0A%09for%20%28t%20%3D%200%3B%20t%20%3C%20mae.length%3B%20t%2B%2B%29%20%7B%0A%09%09mae%5Bt%5D%20%3D%20mae%5Bt%5D%20%2F%20PERIODICITY%3B%0A%09%7D%0A%09return%20%5BpredictedOutput%2C%20mae%5D%3B%0A%7D%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20FUNCTIONS%20FOR%20VISUALISATION%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%0A%2F%2F%20draw%20timeseries%20prediction%0A%2F%2F%0Afunction%20drawTimeseries%28trueArray%2C%20predictedArray%2C%20mae%29%20%7B%0A%09%2F%2F%20observed%20values%0A%09let%20trueArrayObject%20%3D%20%5B%5D%3B%0A%09for%20%28t%20%3D%200%3B%20t%20%3C%20predictedArray.length%3B%20t%2B%2B%29%20%7B%0A%09%09trueArrayObject.push%28%7B%0A%09%09%09x%3A%20t%2C%0A%09%09%09y%3A%20trueArray%5Bt%20%25%20trueArray.length%5D%20%2a%2010%0A%09%09%7D%29%3B%0A%09%7D%0A%09%2F%2F%20predicted%20values%0A%09let%20predictedArrayObject%20%3D%20%5B%5D%3B%0A%09for%20%28t%20%3D%200%3B%20t%20%3C%20predictedArray.length%3B%20t%2B%2B%29%20%7B%0A%09%09predictedArrayObject.push%28%7B%0A%09%09%09x%3A%20t%2C%0A%09%09%09y%3A%20predictedArray%5Bt%5D%20%2a%2010%0A%09%09%7D%29%3B%0A%09%7D%0A%09%2F%2F%20prediction%20error%0A%09let%20meanPredictionError%20%3D%20%5B%5D%3B%0A%09for%20%28t%20%3D%200%3B%20t%20%3C%20predictedArray.length%3B%20t%2B%2B%29%20%7B%0A%09%09meanPredictionError.push%28%7B%0A%09%09%09x%3A%20t%2C%0A%09%09%09y%3A%20mae%5Bt%5D%20%2a%2010%0A%09%09%7D%29%3B%0A%09%7D%0A%0A%09%2F%2F%20draw%20everything%0A%09let%20data%2C%20look%3B%0A%09let%20surface%20%3D%20%7B%0A%09%09name%3A%20%22Zeitreihenvorhersage%22%2C%0A%09%09tab%3A%20%27Resultat%27%2C%0A%09%09styles%3A%20%7B%0A%09%09%09width%3A%20GRAPH_WIDH%0A%09%09%7D%0A%09%7D%3B%0A%09data%20%3D%20%7B%0A%09%09values%3A%20%5BtrueArrayObject%2C%20predictedArrayObject%2C%20meanPredictionError%5D%2C%0A%09%09series%3A%20%5B%22beobachtet%22%2C%20%22vorhergesagt%22%2C%20%22MAE%22%5D%0A%09%7D%3B%0A%09look%20%3D%20%7B%0A%09%09xLabel%3A%20%27Prognosezeit%20%28Stunden%29%27%2C%0A%09%09yLabel%3A%20%27Wert%27%2C%0A%09%09zoomToFit%3A%20true%2C%0A%09%09seriesColors%3A%20%5B%22darkmagenta%22%2C%20%22coral%22%2C%20%22limegreen%22%5D%0A%09%7D%3B%0A%09tfvis.render.linechart%28surface%2C%20data%2C%20look%29%3B%0A%7D%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20MAIN%20PROGRAM%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%0A%2F%2F%20main%20function%0A%2F%2F%0Aasync%20function%20run%28%29%20%7B%0A%09%2F%2Fnoprotect%0A%0A%09%2F%2F%20check%20number%20of%20TIME_SERIES_FEATURES%0A%09if%20%28TIMESERIES_FEATURES%20%3E%20PERIODICITY%20%7C%7C%20TIMESERIES_FEATURES%20%3C%200%29%20%7B%0A%09%09console.log%28%22%E2%9A%A0%EF%B8%8F%20TIMESERIES_FEATURES%20muss%20zwischen%200%20und%20%22%20%2B%20PERIODICITY%20%2B%20%22%20liegen%21%22%29%3B%0A%09%09return%3B%0A%09%7D%0A%0A%09%2F%2F%20write%20preferences%20on%20console%0A%09console.log%28%22Zeitreihenvorhersage%22%29%3B%0A%09console.log%28%22Neuronales%20Netz%3A%20Anzahl%20Eingangsgr%C3%B6ssen%3A%20%22%20%2B%20%28TIMESERIES_FEATURES%20%2B%201%29%20%2B%20%22%2C%20Anzahl%20Hidden%20Neuronen%3A%20%22%20%2B%20ANZAHL_HIDDEN_NEURONS%29%3B%0A%09console.log%28%22Training%3A%20Lernrate%3A%20%22%20%2B%20LERNRATE%20%2B%20%22%2C%20Epochen%3A%20%22%20%2B%20ANZAHL_EPOCHEN%29%3B%0A%0A%09%2F%2F%20create%20input%20and%20output%20data%0A%09let%20inputArray%20%3D%20createInputArray%28valueArray%2C%20hourArray%29%3B%0A%09let%20outputArray%20%3D%20createOutputArray%28valueArray%29%3B%0A%0A%09%2F%2F%20build%20and%20show%20model%0A%09let%20model%20%3D%20buildModel%28%29%3B%0A%09if%20%28%21tfvis.visor%28%29.isFullscreen%28%29%29%20%7B%0A%09%09tfvis.visor%28%29.toggleFullScreen%28%29%3B%0A%09%7D%0A%09tfvis.show.modelSummary%28%7B%0A%09%09name%3A%20%27Neuronales%20Netz%27%2C%0A%09%09tab%3A%20%27Modell%27%2C%0A%09%09styles%3A%20%7B%0A%09%09%09width%3A%20GRAPH_WIDH%0A%09%09%7D%0A%09%7D%2C%20model%29%3B%0A%0A%09%2F%2F%20train%20model%0A%09let%20history%20%3D%20await%20trainModel%28model%2C%20inputArray%2C%20outputArray%29%3B%0A%09console.log%28%22Entg%C3%BCltiger%20Trainingsfehler%20%28MSE%29%3A%20%22%20%2B%20history.history.loss%5BANZAHL_EPOCHEN%5D%29%3B%0A%0A%09%2F%2F%20predict%20and%20show%20timeseries%0A%09let%20%5BpredictedTimeseries%2C%20mae%5D%20%3D%20await%20predictTimeseries%28model%2C%20inputArray%29%3B%0A%09drawTimeseries%28valueArray%2C%20predictedTimeseries%2C%20mae%29%3B%0A%0A%7D%0Adocument.addEventListener%28%27DOMContentLoaded%27%2C%20run%29%3B&css=undefined&html=%3Cscript%20src%3D%22https%3A%2F%2Fapp.exorciser.ch%2Flib%2Fp5.js%22%3E%3C%2Fscript%3E%0A%3Cscript%20src%3D%22https%3A%2F%2Fcdn.jsdelivr.net%2Fnpm%2F%40tensorflow%2Ftfjs%40latest%2Fdist%2Ftf.min.js%22%3E%3C%2Fscript%3E%0A%3Cscript%20src%3D%22https%3A%2F%2Fcdn.jsdelivr.net%2Fnpm%2F%40tensorflow%2Ftfjs-vis%22%3E%3C%2Fscript%3E&autorun=off&height=700px#TimeseriesHour}} |
</WRAP> | </WRAP> |
===== - Dem neuronalen Netzwerk helfen ===== | ===== - Dem neuronalen Netzwerk helfen ===== |
- Starte das Programm. Ist das Resultat nun besser oder schlechter in den vorangehenden Aufträgen? {{gem/plain?0=N4XyA#d94fcc4114ff694a}} | - Starte das Programm. Ist das Resultat nun besser oder schlechter in den vorangehenden Aufträgen? {{gem/plain?0=N4XyA#d94fcc4114ff694a}} |
- Spiele mit den Parametern etwas herum. Mit wie weinigen ''TIMESERIES_FEATURES'' bekommst du eine MAE für die +72 Stundenprognose von weniger als 0.1 hin? Halte die MAE zusammen mit deiner neuronalen Netz Einstellung im Textfeld fest. {{gem/plain?0=N4XyA#344040d14bb98ac5}} | - Spiele mit den Parametern etwas herum. Mit wie weinigen ''TIMESERIES_FEATURES'' bekommst du eine MAE für die +72 Stundenprognose von weniger als 0.1 hin? Halte die MAE zusammen mit deiner neuronalen Netz Einstellung im Textfeld fest. {{gem/plain?0=N4XyA#344040d14bb98ac5}} |
{{exorciser/jspg?javascript=%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%2F%2F%20Diese%20Trainings-%20und%20Updateparameter%20d%C3%BCrfen%20ge%C3%A4ndert%20werden.%0A%0Aconst%20TIMESERIES_FEATURES%20%3D%2012%3B%20%2F%2F%20ganzahliger%20Wert%20von%201%20bis%2024%0A%0Aconst%20LERNRATE%20%3D%200.1%3B%20%2F%2F%20Dezimalzahl%20%3E%200%0Aconst%20ANZAHL_HIDDEN_NEURONS%20%3D%2020%3B%20%2F%2F%20ganzzahliger%20Wert%20%3E%200%0Aconst%20ANZAHL_EPOCHEN%20%3D%20200%3B%20%2F%2F%20ganzzahliger%20Wert%20%3E%200%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20CONSTANTS%20AND%20GLOBAL%20VARIABLES%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%20data%0Aconst%20hourArray%20%3D%20%5B0%2C%201%2C%202%2C%203%2C%204%2C%205%2C%206%2C%207%2C%208%2C%209%2C%2010%2C%2011%2C%2012%2C%2013%2C%2014%2C%2015%2C%2016%2C%2017%2C%2018%2C%2019%2C%2020%2C%2021%2C%2022%2C%2023%5D%3B%0Aconst%20valueArray%20%3D%20%5B0.5%2C%200.44%2C%200.41%2C%200.43%2C%200.5%2C%200.62%2C%200.75%2C%200.87%2C%200.93%2C%200.93%2C%200.84%2C%200.69%2C%200.5%2C%200.31%2C%200.16%2C%200.07%2C%200.07%2C%200.13%2C%200.25%2C%200.38%2C%200.5%2C%200.57%2C%200.59%2C%200.56%5D%3B%0A%0A%2F%2F%20further%20constants%0Aconst%20PREDICTION_LIMIT%20%3D%20120%3B%0Aconst%20PERIODICITY%20%3D%20hourArray.length%3B%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20DATA%20HANDLING%20FUNCTIONS%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%0A%2F%2F%20create%20input%20data%0A%2F%2F%0Afunction%20createInputArray%28valueArray%2C%20hourArray%29%20%7B%0A%09let%20inputArray%20%3D%20new%20Array%28valueArray.length%29.fill%280%29.map%28%28%29%20%3D%3E%20new%20Array%28TIMESERIES_FEATURES%20%2B%202%29.fill%280%29%29%3B%20%2F%2F%20empty%20two-dimensional%20array%0A%09for%20%28v%20%3D%200%3B%20v%20%3C%20valueArray.length%3B%20v%2B%2B%29%20%7B%0A%09%09for%20%28f%20%3D%200%3B%20f%20%3C%20TIMESERIES_FEATURES%3B%20f%2B%2B%29%20%7B%0A%09%09%09inputArray%5Bv%5D%5Bf%5D%20%3D%20valueArray%5B%28v%20%2B%20f%29%20%25%20valueArray.length%5D%3B%0A%09%09%7D%0A%09%09%2F%2F%20sin%2C%20cos%20of%20%22actual%22%20time%0A%09%09inputArray%5Bv%5D%5BTIMESERIES_FEATURES%5D%20%3D%20Math.sin%282%20%2a%20Math.PI%20%2a%20hourArray%5B%28v%20%2B%20TIMESERIES_FEATURES%20-%201%29%20%25%20hourArray.length%5D%20%2F%20hourArray.length%29%3B%0A%09%09inputArray%5Bv%5D%5BTIMESERIES_FEATURES%20%2B%201%5D%20%3D%20Math.cos%282%20%2a%20Math.PI%20%2a%20hourArray%5B%28v%20%2B%20TIMESERIES_FEATURES%20-%201%29%20%25%20hourArray.length%5D%20%2F%20hourArray.length%29%3B%0A%09%7D%0A%09return%20inputArray%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20create%20output%20data%0A%2F%2F%0Afunction%20createOutputArray%28valueArray%29%20%7B%0A%09let%20outputArray%20%3D%20new%20Array%28valueArray.length%29.fill%280%29%3B%0A%09for%20%28v%20%3D%200%3B%20v%20%3C%20valueArray.length%3B%20v%2B%2B%29%20%7B%0A%09%09outputArray%5Bv%5D%20%3D%20valueArray%5B%28v%20%2B%20TIMESERIES_FEATURES%29%20%25%20valueArray.length%5D%3B%0A%09%7D%0A%09return%20outputArray%3B%0A%7D%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20NEURAL%20NETWORK%20FUNCTIONS%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%0A%2F%2F%20build%20model%0A%2F%2F%0Afunction%20buildModel%28%29%20%7B%0A%09const%20model%20%3D%20tf.sequential%28%7B%0A%09%09layers%3A%20%5B%0A%09%09%09tf.layers.dense%28%7B%0A%09%09%09%09name%3A%20%27HiddenLayer1%27%2C%0A%09%09%09%09inputShape%3A%20%5BTIMESERIES_FEATURES%20%2B%202%5D%2C%0A%09%09%09%09units%3A%20ANZAHL_HIDDEN_NEURONS%2C%0A%09%09%09%09activation%3A%20%27tanh%27%0A%09%09%09%7D%29%2C%0A%09%09%09tf.layers.dense%28%7B%0A%09%09%09%09name%3A%20%27OutputLayer%27%2C%0A%09%09%09%09units%3A%201%2C%0A%09%09%09%09activation%3A%20%27linear%27%0A%09%09%09%7D%29%0A%09%09%5D%0A%09%7D%29%3B%0A%09%2F%2F%20neural%20network%20training%0A%09model.compile%28%7B%0A%09%09optimizer%3A%20tf.train.sgd%28LERNRATE%29%2C%0A%09%09loss%3A%20tf.losses.meanSquaredError%0A%09%7D%29%3B%0A%09return%20model%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20train%20model%0A%2F%2F%0Aasync%20function%20trainModel%28model%2C%20trainInput%2C%20trainOutput%29%20%7B%0A%09let%20history%20%3D%20await%20model.fit%28%0A%09%09tf.tensor%28trainInput%29%2C%20tf.tensor%28trainOutput%29%2C%20%7B%0A%09%09%09epochs%3A%20ANZAHL_EPOCHEN%20%2B%201%2C%0A%09%09%09batchSize%3A%20trainInput.length%2C%0A%09%09%09shuffle%3A%20true%2C%0A%09%09%09callbacks%3A%20%5B%0A%09%09%09%09tfvis.show.fitCallbacks%28%7B%0A%09%09%09%09%09name%3A%20%27Trainingsfehler%27%2C%0A%09%09%09%09%09tab%3A%20%27Training%27%0A%09%09%09%09%7D%2C%20%5B%27loss%27%5D%2C%20%7B%0A%09%09%09%09%09height%3A%20200%2C%0A%09%09%09%09%09callbacks%3A%20%5B%27onEpochEnd%27%5D%2C%0A%09%09%09%09%09yLabel%3A%20%27MSE%27%0A%09%09%09%09%7D%29%2C%0A%09%09%09%5D%0A%09%09%7D%29%3B%0A%09return%20history%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20predict%20timeseries%20ahead%20and%20return%20object%20for%20tfvis%0A%2F%2F%0Aasync%20function%20predictTimeseries%28model%2C%20inputArray%29%20%7B%0A%09let%20mae%20%3D%20%5B%5D%3B%0A%09let%20predictedOutput%20%3D%20%5B%5D%3B%0A%09let%20inputSample%20%3D%20%5BinputArray%5BinputArray.length%20-%20TIMESERIES_FEATURES%5D.slice%28%29%5D%3B%0A%09let%20outputTensor%2C%20outputArray%3B%0A%09for%20%28t%20%3D%200%3B%20t%20%3C%20PREDICTION_LIMIT%3B%20t%2B%2B%29%20%7B%0A%09%09%2F%2F%20predict%20one%20timestep%0A%09%09outputTensor%20%3D%20await%20model.predict%28tf.tensor%28inputSample%29%29%3B%0A%09%09outputArray%20%3D%20await%20outputTensor.arraySync%28%29%3B%0A%09%09%2F%2F%20shift%20timeseries%20by%20one%20step%0A%09%09for%20%28f%20%3D%201%3B%20f%20%3C%20TIMESERIES_FEATURES%3B%20f%2B%2B%29%20%7B%0A%09%09%09inputSample%5B0%5D%5Bf%20-%201%5D%20%3D%20inputSample%5B0%5D%5Bf%5D%3B%0A%09%09%7D%0A%09%09%2F%2F%20add%20prediction%20as%20most%20recent%20time%20in%20timeseries%0A%09%09inputSample%5B0%5D%5BTIMESERIES_FEATURES%20-%201%5D%20%3D%20outputArray%5B0%5D%5B0%5D%3B%0A%09%09%2F%2F%20update%20cos%20%2F%20sin%20of%20hour%20input%20feature%0A%09%09inputSample%5B0%5D%5BTIMESERIES_FEATURES%5D%20%3D%20inputArray%5B%28inputArray.length%20-%20TIMESERIES_FEATURES%20%2B%20t%20%2B%201%29%20%25%20inputArray.length%5D%5BinputArray%5B0%5D.length%20-%202%5D%3B%0A%09%09inputSample%5B0%5D%5BTIMESERIES_FEATURES%20%2B%201%5D%20%3D%20inputArray%5B%28inputArray.length%20-%20TIMESERIES_FEATURES%20%2B%20t%20%2B%201%29%20%25%20inputArray.length%5D%5BinputArray%5B0%5D.length%20-%201%5D%3B%0A%09%09%2F%2F%20store%20predicted%20time%0A%09%09predictedOutput.push%28outputArray%5B0%5D%5B0%5D%29%3B%0A%09%09%2F%2F%20store%20initial%20mae%20values%0A%09%09mae.push%28Math.abs%28outputArray%5B0%5D%5B0%5D%20-%20valueArray%5Bt%20%25%20PERIODICITY%5D%29%29%3B%0A%09%7D%0A%09%2F%2F%20sum%20mae%20values%20for%20shifted%20predictions%0A%09for%20%28s%20%3D%201%3B%20s%20%3C%20PERIODICITY%3B%20s%20%3D%20s%20%2B%201%29%20%7B%0A%09%09inputSample%20%3D%20%5BinputArray%5B%28inputArray.length%20-%20TIMESERIES_FEATURES%20%2B%20s%29%20%25%20PERIODICITY%5D.slice%28%29%5D%3B%0A%09%09for%20%28t%20%3D%200%3B%20t%20%3C%20PREDICTION_LIMIT%3B%20t%2B%2B%29%20%7B%0A%09%09%09%2F%2F%20predict%20one%20timestep%0A%09%09%09outputTensor%20%3D%20await%20model.predict%28tf.tensor%28inputSample%29%29%3B%0A%09%09%09outputArray%20%3D%20await%20outputTensor.arraySync%28%29%3B%0A%09%09%09%2F%2F%20shift%20timeseries%20by%20one%20step%0A%09%09%09for%20%28f%20%3D%201%3B%20f%20%3C%20TIMESERIES_FEATURES%3B%20f%2B%2B%29%20%7B%0A%09%09%09%09inputSample%5B0%5D%5Bf%20-%201%5D%20%3D%20inputSample%5B0%5D%5Bf%5D%3B%0A%09%09%09%7D%0A%09%09%09%2F%2F%20add%20prediction%20as%20most%20recent%20time%20in%20timeseries%0A%09%09%09inputSample%5B0%5D%5BTIMESERIES_FEATURES%20-%201%5D%20%3D%20outputArray%5B0%5D%5B0%5D%3B%0A%09%09%09%2F%2F%20update%20cos%20%2F%20sin%20of%20hour%20input%20feature%0A%09%09%09inputSample%5B0%5D%5BTIMESERIES_FEATURES%5D%20%3D%20inputArray%5B%28inputArray.length%20-%20TIMESERIES_FEATURES%20%2B%20s%20%2B%20t%20%2B%201%29%20%25%20inputArray.length%5D%5BinputArray%5B0%5D.length%20-%202%5D%3B%0A%09%09%09inputSample%5B0%5D%5BTIMESERIES_FEATURES%20%2B%201%5D%20%3D%20inputArray%5B%28inputArray.length%20-%20TIMESERIES_FEATURES%20%2B%20s%20%2B%20t%20%2B%201%29%20%25%20inputArray.length%5D%5BinputArray%5B0%5D.length%20-%201%5D%3B%0A%09%09%09%2F%2F%20add%20mae%20values%0A%09%09%09mae%5Bt%5D%20%2B%3D%20Math.abs%28outputArray%5B0%5D%5B0%5D%20-%20valueArray%5B%28t%20%2B%20s%29%20%25%20PERIODICITY%5D%29%3B%0A%09%09%7D%0A%09%7D%0A%09%2F%2F%20calculate%20mae%20mean%20values%0A%09for%20%28t%20%3D%200%3B%20t%20%3C%20mae.length%3B%20t%2B%2B%29%20%7B%0A%09%09mae%5Bt%5D%20%3D%20mae%5Bt%5D%20%2F%20PERIODICITY%3B%0A%09%7D%0A%09return%20%5BpredictedOutput%2C%20mae%5D%3B%0A%7D%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20FUNCTIONS%20FOR%20VISUALISATION%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%0A%2F%2F%20draw%20timeseries%20prediction%0A%2F%2F%0Afunction%20drawTimeseries%28trueArray%2C%20predictedArray%2C%20mae%29%20%7B%0A%09%2F%2F%20observed%20values%0A%09let%20trueArrayObject%20%3D%20%5B%5D%3B%0A%09for%20%28t%20%3D%200%3B%20t%20%3C%20predictedArray.length%3B%20t%2B%2B%29%20%7B%0A%09%09trueArrayObject.push%28%7B%0A%09%09%09x%3A%20t%2C%0A%09%09%09y%3A%20trueArray%5Bt%20%25%20trueArray.length%5D%20%2a%2010%0A%09%09%7D%29%3B%0A%09%7D%0A%09%2F%2F%20predicted%20values%0A%09let%20predictedArrayObject%20%3D%20%5B%5D%3B%0A%09for%20%28t%20%3D%200%3B%20t%20%3C%20predictedArray.length%3B%20t%2B%2B%29%20%7B%0A%09%09predictedArrayObject.push%28%7B%0A%09%09%09x%3A%20t%2C%0A%09%09%09y%3A%20predictedArray%5Bt%5D%20%2a%2010%0A%09%09%7D%29%3B%0A%09%7D%0A%09%2F%2F%20prediction%20error%0A%09let%20meanPredictionError%20%3D%20%5B%5D%3B%0A%09for%20%28t%20%3D%200%3B%20t%20%3C%20predictedArray.length%3B%20t%2B%2B%29%20%7B%0A%09%09meanPredictionError.push%28%7B%0A%09%09%09x%3A%20t%2C%0A%09%09%09y%3A%20mae%5Bt%5D%20%2a%2010%0A%09%09%7D%29%3B%0A%09%7D%0A%0A%09%2F%2F%20draw%20everything%0A%09let%20data%2C%20look%3B%0A%09let%20surface%20%3D%20%7B%0A%09%09name%3A%20%22Zeitreihenvorhersage%22%2C%0A%09%09tab%3A%20%27Resultat%27%0A%09%7D%3B%0A%09data%20%3D%20%7B%0A%09%09values%3A%20%5BtrueArrayObject%2C%20predictedArrayObject%2C%20meanPredictionError%5D%2C%0A%09%09series%3A%20%5B%22beobachtet%22%2C%20%22vorhergesagt%22%2C%20%22MAE%22%5D%0A%09%7D%3B%0A%09look%20%3D%20%7B%0A%09%09xLabel%3A%20%27Prognosezeit%20%28Stunden%29%27%2C%0A%09%09yLabel%3A%20%27Wert%27%2C%0A%09%09zoomToFit%3A%20true%2C%0A%09%09seriesColors%3A%20%5B%22steelblue%22%2C%20%22limegreen%22%2C%20%22darkorange%22%5D%0A%09%7D%3B%0A%09tfvis.render.linechart%28surface%2C%20data%2C%20look%29%3B%0A%7D%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20MAIN%20PROGRAM%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%0A%2F%2F%20main%20function%0A%2F%2F%0Aasync%20function%20run%28%29%20%7B%0A%09%2F%2Fnoprotect%0A%0A%09%2F%2F%20check%20number%20of%20TIME_SERIES_FEATURES%0A%09if%20%28TIMESERIES_FEATURES%20%3E%20PERIODICITY%20%7C%7C%20TIMESERIES_FEATURES%20%3C%200%29%20%7B%0A%09%09console.log%28%22%E2%9A%A0%EF%B8%8F%20TIMESERIES_FEATURES%20muss%20zwischen%200%20und%20%22%20%2B%20PERIODICITY%20%2B%20%22%20liegen%21%22%29%3B%0A%09%09return%3B%0A%09%7D%0A%0A%09%2F%2F%20write%20preferences%20on%20console%0A%09console.log%28%22Zeitreihenvorhersage%22%29%3B%0A%09console.log%28%22Neuronales%20Netz%3A%20Anzahl%20Eingangsgr%C3%B6ssen%3A%20%22%20%2B%20%28TIMESERIES_FEATURES%20%2B%202%29%20%2B%20%22%2C%20Anzahl%20Hidden%20Neuronen%3A%20%22%20%2B%20ANZAHL_HIDDEN_NEURONS%29%3B%0A%09console.log%28%22Training%3A%20Lernrate%3A%20%22%20%2B%20LERNRATE%20%2B%20%22%2C%20Epochen%3A%20%22%20%2B%20ANZAHL_EPOCHEN%29%3B%0A%0A%09%2F%2F%20create%20input%20and%20output%20data%0A%09let%20inputArray%20%3D%20createInputArray%28valueArray%2C%20hourArray%29%3B%0A%09let%20outputArray%20%3D%20createOutputArray%28valueArray%29%3B%0A%0A%09%2F%2F%20build%20and%20show%20model%0A%09let%20model%20%3D%20buildModel%28%29%3B%0A%09tfvis.show.modelSummary%28%7B%0A%09%09name%3A%20%27Neuronales%20Netz%27%2C%0A%09%09tab%3A%20%27Modell%27%0A%09%7D%2C%20model%29%3B%0A%0A%09%2F%2F%20train%20model%0A%09let%20history%20%3D%20await%20trainModel%28model%2C%20inputArray%2C%20outputArray%29%3B%0A%09console.log%28%22Entg%C3%BCltiger%20Trainingsfehler%20%28MSE%29%3A%20%22%20%2B%20history.history.loss%5BANZAHL_EPOCHEN%5D%29%3B%0A%0A%09%2F%2F%20predict%20and%20show%20timeseries%0A%09let%20%5BpredictedTimeseries%2C%20mae%5D%20%3D%20await%20predictTimeseries%28model%2C%20inputArray%29%3B%0A%09drawTimeseries%28valueArray%2C%20predictedTimeseries%2C%20mae%29%3B%0A%0A%7D%0Adocument.addEventListener%28%27DOMContentLoaded%27%2C%20run%29%3B&css=undefined&html=%3Cscript%20src%3D%22https%3A%2F%2Fcdn.jsdelivr.net%2Fnpm%2Fp5%22%3E%3C%2Fscript%3E%0A%3Cscript%20src%3D%22https%3A%2F%2Fcdn.jsdelivr.net%2Fnpm%2F%40tensorflow%2Ftfjs%40latest%2Fdist%2Ftf.min.js%22%3E%3C%2Fscript%3E%0A%3Cscript%20src%3D%22https%3A%2F%2Fcdn.jsdelivr.net%2Fnpm%2F%40tensorflow%2Ftfjs-vis%22%3E%3C%2Fscript%3E&autorun=off&height=700px#TimeseriesSinCosHour}} | {{exorciser/jspg?javascript=%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%2F%2F%20Diese%20Trainings-%20und%20Updateparameter%20d%C3%BCrfen%20ge%C3%A4ndert%20werden.%0A%0Aconst%20TIMESERIES_FEATURES%20%3D%2012%3B%20%2F%2F%20ganzahliger%20Wert%20von%201%20bis%2024%0A%0Aconst%20LERNRATE%20%3D%200.1%3B%20%2F%2F%20Dezimalzahl%20%3E%200%0Aconst%20ANZAHL_HIDDEN_NEURONS%20%3D%2020%3B%20%2F%2F%20ganzzahliger%20Wert%20%3E%200%0Aconst%20ANZAHL_EPOCHEN%20%3D%20200%3B%20%2F%2F%20ganzzahliger%20Wert%20%3E%200%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20CONSTANTS%20AND%20GLOBAL%20VARIABLES%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%20data%0Aconst%20hourArray%20%3D%20%5B0%2C%201%2C%202%2C%203%2C%204%2C%205%2C%206%2C%207%2C%208%2C%209%2C%2010%2C%2011%2C%2012%2C%2013%2C%2014%2C%2015%2C%2016%2C%2017%2C%2018%2C%2019%2C%2020%2C%2021%2C%2022%2C%2023%5D%3B%0Aconst%20valueArray%20%3D%20%5B0.5%2C%200.44%2C%200.41%2C%200.43%2C%200.5%2C%200.62%2C%200.75%2C%200.87%2C%200.93%2C%200.93%2C%200.84%2C%200.69%2C%200.5%2C%200.31%2C%200.16%2C%200.07%2C%200.07%2C%200.13%2C%200.25%2C%200.38%2C%200.5%2C%200.57%2C%200.59%2C%200.56%5D%3B%0A%0A%2F%2F%20further%20constants%0Aconst%20PREDICTION_LIMIT%20%3D%20120%3B%0Aconst%20PERIODICITY%20%3D%20hourArray.length%3B%0Aconst%20GRAPH_WIDH%20%3D%20600%3B%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20DATA%20HANDLING%20FUNCTIONS%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%0A%2F%2F%20create%20input%20data%0A%2F%2F%0Afunction%20createInputArray%28valueArray%2C%20hourArray%29%20%7B%0A%09let%20inputArray%20%3D%20new%20Array%28valueArray.length%29.fill%280%29.map%28%28%29%20%3D%3E%20new%20Array%28TIMESERIES_FEATURES%20%2B%202%29.fill%280%29%29%3B%20%2F%2F%20empty%20two-dimensional%20array%0A%09for%20%28v%20%3D%200%3B%20v%20%3C%20valueArray.length%3B%20v%2B%2B%29%20%7B%0A%09%09for%20%28f%20%3D%200%3B%20f%20%3C%20TIMESERIES_FEATURES%3B%20f%2B%2B%29%20%7B%0A%09%09%09inputArray%5Bv%5D%5Bf%5D%20%3D%20valueArray%5B%28v%20%2B%20f%29%20%25%20valueArray.length%5D%3B%0A%09%09%7D%0A%09%09%2F%2F%20sin%2C%20cos%20of%20%22actual%22%20time%0A%09%09inputArray%5Bv%5D%5BTIMESERIES_FEATURES%5D%20%3D%20Math.sin%282%20%2a%20Math.PI%20%2a%20hourArray%5B%28v%20%2B%20TIMESERIES_FEATURES%20-%201%29%20%25%20hourArray.length%5D%20%2F%20hourArray.length%29%3B%0A%09%09inputArray%5Bv%5D%5BTIMESERIES_FEATURES%20%2B%201%5D%20%3D%20Math.cos%282%20%2a%20Math.PI%20%2a%20hourArray%5B%28v%20%2B%20TIMESERIES_FEATURES%20-%201%29%20%25%20hourArray.length%5D%20%2F%20hourArray.length%29%3B%0A%09%7D%0A%09return%20inputArray%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20create%20output%20data%0A%2F%2F%0Afunction%20createOutputArray%28valueArray%29%20%7B%0A%09let%20outputArray%20%3D%20new%20Array%28valueArray.length%29.fill%280%29%3B%0A%09for%20%28v%20%3D%200%3B%20v%20%3C%20valueArray.length%3B%20v%2B%2B%29%20%7B%0A%09%09outputArray%5Bv%5D%20%3D%20valueArray%5B%28v%20%2B%20TIMESERIES_FEATURES%29%20%25%20valueArray.length%5D%3B%0A%09%7D%0A%09return%20outputArray%3B%0A%7D%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20NEURAL%20NETWORK%20FUNCTIONS%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%0A%2F%2F%20build%20model%0A%2F%2F%0Afunction%20buildModel%28%29%20%7B%0A%09const%20model%20%3D%20tf.sequential%28%7B%0A%09%09layers%3A%20%5B%0A%09%09%09tf.layers.dense%28%7B%0A%09%09%09%09name%3A%20%27HiddenLayer1%27%2C%0A%09%09%09%09inputShape%3A%20%5BTIMESERIES_FEATURES%20%2B%202%5D%2C%0A%09%09%09%09units%3A%20ANZAHL_HIDDEN_NEURONS%2C%0A%09%09%09%09activation%3A%20%27tanh%27%0A%09%09%09%7D%29%2C%0A%09%09%09tf.layers.dense%28%7B%0A%09%09%09%09name%3A%20%27OutputLayer%27%2C%0A%09%09%09%09units%3A%201%2C%0A%09%09%09%09activation%3A%20%27linear%27%0A%09%09%09%7D%29%0A%09%09%5D%0A%09%7D%29%3B%0A%09%2F%2F%20neural%20network%20training%0A%09model.compile%28%7B%0A%09%09optimizer%3A%20tf.train.sgd%28LERNRATE%29%2C%0A%09%09loss%3A%20tf.losses.meanSquaredError%0A%09%7D%29%3B%0A%09return%20model%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20train%20model%0A%2F%2F%0Aasync%20function%20trainModel%28model%2C%20trainInput%2C%20trainOutput%29%20%7B%0A%09let%20history%20%3D%20await%20model.fit%28%0A%09%09tf.tensor%28trainInput%29%2C%20tf.tensor%28trainOutput%29%2C%20%7B%0A%09%09%09epochs%3A%20ANZAHL_EPOCHEN%20%2B%201%2C%0A%09%09%09batchSize%3A%20trainInput.length%2C%0A%09%09%09shuffle%3A%20true%2C%0A%09%09%09callbacks%3A%20%5B%0A%09%09%09%09tfvis.show.fitCallbacks%28%7B%0A%09%09%09%09%09name%3A%20%27Trainingsfehler%27%2C%0A%09%09%09%09%09tab%3A%20%27Training%27%2C%0A%09%09%09%09%09styles%3A%20%7B%0A%09%09%09%09%09%09width%3A%20GRAPH_WIDH%0A%09%09%09%09%09%7D%0A%09%09%09%09%7D%2C%20%5B%27loss%27%5D%2C%20%7B%0A%09%09%09%09%09height%3A%20200%2C%0A%09%09%09%09%09callbacks%3A%20%5B%27onEpochEnd%27%5D%2C%0A%09%09%09%09%09yLabel%3A%20%27MSE%27%0A%09%09%09%09%7D%29%2C%0A%09%09%09%5D%0A%09%09%7D%29%3B%0A%09return%20history%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20predict%20timeseries%20ahead%20and%20return%20object%20for%20tfvis%0A%2F%2F%0Aasync%20function%20predictTimeseries%28model%2C%20inputArray%29%20%7B%0A%09let%20mae%20%3D%20%5B%5D%3B%0A%09let%20predictedOutput%20%3D%20%5B%5D%3B%0A%09let%20inputSample%20%3D%20%5BinputArray%5BinputArray.length%20-%20TIMESERIES_FEATURES%5D.slice%28%29%5D%3B%0A%09let%20outputTensor%2C%20outputArray%3B%0A%09for%20%28t%20%3D%200%3B%20t%20%3C%20PREDICTION_LIMIT%3B%20t%2B%2B%29%20%7B%0A%09%09%2F%2F%20predict%20one%20timestep%0A%09%09outputTensor%20%3D%20await%20model.predict%28tf.tensor%28inputSample%29%29%3B%0A%09%09outputArray%20%3D%20await%20outputTensor.arraySync%28%29%3B%0A%09%09%2F%2F%20shift%20timeseries%20by%20one%20step%0A%09%09for%20%28f%20%3D%201%3B%20f%20%3C%20TIMESERIES_FEATURES%3B%20f%2B%2B%29%20%7B%0A%09%09%09inputSample%5B0%5D%5Bf%20-%201%5D%20%3D%20inputSample%5B0%5D%5Bf%5D%3B%0A%09%09%7D%0A%09%09%2F%2F%20add%20prediction%20as%20most%20recent%20time%20in%20timeseries%0A%09%09inputSample%5B0%5D%5BTIMESERIES_FEATURES%20-%201%5D%20%3D%20outputArray%5B0%5D%5B0%5D%3B%0A%09%09%2F%2F%20update%20cos%20%2F%20sin%20of%20hour%20input%20feature%0A%09%09inputSample%5B0%5D%5BTIMESERIES_FEATURES%5D%20%3D%20inputArray%5B%28inputArray.length%20-%20TIMESERIES_FEATURES%20%2B%20t%20%2B%201%29%20%25%20inputArray.length%5D%5BinputArray%5B0%5D.length%20-%202%5D%3B%0A%09%09inputSample%5B0%5D%5BTIMESERIES_FEATURES%20%2B%201%5D%20%3D%20inputArray%5B%28inputArray.length%20-%20TIMESERIES_FEATURES%20%2B%20t%20%2B%201%29%20%25%20inputArray.length%5D%5BinputArray%5B0%5D.length%20-%201%5D%3B%0A%09%09%2F%2F%20store%20predicted%20time%0A%09%09predictedOutput.push%28outputArray%5B0%5D%5B0%5D%29%3B%0A%09%09%2F%2F%20store%20initial%20mae%20values%0A%09%09mae.push%28Math.abs%28outputArray%5B0%5D%5B0%5D%20-%20valueArray%5Bt%20%25%20PERIODICITY%5D%29%29%3B%0A%09%7D%0A%09%2F%2F%20sum%20mae%20values%20for%20shifted%20predictions%0A%09for%20%28s%20%3D%201%3B%20s%20%3C%20PERIODICITY%3B%20s%20%3D%20s%20%2B%201%29%20%7B%0A%09%09inputSample%20%3D%20%5BinputArray%5B%28inputArray.length%20-%20TIMESERIES_FEATURES%20%2B%20s%29%20%25%20PERIODICITY%5D.slice%28%29%5D%3B%0A%09%09for%20%28t%20%3D%200%3B%20t%20%3C%20PREDICTION_LIMIT%3B%20t%2B%2B%29%20%7B%0A%09%09%09%2F%2F%20predict%20one%20timestep%0A%09%09%09outputTensor%20%3D%20await%20model.predict%28tf.tensor%28inputSample%29%29%3B%0A%09%09%09outputArray%20%3D%20await%20outputTensor.arraySync%28%29%3B%0A%09%09%09%2F%2F%20shift%20timeseries%20by%20one%20step%0A%09%09%09for%20%28f%20%3D%201%3B%20f%20%3C%20TIMESERIES_FEATURES%3B%20f%2B%2B%29%20%7B%0A%09%09%09%09inputSample%5B0%5D%5Bf%20-%201%5D%20%3D%20inputSample%5B0%5D%5Bf%5D%3B%0A%09%09%09%7D%0A%09%09%09%2F%2F%20add%20prediction%20as%20most%20recent%20time%20in%20timeseries%0A%09%09%09inputSample%5B0%5D%5BTIMESERIES_FEATURES%20-%201%5D%20%3D%20outputArray%5B0%5D%5B0%5D%3B%0A%09%09%09%2F%2F%20update%20cos%20%2F%20sin%20of%20hour%20input%20feature%0A%09%09%09inputSample%5B0%5D%5BTIMESERIES_FEATURES%5D%20%3D%20inputArray%5B%28inputArray.length%20-%20TIMESERIES_FEATURES%20%2B%20s%20%2B%20t%20%2B%201%29%20%25%20inputArray.length%5D%5BinputArray%5B0%5D.length%20-%202%5D%3B%0A%09%09%09inputSample%5B0%5D%5BTIMESERIES_FEATURES%20%2B%201%5D%20%3D%20inputArray%5B%28inputArray.length%20-%20TIMESERIES_FEATURES%20%2B%20s%20%2B%20t%20%2B%201%29%20%25%20inputArray.length%5D%5BinputArray%5B0%5D.length%20-%201%5D%3B%0A%09%09%09%2F%2F%20add%20mae%20values%0A%09%09%09mae%5Bt%5D%20%2B%3D%20Math.abs%28outputArray%5B0%5D%5B0%5D%20-%20valueArray%5B%28t%20%2B%20s%29%20%25%20PERIODICITY%5D%29%3B%0A%09%09%7D%0A%09%7D%0A%09%2F%2F%20calculate%20mae%20mean%20values%0A%09for%20%28t%20%3D%200%3B%20t%20%3C%20mae.length%3B%20t%2B%2B%29%20%7B%0A%09%09mae%5Bt%5D%20%3D%20mae%5Bt%5D%20%2F%20PERIODICITY%3B%0A%09%7D%0A%09return%20%5BpredictedOutput%2C%20mae%5D%3B%0A%7D%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20FUNCTIONS%20FOR%20VISUALISATION%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%0A%2F%2F%20draw%20timeseries%20prediction%0A%2F%2F%0Afunction%20drawTimeseries%28trueArray%2C%20predictedArray%2C%20mae%29%20%7B%0A%09%2F%2F%20observed%20values%0A%09let%20trueArrayObject%20%3D%20%5B%5D%3B%0A%09for%20%28t%20%3D%200%3B%20t%20%3C%20predictedArray.length%3B%20t%2B%2B%29%20%7B%0A%09%09trueArrayObject.push%28%7B%0A%09%09%09x%3A%20t%2C%0A%09%09%09y%3A%20trueArray%5Bt%20%25%20trueArray.length%5D%20%2a%2010%0A%09%09%7D%29%3B%0A%09%7D%0A%09%2F%2F%20predicted%20values%0A%09let%20predictedArrayObject%20%3D%20%5B%5D%3B%0A%09for%20%28t%20%3D%200%3B%20t%20%3C%20predictedArray.length%3B%20t%2B%2B%29%20%7B%0A%09%09predictedArrayObject.push%28%7B%0A%09%09%09x%3A%20t%2C%0A%09%09%09y%3A%20predictedArray%5Bt%5D%20%2a%2010%0A%09%09%7D%29%3B%0A%09%7D%0A%09%2F%2F%20prediction%20error%0A%09let%20meanPredictionError%20%3D%20%5B%5D%3B%0A%09for%20%28t%20%3D%200%3B%20t%20%3C%20predictedArray.length%3B%20t%2B%2B%29%20%7B%0A%09%09meanPredictionError.push%28%7B%0A%09%09%09x%3A%20t%2C%0A%09%09%09y%3A%20mae%5Bt%5D%20%2a%2010%0A%09%09%7D%29%3B%0A%09%7D%0A%0A%09%2F%2F%20draw%20everything%0A%09let%20data%2C%20look%3B%0A%09let%20surface%20%3D%20%7B%0A%09%09name%3A%20%22Zeitreihenvorhersage%22%2C%0A%09%09tab%3A%20%27Resultat%27%2C%0A%09%09styles%3A%20%7B%0A%09%09%09width%3A%20GRAPH_WIDH%0A%09%09%7D%0A%09%7D%3B%0A%09data%20%3D%20%7B%0A%09%09values%3A%20%5BtrueArrayObject%2C%20predictedArrayObject%2C%20meanPredictionError%5D%2C%0A%09%09series%3A%20%5B%22beobachtet%22%2C%20%22vorhergesagt%22%2C%20%22MAE%22%5D%0A%09%7D%3B%0A%09look%20%3D%20%7B%0A%09%09xLabel%3A%20%27Prognosezeit%20%28Stunden%29%27%2C%0A%09%09yLabel%3A%20%27Wert%27%2C%0A%09%09zoomToFit%3A%20true%2C%0A%09%09seriesColors%3A%20%5B%22steelblue%22%2C%20%22limegreen%22%2C%20%22darkorange%22%5D%0A%09%7D%3B%0A%09tfvis.render.linechart%28surface%2C%20data%2C%20look%29%3B%0A%7D%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20MAIN%20PROGRAM%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%0A%2F%2F%20main%20function%0A%2F%2F%0Aasync%20function%20run%28%29%20%7B%0A%09%2F%2Fnoprotect%0A%0A%09%2F%2F%20check%20number%20of%20TIME_SERIES_FEATURES%0A%09if%20%28TIMESERIES_FEATURES%20%3E%20PERIODICITY%20%7C%7C%20TIMESERIES_FEATURES%20%3C%200%29%20%7B%0A%09%09console.log%28%22%E2%9A%A0%EF%B8%8F%20TIMESERIES_FEATURES%20muss%20zwischen%200%20und%20%22%20%2B%20PERIODICITY%20%2B%20%22%20liegen%21%22%29%3B%0A%09%09return%3B%0A%09%7D%0A%0A%09%2F%2F%20write%20preferences%20on%20console%0A%09console.log%28%22Zeitreihenvorhersage%22%29%3B%0A%09console.log%28%22Neuronales%20Netz%3A%20Anzahl%20Eingangsgr%C3%B6ssen%3A%20%22%20%2B%20%28TIMESERIES_FEATURES%20%2B%202%29%20%2B%20%22%2C%20Anzahl%20Hidden%20Neuronen%3A%20%22%20%2B%20ANZAHL_HIDDEN_NEURONS%29%3B%0A%09console.log%28%22Training%3A%20Lernrate%3A%20%22%20%2B%20LERNRATE%20%2B%20%22%2C%20Epochen%3A%20%22%20%2B%20ANZAHL_EPOCHEN%29%3B%0A%0A%09%2F%2F%20create%20input%20and%20output%20data%0A%09let%20inputArray%20%3D%20createInputArray%28valueArray%2C%20hourArray%29%3B%0A%09let%20outputArray%20%3D%20createOutputArray%28valueArray%29%3B%0A%0A%09%2F%2F%20build%20and%20show%20model%0A%09let%20model%20%3D%20buildModel%28%29%3B%0A%09if%20%28%21tfvis.visor%28%29.isFullscreen%28%29%29%20%7B%0A%09%09tfvis.visor%28%29.toggleFullScreen%28%29%3B%0A%09%7D%0A%09tfvis.show.modelSummary%28%7B%0A%09%09name%3A%20%27Neuronales%20Netz%27%2C%0A%09%09tab%3A%20%27Modell%27%2C%0A%09%09styles%3A%20%7B%0A%09%09%09width%3A%20GRAPH_WIDH%0A%09%09%7D%0A%09%7D%2C%20model%29%3B%0A%0A%09%2F%2F%20train%20model%0A%09let%20history%20%3D%20await%20trainModel%28model%2C%20inputArray%2C%20outputArray%29%3B%0A%09console.log%28%22Entg%C3%BCltiger%20Trainingsfehler%20%28MSE%29%3A%20%22%20%2B%20history.history.loss%5BANZAHL_EPOCHEN%5D%29%3B%0A%0A%09%2F%2F%20predict%20and%20show%20timeseries%0A%09let%20%5BpredictedTimeseries%2C%20mae%5D%20%3D%20await%20predictTimeseries%28model%2C%20inputArray%29%3B%0A%09drawTimeseries%28valueArray%2C%20predictedTimeseries%2C%20mae%29%3B%0A%0A%7D%0Adocument.addEventListener%28%27DOMContentLoaded%27%2C%20run%29%3B&css=undefined&html=%3Cscript%20src%3D%22https%3A%2F%2Fapp.exorciser.ch%2Flib%2Fp5.js%22%3E%3C%2Fscript%3E%0A%3Cscript%20src%3D%22https%3A%2F%2Fcdn.jsdelivr.net%2Fnpm%2F%40tensorflow%2Ftfjs%40latest%2Fdist%2Ftf.min.js%22%3E%3C%2Fscript%3E%0A%3Cscript%20src%3D%22https%3A%2F%2Fcdn.jsdelivr.net%2Fnpm%2F%40tensorflow%2Ftfjs-vis%22%3E%3C%2Fscript%3E&autorun=off&height=700px#TimeseriesSinCosHour}} |
</WRAP> | </WRAP> |
| |
In der Defaulteinstellung nutzt das neuronale Netz nur einen einzigen vergangenen Wert der Zeitreihe sowie Cosinus und Sinus der Tagesstunde, d.h. nur 3 Eingangsgrössen. | In der Defaulteinstellung nutzt das neuronale Netz nur einen einzigen vergangenen Wert der Zeitreihe sowie Cosinus und Sinus der Tagesstunde, d.h. nur 3 Eingangsgrössen. |
- Starte das Programm zwei oder dreimal. Ist das Resultat nun besser oder schlechter in den vorangehenden Aufträgen? Wie vergleicht sich das hier genutzte neuronale Netz mit den zuvor genutzten neuronalen Netzen? {{gem/plain?0=N4XyA#ab0d4297a1770c97}} | - Starte das Programm zwei oder dreimal. Ist das Resultat nun besser oder schlechter in den vorangehenden Aufträgen? Wie vergleicht sich das hier genutzte neuronale Netz mit den zuvor genutzten neuronalen Netzen? {{gem/plain?0=N4XyA#ab0d4297a1770c97}} |
{{exorciser/jspg?javascript=%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%2F%2F%20Diese%20Trainings-%20und%20Updateparameter%20d%C3%BCrfen%20ge%C3%A4ndert%20werden.%0A%0Aconst%20TIMESERIES_FEATURES%20%3D%201%3B%20%2F%2F%20ganzahliger%20Wert%20von%201%20bis%2024%0A%0Aconst%20ANZAHL_HIDDEN_NEURONS%20%3D%2020%3B%20%2F%2F%20ganzzahliger%20Wert%20%3E%200%0Aconst%20ANZAHL_EPOCHEN%20%3D%20300%3B%20%2F%2F%20ganzzahliger%20Wert%20%3E%200%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20CONSTANTS%20AND%20GLOBAL%20VARIABLES%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%20data%0Aconst%20hourArray%20%3D%20%5B0%2C%201%2C%202%2C%203%2C%204%2C%205%2C%206%2C%207%2C%208%2C%209%2C%2010%2C%2011%2C%2012%2C%2013%2C%2014%2C%2015%2C%2016%2C%2017%2C%2018%2C%2019%2C%2020%2C%2021%2C%2022%2C%2023%5D%3B%0Aconst%20valueArray%20%3D%20%5B0.5%2C%200.44%2C%200.41%2C%200.43%2C%200.5%2C%200.62%2C%200.75%2C%200.87%2C%200.93%2C%200.93%2C%200.84%2C%200.69%2C%200.5%2C%200.31%2C%200.16%2C%200.07%2C%200.07%2C%200.13%2C%200.25%2C%200.38%2C%200.5%2C%200.57%2C%200.59%2C%200.56%5D%3B%0A%0A%2F%2F%20further%20constants%0Aconst%20PREDICTION_LIMIT%20%3D%20120%3B%0Aconst%20PERIODICITY%20%3D%20hourArray.length%3B%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20DATA%20HANDLING%20FUNCTIONS%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%0A%2F%2F%20create%20input%20data%0A%2F%2F%0Afunction%20createInputArray%28valueArray%2C%20hourArray%29%20%7B%0A%09let%20inputArray%20%3D%20new%20Array%28valueArray.length%29.fill%280%29.map%28%28%29%20%3D%3E%20new%20Array%28TIMESERIES_FEATURES%20%2B%202%29.fill%280%29%29%3B%20%2F%2F%20empty%20two-dimensional%20array%0A%09for%20%28v%20%3D%200%3B%20v%20%3C%20valueArray.length%3B%20v%2B%2B%29%20%7B%0A%09%09for%20%28f%20%3D%200%3B%20f%20%3C%20TIMESERIES_FEATURES%3B%20f%2B%2B%29%20%7B%0A%09%09%09inputArray%5Bv%5D%5Bf%5D%20%3D%20valueArray%5B%28v%20%2B%20f%29%20%25%20valueArray.length%5D%3B%0A%09%09%7D%0A%09%09%2F%2F%20sin%2C%20cos%20of%20%22actual%22%20time%0A%09%09inputArray%5Bv%5D%5BTIMESERIES_FEATURES%5D%20%3D%20Math.sin%282%20%2a%20Math.PI%20%2a%20hourArray%5B%28v%20%2B%20TIMESERIES_FEATURES%20-%201%29%20%25%20hourArray.length%5D%20%2F%20hourArray.length%29%3B%0A%09%09inputArray%5Bv%5D%5BTIMESERIES_FEATURES%20%2B%201%5D%20%3D%20Math.cos%282%20%2a%20Math.PI%20%2a%20hourArray%5B%28v%20%2B%20TIMESERIES_FEATURES%20-%201%29%20%25%20hourArray.length%5D%20%2F%20hourArray.length%29%3B%0A%09%7D%0A%09return%20inputArray%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20create%20output%20data%0A%2F%2F%0Afunction%20createOutputArray%28valueArray%29%20%7B%0A%09let%20outputArray%20%3D%20new%20Array%28valueArray.length%29.fill%280%29%3B%0A%09for%20%28v%20%3D%200%3B%20v%20%3C%20valueArray.length%3B%20v%2B%2B%29%20%7B%0A%09%09outputArray%5Bv%5D%20%3D%20valueArray%5B%28v%20%2B%20TIMESERIES_FEATURES%29%20%25%20valueArray.length%5D%3B%0A%09%7D%0A%09return%20outputArray%3B%0A%7D%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20NEURAL%20NETWORK%20FUNCTIONS%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%0A%2F%2F%20build%20model%0A%2F%2F%0Afunction%20buildModel%28%29%20%7B%0A%09const%20model%20%3D%20tf.sequential%28%7B%0A%09%09layers%3A%20%5B%0A%09%09%09tf.layers.dense%28%7B%0A%09%09%09%09name%3A%20%27HiddenLayer1%27%2C%0A%09%09%09%09inputShape%3A%20%5BTIMESERIES_FEATURES%20%2B%202%5D%2C%0A%09%09%09%09units%3A%20ANZAHL_HIDDEN_NEURONS%2C%0A%09%09%09%09activation%3A%20%27relu%27%0A%09%09%09%7D%29%2C%0A%09%09%09tf.layers.dense%28%7B%0A%09%09%09%09name%3A%20%27HiddenLayer2%27%2C%0A%09%09%09%09units%3A%20ANZAHL_HIDDEN_NEURONS%2C%0A%09%09%09%09activation%3A%20%27relu%27%0A%09%09%09%7D%29%2C%0A%09%09%09tf.layers.dense%28%7B%0A%09%09%09%09name%3A%20%27OutputLayer%27%2C%0A%09%09%09%09units%3A%201%2C%0A%09%09%09%09activation%3A%20%27linear%27%0A%09%09%09%7D%29%0A%09%09%5D%0A%09%7D%29%3B%0A%09%2F%2F%20neural%20network%20training%0A%09model.compile%28%7B%0A%09%09optimizer%3A%20tf.train.adam%28%29%2C%0A%09%09loss%3A%20tf.losses.meanSquaredError%0A%09%7D%29%3B%0A%09return%20model%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20train%20model%0A%2F%2F%0Aasync%20function%20trainModel%28model%2C%20trainInput%2C%20trainOutput%29%20%7B%0A%09let%20history%20%3D%20await%20model.fit%28%0A%09%09tf.tensor%28trainInput%29%2C%20tf.tensor%28trainOutput%29%2C%20%7B%0A%09%09%09epochs%3A%20ANZAHL_EPOCHEN%20%2B%201%2C%0A%09%09%09batchSize%3A%20trainInput.length%2C%0A%09%09%09shuffle%3A%20true%2C%0A%09%09%09callbacks%3A%20%5B%0A%09%09%09%09tfvis.show.fitCallbacks%28%7B%0A%09%09%09%09%09name%3A%20%27Trainingsfehler%27%2C%0A%09%09%09%09%09tab%3A%20%27Training%27%0A%09%09%09%09%7D%2C%20%5B%27loss%27%5D%2C%20%7B%0A%09%09%09%09%09height%3A%20200%2C%0A%09%09%09%09%09callbacks%3A%20%5B%27onEpochEnd%27%5D%2C%0A%09%09%09%09%09yLabel%3A%20%27MSE%27%0A%09%09%09%09%7D%29%2C%0A%09%09%09%5D%0A%09%09%7D%29%3B%0A%09return%20history%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20predict%20timeseries%20ahead%20and%20return%20object%20for%20tfvis%0A%2F%2F%0Aasync%20function%20predictTimeseries%28model%2C%20inputArray%29%20%7B%0A%09let%20mae%20%3D%20%5B%5D%3B%0A%09let%20predictedOutput%20%3D%20%5B%5D%3B%0A%09let%20inputSample%20%3D%20%5BinputArray%5BinputArray.length%20-%20TIMESERIES_FEATURES%5D.slice%28%29%5D%3B%0A%09let%20outputTensor%2C%20outputArray%3B%0A%09for%20%28t%20%3D%200%3B%20t%20%3C%20PREDICTION_LIMIT%3B%20t%2B%2B%29%20%7B%0A%09%09%2F%2F%20predict%20one%20timestep%0A%09%09outputTensor%20%3D%20await%20model.predict%28tf.tensor%28inputSample%29%29%3B%0A%09%09outputArray%20%3D%20await%20outputTensor.arraySync%28%29%3B%0A%09%09%2F%2F%20shift%20timeseries%20by%20one%20step%0A%09%09for%20%28f%20%3D%201%3B%20f%20%3C%20TIMESERIES_FEATURES%3B%20f%2B%2B%29%20%7B%0A%09%09%09inputSample%5B0%5D%5Bf%20-%201%5D%20%3D%20inputSample%5B0%5D%5Bf%5D%3B%0A%09%09%7D%0A%09%09%2F%2F%20add%20prediction%20as%20most%20recent%20time%20in%20timeseries%0A%09%09inputSample%5B0%5D%5BTIMESERIES_FEATURES%20-%201%5D%20%3D%20outputArray%5B0%5D%5B0%5D%3B%0A%09%09%2F%2F%20update%20cos%20%2F%20sin%20of%20hour%20input%20feature%0A%09%09inputSample%5B0%5D%5BTIMESERIES_FEATURES%5D%20%3D%20inputArray%5B%28inputArray.length%20-%20TIMESERIES_FEATURES%20%2B%20t%20%2B%201%29%20%25%20inputArray.length%5D%5BinputArray%5B0%5D.length%20-%202%5D%3B%0A%09%09inputSample%5B0%5D%5BTIMESERIES_FEATURES%20%2B%201%5D%20%3D%20inputArray%5B%28inputArray.length%20-%20TIMESERIES_FEATURES%20%2B%20t%20%2B%201%29%20%25%20inputArray.length%5D%5BinputArray%5B0%5D.length%20-%201%5D%3B%0A%09%09%2F%2F%20store%20predicted%20time%0A%09%09predictedOutput.push%28outputArray%5B0%5D%5B0%5D%29%3B%0A%09%09%2F%2F%20store%20initial%20mae%20values%0A%09%09mae.push%28Math.abs%28outputArray%5B0%5D%5B0%5D%20-%20valueArray%5Bt%20%25%20PERIODICITY%5D%29%29%3B%0A%09%7D%0A%09%2F%2F%20sum%20mae%20values%20for%20shifted%20predictions%0A%09for%20%28s%20%3D%201%3B%20s%20%3C%20PERIODICITY%3B%20s%20%3D%20s%20%2B%201%29%20%7B%0A%09%09inputSample%20%3D%20%5BinputArray%5B%28inputArray.length%20-%20TIMESERIES_FEATURES%20%2B%20s%29%20%25%20PERIODICITY%5D.slice%28%29%5D%3B%0A%09%09for%20%28t%20%3D%200%3B%20t%20%3C%20PREDICTION_LIMIT%3B%20t%2B%2B%29%20%7B%0A%09%09%09%2F%2F%20predict%20one%20timestep%0A%09%09%09outputTensor%20%3D%20await%20model.predict%28tf.tensor%28inputSample%29%29%3B%0A%09%09%09outputArray%20%3D%20await%20outputTensor.arraySync%28%29%3B%0A%09%09%09%2F%2F%20shift%20timeseries%20by%20one%20step%0A%09%09%09for%20%28f%20%3D%201%3B%20f%20%3C%20TIMESERIES_FEATURES%3B%20f%2B%2B%29%20%7B%0A%09%09%09%09inputSample%5B0%5D%5Bf%20-%201%5D%20%3D%20inputSample%5B0%5D%5Bf%5D%3B%0A%09%09%09%7D%0A%09%09%09%2F%2F%20add%20prediction%20as%20most%20recent%20time%20in%20timeseries%0A%09%09%09inputSample%5B0%5D%5BTIMESERIES_FEATURES%20-%201%5D%20%3D%20outputArray%5B0%5D%5B0%5D%3B%0A%09%09%09%2F%2F%20update%20cos%20%2F%20sin%20of%20hour%20input%20feature%0A%09%09%09inputSample%5B0%5D%5BTIMESERIES_FEATURES%5D%20%3D%20inputArray%5B%28inputArray.length%20-%20TIMESERIES_FEATURES%20%2B%20s%20%2B%20t%20%2B%201%29%20%25%20inputArray.length%5D%5BinputArray%5B0%5D.length%20-%202%5D%3B%0A%09%09%09inputSample%5B0%5D%5BTIMESERIES_FEATURES%20%2B%201%5D%20%3D%20inputArray%5B%28inputArray.length%20-%20TIMESERIES_FEATURES%20%2B%20s%20%2B%20t%20%2B%201%29%20%25%20inputArray.length%5D%5BinputArray%5B0%5D.length%20-%201%5D%3B%0A%09%09%09%2F%2F%20add%20mae%20values%0A%09%09%09mae%5Bt%5D%20%2B%3D%20Math.abs%28outputArray%5B0%5D%5B0%5D%20-%20valueArray%5B%28t%20%2B%20s%29%20%25%20PERIODICITY%5D%29%3B%0A%09%09%7D%0A%09%7D%0A%09%2F%2F%20calculate%20mae%20mean%20values%0A%09for%20%28t%20%3D%200%3B%20t%20%3C%20mae.length%3B%20t%2B%2B%29%20%7B%0A%09%09mae%5Bt%5D%20%3D%20mae%5Bt%5D%20%2F%20PERIODICITY%3B%0A%09%7D%0A%09return%20%5BpredictedOutput%2C%20mae%5D%3B%0A%7D%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20FUNCTIONS%20FOR%20VISUALISATION%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%0A%2F%2F%20draw%20timeseries%20prediction%0A%2F%2F%0Afunction%20drawTimeseries%28trueArray%2C%20predictedArray%2C%20mae%29%20%7B%0A%09%2F%2F%20observed%20values%0A%09let%20trueArrayObject%20%3D%20%5B%5D%3B%0A%09for%20%28t%20%3D%200%3B%20t%20%3C%20predictedArray.length%3B%20t%2B%2B%29%20%7B%0A%09%09trueArrayObject.push%28%7B%0A%09%09%09x%3A%20t%2C%0A%09%09%09y%3A%20trueArray%5Bt%20%25%20trueArray.length%5D%20%2a%2010%0A%09%09%7D%29%3B%0A%09%7D%0A%09%2F%2F%20predicted%20values%0A%09let%20predictedArrayObject%20%3D%20%5B%5D%3B%0A%09for%20%28t%20%3D%200%3B%20t%20%3C%20predictedArray.length%3B%20t%2B%2B%29%20%7B%0A%09%09predictedArrayObject.push%28%7B%0A%09%09%09x%3A%20t%2C%0A%09%09%09y%3A%20predictedArray%5Bt%5D%20%2a%2010%0A%09%09%7D%29%3B%0A%09%7D%0A%09%2F%2F%20prediction%20error%0A%09let%20meanPredictionError%20%3D%20%5B%5D%3B%0A%09for%20%28t%20%3D%200%3B%20t%20%3C%20predictedArray.length%3B%20t%2B%2B%29%20%7B%0A%09%09meanPredictionError.push%28%7B%0A%09%09%09x%3A%20t%2C%0A%09%09%09y%3A%20mae%5Bt%5D%20%2a%2010%0A%09%09%7D%29%3B%0A%09%7D%0A%0A%09%2F%2F%20draw%20everything%0A%09let%20data%2C%20look%3B%0A%09let%20surface%20%3D%20%7B%0A%09%09name%3A%20%22Zeitreihenvorhersage%22%2C%0A%09%09tab%3A%20%27Resultat%27%0A%09%7D%3B%0A%09data%20%3D%20%7B%0A%09%09values%3A%20%5BtrueArrayObject%2C%20predictedArrayObject%2C%20meanPredictionError%5D%2C%0A%09%09series%3A%20%5B%22beobachtet%22%2C%20%22vorhergesagt%22%2C%20%22MAE%22%5D%0A%09%7D%3B%0A%09look%20%3D%20%7B%0A%09%09xLabel%3A%20%27Prognosezeit%20%28Stunden%29%27%2C%0A%09%09yLabel%3A%20%27Wert%27%2C%0A%09%09zoomToFit%3A%20true%2C%0A%09%09seriesColors%3A%20%5B%22darkmagenta%22%2C%20%22coral%22%2C%20%22limegreen%22%5D%0A%09%7D%3B%0A%09tfvis.render.linechart%28surface%2C%20data%2C%20look%29%3B%0A%7D%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20MAIN%20PROGRAM%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%0A%2F%2F%20main%20function%0A%2F%2F%0Aasync%20function%20run%28%29%20%7B%0A%09%2F%2Fnoprotect%0A%0A%09%2F%2F%20check%20number%20of%20TIME_SERIES_FEATURES%0A%09if%20%28TIMESERIES_FEATURES%20%3E%20PERIODICITY%20%7C%7C%20TIMESERIES_FEATURES%20%3C%200%29%20%7B%0A%09%09console.log%28%22%E2%9A%A0%EF%B8%8F%20TIMESERIES_FEATURES%20muss%20zwischen%200%20und%20%22%20%2B%20PERIODICITY%20%2B%20%22%20liegen%21%22%29%3B%0A%09%09return%3B%0A%09%7D%0A%0A%09%2F%2F%20write%20preferences%20on%20console%0A%09console.log%28%22Zeitreihenvorhersage%22%29%3B%0A%09console.log%28%22Neuronales%20Netz%3A%20Anzahl%20Eingangsgr%C3%B6ssen%3A%20%22%20%2B%20%28TIMESERIES_FEATURES%20%2B%202%29%20%2B%20%22%2C%20Anzahl%20Hidden%20Neuronen%3A%20%22%20%2B%20ANZAHL_HIDDEN_NEURONS%29%3B%0A%09console.log%28%22Training%3A%20Lernrate%3A%20keine%2C%20Epochen%3A%20%22%20%2B%20ANZAHL_EPOCHEN%29%3B%0A%0A%09%2F%2F%20create%20input%20and%20output%20data%0A%09let%20inputArray%20%3D%20createInputArray%28valueArray%2C%20hourArray%29%3B%0A%09let%20outputArray%20%3D%20createOutputArray%28valueArray%29%3B%0A%0A%09%2F%2F%20build%20and%20show%20model%0A%09let%20model%20%3D%20buildModel%28%29%3B%0A%09tfvis.show.modelSummary%28%7B%0A%09%09name%3A%20%27Neuronales%20Netz%27%2C%0A%09%09tab%3A%20%27Modell%27%0A%09%7D%2C%20model%29%3B%0A%0A%09%2F%2F%20train%20model%0A%09let%20history%20%3D%20await%20trainModel%28model%2C%20inputArray%2C%20outputArray%29%3B%0A%09console.log%28%22Entg%C3%BCltiger%20Trainingsfehler%20%28MSE%29%3A%20%22%20%2B%20history.history.loss%5BANZAHL_EPOCHEN%5D%29%3B%0A%0A%09%2F%2F%20predict%20and%20show%20timeseries%0A%09let%20%5BpredictedTimeseries%2C%20mae%5D%20%3D%20await%20predictTimeseries%28model%2C%20inputArray%29%3B%0A%09drawTimeseries%28valueArray%2C%20predictedTimeseries%2C%20mae%29%3B%0A%0A%7D%0Adocument.addEventListener%28%27DOMContentLoaded%27%2C%20run%29%3B&css=undefined&html=%3Cscript%20src%3D%22https%3A%2F%2Fcdn.jsdelivr.net%2Fnpm%2Fp5%22%3E%3C%2Fscript%3E%0A%3Cscript%20src%3D%22https%3A%2F%2Fcdn.jsdelivr.net%2Fnpm%2F%40tensorflow%2Ftfjs%40latest%2Fdist%2Ftf.min.js%22%3E%3C%2Fscript%3E%0A%3Cscript%20src%3D%22https%3A%2F%2Fcdn.jsdelivr.net%2Fnpm%2F%40tensorflow%2Ftfjs-vis%22%3E%3C%2Fscript%3E&autorun=off&height=700px#ModernSinCos}} | {{exorciser/jspg?javascript=%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%2F%2F%20Diese%20Trainings-%20und%20Updateparameter%20d%C3%BCrfen%20ge%C3%A4ndert%20werden.%0A%0Aconst%20TIMESERIES_FEATURES%20%3D%201%3B%20%2F%2F%20ganzahliger%20Wert%20von%201%20bis%2024%0A%0Aconst%20ANZAHL_HIDDEN_NEURONS%20%3D%2020%3B%20%2F%2F%20ganzzahliger%20Wert%20%3E%200%0Aconst%20ANZAHL_EPOCHEN%20%3D%20300%3B%20%2F%2F%20ganzzahliger%20Wert%20%3E%200%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20CONSTANTS%20AND%20GLOBAL%20VARIABLES%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%20data%0Aconst%20hourArray%20%3D%20%5B0%2C%201%2C%202%2C%203%2C%204%2C%205%2C%206%2C%207%2C%208%2C%209%2C%2010%2C%2011%2C%2012%2C%2013%2C%2014%2C%2015%2C%2016%2C%2017%2C%2018%2C%2019%2C%2020%2C%2021%2C%2022%2C%2023%5D%3B%0Aconst%20valueArray%20%3D%20%5B0.5%2C%200.44%2C%200.41%2C%200.43%2C%200.5%2C%200.62%2C%200.75%2C%200.87%2C%200.93%2C%200.93%2C%200.84%2C%200.69%2C%200.5%2C%200.31%2C%200.16%2C%200.07%2C%200.07%2C%200.13%2C%200.25%2C%200.38%2C%200.5%2C%200.57%2C%200.59%2C%200.56%5D%3B%0A%0A%2F%2F%20further%20constants%0Aconst%20PREDICTION_LIMIT%20%3D%20120%3B%0Aconst%20PERIODICITY%20%3D%20hourArray.length%3B%0Aconst%20GRAPH_WIDH%20%3D%20600%3B%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20DATA%20HANDLING%20FUNCTIONS%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%0A%2F%2F%20create%20input%20data%0A%2F%2F%0Afunction%20createInputArray%28valueArray%2C%20hourArray%29%20%7B%0A%09let%20inputArray%20%3D%20new%20Array%28valueArray.length%29.fill%280%29.map%28%28%29%20%3D%3E%20new%20Array%28TIMESERIES_FEATURES%20%2B%202%29.fill%280%29%29%3B%20%2F%2F%20empty%20two-dimensional%20array%0A%09for%20%28v%20%3D%200%3B%20v%20%3C%20valueArray.length%3B%20v%2B%2B%29%20%7B%0A%09%09for%20%28f%20%3D%200%3B%20f%20%3C%20TIMESERIES_FEATURES%3B%20f%2B%2B%29%20%7B%0A%09%09%09inputArray%5Bv%5D%5Bf%5D%20%3D%20valueArray%5B%28v%20%2B%20f%29%20%25%20valueArray.length%5D%3B%0A%09%09%7D%0A%09%09%2F%2F%20sin%2C%20cos%20of%20%22actual%22%20time%0A%09%09inputArray%5Bv%5D%5BTIMESERIES_FEATURES%5D%20%3D%20Math.sin%282%20%2a%20Math.PI%20%2a%20hourArray%5B%28v%20%2B%20TIMESERIES_FEATURES%20-%201%29%20%25%20hourArray.length%5D%20%2F%20hourArray.length%29%3B%0A%09%09inputArray%5Bv%5D%5BTIMESERIES_FEATURES%20%2B%201%5D%20%3D%20Math.cos%282%20%2a%20Math.PI%20%2a%20hourArray%5B%28v%20%2B%20TIMESERIES_FEATURES%20-%201%29%20%25%20hourArray.length%5D%20%2F%20hourArray.length%29%3B%0A%09%7D%0A%09return%20inputArray%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20create%20output%20data%0A%2F%2F%0Afunction%20createOutputArray%28valueArray%29%20%7B%0A%09let%20outputArray%20%3D%20new%20Array%28valueArray.length%29.fill%280%29%3B%0A%09for%20%28v%20%3D%200%3B%20v%20%3C%20valueArray.length%3B%20v%2B%2B%29%20%7B%0A%09%09outputArray%5Bv%5D%20%3D%20valueArray%5B%28v%20%2B%20TIMESERIES_FEATURES%29%20%25%20valueArray.length%5D%3B%0A%09%7D%0A%09return%20outputArray%3B%0A%7D%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20NEURAL%20NETWORK%20FUNCTIONS%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%0A%2F%2F%20build%20model%0A%2F%2F%0Afunction%20buildModel%28%29%20%7B%0A%09const%20model%20%3D%20tf.sequential%28%7B%0A%09%09layers%3A%20%5B%0A%09%09%09tf.layers.dense%28%7B%0A%09%09%09%09name%3A%20%27HiddenLayer1%27%2C%0A%09%09%09%09inputShape%3A%20%5BTIMESERIES_FEATURES%20%2B%202%5D%2C%0A%09%09%09%09units%3A%20ANZAHL_HIDDEN_NEURONS%2C%0A%09%09%09%09activation%3A%20%27relu%27%0A%09%09%09%7D%29%2C%0A%09%09%09tf.layers.dense%28%7B%0A%09%09%09%09name%3A%20%27HiddenLayer2%27%2C%0A%09%09%09%09units%3A%20ANZAHL_HIDDEN_NEURONS%2C%0A%09%09%09%09activation%3A%20%27relu%27%0A%09%09%09%7D%29%2C%0A%09%09%09tf.layers.dense%28%7B%0A%09%09%09%09name%3A%20%27OutputLayer%27%2C%0A%09%09%09%09units%3A%201%2C%0A%09%09%09%09activation%3A%20%27linear%27%0A%09%09%09%7D%29%0A%09%09%5D%0A%09%7D%29%3B%0A%09%2F%2F%20neural%20network%20training%0A%09model.compile%28%7B%0A%09%09optimizer%3A%20tf.train.adam%28%29%2C%0A%09%09loss%3A%20tf.losses.meanSquaredError%0A%09%7D%29%3B%0A%09return%20model%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20train%20model%0A%2F%2F%0Aasync%20function%20trainModel%28model%2C%20trainInput%2C%20trainOutput%29%20%7B%0A%09let%20history%20%3D%20await%20model.fit%28%0A%09%09tf.tensor%28trainInput%29%2C%20tf.tensor%28trainOutput%29%2C%20%7B%0A%09%09%09epochs%3A%20ANZAHL_EPOCHEN%20%2B%201%2C%0A%09%09%09batchSize%3A%20trainInput.length%2C%0A%09%09%09shuffle%3A%20true%2C%0A%09%09%09callbacks%3A%20%5B%0A%09%09%09%09tfvis.show.fitCallbacks%28%7B%0A%09%09%09%09%09name%3A%20%27Trainingsfehler%27%2C%0A%09%09%09%09%09tab%3A%20%27Training%27%2C%0A%09%09%09%09%09styles%3A%20%7B%0A%09%09%09%09%09%09width%3A%20GRAPH_WIDH%0A%09%09%09%09%09%7D%0A%09%09%09%09%7D%2C%20%5B%27loss%27%5D%2C%20%7B%0A%09%09%09%09%09height%3A%20200%2C%0A%09%09%09%09%09callbacks%3A%20%5B%27onEpochEnd%27%5D%2C%0A%09%09%09%09%09yLabel%3A%20%27MSE%27%0A%09%09%09%09%7D%29%2C%0A%09%09%09%5D%0A%09%09%7D%29%3B%0A%09return%20history%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20predict%20timeseries%20ahead%20and%20return%20object%20for%20tfvis%0A%2F%2F%0Aasync%20function%20predictTimeseries%28model%2C%20inputArray%29%20%7B%0A%09let%20mae%20%3D%20%5B%5D%3B%0A%09let%20predictedOutput%20%3D%20%5B%5D%3B%0A%09let%20inputSample%20%3D%20%5BinputArray%5BinputArray.length%20-%20TIMESERIES_FEATURES%5D.slice%28%29%5D%3B%0A%09let%20outputTensor%2C%20outputArray%3B%0A%09for%20%28t%20%3D%200%3B%20t%20%3C%20PREDICTION_LIMIT%3B%20t%2B%2B%29%20%7B%0A%09%09%2F%2F%20predict%20one%20timestep%0A%09%09outputTensor%20%3D%20await%20model.predict%28tf.tensor%28inputSample%29%29%3B%0A%09%09outputArray%20%3D%20await%20outputTensor.arraySync%28%29%3B%0A%09%09%2F%2F%20shift%20timeseries%20by%20one%20step%0A%09%09for%20%28f%20%3D%201%3B%20f%20%3C%20TIMESERIES_FEATURES%3B%20f%2B%2B%29%20%7B%0A%09%09%09inputSample%5B0%5D%5Bf%20-%201%5D%20%3D%20inputSample%5B0%5D%5Bf%5D%3B%0A%09%09%7D%0A%09%09%2F%2F%20add%20prediction%20as%20most%20recent%20time%20in%20timeseries%0A%09%09inputSample%5B0%5D%5BTIMESERIES_FEATURES%20-%201%5D%20%3D%20outputArray%5B0%5D%5B0%5D%3B%0A%09%09%2F%2F%20update%20cos%20%2F%20sin%20of%20hour%20input%20feature%0A%09%09inputSample%5B0%5D%5BTIMESERIES_FEATURES%5D%20%3D%20inputArray%5B%28inputArray.length%20-%20TIMESERIES_FEATURES%20%2B%20t%20%2B%201%29%20%25%20inputArray.length%5D%5BinputArray%5B0%5D.length%20-%202%5D%3B%0A%09%09inputSample%5B0%5D%5BTIMESERIES_FEATURES%20%2B%201%5D%20%3D%20inputArray%5B%28inputArray.length%20-%20TIMESERIES_FEATURES%20%2B%20t%20%2B%201%29%20%25%20inputArray.length%5D%5BinputArray%5B0%5D.length%20-%201%5D%3B%0A%09%09%2F%2F%20store%20predicted%20time%0A%09%09predictedOutput.push%28outputArray%5B0%5D%5B0%5D%29%3B%0A%09%09%2F%2F%20store%20initial%20mae%20values%0A%09%09mae.push%28Math.abs%28outputArray%5B0%5D%5B0%5D%20-%20valueArray%5Bt%20%25%20PERIODICITY%5D%29%29%3B%0A%09%7D%0A%09%2F%2F%20sum%20mae%20values%20for%20shifted%20predictions%0A%09for%20%28s%20%3D%201%3B%20s%20%3C%20PERIODICITY%3B%20s%20%3D%20s%20%2B%201%29%20%7B%0A%09%09inputSample%20%3D%20%5BinputArray%5B%28inputArray.length%20-%20TIMESERIES_FEATURES%20%2B%20s%29%20%25%20PERIODICITY%5D.slice%28%29%5D%3B%0A%09%09for%20%28t%20%3D%200%3B%20t%20%3C%20PREDICTION_LIMIT%3B%20t%2B%2B%29%20%7B%0A%09%09%09%2F%2F%20predict%20one%20timestep%0A%09%09%09outputTensor%20%3D%20await%20model.predict%28tf.tensor%28inputSample%29%29%3B%0A%09%09%09outputArray%20%3D%20await%20outputTensor.arraySync%28%29%3B%0A%09%09%09%2F%2F%20shift%20timeseries%20by%20one%20step%0A%09%09%09for%20%28f%20%3D%201%3B%20f%20%3C%20TIMESERIES_FEATURES%3B%20f%2B%2B%29%20%7B%0A%09%09%09%09inputSample%5B0%5D%5Bf%20-%201%5D%20%3D%20inputSample%5B0%5D%5Bf%5D%3B%0A%09%09%09%7D%0A%09%09%09%2F%2F%20add%20prediction%20as%20most%20recent%20time%20in%20timeseries%0A%09%09%09inputSample%5B0%5D%5BTIMESERIES_FEATURES%20-%201%5D%20%3D%20outputArray%5B0%5D%5B0%5D%3B%0A%09%09%09%2F%2F%20update%20cos%20%2F%20sin%20of%20hour%20input%20feature%0A%09%09%09inputSample%5B0%5D%5BTIMESERIES_FEATURES%5D%20%3D%20inputArray%5B%28inputArray.length%20-%20TIMESERIES_FEATURES%20%2B%20s%20%2B%20t%20%2B%201%29%20%25%20inputArray.length%5D%5BinputArray%5B0%5D.length%20-%202%5D%3B%0A%09%09%09inputSample%5B0%5D%5BTIMESERIES_FEATURES%20%2B%201%5D%20%3D%20inputArray%5B%28inputArray.length%20-%20TIMESERIES_FEATURES%20%2B%20s%20%2B%20t%20%2B%201%29%20%25%20inputArray.length%5D%5BinputArray%5B0%5D.length%20-%201%5D%3B%0A%09%09%09%2F%2F%20add%20mae%20values%0A%09%09%09mae%5Bt%5D%20%2B%3D%20Math.abs%28outputArray%5B0%5D%5B0%5D%20-%20valueArray%5B%28t%20%2B%20s%29%20%25%20PERIODICITY%5D%29%3B%0A%09%09%7D%0A%09%7D%0A%09%2F%2F%20calculate%20mae%20mean%20values%0A%09for%20%28t%20%3D%200%3B%20t%20%3C%20mae.length%3B%20t%2B%2B%29%20%7B%0A%09%09mae%5Bt%5D%20%3D%20mae%5Bt%5D%20%2F%20PERIODICITY%3B%0A%09%7D%0A%09return%20%5BpredictedOutput%2C%20mae%5D%3B%0A%7D%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20FUNCTIONS%20FOR%20VISUALISATION%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%0A%2F%2F%20draw%20timeseries%20prediction%0A%2F%2F%0Afunction%20drawTimeseries%28trueArray%2C%20predictedArray%2C%20mae%29%20%7B%0A%09%2F%2F%20observed%20values%0A%09let%20trueArrayObject%20%3D%20%5B%5D%3B%0A%09for%20%28t%20%3D%200%3B%20t%20%3C%20predictedArray.length%3B%20t%2B%2B%29%20%7B%0A%09%09trueArrayObject.push%28%7B%0A%09%09%09x%3A%20t%2C%0A%09%09%09y%3A%20trueArray%5Bt%20%25%20trueArray.length%5D%20%2a%2010%0A%09%09%7D%29%3B%0A%09%7D%0A%09%2F%2F%20predicted%20values%0A%09let%20predictedArrayObject%20%3D%20%5B%5D%3B%0A%09for%20%28t%20%3D%200%3B%20t%20%3C%20predictedArray.length%3B%20t%2B%2B%29%20%7B%0A%09%09predictedArrayObject.push%28%7B%0A%09%09%09x%3A%20t%2C%0A%09%09%09y%3A%20predictedArray%5Bt%5D%20%2a%2010%0A%09%09%7D%29%3B%0A%09%7D%0A%09%2F%2F%20prediction%20error%0A%09let%20meanPredictionError%20%3D%20%5B%5D%3B%0A%09for%20%28t%20%3D%200%3B%20t%20%3C%20predictedArray.length%3B%20t%2B%2B%29%20%7B%0A%09%09meanPredictionError.push%28%7B%0A%09%09%09x%3A%20t%2C%0A%09%09%09y%3A%20mae%5Bt%5D%20%2a%2010%0A%09%09%7D%29%3B%0A%09%7D%0A%0A%09%2F%2F%20draw%20everything%0A%09let%20data%2C%20look%3B%0A%09let%20surface%20%3D%20%7B%0A%09%09name%3A%20%22Zeitreihenvorhersage%22%2C%0A%09%09tab%3A%20%27Resultat%27%2C%0A%09%09styles%3A%20%7B%0A%09%09%09width%3A%20GRAPH_WIDH%0A%09%09%7D%0A%09%7D%3B%0A%09data%20%3D%20%7B%0A%09%09values%3A%20%5BtrueArrayObject%2C%20predictedArrayObject%2C%20meanPredictionError%5D%2C%0A%09%09series%3A%20%5B%22beobachtet%22%2C%20%22vorhergesagt%22%2C%20%22MAE%22%5D%0A%09%7D%3B%0A%09look%20%3D%20%7B%0A%09%09xLabel%3A%20%27Prognosezeit%20%28Stunden%29%27%2C%0A%09%09yLabel%3A%20%27Wert%27%2C%0A%09%09zoomToFit%3A%20true%2C%0A%09%09seriesColors%3A%20%5B%22darkmagenta%22%2C%20%22coral%22%2C%20%22limegreen%22%5D%0A%09%7D%3B%0A%09tfvis.render.linechart%28surface%2C%20data%2C%20look%29%3B%0A%7D%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20MAIN%20PROGRAM%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%0A%2F%2F%20main%20function%0A%2F%2F%0Aasync%20function%20run%28%29%20%7B%0A%09%2F%2Fnoprotect%0A%0A%09%2F%2F%20check%20number%20of%20TIME_SERIES_FEATURES%0A%09if%20%28TIMESERIES_FEATURES%20%3E%20PERIODICITY%20%7C%7C%20TIMESERIES_FEATURES%20%3C%200%29%20%7B%0A%09%09console.log%28%22%E2%9A%A0%EF%B8%8F%20TIMESERIES_FEATURES%20muss%20zwischen%200%20und%20%22%20%2B%20PERIODICITY%20%2B%20%22%20liegen%21%22%29%3B%0A%09%09return%3B%0A%09%7D%0A%0A%09%2F%2F%20write%20preferences%20on%20console%0A%09console.log%28%22Zeitreihenvorhersage%22%29%3B%0A%09console.log%28%22Neuronales%20Netz%3A%20Anzahl%20Eingangsgr%C3%B6ssen%3A%20%22%20%2B%20%28TIMESERIES_FEATURES%20%2B%202%29%20%2B%20%22%2C%20Anzahl%20Hidden%20Neuronen%3A%20%22%20%2B%20ANZAHL_HIDDEN_NEURONS%29%3B%0A%09console.log%28%22Training%3A%20Lernrate%3A%20keine%2C%20Epochen%3A%20%22%20%2B%20ANZAHL_EPOCHEN%29%3B%0A%0A%09%2F%2F%20create%20input%20and%20output%20data%0A%09let%20inputArray%20%3D%20createInputArray%28valueArray%2C%20hourArray%29%3B%0A%09let%20outputArray%20%3D%20createOutputArray%28valueArray%29%3B%0A%0A%09%2F%2F%20build%20and%20show%20model%0A%09let%20model%20%3D%20buildModel%28%29%3B%0A%09if%20%28%21tfvis.visor%28%29.isFullscreen%28%29%29%20%7B%0A%09%09tfvis.visor%28%29.toggleFullScreen%28%29%3B%0A%09%7D%0A%09tfvis.show.modelSummary%28%7B%0A%09%09name%3A%20%27Neuronales%20Netz%27%2C%0A%09%09tab%3A%20%27Modell%27%2C%0A%09%09styles%3A%20%7B%0A%09%09%09width%3A%20GRAPH_WIDH%0A%09%09%7D%0A%09%7D%2C%20model%29%3B%0A%0A%09%2F%2F%20train%20model%0A%09let%20history%20%3D%20await%20trainModel%28model%2C%20inputArray%2C%20outputArray%29%3B%0A%09console.log%28%22Entg%C3%BCltiger%20Trainingsfehler%20%28MSE%29%3A%20%22%20%2B%20history.history.loss%5BANZAHL_EPOCHEN%5D%29%3B%0A%0A%09%2F%2F%20predict%20and%20show%20timeseries%0A%09let%20%5BpredictedTimeseries%2C%20mae%5D%20%3D%20await%20predictTimeseries%28model%2C%20inputArray%29%3B%0A%09drawTimeseries%28valueArray%2C%20predictedTimeseries%2C%20mae%29%3B%0A%0A%7D%0Adocument.addEventListener%28%27DOMContentLoaded%27%2C%20run%29%3B&css=undefined&html=%3Cscript%20src%3D%22https%3A%2F%2Fapp.exorciser.ch%2Flib%2Fp5.js%22%3E%3C%2Fscript%3E%0A%3Cscript%20src%3D%22https%3A%2F%2Fcdn.jsdelivr.net%2Fnpm%2F%40tensorflow%2Ftfjs%40latest%2Fdist%2Ftf.min.js%22%3E%3C%2Fscript%3E%0A%3Cscript%20src%3D%22https%3A%2F%2Fcdn.jsdelivr.net%2Fnpm%2F%40tensorflow%2Ftfjs-vis%22%3E%3C%2Fscript%3E&autorun=off&height=700px#ModernSinCos}} |
</WRAP> | </WRAP> |
| |
Das neuronale Netz verwendet ausschliesslich vergangene Werte der Zeitreihe als Eingangsgrössen. Obwohl der verwendete Lernalgorithmus ohne Lernrate auskommt, kann dieser in diesem Auftrag zusätzlich mit einer Lernrate "getuned" werden. | Das neuronale Netz verwendet ausschliesslich vergangene Werte der Zeitreihe als Eingangsgrössen. Obwohl der verwendete Lernalgorithmus ohne Lernrate auskommt, kann dieser in diesem Auftrag zusätzlich mit einer Lernrate "getuned" werden. |
- Starte das Programm zwei oder dreimal. Spiele mit Parametern etwas herum. Versuche, mit möglichst wenigen ''TIMESERIES_FEATURES'' auszukommen. Halte fest, mit welchen Einstellungen du dein bestes Resultat erzielen konntest.{{gem/plain?0=N4XyA#4b7eb6d8feb6e66f}} | - Starte das Programm zwei oder dreimal. Spiele mit Parametern etwas herum. Versuche, mit möglichst wenigen ''TIMESERIES_FEATURES'' auszukommen. Halte fest, mit welchen Einstellungen du dein bestes Resultat erzielen konntest.{{gem/plain?0=N4XyA#4b7eb6d8feb6e66f}} |
{{exorciser/jspg?javascript=%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%2F%2F%20Diese%20Trainings-%20und%20Updateparameter%20d%C3%BCrfen%20ge%C3%A4ndert%20werden.%0A%0Aconst%20TIMESERIES_FEATURES%20%3D%2012%3B%20%2F%2F%20ganzahliger%20Wert%20von%201%20bis%2024%0A%0Aconst%20LERNRATE%20%3D%200.001%3B%20%2F%2F%20Dezimalzahl%20%3E%200%0Aconst%20ANZAHL_HIDDEN_NEURONS%20%3D%2020%3B%20%2F%2F%20ganzzahliger%20Wert%20%3E%200%0Aconst%20ANZAHL_EPOCHEN%20%3D%20300%3B%20%2F%2F%20ganzzahliger%20Wert%20%3E%200%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20CONSTANTS%20AND%20GLOBAL%20VARIABLES%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%20data%0Aconst%20hourArray%20%3D%20%5B0%2C%201%2C%202%2C%203%2C%204%2C%205%2C%206%2C%207%2C%208%2C%209%2C%2010%2C%2011%2C%2012%2C%2013%2C%2014%2C%2015%2C%2016%2C%2017%2C%2018%2C%2019%2C%2020%2C%2021%2C%2022%2C%2023%5D%3B%0Aconst%20valueArray%20%3D%20%5B0.5%2C%200.44%2C%200.41%2C%200.43%2C%200.5%2C%200.62%2C%200.75%2C%200.87%2C%200.93%2C%200.93%2C%200.84%2C%200.69%2C%200.5%2C%200.31%2C%200.16%2C%200.07%2C%200.07%2C%200.13%2C%200.25%2C%200.38%2C%200.5%2C%200.57%2C%200.59%2C%200.56%5D%3B%0A%0A%2F%2F%20further%20constants%0Aconst%20PREDICTION_LIMIT%20%3D%20120%3B%0Aconst%20PERIODICITY%20%3D%20hourArray.length%3B%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20DATA%20HANDLING%20FUNCTIONS%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%0A%2F%2F%20create%20input%20data%0A%2F%2F%0Afunction%20createInputArray%28valueArray%29%20%7B%0A%09let%20inputArray%20%3D%20new%20Array%28valueArray.length%29.fill%280%29.map%28%28%29%20%3D%3E%20new%20Array%28TIMESERIES_FEATURES%29.fill%280%29%29%3B%20%2F%2F%20empty%20two-dimensional%20array%0A%09for%20%28v%20%3D%200%3B%20v%20%3C%20valueArray.length%3B%20v%2B%2B%29%20%7B%0A%09%09for%20%28f%20%3D%200%3B%20f%20%3C%20TIMESERIES_FEATURES%3B%20f%2B%2B%29%20%7B%0A%09%09%09inputArray%5Bv%5D%5Bf%5D%20%3D%20valueArray%5B%28v%20%2B%20f%29%20%25%20valueArray.length%5D%3B%0A%09%09%7D%0A%09%7D%0A%09return%20inputArray%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20create%20output%20data%0A%2F%2F%0Afunction%20createOutputArray%28valueArray%29%20%7B%0A%09let%20outputArray%20%3D%20new%20Array%28valueArray.length%29.fill%280%29%3B%0A%09for%20%28v%20%3D%200%3B%20v%20%3C%20valueArray.length%3B%20v%2B%2B%29%20%7B%0A%09%09outputArray%5Bv%5D%20%3D%20valueArray%5B%28v%20%2B%20TIMESERIES_FEATURES%29%20%25%20valueArray.length%5D%3B%0A%09%7D%0A%09return%20outputArray%3B%0A%7D%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20NEURAL%20NETWORK%20FUNCTIONS%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%0A%2F%2F%20build%20model%0A%2F%2F%0Afunction%20buildModel%28%29%20%7B%0A%09const%20model%20%3D%20tf.sequential%28%7B%0A%09%09layers%3A%20%5B%0A%09%09%09tf.layers.dense%28%7B%0A%09%09%09%09name%3A%20%27HiddenLayer1%27%2C%0A%09%09%09%09inputShape%3A%20%5BTIMESERIES_FEATURES%5D%2C%0A%09%09%09%09units%3A%20ANZAHL_HIDDEN_NEURONS%2C%0A%09%09%09%09activation%3A%20%27relu%27%0A%09%09%09%7D%29%2C%0A%09%09%09tf.layers.dense%28%7B%0A%09%09%09%09name%3A%20%27HiddenLayer2%27%2C%0A%09%09%09%09units%3A%20ANZAHL_HIDDEN_NEURONS%2C%0A%09%09%09%09activation%3A%20%27relu%27%0A%09%09%09%7D%29%2C%0A%09%09%09tf.layers.dense%28%7B%0A%09%09%09%09name%3A%20%27OutputLayer%27%2C%0A%09%09%09%09units%3A%201%2C%0A%09%09%09%09activation%3A%20%27linear%27%0A%09%09%09%7D%29%0A%09%09%5D%0A%09%7D%29%3B%0A%09%2F%2F%20neural%20network%20training%0A%09model.compile%28%7B%0A%09%09optimizer%3A%20tf.train.adam%28LERNRATE%29%2C%0A%09%09loss%3A%20tf.losses.meanSquaredError%0A%09%7D%29%3B%0A%09return%20model%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20train%20model%0A%2F%2F%0Aasync%20function%20trainModel%28model%2C%20trainInput%2C%20trainOutput%29%20%7B%0A%09let%20history%20%3D%20await%20model.fit%28%0A%09%09tf.tensor%28trainInput%29%2C%20tf.tensor%28trainOutput%29%2C%20%7B%0A%09%09%09epochs%3A%20ANZAHL_EPOCHEN%20%2B%201%2C%0A%09%09%09batchSize%3A%20trainInput.length%2C%0A%09%09%09shuffle%3A%20true%2C%0A%09%09%09callbacks%3A%20%5B%0A%09%09%09%09tfvis.show.fitCallbacks%28%7B%0A%09%09%09%09%09name%3A%20%27Trainingsfehler%27%2C%0A%09%09%09%09%09tab%3A%20%27Training%27%0A%09%09%09%09%7D%2C%20%5B%27loss%27%5D%2C%20%7B%0A%09%09%09%09%09height%3A%20200%2C%0A%09%09%09%09%09callbacks%3A%20%5B%27onEpochEnd%27%5D%2C%0A%09%09%09%09%09yLabel%3A%20%27MSE%27%0A%09%09%09%09%7D%29%2C%0A%09%09%09%5D%0A%09%09%7D%29%3B%0A%09return%20history%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20predict%20timeseries%20ahead%20and%20return%20object%20for%20tfvis%0A%2F%2F%0Aasync%20function%20predictTimeseries%28model%2C%20inputArray%29%20%7B%0A%09let%20mae%20%3D%20%5B%5D%3B%0A%09let%20predictedOutput%20%3D%20%5B%5D%3B%0A%09let%20inputSample%20%3D%20%5BinputArray%5BinputArray.length%20-%20TIMESERIES_FEATURES%5D.slice%28%29%5D%3B%0A%09let%20outputTensor%2C%20outputArray%3B%0A%09for%20%28t%20%3D%200%3B%20t%20%3C%20PREDICTION_LIMIT%3B%20t%2B%2B%29%20%7B%0A%09%09%2F%2F%20predict%20one%20timestep%0A%09%09outputTensor%20%3D%20await%20model.predict%28tf.tensor%28inputSample%29%29%3B%0A%09%09outputArray%20%3D%20await%20outputTensor.arraySync%28%29%3B%0A%09%09%2F%2F%20shift%20timeseries%20by%20one%20step%0A%09%09for%20%28f%20%3D%201%3B%20f%20%3C%20TIMESERIES_FEATURES%3B%20f%2B%2B%29%20%7B%0A%09%09%09inputSample%5B0%5D%5Bf%20-%201%5D%20%3D%20inputSample%5B0%5D%5Bf%5D%3B%0A%09%09%7D%0A%09%09%2F%2F%20add%20prediction%20as%20most%20recent%20time%20in%20timeseries%0A%09%09inputSample%5B0%5D%5BTIMESERIES_FEATURES%20-%201%5D%20%3D%20outputArray%5B0%5D%5B0%5D%3B%0A%09%09%2F%2F%20store%20predicted%20time%0A%09%09predictedOutput.push%28outputArray%5B0%5D%5B0%5D%29%3B%0A%09%09%2F%2F%20store%20initial%20mae%20values%0A%09%09mae.push%28Math.abs%28outputArray%5B0%5D%5B0%5D%20-%20valueArray%5Bt%20%25%20PERIODICITY%5D%29%29%3B%0A%09%7D%0A%09%2F%2F%20summ%20mae%20values%20for%20shifted%20predictions%0A%09for%20%28s%20%3D%201%3B%20s%20%3C%20PERIODICITY%3B%20s%20%3D%20s%20%2B%201%29%20%7B%0A%09%09inputSample%20%3D%20%5BinputArray%5B%28inputArray.length%20-%20TIMESERIES_FEATURES%20%2B%20s%29%20%25%20PERIODICITY%5D.slice%28%29%5D%3B%0A%09%09for%20%28t%20%3D%200%3B%20t%20%3C%20PREDICTION_LIMIT%3B%20t%2B%2B%29%20%7B%0A%09%09%09%2F%2F%20predict%20one%20timestep%0A%09%09%09outputTensor%20%3D%20await%20model.predict%28tf.tensor%28inputSample%29%29%3B%0A%09%09%09outputArray%20%3D%20await%20outputTensor.arraySync%28%29%3B%0A%09%09%09%2F%2F%20shift%20timeseries%20by%20one%20step%0A%09%09%09for%20%28f%20%3D%201%3B%20f%20%3C%20TIMESERIES_FEATURES%3B%20f%2B%2B%29%20%7B%0A%09%09%09%09inputSample%5B0%5D%5Bf%20-%201%5D%20%3D%20inputSample%5B0%5D%5Bf%5D%3B%0A%09%09%09%7D%0A%09%09%09%2F%2F%20add%20prediction%20as%20most%20recent%20time%20in%20timeseries%0A%09%09%09inputSample%5B0%5D%5BTIMESERIES_FEATURES%20-%201%5D%20%3D%20outputArray%5B0%5D%5B0%5D%3B%0A%09%09%09%2F%2F%20add%20mae%20values%0A%09%09%09mae%5Bt%5D%20%2B%3D%20Math.abs%28outputArray%5B0%5D%5B0%5D%20-%20valueArray%5B%28t%20%2B%20s%29%20%25%20PERIODICITY%5D%29%3B%0A%09%09%7D%0A%09%7D%0A%09%2F%2F%20calculate%20mae%20mean%20values%0A%09for%20%28t%20%3D%200%3B%20t%20%3C%20mae.length%3B%20t%2B%2B%29%20%7B%0A%09%09mae%5Bt%5D%20%3D%20mae%5Bt%5D%20%2F%20PERIODICITY%3B%0A%09%7D%0A%09return%20%5BpredictedOutput%2C%20mae%5D%3B%0A%7D%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20FUNCTIONS%20FOR%20VISUALISATION%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%0A%2F%2F%20draw%20timeseries%20prediction%0A%2F%2F%0Afunction%20drawTimeseries%28trueArray%2C%20predictedArray%2C%20mae%29%20%7B%0A%09%2F%2F%20observed%20values%0A%09let%20trueArrayObject%20%3D%20%5B%5D%3B%0A%09for%20%28t%20%3D%200%3B%20t%20%3C%20predictedArray.length%3B%20t%2B%2B%29%20%7B%0A%09%09trueArrayObject.push%28%7B%0A%09%09%09x%3A%20t%2C%0A%09%09%09y%3A%20trueArray%5Bt%20%25%20trueArray.length%5D%20%2a%2010%0A%09%09%7D%29%3B%0A%09%7D%0A%09%2F%2F%20predicted%20values%0A%09let%20predictedArrayObject%20%3D%20%5B%5D%3B%0A%09for%20%28t%20%3D%200%3B%20t%20%3C%20predictedArray.length%3B%20t%2B%2B%29%20%7B%0A%09%09predictedArrayObject.push%28%7B%0A%09%09%09x%3A%20t%2C%0A%09%09%09y%3A%20predictedArray%5Bt%5D%20%2a%2010%0A%09%09%7D%29%3B%0A%09%7D%0A%09%2F%2F%20prediction%20error%0A%09let%20meanPredictionError%20%3D%20%5B%5D%3B%0A%09for%20%28t%20%3D%200%3B%20t%20%3C%20predictedArray.length%3B%20t%2B%2B%29%20%7B%0A%09%09meanPredictionError.push%28%7B%0A%09%09%09x%3A%20t%2C%0A%09%09%09y%3A%20mae%5Bt%5D%20%2a%2010%0A%09%09%7D%29%3B%0A%09%7D%0A%0A%09%2F%2F%20draw%20everything%0A%09let%20data%2C%20look%3B%0A%09let%20surface%20%3D%20%7B%0A%09%09name%3A%20%22Zeitreihenvorhersage%22%2C%0A%09%09tab%3A%20%27Resultat%27%0A%09%7D%3B%0A%09data%20%3D%20%7B%0A%09%09values%3A%20%5BtrueArrayObject%2C%20predictedArrayObject%2C%20meanPredictionError%5D%2C%0A%09%09series%3A%20%5B%22beobachtet%22%2C%20%22vorhergesagt%22%2C%20%22MAE%22%5D%0A%09%7D%3B%0A%09look%20%3D%20%7B%0A%09%09xLabel%3A%20%27Prognosezeit%20%28Stunden%29%27%2C%0A%09%09yLabel%3A%20%27Wert%27%2C%0A%09%09zoomToFit%3A%20true%2C%0A%09%09seriesColors%3A%20%5B%22darkmagenta%22%2C%20%22coral%22%2C%20%22limegreen%22%5D%0A%09%7D%3B%0A%09tfvis.render.linechart%28surface%2C%20data%2C%20look%29%3B%0A%7D%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20MAIN%20PROGRAM%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%0A%2F%2F%20main%20function%0A%2F%2F%0Aasync%20function%20run%28%29%20%7B%0A%09%2F%2Fnoprotect%0A%0A%09%2F%2F%20check%20number%20of%20TIME_SERIES_FEATURES%0A%09if%20%28TIMESERIES_FEATURES%20%3E%20PERIODICITY%20%7C%7C%20TIMESERIES_FEATURES%20%3C%200%29%20%7B%0A%09%09console.log%28%22%E2%9A%A0%EF%B8%8F%20TIMESERIES_FEATURES%20muss%20zwischen%200%20und%20%22%20%2B%20PERIODICITY%20%2B%20%22%20liegen%21%22%29%3B%0A%09%09return%3B%0A%09%7D%0A%0A%09%2F%2F%20write%20preferences%20on%20console%0A%09console.log%28%22Zeitreihenvorhersage%22%29%3B%0A%09console.log%28%22Neuronales%20Netz%3A%20Anzahl%20Eingangsgr%C3%B6ssen%3A%20%22%20%2B%20TIMESERIES_FEATURES%20%2B%20%22%2C%20Anzahl%20Hidden%20Neuronen%3A%20%22%20%2B%20ANZAHL_HIDDEN_NEURONS%29%3B%0A%09console.log%28%22Training%3A%20Lernrate%3A%20%22%20%2B%20LERNRATE%20%2B%20%22%2C%20Epochen%3A%20%22%20%2B%20ANZAHL_EPOCHEN%29%3B%0A%0A%09%2F%2F%20create%20input%20and%20output%20data%0A%09let%20inputArray%20%3D%20createInputArray%28valueArray%29%3B%0A%09let%20outputArray%20%3D%20createOutputArray%28valueArray%29%3B%0A%0A%09%2F%2F%20build%20and%20show%20model%0A%09let%20model%20%3D%20buildModel%28%29%3B%0A%09tfvis.show.modelSummary%28%7B%0A%09%09name%3A%20%27Neuronales%20Netz%27%2C%0A%09%09tab%3A%20%27Modell%27%0A%09%7D%2C%20model%29%3B%0A%0A%09%2F%2F%20train%20model%0A%09let%20history%20%3D%20await%20trainModel%28model%2C%20inputArray%2C%20outputArray%29%3B%0A%09console.log%28%22Entg%C3%BCltiger%20Trainingsfehler%20%28MSE%29%3A%20%22%20%2B%20history.history.loss%5BANZAHL_EPOCHEN%5D%29%3B%0A%0A%09%2F%2F%20predict%20and%20show%20timeseries%0A%09let%20%5BpredictedTimeseries%2C%20mae%5D%20%3D%20await%20predictTimeseries%28model%2C%20inputArray%29%3B%0A%09drawTimeseries%28valueArray%2C%20predictedTimeseries%2C%20mae%29%3B%0A%0A%7D%0Adocument.addEventListener%28%27DOMContentLoaded%27%2C%20run%29%3B&css=undefined&html=%3Cscript%20src%3D%22https%3A%2F%2Fcdn.jsdelivr.net%2Fnpm%2Fp5%22%3E%3C%2Fscript%3E%0A%3Cscript%20src%3D%22https%3A%2F%2Fcdn.jsdelivr.net%2Fnpm%2F%40tensorflow%2Ftfjs%40latest%2Fdist%2Ftf.min.js%22%3E%3C%2Fscript%3E%0A%3Cscript%20src%3D%22https%3A%2F%2Fcdn.jsdelivr.net%2Fnpm%2F%40tensorflow%2Ftfjs-vis%22%3E%3C%2Fscript%3E&autorun=off&height=700px#ModernButNoTime}} | {{exorciser/jspg?javascript=%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%2F%2F%20Diese%20Trainings-%20und%20Updateparameter%20d%C3%BCrfen%20ge%C3%A4ndert%20werden.%0A%0Aconst%20TIMESERIES_FEATURES%20%3D%2012%3B%20%2F%2F%20ganzahliger%20Wert%20von%201%20bis%2024%0A%0Aconst%20LERNRATE%20%3D%200.001%3B%20%2F%2F%20Dezimalzahl%20%3E%200%0Aconst%20ANZAHL_HIDDEN_NEURONS%20%3D%2020%3B%20%2F%2F%20ganzzahliger%20Wert%20%3E%200%0Aconst%20ANZAHL_EPOCHEN%20%3D%20300%3B%20%2F%2F%20ganzzahliger%20Wert%20%3E%200%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20CONSTANTS%20AND%20GLOBAL%20VARIABLES%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%20data%0Aconst%20hourArray%20%3D%20%5B0%2C%201%2C%202%2C%203%2C%204%2C%205%2C%206%2C%207%2C%208%2C%209%2C%2010%2C%2011%2C%2012%2C%2013%2C%2014%2C%2015%2C%2016%2C%2017%2C%2018%2C%2019%2C%2020%2C%2021%2C%2022%2C%2023%5D%3B%0Aconst%20valueArray%20%3D%20%5B0.5%2C%200.44%2C%200.41%2C%200.43%2C%200.5%2C%200.62%2C%200.75%2C%200.87%2C%200.93%2C%200.93%2C%200.84%2C%200.69%2C%200.5%2C%200.31%2C%200.16%2C%200.07%2C%200.07%2C%200.13%2C%200.25%2C%200.38%2C%200.5%2C%200.57%2C%200.59%2C%200.56%5D%3B%0A%0A%2F%2F%20further%20constants%0Aconst%20PREDICTION_LIMIT%20%3D%20120%3B%0Aconst%20PERIODICITY%20%3D%20hourArray.length%3B%0Aconst%20GRAPH_WIDH%20%3D%20600%3B%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20DATA%20HANDLING%20FUNCTIONS%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%0A%2F%2F%20create%20input%20data%0A%2F%2F%0Afunction%20createInputArray%28valueArray%29%20%7B%0A%09let%20inputArray%20%3D%20new%20Array%28valueArray.length%29.fill%280%29.map%28%28%29%20%3D%3E%20new%20Array%28TIMESERIES_FEATURES%29.fill%280%29%29%3B%20%2F%2F%20empty%20two-dimensional%20array%0A%09for%20%28v%20%3D%200%3B%20v%20%3C%20valueArray.length%3B%20v%2B%2B%29%20%7B%0A%09%09for%20%28f%20%3D%200%3B%20f%20%3C%20TIMESERIES_FEATURES%3B%20f%2B%2B%29%20%7B%0A%09%09%09inputArray%5Bv%5D%5Bf%5D%20%3D%20valueArray%5B%28v%20%2B%20f%29%20%25%20valueArray.length%5D%3B%0A%09%09%7D%0A%09%7D%0A%09return%20inputArray%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20create%20output%20data%0A%2F%2F%0Afunction%20createOutputArray%28valueArray%29%20%7B%0A%09let%20outputArray%20%3D%20new%20Array%28valueArray.length%29.fill%280%29%3B%0A%09for%20%28v%20%3D%200%3B%20v%20%3C%20valueArray.length%3B%20v%2B%2B%29%20%7B%0A%09%09outputArray%5Bv%5D%20%3D%20valueArray%5B%28v%20%2B%20TIMESERIES_FEATURES%29%20%25%20valueArray.length%5D%3B%0A%09%7D%0A%09return%20outputArray%3B%0A%7D%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20NEURAL%20NETWORK%20FUNCTIONS%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%0A%2F%2F%20build%20model%0A%2F%2F%0Afunction%20buildModel%28%29%20%7B%0A%09const%20model%20%3D%20tf.sequential%28%7B%0A%09%09layers%3A%20%5B%0A%09%09%09tf.layers.dense%28%7B%0A%09%09%09%09name%3A%20%27HiddenLayer1%27%2C%0A%09%09%09%09inputShape%3A%20%5BTIMESERIES_FEATURES%5D%2C%0A%09%09%09%09units%3A%20ANZAHL_HIDDEN_NEURONS%2C%0A%09%09%09%09activation%3A%20%27relu%27%0A%09%09%09%7D%29%2C%0A%09%09%09tf.layers.dense%28%7B%0A%09%09%09%09name%3A%20%27HiddenLayer2%27%2C%0A%09%09%09%09units%3A%20ANZAHL_HIDDEN_NEURONS%2C%0A%09%09%09%09activation%3A%20%27relu%27%0A%09%09%09%7D%29%2C%0A%09%09%09tf.layers.dense%28%7B%0A%09%09%09%09name%3A%20%27OutputLayer%27%2C%0A%09%09%09%09units%3A%201%2C%0A%09%09%09%09activation%3A%20%27linear%27%0A%09%09%09%7D%29%0A%09%09%5D%0A%09%7D%29%3B%0A%09%2F%2F%20neural%20network%20training%0A%09model.compile%28%7B%0A%09%09optimizer%3A%20tf.train.adam%28LERNRATE%29%2C%0A%09%09loss%3A%20tf.losses.meanSquaredError%0A%09%7D%29%3B%0A%09return%20model%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20train%20model%0A%2F%2F%0Aasync%20function%20trainModel%28model%2C%20trainInput%2C%20trainOutput%29%20%7B%0A%09let%20history%20%3D%20await%20model.fit%28%0A%09%09tf.tensor%28trainInput%29%2C%20tf.tensor%28trainOutput%29%2C%20%7B%0A%09%09%09epochs%3A%20ANZAHL_EPOCHEN%20%2B%201%2C%0A%09%09%09batchSize%3A%20trainInput.length%2C%0A%09%09%09shuffle%3A%20true%2C%0A%09%09%09callbacks%3A%20%5B%0A%09%09%09%09tfvis.show.fitCallbacks%28%7B%0A%09%09%09%09%09name%3A%20%27Trainingsfehler%27%2C%0A%09%09%09%09%09tab%3A%20%27Training%27%2C%0A%09%09%09%09%09styles%3A%20%7B%0A%09%09%09%09%09%09width%3A%20GRAPH_WIDH%0A%09%09%09%09%09%7D%0A%09%09%09%09%7D%2C%20%5B%27loss%27%5D%2C%20%7B%0A%09%09%09%09%09height%3A%20200%2C%0A%09%09%09%09%09callbacks%3A%20%5B%27onEpochEnd%27%5D%2C%0A%09%09%09%09%09yLabel%3A%20%27MSE%27%0A%09%09%09%09%7D%29%2C%0A%09%09%09%5D%0A%09%09%7D%29%3B%0A%09return%20history%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20predict%20timeseries%20ahead%20and%20return%20object%20for%20tfvis%0A%2F%2F%0Aasync%20function%20predictTimeseries%28model%2C%20inputArray%29%20%7B%0A%09let%20mae%20%3D%20%5B%5D%3B%0A%09let%20predictedOutput%20%3D%20%5B%5D%3B%0A%09let%20inputSample%20%3D%20%5BinputArray%5BinputArray.length%20-%20TIMESERIES_FEATURES%5D.slice%28%29%5D%3B%0A%09let%20outputTensor%2C%20outputArray%3B%0A%09for%20%28t%20%3D%200%3B%20t%20%3C%20PREDICTION_LIMIT%3B%20t%2B%2B%29%20%7B%0A%09%09%2F%2F%20predict%20one%20timestep%0A%09%09outputTensor%20%3D%20await%20model.predict%28tf.tensor%28inputSample%29%29%3B%0A%09%09outputArray%20%3D%20await%20outputTensor.arraySync%28%29%3B%0A%09%09%2F%2F%20shift%20timeseries%20by%20one%20step%0A%09%09for%20%28f%20%3D%201%3B%20f%20%3C%20TIMESERIES_FEATURES%3B%20f%2B%2B%29%20%7B%0A%09%09%09inputSample%5B0%5D%5Bf%20-%201%5D%20%3D%20inputSample%5B0%5D%5Bf%5D%3B%0A%09%09%7D%0A%09%09%2F%2F%20add%20prediction%20as%20most%20recent%20time%20in%20timeseries%0A%09%09inputSample%5B0%5D%5BTIMESERIES_FEATURES%20-%201%5D%20%3D%20outputArray%5B0%5D%5B0%5D%3B%0A%09%09%2F%2F%20store%20predicted%20time%0A%09%09predictedOutput.push%28outputArray%5B0%5D%5B0%5D%29%3B%0A%09%09%2F%2F%20store%20initial%20mae%20values%0A%09%09mae.push%28Math.abs%28outputArray%5B0%5D%5B0%5D%20-%20valueArray%5Bt%20%25%20PERIODICITY%5D%29%29%3B%0A%09%7D%0A%09%2F%2F%20summ%20mae%20values%20for%20shifted%20predictions%0A%09for%20%28s%20%3D%201%3B%20s%20%3C%20PERIODICITY%3B%20s%20%3D%20s%20%2B%201%29%20%7B%0A%09%09inputSample%20%3D%20%5BinputArray%5B%28inputArray.length%20-%20TIMESERIES_FEATURES%20%2B%20s%29%20%25%20PERIODICITY%5D.slice%28%29%5D%3B%0A%09%09for%20%28t%20%3D%200%3B%20t%20%3C%20PREDICTION_LIMIT%3B%20t%2B%2B%29%20%7B%0A%09%09%09%2F%2F%20predict%20one%20timestep%0A%09%09%09outputTensor%20%3D%20await%20model.predict%28tf.tensor%28inputSample%29%29%3B%0A%09%09%09outputArray%20%3D%20await%20outputTensor.arraySync%28%29%3B%0A%09%09%09%2F%2F%20shift%20timeseries%20by%20one%20step%0A%09%09%09for%20%28f%20%3D%201%3B%20f%20%3C%20TIMESERIES_FEATURES%3B%20f%2B%2B%29%20%7B%0A%09%09%09%09inputSample%5B0%5D%5Bf%20-%201%5D%20%3D%20inputSample%5B0%5D%5Bf%5D%3B%0A%09%09%09%7D%0A%09%09%09%2F%2F%20add%20prediction%20as%20most%20recent%20time%20in%20timeseries%0A%09%09%09inputSample%5B0%5D%5BTIMESERIES_FEATURES%20-%201%5D%20%3D%20outputArray%5B0%5D%5B0%5D%3B%0A%09%09%09%2F%2F%20add%20mae%20values%0A%09%09%09mae%5Bt%5D%20%2B%3D%20Math.abs%28outputArray%5B0%5D%5B0%5D%20-%20valueArray%5B%28t%20%2B%20s%29%20%25%20PERIODICITY%5D%29%3B%0A%09%09%7D%0A%09%7D%0A%09%2F%2F%20calculate%20mae%20mean%20values%0A%09for%20%28t%20%3D%200%3B%20t%20%3C%20mae.length%3B%20t%2B%2B%29%20%7B%0A%09%09mae%5Bt%5D%20%3D%20mae%5Bt%5D%20%2F%20PERIODICITY%3B%0A%09%7D%0A%09return%20%5BpredictedOutput%2C%20mae%5D%3B%0A%7D%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20FUNCTIONS%20FOR%20VISUALISATION%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%0A%2F%2F%20draw%20timeseries%20prediction%0A%2F%2F%0Afunction%20drawTimeseries%28trueArray%2C%20predictedArray%2C%20mae%29%20%7B%0A%09%2F%2F%20observed%20values%0A%09let%20trueArrayObject%20%3D%20%5B%5D%3B%0A%09for%20%28t%20%3D%200%3B%20t%20%3C%20predictedArray.length%3B%20t%2B%2B%29%20%7B%0A%09%09trueArrayObject.push%28%7B%0A%09%09%09x%3A%20t%2C%0A%09%09%09y%3A%20trueArray%5Bt%20%25%20trueArray.length%5D%20%2a%2010%0A%09%09%7D%29%3B%0A%09%7D%0A%09%2F%2F%20predicted%20values%0A%09let%20predictedArrayObject%20%3D%20%5B%5D%3B%0A%09for%20%28t%20%3D%200%3B%20t%20%3C%20predictedArray.length%3B%20t%2B%2B%29%20%7B%0A%09%09predictedArrayObject.push%28%7B%0A%09%09%09x%3A%20t%2C%0A%09%09%09y%3A%20predictedArray%5Bt%5D%20%2a%2010%0A%09%09%7D%29%3B%0A%09%7D%0A%09%2F%2F%20prediction%20error%0A%09let%20meanPredictionError%20%3D%20%5B%5D%3B%0A%09for%20%28t%20%3D%200%3B%20t%20%3C%20predictedArray.length%3B%20t%2B%2B%29%20%7B%0A%09%09meanPredictionError.push%28%7B%0A%09%09%09x%3A%20t%2C%0A%09%09%09y%3A%20mae%5Bt%5D%20%2a%2010%0A%09%09%7D%29%3B%0A%09%7D%0A%0A%09%2F%2F%20draw%20everything%0A%09let%20data%2C%20look%3B%0A%09let%20surface%20%3D%20%7B%0A%09%09name%3A%20%22Zeitreihenvorhersage%22%2C%0A%09%09tab%3A%20%27Resultat%27%2C%0A%09%09styles%3A%20%7B%0A%09%09%09width%3A%20GRAPH_WIDH%0A%09%09%7D%0A%09%7D%3B%0A%09data%20%3D%20%7B%0A%09%09values%3A%20%5BtrueArrayObject%2C%20predictedArrayObject%2C%20meanPredictionError%5D%2C%0A%09%09series%3A%20%5B%22beobachtet%22%2C%20%22vorhergesagt%22%2C%20%22MAE%22%5D%0A%09%7D%3B%0A%09look%20%3D%20%7B%0A%09%09xLabel%3A%20%27Prognosezeit%20%28Stunden%29%27%2C%0A%09%09yLabel%3A%20%27Wert%27%2C%0A%09%09zoomToFit%3A%20true%2C%0A%09%09seriesColors%3A%20%5B%22darkmagenta%22%2C%20%22coral%22%2C%20%22limegreen%22%5D%0A%09%7D%3B%0A%09tfvis.render.linechart%28surface%2C%20data%2C%20look%29%3B%0A%7D%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20MAIN%20PROGRAM%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%0A%2F%2F%20main%20function%0A%2F%2F%0Aasync%20function%20run%28%29%20%7B%0A%09%2F%2Fnoprotect%0A%0A%09%2F%2F%20check%20number%20of%20TIME_SERIES_FEATURES%0A%09if%20%28TIMESERIES_FEATURES%20%3E%20PERIODICITY%20%7C%7C%20TIMESERIES_FEATURES%20%3C%200%29%20%7B%0A%09%09console.log%28%22%E2%9A%A0%EF%B8%8F%20TIMESERIES_FEATURES%20muss%20zwischen%200%20und%20%22%20%2B%20PERIODICITY%20%2B%20%22%20liegen%21%22%29%3B%0A%09%09return%3B%0A%09%7D%0A%0A%09%2F%2F%20write%20preferences%20on%20console%0A%09console.log%28%22Zeitreihenvorhersage%22%29%3B%0A%09console.log%28%22Neuronales%20Netz%3A%20Anzahl%20Eingangsgr%C3%B6ssen%3A%20%22%20%2B%20TIMESERIES_FEATURES%20%2B%20%22%2C%20Anzahl%20Hidden%20Neuronen%3A%20%22%20%2B%20ANZAHL_HIDDEN_NEURONS%29%3B%0A%09console.log%28%22Training%3A%20Lernrate%3A%20%22%20%2B%20LERNRATE%20%2B%20%22%2C%20Epochen%3A%20%22%20%2B%20ANZAHL_EPOCHEN%29%3B%0A%0A%09%2F%2F%20create%20input%20and%20output%20data%0A%09let%20inputArray%20%3D%20createInputArray%28valueArray%29%3B%0A%09let%20outputArray%20%3D%20createOutputArray%28valueArray%29%3B%0A%0A%09%2F%2F%20build%20and%20show%20model%0A%09let%20model%20%3D%20buildModel%28%29%3B%0A%09if%20%28%21tfvis.visor%28%29.isFullscreen%28%29%29%20%7B%0A%09%09tfvis.visor%28%29.toggleFullScreen%28%29%3B%0A%09%7D%0A%09tfvis.show.modelSummary%28%7B%0A%09%09name%3A%20%27Neuronales%20Netz%27%2C%0A%09%09tab%3A%20%27Modell%27%2C%0A%09%09styles%3A%20%7B%0A%09%09%09width%3A%20GRAPH_WIDH%0A%09%09%7D%0A%09%7D%2C%20model%29%3B%0A%0A%09%2F%2F%20train%20model%0A%09let%20history%20%3D%20await%20trainModel%28model%2C%20inputArray%2C%20outputArray%29%3B%0A%09console.log%28%22Entg%C3%BCltiger%20Trainingsfehler%20%28MSE%29%3A%20%22%20%2B%20history.history.loss%5BANZAHL_EPOCHEN%5D%29%3B%0A%0A%09%2F%2F%20predict%20and%20show%20timeseries%0A%09let%20%5BpredictedTimeseries%2C%20mae%5D%20%3D%20await%20predictTimeseries%28model%2C%20inputArray%29%3B%0A%09drawTimeseries%28valueArray%2C%20predictedTimeseries%2C%20mae%29%3B%0A%0A%7D%0Adocument.addEventListener%28%27DOMContentLoaded%27%2C%20run%29%3B&css=undefined&html=%3Cscript%20src%3D%22https%3A%2F%2Fapp.exorciser.ch%2Flib%2Fp5.js%22%3E%3C%2Fscript%3E%0A%3Cscript%20src%3D%22https%3A%2F%2Fcdn.jsdelivr.net%2Fnpm%2F%40tensorflow%2Ftfjs%40latest%2Fdist%2Ftf.min.js%22%3E%3C%2Fscript%3E%0A%3Cscript%20src%3D%22https%3A%2F%2Fcdn.jsdelivr.net%2Fnpm%2F%40tensorflow%2Ftfjs-vis%22%3E%3C%2Fscript%3E&autorun=off&height=700px#ModernButNoTime}} |
| |
=== Eigene Notizen === | === Eigene Notizen === |
{{gem/quill#310ef8c289347e7f}} | {{gem/quill#310ef8c289347e7f}} |