Beide Seiten der vorigen RevisionVorhergehende Überarbeitung | |
p:ki:funktionsapproximation [2024/06/30 09:20] – [1. Kugelstossen] Oliver Baltisberger | p:ki:funktionsapproximation [2024/09/16 21:03] (aktuell) – [2. Funktionen erraten] Oliver Baltisberger |
---|
{{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%20Parameter%20d%C3%BCrfen%20ge%C3%A4ndert%20werden.%0A%0A%2F%2F%20Neuronale%20Netz%20Parameter%0Aconst%20LERNRATE%20%3D%200.1%3B%20%2F%2F%20Dezimalzahl%20%3E%200%0Aconst%20ANZAHL_HIDDEN_NEURONS%20%3D%205%3B%20%2F%2F%20ganzzahliger%20Wert%20%3E%200%0Aconst%20ANZAHL_EPOCHEN%20%3D%201500%3B%20%2F%2F%20ganzzahliger%20Wert%20%3E%200%0A%0A%2F%2F%20Anzeigeparameter%0Aconst%20EPOCHEN_FUER_GRAFIK_UPDATE%20%3D%2050%3B%20%2F%2F%20ganzzahlig%20Wert%20%3E%200%0A%0A%2F%2F%20Wurfparameter%0Aconst%20ABWURFGESCHWINDIGKEIT%20%3D%2014.5%3B%20%2F%2F%20m%2Fs%0Aconst%20ABWURFWINKEL%20%3D%2040%3B%20%2F%2F%20%C2%B0%0Aconst%20ABWURFHOEHE%20%3D%202.3%3B%20%2F%2F%20m%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%2F%2F%20physical%20constants%0Aconst%20GRAVITY%20%3D%209.81%3B%20%2F%2F%20m%2Fs%5E2%0Aconst%20THROWING_DISTANCE%20%3D%20getThrowingDistance%28%29%3B%0A%0A%2F%2F%20options%0Aconst%20INPUT_RANGE%20%3D%20Math.floor%28THROWING_DISTANCE%29%2a3%2F4%3B%0Aconst%20INPUT_STEP%20%3D%20Math.max%280.5%2CMath.round%28THROWING_DISTANCE%2F10%29%29%3B%0Aconst%20AXIS_RANGE_X%20%3D%20Math.ceil%28THROWING_DISTANCE%29%20%2B%204%3B%0Aconst%20AXIS_RANGE_Y%20%3D%20Math.ceil%28getMaximumHeight%28%29%29%20%2B%201%3B%0Aconst%20NUM_DATA_PIXEL%20%3D%2050%3B%0Aconst%20DATA_WINDOW_SIZE_X%20%3D%20500%3B%0Aconst%20DATA_WINDOW_SIZE_Y%20%3D%20240%3B%0Aconst%20DATA_WINDOW_MARGIN%20%3D%2030%3B%0Aconst%20PIXEL_SIZE%20%3D%203%3B%0Aconst%20CROSS_SIZE%20%3D%205%3B%0Aconst%20TEXT_SIZE%20%3D%2012%3B%0A%0A%2F%2F%20global%20variables%0Alet%20model%2C%20inputSamplesMax%2C%20inputSamplesMin%2C%20outputSamplesMax%2C%20outputSamplesMin%2C%20actualEpoch%2C%20actualLogs%2C%20axesTrainingSamplesBuffer%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%20Physical%20Modelling%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%20pysical%20correct%20training%20data%0A%2F%2F%0Afunction%20generateSamples%28%29%20%7B%0A%0A%09%2F%2F%20generate%20training%20data%0A%09let%20inputSamplesArray%20%3D%20%5B%5D%3B%0A%09let%20outputSamplesArray%20%3D%20%5B%5D%3B%0A%09for%20%28let%20s%20%3D%200%3B%20s%20%3C%3D%20INPUT_RANGE%3B%20s%20%3D%20s%20%2B%20INPUT_STEP%29%20%7B%0A%09%09inputSamplesArray.push%28%5Bs%5D%29%3B%0A%09%09outputSamplesArray.push%28%5BgetHeight%28s%29%5D%29%3B%0A%09%7D%0A%0A%09%2F%2F%20calulate%20global%20normalization%20bounds%0A%09inputSamplesMax%20%3D%20Math.max.apply%28null%2C%20inputSamplesArray%29%3B%0A%09inputSamplesMin%20%3D%20Math.min.apply%28null%2C%20inputSamplesArray%29%3B%0A%09outputSamplesMax%20%3D%20Math.max.apply%28null%2C%20outputSamplesArray%29%3B%0A%09outputSamplesMin%20%3D%20Math.min.apply%28null%2C%20outputSamplesArray%29%3B%0A%0A%09%2F%2F%20generate%20testing%20data%20for%20visualization%0A%09let%20testingSamplesArray%20%3D%20%5B%5D%3B%0A%09for%20%28let%20i%20%3D%200%3B%20i%20%3C%3D%20NUM_DATA_PIXEL%3B%20i%20%3D%20i%20%2B%20AXIS_RANGE_X%20%2F%20NUM_DATA_PIXEL%29%20%7B%0A%09%09testingSamplesArray.push%28%5B%28i%20-%20inputSamplesMin%29%20%2F%20%28inputSamplesMax%20-%20inputSamplesMin%29%5D%29%3B%0A%09%7D%0A%0A%0A%09%2F%2F%20return%20input%20and%20output%20samples%0A%09return%20%5BinputSamplesArray%2C%20outputSamplesArray%2C%20testingSamplesArray%5D%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20returns%20height%20given%20a%20distance%0A%2F%2F%0Afunction%20getHeight%28distance%29%20%7B%0A%0A%09return%20-GRAVITY%20%2a%20distance%20%2a%20distance%20%2F%20%282%20%2a%20ABWURFGESCHWINDIGKEIT%20%2a%20ABWURFGESCHWINDIGKEIT%20%2a%20Math.cos%28ABWURFWINKEL%20%2a%20Math.PI%20%2F%20180%29%20%2a%20Math.cos%28ABWURFWINKEL%20%2a%20Math.PI%20%2F%20180%29%29%20%2B%20Math.tan%28ABWURFWINKEL%20%2a%20Math.PI%20%2F%20180%29%20%2a%20distance%20%2B%20ABWURFHOEHE%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20returns%20throwing%20distance%0A%2F%2F%0Afunction%20getThrowingDistance%28%29%20%7B%0A%0A%09return%20ABWURFGESCHWINDIGKEIT%20%2a%20ABWURFGESCHWINDIGKEIT%20%2F%20GRAVITY%20%2a%20Math.cos%28ABWURFWINKEL%20%2a%20Math.PI%20%2F%20180%29%20%2a%20%28Math.sin%28ABWURFWINKEL%20%2a%20Math.PI%20%2F%20180%29%20%2B%20Math.sqrt%28Math.sin%28ABWURFWINKEL%20%2a%20Math.PI%20%2F%20180%29%20%2a%20Math.sin%28ABWURFWINKEL%20%2a%20Math.PI%20%2F%20180%29%20%2B%202%20%2a%20GRAVITY%20%2a%20ABWURFHOEHE%20%2F%20%28ABWURFGESCHWINDIGKEIT%20%2a%20ABWURFGESCHWINDIGKEIT%29%29%29%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20returns%20maximal%20height%0A%2F%2F%0Afunction%20getMaximumHeight%28%29%20%7B%0A%09return%20ABWURFGESCHWINDIGKEIT%20%2a%20ABWURFGESCHWINDIGKEIT%20%2a%20Math.sin%28ABWURFWINKEL%20%2a%20Math.PI%20%2F%20180%29%20%2a%20Math.sin%28ABWURFWINKEL%20%2a%20Math.PI%20%2F%20180%29%20%2F%20%282%20%2a%20GRAVITY%29%20%2B%20ABWURFHOEHE%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%20generate%20data%20tensors%0A%2F%2F%0Afunction%20generateTensors%28inputSamples%2C%20outputSamples%2C%20testingSamples%29%20%7B%0A%0A%09%2F%2F%20normalize%20training%20data%0A%09for%20%28let%20i%20%3D%200%3B%20i%20%3C%20inputSamples.length%3B%20i%20%3D%20i%20%2B%201%29%20%7B%0A%09%09inputSamples%5Bi%5D%5B0%5D%20%3D%20%28inputSamples%5Bi%5D%5B0%5D%20-%20inputSamplesMin%29%20%2F%20%28inputSamplesMax%20-%20inputSamplesMin%29%3B%0A%09%09outputSamples%5Bi%5D%5B0%5D%20%3D%20%28outputSamples%5Bi%5D%5B0%5D%20-%20outputSamplesMin%29%20%2F%20%28outputSamplesMax%20-%20outputSamplesMin%29%3B%0A%09%7D%0A%0A%09%2F%2F%20generate%20training%20input%20and%20output%20tensors%0A%09let%20trainingInputTensor%20%3D%20tf.tensor2d%28inputSamples%2C%20%5BinputSamples.length%2C%201%5D%29%3B%0A%09let%20trainingOutputTensor%20%3D%20tf.tensor2d%28outputSamples%2C%20%5BoutputSamples.length%2C%201%5D%29%3B%0A%09%2F%2F%20trainingOutputTensor.print%28%29%3B%20%2F%2F%20display%20tensor%20in%20the%20console%0A%0A%09%2F%2F%20generate%20testing%20input%20tensor%20for%20visualisation%0A%09let%20testingInputTensor%20%3D%20tf.tensor2d%28testingSamples%2C%20%5BtestingSamples.length%2C%201%5D%29%3B%0A%09%2F%2F%20testingInputTensor.print%28%29%3B%20%2F%2F%20display%20tensor%20in%20the%20console%0A%0A%09return%20%5BtrainingInputTensor%2C%20trainingOutputTensor%2C%20testingInputTensor%5D%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%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%5B1%5D%2C%0A%09%09%09%09units%3A%20ANZAHL_HIDDEN_NEURONS%2C%0A%09%09%09%09activation%3A%20%27sigmoid%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%0A%09%2F%2F%20neural%20network%20configuration%0A%09model.compile%28%7B%0A%09%09optimizer%3A%20tf.train.adam%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%28trainInput%2C%20trainOutput%2C%20testingInput%29%20%7B%0A%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%20%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%09drawApproximation%28actualEpoch%2C%20logs.loss%2C%20testingInput%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%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%2F%2F%0A%2F%2F%20decision%20boundary%20and%20network%20output%0A%2F%2F%0Afunction%20drawApproximation%28epoch%2C%20mseTrain%2C%20testingTensor%29%20%7B%0A%0A%09let%20throwingDistance%20%3D%20-1%3B%0A%0A%09%2F%2F%20calculate%20scaling%20factors%0A%09let%20stretch_x%20%3D%20DATA_WINDOW_SIZE_X%20%2F%20AXIS_RANGE_X%3B%0A%09let%20stretch_y%20%3D%20DATA_WINDOW_SIZE_Y%20%2F%20AXIS_RANGE_Y%3B%0A%0A%09%2F%2F%20calculate%20approximation%20with%20the%20current%20neural%20network%0A%09let%20prediction%20%3D%20model.predict%28testingTensor%29.arraySync%28%29%3B%0A%0A%09%2F%2F%20reset%20grafic%20and%20draw%20axes%20and%20training%20samples%0A%09background%28%22white%22%29%3B%0A%09image%28axesTrainingSamplesBuffer%2C%200%2C%200%29%3B%0A%0A%09%2F%2F%20draw%20approximation%0A%09strokeWeight%28PIXEL_SIZE%29%3B%0A%09stroke%28%22red%22%29%3B%0A%09for%20%28i%20%3D%200%3B%20i%20%3C%20NUM_DATA_PIXEL%3B%20i%20%3D%20i%20%2B%201%29%20%7B%0A%09%09line%28DATA_WINDOW_MARGIN%20%2B%20i%20%2a%20DATA_WINDOW_SIZE_X%20%2F%20NUM_DATA_PIXEL%2C%20DATA_WINDOW_SIZE_Y%20%2B%20DATA_WINDOW_MARGIN%20-%20%28prediction%5Bi%5D%5B0%5D%20%2a%20%28outputSamplesMax%20-%20outputSamplesMin%29%20%2B%20outputSamplesMin%29%20%2a%20stretch_y%2C%20DATA_WINDOW_MARGIN%20%2B%20%28i%20%2B%201%29%20%2a%20DATA_WINDOW_SIZE_X%20%2F%20NUM_DATA_PIXEL%2C%20DATA_WINDOW_SIZE_Y%20%2B%20DATA_WINDOW_MARGIN%20-%20%28prediction%5Bi%20%2B%201%5D%5B0%5D%20%2a%20%28outputSamplesMax%20-%20outputSamplesMin%29%20%2B%20outputSamplesMin%29%20%2a%20stretch_y%29%3B%0A%09%09if%20%28prediction%5Bi%20%2B%201%5D%5B0%5D%20%2a%20%28outputSamplesMax%20-%20outputSamplesMin%29%20%2B%20outputSamplesMin%20%3C%200%20%26%26%20prediction%5Bi%5D%5B0%5D%20%2a%20%28outputSamplesMax%20-%20outputSamplesMin%29%20%2B%20outputSamplesMin%20%3E%3D%200%29%20%7B%0A%09%09%09throwingDistance%20%3D%20i%20%2a%20AXIS_RANGE_X%20%2F%20NUM_DATA_PIXEL%20%2B%201.0%20%2a%20AXIS_RANGE_X%20%2F%20NUM_DATA_PIXEL%20%2a%20%28prediction%5Bi%5D%5B0%5D%20%2a%20%28outputSamplesMax%20-%20outputSamplesMin%29%20%2B%20outputSamplesMin%29%20%2F%20%28%28prediction%5Bi%5D%5B0%5D%20-%20prediction%5Bi%20%2B%201%5D%5B0%5D%29%20%2a%20%28outputSamplesMax%20-%20outputSamplesMin%29%29%3B%0A%09%09%7D%0A%09%7D%0A%0A%09%2F%2F%20print%20training%20results%0A%09strokeWeight%281%29%3B%0A%09fill%28%22red%22%29%3B%0A%09textSize%281.25%20%2a%20TEXT_SIZE%29%3B%0A%09text%28%22Kugelstossweite%22%2C%20DATA_WINDOW_SIZE_X%20-%20DATA_WINDOW_MARGIN%20-%206%20%2a%20TEXT_SIZE%2C%20DATA_WINDOW_MARGIN%29%3B%0A%09text%28%22Berechnet%3A%20%20%20%20%20%20%22%20%2B%20THROWING_DISTANCE.toFixed%282%29.padStart%286%2C%20%22%20%22%29%2C%20DATA_WINDOW_SIZE_X%20-%20DATA_WINDOW_MARGIN%20-%206%20%2a%20TEXT_SIZE%2C%20DATA_WINDOW_MARGIN%20%2B%202%20%2a%20TEXT_SIZE%29%3B%0A%09if%20%28throwingDistance%20%3D%3D%3D%20-1%29%20%7B%0A%09%09text%28%22KI-Sch%C3%A4tzung%3A%20-%22%2C%20DATA_WINDOW_SIZE_X%20-%20DATA_WINDOW_MARGIN%20-%206%20%2a%20TEXT_SIZE%2C%20DATA_WINDOW_MARGIN%20%2B%204%20%2a%20TEXT_SIZE%29%3B%0A%09%7D%20else%20%7B%0A%09%09text%28%22KI-Sch%C3%A4tzung%3A%20%22%20%2B%20throwingDistance.toFixed%282%29.padStart%286%2C%20%22%20%22%29%2C%20DATA_WINDOW_SIZE_X%20-%20DATA_WINDOW_MARGIN%20-%206%20%2a%20TEXT_SIZE%2C%20DATA_WINDOW_MARGIN%20%2B%204%20%2a%20TEXT_SIZE%29%3B%0A%09%7D%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%20mseTrain.toFixed%285%29.padStart%289%2C%20%22%20%22%29%20%2B%20%22%20%7C%7C%22%29%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20draw%20chart%20axes%20in%20graphic%20buffer%0A%2F%2F%0Afunction%20drawAxesTrainingSamplesInBuffer%28inputData%2C%20outputData%29%20%7B%0A%0A%09%2F%2F%20calculate%20scaling%20factors%0A%09let%20stretch_x%20%3D%20DATA_WINDOW_SIZE_X%20%2F%20AXIS_RANGE_X%3B%0A%09let%20stretch_y%20%3D%20DATA_WINDOW_SIZE_Y%20%2F%20AXIS_RANGE_Y%3B%0A%0A%09%2F%2F%20create%20buffer%0A%09buffer%20%3D%20createGraphics%28DATA_WINDOW_SIZE_X%20%2B%202%20%2a%20DATA_WINDOW_MARGIN%2C%20DATA_WINDOW_SIZE_Y%20%2B%202%20%2a%20DATA_WINDOW_MARGIN%29%3B%0A%09buffer.strokeWeight%28PIXEL_SIZE%29%3B%0A%09buffer.textAlign%28CENTER%2C%20CENTER%29%3B%0A%09textSize%28TEXT_SIZE%29%3B%0A%0A%09%2F%2F%20draw%20x-axis%0A%09buffer.stroke%28%22black%22%29%3B%0A%09buffer.line%28DATA_WINDOW_MARGIN%2C%20DATA_WINDOW_SIZE_Y%20%2B%20DATA_WINDOW_MARGIN%2C%20DATA_WINDOW_SIZE_X%20%2B%20DATA_WINDOW_MARGIN%2C%20DATA_WINDOW_SIZE_Y%20%2B%20DATA_WINDOW_MARGIN%29%3B%0A%09%2F%2F%20label%0A%09buffer.strokeWeight%281%29%3B%0A%09buffer.textSize%281.5%20%2a%20TEXT_SIZE%29%3B%0A%09buffer.text%28%22Weite%22%2C%20DATA_WINDOW_SIZE_X%20%2B%20DATA_WINDOW_MARGIN%2C%20DATA_WINDOW_SIZE_Y%20%2B%20DATA_WINDOW_MARGIN%20-%201.5%20%2a%20TEXT_SIZE%29%3B%0A%09%2F%2F%20ticks%20and%20numbers%0A%09buffer.textSize%28TEXT_SIZE%29%3B%0A%09buffer.strokeWeight%28PIXEL_SIZE%29%3B%0A%09for%20%28let%20i%20%3D%200%3B%20i%20%3C%3D%20AXIS_RANGE_X%3B%20i%20%3D%20i%20%2B%201%29%20%7B%0A%09%09buffer.line%28DATA_WINDOW_MARGIN%20%2B%20i%20%2a%20stretch_x%2C%20DATA_WINDOW_SIZE_Y%20%2B%20DATA_WINDOW_MARGIN%2C%20DATA_WINDOW_MARGIN%20%2B%20i%20%2a%20stretch_x%2C%20DATA_WINDOW_SIZE_Y%20%2B%20DATA_WINDOW_MARGIN%20%2B%20CROSS_SIZE%29%3B%0A%09%09buffer.strokeWeight%281%29%3B%0A%09%09buffer.text%28i%2C%20DATA_WINDOW_MARGIN%20%2B%20i%20%2a%20stretch_x%2C%20DATA_WINDOW_SIZE_Y%20%2B%20DATA_WINDOW_MARGIN%20%2B%201.5%20%2a%20TEXT_SIZE%29%3B%0A%09%09buffer.strokeWeight%28PIXEL_SIZE%29%3B%0A%09%7D%0A%0A%09%2F%2F%20draw%20y-axis%0A%09buffer.line%28DATA_WINDOW_MARGIN%2C%20DATA_WINDOW_MARGIN%2C%20DATA_WINDOW_MARGIN%2C%20DATA_WINDOW_SIZE_Y%20%2B%20DATA_WINDOW_MARGIN%29%3B%0A%09%2F%2F%20label%0A%09buffer.strokeWeight%281%29%3B%0A%09buffer.textSize%281.5%20%2a%20TEXT_SIZE%29%3B%0A%09buffer.text%28%22H%C3%B6he%22%2C%20DATA_WINDOW_MARGIN%2C%20DATA_WINDOW_MARGIN%20-%201.5%20%2a%20TEXT_SIZE%29%3B%0A%09%2F%2F%20ticks%20and%20numbers%0A%09buffer.strokeWeight%28PIXEL_SIZE%29%3B%0A%09buffer.textSize%28TEXT_SIZE%29%3B%0A%09for%20%28let%20i%20%3D%20AXIS_RANGE_Y%3B%20i%20%3E%3D%200%3B%20i%20%3D%20i%20-%201%29%20%7B%0A%09%09buffer.line%28DATA_WINDOW_MARGIN%2C%20DATA_WINDOW_MARGIN%20%2B%20i%20%2a%20stretch_y%2C%20DATA_WINDOW_MARGIN%20-%20CROSS_SIZE%2C%20DATA_WINDOW_MARGIN%20%2B%20i%20%2a%20stretch_y%29%3B%0A%09%09buffer.strokeWeight%281%29%3B%0A%09%09buffer.text%28AXIS_RANGE_Y%20-%20i%2C%20DATA_WINDOW_MARGIN%20-%201.5%20%2a%20TEXT_SIZE%2C%20DATA_WINDOW_MARGIN%20%2B%20i%20%2a%20stretch_y%29%3B%0A%09%09buffer.strokeWeight%28PIXEL_SIZE%29%3B%0A%09%7D%0A%0A%09%2F%2F%20draw%20blue%20crosse%20for%20each%20training%20sample%0A%09buffer.strokeWeight%28PIXEL_SIZE%29%3B%0A%09for%20%28let%20i%20%3D%200%3B%20i%20%3C%20inputData.length%3B%20i%2B%2B%29%20%7B%0A%09%09buffer.stroke%28%22blue%22%29%3B%0A%09%09buffer.line%28stretch_x%20%2a%20inputData%5Bi%5D%5B0%5D%20%2B%20DATA_WINDOW_MARGIN%20%2B%20CROSS_SIZE%2C%20DATA_WINDOW_SIZE_Y%20%2B%20DATA_WINDOW_MARGIN%20-%20%28stretch_y%20%2a%20outputData%5Bi%5D%5B0%5D%20%2B%20CROSS_SIZE%29%2C%20stretch_x%20%2a%20inputData%5Bi%5D%5B0%5D%20%2B%20DATA_WINDOW_MARGIN%20-%20CROSS_SIZE%2C%20DATA_WINDOW_SIZE_Y%20%2B%20DATA_WINDOW_MARGIN%20-%20%28stretch_y%20%2a%20outputData%5Bi%5D%5B0%5D%20-%20CROSS_SIZE%29%29%3B%0A%09%09buffer.line%28stretch_x%20%2a%20inputData%5Bi%5D%5B0%5D%20%2B%20DATA_WINDOW_MARGIN%20-%20CROSS_SIZE%2C%20DATA_WINDOW_SIZE_Y%20%2B%20DATA_WINDOW_MARGIN%20-%20%28stretch_y%20%2a%20outputData%5Bi%5D%5B0%5D%20%2B%20CROSS_SIZE%29%2C%20stretch_x%20%2a%20inputData%5Bi%5D%5B0%5D%20%2B%20DATA_WINDOW_MARGIN%20%2B%20CROSS_SIZE%2C%20DATA_WINDOW_SIZE_Y%20%2B%20DATA_WINDOW_MARGIN%20-%20%28stretch_y%20%2a%20outputData%5Bi%5D%5B0%5D%20-%20CROSS_SIZE%29%29%3B%0A%09%7D%0A%0A%09%2F%2F%20assign%20local%20buffer%20to%20global%20buffer%0A%09axesTrainingSamplesBuffer%20%3D%20buffer%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%20p5.js%20setup%28%29%0A%2F%2F%0Aasync%20function%20setup%28%29%20%7B%0A%0A%20%20%20%20%2F%2F%20check%20for%20computable%20parameters%0A%09if%20%28THROWING_DISTANCE%20%3E%2040%29%20%7B%0A%09%09console.log%28%22%E2%9A%A0%EF%B8%8F%20Sorry%2C%20der%20virtuelle%20Kugelstossplatz%20ist%20nur%2040%20Meter%20lang.%22%29%3B%0A%09%09console.log%28%22Mit%20diesen%20Einstellungen%20w%C3%BCrde%20die%20Kugel%20%22%20%2B%20THROWING_DISTANCE.toFixed%282%29%20%2B%20%22%20Meter%20weit%20fliegen.%22%29%3B%0A%09%09console.log%28%22Bitte%20w%C3%A4hle%20realistischere%20Wurfparameter.%22%29%3B%0A%09%09return%3B%0A%09%7D%0A%09if%20%28THROWING_DISTANCE%20%3C%201%29%20%7B%0A%09%09console.log%28%22%E2%9A%A0%EF%B8%8F%20Sorry%2C%20W%C3%BCrfe%20von%20weniger%20als%201%20Meter%20oder%20in%20die%20falsch%20Richtung%20sind%20gef%C3%A4hrlich.%22%29%3B%0A%09%09console.log%28%22Mit%20diesen%20Einstellungen%20w%C3%BCrde%20die%20Kugel%20%22%20%2B%20THROWING_DISTANCE.toFixed%282%29%20%2B%20%22%20Meter%20weit%20fliegen.%22%29%3B%0A%09%09console.log%28%22Bitte%20w%C3%A4hle%20realistischere%20Wurfparameter.%22%29%3B%0A%09%09return%3B%0A%09%7D%0A%0A%09%2F%2F%20initiate%20console%20output%0A%09console.log%28%22%7C%7C%20Epoche%20%7C%7C%20%20%20%20MSE%20%20%20%20%7C%7C%22%29%3B%0A%0A%09%2F%2F%20create%20canvas%0A%09createCanvas%28DATA_WINDOW_SIZE_X%20%2B%202%20%2a%20DATA_WINDOW_MARGIN%2C%20DATA_WINDOW_SIZE_Y%20%2B%202%20%2a%20DATA_WINDOW_MARGIN%29%3B%0A%0A%09%2F%2F%20generate%20data%0A%09let%20%5BinputArray%2C%20outputArray%2C%20testingArray%5D%20%3D%20generateSamples%28%29%3B%0A%0A%09%2F%2F%20create%20grafic%20buffer%20for%20axes%20and%20training%20samples%0A%09drawAxesTrainingSamplesInBuffer%28inputArray%2C%20outputArray%29%3B%0A%0A%09%2F%2F%20preprocess%20data%20for%20training%0A%09let%20%5BinputTensor%2C%20outputTensor%2C%20testingTensor%5D%20%3D%20generateTensors%28inputArray%2C%20outputArray%2C%20testingArray%29%3B%0A%0A%09%2F%2F%20define%20model%0A%09compileModel%28inputTensor%2C%20outputTensor%29%3B%0A%0A%09%2F%2F%20train%20and%20visualise%20neural%20network%0A%09await%20trainModel%28inputTensor%2C%20outputTensor%2C%20testingTensor%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%20or%20%C2%A7%20%3D%20emergency%20stop%0A%2F%2F%0Afunction%20keyPressed%28%29%20%7B%0A%09if%20%28keyCode%20%3D%3D%3D%2027%20%7C%7C%20keyCode%20%3D%3D%3D%20192%29%20%7B%20%2F%2F%20ESC%20or%20%C2%A7%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%09drawApproximation%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#Kugelstossen3}} | {{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%20Parameter%20d%C3%BCrfen%20ge%C3%A4ndert%20werden.%0A%0A%2F%2F%20Neuronale%20Netz%20Parameter%0Aconst%20LERNRATE%20%3D%200.1%3B%20%2F%2F%20Dezimalzahl%20%3E%200%0Aconst%20ANZAHL_HIDDEN_NEURONS%20%3D%205%3B%20%2F%2F%20ganzzahliger%20Wert%20%3E%200%0Aconst%20ANZAHL_EPOCHEN%20%3D%201500%3B%20%2F%2F%20ganzzahliger%20Wert%20%3E%200%0A%0A%2F%2F%20Anzeigeparameter%0Aconst%20EPOCHEN_FUER_GRAFIK_UPDATE%20%3D%2050%3B%20%2F%2F%20ganzzahlig%20Wert%20%3E%200%0A%0A%2F%2F%20Wurfparameter%0Aconst%20ABWURFGESCHWINDIGKEIT%20%3D%2014.5%3B%20%2F%2F%20m%2Fs%0Aconst%20ABWURFWINKEL%20%3D%2040%3B%20%2F%2F%20%C2%B0%0Aconst%20ABWURFHOEHE%20%3D%202.3%3B%20%2F%2F%20m%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%2F%2F%20physical%20constants%0Aconst%20GRAVITY%20%3D%209.81%3B%20%2F%2F%20m%2Fs%5E2%0Aconst%20THROWING_DISTANCE%20%3D%20getThrowingDistance%28%29%3B%0A%0A%2F%2F%20options%0Aconst%20INPUT_RANGE%20%3D%20Math.floor%28THROWING_DISTANCE%29%2a3%2F4%3B%0Aconst%20INPUT_STEP%20%3D%20Math.max%280.5%2CMath.round%28THROWING_DISTANCE%2F10%29%29%3B%0Aconst%20AXIS_RANGE_X%20%3D%20Math.ceil%28THROWING_DISTANCE%29%20%2B%204%3B%0Aconst%20AXIS_RANGE_Y%20%3D%20Math.ceil%28getMaximumHeight%28%29%29%20%2B%201%3B%0Aconst%20NUM_DATA_PIXEL%20%3D%2050%3B%0Aconst%20DATA_WINDOW_SIZE_X%20%3D%20500%3B%0Aconst%20DATA_WINDOW_SIZE_Y%20%3D%20240%3B%0Aconst%20DATA_WINDOW_MARGIN%20%3D%2030%3B%0Aconst%20PIXEL_SIZE%20%3D%203%3B%0Aconst%20CROSS_SIZE%20%3D%205%3B%0Aconst%20TEXT_SIZE%20%3D%2012%3B%0A%0A%2F%2F%20global%20variables%0Alet%20model%2C%20inputSamplesMax%2C%20inputSamplesMin%2C%20outputSamplesMax%2C%20outputSamplesMin%2C%20actualEpoch%2C%20actualLogs%2C%20axesTrainingSamplesBuffer%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%20Physical%20Modelling%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%20pysical%20correct%20training%20data%0A%2F%2F%0Afunction%20generateSamples%28%29%20%7B%0A%0A%09%2F%2F%20generate%20training%20data%0A%09let%20inputSamplesArray%20%3D%20%5B%5D%3B%0A%09let%20outputSamplesArray%20%3D%20%5B%5D%3B%0A%09for%20%28let%20s%20%3D%200%3B%20s%20%3C%3D%20INPUT_RANGE%3B%20s%20%3D%20s%20%2B%20INPUT_STEP%29%20%7B%0A%09%09inputSamplesArray.push%28%5Bs%5D%29%3B%0A%09%09outputSamplesArray.push%28%5BgetHeight%28s%29%5D%29%3B%0A%09%7D%0A%0A%09%2F%2F%20calulate%20global%20normalization%20bounds%0A%09inputSamplesMax%20%3D%20Math.max.apply%28null%2C%20inputSamplesArray%29%3B%0A%09inputSamplesMin%20%3D%20Math.min.apply%28null%2C%20inputSamplesArray%29%3B%0A%09outputSamplesMax%20%3D%20Math.max.apply%28null%2C%20outputSamplesArray%29%3B%0A%09outputSamplesMin%20%3D%20Math.min.apply%28null%2C%20outputSamplesArray%29%3B%0A%0A%09%2F%2F%20generate%20testing%20data%20for%20visualization%0A%09let%20testingSamplesArray%20%3D%20%5B%5D%3B%0A%09for%20%28let%20i%20%3D%200%3B%20i%20%3C%3D%20NUM_DATA_PIXEL%3B%20i%20%3D%20i%20%2B%20AXIS_RANGE_X%20%2F%20NUM_DATA_PIXEL%29%20%7B%0A%09%09testingSamplesArray.push%28%5B%28i%20-%20inputSamplesMin%29%20%2F%20%28inputSamplesMax%20-%20inputSamplesMin%29%5D%29%3B%0A%09%7D%0A%0A%0A%09%2F%2F%20return%20input%20and%20output%20samples%0A%09return%20%5BinputSamplesArray%2C%20outputSamplesArray%2C%20testingSamplesArray%5D%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20returns%20height%20given%20a%20distance%0A%2F%2F%0Afunction%20getHeight%28distance%29%20%7B%0A%0A%09return%20-GRAVITY%20%2a%20distance%20%2a%20distance%20%2F%20%282%20%2a%20ABWURFGESCHWINDIGKEIT%20%2a%20ABWURFGESCHWINDIGKEIT%20%2a%20Math.cos%28ABWURFWINKEL%20%2a%20Math.PI%20%2F%20180%29%20%2a%20Math.cos%28ABWURFWINKEL%20%2a%20Math.PI%20%2F%20180%29%29%20%2B%20Math.tan%28ABWURFWINKEL%20%2a%20Math.PI%20%2F%20180%29%20%2a%20distance%20%2B%20ABWURFHOEHE%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20returns%20throwing%20distance%0A%2F%2F%0Afunction%20getThrowingDistance%28%29%20%7B%0A%0A%09return%20ABWURFGESCHWINDIGKEIT%20%2a%20ABWURFGESCHWINDIGKEIT%20%2F%20GRAVITY%20%2a%20Math.cos%28ABWURFWINKEL%20%2a%20Math.PI%20%2F%20180%29%20%2a%20%28Math.sin%28ABWURFWINKEL%20%2a%20Math.PI%20%2F%20180%29%20%2B%20Math.sqrt%28Math.sin%28ABWURFWINKEL%20%2a%20Math.PI%20%2F%20180%29%20%2a%20Math.sin%28ABWURFWINKEL%20%2a%20Math.PI%20%2F%20180%29%20%2B%202%20%2a%20GRAVITY%20%2a%20ABWURFHOEHE%20%2F%20%28ABWURFGESCHWINDIGKEIT%20%2a%20ABWURFGESCHWINDIGKEIT%29%29%29%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20returns%20maximal%20height%0A%2F%2F%0Afunction%20getMaximumHeight%28%29%20%7B%0A%09return%20ABWURFGESCHWINDIGKEIT%20%2a%20ABWURFGESCHWINDIGKEIT%20%2a%20Math.sin%28ABWURFWINKEL%20%2a%20Math.PI%20%2F%20180%29%20%2a%20Math.sin%28ABWURFWINKEL%20%2a%20Math.PI%20%2F%20180%29%20%2F%20%282%20%2a%20GRAVITY%29%20%2B%20ABWURFHOEHE%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%20generate%20data%20tensors%0A%2F%2F%0Afunction%20generateTensors%28inputSamples%2C%20outputSamples%2C%20testingSamples%29%20%7B%0A%0A%09%2F%2F%20normalize%20training%20data%0A%09for%20%28let%20i%20%3D%200%3B%20i%20%3C%20inputSamples.length%3B%20i%20%3D%20i%20%2B%201%29%20%7B%0A%09%09inputSamples%5Bi%5D%5B0%5D%20%3D%20%28inputSamples%5Bi%5D%5B0%5D%20-%20inputSamplesMin%29%20%2F%20%28inputSamplesMax%20-%20inputSamplesMin%29%3B%0A%09%09outputSamples%5Bi%5D%5B0%5D%20%3D%20%28outputSamples%5Bi%5D%5B0%5D%20-%20outputSamplesMin%29%20%2F%20%28outputSamplesMax%20-%20outputSamplesMin%29%3B%0A%09%7D%0A%0A%09%2F%2F%20generate%20training%20input%20and%20output%20tensors%0A%09let%20trainingInputTensor%20%3D%20tf.tensor2d%28inputSamples%2C%20%5BinputSamples.length%2C%201%5D%29%3B%0A%09let%20trainingOutputTensor%20%3D%20tf.tensor2d%28outputSamples%2C%20%5BoutputSamples.length%2C%201%5D%29%3B%0A%09%2F%2F%20trainingOutputTensor.print%28%29%3B%20%2F%2F%20display%20tensor%20in%20the%20console%0A%0A%09%2F%2F%20generate%20testing%20input%20tensor%20for%20visualisation%0A%09let%20testingInputTensor%20%3D%20tf.tensor2d%28testingSamples%2C%20%5BtestingSamples.length%2C%201%5D%29%3B%0A%09%2F%2F%20testingInputTensor.print%28%29%3B%20%2F%2F%20display%20tensor%20in%20the%20console%0A%0A%09return%20%5BtrainingInputTensor%2C%20trainingOutputTensor%2C%20testingInputTensor%5D%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%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%5B1%5D%2C%0A%09%09%09%09units%3A%20ANZAHL_HIDDEN_NEURONS%2C%0A%09%09%09%09activation%3A%20%27sigmoid%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%0A%09%2F%2F%20neural%20network%20configuration%0A%09model.compile%28%7B%0A%09%09optimizer%3A%20tf.train.adam%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%28trainInput%2C%20trainOutput%2C%20testingInput%29%20%7B%0A%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%20%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%09drawApproximation%28actualEpoch%2C%20logs.loss%2C%20testingInput%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%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%2F%2F%0A%2F%2F%20decision%20boundary%20and%20network%20output%0A%2F%2F%0Afunction%20drawApproximation%28epoch%2C%20mseTrain%2C%20testingTensor%29%20%7B%0A%0A%09let%20throwingDistance%20%3D%20-1%3B%0A%0A%09%2F%2F%20calculate%20scaling%20factors%0A%09let%20stretch_x%20%3D%20DATA_WINDOW_SIZE_X%20%2F%20AXIS_RANGE_X%3B%0A%09let%20stretch_y%20%3D%20DATA_WINDOW_SIZE_Y%20%2F%20AXIS_RANGE_Y%3B%0A%0A%09%2F%2F%20calculate%20approximation%20with%20the%20current%20neural%20network%0A%09let%20prediction%20%3D%20model.predict%28testingTensor%29.arraySync%28%29%3B%0A%0A%09%2F%2F%20reset%20grafic%20and%20draw%20axes%20and%20training%20samples%0A%09background%28%22white%22%29%3B%0A%09image%28axesTrainingSamplesBuffer%2C%200%2C%200%29%3B%0A%0A%09%2F%2F%20draw%20approximation%0A%09strokeWeight%28PIXEL_SIZE%29%3B%0A%09stroke%28%22red%22%29%3B%0A%09for%20%28i%20%3D%200%3B%20i%20%3C%20NUM_DATA_PIXEL%3B%20i%20%3D%20i%20%2B%201%29%20%7B%0A%09%09line%28DATA_WINDOW_MARGIN%20%2B%20i%20%2a%20DATA_WINDOW_SIZE_X%20%2F%20NUM_DATA_PIXEL%2C%20DATA_WINDOW_SIZE_Y%20%2B%20DATA_WINDOW_MARGIN%20-%20%28prediction%5Bi%5D%5B0%5D%20%2a%20%28outputSamplesMax%20-%20outputSamplesMin%29%20%2B%20outputSamplesMin%29%20%2a%20stretch_y%2C%20DATA_WINDOW_MARGIN%20%2B%20%28i%20%2B%201%29%20%2a%20DATA_WINDOW_SIZE_X%20%2F%20NUM_DATA_PIXEL%2C%20DATA_WINDOW_SIZE_Y%20%2B%20DATA_WINDOW_MARGIN%20-%20%28prediction%5Bi%20%2B%201%5D%5B0%5D%20%2a%20%28outputSamplesMax%20-%20outputSamplesMin%29%20%2B%20outputSamplesMin%29%20%2a%20stretch_y%29%3B%0A%09%09if%20%28prediction%5Bi%20%2B%201%5D%5B0%5D%20%2a%20%28outputSamplesMax%20-%20outputSamplesMin%29%20%2B%20outputSamplesMin%20%3C%200%20%26%26%20prediction%5Bi%5D%5B0%5D%20%2a%20%28outputSamplesMax%20-%20outputSamplesMin%29%20%2B%20outputSamplesMin%20%3E%3D%200%29%20%7B%0A%09%09%09throwingDistance%20%3D%20i%20%2a%20AXIS_RANGE_X%20%2F%20NUM_DATA_PIXEL%20%2B%201.0%20%2a%20AXIS_RANGE_X%20%2F%20NUM_DATA_PIXEL%20%2a%20%28prediction%5Bi%5D%5B0%5D%20%2a%20%28outputSamplesMax%20-%20outputSamplesMin%29%20%2B%20outputSamplesMin%29%20%2F%20%28%28prediction%5Bi%5D%5B0%5D%20-%20prediction%5Bi%20%2B%201%5D%5B0%5D%29%20%2a%20%28outputSamplesMax%20-%20outputSamplesMin%29%29%3B%0A%09%09%7D%0A%09%7D%0A%0A%09%2F%2F%20print%20training%20results%0A%09strokeWeight%281%29%3B%0A%09fill%28%22red%22%29%3B%0A%09textSize%281.25%20%2a%20TEXT_SIZE%29%3B%0A%09text%28%22Kugelstossweite%22%2C%20DATA_WINDOW_SIZE_X%20-%20DATA_WINDOW_MARGIN%20-%206%20%2a%20TEXT_SIZE%2C%20DATA_WINDOW_MARGIN%29%3B%0A%09text%28%22Berechnet%3A%20%20%20%20%20%20%22%20%2B%20THROWING_DISTANCE.toFixed%282%29.padStart%286%2C%20%22%20%22%29%2C%20DATA_WINDOW_SIZE_X%20-%20DATA_WINDOW_MARGIN%20-%206%20%2a%20TEXT_SIZE%2C%20DATA_WINDOW_MARGIN%20%2B%202%20%2a%20TEXT_SIZE%29%3B%0A%09if%20%28throwingDistance%20%3D%3D%3D%20-1%29%20%7B%0A%09%09text%28%22KI-Sch%C3%A4tzung%3A%20-%22%2C%20DATA_WINDOW_SIZE_X%20-%20DATA_WINDOW_MARGIN%20-%206%20%2a%20TEXT_SIZE%2C%20DATA_WINDOW_MARGIN%20%2B%204%20%2a%20TEXT_SIZE%29%3B%0A%09%7D%20else%20%7B%0A%09%09text%28%22KI-Sch%C3%A4tzung%3A%20%22%20%2B%20throwingDistance.toFixed%282%29.padStart%286%2C%20%22%20%22%29%2C%20DATA_WINDOW_SIZE_X%20-%20DATA_WINDOW_MARGIN%20-%206%20%2a%20TEXT_SIZE%2C%20DATA_WINDOW_MARGIN%20%2B%204%20%2a%20TEXT_SIZE%29%3B%0A%09%7D%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%20mseTrain.toFixed%285%29.padStart%289%2C%20%22%20%22%29%20%2B%20%22%20%7C%7C%22%29%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20draw%20chart%20axes%20in%20graphic%20buffer%0A%2F%2F%0Afunction%20drawAxesTrainingSamplesInBuffer%28inputData%2C%20outputData%29%20%7B%0A%0A%09%2F%2F%20calculate%20scaling%20factors%0A%09let%20stretch_x%20%3D%20DATA_WINDOW_SIZE_X%20%2F%20AXIS_RANGE_X%3B%0A%09let%20stretch_y%20%3D%20DATA_WINDOW_SIZE_Y%20%2F%20AXIS_RANGE_Y%3B%0A%0A%09%2F%2F%20create%20buffer%0A%09buffer%20%3D%20createGraphics%28DATA_WINDOW_SIZE_X%20%2B%202%20%2a%20DATA_WINDOW_MARGIN%2C%20DATA_WINDOW_SIZE_Y%20%2B%202%20%2a%20DATA_WINDOW_MARGIN%29%3B%0A%09buffer.strokeWeight%28PIXEL_SIZE%29%3B%0A%09buffer.textAlign%28CENTER%2C%20CENTER%29%3B%0A%09textSize%28TEXT_SIZE%29%3B%0A%0A%09%2F%2F%20draw%20x-axis%0A%09buffer.stroke%28%22black%22%29%3B%0A%09buffer.line%28DATA_WINDOW_MARGIN%2C%20DATA_WINDOW_SIZE_Y%20%2B%20DATA_WINDOW_MARGIN%2C%20DATA_WINDOW_SIZE_X%20%2B%20DATA_WINDOW_MARGIN%2C%20DATA_WINDOW_SIZE_Y%20%2B%20DATA_WINDOW_MARGIN%29%3B%0A%09%2F%2F%20label%0A%09buffer.strokeWeight%281%29%3B%0A%09buffer.textSize%281.5%20%2a%20TEXT_SIZE%29%3B%0A%09buffer.text%28%22Weite%22%2C%20DATA_WINDOW_SIZE_X%20%2B%20DATA_WINDOW_MARGIN%2C%20DATA_WINDOW_SIZE_Y%20%2B%20DATA_WINDOW_MARGIN%20-%201.5%20%2a%20TEXT_SIZE%29%3B%0A%09%2F%2F%20ticks%20and%20numbers%0A%09buffer.textSize%28TEXT_SIZE%29%3B%0A%09buffer.strokeWeight%28PIXEL_SIZE%29%3B%0A%09for%20%28let%20i%20%3D%200%3B%20i%20%3C%3D%20AXIS_RANGE_X%3B%20i%20%3D%20i%20%2B%201%29%20%7B%0A%09%09buffer.line%28DATA_WINDOW_MARGIN%20%2B%20i%20%2a%20stretch_x%2C%20DATA_WINDOW_SIZE_Y%20%2B%20DATA_WINDOW_MARGIN%2C%20DATA_WINDOW_MARGIN%20%2B%20i%20%2a%20stretch_x%2C%20DATA_WINDOW_SIZE_Y%20%2B%20DATA_WINDOW_MARGIN%20%2B%20CROSS_SIZE%29%3B%0A%09%09buffer.strokeWeight%281%29%3B%0A%09%09buffer.text%28i%2C%20DATA_WINDOW_MARGIN%20%2B%20i%20%2a%20stretch_x%2C%20DATA_WINDOW_SIZE_Y%20%2B%20DATA_WINDOW_MARGIN%20%2B%201.5%20%2a%20TEXT_SIZE%29%3B%0A%09%09buffer.strokeWeight%28PIXEL_SIZE%29%3B%0A%09%7D%0A%0A%09%2F%2F%20draw%20y-axis%0A%09buffer.line%28DATA_WINDOW_MARGIN%2C%20DATA_WINDOW_MARGIN%2C%20DATA_WINDOW_MARGIN%2C%20DATA_WINDOW_SIZE_Y%20%2B%20DATA_WINDOW_MARGIN%29%3B%0A%09%2F%2F%20label%0A%09buffer.strokeWeight%281%29%3B%0A%09buffer.textSize%281.5%20%2a%20TEXT_SIZE%29%3B%0A%09buffer.text%28%22H%C3%B6he%22%2C%20DATA_WINDOW_MARGIN%2C%20DATA_WINDOW_MARGIN%20-%201.5%20%2a%20TEXT_SIZE%29%3B%0A%09%2F%2F%20ticks%20and%20numbers%0A%09buffer.strokeWeight%28PIXEL_SIZE%29%3B%0A%09buffer.textSize%28TEXT_SIZE%29%3B%0A%09for%20%28let%20i%20%3D%20AXIS_RANGE_Y%3B%20i%20%3E%3D%200%3B%20i%20%3D%20i%20-%201%29%20%7B%0A%09%09buffer.line%28DATA_WINDOW_MARGIN%2C%20DATA_WINDOW_MARGIN%20%2B%20i%20%2a%20stretch_y%2C%20DATA_WINDOW_MARGIN%20-%20CROSS_SIZE%2C%20DATA_WINDOW_MARGIN%20%2B%20i%20%2a%20stretch_y%29%3B%0A%09%09buffer.strokeWeight%281%29%3B%0A%09%09buffer.text%28AXIS_RANGE_Y%20-%20i%2C%20DATA_WINDOW_MARGIN%20-%201.5%20%2a%20TEXT_SIZE%2C%20DATA_WINDOW_MARGIN%20%2B%20i%20%2a%20stretch_y%29%3B%0A%09%09buffer.strokeWeight%28PIXEL_SIZE%29%3B%0A%09%7D%0A%0A%09%2F%2F%20draw%20blue%20crosse%20for%20each%20training%20sample%0A%09buffer.strokeWeight%28PIXEL_SIZE%29%3B%0A%09for%20%28let%20i%20%3D%200%3B%20i%20%3C%20inputData.length%3B%20i%2B%2B%29%20%7B%0A%09%09buffer.stroke%28%22blue%22%29%3B%0A%09%09buffer.line%28stretch_x%20%2a%20inputData%5Bi%5D%5B0%5D%20%2B%20DATA_WINDOW_MARGIN%20%2B%20CROSS_SIZE%2C%20DATA_WINDOW_SIZE_Y%20%2B%20DATA_WINDOW_MARGIN%20-%20%28stretch_y%20%2a%20outputData%5Bi%5D%5B0%5D%20%2B%20CROSS_SIZE%29%2C%20stretch_x%20%2a%20inputData%5Bi%5D%5B0%5D%20%2B%20DATA_WINDOW_MARGIN%20-%20CROSS_SIZE%2C%20DATA_WINDOW_SIZE_Y%20%2B%20DATA_WINDOW_MARGIN%20-%20%28stretch_y%20%2a%20outputData%5Bi%5D%5B0%5D%20-%20CROSS_SIZE%29%29%3B%0A%09%09buffer.line%28stretch_x%20%2a%20inputData%5Bi%5D%5B0%5D%20%2B%20DATA_WINDOW_MARGIN%20-%20CROSS_SIZE%2C%20DATA_WINDOW_SIZE_Y%20%2B%20DATA_WINDOW_MARGIN%20-%20%28stretch_y%20%2a%20outputData%5Bi%5D%5B0%5D%20%2B%20CROSS_SIZE%29%2C%20stretch_x%20%2a%20inputData%5Bi%5D%5B0%5D%20%2B%20DATA_WINDOW_MARGIN%20%2B%20CROSS_SIZE%2C%20DATA_WINDOW_SIZE_Y%20%2B%20DATA_WINDOW_MARGIN%20-%20%28stretch_y%20%2a%20outputData%5Bi%5D%5B0%5D%20-%20CROSS_SIZE%29%29%3B%0A%09%7D%0A%0A%09%2F%2F%20assign%20local%20buffer%20to%20global%20buffer%0A%09axesTrainingSamplesBuffer%20%3D%20buffer%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%20p5.js%20setup%28%29%0A%2F%2F%0Aasync%20function%20setup%28%29%20%7B%0A%0A%20%20%20%20%2F%2F%20check%20for%20computable%20parameters%0A%09if%20%28THROWING_DISTANCE%20%3E%2040%29%20%7B%0A%09%09console.log%28%22%E2%9A%A0%EF%B8%8F%20Sorry%2C%20der%20virtuelle%20Kugelstossplatz%20ist%20nur%2040%20Meter%20lang.%22%29%3B%0A%09%09console.log%28%22Mit%20diesen%20Einstellungen%20w%C3%BCrde%20die%20Kugel%20%22%20%2B%20THROWING_DISTANCE.toFixed%282%29%20%2B%20%22%20Meter%20weit%20fliegen.%22%29%3B%0A%09%09console.log%28%22Bitte%20w%C3%A4hle%20realistischere%20Wurfparameter.%22%29%3B%0A%09%09return%3B%0A%09%7D%0A%09if%20%28THROWING_DISTANCE%20%3C%201%29%20%7B%0A%09%09console.log%28%22%E2%9A%A0%EF%B8%8F%20Sorry%2C%20W%C3%BCrfe%20von%20weniger%20als%201%20Meter%20oder%20in%20die%20falsch%20Richtung%20sind%20gef%C3%A4hrlich.%22%29%3B%0A%09%09console.log%28%22Mit%20diesen%20Einstellungen%20w%C3%BCrde%20die%20Kugel%20%22%20%2B%20THROWING_DISTANCE.toFixed%282%29%20%2B%20%22%20Meter%20weit%20fliegen.%22%29%3B%0A%09%09console.log%28%22Bitte%20w%C3%A4hle%20realistischere%20Wurfparameter.%22%29%3B%0A%09%09return%3B%0A%09%7D%0A%0A%09%2F%2F%20initiate%20console%20output%0A%09console.log%28%22%7C%7C%20Epoche%20%7C%7C%20%20%20%20MSE%20%20%20%20%7C%7C%22%29%3B%0A%0A%09%2F%2F%20create%20canvas%0A%09createCanvas%28DATA_WINDOW_SIZE_X%20%2B%202%20%2a%20DATA_WINDOW_MARGIN%2C%20DATA_WINDOW_SIZE_Y%20%2B%202%20%2a%20DATA_WINDOW_MARGIN%29%3B%0A%0A%09%2F%2F%20generate%20data%0A%09let%20%5BinputArray%2C%20outputArray%2C%20testingArray%5D%20%3D%20generateSamples%28%29%3B%0A%0A%09%2F%2F%20create%20grafic%20buffer%20for%20axes%20and%20training%20samples%0A%09drawAxesTrainingSamplesInBuffer%28inputArray%2C%20outputArray%29%3B%0A%0A%09%2F%2F%20preprocess%20data%20for%20training%0A%09let%20%5BinputTensor%2C%20outputTensor%2C%20testingTensor%5D%20%3D%20generateTensors%28inputArray%2C%20outputArray%2C%20testingArray%29%3B%0A%0A%09%2F%2F%20define%20model%0A%09compileModel%28inputTensor%2C%20outputTensor%29%3B%0A%0A%09%2F%2F%20train%20and%20visualise%20neural%20network%0A%09await%20trainModel%28inputTensor%2C%20outputTensor%2C%20testingTensor%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%20or%20%C2%A7%20%3D%20emergency%20stop%0A%2F%2F%0Afunction%20keyPressed%28%29%20%7B%0A%09if%20%28keyCode%20%3D%3D%3D%2027%20%7C%7C%20keyCode%20%3D%3D%3D%20192%29%20%7B%20%2F%2F%20ESC%20or%20%C2%A7%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%09drawApproximation%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#Kugelstossen3}} |
- Starte das neuronales Netz Training, indem du auf den Button ''▶Run'' klickst. | - Starte das neuronales Netz Training, indem du auf den Button ''▶Run'' klickst. |
- Wie gut schätzt hier das neuronale Netz die Wurfweite ab? Was macht das neuronale Netz im Bereich wo keine Trainingsdaten da sind? Was bedeutet das für andere neuronale Netze, wie z.B. einen KI-Chatbot (z.B. ChatGPT)? Halte deine Überlegungen im Textfeld fest {{gem/plain?0=N4XyA#c3e16c0eab92579f}}. | - Wie gut schätzt hier das neuronale Netz die Wurfweite ab? Was macht das neuronale Netz im Bereich wo keine Trainingsdaten da sind? Was bedeutet das für andere neuronale Netze, wie z.B. einen KI-Chatbot (z.B. ChatGPT)? Halte deine Überlegungen im Textfeld fest. {{gem/plain?0=N4XyA#c3e16c0eab92579f}} |
- Vergleiche deine Überlegungen mit ++unseren Überlegungen|\\ \\ Wo das neuronale Netz keine Daten hat macht es irgendetwas. Wird z.B. in ChatGPT eine Frage eingegeben, welche selten oder nicht in den Trainingstexten vorkommt, so wird irgendetwas ausgegeben.\\ \\ ++. | - Vergleiche deine Überlegungen mit ++unseren Überlegungen|\\ \\ Wo das neuronale Netz keine Daten hat macht es irgendetwas. Wird z.B. in ChatGPT eine Frage eingegeben, welche selten oder nicht in den Trainingstexten vorkommt, so wird irgendetwas ausgegeben.\\ \\ ++. |
</WRAP> | </WRAP> |
===== - Funktionen erraten ===== | ===== - Funktionen erraten ===== |
| |
💡 Ein Zusammenhang kann mathematisch durch eine Funktion beschrieben werden. Wenn $x$ zum Resultat $y$ führt, dann wird das als $y = f(x)$ geschreiben, wobei $x$ eine Eingabe / Aktion / Beobachtung / etc. sein kann und die Funktion $f$ den gesuchten Zusammenhang beschreibt. Wenn wir mit einen neuronalen Netz eine Kurve durch Punkte legen, dann erlernt das neuronale Netz eine Funktion, welche durch alle Punkte geht. In der Fachsprache wird dies als "Funktionsapproximation" bezeichnet. | 💡 Ein Zusammenhang kann mathematisch durch eine Funktion beschrieben werden. Wenn $x$ zum Resultat $y$ führt, dann wird das als $y = f(x)$ geschreiben, wobei $x$ eine Eingabe / Aktion / Beobachtung / etc. sein kann und die Funktion $f$ den gesuchten Zusammenhang beschreibt. Wenn wir mit einem neuronalen Netz eine Kurve durch Punkte legen, dann erlernt das neuronale Netz eine Funktion, welche durch alle Punkte geht. In der Fachsprache wird dies als "Funktionsapproximation" bezeichnet. |
| |
<WRAP center round box > | <WRAP center round box > |
- Starte das neuronales Netz Training, indem du auf den Button ''▶Run'' klickst und etwas wartest.\\ 💡 Es kann sein, dass es das neuronale Netz nicht schafft eine Linie durch alle Punkte zu legen. Starte in diesem Fall das Training einfach noch einmal neu. Da jedes Training mit anderen, zufällig gewählten Anfangsgewichten startet, führt jedes Training zu einem anderen Resultat. \\ 💡 Es kann sein, dass die rote Linie ab und zu "springt". Das liegt daran, dass die Lernrate relativ gross eingestellt ist. Dafür läuft das Training einigermassen flott. | - Starte das neuronales Netz Training, indem du auf den Button ''▶Run'' klickst und etwas wartest.\\ 💡 Es kann sein, dass es das neuronale Netz nicht schafft eine Linie durch alle Punkte zu legen. Starte in diesem Fall das Training einfach noch einmal neu. Da jedes Training mit anderen, zufällig gewählten Anfangsgewichten startet, führt jedes Training zu einem anderen Resultat. \\ 💡 Es kann sein, dass die rote Linie ab und zu "springt". Das liegt daran, dass die Lernrate relativ gross eingestellt ist. Dafür läuft das Training einigermassen flott. |
- Stelle die ''ANZAHL_HIDDEN_NEURONS'' auf ''50'' ein. Siehst du einen Unterschied? Wie kannst du dir das erklären? {{gem/plain?0=N4XyA#d93535b2b7fd4f84}}. | - Stelle die ''ANZAHL_HIDDEN_NEURONS'' auf ''50'' ein. Siehst du einen Unterschied? Wie kannst du dir das erklären? {{gem/plain?0=N4XyA#d93535b2b7fd4f84}}. |
- Vergleiche deine Überlegungen mit ++unseren Überlegungen|\\ \\ Das neuronale Netz mit fünf Hidden Neuronen erzeugt relativ glatte Kurven. Das neuronale Netz mit 50 Hidden Neuronen erzeugt manchmal besonders in der Nähe der Trainingsdaten (Kreuze) Ecken und Kanten. Für den Fehler ist es jedoch nur wichtig, dass die Trainingsdaten möglichst gut getroffen werden. Ob die rote Kurve neben den Trainingspunkten noch weitere Ecken und Kanten aufweist, spielt für den Fehler keine Rolle. Ein neuronales Netz mit "nur" fünf Hidden Neuronen kann nicht allzuviel lernen, dies genügt gerade um genügend viele Kurven zu erzeugen um die Aufgabe zu lösen, daher sieht diese Lösung "glatt" aus. Mit 50 Hidden Neuronen kann das neuronale Netz noch viel kompliziertere Funktionen erlernen, daher kann es sein, das es zufällig auserhalb der Kreuze Ecken und Kanten bildet. Wo das neuronale Netz keine Daten hat, macht es irgendetwas...\\ \\ ++. | - Vergleiche deine Überlegungen mit ++unseren Überlegungen|\\ \\ Das neuronale Netz mit fünf Hidden Neuronen erzeugt relativ glatte Kurven. Das neuronale Netz mit 50 Hidden Neuronen erzeugt manchmal besonders in der Nähe der Trainingsdaten (Kreuze) Ecken und Kanten. Für den Fehler ist es jedoch nur wichtig, dass die Trainingsdaten möglichst gut getroffen werden. Ob die rote Kurve neben den Trainingspunkten noch weitere Ecken und Kanten aufweist, spielt für den Fehler keine Rolle. Ein neuronales Netz mit "nur" fünf Hidden Neuronen kann nicht allzu viel lernen, dies genügt gerade um genügend viele Kurven zu erzeugen um die Aufgabe zu lösen, daher sieht diese Lösung "glatt" aus. Mit 50 Hidden Neuronen kann das neuronale Netz noch viel kompliziertere Funktionen erlernen, daher kann es sein, das es zufällig ausserhalb der Kreuze Ecken und Kanten bildet. Wo das neuronale Netz keine Daten hat, macht es irgendetwas...\\ \\ ++. |
- Wenn du Lust hast, darfst du eigene Trainingspunkte eingeben. Es gehören immer eine x-Koordinate und eine y-Koordinate zusammen (die erste x-Koordinate gehört zur ersten y-Koordinate, die zweite zur Zweiten usw.), daher braucht es gleich viele x-Koordinaten wie y-Koordinaten. Viel Spass! | - Wenn du Lust hast, darfst du eigene Trainingspunkte eingeben. Es gehören immer eine x-Koordinate und eine y-Koordinate zusammen (die erste x-Koordinate gehört zur ersten y-Koordinate, die zweite zur Zweiten usw.), daher braucht es gleich viele x-Koordinaten wie y-Koordinaten. Viel Spass! |
</WRAP> | </WRAP> |