Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
p:ki:fische3 [2024/03/31 19:12] Ralf Kretzschmarp:ki:fische3 [2025/09/09 15:11] (aktuell) – [1. Was bisher geschah...] Ralf Kretzschmar
Zeile 1: Zeile 1:
-Navigation: [[:p:ki:fische1|🐟 Teil 1]] - [[:p:ki:fische2|🐟 Teil 2]] - [[:p:ki:fische3|🐟 Teil 3]] - [[:p:ki:fische4|🐟 Teil 4]] {{gem/mgr}}{{ gem/pageinfo}}+Navigation: [[:p:ki:fische1|🐟 Teil 1]] - [[:p:ki:fische2|🐟 Teil 2]] - [[:p:ki:fische3|🐟 Teil 3]] - [[:p:ki:fische4|🐟 Teil 4]] - [[:p:ki:fische_ki|🐟 Zusatzkapitel]] {{gem/mgr}}{{ gem/pageinfo}}
  
 ====== 🐟 Künstliche Intelligenz für echte Fische 3 ====== ====== 🐟 Künstliche Intelligenz für echte Fische 3 ======
Zeile 5: Zeile 5:
 🎯  In dieser Reihe erfährst du, wie eine künstliche Intelligenz automatisiert Daten auswertet und beurteilt. Dazu begibst du dich auf raue See. 🎯  In dieser Reihe erfährst du, wie eine künstliche Intelligenz automatisiert Daten auswertet und beurteilt. Dazu begibst du dich auf raue See.
  
 +\\ 
 ~~INTOC~~ ~~INTOC~~
  
Zeile 13: Zeile 14:
  
 🤔 Dabei ist die Frage aufgetaucht, was überhaupt "gut" bedeutet. 🤔 Dabei ist die Frage aufgetaucht, was überhaupt "gut" bedeutet.
 +
 +
 +<figure right>{{:p:pasted:decisionboundaries.png?347px}}<caption>Decision Boundaries((eigene Darstellung, [[https://creativecommons.org/publicdomain/zero/1.0/deed.de|CC0 1.0]])) </caption></figure>
  
 \\  \\ 
-[{{ :p:pasted:decisionboundaries.png?347px|Decision Boundaries((eigene Darstellung, [[https://creativecommons.org/publicdomain/zero/1.0/deed.de|CC0 1.0]])) }}] 
 ===== - Was heisst überhaupt "gut"? ====== ===== - Was heisst überhaupt "gut"? ======
  
   ; Decision Boundary   ; Decision Boundary
-  : Eine "Grenze" welche verschiedene Klassen voneinander abtrennt, wird als **Decision Boundary** bezeichnet. Bei zwei Messgrössen ist die Decision Boundary eine (gekrümmte) Linie. +  : Eine "Grenze"welche verschiedene Klassen voneinander abtrennt, wird als **Decision Boundary** bezeichnet. Bei zwei Messgrössen ist die Decision Boundary eine (gekrümmte) Linie. 
  
   ; Training Set und Validation Set   ; Training Set und Validation Set
Zeile 53: Zeile 56:
   - Starte das nachfolgende Programm mit ''▶Run''. Der erste Start kann etwas dauern. Wenn alles klappt, so "faltet" sich die Decision Boundary langsam in die Trainingsdaten hinein. Notiere dir am Ende den Anteil richtig erkannter Fische und den mse beides für Training und Validation. {{gem/plain?0=N4XyA#626808271a9b17be}}   - Starte das nachfolgende Programm mit ''▶Run''. Der erste Start kann etwas dauern. Wenn alles klappt, so "faltet" sich die Decision Boundary langsam in die Trainingsdaten hinein. Notiere dir am Ende den Anteil richtig erkannter Fische und den mse beides für Training und Validation. {{gem/plain?0=N4XyA#626808271a9b17be}}
   - Starte das Programm erneut und notiere dir wiederum den Anteil richtig erkannter Fische und den mse bezüglich Training und Validation. {{gem/plain?0=N4XyA#c8dcd0136aafd540}}   - Starte das Programm erneut und notiere dir wiederum den Anteil richtig erkannter Fische und den mse bezüglich Training und Validation. {{gem/plain?0=N4XyA#c8dcd0136aafd540}}
-  - Vergleiche die Zahlen in den beiden obigen Textfeldern. Sind diese identisch oder unterschiedlich? Lies danach:\\ ++diese Erklärung.|\\ \\ Am Anfang jedes Trainings wird zuerst eine zufällige Decision Boundary erzeugt. Ausgehend von dieser "schlechten" Decision Boundary versucht das neuronale Netz immer bessere Decision Boundaries zu zeichnen. Aufgrund der zufälligen Wahl der Decision Boundary verläuft jedes Training anders und führt zu einem anderen Resultat.\\ +++  - Vergleiche die Zahlen in den beiden obigen Textfeldern. Sind diese identisch oder unterschiedlich? Lies danach:\\ ++diese Erklärung.|\\ \\ Am Anfang jedes Trainings wird zuerst eine zufällige Decision Boundary erzeugt. Ausgehend von dieser "schlechten" Decision Boundary versucht das neuronale Netz immer bessere Decision Boundaries zu zeichnen. Aufgrund der zufälligen Wahl der Decision Boundary verläuft jedes Training anders und führt zu einem anderen Resultat.\\ \\ ++
   - Starte das Programm mehrfach. Dabei darfst du auch die folgenden Parameter am Anfang des Programmcodes ändern:   - Starte das Programm mehrfach. Dabei darfst du auch die folgenden Parameter am Anfang des Programmcodes ändern:
     * ''LERNRATE'': Legt fest, wie stark sich die Decision Boundary pro Epoche ändern darf. Ist der Wert zu hoch, springt die Decision Boundary hin und her, ist der Wert zu tief, brauchst du viel Geduld…     * ''LERNRATE'': Legt fest, wie stark sich die Decision Boundary pro Epoche ändern darf. Ist der Wert zu hoch, springt die Decision Boundary hin und her, ist der Wert zu tief, brauchst du viel Geduld…
Zeile 60: Zeile 63:
     * ''EPOCHEN_FUER_GRAFIK_UPDATE'': Legt fest, nach wie vielen Epochen die Grafik jeweils aktualisiert wird.     * ''EPOCHEN_FUER_GRAFIK_UPDATE'': Legt fest, nach wie vielen Epochen die Grafik jeweils aktualisiert wird.
   - Halte deine Rekorde für die Anteile richtig erkannter Fische und den mse für Training und Validation fest. {{gem/plain?0=N4XyA#1ec2fc568fb48b2d}}   - Halte deine Rekorde für die Anteile richtig erkannter Fische und den mse für Training und Validation fest. {{gem/plain?0=N4XyA#1ec2fc568fb48b2d}}
-{{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.%0Aconst%20LERNRATE%20%3D%201%3B%20%2F%2F%20Dezimalzahl%20%3E%200%0Aconst%20ANZAHL_HIDDEN_NEURONS%20%3D%203%3B%20%2F%2F%20ganzzahliger%20Wert%20%3E%200%0Aconst%20ANZAHL_EPOCHEN%20%3D%201000%3B%20%2F%2F%20ganzzahliger%20Wert%20%3E%200%0Aconst%20EPOCHEN_FUER_GRAFIK_UPDATE%20%3D%20100%3B%20%2F%2F%20ganzzahlig%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%20constants%0Aconst%20DATA_RANGE%20%3D%2010%3B%0Aconst%20DATA_WINDOW_SIZE%20%3D%20200%3B%0Aconst%20DATA_SCALE%20%3D%20Math.round%28DATA_WINDOW_SIZE%20%2F%20DATA_RANGE%29%3B%0Aconst%20NUM_DATA_PIXEL%20%3D%2050%3B%0Aconst%20PIXEL_SIZE%20%3D%20Math.round%28DATA_WINDOW_SIZE%20%2F%20NUM_DATA_PIXEL%29%3B%0A%0A%2F%2F%20training%20data%0Aconst%20trainInputArray%20%3D%20%5B%0A%09%5B2.5%2C%206.0%5D%2C%0A%09%5B3.5%2C%201.5%5D%2C%0A%09%5B3.5%2C%204.0%5D%2C%0A%09%5B4.0%2C%206.0%5D%2C%0A%09%5B4.0%2C%207.0%5D%2C%0A%09%5B4.5%2C%203.0%5D%2C%0A%09%5B5.0%2C%205.0%5D%2C%0A%09%5B5.5%2C%206.0%5D%2C%0A%09%5B6.5%2C%203.0%5D%2C%0A%09%5B7.0%2C%205.5%5D%2C%0A%09%5B7.5%2C%204.0%5D%2C%0A%09%5B8.5%2C%205.5%5D%2C%0A%09%5B1.5%2C%203.0%5D%2C%0A%09%5B1.5%2C%204.5%5D%2C%0A%09%5B1.5%2C%207.0%5D%2C%0A%09%5B2.0%2C%201.5%5D%2C%0A%09%5B3.0%2C%203.0%5D%2C%0A%09%5B3.0%2C%205.5%5D%2C%0A%09%5B3.0%2C%206.5%5D%2C%0A%09%5B4.0%2C%208.5%5D%2C%0A%09%5B4.5%2C%206.5%5D%2C%0A%09%5B6.5%2C%207.5%5D%2C%0A%09%5B8.0%2C%206.5%5D%2C%0A%09%5B8.0%2C%208.5%5D%0A%5D%3B%0Aconst%20trainOutputArray%20%3D%20%5B0%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%5D%3B%0Aconst%20trainInputMax%20%3D%20%5B9.0%2C%208.5%5D%3B%0Aconst%20trainInputMin%20%3D%20%5B1.5%2C%201.5%5D%3B%0A%0A%2F%2F%20validation%20data%0Aconst%20validInputArray%20%3D%20%5B%0A%09%5B2.5%2C%207.0%5D%2C%0A%09%5B3.5%2C%201.0%5D%2C%0A%09%5B3.5%2C%207.0%5D%2C%0A%09%5B4.0%2C%203.5%5D%2C%0A%09%5B4.5%2C%206.5%5D%2C%0A%09%5B4.5%2C%202.5%5D%2C%0A%09%5B4.5%2C%205.0%5D%2C%0A%09%5B6.0%2C%202.5%5D%2C%0A%09%5B6.0%2C%204.5%5D%2C%0A%09%5B6.5%2C%205.5%5D%2C%0A%09%5B7.5%2C%204.5%5D%2C%0A%09%5B8.5%2C%205.0%5D%2C%0A%09%5B1.5%2C%205.0%5D%2C%0A%09%5B1.5%2C%206.5%5D%2C%0A%09%5B2.0%2C%201.5%5D%2C%0A%09%5B2.5%2C%203.5%5D%2C%0A%09%5B2.5%2C%206.0%5D%2C%0A%09%5B3.5%2C%206.0%5D%2C%0A%09%5B4.0%2C%208.0%5D%2C%0A%09%5B4.0%2C%207.0%5D%2C%0A%09%5B5.5%2C%208.5%5D%2C%0A%09%5B6.5%2C%207.0%5D%2C%0A%09%5B7.5%2C%208.5%5D%2C%0A%09%5B8.5%2C%207.0%5D%0A%5D%3B%0Aconst%20validOutputArray%20%3D%20%5B0%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%5D%3B%0A%0A%2F%2F%20global%20variables%0Alet%20model%2C%20trainInput%2C%20trainOutput%2C%20validInput%2C%20validOutput%2C%20testInput%2C%20actualEpoch%2C%20actualLogs%2C%20trainBuffer%2C%20validBuffer%2C%20decisionBuffer%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%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%20generate%20data%20tensors%0A%2F%2F%0Afunction%20generateTensors%28%29%20%7B%0A%09let%20normalizedTrainInputArray%20%3D%20%5B%5D%3B%0A%09let%20normalizedValidInputArray%20%3D%20%5B%5D%3B%0A%09let%20normalizedTestInputArray%20%3D%20%5B%5D%3B%0A%0A%09%2F%2F%20normalize%20training%20and%20validation%20inputs%0A%09for%20%28i%20%3D%200%3B%20i%20%3C%20trainInputArray.length%3B%20i%2B%2B%29%20%7B%0A%09%09normalizedTrainInputArray.push%28%5B%28trainInputArray%5Bi%5D%5B0%5D%20-%20trainInputMin%5B0%5D%29%20%2F%20%28trainInputMax%5B0%5D%20-%20trainInputMin%5B0%5D%29%2C%20%28trainInputArray%5Bi%5D%5B1%5D%20-%20trainInputMin%5B1%5D%29%20%2F%20%28trainInputMax%5B1%5D%20-%20trainInputMin%5B1%5D%29%5D%29%3B%0A%09%09normalizedValidInputArray.push%28%5B%28validInputArray%5Bi%5D%5B0%5D%20-%20trainInputMin%5B0%5D%29%20%2F%20%28trainInputMax%5B0%5D%20-%20trainInputMin%5B0%5D%29%2C%20%28validInputArray%5Bi%5D%5B1%5D%20-%20trainInputMin%5B1%5D%29%20%2F%20%28trainInputMax%5B1%5D%20-%20trainInputMin%5B1%5D%29%5D%29%3B%0A%09%7D%0A%0A%09%2F%2F%20generate%20training%20input%20and%20output%20tensors%0A%09trainInput%20%3D%20tf.tensor2d%28normalizedTrainInputArray%2C%20%5BnormalizedTrainInputArray.length%2C%202%5D%29%3B%0A%09trainOutput%20%3D%20tf.tensor2d%28trainOutputArray%2C%20%5BtrainOutputArray.length%2C%201%5D%29%3B%0A%09%2F%2F%20let%20trainOutput%20%3D%20tf.oneHot%28tf.tensor1d%28trainOutputArray%29.toInt%28%29%2C%202%29%3B%0A%09%2F%2F%20trainInput.print%28%29%3B%20%2F%2F%20Print%20Tensor%0A%0A%09%2F%2F%20generate%20validation%20input%20and%20output%20tensors%0A%09validInput%20%3D%20tf.tensor2d%28normalizedValidInputArray%2C%20%5BnormalizedValidInputArray.length%2C%202%5D%29%3B%0A%09validOutput%20%3D%20tf.tensor2d%28validOutputArray%2C%20%5BvalidOutputArray.length%2C%201%5D%29%3B%0A%09%2F%2F%20let%20validOutput%20%3D%20tf.oneHot%28tf.tensor1d%28validOutputArray%29.toInt%28%29%2C%202%29%3B%0A%0A%09%2F%2F%20calculate%20normalized%20testing%20inputs%20for%20visualisation%0A%09for%20%28i%20%3D%200%3B%20i%20%3C%20NUM_DATA_PIXEL%20%2B%201%3B%20i%20%3D%20i%20%2B%201%29%20%7B%0A%09%09for%20%28j%20%3D%200%3B%20j%20%3C%20NUM_DATA_PIXEL%20%2B%201%3B%20j%20%3D%20j%20%2B%201%29%20%7B%0A%09%09%09normalizedTestInputArray.push%28%5B%28i%20%2F%20NUM_DATA_PIXEL%20%2a%20DATA_RANGE%20-%20trainInputMin%5B0%5D%29%20%2F%20%28trainInputMax%5B0%5D%20-%20trainInputMin%5B0%5D%29%2C%20%28j%20%2F%20NUM_DATA_PIXEL%20%2a%20DATA_RANGE%20-%20trainInputMin%5B1%5D%29%20%2F%20%28trainInputMax%5B1%5D%20-%20trainInputMin%5B1%5D%29%5D%29%3B%0A%09%09%7D%0A%09%7D%0A%0A%09%2F%2F%20generate%20testing%20input%20tensor%20for%20visualisation%0A%09testInput%20%3D%20tf.tensor2d%28normalizedTestInputArray%2C%20%5BnormalizedTestInputArray.length%2C%202%5D%29%3B%0A%09%2F%2F%09testInput.print%28%29%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20build%20neural%20network%20model%20and%20define%20training%0A%2F%2F%0Afunction%20compileModel%28%29%20%7B%0A%09%2F%2F%20neural%20network%20structure%0A%09model%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%5B2%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%27sigmoid%27%0A%09%09%09%7D%29%0A%09%09%5D%0A%09%7D%29%3B%0A%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%2C%0A%09%09metrics%3A%20%5B%27mse%27%5D%2C%0A%09%7D%29%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20train%20neural%20network%0A%2F%2F%0Aasync%20function%20trainModel%28%29%20%7B%0A%09await%20model.fit%28%0A%09%09trainInput%2C%20trainOutput%2C%20%7B%0A%09%09%09epochs%3A%20ANZAHL_EPOCHEN%2C%0A%09%09%09shuffle%3A%20true%2C%0A%09%09%09callbacks%3A%20%5B%7B%0A%09%09%09%09onEpochEnd%3A%20async%28epoch%2C%20logs%29%20%3D%3E%20%7B%0A%09%09%09%09%09%2F%2F%20remember%20epoch%20number%20if%20interrupted%0A%09%09%09%09%09actualEpoch%20%3D%20epoch%20%2B%201%3B%0A%09%09%09%09%09actualLogs%20%3D%20logs%3B%0A%09%09%09%09%09%2F%2F%20initiate%20graphic%20update%0A%09%09%09%09%09if%20%28%28%28actualEpoch%29%20%25%20EPOCHEN_FUER_GRAFIK_UPDATE%20%3D%3D%3D%200%29%20%7C%7C%20%28epoch%20%3D%3D%3D%200%29%29%20%7B%0A%09%09%09%09%09%09drawPrediction%28actualEpoch%2C%20logs.loss%29%3B%0A%09%09%09%09%09%7D%0A%09%09%09%09%7D%0A%09%09%09%7D%2C%20%5D%0A%09%09%7D%0A%09%29%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20calculate%20mean%20squared%20error%0A%2F%2F%0Afunction%20calculateMSE%28predictedOutput%2C%20trueOutput%29%20%7B%0A%09let%20mse%20%3D%200.0%3B%0A%09for%20%28i%20%3D%200%3B%20i%20%3C%20predictedOutput.length%3B%20i%2B%2B%29%20%7B%0A%09%09mse%20%3D%20mse%20%2B%20%28predictedOutput%5Bi%5D%20-%20trueOutput%5Bi%5D%29%20%2a%2a%202%3B%0A%09%7D%0A%09return%20mse%20%2F%20predictedOutput.length%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20calculate%20percentage%20of%20correct%20classifications%0A%2F%2F%0Afunction%20calculatePercentageCorrect%28predictedOutput%2C%20trueOutput%29%20%7B%0A%09let%20correct%20%3D%200%3B%0A%09for%20%28i%20%3D%200%3B%20i%20%3C%20predictedOutput.length%3B%20i%2B%2B%29%20%7B%0A%09%09if%20%28%28trueOutput%5Bi%5D%20%3D%3D%3D%201%20%26%26%20predictedOutput%5Bi%5D%20%3E%3D%200.5%29%20%7C%7C%20%28trueOutput%5Bi%5D%20%3D%3D%3D%200%20%26%26%20predictedOutput%5Bi%5D%20%3C%200.5%29%29%20%7B%0A%09%09%09correct%20%3D%20correct%20%2B%201%3B%0A%09%09%7D%0A%09%7D%0A%09return%20%7B%0A%09%09accuracy%3A%20Math.round%28correct%20%2a%20100%20%2F%20predictedOutput.length%29%2C%0A%09%09wrong%3A%20predictedOutput.length%20-%20correct%0A%09%7D%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%20decision%20boundary%20and%20network%20output%0A%2F%2F%0Afunction%20drawPrediction%28epoch%2C%20mseTrain%29%20%7B%0A%09%2F%2F%20make%20predictions%20with%20neural%20network%0A%09let%20training%20%3D%20model.predict%28trainInput%29.arraySync%28%29%3B%0A%09let%20validation%20%3D%20model.predict%28validInput%29.arraySync%28%29%3B%0A%09let%20prediction%20%3D%20model.predict%28testInput%29.arraySync%28%29%3B%0A%0A%09%2F%2F%20calculate%20mse%20and%20percentages%20of%20correct%20classifications%0A%09let%20mseValid%20%3D%20calculateMSE%28validation%2C%20validOutputArray%29%3B%0A%09let%20trainCorrect%20%3D%20calculatePercentageCorrect%28training%2C%20trainOutputArray%29%3B%0A%09let%20validCorrect%20%3D%20calculatePercentageCorrect%28validation%2C%20validOutputArray%29%3B%0A%0A%09%2F%2F%20draw%20decision%20boundary%0A%09decisionBuffer.noStroke%28%29%3B%0A%09let%20element%20%3D%200%3B%0A%09for%20%28i%20%3D%200%3B%20i%20%3C%20NUM_DATA_PIXEL%20%2B%201%3B%20i%20%3D%20i%20%2B%201%29%20%7B%0A%09%09for%20%28j%20%3D%200%3B%20j%20%3C%20NUM_DATA_PIXEL%20%2B%201%3B%20j%20%3D%20j%20%2B%201%29%20%7B%0A%09%09%09%2F%2F%20transform%20neural%20network%20output%20into%20a%20color%0A%09%09%09if%20%28prediction%5Belement%5D%5B0%5D%20%3E%200.5%29%20%7B%0A%09%09%09%09decisionBuffer.fill%28Math.round%28%281%20-%20prediction%5Belement%5D%5B0%5D%29%20%2a%20100%20%2B%20200.5%29%2C%20255%2C%20Math.round%28%281%20-%20prediction%5Belement%5D%5B0%5D%29%20%2a%20100%20%2B%20200.5%29%29%3B%0A%09%09%09%7D%20else%20%7B%0A%09%09%09%09decisionBuffer.fill%28Math.round%28prediction%5Belement%5D%5B0%5D%20%2a%20100%20%2B%20200.5%29%2C%20Math.round%28prediction%5Belement%5D%5B0%5D%20%2a%20100%20%2B%20200.5%29%2C%20255%29%3B%0A%09%09%09%7D%0A%09%09%09%2F%2F%20check%20for%20decision%20boundary%20and%20alter%20color%0A%09%09%09if%20%28%28element%20%25%20%28NUM_DATA_PIXEL%20%2B%201%29%29%20%21%3D%3D%200%20%26%26%20%28%28prediction%5Belement%5D%5B0%5D%20%3E%200.5%20%26%26%20prediction%5Belement%20-%201%5D%5B0%5D%20%3C%3D%200.5%29%20%7C%7C%20%28prediction%5Belement%5D%5B0%5D%20%3C%3D%200.5%20%26%26%20prediction%5Belement%20-%201%5D%5B0%5D%20%3E%200.5%29%29%29%20%7B%0A%09%09%09%09decisionBuffer.fill%28%27red%27%29%3B%0A%09%09%09%7D%0A%09%09%09if%20%28element%20%3E%3D%20NUM_DATA_PIXEL%20%2B%201%20%26%26%20%28%28prediction%5Belement%5D%5B0%5D%20%3E%200.5%20%26%26%20prediction%5Belement%20-%20%28NUM_DATA_PIXEL%20%2B%201%29%5D%5B0%5D%20%3C%3D%200.5%29%20%7C%7C%20%28prediction%5Belement%5D%5B0%5D%20%3C%3D%200.5%20%26%26%20prediction%5Belement%20-%20%28NUM_DATA_PIXEL%20%2B%201%29%5D%5B0%5D%20%3E%200.5%29%29%29%20%7B%0A%09%09%09%09decisionBuffer.fill%28%27red%27%29%3B%0A%09%09%09%7D%0A%09%09%09decisionBuffer.rect%28DATA_SCALE%20%2a%20i%20%2F%20NUM_DATA_PIXEL%20%2a%20DATA_RANGE%20-%20PIXEL_SIZE%20%2F%202%2C%20DATA_SCALE%20%2a%20%2810%20-%20j%20%2F%20NUM_DATA_PIXEL%20%2a%20DATA_RANGE%29%20-%20PIXEL_SIZE%20%2F%202%2C%20PIXEL_SIZE%2C%20PIXEL_SIZE%29%3B%0A%09%09%09element%20%3D%20element%20%2B%201%3B%0A%09%09%7D%0A%09%7D%0A%09image%28decisionBuffer%2C%200%2C%200%29%3B%0A%09image%28decisionBuffer%2C%20DATA_WINDOW_SIZE%2C%200%29%3B%0A%0A%09%2F%2F%20draw%20training%20and%20validation%20samples%0A%09image%28trainBuffer%2C%200%2C%200%29%3B%0A%09image%28validBuffer%2C%20DATA_WINDOW_SIZE%2C%200%29%3B%0A%0A%09%2F%2F%20add%20labels%20to%20training%20and%20validation%20feature%20space%20%2F%2F%20wrong%0A%09noStroke%28%29%3B%0A%09text%28%22Training%3A%20%22%20%2B%20trainCorrect.accuracy%20%2B%20%22%25%20%E2%9C%94%EF%B8%8F%20%28%22%20%2B%20trainCorrect.wrong%20%2B%20%22%20falsch%29%22%2C%202%20%2a%20PIXEL_SIZE%2C%204%20%2a%20PIXEL_SIZE%29%3B%0A%09text%28%22Validation%3A%20%22%20%2B%20validCorrect.accuracy%20%2B%20%22%25%20%E2%9C%94%EF%B8%8F%28%22%20%2B%20validCorrect.wrong%20%2B%20%22%20falsch%29%22%2C%20DATA_WINDOW_SIZE%20%2B%202%20%2a%20PIXEL_SIZE%2C%204%20%2a%20PIXEL_SIZE%29%3B%0A%0A%09%2F%2F%20print%20training%20and%20validation%20results%20to%20console%0A%09console.log%28%22%7C%7C%20%22%20%2B%20epoch.toString%28%29.padStart%286%2C%20%22%20%22%29%20%2B%20%22%20%7C%7C%20%22%20%2B%20trainCorrect.accuracy.toString%28%29.padStart%286%2C%20%22%20%22%29%20%2B%20%22%25%20%7C%20%22%20%2B%20mseTrain.toFixed%286%29%20%2B%20%22%20%7C%7C%20%22%20%2B%20validCorrect.accuracy.toString%28%29.padStart%286%2C%20%22%20%22%29%20%2B%20%22%25%20%7C%20%22%20%2B%20mseValid.toFixed%286%29%20%2B%20%22%20%7C%7C%22%29%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20draw%20data%20in%20graphic%20buffer%0A%2F%2F%0Afunction%20drawDataInBuffer%28inputData%2C%20outputData%2C%20buffer%29%20%7B%0A%09buffer.noFill%28%29%3B%0A%09buffer.strokeWeight%28PIXEL_SIZE%20%2F%202%29%3B%0A%09buffer.rect%280%2C%200%2C%20DATA_WINDOW_SIZE%2C%20DATA_WINDOW_SIZE%29%3B%0A%09for%20%28i%20%3D%200%3B%20i%20%3C%20inputData.length%3B%20i%2B%2B%29%20%7B%0A%09%09if%20%28outputData%5Bi%5D%20%3D%3D%3D%201%29%20%7B%0A%09%09%09%2F%2F%20green%20circle%20for%20output%20label%20%3D%3D%3D%201%0A%09%09%09buffer.stroke%28%22darkgreen%22%29%3B%0A%09%09%09buffer.circle%28DATA_SCALE%20%2a%20inputData%5Bi%5D%5B0%5D%2C%20DATA_SCALE%20%2a%20%2810%20-%20inputData%5Bi%5D%5B1%5D%29%2C%202%20%2a%20PIXEL_SIZE%29%3B%0A%09%09%7D%20else%20%7B%0A%09%09%09%2F%2F%20blue%20cross%20for%20output%20label%20%3D%3D%3D%200%0A%09%09%09buffer.stroke%28%22blue%22%29%3B%0A%09%09%09buffer.line%28DATA_SCALE%20%2a%20inputData%5Bi%5D%5B0%5D%20%2B%20PIXEL_SIZE%2C%20DATA_SCALE%20%2a%20%2810%20-%20inputData%5Bi%5D%5B1%5D%29%20%2B%20PIXEL_SIZE%2C%20DATA_SCALE%20%2a%20inputData%5Bi%5D%5B0%5D%20-%20PIXEL_SIZE%2C%20DATA_SCALE%20%2a%20%2810%20-%20inputData%5Bi%5D%5B1%5D%29%20-%20PIXEL_SIZE%29%3B%0A%09%09%09buffer.line%28DATA_SCALE%20%2a%20inputData%5Bi%5D%5B0%5D%20%2B%20PIXEL_SIZE%2C%20DATA_SCALE%20%2a%20%2810%20-%20inputData%5Bi%5D%5B1%5D%29%20-%20PIXEL_SIZE%2C%20DATA_SCALE%20%2a%20inputData%5Bi%5D%5B0%5D%20-%20PIXEL_SIZE%2C%20DATA_SCALE%20%2a%20%2810%20-%20inputData%5Bi%5D%5B1%5D%29%20%2B%20PIXEL_SIZE%29%3B%0A%09%09%7D%0A%09%7D%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%20p5.js%20setup%28%29%0A%2F%2F%0Aasync%20function%20setup%28%29%20%7B%20%2F%2Fnoprotect%20%28for%20large%20arrays%29%0A%09%2F%2F%20initiate%20console%20output%0A%09console.log%28%22%7C%7C%20%20%20%20%20%20%20%20%7C%7C%20%20%20%20%20%20Training%20%20%20%20%20%20%7C%7C%20%20%20%20%20Validation%20%20%20%20%20%7C%7C%22%29%3B%0A%09console.log%28%22%7C%7C%20Epoche%20%7C%7C%20korrekt%20%7C%20%20%20%20%20%20mse%20%7C%7C%20korrekt%20%7C%20%20%20%20%20%20mse%20%7C%7C%22%29%3B%0A%0A%09%2F%2F%20create%20canvas%0A%09createCanvas%282%20%2a%20DATA_WINDOW_SIZE%2C%20DATA_WINDOW_SIZE%29%3B%0A%09textSize%28PIXEL_SIZE%20%2a%203%29%3B%0A%0A%09%2F%2F%20create%20all%20grafic%20buffers%0A%09trainBuffer%20%3D%20createGraphics%28DATA_WINDOW_SIZE%2C%20DATA_WINDOW_SIZE%29%3B%0A%09validBuffer%20%3D%20createGraphics%28DATA_WINDOW_SIZE%2C%20DATA_WINDOW_SIZE%29%3B%0A%09decisionBuffer%20%3D%20createGraphics%28DATA_WINDOW_SIZE%2C%20DATA_WINDOW_SIZE%29%3B%0A%0A%09%2F%2F%20draw%20initial%20training%20and%20validation%20buffer%0A%09drawDataInBuffer%28trainInputArray%2C%20trainOutputArray%2C%20trainBuffer%29%3B%0A%09drawDataInBuffer%28validInputArray%2C%20validOutputArray%2C%20validBuffer%29%3B%0A%09image%28trainBuffer%2C%200%2C%200%29%3B%0A%09image%28validBuffer%2C%20DATA_WINDOW_SIZE%2C%200%29%3B%0A%0A%09%2F%2F%20data%20preprocessing%0A%09generateTensors%28%29%3B%0A%0A%09%2F%2F%20define%20model%20and%20training%0A%09compileModel%28%29%3B%0A%0A%09%2F%2F%20train%20and%20visualise%20neural%20network%0A%09await%20trainModel%28%29%3B%0A%0A%09%2F%2F%20end%20of%20training%0A%09console.log%28%22Das%20Training%20ist%20beendet%20%3A-%29%22%29%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20p5.js%20keyPressed%28%29%20ESC%20%3D%20emergency%20stop%0A%2F%2F%0Afunction%20keyPressed%28%29%20%7B%0A%09if%20%28keyCode%20%3D%3D%3D%2027%29%20%7B%20%2F%2F%20ESC%20key%0A%09%09%2F%2F%20initiate%20stop%20of%20training%20after%20next%20epoch%0A%09%09model.stopTraining%20%3D%20true%3B%0A%09%09%2F%2F%20response%20to%20user%0A%09%09console.log%28%22Training%20wurde%20Abgebrochen%21%20Finales%20Resultat%3A%22%29%3B%0A%09%09%2F%2F%20draw%20final%20Prediction%0A%09%09drawPrediction%28actualEpoch%2C%20actualLogs.loss%29%3B%0A%09%7D%0A%7D&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&autorun=off&height=500px#Klassifikation}}+{{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.%0Aconst%20LERNRATE%20%3D%201%3B%20%2F%2F%20Dezimalzahl%20%3E%200%0Aconst%20ANZAHL_HIDDEN_NEURONS%20%3D%203%3B%20%2F%2F%20ganzzahliger%20Wert%20%3E%200%0Aconst%20ANZAHL_EPOCHEN%20%3D%201000%3B%20%2F%2F%20ganzzahliger%20Wert%20%3E%200%0Aconst%20EPOCHEN_FUER_GRAFIK_UPDATE%20%3D%20100%3B%20%2F%2F%20ganzzahlig%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%20constants%0Aconst%20DATA_RANGE%20%3D%2010%3B%0Aconst%20DATA_WINDOW_SIZE%20%3D%20200%3B%0Aconst%20DATA_SCALE%20%3D%20Math.round%28DATA_WINDOW_SIZE%20%2F%20DATA_RANGE%29%3B%0Aconst%20NUM_DATA_PIXEL%20%3D%2050%3B%0Aconst%20PIXEL_SIZE%20%3D%20Math.round%28DATA_WINDOW_SIZE%20%2F%20NUM_DATA_PIXEL%29%3B%0A%0A%2F%2F%20training%20data%0Aconst%20trainInputArray%20%3D%20%5B%0A%09%5B2.5%2C%206.0%5D%2C%0A%09%5B3.5%2C%201.5%5D%2C%0A%09%5B3.5%2C%204.0%5D%2C%0A%09%5B4.0%2C%206.0%5D%2C%0A%09%5B4.0%2C%207.0%5D%2C%0A%09%5B4.5%2C%203.0%5D%2C%0A%09%5B5.0%2C%205.0%5D%2C%0A%09%5B5.5%2C%206.0%5D%2C%0A%09%5B6.5%2C%203.0%5D%2C%0A%09%5B7.0%2C%205.5%5D%2C%0A%09%5B7.5%2C%204.0%5D%2C%0A%09%5B8.5%2C%205.5%5D%2C%0A%09%5B1.5%2C%203.0%5D%2C%0A%09%5B1.5%2C%204.5%5D%2C%0A%09%5B1.5%2C%207.0%5D%2C%0A%09%5B2.0%2C%201.5%5D%2C%0A%09%5B3.0%2C%203.0%5D%2C%0A%09%5B3.0%2C%205.5%5D%2C%0A%09%5B3.0%2C%206.5%5D%2C%0A%09%5B4.0%2C%208.5%5D%2C%0A%09%5B4.5%2C%206.5%5D%2C%0A%09%5B6.5%2C%207.5%5D%2C%0A%09%5B8.0%2C%206.5%5D%2C%0A%09%5B8.0%2C%208.5%5D%0A%5D%3B%0Aconst%20trainOutputArray%20%3D%20%5B0%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%5D%3B%0Aconst%20trainInputMax%20%3D%20%5B9.0%2C%208.5%5D%3B%0Aconst%20trainInputMin%20%3D%20%5B1.5%2C%201.5%5D%3B%0A%0A%2F%2F%20validation%20data%0Aconst%20validInputArray%20%3D%20%5B%0A%09%5B2.5%2C%207.0%5D%2C%0A%09%5B3.5%2C%201.0%5D%2C%0A%09%5B3.5%2C%207.0%5D%2C%0A%09%5B4.0%2C%203.5%5D%2C%0A%09%5B4.5%2C%206.5%5D%2C%0A%09%5B4.5%2C%202.5%5D%2C%0A%09%5B4.5%2C%205.0%5D%2C%0A%09%5B6.0%2C%202.5%5D%2C%0A%09%5B6.0%2C%204.5%5D%2C%0A%09%5B6.5%2C%205.5%5D%2C%0A%09%5B7.5%2C%204.5%5D%2C%0A%09%5B8.5%2C%205.0%5D%2C%0A%09%5B1.5%2C%205.0%5D%2C%0A%09%5B1.5%2C%206.5%5D%2C%0A%09%5B2.0%2C%201.5%5D%2C%0A%09%5B2.5%2C%203.5%5D%2C%0A%09%5B2.5%2C%206.0%5D%2C%0A%09%5B3.5%2C%206.0%5D%2C%0A%09%5B4.0%2C%208.0%5D%2C%0A%09%5B4.0%2C%207.0%5D%2C%0A%09%5B5.5%2C%208.5%5D%2C%0A%09%5B6.5%2C%207.0%5D%2C%0A%09%5B7.5%2C%208.5%5D%2C%0A%09%5B8.5%2C%207.0%5D%0A%5D%3B%0Aconst%20validOutputArray%20%3D%20%5B0%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%5D%3B%0A%0A%2F%2F%20global%20variables%0Alet%20model%2C%20trainInput%2C%20trainOutput%2C%20validInput%2C%20validOutput%2C%20testInput%2C%20actualEpoch%2C%20actualLogs%2C%20trainBuffer%2C%20validBuffer%2C%20decisionBuffer%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%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%20generate%20data%20tensors%0A%2F%2F%0Afunction%20generateTensors%28%29%20%7B%0A%09let%20normalizedTrainInputArray%20%3D%20%5B%5D%3B%0A%09let%20normalizedValidInputArray%20%3D%20%5B%5D%3B%0A%09let%20normalizedTestInputArray%20%3D%20%5B%5D%3B%0A%0A%09%2F%2F%20normalize%20training%20and%20validation%20inputs%0A%09for%20%28i%20%3D%200%3B%20i%20%3C%20trainInputArray.length%3B%20i%2B%2B%29%20%7B%0A%09%09normalizedTrainInputArray.push%28%5B%28trainInputArray%5Bi%5D%5B0%5D%20-%20trainInputMin%5B0%5D%29%20%2F%20%28trainInputMax%5B0%5D%20-%20trainInputMin%5B0%5D%29%2C%20%28trainInputArray%5Bi%5D%5B1%5D%20-%20trainInputMin%5B1%5D%29%20%2F%20%28trainInputMax%5B1%5D%20-%20trainInputMin%5B1%5D%29%5D%29%3B%0A%09%09normalizedValidInputArray.push%28%5B%28validInputArray%5Bi%5D%5B0%5D%20-%20trainInputMin%5B0%5D%29%20%2F%20%28trainInputMax%5B0%5D%20-%20trainInputMin%5B0%5D%29%2C%20%28validInputArray%5Bi%5D%5B1%5D%20-%20trainInputMin%5B1%5D%29%20%2F%20%28trainInputMax%5B1%5D%20-%20trainInputMin%5B1%5D%29%5D%29%3B%0A%09%7D%0A%0A%09%2F%2F%20generate%20training%20input%20and%20output%20tensors%0A%09trainInput%20%3D%20tf.tensor2d%28normalizedTrainInputArray%2C%20%5BnormalizedTrainInputArray.length%2C%202%5D%29%3B%0A%09trainOutput%20%3D%20tf.tensor2d%28trainOutputArray%2C%20%5BtrainOutputArray.length%2C%201%5D%29%3B%0A%09%2F%2F%20let%20trainOutput%20%3D%20tf.oneHot%28tf.tensor1d%28trainOutputArray%29.toInt%28%29%2C%202%29%3B%0A%09%2F%2F%20trainInput.print%28%29%3B%20%2F%2F%20Print%20Tensor%0A%0A%09%2F%2F%20generate%20validation%20input%20and%20output%20tensors%0A%09validInput%20%3D%20tf.tensor2d%28normalizedValidInputArray%2C%20%5BnormalizedValidInputArray.length%2C%202%5D%29%3B%0A%09validOutput%20%3D%20tf.tensor2d%28validOutputArray%2C%20%5BvalidOutputArray.length%2C%201%5D%29%3B%0A%09%2F%2F%20let%20validOutput%20%3D%20tf.oneHot%28tf.tensor1d%28validOutputArray%29.toInt%28%29%2C%202%29%3B%0A%0A%09%2F%2F%20calculate%20normalized%20testing%20inputs%20for%20visualisation%0A%09for%20%28i%20%3D%200%3B%20i%20%3C%20NUM_DATA_PIXEL%20%2B%201%3B%20i%20%3D%20i%20%2B%201%29%20%7B%0A%09%09for%20%28j%20%3D%200%3B%20j%20%3C%20NUM_DATA_PIXEL%20%2B%201%3B%20j%20%3D%20j%20%2B%201%29%20%7B%0A%09%09%09normalizedTestInputArray.push%28%5B%28i%20%2F%20NUM_DATA_PIXEL%20%2a%20DATA_RANGE%20-%20trainInputMin%5B0%5D%29%20%2F%20%28trainInputMax%5B0%5D%20-%20trainInputMin%5B0%5D%29%2C%20%28j%20%2F%20NUM_DATA_PIXEL%20%2a%20DATA_RANGE%20-%20trainInputMin%5B1%5D%29%20%2F%20%28trainInputMax%5B1%5D%20-%20trainInputMin%5B1%5D%29%5D%29%3B%0A%09%09%7D%0A%09%7D%0A%0A%09%2F%2F%20generate%20testing%20input%20tensor%20for%20visualisation%0A%09testInput%20%3D%20tf.tensor2d%28normalizedTestInputArray%2C%20%5BnormalizedTestInputArray.length%2C%202%5D%29%3B%0A%09%2F%2F%09testInput.print%28%29%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20build%20neural%20network%20model%20and%20define%20training%0A%2F%2F%0Afunction%20compileModel%28%29%20%7B%0A%09%2F%2F%20neural%20network%20structure%0A%09model%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%5B2%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%27sigmoid%27%0A%09%09%09%7D%29%0A%09%09%5D%0A%09%7D%29%3B%0A%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%2C%0A%09%09metrics%3A%20%5B%27mse%27%5D%2C%0A%09%7D%29%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20train%20neural%20network%0A%2F%2F%0Aasync%20function%20trainModel%28%29%20%7B%0A%09await%20model.fit%28%0A%09%09trainInput%2C%20trainOutput%2C%20%7B%0A%09%09%09epochs%3A%20ANZAHL_EPOCHEN%2C%0A%09%09%09shuffle%3A%20true%2C%0A%09%09%09callbacks%3A%20%5B%7B%0A%09%09%09%09onEpochEnd%3A%20async%28epoch%2C%20logs%29%20%3D%3E%20%7B%0A%09%09%09%09%09%2F%2F%20remember%20epoch%20number%20if%20interrupted%0A%09%09%09%09%09actualEpoch%20%3D%20epoch%20%2B%201%3B%0A%09%09%09%09%09actualLogs%20%3D%20logs%3B%0A%09%09%09%09%09%2F%2F%20initiate%20graphic%20update%0A%09%09%09%09%09if%20%28%28%28actualEpoch%29%20%25%20EPOCHEN_FUER_GRAFIK_UPDATE%20%3D%3D%3D%200%29%20%7C%7C%20%28epoch%20%3D%3D%3D%200%29%29%20%7B%0A%09%09%09%09%09%09drawPrediction%28actualEpoch%2C%20logs.loss%29%3B%0A%09%09%09%09%09%7D%0A%09%09%09%09%7D%0A%09%09%09%7D%2C%20%5D%0A%09%09%7D%0A%09%29%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20calculate%20mean%20squared%20error%0A%2F%2F%0Afunction%20calculateMSE%28predictedOutput%2C%20trueOutput%29%20%7B%0A%09let%20mse%20%3D%200.0%3B%0A%09for%20%28i%20%3D%200%3B%20i%20%3C%20predictedOutput.length%3B%20i%2B%2B%29%20%7B%0A%09%09mse%20%3D%20mse%20%2B%20%28predictedOutput%5Bi%5D%20-%20trueOutput%5Bi%5D%29%20%2a%2a%202%3B%0A%09%7D%0A%09return%20mse%20%2F%20predictedOutput.length%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20calculate%20percentage%20of%20correct%20classifications%0A%2F%2F%0Afunction%20calculatePercentageCorrect%28predictedOutput%2C%20trueOutput%29%20%7B%0A%09let%20correct%20%3D%200%3B%0A%09for%20%28i%20%3D%200%3B%20i%20%3C%20predictedOutput.length%3B%20i%2B%2B%29%20%7B%0A%09%09if%20%28%28trueOutput%5Bi%5D%20%3D%3D%3D%201%20%26%26%20predictedOutput%5Bi%5D%20%3E%3D%200.5%29%20%7C%7C%20%28trueOutput%5Bi%5D%20%3D%3D%3D%200%20%26%26%20predictedOutput%5Bi%5D%20%3C%200.5%29%29%20%7B%0A%09%09%09correct%20%3D%20correct%20%2B%201%3B%0A%09%09%7D%0A%09%7D%0A%09return%20%7B%0A%09%09accuracy%3A%20Math.round%28correct%20%2a%20100%20%2F%20predictedOutput.length%29%2C%0A%09%09wrong%3A%20predictedOutput.length%20-%20correct%0A%09%7D%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%20decision%20boundary%20and%20network%20output%0A%2F%2F%0Afunction%20drawPrediction%28epoch%2C%20mseTrain%29%20%7B%0A%09%2F%2F%20make%20predictions%20with%20neural%20network%0A%09let%20training%20%3D%20model.predict%28trainInput%29.arraySync%28%29%3B%0A%09let%20validation%20%3D%20model.predict%28validInput%29.arraySync%28%29%3B%0A%09let%20prediction%20%3D%20model.predict%28testInput%29.arraySync%28%29%3B%0A%0A%09%2F%2F%20calculate%20mse%20and%20percentages%20of%20correct%20classifications%0A%09let%20mseValid%20%3D%20calculateMSE%28validation%2C%20validOutputArray%29%3B%0A%09let%20trainCorrect%20%3D%20calculatePercentageCorrect%28training%2C%20trainOutputArray%29%3B%0A%09let%20validCorrect%20%3D%20calculatePercentageCorrect%28validation%2C%20validOutputArray%29%3B%0A%0A%09%2F%2F%20draw%20decision%20boundary%0A%09decisionBuffer.noStroke%28%29%3B%0A%09let%20element%20%3D%200%3B%0A%09for%20%28i%20%3D%200%3B%20i%20%3C%20NUM_DATA_PIXEL%20%2B%201%3B%20i%20%3D%20i%20%2B%201%29%20%7B%0A%09%09for%20%28j%20%3D%200%3B%20j%20%3C%20NUM_DATA_PIXEL%20%2B%201%3B%20j%20%3D%20j%20%2B%201%29%20%7B%0A%09%09%09%2F%2F%20transform%20neural%20network%20output%20into%20a%20color%0A%09%09%09if%20%28prediction%5Belement%5D%5B0%5D%20%3E%200.5%29%20%7B%0A%09%09%09%09decisionBuffer.fill%28Math.round%28%281%20-%20prediction%5Belement%5D%5B0%5D%29%20%2a%20100%20%2B%20200.5%29%2C%20255%2C%20Math.round%28%281%20-%20prediction%5Belement%5D%5B0%5D%29%20%2a%20100%20%2B%20200.5%29%29%3B%0A%09%09%09%7D%20else%20%7B%0A%09%09%09%09decisionBuffer.fill%28Math.round%28prediction%5Belement%5D%5B0%5D%20%2a%20100%20%2B%20200.5%29%2C%20Math.round%28prediction%5Belement%5D%5B0%5D%20%2a%20100%20%2B%20200.5%29%2C%20255%29%3B%0A%09%09%09%7D%0A%09%09%09%2F%2F%20check%20for%20decision%20boundary%20and%20alter%20color%0A%09%09%09if%20%28%28element%20%25%20%28NUM_DATA_PIXEL%20%2B%201%29%29%20%21%3D%3D%200%20%26%26%20%28%28prediction%5Belement%5D%5B0%5D%20%3E%200.5%20%26%26%20prediction%5Belement%20-%201%5D%5B0%5D%20%3C%3D%200.5%29%20%7C%7C%20%28prediction%5Belement%5D%5B0%5D%20%3C%3D%200.5%20%26%26%20prediction%5Belement%20-%201%5D%5B0%5D%20%3E%200.5%29%29%29%20%7B%0A%09%09%09%09decisionBuffer.fill%28%27red%27%29%3B%0A%09%09%09%7D%0A%09%09%09if%20%28element%20%3E%3D%20NUM_DATA_PIXEL%20%2B%201%20%26%26%20%28%28prediction%5Belement%5D%5B0%5D%20%3E%200.5%20%26%26%20prediction%5Belement%20-%20%28NUM_DATA_PIXEL%20%2B%201%29%5D%5B0%5D%20%3C%3D%200.5%29%20%7C%7C%20%28prediction%5Belement%5D%5B0%5D%20%3C%3D%200.5%20%26%26%20prediction%5Belement%20-%20%28NUM_DATA_PIXEL%20%2B%201%29%5D%5B0%5D%20%3E%200.5%29%29%29%20%7B%0A%09%09%09%09decisionBuffer.fill%28%27red%27%29%3B%0A%09%09%09%7D%0A%09%09%09decisionBuffer.rect%28DATA_SCALE%20%2a%20i%20%2F%20NUM_DATA_PIXEL%20%2a%20DATA_RANGE%20-%20PIXEL_SIZE%20%2F%202%2C%20DATA_SCALE%20%2a%20%2810%20-%20j%20%2F%20NUM_DATA_PIXEL%20%2a%20DATA_RANGE%29%20-%20PIXEL_SIZE%20%2F%202%2C%20PIXEL_SIZE%2C%20PIXEL_SIZE%29%3B%0A%09%09%09element%20%3D%20element%20%2B%201%3B%0A%09%09%7D%0A%09%7D%0A%09image%28decisionBuffer%2C%200%2C%200%29%3B%0A%09image%28decisionBuffer%2C%20DATA_WINDOW_SIZE%2C%200%29%3B%0A%0A%09%2F%2F%20draw%20training%20and%20validation%20samples%0A%09image%28trainBuffer%2C%200%2C%200%29%3B%0A%09image%28validBuffer%2C%20DATA_WINDOW_SIZE%2C%200%29%3B%0A%0A%09%2F%2F%20add%20labels%20to%20training%20and%20validation%20feature%20space%20%2F%2F%20wrong%0A%09noStroke%28%29%3B%0A%09text%28%22Training%3A%20%22%20%2B%20trainCorrect.accuracy%20%2B%20%22%25%20%E2%9C%94%EF%B8%8F%20%28%22%20%2B%20trainCorrect.wrong%20%2B%20%22%20falsch%29%22%2C%202%20%2a%20PIXEL_SIZE%2C%204%20%2a%20PIXEL_SIZE%29%3B%0A%09text%28%22Validation%3A%20%22%20%2B%20validCorrect.accuracy%20%2B%20%22%25%20%E2%9C%94%EF%B8%8F%28%22%20%2B%20validCorrect.wrong%20%2B%20%22%20falsch%29%22%2C%20DATA_WINDOW_SIZE%20%2B%202%20%2a%20PIXEL_SIZE%2C%204%20%2a%20PIXEL_SIZE%29%3B%0A%0A%09%2F%2F%20print%20training%20and%20validation%20results%20to%20console%0A%09console.log%28%22%7C%7C%20%22%20%2B%20epoch.toString%28%29.padStart%286%2C%20%22%20%22%29%20%2B%20%22%20%7C%7C%20%22%20%2B%20trainCorrect.accuracy.toString%28%29.padStart%286%2C%20%22%20%22%29%20%2B%20%22%25%20%7C%20%22%20%2B%20mseTrain.toFixed%286%29%20%2B%20%22%20%7C%7C%20%22%20%2B%20validCorrect.accuracy.toString%28%29.padStart%286%2C%20%22%20%22%29%20%2B%20%22%25%20%7C%20%22%20%2B%20mseValid.toFixed%286%29%20%2B%20%22%20%7C%7C%22%29%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20draw%20data%20in%20graphic%20buffer%0A%2F%2F%0Afunction%20drawDataInBuffer%28inputData%2C%20outputData%2C%20buffer%29%20%7B%0A%09buffer.noFill%28%29%3B%0A%09buffer.strokeWeight%28PIXEL_SIZE%20%2F%202%29%3B%0A%09buffer.rect%280%2C%200%2C%20DATA_WINDOW_SIZE%2C%20DATA_WINDOW_SIZE%29%3B%0A%09for%20%28i%20%3D%200%3B%20i%20%3C%20inputData.length%3B%20i%2B%2B%29%20%7B%0A%09%09if%20%28outputData%5Bi%5D%20%3D%3D%3D%201%29%20%7B%0A%09%09%09%2F%2F%20green%20circle%20for%20output%20label%20%3D%3D%3D%201%0A%09%09%09buffer.stroke%28%22darkgreen%22%29%3B%0A%09%09%09buffer.circle%28DATA_SCALE%20%2a%20inputData%5Bi%5D%5B0%5D%2C%20DATA_SCALE%20%2a%20%2810%20-%20inputData%5Bi%5D%5B1%5D%29%2C%202%20%2a%20PIXEL_SIZE%29%3B%0A%09%09%7D%20else%20%7B%0A%09%09%09%2F%2F%20blue%20cross%20for%20output%20label%20%3D%3D%3D%200%0A%09%09%09buffer.stroke%28%22blue%22%29%3B%0A%09%09%09buffer.line%28DATA_SCALE%20%2a%20inputData%5Bi%5D%5B0%5D%20%2B%20PIXEL_SIZE%2C%20DATA_SCALE%20%2a%20%2810%20-%20inputData%5Bi%5D%5B1%5D%29%20%2B%20PIXEL_SIZE%2C%20DATA_SCALE%20%2a%20inputData%5Bi%5D%5B0%5D%20-%20PIXEL_SIZE%2C%20DATA_SCALE%20%2a%20%2810%20-%20inputData%5Bi%5D%5B1%5D%29%20-%20PIXEL_SIZE%29%3B%0A%09%09%09buffer.line%28DATA_SCALE%20%2a%20inputData%5Bi%5D%5B0%5D%20%2B%20PIXEL_SIZE%2C%20DATA_SCALE%20%2a%20%2810%20-%20inputData%5Bi%5D%5B1%5D%29%20-%20PIXEL_SIZE%2C%20DATA_SCALE%20%2a%20inputData%5Bi%5D%5B0%5D%20-%20PIXEL_SIZE%2C%20DATA_SCALE%20%2a%20%2810%20-%20inputData%5Bi%5D%5B1%5D%29%20%2B%20PIXEL_SIZE%29%3B%0A%09%09%7D%0A%09%7D%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%20p5.js%20setup%28%29%0A%2F%2F%0Aasync%20function%20setup%28%29%20%7B%20%2F%2Fnoprotect%20%28for%20large%20arrays%29%0A%09%2F%2F%20initiate%20console%20output%0A%09console.log%28%22%7C%7C%20%20%20%20%20%20%20%20%7C%7C%20%20%20%20%20%20Training%20%20%20%20%20%20%7C%7C%20%20%20%20%20Validation%20%20%20%20%20%7C%7C%22%29%3B%0A%09console.log%28%22%7C%7C%20Epoche%20%7C%7C%20korrekt%20%7C%20%20%20%20%20%20mse%20%7C%7C%20korrekt%20%7C%20%20%20%20%20%20mse%20%7C%7C%22%29%3B%0A%0A%09%2F%2F%20create%20canvas%0A%09createCanvas%282%20%2a%20DATA_WINDOW_SIZE%2C%20DATA_WINDOW_SIZE%29%3B%0A%09textSize%28PIXEL_SIZE%20%2a%203%29%3B%0A%0A%09%2F%2F%20create%20all%20grafic%20buffers%0A%09trainBuffer%20%3D%20createGraphics%28DATA_WINDOW_SIZE%2C%20DATA_WINDOW_SIZE%29%3B%0A%09validBuffer%20%3D%20createGraphics%28DATA_WINDOW_SIZE%2C%20DATA_WINDOW_SIZE%29%3B%0A%09decisionBuffer%20%3D%20createGraphics%28DATA_WINDOW_SIZE%2C%20DATA_WINDOW_SIZE%29%3B%0A%0A%09%2F%2F%20draw%20initial%20training%20and%20validation%20buffer%0A%09drawDataInBuffer%28trainInputArray%2C%20trainOutputArray%2C%20trainBuffer%29%3B%0A%09drawDataInBuffer%28validInputArray%2C%20validOutputArray%2C%20validBuffer%29%3B%0A%09image%28trainBuffer%2C%200%2C%200%29%3B%0A%09image%28validBuffer%2C%20DATA_WINDOW_SIZE%2C%200%29%3B%0A%0A%09%2F%2F%20data%20preprocessing%0A%09generateTensors%28%29%3B%0A%0A%09%2F%2F%20define%20model%20and%20training%0A%09compileModel%28%29%3B%0A%0A%09%2F%2F%20train%20and%20visualise%20neural%20network%0A%09await%20trainModel%28%29%3B%0A%0A%09%2F%2F%20end%20of%20training%0A%09console.log%28%22Das%20Training%20ist%20beendet%20%3A-%29%22%29%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20p5.js%20keyPressed%28%29%20ESC%20%3D%20emergency%20stop%0A%2F%2F%0Afunction%20keyPressed%28%29%20%7B%0A%09if%20%28keyCode%20%3D%3D%3D%2027%29%20%7B%20%2F%2F%20ESC%20key%0A%09%09%2F%2F%20initiate%20stop%20of%20training%20after%20next%20epoch%0A%09%09model.stopTraining%20%3D%20true%3B%0A%09%09%2F%2F%20response%20to%20user%0A%09%09console.log%28%22Training%20wurde%20Abgebrochen%21%20Finales%20Resultat%3A%22%29%3B%0A%09%09%2F%2F%20draw%20final%20Prediction%0A%09%09drawPrediction%28actualEpoch%2C%20actualLogs.loss%29%3B%0A%09%7D%0A%7D&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&autorun=off&height=500px#Klassifikation}}
 </WRAP> </WRAP>
  
 \\  \\ 
 ===== - Wie funktioniert so was? ====== ===== - Wie funktioniert so was? ======
-[{{ :p:pasted:artificial-neural-network-g6c950ac20_640.png?320|Künstliches neuronales Netz [Ahmed Gad, Pixaby licence](([[https://pixabay.com/illustrations/artificial-neural-network-ann-3501528/|artificial neural network]] by [[https://pixabay.com/users/ahmedgad-9403351/|Ahmed Gad]] on Pixabay, [[https://pixabay.com/service/license/|Pixaby licence]]))}}]+<figure right>{{:p:pasted:artificial-neural-network-g6c950ac20_640.png?320}}<caption>Künstliches neuronales Netz [Ahmed Gad, Pixaby licence](([[https://pixabay.com/illustrations/artificial-neural-network-ann-3501528/|artificial neural network]] by [[https://pixabay.com/users/ahmedgad-9403351/|Ahmed Gad]] on Pixabay, [[https://pixabay.com/service/license/|Pixaby licence]]))</caption></figure>
   ; 🕸️ Neuronale Netze: Beschreibung und Einsatzgebiete   ; 🕸️ Neuronale Netze: Beschreibung und Einsatzgebiete
   : \\ **Neuronale Netze** sind einfache Nachbildungen des **menschlichen Gehirns** 🧠. Sie bestehen aus mehreren miteinander verbundenen **künstlichen Neuronen** (das sind einfache Nachbildungen von Gehirnzellen). Das Praktische an neuronalen Netzen ist, sie können auf einem Computer erstellt und genutzt werden.   : \\ **Neuronale Netze** sind einfache Nachbildungen des **menschlichen Gehirns** 🧠. Sie bestehen aus mehreren miteinander verbundenen **künstlichen Neuronen** (das sind einfache Nachbildungen von Gehirnzellen). Das Praktische an neuronalen Netzen ist, sie können auf einem Computer erstellt und genutzt werden.
   : Neuronale Netze sind (noch?) nicht in der Lage, das menschliche Gehirn vollständig nachzuahmen. Sie eignen sich jedoch relativ gut dafür, Muster zu erkennen und werden daher in verschiedenen Feldern der Forschung und Industrie eingesetzt (z.B. Gesichtserkennung, Bildkorrektur, Sprachübersetzung, Chatbots, Diagnosen in der Medizin).   : Neuronale Netze sind (noch?) nicht in der Lage, das menschliche Gehirn vollständig nachzuahmen. Sie eignen sich jedoch relativ gut dafür, Muster zu erkennen und werden daher in verschiedenen Feldern der Forschung und Industrie eingesetzt (z.B. Gesichtserkennung, Bildkorrektur, Sprachübersetzung, Chatbots, Diagnosen in der Medizin).
 +
 <WRAP clear/> <WRAP clear/>
-<WRAP right box width=320px>{{gdraw>1mpAnvy6xbGSf-w0wHHanRW0LrmPxhFF-7qmc4ajmHu0 width=292 right}}\\  +<figure right>{{:p:pasted:fischnn.png?320}}<caption>Das von uns verwendete neuronale Netz((eigene Darstellung, [[https://creativecommons.org/publicdomain/zero/1.0/deed.de|CC0 1.0]]))</caption></figure
-Das von uns verwendete neuronale Netz((eigene Darstellung, [[https://creativecommons.org/publicdomain/zero/1.0/deed.de|CC0 1.0]]))</WRAP+  ; 🕸️ Neuronale Netze: Aufbau und Arbeitsweise 
-  ; 🕸️ Neuronale Netze: Aufbau und Arbeitsweise+
   : \\ Neuronale Netze können auf verschiedene Art und Weise aufgebaut werden. Eine Variante ist das rechts dargestellte neuronale Netz, welches du soeben für die Fischklassifikation verwendet hattest.   : \\ Neuronale Netze können auf verschiedene Art und Weise aufgebaut werden. Eine Variante ist das rechts dargestellte neuronale Netz, welches du soeben für die Fischklassifikation verwendet hattest.
   : Dem neuronalen Netz in der Abbildung werden links die beiden Messwerte der Fische eingegeben. Die Eingabe läuft von links nach rechts durch alle Neuronen (die Kreise) hindurch und wird so zu einem Resultat verrechnet. Die Neuronen in der linken Spalte werden **Input Neuronen** genannt, die Neuronen in der Spalte ganz rechts **Output Neuronen** und alle Neuronen dazwischen **Hidden Neuronen**.   : Dem neuronalen Netz in der Abbildung werden links die beiden Messwerte der Fische eingegeben. Die Eingabe läuft von links nach rechts durch alle Neuronen (die Kreise) hindurch und wird so zu einem Resultat verrechnet. Die Neuronen in der linken Spalte werden **Input Neuronen** genannt, die Neuronen in der Spalte ganz rechts **Output Neuronen** und alle Neuronen dazwischen **Hidden Neuronen**.
Zeile 78: Zeile 81:
  
 <WRAP clear/> <WRAP clear/>
-[{{ :p:pasted:mixer-g41f508c25_640.jpg?320|Audio Mischpult [Kevin Wuhrmann, Pixaby licence](([[https://pixabay.com/photos/mixer-digital-analog-audio-1322136/|mixer digital analog audio]] by [[https://pixabay.com/users/_masterk_-1464983/|Kevin Wuhrmann]] on Pixabay, [[https://pixabay.com/service/license/|Pixaby licence]]))}}]+<figure right>{{:p:pasted:mixer-g41f508c25_640.jpg?320}}<caption>Audio Mischpult [Kevin Wuhrmann, Pixaby licence](([[https://pixabay.com/photos/mixer-digital-analog-audio-1322136/|mixer digital analog audio]] by [[https://pixabay.com/users/_masterk_-1464983/|Kevin Wuhrmann]] on Pixabay, [[https://pixabay.com/service/license/|Pixaby licence]]))</caption></figure>
   ; 🕸️ Neuronale Netze: Lernen   ; 🕸️ Neuronale Netze: Lernen
   : \\ Damit ein neuronales Netz genutzt werden kann, muss es erst einmal für seine Aufgabe "eingestellt" werden. Das funktioniert ähnlich wie das Einstellen eines Mischpults für das Abmischen einer Band. Die Person am Mischpult wählt für alle Drehknöpfe und Schieberegler eine Einstellung und hört, ob der Sound gut tönt. Wenn nicht, wird die Einstellung so lange verändert, bis das Resultat "rockt".   : \\ Damit ein neuronales Netz genutzt werden kann, muss es erst einmal für seine Aufgabe "eingestellt" werden. Das funktioniert ähnlich wie das Einstellen eines Mischpults für das Abmischen einer Band. Die Person am Mischpult wählt für alle Drehknöpfe und Schieberegler eine Einstellung und hört, ob der Sound gut tönt. Wenn nicht, wird die Einstellung so lange verändert, bis das Resultat "rockt".