From 89e1c3637fe302c2b15b96bf89c8a01d2d693f29 Mon Sep 17 00:00:00 2001 From: mhjensen Date: Wed, 23 Dec 2020 23:19:14 +0100 Subject: [PATCH] added files --- doc/src/Bayesian/.chapter11.copyright | 1 + .../LectureNotes/VaryDimensionPredicted12.csv | 20 + .../_build/.doctrees/chapter1.doctree | Bin 101891 -> 101931 bytes .../_build/.doctrees/chapter10.doctree | Bin 0 -> 833791 bytes .../_build/.doctrees/chapter11.doctree | Bin 0 -> 178980 bytes .../_build/.doctrees/chapter2.doctree | Bin 312052 -> 311039 bytes .../_build/.doctrees/chapter3.doctree | Bin 264224 -> 264224 bytes .../_build/.doctrees/chapter4.doctree | Bin 856696 -> 856696 bytes .../_build/.doctrees/chapter6.doctree | Bin 464745 -> 619755 bytes .../_build/.doctrees/chapter8.doctree | Bin 477080 -> 481079 bytes .../_build/.doctrees/chapter9.doctree | Bin 171334 -> 171336 bytes .../_build/.doctrees/environment.pickle | Bin 381182 -> 420681 bytes .../_build/jupyter_execute/chapter2.doctree | Bin 245821 -> 245821 bytes .../.doctrees/testbook/chapter2.doctree | Bin 245752 -> 245752 bytes .../_build/html/_images/chapter10_11_326.png | Bin 0 -> 13138 bytes .../_build/html/_images/chapter10_11_328.png | Bin 0 -> 12990 bytes .../_build/html/_images/chapter10_11_687.png | Bin 0 -> 13512 bytes .../_build/html/_images/chapter10_11_688.png | Bin 0 -> 14023 bytes .../_build/html/_images/chapter10_1_0.png | Bin 0 -> 19858 bytes .../_build/html/_images/chapter10_1_197.png | Bin 0 -> 31357 bytes .../_build/html/_images/chapter10_59_2.png | Bin 0 -> 23442 bytes .../_build/html/_images/chapter10_7_411.png | Bin 0 -> 16969 bytes .../_build/html/_images/chapter10_7_413.png | Bin 0 -> 13154 bytes .../_build/html/_images/chapter10_9_421.png | Bin 0 -> 16384 bytes .../_build/html/_images/chapter10_9_423.png | Bin 0 -> 13503 bytes .../_build/html/_images/chapter2_178_0.png | Bin 5171 -> 5163 bytes .../_build/html/_images/chapter2_184_1.png | Bin 10572 -> 9828 bytes .../_build/html/_images/chapter4_278_2.png | Bin 9440 -> 9431 bytes .../_build/html/_images/chapter6_134_1.png | Bin 0 -> 22270 bytes .../_build/html/_images/chapter6_134_2.png | Bin 0 -> 28089 bytes .../_build/html/_images/chapter6_138_0.png | Bin 0 -> 26198 bytes .../_build/html/_images/chapter6_138_1.png | Bin 0 -> 27885 bytes .../_build/html/_images/chapter8_77_1.png | Bin 24893 -> 27981 bytes .../_build/html/_sources/chapter10.ipynb | 3815 ++++ .../_build/html/_sources/chapter11.ipynb | 1030 + .../LectureNotes/_build/html/chapter1.html | 20 + .../LectureNotes/_build/html/chapter10.html | 9723 +++++++++ .../LectureNotes/_build/html/chapter11.html | 899 + .../LectureNotes/_build/html/chapter2.html | 82 +- .../LectureNotes/_build/html/chapter3.html | 24 +- .../LectureNotes/_build/html/chapter4.html | 192 +- .../LectureNotes/_build/html/chapter5.html | 20 + .../LectureNotes/_build/html/chapter6.html | 369 + .../LectureNotes/_build/html/chapter7.html | 20 + .../LectureNotes/_build/html/chapter8.html | 202 +- .../LectureNotes/_build/html/chapter9.html | 64 +- .../LectureNotes/_build/html/genindex.html | 20 + doc/src/LectureNotes/_build/html/objects.inv | Bin 1092 -> 1117 bytes .../_build/html/reports/chapter10.log | 39 + .../_build/html/reports/chapter11.log | 36 + .../_build/html/reports/chapter6.log | 40 +- doc/src/LectureNotes/_build/html/search.html | 20 + .../LectureNotes/_build/html/searchindex.js | 2 +- .../_build/jupyter_execute/chapter1.html | 20 + .../_build/jupyter_execute/chapter2.html | 24 +- .../_build/jupyter_execute/chapter3.html | 20 + .../_build/jupyter_execute/chapter4.html | 20 + .../_build/jupyter_execute/chapter5.html | 20 + .../_build/jupyter_execute/chapter6.html | 20 + .../_build/jupyter_execute/chapter7.html | 20 + .../lecturenotes/lecturenotes/notebooks.html | 20 + .../_build/jupyter_execute/notebooks.html | 20 + .../_build/html/testbook/chapter1.html | 20 + .../_build/html/testbook/chapter2.html | 24 +- .../_build/html/testbook/chapter3.html | 20 + .../_build/html/testbook/chapter4.html | 20 + .../_build/html/testbook/chapter5.html | 20 + .../_build/html/testbook/chapter6.html | 20 + .../_build/html/testbook/chapter7.html | 20 + .../_build/html/testbook/content.html | 20 + .../_build/html/testbook/intro.html | 20 + .../html/testbook/lecturenotes/CONDUCT.html | 20 + .../testbook/lecturenotes/CONTRIBUTING.html | 20 + .../html/testbook/lecturenotes/README.html | 20 + .../lecturenotes/lecturenotes/content.html | 20 + .../lecturenotes/lecturenotes/intro.html | 20 + .../lecturenotes/lecturenotes/markdown.html | 20 + .../lecturenotes/lecturenotes/notebooks.html | 20 + .../_build/html/testbook/markdown.html | 20 + .../_build/jupyter_execute/chapter1.ipynb | 2 + .../_build/jupyter_execute/chapter1.txt | 2 + .../_build/jupyter_execute/chapter10.ipynb | 17610 ++++++++++++++++ .../_build/jupyter_execute/chapter10.py | 3058 +++ .../jupyter_execute/chapter10_11_326.png | Bin 0 -> 13138 bytes .../jupyter_execute/chapter10_11_328.png | Bin 0 -> 12990 bytes .../jupyter_execute/chapter10_11_687.png | Bin 0 -> 13512 bytes .../jupyter_execute/chapter10_11_688.png | Bin 0 -> 14023 bytes .../_build/jupyter_execute/chapter10_1_0.png | Bin 0 -> 19858 bytes .../jupyter_execute/chapter10_1_197.png | Bin 0 -> 31357 bytes .../_build/jupyter_execute/chapter10_59_2.png | Bin 0 -> 23442 bytes .../jupyter_execute/chapter10_7_411.png | Bin 0 -> 16969 bytes .../jupyter_execute/chapter10_7_413.png | Bin 0 -> 13154 bytes .../jupyter_execute/chapter10_9_421.png | Bin 0 -> 16384 bytes .../jupyter_execute/chapter10_9_423.png | Bin 0 -> 13503 bytes .../_build/jupyter_execute/chapter11.ipynb | 1055 + .../_build/jupyter_execute/chapter11.py | 712 + .../_build/jupyter_execute/chapter2.ipynb | 66 +- .../_build/jupyter_execute/chapter2_178_0.png | Bin 5171 -> 5163 bytes .../_build/jupyter_execute/chapter2_184_1.png | Bin 10572 -> 9828 bytes .../_build/jupyter_execute/chapter3.ipynb | 4 +- .../_build/jupyter_execute/chapter4.ipynb | 174 +- .../_build/jupyter_execute/chapter4_278_2.png | Bin 9440 -> 9431 bytes .../_build/jupyter_execute/chapter6.ipynb | 708 +- .../_build/jupyter_execute/chapter6_134_1.png | Bin 0 -> 22270 bytes .../_build/jupyter_execute/chapter6_134_2.png | Bin 0 -> 28089 bytes .../_build/jupyter_execute/chapter6_138_0.png | Bin 0 -> 26198 bytes .../_build/jupyter_execute/chapter6_138_1.png | Bin 0 -> 27885 bytes .../_build/jupyter_execute/chapter8.ipynb | 190 +- .../_build/jupyter_execute/chapter8_77_1.png | Bin 24893 -> 27981 bytes .../_build/jupyter_execute/chapter9.ipynb | 42 +- .../_build/jupyter_execute/chapter2.ipynb | 4 +- .../jupyter_execute/testbook/chapter2.ipynb | 4 +- doc/src/LectureNotes/_toc.yml | 4 +- doc/src/LectureNotes/chapter10.ipynb | 3815 ++++ doc/src/LectureNotes/chapter11.ipynb | 1030 + doc/src/LectureNotes/gaussian.pdf | Bin 229813 -> 229813 bytes 116 files changed, 45130 insertions(+), 516 deletions(-) create mode 100644 doc/src/Bayesian/.chapter11.copyright create mode 100644 doc/src/LectureNotes/VaryDimensionPredicted12.csv create mode 100644 doc/src/LectureNotes/_build/.doctrees/chapter10.doctree create mode 100644 doc/src/LectureNotes/_build/.doctrees/chapter11.doctree create mode 100644 doc/src/LectureNotes/_build/html/_images/chapter10_11_326.png create mode 100644 doc/src/LectureNotes/_build/html/_images/chapter10_11_328.png create mode 100644 doc/src/LectureNotes/_build/html/_images/chapter10_11_687.png create mode 100644 doc/src/LectureNotes/_build/html/_images/chapter10_11_688.png create mode 100644 doc/src/LectureNotes/_build/html/_images/chapter10_1_0.png create mode 100644 doc/src/LectureNotes/_build/html/_images/chapter10_1_197.png create mode 100644 doc/src/LectureNotes/_build/html/_images/chapter10_59_2.png create mode 100644 doc/src/LectureNotes/_build/html/_images/chapter10_7_411.png create mode 100644 doc/src/LectureNotes/_build/html/_images/chapter10_7_413.png create mode 100644 doc/src/LectureNotes/_build/html/_images/chapter10_9_421.png create mode 100644 doc/src/LectureNotes/_build/html/_images/chapter10_9_423.png create mode 100644 doc/src/LectureNotes/_build/html/_images/chapter6_134_1.png create mode 100644 doc/src/LectureNotes/_build/html/_images/chapter6_134_2.png create mode 100644 doc/src/LectureNotes/_build/html/_images/chapter6_138_0.png create mode 100644 doc/src/LectureNotes/_build/html/_images/chapter6_138_1.png create mode 100644 doc/src/LectureNotes/_build/html/_sources/chapter10.ipynb create mode 100644 doc/src/LectureNotes/_build/html/_sources/chapter11.ipynb create mode 100644 doc/src/LectureNotes/_build/html/chapter10.html create mode 100644 doc/src/LectureNotes/_build/html/chapter11.html create mode 100644 doc/src/LectureNotes/_build/html/reports/chapter10.log create mode 100644 doc/src/LectureNotes/_build/html/reports/chapter11.log create mode 100644 doc/src/LectureNotes/_build/jupyter_execute/chapter10.ipynb create mode 100644 doc/src/LectureNotes/_build/jupyter_execute/chapter10.py create mode 100644 doc/src/LectureNotes/_build/jupyter_execute/chapter10_11_326.png create mode 100644 doc/src/LectureNotes/_build/jupyter_execute/chapter10_11_328.png create mode 100644 doc/src/LectureNotes/_build/jupyter_execute/chapter10_11_687.png create mode 100644 doc/src/LectureNotes/_build/jupyter_execute/chapter10_11_688.png create mode 100644 doc/src/LectureNotes/_build/jupyter_execute/chapter10_1_0.png create mode 100644 doc/src/LectureNotes/_build/jupyter_execute/chapter10_1_197.png create mode 100644 doc/src/LectureNotes/_build/jupyter_execute/chapter10_59_2.png create mode 100644 doc/src/LectureNotes/_build/jupyter_execute/chapter10_7_411.png create mode 100644 doc/src/LectureNotes/_build/jupyter_execute/chapter10_7_413.png create mode 100644 doc/src/LectureNotes/_build/jupyter_execute/chapter10_9_421.png create mode 100644 doc/src/LectureNotes/_build/jupyter_execute/chapter10_9_423.png create mode 100644 doc/src/LectureNotes/_build/jupyter_execute/chapter11.ipynb create mode 100644 doc/src/LectureNotes/_build/jupyter_execute/chapter11.py create mode 100644 doc/src/LectureNotes/_build/jupyter_execute/chapter6_134_1.png create mode 100644 doc/src/LectureNotes/_build/jupyter_execute/chapter6_134_2.png create mode 100644 doc/src/LectureNotes/_build/jupyter_execute/chapter6_138_0.png create mode 100644 doc/src/LectureNotes/_build/jupyter_execute/chapter6_138_1.png create mode 100644 doc/src/LectureNotes/chapter10.ipynb create mode 100644 doc/src/LectureNotes/chapter11.ipynb diff --git a/doc/src/Bayesian/.chapter11.copyright b/doc/src/Bayesian/.chapter11.copyright new file mode 100644 index 000000000..98e7e541c --- /dev/null +++ b/doc/src/Bayesian/.chapter11.copyright @@ -0,0 +1 @@ +{'holder': ['Morten Hjorth-Jensen'], 'year': '1999-2020', 'license': 'Released under CC Attribution-NonCommercial 4.0 license', 'cite doconce': False} \ No newline at end of file diff --git a/doc/src/LectureNotes/VaryDimensionPredicted12.csv b/doc/src/LectureNotes/VaryDimensionPredicted12.csv new file mode 100644 index 000000000..40e4fae96 --- /dev/null +++ b/doc/src/LectureNotes/VaryDimensionPredicted12.csv @@ -0,0 +1,20 @@ +-3.077640548999999864e-02 +-8.336233265999999642e-02 +-1.446729566999999939e-01 +-2.116753731999999888e-01 +-2.830637391999999974e-01 +-3.581341341000000011e-01 +-4.364624349999999819e-01 +-5.177783846000000301e-01 +-6.019067271000000385e-01 +-6.887363571000000295e-01 +-7.782028951999999666e-01 +-8.702784033999999558e-01 +-9.671434760093688965e-01 +-1.065430045127868652e+00 +-1.166525721549987793e+00 +-1.269154906272888184e+00 +-1.373405933380126953e+00 +-1.478558778762817383e+00 +-1.584262609481811523e+00 +-1.689914822578430176e+00 diff --git a/doc/src/LectureNotes/_build/.doctrees/chapter1.doctree b/doc/src/LectureNotes/_build/.doctrees/chapter1.doctree index 3657701e8860a1b95cdefdc60befeb1502693454..c495661058533c3d44dbd4a470ceef3f7c21fe22 100644 GIT binary patch delta 152 zcmZpk!?t=3Tf-Da9wza=t$d7Io2C7FIFmCH3rbRp3=O8VO+n%sPCwAhXvd!QS%85d z>+AI2&5RQme{b(;VLZdkXtzDGgK<7Hn}i@xPIUUeZbma{0T7!PNR;+)<|XE)mQ)s` o7Eh_2qLC#r-M@!XnHQwMuQWprBqTb$zK79*k$3x!9!76Q0JIn}wc6!?{9$bp0er!Vhe Ov|!}i{-B4^n-Ku%?ZD-+3g=C?S;J!FF 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%0D0f?^Q3dSudGZA0EY4p^+Fs%q? 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 Ir3z;MAH3+1MgRZ+ literal 0 HcmV?d00001 diff --git a/doc/src/LectureNotes/_build/.doctrees/chapter2.doctree b/doc/src/LectureNotes/_build/.doctrees/chapter2.doctree index 94baf2ba41a592d8d1d81e56903d426877efa708..235df8a6ef559d3dc1002da56802ec6a8ac229a8 100644 GIT binary patch delta 20817 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 delta 21819 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 delta 153 zcmW-ZI}XAy5JVNINR=aOlQNd~;~o1jkW)}1=x8WXubd5n>5yhA&h6Ks%MH?%dIW*D40fqukXl#I}h%~M@RxYWhDF)O7C!+u0j*?7U fFVI+}Xwuqh)=bBKJzv(x;Xck?&F(YK`|s-qk>Ml1 diff --git a/doc/src/LectureNotes/_build/.doctrees/chapter4.doctree b/doc/src/LectureNotes/_build/.doctrees/chapter4.doctree index ad50241a33deff1011585d54ab5a2c462e0eecf8..86ee05621d464249d4e1ae70ac31d48126fad393 100644 GIT binary patch delta 15050 zcma)jYs~EGRo*!#Wanf!Bp@y=5WyE{5~!Q)`;Ces&(-4@UuMQ*dz_vkU*~3fY>(~n zxT>Z|sG(9RYDx4d{ee)0gj6I@rB+)=ZKJAGBB)J%6xv@+TB&LI1Nm2h_(7Lv=G)&s zh$7}_f9LhselP1?>silQ>zzOP73zu+hm)p zALc{{d&$FxV@UWzP#i_Fo!7VJ#h}BymB5{hqX_CL) zYTu$>@(jUY6vy)fO|Tf=`9k^kzOeiHdvCqZ*N|G^FP1yo4@(dfZ<5qcX{^n zzxw$P!M|^Ve;};4c{hBWaxH;gWnHUJ?{dvmB4XCEIymUotF5Q9Q}D*KnI5 zXqtkh!6gGPV+@7E8}KrYJ&-RMl7j^hRD0Qh+XO}7ERV79H2*-oBxveFfW&Us^h=B) z7?2H&g|{8=FPptS&SnXw(YE)H_MYeMi6W}HRgeTNz)|BFxSo)m^i^O3{0l&n{FqL;|$M{ zO#3$Ve&_Kg|L2PzdHm`(UwrokYj^0O-G0~tnj>yaoF_^C+GIgiG<|Kt;IP4++t&mS zYq)()^8|it((M}VO`NCkTgM;)47Q>j15^m7U^#7@;$e`_-A17Z82k1jNrOD`+tZ*p z@b&d!mdBafG$;(Faq9vm2{OJu0NRDIw`U0qH0}Xb`SyQ%@yW;k{=Z?BFqu};51)li zp)iKQNw#g{1O|gK%(YFzX29;>+8ozvQRm^a*h{Y6GoGccZ5}oV=iz0T6f6o<aBYLdVEEck0A^4JGSXd6UIf|x8{?>*m5un}gcZPvelzH$FJM}~5M33M4KQDgt zLNhQtMu0Xz17mU6cTh7B7R|x3iI;dQc-SFmVm!;x7}#s8X*AJ}-RdL*Ly;gDXwozT z5{DfoUV^#M1VOW)b~vi|>BuZ~pZA*h_ebr9o1yWzir?5)g?5dEqz@hRnfEGM&$T?y5f|$Qs6M zC(8p|fcC%NdHCELmk)T`A5DSmsrTRSeBtq@U%j2Z`uVTD`3zVYtQf5)Zw&RcJN?sKrWBuy}& z4OdM9ZG?F-w^@Pm;V=}~e>-773J@g0w|!kT0yYcGrB!5@D{KgH9R`-kl7JFC1C|D2 zW*L|lP2S(4c@o3vRtYbl34jy~SnK^B$pW&|06Wkl0q-#&)cdV=eSkyPDZ=tWbqP>E zn8(%7Fp6*0mj)bdRfHhgTP-kx{6S4X9OO$7HO1l7bsjK98oQ8y30Cjql?w&^UZrxuSgdnh z&{ZY?4mW|oxAb+mt2AEAg6qH&pc+>}w5^*MI#+1{*nl=aOP~Xye_HdxxNG_YT1z?;Ua^81&^j z9+>O>Hq{zD^w{n*%;eVN^K_p2!7&V+aC;Y87$8~uF!%=k_6Cp=`Zh%#wh83-0Gsnh zhtI3JJk93={Q&;nd%WUm+c(Ezx8(!qQ0?qsW8diUSvuEc{h8_9;Q2a5rd{8)LmGU@ z!=-J4;az)#>-N_55BDtP*V1`oS!7aBwfyg<2heKq zvhA=1I_T@t>hbFySq^~t);Exm`(gkO?k(^c_ZGu&_ZXi_ zZx_vRBoLx&3+Vs-W#BV+(E^`&>KYdK_zQ1;^q&LPJSoicM#B`JcIa8M&k}iF%54fy zP{X~}I2ik`DbHK{yfx1vWtq#9Fz$9c-4>jlW@N$A&&05@~n>8sscu@<1{ z$zYxp{aHhwHS1X;Zd>^TCU?ud+VIul+Sbid+SX0Q+ty7rudS;}wYm;Q4=m|5jPT5p zUV&$S!d!^V?nXcY@4C&O0789lQNU8JMn}MEp{v&B+d-Z?fPm<(;NTqZib(?1y4>I6 zpR|==fs5Yy0-oFI{FCiIPvLbB(7}^zi6^_q81nuGK+3Hv;8m?de!>heyQejf7wF

ts00TO*Jh1Y9%V+zk5Ks0k32$;l^jq=Q;71tdo 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 delta 14942 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 diff --git a/doc/src/LectureNotes/_build/html/_sources/chapter10.ipynb b/doc/src/LectureNotes/_build/html/_sources/chapter10.ipynb new file mode 100644 index 000000000..be47c97e1 --- /dev/null +++ b/doc/src/LectureNotes/_build/html/_sources/chapter10.ipynb @@ -0,0 +1,3815 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Recurrent Neural Networks\n", + "\n", + "[Overview video](https://www.youtube.com/watch?v=SEnXr6v2ifU&ab_channel=AlexanderAmini).\n", + "See also lecture on Thursday October 22 and examples from [week 42](https://compphysics.github.io/MachineLearning/doc/pub/week42/html/week42.html).\n", + "\n", + "[IN5400 at UiO Lecture](https://www.uio.no/studier/emner/matnat/ifi/IN5400/v20/material/week10/in5400_2020_week10_recurrent_neural_network.pdf)\n", + "\n", + "[CS231 at Stanford Lecture](https://www.youtube.com/watch?v=6niqTuYFZLQ&list=PLzUTmXVwsnXod6WNdg57Yc3zFx_f-RYsq&index=10&ab_channel=StanfordUniversitySchoolofEngineering)\n", + "\n", + "## Recurrent neural networks: Overarching view\n", + "\n", + "Till now our focus has been, including convolutional neural networks\n", + "as well, on feedforward neural networks. The output or the activations\n", + "flow only in one direction, from the input layer to the output layer.\n", + "\n", + "A recurrent neural network (RNN) looks very much like a feedforward\n", + "neural network, except that it also has connections pointing\n", + "backward. \n", + "\n", + "RNNs are used to analyze time series data such as stock prices, and\n", + "tell you when to buy or sell. In autonomous driving systems, they can\n", + "anticipate car trajectories and help avoid accidents. More generally,\n", + "they can work on sequences of arbitrary lengths, rather than on\n", + "fixed-sized inputs like all the nets we have discussed so far. For\n", + "example, they can take sentences, documents, or audio samples as\n", + "input, making them extremely useful for natural language processing\n", + "systems such as automatic translation and speech-to-text.\n", + "\n", + "\n", + "\n", + "\n", + "## Set up of an RNN\n", + "\n", + "\n", + "Text to come.\n", + "\n", + "\n", + "## A simple example" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "\n", + "# Start importing packages\n", + "import pandas as pd\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import tensorflow as tf\n", + "from tensorflow.keras import datasets, layers, models\n", + "from tensorflow.keras.layers import Input\n", + "from tensorflow.keras.models import Model, Sequential \n", + "from tensorflow.keras.layers import Dense, SimpleRNN, LSTM, GRU\n", + "from tensorflow.keras import optimizers \n", + "from tensorflow.keras import regularizers \n", + "from tensorflow.keras.utils import to_categorical \n", + "\n", + "\n", + "\n", + "# convert into dataset matrix\n", + "def convertToMatrix(data, step):\n", + " X, Y =[], []\n", + " for i in range(len(data)-step):\n", + " d=i+step \n", + " X.append(data[i:d,])\n", + " Y.append(data[d,])\n", + " return np.array(X), np.array(Y)\n", + "\n", + "step = 4\n", + "N = 1000 \n", + "Tp = 800 \n", + "\n", + "t=np.arange(0,N)\n", + "x=np.sin(0.02*t)+2*np.random.rand(N)\n", + "df = pd.DataFrame(x)\n", + "df.head()\n", + "\n", + "plt.plot(df)\n", + "plt.show()\n", + "\n", + "values=df.values\n", + "train,test = values[0:Tp,:], values[Tp:N,:]\n", + "\n", + "# add step elements into train and test\n", + "test = np.append(test,np.repeat(test[-1,],step))\n", + "train = np.append(train,np.repeat(train[-1,],step))\n", + " \n", + "trainX,trainY =convertToMatrix(train,step)\n", + "testX,testY =convertToMatrix(test,step)\n", + "trainX = np.reshape(trainX, (trainX.shape[0], 1, trainX.shape[1]))\n", + "testX = np.reshape(testX, (testX.shape[0], 1, testX.shape[1]))\n", + "\n", + "model = Sequential()\n", + "model.add(SimpleRNN(units=32, input_shape=(1,step), activation=\"relu\"))\n", + "model.add(Dense(8, activation=\"relu\")) \n", + "model.add(Dense(1))\n", + "model.compile(loss='mean_squared_error', optimizer='rmsprop')\n", + "model.summary()\n", + "\n", + "model.fit(trainX,trainY, epochs=100, batch_size=16, verbose=2)\n", + "trainPredict = model.predict(trainX)\n", + "testPredict= model.predict(testX)\n", + "predicted=np.concatenate((trainPredict,testPredict),axis=0)\n", + "\n", + "trainScore = model.evaluate(trainX, trainY, verbose=0)\n", + "print(trainScore)\n", + "\n", + "index = df.index.values\n", + "plt.plot(index,df)\n", + "plt.plot(index,predicted)\n", + "plt.axvline(df.index[Tp], c=\"r\")\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## An extrapolation example\n", + "\n", + "The following code provides an example of how recurrent neural\n", + "networks can be used to extrapolate to unknown values of physics data\n", + "sets. Specifically, the data sets used in this program come from\n", + "a quantum mechanical many-body calculation of energies as functions of the number of particles." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "\n", + "# For matrices and calculations\n", + "import numpy as np\n", + "# For machine learning (backend for keras)\n", + "import tensorflow as tf\n", + "# User-friendly machine learning library\n", + "# Front end for TensorFlow\n", + "import tensorflow.keras\n", + "# Different methods from Keras needed to create an RNN\n", + "# This is not necessary but it shortened function calls \n", + "# that need to be used in the code.\n", + "from tensorflow.keras import datasets, layers, models\n", + "from tensorflow.keras.layers import Input\n", + "from tensorflow.keras import regularizers\n", + "from tensorflow.keras.models import Model, Sequential\n", + "from tensorflow.keras.layers import Dense, SimpleRNN, LSTM, GRU\n", + "# For timing the code\n", + "from timeit import default_timer as timer\n", + "# For plotting\n", + "import matplotlib.pyplot as plt\n", + "\n", + "\n", + "# The data set\n", + "datatype='VaryDimension'\n", + "X_tot = np.arange(2, 42, 2)\n", + "y_tot = np.array([-0.03077640549, -0.08336233266, -0.1446729567, -0.2116753732, -0.2830637392, -0.3581341341, -0.436462435, -0.5177783846,\n", + "\t-0.6019067271, -0.6887363571, -0.7782028952, -0.8702784034, -0.9649652536, -1.062292565, -1.16231451, \n", + "\t-1.265109911, -1.370782966, -1.479465113, -1.591317992, -1.70653767])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Formatting the Data\n", + "\n", + "The way the recurrent neural networks are trained in this program\n", + "differs from how machine learning algorithms are usually trained.\n", + "Typically a machine learning algorithm is trained by learning the\n", + "relationship between the x data and the y data. In this program, the\n", + "recurrent neural network will be trained to recognize the relationship\n", + "in a sequence of y values. This is type of data formatting is\n", + "typically used time series forcasting, but it can also be used in any\n", + "extrapolation (time series forecasting is just a specific type of\n", + "extrapolation along the time axis). This method of data formatting\n", + "does not use the x data and assumes that the y data are evenly spaced.\n", + "\n", + "For a standard machine learning algorithm, the training data has the\n", + "form of (x,y) so the machine learning algorithm learns to assiciate a\n", + "y value with a given x value. This is useful when the test data has x\n", + "values within the same range as the training data. However, for this\n", + "application, the x values of the test data are outside of the x values\n", + "of the training data and the traditional method of training a machine\n", + "learning algorithm does not work as well. For this reason, the\n", + "recurrent neural network is trained on sequences of y values of the\n", + "form ((y1, y2), y3), so that the network is concerned with learning\n", + "the pattern of the y data and not the relation between the x and y\n", + "data. As long as the pattern of y data outside of the training region\n", + "stays relatively stable compared to what was inside the training\n", + "region, this method of training can produce accurate extrapolations to\n", + "y values far removed from the training data set.\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# FORMAT_DATA\n", + "def format_data(data, length_of_sequence = 2): \n", + " \"\"\"\n", + " Inputs:\n", + " data(a numpy array): the data that will be the inputs to the recurrent neural\n", + " network\n", + " length_of_sequence (an int): the number of elements in one iteration of the\n", + " sequence patter. For a function approximator use length_of_sequence = 2.\n", + " Returns:\n", + " rnn_input (a 3D numpy array): the input data for the recurrent neural network. Its\n", + " dimensions are length of data - length of sequence, length of sequence, \n", + " dimnsion of data\n", + " rnn_output (a numpy array): the training data for the neural network\n", + " Formats data to be used in a recurrent neural network.\n", + " \"\"\"\n", + "\n", + " X, Y = [], []\n", + " for i in range(len(data)-length_of_sequence):\n", + " # Get the next length_of_sequence elements\n", + " a = data[i:i+length_of_sequence]\n", + " # Get the element that immediately follows that\n", + " b = data[i+length_of_sequence]\n", + " # Reshape so that each data point is contained in its own array\n", + " a = np.reshape (a, (len(a), 1))\n", + " X.append(a)\n", + " Y.append(b)\n", + " rnn_input = np.array(X)\n", + " rnn_output = np.array(Y)\n", + "\n", + " return rnn_input, rnn_output\n", + "\n", + "\n", + "# ## Defining the Recurrent Neural Network Using Keras\n", + "# \n", + "# The following method defines a simple recurrent neural network in keras consisting of one input layer, one hidden layer, and one output layer.\n", + "\n", + "def rnn(length_of_sequences, batch_size = None, stateful = False):\n", + " \"\"\"\n", + " Inputs:\n", + " length_of_sequences (an int): the number of y values in \"x data\". This is determined\n", + " when the data is formatted\n", + " batch_size (an int): Default value is None. See Keras documentation of SimpleRNN.\n", + " stateful (a boolean): Default value is False. See Keras documentation of SimpleRNN.\n", + " Returns:\n", + " model (a Keras model): The recurrent neural network that is built and compiled by this\n", + " method\n", + " Builds and compiles a recurrent neural network with one hidden layer and returns the model.\n", + " \"\"\"\n", + " # Number of neurons in the input and output layers\n", + " in_out_neurons = 1\n", + " # Number of neurons in the hidden layer\n", + " hidden_neurons = 200\n", + " # Define the input layer\n", + " inp = Input(batch_shape=(batch_size, \n", + " length_of_sequences, \n", + " in_out_neurons)) \n", + " # Define the hidden layer as a simple RNN layer with a set number of neurons and add it to \n", + " # the network immediately after the input layer\n", + " rnn = SimpleRNN(hidden_neurons, \n", + " return_sequences=False,\n", + " stateful = stateful,\n", + " name=\"RNN\")(inp)\n", + " # Define the output layer as a dense neural network layer (standard neural network layer)\n", + " #and add it to the network immediately after the hidden layer.\n", + " dens = Dense(in_out_neurons,name=\"dense\")(rnn)\n", + " # Create the machine learning model starting with the input layer and ending with the \n", + " # output layer\n", + " model = Model(inputs=[inp],outputs=[dens])\n", + " # Compile the machine learning model using the mean squared error function as the loss \n", + " # function and an Adams optimizer.\n", + " model.compile(loss=\"mean_squared_error\", optimizer=\"adam\") \n", + " return model" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Predicting New Points With A Trained Recurrent Neural Network" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def test_rnn (x1, y_test, plot_min, plot_max):\n", + " \"\"\"\n", + " Inputs:\n", + " x1 (a list or numpy array): The complete x component of the data set\n", + " y_test (a list or numpy array): The complete y component of the data set\n", + " plot_min (an int or float): the smallest x value used in the training data\n", + " plot_max (an int or float): the largest x valye used in the training data\n", + " Returns:\n", + " None.\n", + " Uses a trained recurrent neural network model to predict future points in the \n", + " series. Computes the MSE of the predicted data set from the true data set, saves\n", + " the predicted data set to a csv file, and plots the predicted and true data sets w\n", + " while also displaying the data range used for training.\n", + " \"\"\"\n", + " # Add the training data as the first dim points in the predicted data array as these\n", + " # are known values.\n", + " y_pred = y_test[:dim].tolist()\n", + " # Generate the first input to the trained recurrent neural network using the last two \n", + " # points of the training data. Based on how the network was trained this means that it\n", + " # will predict the first point in the data set after the training data. All of the \n", + " # brackets are necessary for Tensorflow.\n", + " next_input = np.array([[[y_test[dim-2]], [y_test[dim-1]]]])\n", + " # Save the very last point in the training data set. This will be used later.\n", + " last = [y_test[dim-1]]\n", + "\n", + " # Iterate until the complete data set is created.\n", + " for i in range (dim, len(y_test)):\n", + " # Predict the next point in the data set using the previous two points.\n", + " next = model.predict(next_input)\n", + " # Append just the number of the predicted data set\n", + " y_pred.append(next[0][0])\n", + " # Create the input that will be used to predict the next data point in the data set.\n", + " next_input = np.array([[last, next[0]]], dtype=np.float64)\n", + " last = next\n", + "\n", + " # Print the mean squared error between the known data set and the predicted data set.\n", + " print('MSE: ', np.square(np.subtract(y_test, y_pred)).mean())\n", + " # Save the predicted data set as a csv file for later use\n", + " name = datatype + 'Predicted'+str(dim)+'.csv'\n", + " np.savetxt(name, y_pred, delimiter=',')\n", + " # Plot the known data set and the predicted data set. The red box represents the region that was used\n", + " # for the training data.\n", + " fig, ax = plt.subplots()\n", + " ax.plot(x1, y_test, label=\"true\", linewidth=3)\n", + " ax.plot(x1, y_pred, 'g-.',label=\"predicted\", linewidth=4)\n", + " ax.legend()\n", + " # Created a red region to represent the points used in the training data.\n", + " ax.axvspan(plot_min, plot_max, alpha=0.25, color='red')\n", + " plt.show()\n", + "\n", + "# Check to make sure the data set is complete\n", + "assert len(X_tot) == len(y_tot)\n", + "\n", + "# This is the number of points that will be used in as the training data\n", + "dim=12\n", + "\n", + "# Separate the training data from the whole data set\n", + "X_train = X_tot[:dim]\n", + "y_train = y_tot[:dim]\n", + "\n", + "\n", + "# Generate the training data for the RNN, using a sequence of 2\n", + "rnn_input, rnn_training = format_data(y_train, 2)\n", + "\n", + "\n", + "# Create a recurrent neural network in Keras and produce a summary of the \n", + "# machine learning model\n", + "model = rnn(length_of_sequences = rnn_input.shape[1])\n", + "model.summary()\n", + "\n", + "# Start the timer. Want to time training+testing\n", + "start = timer()\n", + "# Fit the model using the training data genenerated above using 150 training iterations and a 5%\n", + "# validation split. Setting verbose to True prints information about each training iteration.\n", + "hist = model.fit(rnn_input, rnn_training, batch_size=None, epochs=150, \n", + " verbose=True,validation_split=0.05)\n", + "\n", + "for label in [\"loss\",\"val_loss\"]:\n", + " plt.plot(hist.history[label],label=label)\n", + "\n", + "plt.ylabel(\"loss\")\n", + "plt.xlabel(\"epoch\")\n", + "plt.title(\"The final validation loss: {}\".format(hist.history[\"val_loss\"][-1]))\n", + "plt.legend()\n", + "plt.show()\n", + "\n", + "# Use the trained neural network to predict more points of the data set\n", + "test_rnn(X_tot, y_tot, X_tot[0], X_tot[dim-1])\n", + "# Stop the timer and calculate the total time needed.\n", + "end = timer()\n", + "print('Time: ', end-start)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Other Things to Try\n", + "\n", + "\n", + "Changing the size of the recurrent neural network and its parameters\n", + "can drastically change the results you get from the model. The below\n", + "code takes the simple recurrent neural network from above and adds a\n", + "second hidden layer, changes the number of neurons in the hidden\n", + "layer, and explicitly declares the activation function of the hidden\n", + "layers to be a sigmoid function. The loss function and optimizer can\n", + "also be changed but are kept the same as the above network. These\n", + "parameters can be tuned to provide the optimal result from the\n", + "network. For some ideas on how to improve the performance of a\n", + "[recurrent neural network](https://danijar.com/tips-for-training-recurrent-neural-networks)." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def rnn_2layers(length_of_sequences, batch_size = None, stateful = False):\n", + " \"\"\"\n", + " Inputs:\n", + " length_of_sequences (an int): the number of y values in \"x data\". This is determined\n", + " when the data is formatted\n", + " batch_size (an int): Default value is None. See Keras documentation of SimpleRNN.\n", + " stateful (a boolean): Default value is False. See Keras documentation of SimpleRNN.\n", + " Returns:\n", + " model (a Keras model): The recurrent neural network that is built and compiled by this\n", + " method\n", + " Builds and compiles a recurrent neural network with two hidden layers and returns the model.\n", + " \"\"\"\n", + " # Number of neurons in the input and output layers\n", + " in_out_neurons = 1\n", + " # Number of neurons in the hidden layer, increased from the first network\n", + " hidden_neurons = 500\n", + " # Define the input layer\n", + " inp = Input(batch_shape=(batch_size, \n", + " length_of_sequences, \n", + " in_out_neurons)) \n", + " # Create two hidden layers instead of one hidden layer. Explicitly set the activation\n", + " # function to be the sigmoid function (the default value is hyperbolic tangent)\n", + " rnn1 = SimpleRNN(hidden_neurons, \n", + " return_sequences=True, # This needs to be True if another hidden layer is to follow\n", + " stateful = stateful, activation = 'sigmoid',\n", + " name=\"RNN1\")(inp)\n", + " rnn2 = SimpleRNN(hidden_neurons, \n", + " return_sequences=False, activation = 'sigmoid',\n", + " stateful = stateful,\n", + " name=\"RNN2\")(rnn1)\n", + " # Define the output layer as a dense neural network layer (standard neural network layer)\n", + " #and add it to the network immediately after the hidden layer.\n", + " dens = Dense(in_out_neurons,name=\"dense\")(rnn2)\n", + " # Create the machine learning model starting with the input layer and ending with the \n", + " # output layer\n", + " model = Model(inputs=[inp],outputs=[dens])\n", + " # Compile the machine learning model using the mean squared error function as the loss \n", + " # function and an Adams optimizer.\n", + " model.compile(loss=\"mean_squared_error\", optimizer=\"adam\") \n", + " return model\n", + "\n", + "# Check to make sure the data set is complete\n", + "assert len(X_tot) == len(y_tot)\n", + "\n", + "# This is the number of points that will be used in as the training data\n", + "dim=12\n", + "\n", + "# Separate the training data from the whole data set\n", + "X_train = X_tot[:dim]\n", + "y_train = y_tot[:dim]\n", + "\n", + "\n", + "# Generate the training data for the RNN, using a sequence of 2\n", + "rnn_input, rnn_training = format_data(y_train, 2)\n", + "\n", + "\n", + "# Create a recurrent neural network in Keras and produce a summary of the \n", + "# machine learning model\n", + "model = rnn_2layers(length_of_sequences = 2)\n", + "model.summary()\n", + "\n", + "# Start the timer. Want to time training+testing\n", + "start = timer()\n", + "# Fit the model using the training data genenerated above using 150 training iterations and a 5%\n", + "# validation split. Setting verbose to True prints information about each training iteration.\n", + "hist = model.fit(rnn_input, rnn_training, batch_size=None, epochs=150, \n", + " verbose=True,validation_split=0.05)\n", + "\n", + "\n", + "# This section plots the training loss and the validation loss as a function of training iteration.\n", + "# This is not required for analyzing the couple cluster data but can help determine if the network is\n", + "# being overtrained.\n", + "for label in [\"loss\",\"val_loss\"]:\n", + " plt.plot(hist.history[label],label=label)\n", + "\n", + "plt.ylabel(\"loss\")\n", + "plt.xlabel(\"epoch\")\n", + "plt.title(\"The final validation loss: {}\".format(hist.history[\"val_loss\"][-1]))\n", + "plt.legend()\n", + "plt.show()\n", + "\n", + "# Use the trained neural network to predict more points of the data set\n", + "test_rnn(X_tot, y_tot, X_tot[0], X_tot[dim-1])\n", + "# Stop the timer and calculate the total time needed.\n", + "end = timer()\n", + "print('Time: ', end-start)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Other Types of Recurrent Neural Networks\n", + "\n", + "Besides a simple recurrent neural network layer, there are two other\n", + "commonly used types of recurrent neural network layers: Long Short\n", + "Term Memory (LSTM) and Gated Recurrent Unit (GRU). For a short\n", + "introduction to these layers see \n", + "and .\n", + "\n", + "The first network created below is similar to the previous network,\n", + "but it replaces the SimpleRNN layers with LSTM layers. The second\n", + "network below has two hidden layers made up of GRUs, which are\n", + "preceeded by two dense (feeddorward) neural network layers. These\n", + "dense layers \"preprocess\" the data before it reaches the recurrent\n", + "layers. This architecture has been shown to improve the performance\n", + "of recurrent neural networks (see the link above and also\n", + "." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def lstm_2layers(length_of_sequences, batch_size = None, stateful = False):\n", + " \"\"\"\n", + " Inputs:\n", + " length_of_sequences (an int): the number of y values in \"x data\". This is determined\n", + " when the data is formatted\n", + " batch_size (an int): Default value is None. See Keras documentation of SimpleRNN.\n", + " stateful (a boolean): Default value is False. See Keras documentation of SimpleRNN.\n", + " Returns:\n", + " model (a Keras model): The recurrent neural network that is built and compiled by this\n", + " method\n", + " Builds and compiles a recurrent neural network with two LSTM hidden layers and returns the model.\n", + " \"\"\"\n", + " # Number of neurons on the input/output layer and the number of neurons in the hidden layer\n", + " in_out_neurons = 1\n", + " hidden_neurons = 250\n", + " # Input Layer\n", + " inp = Input(batch_shape=(batch_size, \n", + " length_of_sequences, \n", + " in_out_neurons)) \n", + " # Hidden layers (in this case they are LSTM layers instead if SimpleRNN layers)\n", + " rnn= LSTM(hidden_neurons, \n", + " return_sequences=True,\n", + " stateful = stateful,\n", + " name=\"RNN\", use_bias=True, activation='tanh')(inp)\n", + " rnn1 = LSTM(hidden_neurons, \n", + " return_sequences=False,\n", + " stateful = stateful,\n", + " name=\"RNN1\", use_bias=True, activation='tanh')(rnn)\n", + " # Output layer\n", + " dens = Dense(in_out_neurons,name=\"dense\")(rnn1)\n", + " # Define the midel\n", + " model = Model(inputs=[inp],outputs=[dens])\n", + " # Compile the model\n", + " model.compile(loss='mean_squared_error', optimizer='adam') \n", + " # Return the model\n", + " return model\n", + "\n", + "def dnn2_gru2(length_of_sequences, batch_size = None, stateful = False):\n", + " \"\"\"\n", + " Inputs:\n", + " length_of_sequences (an int): the number of y values in \"x data\". This is determined\n", + " when the data is formatted\n", + " batch_size (an int): Default value is None. See Keras documentation of SimpleRNN.\n", + " stateful (a boolean): Default value is False. See Keras documentation of SimpleRNN.\n", + " Returns:\n", + " model (a Keras model): The recurrent neural network that is built and compiled by this\n", + " method\n", + " Builds and compiles a recurrent neural network with four hidden layers (two dense followed by\n", + " two GRU layers) and returns the model.\n", + " \"\"\" \n", + " # Number of neurons on the input/output layers and hidden layers\n", + " in_out_neurons = 1\n", + " hidden_neurons = 250\n", + " # Input layer\n", + " inp = Input(batch_shape=(batch_size, \n", + " length_of_sequences, \n", + " in_out_neurons)) \n", + " # Hidden Dense (feedforward) layers\n", + " dnn = Dense(hidden_neurons/2, activation='relu', name='dnn')(inp)\n", + " dnn1 = Dense(hidden_neurons/2, activation='relu', name='dnn1')(dnn)\n", + " # Hidden GRU layers\n", + " rnn1 = GRU(hidden_neurons, \n", + " return_sequences=True,\n", + " stateful = stateful,\n", + " name=\"RNN1\", use_bias=True)(dnn1)\n", + " rnn = GRU(hidden_neurons, \n", + " return_sequences=False,\n", + " stateful = stateful,\n", + " name=\"RNN\", use_bias=True)(rnn1)\n", + " # Output layer\n", + " dens = Dense(in_out_neurons,name=\"dense\")(rnn)\n", + " # Define the model\n", + " model = Model(inputs=[inp],outputs=[dens])\n", + " # Compile the mdoel\n", + " model.compile(loss='mean_squared_error', optimizer='adam') \n", + " # Return the model\n", + " return model\n", + "\n", + "# Check to make sure the data set is complete\n", + "assert len(X_tot) == len(y_tot)\n", + "\n", + "# This is the number of points that will be used in as the training data\n", + "dim=12\n", + "\n", + "# Separate the training data from the whole data set\n", + "X_train = X_tot[:dim]\n", + "y_train = y_tot[:dim]\n", + "\n", + "\n", + "# Generate the training data for the RNN, using a sequence of 2\n", + "rnn_input, rnn_training = format_data(y_train, 2)\n", + "\n", + "\n", + "# Create a recurrent neural network in Keras and produce a summary of the \n", + "# machine learning model\n", + "# Change the method name to reflect which network you want to use\n", + "model = dnn2_gru2(length_of_sequences = 2)\n", + "model.summary()\n", + "\n", + "# Start the timer. Want to time training+testing\n", + "start = timer()\n", + "# Fit the model using the training data genenerated above using 150 training iterations and a 5%\n", + "# validation split. Setting verbose to True prints information about each training iteration.\n", + "hist = model.fit(rnn_input, rnn_training, batch_size=None, epochs=150, \n", + " verbose=True,validation_split=0.05)\n", + "\n", + "\n", + "# This section plots the training loss and the validation loss as a function of training iteration.\n", + "# This is not required for analyzing the couple cluster data but can help determine if the network is\n", + "# being overtrained.\n", + "for label in [\"loss\",\"val_loss\"]:\n", + " plt.plot(hist.history[label],label=label)\n", + "\n", + "plt.ylabel(\"loss\")\n", + "plt.xlabel(\"epoch\")\n", + "plt.title(\"The final validation loss: {}\".format(hist.history[\"val_loss\"][-1]))\n", + "plt.legend()\n", + "plt.show()\n", + "\n", + "# Use the trained neural network to predict more points of the data set\n", + "test_rnn(X_tot, y_tot, X_tot[0], X_tot[dim-1])\n", + "# Stop the timer and calculate the total time needed.\n", + "end = timer()\n", + "print('Time: ', end-start)\n", + "\n", + "\n", + "# ### Training Recurrent Neural Networks in the Standard Way (i.e. learning the relationship between the X and Y data)\n", + "# \n", + "# Finally, comparing the performace of a recurrent neural network using the standard data formatting to the performance of the network with time sequence data formatting shows the benefit of this type of data formatting with extrapolation.\n", + "\n", + "# Check to make sure the data set is complete\n", + "assert len(X_tot) == len(y_tot)\n", + "\n", + "# This is the number of points that will be used in as the training data\n", + "dim=12\n", + "\n", + "# Separate the training data from the whole data set\n", + "X_train = X_tot[:dim]\n", + "y_train = y_tot[:dim]\n", + "\n", + "# Reshape the data for Keras specifications\n", + "X_train = X_train.reshape((dim, 1))\n", + "y_train = y_train.reshape((dim, 1))\n", + "\n", + "\n", + "# Create a recurrent neural network in Keras and produce a summary of the \n", + "# machine learning model\n", + "# Set the sequence length to 1 for regular data formatting \n", + "model = rnn(length_of_sequences = 1)\n", + "model.summary()\n", + "\n", + "# Start the timer. Want to time training+testing\n", + "start = timer()\n", + "# Fit the model using the training data genenerated above using 150 training iterations and a 5%\n", + "# validation split. Setting verbose to True prints information about each training iteration.\n", + "hist = model.fit(X_train, y_train, batch_size=None, epochs=150, \n", + " verbose=True,validation_split=0.05)\n", + "\n", + "\n", + "# This section plots the training loss and the validation loss as a function of training iteration.\n", + "# This is not required for analyzing the couple cluster data but can help determine if the network is\n", + "# being overtrained.\n", + "for label in [\"loss\",\"val_loss\"]:\n", + " plt.plot(hist.history[label],label=label)\n", + "\n", + "plt.ylabel(\"loss\")\n", + "plt.xlabel(\"epoch\")\n", + "plt.title(\"The final validation loss: {}\".format(hist.history[\"val_loss\"][-1]))\n", + "plt.legend()\n", + "plt.show()\n", + "\n", + "# Use the trained neural network to predict the remaining data points\n", + "X_pred = X_tot[dim:]\n", + "X_pred = X_pred.reshape((len(X_pred), 1))\n", + "y_model = model.predict(X_pred)\n", + "y_pred = np.concatenate((y_tot[:dim], y_model.flatten()))\n", + "\n", + "# Plot the known data set and the predicted data set. The red box represents the region that was used\n", + "# for the training data.\n", + "fig, ax = plt.subplots()\n", + "ax.plot(X_tot, y_tot, label=\"true\", linewidth=3)\n", + "ax.plot(X_tot, y_pred, 'g-.',label=\"predicted\", linewidth=4)\n", + "ax.legend()\n", + "# Created a red region to represent the points used in the training data.\n", + "ax.axvspan(X_tot[0], X_tot[dim], alpha=0.25, color='red')\n", + "plt.show()\n", + "\n", + "# Stop the timer and calculate the total time needed.\n", + "end = timer()\n", + "print('Time: ', end-start)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Solving ODEs with Deep Learning\n", + "\n", + "The Universal Approximation Theorem states that a neural network can\n", + "approximate any function at a single hidden layer along with one input\n", + "and output layer to any given precision. \n", + "\n", + "\n", + "\n", + "## Ordinary Differential Equations\n", + "\n", + "An ordinary differential equation (ODE) is an equation involving functions having one variable.\n", + "\n", + "In general, an ordinary differential equation looks like" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \\label{ode} \\tag{1}\n", + "f\\left(x, \\, g(x), \\, g'(x), \\, g''(x), \\, \\dots \\, , \\, g^{(n)}(x)\\right) = 0\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $g(x)$ is the function to find, and $g^{(n)}(x)$ is the $n$-th derivative of $g(x)$.\n", + "\n", + "The $f\\left(x, g(x), g'(x), g''(x), \\, \\dots \\, , g^{(n)}(x)\\right)$ is just a way to write that there is an expression involving $x$ and $g(x), \\ g'(x), \\ g''(x), \\, \\dots \\, , \\text{ and } g^{(n)}(x)$ on the left side of the equality sign in ([1](#ode)).\n", + "The highest order of derivative, that is the value of $n$, determines to the order of the equation.\n", + "The equation is referred to as a $n$-th order ODE.\n", + "Along with ([1](#ode)), some additional conditions of the function $g(x)$ are typically given\n", + "for the solution to be unique.\n", + "\n", + "\n", + "## The trial solution\n", + "\n", + "Let the trial solution $g_t(x)$ be" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\tg_t(x) = h_1(x) + h_2(x,N(x,P))\n", + "\\label{_auto1} \\tag{2}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $h_1(x)$ is a function that makes $g_t(x)$ satisfy a given set\n", + "of conditions, $N(x,P)$ a neural network with weights and biases\n", + "described by $P$ and $h_2(x, N(x,P))$ some expression involving the\n", + "neural network. The role of the function $h_2(x, N(x,P))$, is to\n", + "ensure that the output from $N(x,P)$ is zero when $g_t(x)$ is\n", + "evaluated at the values of $x$ where the given conditions must be\n", + "satisfied. The function $h_1(x)$ should alone make $g_t(x)$ satisfy\n", + "the conditions.\n", + "\n", + "But what about the network $N(x,P)$?\n", + "\n", + "\n", + "As described previously, an optimization method could be used to minimize the parameters of a neural network, that being its weights and biases, through backward propagation.\n", + "\n", + "\n", + "\n", + "## Minimization process\n", + "\n", + "For the minimization to be defined, we need to have a cost function at hand to minimize.\n", + "\n", + "It is given that $f\\left(x, \\, g(x), \\, g'(x), \\, g''(x), \\, \\dots \\, , \\, g^{(n)}(x)\\right)$ should be equal to zero in ([1](#ode)).\n", + "We can choose to consider the mean squared error as the cost function for an input $x$.\n", + "Since we are looking at one input, the cost function is just $f$ squared.\n", + "The cost function $c\\left(x, P \\right)$ can therefore be expressed as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "C\\left(x, P\\right) = \\big(f\\left(x, \\, g(x), \\, g'(x), \\, g''(x), \\, \\dots \\, , \\, g^{(n)}(x)\\right)\\big)^2\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If $N$ inputs are given as a vector $\\boldsymbol{x}$ with elements $x_i$ for $i = 1,\\dots,N$,\n", + "the cost function becomes" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \\label{cost} \\tag{3}\n", + "\tC\\left(\\boldsymbol{x}, P\\right) = \\frac{1}{N} \\sum_{i=1}^N \\big(f\\left(x_i, \\, g(x_i), \\, g'(x_i), \\, g''(x_i), \\, \\dots \\, , \\, g^{(n)}(x_i)\\right)\\big)^2\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The neural net should then find the parameters $P$ that minimizes the cost function in\n", + "([3](#cost)) for a set of $N$ training samples $x_i$.\n", + "\n", + "\n", + "## Minimizing the cost function using gradient descent and automatic differentiation\n", + "\n", + "To perform the minimization using gradient descent, the gradient of $C\\left(\\boldsymbol{x}, P\\right)$ is needed.\n", + "It might happen so that finding an analytical expression of the gradient of $C(\\boldsymbol{x}, P)$ from ([3](#cost)) gets too messy, depending on which cost function one desires to use.\n", + "\n", + "Luckily, there exists libraries that makes the job for us through automatic differentiation.\n", + "Automatic differentiation is a method of finding the derivatives numerically with very high precision.\n", + "\n", + "\n", + "\n", + "## Example: Exponential decay\n", + "\n", + "An exponential decay of a quantity $g(x)$ is described by the equation" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \\label{solve_expdec} \\tag{4}\n", + " g'(x) = -\\gamma g(x)\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "with $g(0) = g_0$ for some chosen initial value $g_0$.\n", + "\n", + "The analytical solution of ([4](#solve_expdec)) is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + " g(x) = g_0 \\exp\\left(-\\gamma x\\right)\n", + "\\label{_auto2} \\tag{5}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Having an analytical solution at hand, it is possible to use it to compare how well a neural network finds a solution of ([4](#solve_expdec)).\n", + "\n", + "\n", + "\n", + "## The function to solve for\n", + "\n", + "The program will use a neural network to solve" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \\label{solveode} \\tag{6}\n", + "g'(x) = -\\gamma g(x)\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $g(0) = g_0$ with $\\gamma$ and $g_0$ being some chosen values.\n", + "\n", + "In this example, $\\gamma = 2$ and $g_0 = 10$.\n", + "\n", + "\n", + "## The trial solution\n", + "To begin with, a trial solution $g_t(t)$ must be chosen. A general trial solution for ordinary differential equations could be" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "g_t(x, P) = h_1(x) + h_2(x, N(x, P))\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "with $h_1(x)$ ensuring that $g_t(x)$ satisfies some conditions and $h_2(x,N(x, P))$ an expression involving $x$ and the output from the neural network $N(x,P)$ with $P $ being the collection of the weights and biases for each layer. For now, it is assumed that the network consists of one input layer, one hidden layer, and one output layer.\n", + "\n", + "\n", + "## Setup of Network\n", + "\n", + "In this network, there are no weights and bias at the input layer, so $P = \\{ P_{\\text{hidden}}, P_{\\text{output}} \\}$.\n", + "If there are $N_{\\text{hidden} }$ neurons in the hidden layer, then $P_{\\text{hidden}}$ is a $N_{\\text{hidden} } \\times (1 + N_{\\text{input}})$ matrix, given that there are $N_{\\text{input}}$ neurons in the input layer.\n", + "\n", + "The first column in $P_{\\text{hidden} }$ represents the bias for each neuron in the hidden layer and the second column represents the weights for each neuron in the hidden layer from the input layer.\n", + "If there are $N_{\\text{output} }$ neurons in the output layer, then $P_{\\text{output}} $ is a $N_{\\text{output} } \\times (1 + N_{\\text{hidden} })$ matrix.\n", + "\n", + "Its first column represents the bias of each neuron and the remaining columns represents the weights to each neuron.\n", + "\n", + "It is given that $g(0) = g_0$. The trial solution must fulfill this condition to be a proper solution of ([6](#solveode)). A possible way to ensure that $g_t(0, P) = g_0$, is to let $F(N(x,P)) = x \\cdot N(x,P)$ and $A(x) = g_0$. This gives the following trial solution:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \\label{trial} \\tag{7}\n", + "g_t(x, P) = g_0 + x \\cdot N(x, P)\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Reformulating the problem\n", + "\n", + "We wish that our neural network manages to minimize a given cost function.\n", + "\n", + "A reformulation of out equation, ([6](#solveode)), must therefore be done,\n", + "such that it describes the problem a neural network can solve for.\n", + "\n", + "The neural network must find the set of weights and biases $P$ such that the trial solution in ([7](#trial)) satisfies ([6](#solveode)).\n", + "\n", + "The trial solution" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "g_t(x, P) = g_0 + x \\cdot N(x, P)\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "has been chosen such that it already solves the condition $g(0) = g_0$. What remains, is to find $P$ such that" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \\label{nnmin} \\tag{8}\n", + "g_t'(x, P) = - \\gamma g_t(x, P)\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "is fulfilled as *best as possible*.\n", + "\n", + "\n", + "## More technicalities\n", + "\n", + "The left hand side and right hand side of ([8](#nnmin)) must be computed separately, and then the neural network must choose weights and biases, contained in $P$, such that the sides are equal as best as possible.\n", + "This means that the absolute or squared difference between the sides must be as close to zero, ideally equal to zero.\n", + "In this case, the difference squared shows to be an appropriate measurement of how erroneous the trial solution is with respect to $P$ of the neural network.\n", + "\n", + "This gives the following cost function our neural network must solve for:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\min_{P}\\Big\\{ \\big(g_t'(x, P) - ( -\\gamma g_t(x, P) \\big)^2 \\Big\\}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "(the notation $\\min_{P}\\{ f(x, P) \\}$ means that we desire to find $P$ that yields the minimum of $f(x, P)$)\n", + "\n", + "or, in terms of weights and biases for the hidden and output layer in our network:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\min_{P_{\\text{hidden} }, \\ P_{\\text{output} }}\\Big\\{ \\big(g_t'(x, \\{ P_{\\text{hidden} }, P_{\\text{output} }\\}) - ( -\\gamma g_t(x, \\{ P_{\\text{hidden} }, P_{\\text{output} }\\}) \\big)^2 \\Big\\}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "for an input value $x$.\n", + "\n", + "\n", + "## More details\n", + "\n", + "If the neural network evaluates $g_t(x, P)$ at more values for $x$, say $N$ values $x_i$ for $i = 1, \\dots, N$, then the *total* error to minimize becomes" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \\label{min} \\tag{9}\n", + "\\min_{P}\\Big\\{\\frac{1}{N} \\sum_{i=1}^N \\big(g_t'(x_i, P) - ( -\\gamma g_t(x_i, P) \\big)^2 \\Big\\}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Letting $\\boldsymbol{x}$ be a vector with elements $x_i$ and $C(\\boldsymbol{x}, P) = \\frac{1}{N} \\sum_i \\big(g_t'(x_i, P) - ( -\\gamma g_t(x_i, P) \\big)^2$ denote the cost function, the minimization problem that our network must solve, becomes" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\min_{P} C(\\boldsymbol{x}, P)\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In terms of $P_{\\text{hidden} }$ and $P_{\\text{output} }$, this could also be expressed as\n", + "\n", + "$$\n", + "\\min_{P_{\\text{hidden} }, \\ P_{\\text{output} }} C(\\boldsymbol{x}, \\{P_{\\text{hidden} }, P_{\\text{output} }\\})\n", + "$$\n", + "\n", + "\n", + "## A possible implementation of a neural network\n", + "\n", + "For simplicity, it is assumed that the input is an array $\\boldsymbol{x} = (x_1, \\dots, x_N)$ with $N$ elements. It is at these points the neural network should find $P$ such that it fulfills ([9](#min)).\n", + "\n", + "First, the neural network must feed forward the inputs.\n", + "This means that $\\boldsymbol{x}s$ must be passed through an input layer, a hidden layer and a output layer. The input layer in this case, does not need to process the data any further.\n", + "The input layer will consist of $N_{\\text{input} }$ neurons, passing its element to each neuron in the hidden layer. The number of neurons in the hidden layer will be $N_{\\text{hidden} }$.\n", + "\n", + "\n", + "## Technicalities\n", + "\n", + "For the $i$-th in the hidden layer with weight $w_i^{\\text{hidden} }$ and bias $b_i^{\\text{hidden} }$, the weighting from the $j$-th neuron at the input layer is:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{aligned}\n", + "z_{i,j}^{\\text{hidden}} &= b_i^{\\text{hidden}} + w_i^{\\text{hidden}}x_j \\\\\n", + "&=\n", + "\\begin{pmatrix}\n", + "b_i^{\\text{hidden}} & w_i^{\\text{hidden}}\n", + "\\end{pmatrix}\n", + "\\begin{pmatrix}\n", + "1 \\\\\n", + "x_j\n", + "\\end{pmatrix}\n", + "\\end{aligned}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Final technicalities I\n", + "\n", + "The result after weighting the inputs at the $i$-th hidden neuron can be written as a vector:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{aligned}\n", + "\\boldsymbol{z}_{i}^{\\text{hidden}} &= \\Big( b_i^{\\text{hidden}} + w_i^{\\text{hidden}}x_1 , \\ b_i^{\\text{hidden}} + w_i^{\\text{hidden}} x_2, \\ \\dots \\, , \\ b_i^{\\text{hidden}} + w_i^{\\text{hidden}} x_N\\Big) \\\\\n", + "&=\n", + "\\begin{pmatrix}\n", + " b_i^{\\text{hidden}} & w_i^{\\text{hidden}}\n", + "\\end{pmatrix}\n", + "\\begin{pmatrix}\n", + "1 & 1 & \\dots & 1 \\\\\n", + "x_1 & x_2 & \\dots & x_N\n", + "\\end{pmatrix} \\\\\n", + "&= \\boldsymbol{p}_{i, \\text{hidden}}^T X\n", + "\\end{aligned}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Final technicalities II\n", + "\n", + "The vector $\\boldsymbol{p}_{i, \\text{hidden}}^T$ constitutes each row in $P_{\\text{hidden} }$, which contains the weights for the neural network to minimize according to ([9](#min)).\n", + "\n", + "After having found $\\boldsymbol{z}_{i}^{\\text{hidden}} $ for every $i$-th neuron within the hidden layer, the vector will be sent to an activation function $a_i(\\boldsymbol{z})$.\n", + "\n", + "In this example, the sigmoid function has been chosen to be the activation function for each hidden neuron:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "f(z) = \\frac{1}{1 + \\exp{(-z)}}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "It is possible to use other activations functions for the hidden layer also.\n", + "\n", + "The output $\\boldsymbol{x}_i^{\\text{hidden}}$ from each $i$-th hidden neuron is:\n", + "\n", + "$$\n", + "\\boldsymbol{x}_i^{\\text{hidden} } = f\\big( \\boldsymbol{z}_{i}^{\\text{hidden}} \\big)\n", + "$$\n", + "\n", + "The outputs $\\boldsymbol{x}_i^{\\text{hidden} } $ are then sent to the output layer.\n", + "\n", + "The output layer consists of one neuron in this case, and combines the\n", + "output from each of the neurons in the hidden layers. The output layer\n", + "combines the results from the hidden layer using some weights $w_i^{\\text{output}}$\n", + "and biases $b_i^{\\text{output}}$. In this case,\n", + "it is assumes that the number of neurons in the output layer is one.\n", + "\n", + "\n", + "## Final technicalities III\n", + "\n", + "\n", + "The procedure of weighting the output neuron $j$ in the hidden layer to the $i$-th neuron in the output layer is similar as for the hidden layer described previously." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{aligned}\n", + "z_{1,j}^{\\text{output}} & =\n", + "\\begin{pmatrix}\n", + "b_1^{\\text{output}} & \\boldsymbol{w}_1^{\\text{output}}\n", + "\\end{pmatrix}\n", + "\\begin{pmatrix}\n", + "1 \\\\\n", + "\\boldsymbol{x}_j^{\\text{hidden}}\n", + "\\end{pmatrix}\n", + "\\end{aligned}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Final technicalities IV\n", + "\n", + "Expressing $z_{1,j}^{\\text{output}}$ as a vector gives the following way of weighting the inputs from the hidden layer:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{z}_{1}^{\\text{output}} =\n", + "\\begin{pmatrix}\n", + "b_1^{\\text{output}} & \\boldsymbol{w}_1^{\\text{output}}\n", + "\\end{pmatrix}\n", + "\\begin{pmatrix}\n", + "1 & 1 & \\dots & 1 \\\\\n", + "\\boldsymbol{x}_1^{\\text{hidden}} & \\boldsymbol{x}_2^{\\text{hidden}} & \\dots & \\boldsymbol{x}_N^{\\text{hidden}}\n", + "\\end{pmatrix}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this case we seek a continuous range of values since we are approximating a function. This means that after computing $\\boldsymbol{z}_{1}^{\\text{output}}$ the neural network has finished its feed forward step, and $\\boldsymbol{z}_{1}^{\\text{output}}$ is the final output of the network.\n", + "\n", + "\n", + "## Back propagation\n", + "\n", + "The next step is to decide how the parameters should be changed such that they minimize the cost function.\n", + "\n", + "The chosen cost function for this problem is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "C(\\boldsymbol{x}, P) = \\frac{1}{N} \\sum_i \\big(g_t'(x_i, P) - ( -\\gamma g_t(x_i, P) \\big)^2\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In order to minimize the cost function, an optimization method must be chosen.\n", + "\n", + "Here, gradient descent with a constant step size has been chosen.\n", + "\n", + "\n", + "## Gradient descent\n", + "\n", + "The idea of the gradient descent algorithm is to update parameters in\n", + "a direction where the cost function decreases goes to a minimum.\n", + "\n", + "In general, the update of some parameters $\\boldsymbol{\\omega}$ given a cost\n", + "function defined by some weights $\\boldsymbol{\\omega}$, $C(\\boldsymbol{x},\n", + "\\boldsymbol{\\omega})$, goes as follows:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{\\omega}_{\\text{new} } = \\boldsymbol{\\omega} - \\lambda \\nabla_{\\boldsymbol{\\omega}} C(\\boldsymbol{x}, \\boldsymbol{\\omega})\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "for a number of iterations or until $ \\big|\\big| \\boldsymbol{\\omega}_{\\text{new} } - \\boldsymbol{\\omega} \\big|\\big|$ becomes smaller than some given tolerance.\n", + "\n", + "The value of $\\lambda$ decides how large steps the algorithm must take\n", + "in the direction of $ \\nabla_{\\boldsymbol{\\omega}} C(\\boldsymbol{x}, \\boldsymbol{\\omega})$.\n", + "The notation $\\nabla_{\\boldsymbol{\\omega}}$ express the gradient with respect\n", + "to the elements in $\\boldsymbol{\\omega}$.\n", + "\n", + "In our case, we have to minimize the cost function $C(\\boldsymbol{x}, P)$ with\n", + "respect to the two sets of weights and biases, that is for the hidden\n", + "layer $P_{\\text{hidden} }$ and for the output layer $P_{\\text{output}\n", + "}$ .\n", + "\n", + "This means that $P_{\\text{hidden} }$ and $P_{\\text{output} }$ is updated by" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{aligned}\n", + "P_{\\text{hidden},\\text{new}} &= P_{\\text{hidden}} - \\lambda \\nabla_{P_{\\text{hidden}}} C(\\boldsymbol{x}, P) \\\\\n", + "P_{\\text{output},\\text{new}} &= P_{\\text{output}} - \\lambda \\nabla_{P_{\\text{output}}} C(\\boldsymbol{x}, P)\n", + "\\end{aligned}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## The code for solving the ODE" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import autograd.numpy as np\n", + "from autograd import grad, elementwise_grad\n", + "import autograd.numpy.random as npr\n", + "from matplotlib import pyplot as plt\n", + "\n", + "def sigmoid(z):\n", + " return 1/(1 + np.exp(-z))\n", + "\n", + "# Assuming one input, hidden, and output layer\n", + "def neural_network(params, x):\n", + "\n", + " # Find the weights (including and biases) for the hidden and output layer.\n", + " # Assume that params is a list of parameters for each layer.\n", + " # The biases are the first element for each array in params,\n", + " # and the weights are the remaning elements in each array in params.\n", + "\n", + " w_hidden = params[0]\n", + " w_output = params[1]\n", + "\n", + " # Assumes input x being an one-dimensional array\n", + " num_values = np.size(x)\n", + " x = x.reshape(-1, num_values)\n", + "\n", + " # Assume that the input layer does nothing to the input x\n", + " x_input = x\n", + "\n", + " ## Hidden layer:\n", + "\n", + " # Add a row of ones to include bias\n", + " x_input = np.concatenate((np.ones((1,num_values)), x_input ), axis = 0)\n", + "\n", + " z_hidden = np.matmul(w_hidden, x_input)\n", + " x_hidden = sigmoid(z_hidden)\n", + "\n", + " ## Output layer:\n", + "\n", + " # Include bias:\n", + " x_hidden = np.concatenate((np.ones((1,num_values)), x_hidden ), axis = 0)\n", + "\n", + " z_output = np.matmul(w_output, x_hidden)\n", + " x_output = z_output\n", + "\n", + " return x_output\n", + "\n", + "# The trial solution using the deep neural network:\n", + "def g_trial(x,params, g0 = 10):\n", + " return g0 + x*neural_network(params,x)\n", + "\n", + "# The right side of the ODE:\n", + "def g(x, g_trial, gamma = 2):\n", + " return -gamma*g_trial\n", + "\n", + "# The cost function:\n", + "def cost_function(P, x):\n", + "\n", + " # Evaluate the trial function with the current parameters P\n", + " g_t = g_trial(x,P)\n", + "\n", + " # Find the derivative w.r.t x of the neural network\n", + " d_net_out = elementwise_grad(neural_network,1)(P,x)\n", + "\n", + " # Find the derivative w.r.t x of the trial function\n", + " d_g_t = elementwise_grad(g_trial,0)(x,P)\n", + "\n", + " # The right side of the ODE\n", + " func = g(x, g_t)\n", + "\n", + " err_sqr = (d_g_t - func)**2\n", + " cost_sum = np.sum(err_sqr)\n", + "\n", + " return cost_sum / np.size(err_sqr)\n", + "\n", + "# Solve the exponential decay ODE using neural network with one input, hidden, and output layer\n", + "def solve_ode_neural_network(x, num_neurons_hidden, num_iter, lmb):\n", + " ## Set up initial weights and biases\n", + "\n", + " # For the hidden layer\n", + " p0 = npr.randn(num_neurons_hidden, 2 )\n", + "\n", + " # For the output layer\n", + " p1 = npr.randn(1, num_neurons_hidden + 1 ) # +1 since bias is included\n", + "\n", + " P = [p0, p1]\n", + "\n", + " print('Initial cost: %g'%cost_function(P, x))\n", + "\n", + " ## Start finding the optimal weights using gradient descent\n", + "\n", + " # Find the Python function that represents the gradient of the cost function\n", + " # w.r.t the 0-th input argument -- that is the weights and biases in the hidden and output layer\n", + " cost_function_grad = grad(cost_function,0)\n", + "\n", + " # Let the update be done num_iter times\n", + " for i in range(num_iter):\n", + " # Evaluate the gradient at the current weights and biases in P.\n", + " # The cost_grad consist now of two arrays;\n", + " # one for the gradient w.r.t P_hidden and\n", + " # one for the gradient w.r.t P_output\n", + " cost_grad = cost_function_grad(P, x)\n", + "\n", + " P[0] = P[0] - lmb * cost_grad[0]\n", + " P[1] = P[1] - lmb * cost_grad[1]\n", + "\n", + " print('Final cost: %g'%cost_function(P, x))\n", + "\n", + " return P\n", + "\n", + "def g_analytic(x, gamma = 2, g0 = 10):\n", + " return g0*np.exp(-gamma*x)\n", + "\n", + "# Solve the given problem\n", + "if __name__ == '__main__':\n", + " # Set seed such that the weight are initialized\n", + " # with same weights and biases for every run.\n", + " npr.seed(15)\n", + "\n", + " ## Decide the vales of arguments to the function to solve\n", + " N = 10\n", + " x = np.linspace(0, 1, N)\n", + "\n", + " ## Set up the initial parameters\n", + " num_hidden_neurons = 10\n", + " num_iter = 10000\n", + " lmb = 0.001\n", + "\n", + " # Use the network\n", + " P = solve_ode_neural_network(x, num_hidden_neurons, num_iter, lmb)\n", + "\n", + " # Print the deviation from the trial solution and true solution\n", + " res = g_trial(x,P)\n", + " res_analytical = g_analytic(x)\n", + "\n", + " print('Max absolute difference: %g'%np.max(np.abs(res - res_analytical)))\n", + "\n", + " # Plot the results\n", + " plt.figure(figsize=(10,10))\n", + "\n", + " plt.title('Performance of neural network solving an ODE compared to the analytical solution')\n", + " plt.plot(x, res_analytical)\n", + " plt.plot(x, res[0,:])\n", + " plt.legend(['analytical','nn'])\n", + " plt.xlabel('x')\n", + " plt.ylabel('g(x)')\n", + " plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## The network with one input layer, specified number of hidden layers, and one output layer\n", + "\n", + "It is also possible to extend the construction of our network into a more general one, allowing the network to contain more than one hidden layers.\n", + "\n", + "The number of neurons within each hidden layer are given as a list of integers in the program below." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import autograd.numpy as np\n", + "from autograd import grad, elementwise_grad\n", + "import autograd.numpy.random as npr\n", + "from matplotlib import pyplot as plt\n", + "\n", + "def sigmoid(z):\n", + " return 1/(1 + np.exp(-z))\n", + "\n", + "# The neural network with one input layer and one output layer,\n", + "# but with number of hidden layers specified by the user.\n", + "def deep_neural_network(deep_params, x):\n", + " # N_hidden is the number of hidden layers\n", + "\n", + " N_hidden = np.size(deep_params) - 1 # -1 since params consists of\n", + " # parameters to all the hidden\n", + " # layers AND the output layer.\n", + "\n", + " # Assumes input x being an one-dimensional array\n", + " num_values = np.size(x)\n", + " x = x.reshape(-1, num_values)\n", + "\n", + " # Assume that the input layer does nothing to the input x\n", + " x_input = x\n", + "\n", + " # Due to multiple hidden layers, define a variable referencing to the\n", + " # output of the previous layer:\n", + " x_prev = x_input\n", + "\n", + " ## Hidden layers:\n", + "\n", + " for l in range(N_hidden):\n", + " # From the list of parameters P; find the correct weigths and bias for this layer\n", + " w_hidden = deep_params[l]\n", + "\n", + " # Add a row of ones to include bias\n", + " x_prev = np.concatenate((np.ones((1,num_values)), x_prev ), axis = 0)\n", + "\n", + " z_hidden = np.matmul(w_hidden, x_prev)\n", + " x_hidden = sigmoid(z_hidden)\n", + "\n", + " # Update x_prev such that next layer can use the output from this layer\n", + " x_prev = x_hidden\n", + "\n", + " ## Output layer:\n", + "\n", + " # Get the weights and bias for this layer\n", + " w_output = deep_params[-1]\n", + "\n", + " # Include bias:\n", + " x_prev = np.concatenate((np.ones((1,num_values)), x_prev), axis = 0)\n", + "\n", + " z_output = np.matmul(w_output, x_prev)\n", + " x_output = z_output\n", + "\n", + " return x_output\n", + "\n", + "# The trial solution using the deep neural network:\n", + "def g_trial_deep(x,params, g0 = 10):\n", + " return g0 + x*deep_neural_network(params, x)\n", + "\n", + "# The right side of the ODE:\n", + "def g(x, g_trial, gamma = 2):\n", + " return -gamma*g_trial\n", + "\n", + "# The same cost function as before, but calls deep_neural_network instead.\n", + "def cost_function_deep(P, x):\n", + "\n", + " # Evaluate the trial function with the current parameters P\n", + " g_t = g_trial_deep(x,P)\n", + "\n", + " # Find the derivative w.r.t x of the neural network\n", + " d_net_out = elementwise_grad(deep_neural_network,1)(P,x)\n", + "\n", + " # Find the derivative w.r.t x of the trial function\n", + " d_g_t = elementwise_grad(g_trial_deep,0)(x,P)\n", + "\n", + " # The right side of the ODE\n", + " func = g(x, g_t)\n", + "\n", + " err_sqr = (d_g_t - func)**2\n", + " cost_sum = np.sum(err_sqr)\n", + "\n", + " return cost_sum / np.size(err_sqr)\n", + "\n", + "# Solve the exponential decay ODE using neural network with one input and one output layer,\n", + "# but with specified number of hidden layers from the user.\n", + "def solve_ode_deep_neural_network(x, num_neurons, num_iter, lmb):\n", + " # num_hidden_neurons is now a list of number of neurons within each hidden layer\n", + "\n", + " # The number of elements in the list num_hidden_neurons thus represents\n", + " # the number of hidden layers.\n", + "\n", + " # Find the number of hidden layers:\n", + " N_hidden = np.size(num_neurons)\n", + "\n", + " ## Set up initial weights and biases\n", + "\n", + " # Initialize the list of parameters:\n", + " P = [None]*(N_hidden + 1) # + 1 to include the output layer\n", + "\n", + " P[0] = npr.randn(num_neurons[0], 2 )\n", + " for l in range(1,N_hidden):\n", + " P[l] = npr.randn(num_neurons[l], num_neurons[l-1] + 1) # +1 to include bias\n", + "\n", + " # For the output layer\n", + " P[-1] = npr.randn(1, num_neurons[-1] + 1 ) # +1 since bias is included\n", + "\n", + " print('Initial cost: %g'%cost_function_deep(P, x))\n", + "\n", + " ## Start finding the optimal weights using gradient descent\n", + "\n", + " # Find the Python function that represents the gradient of the cost function\n", + " # w.r.t the 0-th input argument -- that is the weights and biases in the hidden and output layer\n", + " cost_function_deep_grad = grad(cost_function_deep,0)\n", + "\n", + " # Let the update be done num_iter times\n", + " for i in range(num_iter):\n", + " # Evaluate the gradient at the current weights and biases in P.\n", + " # The cost_grad consist now of N_hidden + 1 arrays; the gradient w.r.t the weights and biases\n", + " # in the hidden layers and output layers evaluated at x.\n", + " cost_deep_grad = cost_function_deep_grad(P, x)\n", + "\n", + " for l in range(N_hidden+1):\n", + " P[l] = P[l] - lmb * cost_deep_grad[l]\n", + "\n", + " print('Final cost: %g'%cost_function_deep(P, x))\n", + "\n", + " return P\n", + "\n", + "def g_analytic(x, gamma = 2, g0 = 10):\n", + " return g0*np.exp(-gamma*x)\n", + "\n", + "# Solve the given problem\n", + "if __name__ == '__main__':\n", + " npr.seed(15)\n", + "\n", + " ## Decide the vales of arguments to the function to solve\n", + " N = 10\n", + " x = np.linspace(0, 1, N)\n", + "\n", + " ## Set up the initial parameters\n", + " num_hidden_neurons = np.array([10,10])\n", + " num_iter = 10000\n", + " lmb = 0.001\n", + "\n", + " P = solve_ode_deep_neural_network(x, num_hidden_neurons, num_iter, lmb)\n", + "\n", + " res = g_trial_deep(x,P)\n", + " res_analytical = g_analytic(x)\n", + "\n", + " plt.figure(figsize=(10,10))\n", + "\n", + " plt.title('Performance of a deep neural network solving an ODE compared to the analytical solution')\n", + " plt.plot(x, res_analytical)\n", + " plt.plot(x, res[0,:])\n", + " plt.legend(['analytical','dnn'])\n", + " plt.ylabel('g(x)')\n", + " plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example: Population growth\n", + "\n", + "A logistic model of population growth assumes that a population converges toward an equilibrium.\n", + "The population growth can be modeled by" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \\label{log} \\tag{10}\n", + "\tg'(t) = \\alpha g(t)(A - g(t))\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $g(t)$ is the population density at time $t$, $\\alpha > 0$ the growth rate and $A > 0$ is the maximum population number in the environment.\n", + "Also, at $t = 0$ the population has the size $g(0) = g_0$, where $g_0$ is some chosen constant.\n", + "\n", + "In this example, similar network as for the exponential decay using Autograd has been used to solve the equation. However, as the implementation might suffer from e.g numerical instability\n", + "and high execution time (this might be more apparent in the examples solving PDEs),\n", + "using a library like TensorFlow is recommended.\n", + "Here, we stay with a more simple approach and implement for comparison, the simple forward Euler method.\n", + "\n", + "\n", + "## Setting up the problem\n", + "\n", + "Here, we will model a population $g(t)$ in an environment having carrying capacity $A$.\n", + "The population follows the model" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \\label{solveode_population} \\tag{11}\n", + "g'(t) = \\alpha g(t)(A - g(t))\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $g(0) = g_0$.\n", + "\n", + "In this example, we let $\\alpha = 2$, $A = 1$, and $g_0 = 1.2$.\n", + "\n", + "\n", + "## The trial solution\n", + "\n", + "We will get a slightly different trial solution, as the boundary conditions are different\n", + "compared to the case for exponential decay.\n", + "\n", + "A possible trial solution satisfying the condition $g(0) = g_0$ could be\n", + "\n", + "$$\n", + "h_1(t) = g_0 + t \\cdot N(t,P)\n", + "$$\n", + "\n", + "with $N(t,P)$ being the output from the neural network with weights and biases for each layer collected in the set $P$.\n", + "\n", + "The analytical solution is\n", + "\n", + "$$\n", + "g(t) = \\frac{Ag_0}{g_0 + (A - g_0)\\exp(-\\alpha A t)}\n", + "$$\n", + "\n", + "\n", + "## The program using Autograd\n", + "\n", + "The network will be the similar as for the exponential decay example, but with some small modifications for our problem." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import autograd.numpy as np\n", + "from autograd import grad, elementwise_grad\n", + "import autograd.numpy.random as npr\n", + "from matplotlib import pyplot as plt\n", + "\n", + "def sigmoid(z):\n", + " return 1/(1 + np.exp(-z))\n", + "\n", + "# Function to get the parameters.\n", + "# Done such that one can easily change the paramaters after one's liking.\n", + "def get_parameters():\n", + " alpha = 2\n", + " A = 1\n", + " g0 = 1.2\n", + " return alpha, A, g0\n", + "\n", + "def deep_neural_network(P, x):\n", + " # N_hidden is the number of hidden layers\n", + " N_hidden = np.size(P) - 1 # -1 since params consist of parameters to all the hidden layers AND the output layer\n", + "\n", + " # Assumes input x being an one-dimensional array\n", + " num_values = np.size(x)\n", + " x = x.reshape(-1, num_values)\n", + "\n", + " # Assume that the input layer does nothing to the input x\n", + " x_input = x\n", + "\n", + " # Due to multiple hidden layers, define a variable referencing to the\n", + " # output of the previous layer:\n", + " x_prev = x_input\n", + "\n", + " ## Hidden layers:\n", + "\n", + " for l in range(N_hidden):\n", + " # From the list of parameters P; find the correct weigths and bias for this layer\n", + " w_hidden = P[l]\n", + "\n", + " # Add a row of ones to include bias\n", + " x_prev = np.concatenate((np.ones((1,num_values)), x_prev ), axis = 0)\n", + "\n", + " z_hidden = np.matmul(w_hidden, x_prev)\n", + " x_hidden = sigmoid(z_hidden)\n", + "\n", + " # Update x_prev such that next layer can use the output from this layer\n", + " x_prev = x_hidden\n", + "\n", + " ## Output layer:\n", + "\n", + " # Get the weights and bias for this layer\n", + " w_output = P[-1]\n", + "\n", + " # Include bias:\n", + " x_prev = np.concatenate((np.ones((1,num_values)), x_prev), axis = 0)\n", + "\n", + " z_output = np.matmul(w_output, x_prev)\n", + " x_output = z_output\n", + "\n", + " return x_output\n", + "\n", + "\n", + "def cost_function_deep(P, x):\n", + "\n", + " # Evaluate the trial function with the current parameters P\n", + " g_t = g_trial_deep(x,P)\n", + "\n", + " # Find the derivative w.r.t x of the trial function\n", + " d_g_t = elementwise_grad(g_trial_deep,0)(x,P)\n", + "\n", + " # The right side of the ODE\n", + " func = f(x, g_t)\n", + "\n", + " err_sqr = (d_g_t - func)**2\n", + " cost_sum = np.sum(err_sqr)\n", + "\n", + " return cost_sum / np.size(err_sqr)\n", + "\n", + "# The right side of the ODE:\n", + "def f(x, g_trial):\n", + " alpha,A, g0 = get_parameters()\n", + " return alpha*g_trial*(A - g_trial)\n", + "\n", + "# The trial solution using the deep neural network:\n", + "def g_trial_deep(x, params):\n", + " alpha,A, g0 = get_parameters()\n", + " return g0 + x*deep_neural_network(params,x)\n", + "\n", + "# The analytical solution:\n", + "def g_analytic(t):\n", + " alpha,A, g0 = get_parameters()\n", + " return A*g0/(g0 + (A - g0)*np.exp(-alpha*A*t))\n", + "\n", + "def solve_ode_deep_neural_network(x, num_neurons, num_iter, lmb):\n", + " # num_hidden_neurons is now a list of number of neurons within each hidden layer\n", + "\n", + " # Find the number of hidden layers:\n", + " N_hidden = np.size(num_neurons)\n", + "\n", + " ## Set up initial weigths and biases\n", + "\n", + " # Initialize the list of parameters:\n", + " P = [None]*(N_hidden + 1) # + 1 to include the output layer\n", + "\n", + " P[0] = npr.randn(num_neurons[0], 2 )\n", + " for l in range(1,N_hidden):\n", + " P[l] = npr.randn(num_neurons[l], num_neurons[l-1] + 1) # +1 to include bias\n", + "\n", + " # For the output layer\n", + " P[-1] = npr.randn(1, num_neurons[-1] + 1 ) # +1 since bias is included\n", + "\n", + " print('Initial cost: %g'%cost_function_deep(P, x))\n", + "\n", + " ## Start finding the optimal weigths using gradient descent\n", + "\n", + " # Find the Python function that represents the gradient of the cost function\n", + " # w.r.t the 0-th input argument -- that is the weights and biases in the hidden and output layer\n", + " cost_function_deep_grad = grad(cost_function_deep,0)\n", + "\n", + " # Let the update be done num_iter times\n", + " for i in range(num_iter):\n", + " # Evaluate the gradient at the current weights and biases in P.\n", + " # The cost_grad consist now of N_hidden + 1 arrays; the gradient w.r.t the weights and biases\n", + " # in the hidden layers and output layers evaluated at x.\n", + " cost_deep_grad = cost_function_deep_grad(P, x)\n", + "\n", + " for l in range(N_hidden+1):\n", + " P[l] = P[l] - lmb * cost_deep_grad[l]\n", + "\n", + " print('Final cost: %g'%cost_function_deep(P, x))\n", + "\n", + " return P\n", + "\n", + "if __name__ == '__main__':\n", + " npr.seed(4155)\n", + "\n", + " ## Decide the vales of arguments to the function to solve\n", + " Nt = 10\n", + " T = 1\n", + " t = np.linspace(0,T, Nt)\n", + "\n", + " ## Set up the initial parameters\n", + " num_hidden_neurons = [100, 50, 25]\n", + " num_iter = 1000\n", + " lmb = 1e-3\n", + "\n", + " P = solve_ode_deep_neural_network(t, num_hidden_neurons, num_iter, lmb)\n", + "\n", + " g_dnn_ag = g_trial_deep(t,P)\n", + " g_analytical = g_analytic(t)\n", + "\n", + " # Find the maximum absolute difference between the solutons:\n", + " diff_ag = np.max(np.abs(g_dnn_ag - g_analytical))\n", + " print(\"The max absolute difference between the solutions is: %g\"%diff_ag)\n", + "\n", + " plt.figure(figsize=(10,10))\n", + "\n", + " plt.title('Performance of neural network solving an ODE compared to the analytical solution')\n", + " plt.plot(t, g_analytical)\n", + " plt.plot(t, g_dnn_ag[0,:])\n", + " plt.legend(['analytical','nn'])\n", + " plt.xlabel('t')\n", + " plt.ylabel('g(t)')\n", + "\n", + " plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Using forward Euler to solve the ODE\n", + "\n", + "A straightforward way of solving an ODE numerically, is to use Euler's method.\n", + "\n", + "Euler's method uses Taylor series to approximate the value at a function $f$ at a step $\\Delta x$ from $x$:\n", + "\n", + "$$\n", + "f(x + \\Delta x) \\approx f(x) + \\Delta x f'(x)\n", + "$$\n", + "\n", + "In our case, using Euler's method to approximate the value of $g$ at a step $\\Delta t$ from $t$ yields" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{aligned}\n", + " g(t + \\Delta t) &\\approx g(t) + \\Delta t g'(t) \\\\\n", + " &= g(t) + \\Delta t \\big(\\alpha g(t)(A - g(t))\\big)\n", + "\\end{aligned}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "along with the condition that $g(0) = g_0$.\n", + "\n", + "Let $t_i = i \\cdot \\Delta t$ where $\\Delta t = \\frac{T}{N_t-1}$ where $T$ is the final time our solver must solve for and $N_t$ the number of values for $t \\in [0, T]$ for $i = 0, \\dots, N_t-1$.\n", + "\n", + "For $i \\geq 1$, we have that" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{aligned}\n", + "t_i &= i\\Delta t \\\\\n", + "&= (i - 1)\\Delta t + \\Delta t \\\\\n", + "&= t_{i-1} + \\Delta t\n", + "\\end{aligned}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now, if $g_i = g(t_i)$ then" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + " \\begin{aligned}\n", + " g_i &= g(t_i) \\\\\n", + " &= g(t_{i-1} + \\Delta t) \\\\\n", + " &\\approx g(t_{i-1}) + \\Delta t \\big(\\alpha g(t_{i-1})(A - g(t_{i-1}))\\big) \\\\\n", + " &= g_{i-1} + \\Delta t \\big(\\alpha g_{i-1}(A - g_{i-1})\\big)\n", + " \\end{aligned}\n", + "\\end{equation} \\label{odenum} \\tag{12}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "for $i \\geq 1$ and $g_0 = g(t_0) = g(0) = g_0$.\n", + "\n", + "Equation ([12](#odenum)) could be implemented in the following way,\n", + "extending the program that uses the network using Autograd:" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Assume that all function definitions from the example program using Autograd\n", + "# are located here.\n", + "\n", + "if __name__ == '__main__':\n", + " npr.seed(4155)\n", + "\n", + " ## Decide the vales of arguments to the function to solve\n", + " Nt = 10\n", + " T = 1\n", + " t = np.linspace(0,T, Nt)\n", + "\n", + " ## Set up the initial parameters\n", + " num_hidden_neurons = [100,50,25]\n", + " num_iter = 1000\n", + " lmb = 1e-3\n", + "\n", + " P = solve_ode_deep_neural_network(t, num_hidden_neurons, num_iter, lmb)\n", + "\n", + " g_dnn_ag = g_trial_deep(t,P)\n", + " g_analytical = g_analytic(t)\n", + "\n", + " # Find the maximum absolute difference between the solutons:\n", + " diff_ag = np.max(np.abs(g_dnn_ag - g_analytical))\n", + " print(\"The max absolute difference between the solutions is: %g\"%diff_ag)\n", + "\n", + " plt.figure(figsize=(10,10))\n", + "\n", + " plt.title('Performance of neural network solving an ODE compared to the analytical solution')\n", + " plt.plot(t, g_analytical)\n", + " plt.plot(t, g_dnn_ag[0,:])\n", + " plt.legend(['analytical','nn'])\n", + " plt.xlabel('t')\n", + " plt.ylabel('g(t)')\n", + "\n", + " ## Find an approximation to the funtion using forward Euler\n", + "\n", + " alpha, A, g0 = get_parameters()\n", + " dt = T/(Nt - 1)\n", + "\n", + " # Perform forward Euler to solve the ODE\n", + " g_euler = np.zeros(Nt)\n", + " g_euler[0] = g0\n", + "\n", + " for i in range(1,Nt):\n", + " g_euler[i] = g_euler[i-1] + dt*(alpha*g_euler[i-1]*(A - g_euler[i-1]))\n", + "\n", + " # Print the errors done by each method\n", + " diff1 = np.max(np.abs(g_euler - g_analytical))\n", + " diff2 = np.max(np.abs(g_dnn_ag[0,:] - g_analytical))\n", + "\n", + " print('Max absolute difference between Euler method and analytical: %g'%diff1)\n", + " print('Max absolute difference between deep neural network and analytical: %g'%diff2)\n", + "\n", + " # Plot results\n", + " plt.figure(figsize=(10,10))\n", + "\n", + " plt.plot(t,g_euler)\n", + " plt.plot(t,g_analytical)\n", + " plt.plot(t,g_dnn_ag[0,:])\n", + "\n", + " plt.legend(['euler','analytical','dnn'])\n", + " plt.xlabel('Time t')\n", + " plt.ylabel('g(t)')\n", + "\n", + " plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example: Solving the one dimensional Poisson equation\n", + "\n", + "The Poisson equation for $g(x)$ in one dimension is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \\label{poisson} \\tag{13}\n", + " -g''(x) = f(x)\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $f(x)$ is a given function for $x \\in (0,1)$.\n", + "\n", + "The conditions that $g(x)$ is chosen to fulfill, are" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{align*}\n", + " g(0) &= 0 \\\\\n", + " g(1) &= 0\n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This equation can be solved numerically using programs where e.g Autograd and TensorFlow are used.\n", + "The results from the networks can then be compared to the analytical solution.\n", + "In addition, it could be interesting to see how a typical method for numerically solving second order ODEs compares to the neural networks.\n", + "\n", + "\n", + "## The specific equation to solve for\n", + "\n", + "Here, the function $g(x)$ to solve for follows the equation" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "-g''(x) = f(x),\\qquad x \\in (0,1)\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $f(x)$ is a given function, along with the chosen conditions" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{aligned}\n", + "g(0) = g(1) = 0\n", + "\\end{aligned}\\label{cond} \\tag{14}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this example, we consider the case when $f(x) = (3x + x^2)\\exp(x)$.\n", + "\n", + "For this case, a possible trial solution satisfying the conditions could be" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "g_t(x) = x \\cdot (1-x) \\cdot N(P,x)\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The analytical solution for this problem is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "g(x) = x(1 - x)\\exp(x)\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Solving the equation using Autograd" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import autograd.numpy as np\n", + "from autograd import grad, elementwise_grad\n", + "import autograd.numpy.random as npr\n", + "from matplotlib import pyplot as plt\n", + "\n", + "def sigmoid(z):\n", + " return 1/(1 + np.exp(-z))\n", + "\n", + "def deep_neural_network(deep_params, x):\n", + " # N_hidden is the number of hidden layers\n", + " N_hidden = np.size(deep_params) - 1 # -1 since params consist of parameters to all the hidden layers AND the output layer\n", + "\n", + " # Assumes input x being an one-dimensional array\n", + " num_values = np.size(x)\n", + " x = x.reshape(-1, num_values)\n", + "\n", + " # Assume that the input layer does nothing to the input x\n", + " x_input = x\n", + "\n", + " # Due to multiple hidden layers, define a variable referencing to the\n", + " # output of the previous layer:\n", + " x_prev = x_input\n", + "\n", + " ## Hidden layers:\n", + "\n", + " for l in range(N_hidden):\n", + " # From the list of parameters P; find the correct weigths and bias for this layer\n", + " w_hidden = deep_params[l]\n", + "\n", + " # Add a row of ones to include bias\n", + " x_prev = np.concatenate((np.ones((1,num_values)), x_prev ), axis = 0)\n", + "\n", + " z_hidden = np.matmul(w_hidden, x_prev)\n", + " x_hidden = sigmoid(z_hidden)\n", + "\n", + " # Update x_prev such that next layer can use the output from this layer\n", + " x_prev = x_hidden\n", + "\n", + " ## Output layer:\n", + "\n", + " # Get the weights and bias for this layer\n", + " w_output = deep_params[-1]\n", + "\n", + " # Include bias:\n", + " x_prev = np.concatenate((np.ones((1,num_values)), x_prev), axis = 0)\n", + "\n", + " z_output = np.matmul(w_output, x_prev)\n", + " x_output = z_output\n", + "\n", + " return x_output\n", + "\n", + "def solve_ode_deep_neural_network(x, num_neurons, num_iter, lmb):\n", + " # num_hidden_neurons is now a list of number of neurons within each hidden layer\n", + "\n", + " # Find the number of hidden layers:\n", + " N_hidden = np.size(num_neurons)\n", + "\n", + " ## Set up initial weigths and biases\n", + "\n", + " # Initialize the list of parameters:\n", + " P = [None]*(N_hidden + 1) # + 1 to include the output layer\n", + "\n", + " P[0] = npr.randn(num_neurons[0], 2 )\n", + " for l in range(1,N_hidden):\n", + " P[l] = npr.randn(num_neurons[l], num_neurons[l-1] + 1) # +1 to include bias\n", + "\n", + " # For the output layer\n", + " P[-1] = npr.randn(1, num_neurons[-1] + 1 ) # +1 since bias is included\n", + "\n", + " print('Initial cost: %g'%cost_function_deep(P, x))\n", + "\n", + " ## Start finding the optimal weigths using gradient descent\n", + "\n", + " # Find the Python function that represents the gradient of the cost function\n", + " # w.r.t the 0-th input argument -- that is the weights and biases in the hidden and output layer\n", + " cost_function_deep_grad = grad(cost_function_deep,0)\n", + "\n", + " # Let the update be done num_iter times\n", + " for i in range(num_iter):\n", + " # Evaluate the gradient at the current weights and biases in P.\n", + " # The cost_grad consist now of N_hidden + 1 arrays; the gradient w.r.t the weights and biases\n", + " # in the hidden layers and output layers evaluated at x.\n", + " cost_deep_grad = cost_function_deep_grad(P, x)\n", + "\n", + " for l in range(N_hidden+1):\n", + " P[l] = P[l] - lmb * cost_deep_grad[l]\n", + "\n", + " print('Final cost: %g'%cost_function_deep(P, x))\n", + "\n", + " return P\n", + "\n", + "## Set up the cost function specified for this Poisson equation:\n", + "\n", + "# The right side of the ODE\n", + "def f(x):\n", + " return (3*x + x**2)*np.exp(x)\n", + "\n", + "def cost_function_deep(P, x):\n", + "\n", + " # Evaluate the trial function with the current parameters P\n", + " g_t = g_trial_deep(x,P)\n", + "\n", + " # Find the derivative w.r.t x of the trial function\n", + " d2_g_t = elementwise_grad(elementwise_grad(g_trial_deep,0))(x,P)\n", + "\n", + " right_side = f(x)\n", + "\n", + " err_sqr = (-d2_g_t - right_side)**2\n", + " cost_sum = np.sum(err_sqr)\n", + "\n", + " return cost_sum/np.size(err_sqr)\n", + "\n", + "# The trial solution:\n", + "def g_trial_deep(x,P):\n", + " return x*(1-x)*deep_neural_network(P,x)\n", + "\n", + "# The analytic solution;\n", + "def g_analytic(x):\n", + " return x*(1-x)*np.exp(x)\n", + "\n", + "if __name__ == '__main__':\n", + " npr.seed(4155)\n", + "\n", + " ## Decide the vales of arguments to the function to solve\n", + " Nx = 10\n", + " x = np.linspace(0,1, Nx)\n", + "\n", + " ## Set up the initial parameters\n", + " num_hidden_neurons = [200,100]\n", + " num_iter = 1000\n", + " lmb = 1e-3\n", + "\n", + " P = solve_ode_deep_neural_network(x, num_hidden_neurons, num_iter, lmb)\n", + "\n", + " g_dnn_ag = g_trial_deep(x,P)\n", + " g_analytical = g_analytic(x)\n", + "\n", + " # Find the maximum absolute difference between the solutons:\n", + " max_diff = np.max(np.abs(g_dnn_ag - g_analytical))\n", + " print(\"The max absolute difference between the solutions is: %g\"%max_diff)\n", + "\n", + " plt.figure(figsize=(10,10))\n", + "\n", + " plt.title('Performance of neural network solving an ODE compared to the analytical solution')\n", + " plt.plot(x, g_analytical)\n", + " plt.plot(x, g_dnn_ag[0,:])\n", + " plt.legend(['analytical','nn'])\n", + " plt.xlabel('x')\n", + " plt.ylabel('g(x)')\n", + " plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Comparing with a numerical scheme\n", + "\n", + "The Poisson equation is possible to solve using Taylor series to approximate the second derivative.\n", + "\n", + "Using Taylor series, the second derivative can be expressed as\n", + "\n", + "$$\n", + "g''(x) = \\frac{g(x + \\Delta x) - 2g(x) + g(x-\\Delta x)}{\\Delta x^2} + E_{\\Delta x}(x)\n", + "$$\n", + "\n", + "where $\\Delta x$ is a small step size and $E_{\\Delta x}(x)$ being the error term.\n", + "\n", + "Looking away from the error terms gives an approximation to the second derivative:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \\label{approx} \\tag{15}\n", + "g''(x) \\approx \\frac{g(x + \\Delta x) - 2g(x) + g(x-\\Delta x)}{\\Delta x^2}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If $x_i = i \\Delta x = x_{i-1} + \\Delta x$ and $g_i = g(x_i)$ for $i = 1,\\dots N_x - 2$ with $N_x$ being the number of values for $x$, ([15](#approx)) becomes" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{aligned}\n", + "g''(x_i) &\\approx \\frac{g(x_i + \\Delta x) - 2g(x_i) + g(x_i -\\Delta x)}{\\Delta x^2} \\\\\n", + "&= \\frac{g_{i+1} - 2g_i + g_{i-1}}{\\Delta x^2}\n", + "\\end{aligned}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Since we know from our problem that" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{aligned}\n", + "-g''(x) &= f(x) \\\\\n", + "&= (3x + x^2)\\exp(x)\n", + "\\end{aligned}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "along with the conditions $g(0) = g(1) = 0$,\n", + "the following scheme can be used to find an approximate solution for $g(x)$ numerically:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + " \\begin{aligned}\n", + " -\\Big( \\frac{g_{i+1} - 2g_i + g_{i-1}}{\\Delta x^2} \\Big) &= f(x_i) \\\\\n", + " -g_{i+1} + 2g_i - g_{i-1} &= \\Delta x^2 f(x_i)\n", + " \\end{aligned}\n", + "\\end{equation} \\label{odesys} \\tag{16}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "for $i = 1, \\dots, N_x - 2$ where $g_0 = g_{N_x - 1} = 0$ and $f(x_i) = (3x_i + x_i^2)\\exp(x_i)$, which is given for our specific problem.\n", + "\n", + "The equation can be rewritten into a matrix equation:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{aligned}\n", + "\\begin{pmatrix}\n", + "2 & -1 & 0 & \\dots & 0 \\\\\n", + "-1 & 2 & -1 & \\dots & 0 \\\\\n", + "\\vdots & & \\ddots & & \\vdots \\\\\n", + "0 & \\dots & -1 & 2 & -1 \\\\\n", + "0 & \\dots & 0 & -1 & 2\\\\\n", + "\\end{pmatrix}\n", + "\\begin{pmatrix}\n", + "g_1 \\\\\n", + "g_2 \\\\\n", + "\\vdots \\\\\n", + "g_{N_x - 3} \\\\\n", + "g_{N_x - 2}\n", + "\\end{pmatrix}\n", + "&=\n", + "\\Delta x^2\n", + "\\begin{pmatrix}\n", + "f(x_1) \\\\\n", + "f(x_2) \\\\\n", + "\\vdots \\\\\n", + "f(x_{N_x - 3}) \\\\\n", + "f(x_{N_x - 2})\n", + "\\end{pmatrix} \\\\\n", + "\\boldsymbol{A}\\boldsymbol{g} &= \\boldsymbol{f},\n", + "\\end{aligned}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "which makes it possible to solve for the vector $\\boldsymbol{g}$.\n", + "\n", + "\n", + "## Setting up the code\n", + "\n", + "We can then compare the result from this numerical scheme with the output from our network using Autograd:" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import autograd.numpy as np\n", + "from autograd import grad, elementwise_grad\n", + "import autograd.numpy.random as npr\n", + "from matplotlib import pyplot as plt\n", + "\n", + "def sigmoid(z):\n", + " return 1/(1 + np.exp(-z))\n", + "\n", + "def deep_neural_network(deep_params, x):\n", + " # N_hidden is the number of hidden layers\n", + " N_hidden = np.size(deep_params) - 1 # -1 since params consist of parameters to all the hidden layers AND the output layer\n", + "\n", + " # Assumes input x being an one-dimensional array\n", + " num_values = np.size(x)\n", + " x = x.reshape(-1, num_values)\n", + "\n", + " # Assume that the input layer does nothing to the input x\n", + " x_input = x\n", + "\n", + " # Due to multiple hidden layers, define a variable referencing to the\n", + " # output of the previous layer:\n", + " x_prev = x_input\n", + "\n", + " ## Hidden layers:\n", + "\n", + " for l in range(N_hidden):\n", + " # From the list of parameters P; find the correct weigths and bias for this layer\n", + " w_hidden = deep_params[l]\n", + "\n", + " # Add a row of ones to include bias\n", + " x_prev = np.concatenate((np.ones((1,num_values)), x_prev ), axis = 0)\n", + "\n", + " z_hidden = np.matmul(w_hidden, x_prev)\n", + " x_hidden = sigmoid(z_hidden)\n", + "\n", + " # Update x_prev such that next layer can use the output from this layer\n", + " x_prev = x_hidden\n", + "\n", + " ## Output layer:\n", + "\n", + " # Get the weights and bias for this layer\n", + " w_output = deep_params[-1]\n", + "\n", + " # Include bias:\n", + " x_prev = np.concatenate((np.ones((1,num_values)), x_prev), axis = 0)\n", + "\n", + " z_output = np.matmul(w_output, x_prev)\n", + " x_output = z_output\n", + "\n", + " return x_output\n", + "\n", + "def solve_ode_deep_neural_network(x, num_neurons, num_iter, lmb):\n", + " # num_hidden_neurons is now a list of number of neurons within each hidden layer\n", + "\n", + " # Find the number of hidden layers:\n", + " N_hidden = np.size(num_neurons)\n", + "\n", + " ## Set up initial weigths and biases\n", + "\n", + " # Initialize the list of parameters:\n", + " P = [None]*(N_hidden + 1) # + 1 to include the output layer\n", + "\n", + " P[0] = npr.randn(num_neurons[0], 2 )\n", + " for l in range(1,N_hidden):\n", + " P[l] = npr.randn(num_neurons[l], num_neurons[l-1] + 1) # +1 to include bias\n", + "\n", + " # For the output layer\n", + " P[-1] = npr.randn(1, num_neurons[-1] + 1 ) # +1 since bias is included\n", + "\n", + " print('Initial cost: %g'%cost_function_deep(P, x))\n", + "\n", + " ## Start finding the optimal weigths using gradient descent\n", + "\n", + " # Find the Python function that represents the gradient of the cost function\n", + " # w.r.t the 0-th input argument -- that is the weights and biases in the hidden and output layer\n", + " cost_function_deep_grad = grad(cost_function_deep,0)\n", + "\n", + " # Let the update be done num_iter times\n", + " for i in range(num_iter):\n", + " # Evaluate the gradient at the current weights and biases in P.\n", + " # The cost_grad consist now of N_hidden + 1 arrays; the gradient w.r.t the weights and biases\n", + " # in the hidden layers and output layers evaluated at x.\n", + " cost_deep_grad = cost_function_deep_grad(P, x)\n", + "\n", + " for l in range(N_hidden+1):\n", + " P[l] = P[l] - lmb * cost_deep_grad[l]\n", + "\n", + " print('Final cost: %g'%cost_function_deep(P, x))\n", + "\n", + " return P\n", + "\n", + "## Set up the cost function specified for this Poisson equation:\n", + "\n", + "# The right side of the ODE\n", + "def f(x):\n", + " return (3*x + x**2)*np.exp(x)\n", + "\n", + "def cost_function_deep(P, x):\n", + "\n", + " # Evaluate the trial function with the current parameters P\n", + " g_t = g_trial_deep(x,P)\n", + "\n", + " # Find the derivative w.r.t x of the trial function\n", + " d2_g_t = elementwise_grad(elementwise_grad(g_trial_deep,0))(x,P)\n", + "\n", + " right_side = f(x)\n", + "\n", + " err_sqr = (-d2_g_t - right_side)**2\n", + " cost_sum = np.sum(err_sqr)\n", + "\n", + " return cost_sum/np.size(err_sqr)\n", + "\n", + "# The trial solution:\n", + "def g_trial_deep(x,P):\n", + " return x*(1-x)*deep_neural_network(P,x)\n", + "\n", + "# The analytic solution;\n", + "def g_analytic(x):\n", + " return x*(1-x)*np.exp(x)\n", + "\n", + "if __name__ == '__main__':\n", + " npr.seed(4155)\n", + "\n", + " ## Decide the vales of arguments to the function to solve\n", + " Nx = 10\n", + " x = np.linspace(0,1, Nx)\n", + "\n", + " ## Set up the initial parameters\n", + " num_hidden_neurons = [200,100]\n", + " num_iter = 1000\n", + " lmb = 1e-3\n", + "\n", + " P = solve_ode_deep_neural_network(x, num_hidden_neurons, num_iter, lmb)\n", + "\n", + " g_dnn_ag = g_trial_deep(x,P)\n", + " g_analytical = g_analytic(x)\n", + "\n", + " # Find the maximum absolute difference between the solutons:\n", + "\n", + " plt.figure(figsize=(10,10))\n", + "\n", + " plt.title('Performance of neural network solving an ODE compared to the analytical solution')\n", + " plt.plot(x, g_analytical)\n", + " plt.plot(x, g_dnn_ag[0,:])\n", + " plt.legend(['analytical','nn'])\n", + " plt.xlabel('x')\n", + " plt.ylabel('g(x)')\n", + "\n", + " ## Perform the computation using the numerical scheme\n", + "\n", + " dx = 1/(Nx - 1)\n", + "\n", + " # Set up the matrix A\n", + " A = np.zeros((Nx-2,Nx-2))\n", + "\n", + " A[0,0] = 2\n", + " A[0,1] = -1\n", + "\n", + " for i in range(1,Nx-3):\n", + " A[i,i-1] = -1\n", + " A[i,i] = 2\n", + " A[i,i+1] = -1\n", + "\n", + " A[Nx - 3, Nx - 4] = -1\n", + " A[Nx - 3, Nx - 3] = 2\n", + "\n", + " # Set up the vector f\n", + " f_vec = dx**2 * f(x[1:-1])\n", + "\n", + " # Solve the equation\n", + " g_res = np.linalg.solve(A,f_vec)\n", + "\n", + " g_vec = np.zeros(Nx)\n", + " g_vec[1:-1] = g_res\n", + "\n", + " # Print the differences between each method\n", + " max_diff1 = np.max(np.abs(g_dnn_ag - g_analytical))\n", + " max_diff2 = np.max(np.abs(g_vec - g_analytical))\n", + " print(\"The max absolute difference between the analytical solution and DNN Autograd: %g\"%max_diff1)\n", + " print(\"The max absolute difference between the analytical solution and numerical scheme: %g\"%max_diff2)\n", + "\n", + " # Plot the results\n", + " plt.figure(figsize=(10,10))\n", + "\n", + " plt.plot(x,g_vec)\n", + " plt.plot(x,g_analytical)\n", + " plt.plot(x,g_dnn_ag[0,:])\n", + "\n", + " plt.legend(['numerical scheme','analytical','dnn'])\n", + " plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Partial Differential Equations\n", + "\n", + "A partial differential equation (PDE) has a solution here the function\n", + "is defined by multiple variables. The equation may involve all kinds\n", + "of combinations of which variables the function is differentiated with\n", + "respect to.\n", + "\n", + "In general, a partial differential equation for a function $g(x_1,\\dots,x_N)$ with $N$ variables may be expressed as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \\label{PDE} \\tag{17}\n", + " f\\left(x_1, \\, \\dots \\, , x_N, \\frac{\\partial g(x_1,\\dots,x_N) }{\\partial x_1}, \\dots , \\frac{\\partial g(x_1,\\dots,x_N) }{\\partial x_N}, \\frac{\\partial g(x_1,\\dots,x_N) }{\\partial x_1\\partial x_2}, \\, \\dots \\, , \\frac{\\partial^n g(x_1,\\dots,x_N) }{\\partial x_N^n} \\right) = 0\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $f$ is an expression involving all kinds of possible mixed derivatives of $g(x_1,\\dots,x_N)$ up to an order $n$. In order for the solution to be unique, some additional conditions must also be given.\n", + "\n", + "\n", + "## Type of problem\n", + "\n", + "The problem our network must solve for, is similar to the ODE case.\n", + "We must have a trial solution $g_t$ at hand.\n", + "\n", + "For instance, the trial solution could be expressed as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{align*}\n", + " g_t(x_1,\\dots,x_N) = h_1(x_1,\\dots,x_N) + h_2(x_1,\\dots,x_N,N(x_1,\\dots,x_N,P))\n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $h_1(x_1,\\dots,x_N)$ is a function that ensures $g_t(x_1,\\dots,x_N)$ satisfies some given conditions.\n", + "The neural network $N(x_1,\\dots,x_N,P)$ has weights and biases described by $P$ and $h_2(x_1,\\dots,x_N,N(x_1,\\dots,x_N,P))$ is an expression using the output from the neural network in some way.\n", + "\n", + "The role of the function $h_2(x_1,\\dots,x_N,N(x_1,\\dots,x_N,P))$, is to ensure that the output of $N(x_1,\\dots,x_N,P)$ is zero when $g_t(x_1,\\dots,x_N)$ is evaluated at the values of $x_1,\\dots,x_N$ where the given conditions must be satisfied. The function $h_1(x_1,\\dots,x_N)$ should alone make $g_t(x_1,\\dots,x_N)$ satisfy the conditions.\n", + "\n", + "\n", + "\n", + "## Network requirements\n", + "\n", + "The network tries then the minimize the cost function following the\n", + "same ideas as described for the ODE case, but now with more than one\n", + "variables to consider. The concept still remains the same; find a set\n", + "of parameters $P$ such that the expression $f$ in ([17](#PDE)) is as\n", + "close to zero as possible.\n", + "\n", + "As for the ODE case, the cost function is the mean squared error that\n", + "the network must try to minimize. The cost function for the network to\n", + "minimize is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "C\\left(x_1, \\dots, x_N, P\\right) = \\left( f\\left(x_1, \\, \\dots \\, , x_N, \\frac{\\partial g(x_1,\\dots,x_N) }{\\partial x_1}, \\dots , \\frac{\\partial g(x_1,\\dots,x_N) }{\\partial x_N}, \\frac{\\partial g(x_1,\\dots,x_N) }{\\partial x_1\\partial x_2}, \\, \\dots \\, , \\frac{\\partial^n g(x_1,\\dots,x_N) }{\\partial x_N^n} \\right) \\right)^2\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## More details\n", + "\n", + "If we let $\\boldsymbol{x} = \\big( x_1, \\dots, x_N \\big)$ be an array containing the values for $x_1, \\dots, x_N$ respectively, the cost function can be reformulated into the following:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "C\\left(\\boldsymbol{x}, P\\right) = f\\left( \\left( \\boldsymbol{x}, \\frac{\\partial g(\\boldsymbol{x}) }{\\partial x_1}, \\dots , \\frac{\\partial g(\\boldsymbol{x}) }{\\partial x_N}, \\frac{\\partial g(\\boldsymbol{x}) }{\\partial x_1\\partial x_2}, \\, \\dots \\, , \\frac{\\partial^n g(\\boldsymbol{x}) }{\\partial x_N^n} \\right) \\right)^2\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If we also have $M$ different sets of values for $x_1, \\dots, x_N$, that is $\\boldsymbol{x}_i = \\big(x_1^{(i)}, \\dots, x_N^{(i)}\\big)$ for $i = 1,\\dots,M$ being the rows in matrix $X$, the cost function can be generalized into" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "C\\left(X, P \\right) = \\sum_{i=1}^M f\\left( \\left( \\boldsymbol{x}_i, \\frac{\\partial g(\\boldsymbol{x}_i) }{\\partial x_1}, \\dots , \\frac{\\partial g(\\boldsymbol{x}_i) }{\\partial x_N}, \\frac{\\partial g(\\boldsymbol{x}_i) }{\\partial x_1\\partial x_2}, \\, \\dots \\, , \\frac{\\partial^n g(\\boldsymbol{x}_i) }{\\partial x_N^n} \\right) \\right)^2.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example: The diffusion equation\n", + "\n", + "In one spatial dimension, the equation reads" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{\\partial g(x,t)}{\\partial t} = \\frac{\\partial^2 g(x,t)}{\\partial x^2}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where a possible choice of conditions are" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{align*}\n", + "g(0,t) &= 0 ,\\qquad t \\geq 0 \\\\\n", + "g(1,t) &= 0, \\qquad t \\geq 0 \\\\\n", + "g(x,0) &= u(x),\\qquad x\\in [0,1]\n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "with $u(x)$ being some given function.\n", + "\n", + "\n", + "## Defining the problem\n", + "\n", + "For this case, we want to find $g(x,t)$ such that" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + " \\frac{\\partial g(x,t)}{\\partial t} = \\frac{\\partial^2 g(x,t)}{\\partial x^2}\n", + "\\end{equation} \\label{diffonedim} \\tag{18}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{align*}\n", + "g(0,t) &= 0 ,\\qquad t \\geq 0 \\\\\n", + "g(1,t) &= 0, \\qquad t \\geq 0 \\\\\n", + "g(x,0) &= u(x),\\qquad x\\in [0,1]\n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "with $u(x) = \\sin(\\pi x)$.\n", + "\n", + "First, let us set up the deep neural network.\n", + "The deep neural network will follow the same structure as discussed in the examples solving the ODEs.\n", + "First, we will look into how Autograd could be used in a network tailored to solve for bivariate functions.\n", + "\n", + "\n", + "\n", + "\n", + "## Setting up the network using Autograd\n", + "\n", + "The only change to do here, is to extend our network such that\n", + "functions of multiple parameters are correctly handled. In this case\n", + "we have two variables in our function to solve for, that is time $t$\n", + "and position $x$. The variables will be represented by a\n", + "one-dimensional array in the program. The program will evaluate the\n", + "network at each possible pair $(x,t)$, given an array for the desired\n", + "$x$-values and $t$-values to approximate the solution at." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def sigmoid(z):\n", + " return 1/(1 + np.exp(-z))\n", + "\n", + "def deep_neural_network(deep_params, x):\n", + " # x is now a point and a 1D numpy array; make it a column vector\n", + " num_coordinates = np.size(x,0)\n", + " x = x.reshape(num_coordinates,-1)\n", + "\n", + " num_points = np.size(x,1)\n", + "\n", + " # N_hidden is the number of hidden layers\n", + " N_hidden = np.size(deep_params) - 1 # -1 since params consist of parameters to all the hidden layers AND the output layer\n", + "\n", + " # Assume that the input layer does nothing to the input x\n", + " x_input = x\n", + " x_prev = x_input\n", + "\n", + " ## Hidden layers:\n", + "\n", + " for l in range(N_hidden):\n", + " # From the list of parameters P; find the correct weigths and bias for this layer\n", + " w_hidden = deep_params[l]\n", + "\n", + " # Add a row of ones to include bias\n", + " x_prev = np.concatenate((np.ones((1,num_points)), x_prev ), axis = 0)\n", + "\n", + " z_hidden = np.matmul(w_hidden, x_prev)\n", + " x_hidden = sigmoid(z_hidden)\n", + "\n", + " # Update x_prev such that next layer can use the output from this layer\n", + " x_prev = x_hidden\n", + "\n", + " ## Output layer:\n", + "\n", + " # Get the weights and bias for this layer\n", + " w_output = deep_params[-1]\n", + "\n", + " # Include bias:\n", + " x_prev = np.concatenate((np.ones((1,num_points)), x_prev), axis = 0)\n", + "\n", + " z_output = np.matmul(w_output, x_prev)\n", + " x_output = z_output\n", + "\n", + " return x_output[0][0]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Setting up the network using Autograd; The trial solution\n", + "\n", + "The cost function must then iterate through the given arrays\n", + "containing values for $x$ and $t$, defines a point $(x,t)$ the deep\n", + "neural network and the trial solution is evaluated at, and then finds\n", + "the Jacobian of the trial solution.\n", + "\n", + "A possible trial solution for this PDE is\n", + "\n", + "$$\n", + "g_t(x,t) = h_1(x,t) + x(1-x)tN(x,t,P)\n", + "$$\n", + "\n", + "with $A(x,t)$ being a function ensuring that $g_t(x,t)$ satisfies our given conditions, and $N(x,t,P)$ being the output from the deep neural network using weights and biases for each layer from $P$.\n", + "\n", + "To fulfill the conditions, $A(x,t)$ could be:\n", + "\n", + "$$\n", + "h_1(x,t) = (1-t)\\Big(u(x) - \\big((1-x)u(0) + x u(1)\\big)\\Big) = (1-t)u(x) = (1-t)\\sin(\\pi x)\n", + "$$\n", + "since $(0) = u(1) = 0$ and $u(x) = \\sin(\\pi x)$.\n", + "\n", + "\n", + "## Why the jacobian?\n", + "\n", + "The Jacobian is used because the program must find the derivative of\n", + "the trial solution with respect to $x$ and $t$.\n", + "\n", + "This gives the necessity of computing the Jacobian matrix, as we want\n", + "to evaluate the gradient with respect to $x$ and $t$ (note that the\n", + "Jacobian of a scalar-valued multivariate function is simply its\n", + "gradient).\n", + "\n", + "In Autograd, the differentiation is by default done with respect to\n", + "the first input argument of your Python function. Since the points is\n", + "an array representing $x$ and $t$, the Jacobian is calculated using\n", + "the values of $x$ and $t$.\n", + "\n", + "To find the second derivative with respect to $x$ and $t$, the\n", + "Jacobian can be found for the second time. The result is a Hessian\n", + "matrix, which is the matrix containing all the possible second order\n", + "mixed derivatives of $g(x,t)$." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Set up the trial function:\n", + "def u(x):\n", + " return np.sin(np.pi*x)\n", + "\n", + "def g_trial(point,P):\n", + " x,t = point\n", + " return (1-t)*u(x) + x*(1-x)*t*deep_neural_network(P,point)\n", + "\n", + "# The right side of the ODE:\n", + "def f(point):\n", + " return 0.\n", + "\n", + "# The cost function:\n", + "def cost_function(P, x, t):\n", + " cost_sum = 0\n", + "\n", + " g_t_jacobian_func = jacobian(g_trial)\n", + " g_t_hessian_func = hessian(g_trial)\n", + "\n", + " for x_ in x:\n", + " for t_ in t:\n", + " point = np.array([x_,t_])\n", + "\n", + " g_t = g_trial(point,P)\n", + " g_t_jacobian = g_t_jacobian_func(point,P)\n", + " g_t_hessian = g_t_hessian_func(point,P)\n", + "\n", + " g_t_dt = g_t_jacobian[1]\n", + " g_t_d2x = g_t_hessian[0][0]\n", + "\n", + " func = f(point)\n", + "\n", + " err_sqr = ( (g_t_dt - g_t_d2x) - func)**2\n", + " cost_sum += err_sqr\n", + "\n", + " return cost_sum" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Setting up the network using Autograd; The full program\n", + "\n", + "Having set up the network, along with the trial solution and cost function, we can now see how the deep neural network performs by comparing the results to the analytical solution.\n", + "\n", + "The analytical solution of our problem is\n", + "\n", + "$$\n", + "g(x,t) = \\exp(-\\pi^2 t)\\sin(\\pi x)\n", + "$$\n", + "\n", + "A possible way to implement a neural network solving the PDE, is given below.\n", + "Be aware, though, that it is fairly slow for the parameters used.\n", + "A better result is possible, but requires more iterations, and thus longer time to complete.\n", + "\n", + "\n", + "Indeed, the program below is not optimal in its implementation, but rather serves as an example on how to implement and use a neural network to solve a PDE.\n", + "Using TensorFlow results in a much better execution time. Try it!" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import autograd.numpy as np\n", + "from autograd import jacobian,hessian,grad\n", + "import autograd.numpy.random as npr\n", + "from matplotlib import cm\n", + "from matplotlib import pyplot as plt\n", + "from mpl_toolkits.mplot3d import axes3d\n", + "\n", + "## Set up the network\n", + "\n", + "def sigmoid(z):\n", + " return 1/(1 + np.exp(-z))\n", + "\n", + "def deep_neural_network(deep_params, x):\n", + " # x is now a point and a 1D numpy array; make it a column vector\n", + " num_coordinates = np.size(x,0)\n", + " x = x.reshape(num_coordinates,-1)\n", + "\n", + " num_points = np.size(x,1)\n", + "\n", + " # N_hidden is the number of hidden layers\n", + " N_hidden = np.size(deep_params) - 1 # -1 since params consist of parameters to all the hidden layers AND the output layer\n", + "\n", + " # Assume that the input layer does nothing to the input x\n", + " x_input = x\n", + " x_prev = x_input\n", + "\n", + " ## Hidden layers:\n", + "\n", + " for l in range(N_hidden):\n", + " # From the list of parameters P; find the correct weigths and bias for this layer\n", + " w_hidden = deep_params[l]\n", + "\n", + " # Add a row of ones to include bias\n", + " x_prev = np.concatenate((np.ones((1,num_points)), x_prev ), axis = 0)\n", + "\n", + " z_hidden = np.matmul(w_hidden, x_prev)\n", + " x_hidden = sigmoid(z_hidden)\n", + "\n", + " # Update x_prev such that next layer can use the output from this layer\n", + " x_prev = x_hidden\n", + "\n", + " ## Output layer:\n", + "\n", + " # Get the weights and bias for this layer\n", + " w_output = deep_params[-1]\n", + "\n", + " # Include bias:\n", + " x_prev = np.concatenate((np.ones((1,num_points)), x_prev), axis = 0)\n", + "\n", + " z_output = np.matmul(w_output, x_prev)\n", + " x_output = z_output\n", + "\n", + " return x_output[0][0]\n", + "\n", + "## Define the trial solution and cost function\n", + "def u(x):\n", + " return np.sin(np.pi*x)\n", + "\n", + "def g_trial(point,P):\n", + " x,t = point\n", + " return (1-t)*u(x) + x*(1-x)*t*deep_neural_network(P,point)\n", + "\n", + "# The right side of the ODE:\n", + "def f(point):\n", + " return 0.\n", + "\n", + "# The cost function:\n", + "def cost_function(P, x, t):\n", + " cost_sum = 0\n", + "\n", + " g_t_jacobian_func = jacobian(g_trial)\n", + " g_t_hessian_func = hessian(g_trial)\n", + "\n", + " for x_ in x:\n", + " for t_ in t:\n", + " point = np.array([x_,t_])\n", + "\n", + " g_t = g_trial(point,P)\n", + " g_t_jacobian = g_t_jacobian_func(point,P)\n", + " g_t_hessian = g_t_hessian_func(point,P)\n", + "\n", + " g_t_dt = g_t_jacobian[1]\n", + " g_t_d2x = g_t_hessian[0][0]\n", + "\n", + " func = f(point)\n", + "\n", + " err_sqr = ( (g_t_dt - g_t_d2x) - func)**2\n", + " cost_sum += err_sqr\n", + "\n", + " return cost_sum /( np.size(x)*np.size(t) )\n", + "\n", + "## For comparison, define the analytical solution\n", + "def g_analytic(point):\n", + " x,t = point\n", + " return np.exp(-np.pi**2*t)*np.sin(np.pi*x)\n", + "\n", + "## Set up a function for training the network to solve for the equation\n", + "def solve_pde_deep_neural_network(x,t, num_neurons, num_iter, lmb):\n", + " ## Set up initial weigths and biases\n", + " N_hidden = np.size(num_neurons)\n", + "\n", + " ## Set up initial weigths and biases\n", + "\n", + " # Initialize the list of parameters:\n", + " P = [None]*(N_hidden + 1) # + 1 to include the output layer\n", + "\n", + " P[0] = npr.randn(num_neurons[0], 2 + 1 ) # 2 since we have two points, +1 to include bias\n", + " for l in range(1,N_hidden):\n", + " P[l] = npr.randn(num_neurons[l], num_neurons[l-1] + 1) # +1 to include bias\n", + "\n", + " # For the output layer\n", + " P[-1] = npr.randn(1, num_neurons[-1] + 1 ) # +1 since bias is included\n", + "\n", + " print('Initial cost: ',cost_function(P, x, t))\n", + "\n", + " cost_function_grad = grad(cost_function,0)\n", + "\n", + " # Let the update be done num_iter times\n", + " for i in range(num_iter):\n", + " cost_grad = cost_function_grad(P, x , t)\n", + "\n", + " for l in range(N_hidden+1):\n", + " P[l] = P[l] - lmb * cost_grad[l]\n", + "\n", + " print('Final cost: ',cost_function(P, x, t))\n", + "\n", + " return P\n", + "\n", + "if __name__ == '__main__':\n", + " ### Use the neural network:\n", + " npr.seed(15)\n", + "\n", + " ## Decide the vales of arguments to the function to solve\n", + " Nx = 10; Nt = 10\n", + " x = np.linspace(0, 1, Nx)\n", + " t = np.linspace(0,1,Nt)\n", + "\n", + " ## Set up the parameters for the network\n", + " num_hidden_neurons = [100, 25]\n", + " num_iter = 250\n", + " lmb = 0.01\n", + "\n", + " P = solve_pde_deep_neural_network(x,t, num_hidden_neurons, num_iter, lmb)\n", + "\n", + " ## Store the results\n", + " g_dnn_ag = np.zeros((Nx, Nt))\n", + " G_analytical = np.zeros((Nx, Nt))\n", + " for i,x_ in enumerate(x):\n", + " for j, t_ in enumerate(t):\n", + " point = np.array([x_, t_])\n", + " g_dnn_ag[i,j] = g_trial(point,P)\n", + "\n", + " G_analytical[i,j] = g_analytic(point)\n", + "\n", + " # Find the map difference between the analytical and the computed solution\n", + " diff_ag = np.abs(g_dnn_ag - G_analytical)\n", + " print('Max absolute difference between the analytical solution and the network: %g'%np.max(diff_ag))\n", + "\n", + " ## Plot the solutions in two dimensions, that being in position and time\n", + "\n", + " T,X = np.meshgrid(t,x)\n", + "\n", + " fig = plt.figure(figsize=(10,10))\n", + " ax = fig.gca(projection='3d')\n", + " ax.set_title('Solution from the deep neural network w/ %d layer'%len(num_hidden_neurons))\n", + " s = ax.plot_surface(T,X,g_dnn_ag,linewidth=0,antialiased=False,cmap=cm.viridis)\n", + " ax.set_xlabel('Time $t$')\n", + " ax.set_ylabel('Position $x$');\n", + "\n", + "\n", + " fig = plt.figure(figsize=(10,10))\n", + " ax = fig.gca(projection='3d')\n", + " ax.set_title('Analytical solution')\n", + " s = ax.plot_surface(T,X,G_analytical,linewidth=0,antialiased=False,cmap=cm.viridis)\n", + " ax.set_xlabel('Time $t$')\n", + " ax.set_ylabel('Position $x$');\n", + "\n", + " fig = plt.figure(figsize=(10,10))\n", + " ax = fig.gca(projection='3d')\n", + " ax.set_title('Difference')\n", + " s = ax.plot_surface(T,X,diff_ag,linewidth=0,antialiased=False,cmap=cm.viridis)\n", + " ax.set_xlabel('Time $t$')\n", + " ax.set_ylabel('Position $x$');\n", + "\n", + " ## Take some slices of the 3D plots just to see the solutions at particular times\n", + " indx1 = 0\n", + " indx2 = int(Nt/2)\n", + " indx3 = Nt-1\n", + "\n", + " t1 = t[indx1]\n", + " t2 = t[indx2]\n", + " t3 = t[indx3]\n", + "\n", + " # Slice the results from the DNN\n", + " res1 = g_dnn_ag[:,indx1]\n", + " res2 = g_dnn_ag[:,indx2]\n", + " res3 = g_dnn_ag[:,indx3]\n", + "\n", + " # Slice the analytical results\n", + " res_analytical1 = G_analytical[:,indx1]\n", + " res_analytical2 = G_analytical[:,indx2]\n", + " res_analytical3 = G_analytical[:,indx3]\n", + "\n", + " # Plot the slices\n", + " plt.figure(figsize=(10,10))\n", + " plt.title(\"Computed solutions at time = %g\"%t1)\n", + " plt.plot(x, res1)\n", + " plt.plot(x,res_analytical1)\n", + " plt.legend(['dnn','analytical'])\n", + "\n", + " plt.figure(figsize=(10,10))\n", + " plt.title(\"Computed solutions at time = %g\"%t2)\n", + " plt.plot(x, res2)\n", + " plt.plot(x,res_analytical2)\n", + " plt.legend(['dnn','analytical'])\n", + "\n", + " plt.figure(figsize=(10,10))\n", + " plt.title(\"Computed solutions at time = %g\"%t3)\n", + " plt.plot(x, res3)\n", + " plt.plot(x,res_analytical3)\n", + " plt.legend(['dnn','analytical'])\n", + "\n", + " plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example: Solving the wave equation with Neural Networks\n", + "\n", + "The wave equation is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{\\partial^2 g(x,t)}{\\partial t^2} = c^2\\frac{\\partial^2 g(x,t)}{\\partial x^2}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "with $c$ being the specified wave speed.\n", + "\n", + "Here, the chosen conditions are" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{align*}\n", + "\tg(0,t) &= 0 \\\\\n", + "\tg(1,t) &= 0 \\\\\n", + "\tg(x,0) &= u(x) \\\\\n", + "\t\\frac{\\partial g(x,t)}{\\partial t} \\Big |_{t = 0} &= v(x)\n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $\\frac{\\partial g(x,t)}{\\partial t} \\Big |_{t = 0}$ means the derivative of $g(x,t)$ with respect to $t$ is evaluated at $t = 0$, and $u(x)$ and $v(x)$ being given functions.\n", + "\n", + "\n", + "## The problem to solve for\n", + "\n", + "The wave equation to solve for, is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation} \\label{wave} \\tag{19}\n", + "\\frac{\\partial^2 g(x,t)}{\\partial t^2} = c^2 \\frac{\\partial^2 g(x,t)}{\\partial x^2}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $c$ is the given wave speed.\n", + "The chosen conditions for this equation are" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{aligned}\n", + "g(0,t) &= 0, &t \\geq 0 \\\\\n", + "g(1,t) &= 0, &t \\geq 0 \\\\\n", + "g(x,0) &= u(x), &x\\in[0,1] \\\\\n", + "\\frac{\\partial g(x,t)}{\\partial t}\\Big |_{t = 0} &= v(x), &x \\in [0,1]\n", + "\\end{aligned} \\label{condwave} \\tag{20}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this example, let $c = 1$ and $u(x) = \\sin(\\pi x)$ and $v(x) = -\\pi\\sin(\\pi x)$.\n", + "\n", + "\n", + "\n", + "## The trial solution\n", + "Setting up the network is done in similar matter as for the example of solving the diffusion equation.\n", + "The only things we have to change, is the trial solution such that it satisfies the conditions from ([20](#condwave)) and the cost function.\n", + "\n", + "The trial solution becomes slightly different since we have other conditions than in the example of solving the diffusion equation. Here, a possible trial solution $g_t(x,t)$ is\n", + "\n", + "$$\n", + "g_t(x,t) = h_1(x,t) + x(1-x)t^2N(x,t,P)\n", + "$$\n", + "\n", + "where\n", + "\n", + "$$\n", + "h_1(x,t) = (1-t^2)u(x) + tv(x)\n", + "$$\n", + "\n", + "Note that this trial solution satisfies the conditions only if $u(0) = v(0) = u(1) = v(1) = 0$, which is the case in this example.\n", + "\n", + "\n", + "## The analytical solution\n", + "\n", + "The analytical solution for our specific problem, is\n", + "\n", + "$$\n", + "g(x,t) = \\sin(\\pi x)\\cos(\\pi t) - \\sin(\\pi x)\\sin(\\pi t)\n", + "$$\n", + "\n", + "\n", + "## Solving the wave equation - the full program using Autograd" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import autograd.numpy as np\n", + "from autograd import hessian,grad\n", + "import autograd.numpy.random as npr\n", + "from matplotlib import cm\n", + "from matplotlib import pyplot as plt\n", + "from mpl_toolkits.mplot3d import axes3d\n", + "\n", + "## Set up the trial function:\n", + "def u(x):\n", + " return np.sin(np.pi*x)\n", + "\n", + "def v(x):\n", + " return -np.pi*np.sin(np.pi*x)\n", + "\n", + "def h1(point):\n", + " x,t = point\n", + " return (1 - t**2)*u(x) + t*v(x)\n", + "\n", + "def g_trial(point,P):\n", + " x,t = point\n", + " return h1(point) + x*(1-x)*t**2*deep_neural_network(P,point)\n", + "\n", + "## Define the cost function\n", + "def cost_function(P, x, t):\n", + " cost_sum = 0\n", + "\n", + " g_t_hessian_func = hessian(g_trial)\n", + "\n", + " for x_ in x:\n", + " for t_ in t:\n", + " point = np.array([x_,t_])\n", + "\n", + " g_t_hessian = g_t_hessian_func(point,P)\n", + "\n", + " g_t_d2x = g_t_hessian[0][0]\n", + " g_t_d2t = g_t_hessian[1][1]\n", + "\n", + " err_sqr = ( (g_t_d2t - g_t_d2x) )**2\n", + " cost_sum += err_sqr\n", + "\n", + " return cost_sum / (np.size(t) * np.size(x))\n", + "\n", + "## The neural network\n", + "def sigmoid(z):\n", + " return 1/(1 + np.exp(-z))\n", + "\n", + "def deep_neural_network(deep_params, x):\n", + " # x is now a point and a 1D numpy array; make it a column vector\n", + " num_coordinates = np.size(x,0)\n", + " x = x.reshape(num_coordinates,-1)\n", + "\n", + " num_points = np.size(x,1)\n", + "\n", + " # N_hidden is the number of hidden layers\n", + " N_hidden = np.size(deep_params) - 1 # -1 since params consist of parameters to all the hidden layers AND the output layer\n", + "\n", + " # Assume that the input layer does nothing to the input x\n", + " x_input = x\n", + " x_prev = x_input\n", + "\n", + " ## Hidden layers:\n", + "\n", + " for l in range(N_hidden):\n", + " # From the list of parameters P; find the correct weigths and bias for this layer\n", + " w_hidden = deep_params[l]\n", + "\n", + " # Add a row of ones to include bias\n", + " x_prev = np.concatenate((np.ones((1,num_points)), x_prev ), axis = 0)\n", + "\n", + " z_hidden = np.matmul(w_hidden, x_prev)\n", + " x_hidden = sigmoid(z_hidden)\n", + "\n", + " # Update x_prev such that next layer can use the output from this layer\n", + " x_prev = x_hidden\n", + "\n", + " ## Output layer:\n", + "\n", + " # Get the weights and bias for this layer\n", + " w_output = deep_params[-1]\n", + "\n", + " # Include bias:\n", + " x_prev = np.concatenate((np.ones((1,num_points)), x_prev), axis = 0)\n", + "\n", + " z_output = np.matmul(w_output, x_prev)\n", + " x_output = z_output\n", + "\n", + " return x_output[0][0]\n", + "\n", + "## The analytical solution\n", + "def g_analytic(point):\n", + " x,t = point\n", + " return np.sin(np.pi*x)*np.cos(np.pi*t) - np.sin(np.pi*x)*np.sin(np.pi*t)\n", + "\n", + "def solve_pde_deep_neural_network(x,t, num_neurons, num_iter, lmb):\n", + " ## Set up initial weigths and biases\n", + " N_hidden = np.size(num_neurons)\n", + "\n", + " ## Set up initial weigths and biases\n", + "\n", + " # Initialize the list of parameters:\n", + " P = [None]*(N_hidden + 1) # + 1 to include the output layer\n", + "\n", + " P[0] = npr.randn(num_neurons[0], 2 + 1 ) # 2 since we have two points, +1 to include bias\n", + " for l in range(1,N_hidden):\n", + " P[l] = npr.randn(num_neurons[l], num_neurons[l-1] + 1) # +1 to include bias\n", + "\n", + " # For the output layer\n", + " P[-1] = npr.randn(1, num_neurons[-1] + 1 ) # +1 since bias is included\n", + "\n", + " print('Initial cost: ',cost_function(P, x, t))\n", + "\n", + " cost_function_grad = grad(cost_function,0)\n", + "\n", + " # Let the update be done num_iter times\n", + " for i in range(num_iter):\n", + " cost_grad = cost_function_grad(P, x , t)\n", + "\n", + " for l in range(N_hidden+1):\n", + " P[l] = P[l] - lmb * cost_grad[l]\n", + "\n", + "\n", + " print('Final cost: ',cost_function(P, x, t))\n", + "\n", + " return P\n", + "\n", + "if __name__ == '__main__':\n", + " ### Use the neural network:\n", + " npr.seed(15)\n", + "\n", + " ## Decide the vales of arguments to the function to solve\n", + " Nx = 10; Nt = 10\n", + " x = np.linspace(0, 1, Nx)\n", + " t = np.linspace(0,1,Nt)\n", + "\n", + " ## Set up the parameters for the network\n", + " num_hidden_neurons = [50,20]\n", + " num_iter = 1000\n", + " lmb = 0.01\n", + "\n", + " P = solve_pde_deep_neural_network(x,t, num_hidden_neurons, num_iter, lmb)\n", + "\n", + " ## Store the results\n", + " res = np.zeros((Nx, Nt))\n", + " res_analytical = np.zeros((Nx, Nt))\n", + " for i,x_ in enumerate(x):\n", + " for j, t_ in enumerate(t):\n", + " point = np.array([x_, t_])\n", + " res[i,j] = g_trial(point,P)\n", + "\n", + " res_analytical[i,j] = g_analytic(point)\n", + "\n", + " diff = np.abs(res - res_analytical)\n", + " print(\"Max difference between analytical and solution from nn: %g\"%np.max(diff))\n", + "\n", + " ## Plot the solutions in two dimensions, that being in position and time\n", + "\n", + " T,X = np.meshgrid(t,x)\n", + "\n", + " fig = plt.figure(figsize=(10,10))\n", + " ax = fig.gca(projection='3d')\n", + " ax.set_title('Solution from the deep neural network w/ %d layer'%len(num_hidden_neurons))\n", + " s = ax.plot_surface(T,X,res,linewidth=0,antialiased=False,cmap=cm.viridis)\n", + " ax.set_xlabel('Time $t$')\n", + " ax.set_ylabel('Position $x$');\n", + "\n", + "\n", + " fig = plt.figure(figsize=(10,10))\n", + " ax = fig.gca(projection='3d')\n", + " ax.set_title('Analytical solution')\n", + " s = ax.plot_surface(T,X,res_analytical,linewidth=0,antialiased=False,cmap=cm.viridis)\n", + " ax.set_xlabel('Time $t$')\n", + " ax.set_ylabel('Position $x$');\n", + "\n", + "\n", + " fig = plt.figure(figsize=(10,10))\n", + " ax = fig.gca(projection='3d')\n", + " ax.set_title('Difference')\n", + " s = ax.plot_surface(T,X,diff,linewidth=0,antialiased=False,cmap=cm.viridis)\n", + " ax.set_xlabel('Time $t$')\n", + " ax.set_ylabel('Position $x$');\n", + "\n", + " ## Take some slices of the 3D plots just to see the solutions at particular times\n", + " indx1 = 0\n", + " indx2 = int(Nt/2)\n", + " indx3 = Nt-1\n", + "\n", + " t1 = t[indx1]\n", + " t2 = t[indx2]\n", + " t3 = t[indx3]\n", + "\n", + " # Slice the results from the DNN\n", + " res1 = res[:,indx1]\n", + " res2 = res[:,indx2]\n", + " res3 = res[:,indx3]\n", + "\n", + " # Slice the analytical results\n", + " res_analytical1 = res_analytical[:,indx1]\n", + " res_analytical2 = res_analytical[:,indx2]\n", + " res_analytical3 = res_analytical[:,indx3]\n", + "\n", + " # Plot the slices\n", + " plt.figure(figsize=(10,10))\n", + " plt.title(\"Computed solutions at time = %g\"%t1)\n", + " plt.plot(x, res1)\n", + " plt.plot(x,res_analytical1)\n", + " plt.legend(['dnn','analytical'])\n", + "\n", + " plt.figure(figsize=(10,10))\n", + " plt.title(\"Computed solutions at time = %g\"%t2)\n", + " plt.plot(x, res2)\n", + " plt.plot(x,res_analytical2)\n", + " plt.legend(['dnn','analytical'])\n", + "\n", + " plt.figure(figsize=(10,10))\n", + " plt.title(\"Computed solutions at time = %g\"%t3)\n", + " plt.plot(x, res3)\n", + " plt.plot(x,res_analytical3)\n", + " plt.legend(['dnn','analytical'])\n", + "\n", + " plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Resources on differential equations and deep learning\n", + "\n", + "1. [Artificial neural networks for solving ordinary and partial differential equations by I.E. Lagaris et al](https://pdfs.semanticscholar.org/d061/df393e0e8fbfd0ea24976458b7d42419040d.pdf)\n", + "\n", + "2. [Neural networks for solving differential equations by A. Honchar](https://becominghuman.ai/neural-networks-for-solving-differential-equations-fa230ac5e04c)\n", + "\n", + "3. [Solving differential equations using neural networks by M.M Chiaramonte and M. Kiener](http://cs229.stanford.edu/proj2013/ChiaramonteKiener-SolvingDifferentialEquationsUsingNeuralNetworks.pdf)\n", + "\n", + "4. [Introduction to Partial Differential Equations by A. Tveito, R. Winther](https://www.springer.com/us/book/9783540225515)" + ] + } + ], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/doc/src/LectureNotes/_build/html/_sources/chapter11.ipynb b/doc/src/LectureNotes/_build/html/_sources/chapter11.ipynb new file mode 100644 index 000000000..200cdd664 --- /dev/null +++ b/doc/src/LectureNotes/_build/html/_sources/chapter11.ipynb @@ -0,0 +1,1030 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "# Data Analysis and Machine Learning: \n", + "\n", + " \n", + "**Christian Forssén**, Department of Physics, Chalmers University of Technology, Sweden \n", + "\n", + " **Morten Hjorth-Jensen**, Department of Physics, University of Oslo and Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University\n", + "\n", + "Date: **Dec 23, 2020**\n", + "\n", + "Copyright 1999-2020, Morten Hjorth-Jensen. Released under CC Attribution-NonCommercial 4.0 license\n", + "\n", + "\n", + "\n", + "\n", + "# Elements of Bayesian theory and Bayesian Neural Networks\n", + "\n", + "\n", + "## Why Bayesian Statistics?\n", + "\n", + "We have already made ourselves familiar with elements of a statistical\n", + "data analysis via quantities like the bias-variance tradeoff as well\n", + "as some central distribution functions such as the Normal\n", + "distribution, the binomial distribution and other probability\n", + "distribution functions. \n", + "\n", + "In essentially all the Machine Learning algorithms we have studied,\n", + "our focus has been on a so-called **frequentist approach**, where\n", + "knowledge of an underlying likelihood function has not been\n", + "emphasized. Our data, whether we had a classification or a regression\n", + "problem, have been our central points of departure.\n", + "\n", + "Here we wish to merge this approach with the derivation of a\n", + "likelihood function which can be used to make prediction on how our\n", + "system under study evolves. We will venture into the realm of what is\n", + "called Bayesian Neural Networks. To get an overarching view on what\n", + "this entails, the following figure conveys the essential differences\n", + "between a standard Neural network that we have met earlier and a\n", + "Bayesian Neural Network. In order to get there, we need to present\n", + "some of the basic elements of Bayesian statistics, starting with the\n", + "product rule and Bayes' theorem.\n", + "\n", + "\n", + "\n", + "\n", + "## Inference\n", + "Inference:\n", + " : \n", + " \"the act of passing from one proposition, statement or judgment considered as true to another whose truth is believed to follow from that of the former\" (Webster) \n", + " Do premises $A, B, \\ldots \\to$ hypothesis, $H$? \n", + "\n", + "Deductive inference:\n", + " : \n", + " Premises allow definite determination of truth/falsity of H (syllogisms, symbolic logic, Boolean algebra) \n", + " $B(H|A,B,...) = 0$ or $1$\n", + "\n", + "Inductive inference:\n", + " : \n", + " Premises bear on truth/falsity of H, but don’t allow its definite determination (weak syllogisms, analogies)\n", + " $A, B, C, D$ share properties $x, y, z$; $E$ has properties $x, y$\n", + " $\\to$ $E$ probably has property $z$.\n", + "\n", + "\n", + "\n", + "\n", + "## Statistical Inference\n", + "* Quantify the strength of inductive inferences from facts, in the form of data ($D$), and other premises, e.g. models, to hypotheses about the phenomena producing the data.\n", + "\n", + "* Quantify via probabilities, or averages calculated using probabilities. Frequentists ($\\mathcal{F}$) and Bayesians ($\\mathcal{B}$) use probabilities very differently for this.\n", + "\n", + "* To the pioneers such as Bernoulli, Bayes and Laplace, a probability represented a *degree-of-belief* or plausability: how much they thought that something as true based on the evidence at hand. This is the Bayesian approach.\n", + "\n", + "* To the 19th century scholars, this seemed too vague and subjective. They redefined probability as the *long run relative frequency* with which an event occurred, given (infinitely) many repeated (experimental) trials.\n", + "\n", + "\n", + "\n", + "\n", + "## Some history\n", + "Adapted from D.S. Sivia[^Sivia]:\n", + "\n", + "[^Sivia]: Sivia, Devinderjit, and John Skilling. Data Analysis : A Bayesian Tutorial, OUP Oxford, 2006\n", + "\n", + "> Although the frequency definition appears to be more objective, its range of validity is also far more limited. For example, Laplace used (his) probability theory to estimate the mass of Saturn, given orbital data that were available to him from various astronomical observatories. In essence, he computed the posterior pdf for the mass M , given the data and all the relevant background information I (such as a knowledge of the laws of classical mechanics): prob(M|{data},I); this is shown schematically in the figure [Fig. 1.2].\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "

\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "> To Laplace, the (shaded) area under the posterior pdf curve between $m_1$ and $m_2$ was a measure of how much he believed that the mass of Saturn lay in the range $m_1 \\le M \\le m_2$. As such, the position of the maximum of the posterior pdf represents a best estimate of the mass; its width, or spread, about this optimal value gives an indication of the uncertainty in the estimate. Laplace stated that: ‘ . . . it is a bet of 11,000 to 1 that the error of this result is not 1/100th of its value.’ He would have won the bet, as another 150 years’ accumulation of data has changed the estimate by only 0.63%!\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "> According to the frequency definition, however, we are not permitted to use probability theory to tackle this problem. This is because the mass of Saturn is a constant and not a random variable; therefore, it has no frequency distribution and so probability theory cannot be used.\n", + "> \n", + "> If the pdf [of Fig. 1.2] had to be interpreted in terms of the frequency definition, we would have to imagine a large ensemble of universes in which everything remains constant apart from the mass of Saturn.\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "> As this scenario appears quite far-fetched, we might be inclined to think of [Fig. 1.2] in terms of the distribution of the measurements of the mass in many repetitions of the experiment. Although we are at liberty to think about a problem in any way that facilitates its solution, or our understanding of it, having to seek a frequency interpretation for every data analysis problem seems rather perverse.\n", + "> For example, what do we mean by the ‘measurement of the mass’ when the data consist of orbital periods? Besides, why should we have to think about many repetitions of an experiment that never happened? What we really want to do is to make the best inference of the mass given the (few) data that we actually have; this is precisely the Bayes and Laplace view of probability.\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "> Faced with the realization that the frequency definition of probability theory did not permit most real-life scientific problems to be addressed, a new subject was invented — statistics! To estimate the mass of Saturn, for example, one has to relate the mass to the data through some function called the statistic; since the data are subject to ‘random’ noise, the statistic becomes the random variable to which the rules of probability the- ory can be applied. But now the question arises: How should we choose the statistic? The frequentist approach does not yield a natural way of doing this and has, therefore, led to the development of several alternative schools of orthodox or conventional statis- tics. The masters, such as Fisher, Neyman and Pearson, provided a variety of different principles, which has merely resulted in a plethora of tests and procedures without any clear underlying rationale. This lack of unifying principles is, perhaps, at the heart of the shortcomings of the cook-book approach to statistics that students are often taught even today.\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "## The Bayesian recipe\n", + "Assess hypotheses by calculating their probabilities $p(H_i | \\ldots)$ conditional on known and/or presumed information using the rules of probability theory.\n", + "\n", + "\n", + "Probability Theory Axioms:\n", + "Product (AND) rule :\n", + " : \n", + " $p(A, B | I) = p(A|I) p(B|A, I) = p(B|I)p(A|B,I)$\n", + " Should read $p(A,B|I)$ as the probability for propositions $A$ AND $B$ being true given that $I$ is true.\n", + "\n", + "Sum (OR) rule:\n", + " : \n", + " $p(A + B | I) = p(A | I) + p(B | I) - p(A, B | I)$\n", + " $p(A+B|I)$ is the probability that proposition $A$ OR $B$ is true given that $I$ is true.\n", + "\n", + "Normalization:\n", + " : \n", + " $p(A|I) + p(\\bar{A}|I) = 1$\n", + " $\\bar{A}$ denotes the proposition that $A$ is false.\n", + "\n", + "\n", + "\n", + "\n", + "## Bayes' theorem\n", + "Bayes' theorem follows directly from the product rule" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "$$\n", + "p(A|B,I) = \\frac{p(B|A,I) p(A|I)}{p(B|I)}.\n", + "$$\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The importance of this property to data analysis becomes apparent if we replace $A$ and $B$ by hypothesis($H$) and data($D$):" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "p(H|D,I) = \\frac{p(D|H,I) p(H|I)}{p(D|I)}.\n", + "\\label{eq:bayes} \\tag{1}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The power of Bayes’ theorem lies in the fact that it relates the quantity of interest, the probability that the hypothesis is true given the data, to the term we have a better chance of being able to assign, the probability that we would have observed the measured data if the hypothesis was true.\n", + "\n", + "\n", + "\n", + "\n", + "The various terms in Bayes’ theorem have formal names. \n", + "* The quantity on the far right, $p(H|I)$, is called the *prior* probability; it represents our state of knowledge (or ignorance) about the truth of the hypothesis before we have analysed the current data. \n", + "\n", + "* This is modified by the experimental measurements through $p(D|H,I)$, the *likelihood* function, \n", + "\n", + "* The denominator $p(D|I)$ is called the *evidence*. It does not depend on the hypothesis and can be regarded as a normalization constant.\n", + "\n", + "* Together, these yield the *posterior* probability, $p(H|D, I )$, representing our state of knowledge about the truth of the hypothesis in the light of the data. \n", + "\n", + "In a sense, Bayes’ theorem encapsulates the process of learning.\n", + "\n", + "\n", + "\n", + "\n", + "## The friends of Bayes' theorem\n", + "Normalization:\n", + " : \n", + " $\\sum_i p(H_i|\\ldots) = 1$.\n", + "\n", + "Marginalization:\n", + " : \n", + " $\\sum_i p(A,H_i|I) = \\sum_i p(H_i|A,I) p(A|I) = p(A|I)$.\n", + "\n", + "Marginalization (continuum limit):\n", + " : \n", + " $\\int dx p(A,H(x)|I) = p(A|I)$.\n", + "\n", + "In the above, $H_i$ is an exclusive and exhaustive list of hypotheses. For example,let’s imagine that there are five candidates in a presidential election; then $H_1$ could be the proposition that the first candidate will win, and so on. The probability that $A$ is true, for example that unemployment will be lower in a year’s time (given all relevant information $I$, but irrespective of whoever becomes president) is then given by $\\sum_i p(A,H_i|I)$.\n", + "\n", + "In the continuum limit of propositions we must understand $p(\\ldots)$ as a pdf (probability density function).\n", + "\n", + "Marginalization is a very powerful device in data analysis because it enables us to deal with nuisance parameters; that is, quantities which necessarily enter the analysis but are of no intrinsic interest. The unwanted background signal present in many experimental measurements are examples of nuisance parameters.\n", + "\n", + "\n", + "\n", + "\n", + "## Inference With Parametric Models\n", + "Inductive inference with parametric models is a very important tool in the natural sciences.\n", + "* Consider $N$ different models $M_i$ ($i = 1, \\ldots, N$), each with parameters $\\boldsymbol{\\alpha}_i$. Each of them implies a sampling distribution (conditional predictive distribution for possible data)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "$$\n", + "p(D|\\boldsymbol{\\alpha}_i, M_i)\n", + "$$\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "* The $\\boldsymbol{\\alpha}_i$ dependence when we fix attention on the actual, observed data ($D_\\mathrm{obs}$) is the likelihood function:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "$$\n", + "\\mathcal{L}_i (\\boldsymbol{\\alpha}_i) \\equiv p(D_\\mathrm{obs}|\\boldsymbol{\\alpha}_i, M_i)\n", + "$$\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "* We may be uncertain about $i$ (model uncertainty),\n", + "\n", + "* or uncertain about $\\boldsymbol{\\alpha}_i$ (parameter uncertainty).\n", + "\n", + "\n", + "\n", + "\n", + "Parameter Estimation:\n", + " : \n", + " Premise = choice of model (pick specific $i$)\n", + " $\\Rightarrow$ What can we say about $\\boldsymbol{\\alpha}_i$?\n", + "\n", + "Model comparison:\n", + " : \n", + " Premise = $\\{M_i\\}$\n", + " $\\Rightarrow$ What can we say about $i$?\n", + "\n", + "Model adequacy:\n", + " : \n", + " Premise = $M_1$\n", + " $\\Rightarrow$ Is $M_1$ adequate?\n", + "\n", + "Hybrid Uncertainty:\n", + " : \n", + " Models share some common params: $\\boldsymbol{\\alpha}_1 = \\{ \\boldsymbol{\\varphi}, \\boldsymbol{\\eta}_i\\}$\n", + " $\\Rightarrow$ What can we say about $\\boldsymbol{\\varphi}$? (Systematic error is an example)\n", + "\n", + "\n", + "\n", + "\n", + "## Illustrative examples with python code\n", + "* Is this a fair coin? (analytical)\n", + "\n", + "* Flux from a star (single parameter, MCMC)\n", + "\n", + "* The lighthouse problem (two parameters, MCMC)\n", + "\n", + "* Linear fit with outliers (nuisance parameters)\n", + "\n", + "* ...\n", + "\n", + "\n", + "\n", + "\n", + "## Example: Is this a fair coin?\n", + "Let us begin with the analysis of data from a simple coin-tossing experiment. \n", + "Given that we had observed 6 heads in 8 flips, would you think it was a fair coin? By fair, we mean that we would be prepared to lay an even 1 : 1 bet on the outcome of a flip being a head or a tail. If we decide that the coin was fair, the question which follows naturally is how sure are we that this was so; if it was not fair, how unfair do we think it was? Furthermore, if we were to continue collecting data for this particular coin, observing the outcomes of additional flips, how would we update our belief on the fairness of the coin?\n", + "\n", + "A sensible way of formulating this problem is to consider a large number of hypotheses about the range in which the bias-weighting of the coin might lie. If we denote the bias-weighting by $H$, then $H = 0$ and $H = 1$ can represent a coin which produces a tail or a head on every flip, respectively. There is a continuum of possibilities for the value of H between these limits, with $H = 0.5$ indicating a fair coin. Our state of knowledge about the fairness, or the degree of unfairness, of the coin is then completely summarized by specifying how much we believe these various propositions to be true. \n", + "\n", + "Let us perform a computer simulation of a coin-tossing experiment. This provides the data that we will be analysing." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "0\n", + " \n", + "<\n", + "<\n", + "<\n", + "!\n", + "!\n", + "C\n", + "O\n", + "D\n", + "E\n", + "_\n", + "B\n", + "L\n", + "O\n", + "C\n", + "K\n", + " \n", + " \n", + "p\n", + "y\n", + "c\n", + "o\n", + "d" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "np.random.seed(999) # for reproducibility\n", + "a=0.6 # biased coin\n", + "flips=np.random.rand(2**12) # simulates 4096 coin flips\n", + "heads=flips
\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\int_0^1 p(H|D,I) dH = 1.\n", + "\\label{eq:coin_posterior_norm} \\tag{2}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The prior pdf, $p(H|I)$, represents what we know about the coin given only the information $I$ that we are dealing with a ‘strange coin’. We could keep a very open mind about the nature of the coin; a simple probability assignment which reflects this is a uniform, or flat, prior" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "p(H|I) = \\left\\{ \\begin{array}{ll}\n", + "1 & 0 \\le H \\le 1, \\\\\n", + "0 & \\mathrm{otherwise}.\n", + "\\end{array} \\right.\n", + "\\label{eq:coin_prior_uniform} \\tag{3}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We will get back later to the choice of prior and its effect on the analysis.\n", + "\n", + "This prior state of knowledge, or ignorance, is modified by the data through the likelihood function $p(D|H,I)$. It is a measure of the chance that we would have obtained the data that we actually observed, if the value of the bias-weighting was given (as known). If, in the conditioning information $I$, we assume that the flips of the coin were independent events, so that the outcome of one did not influence that of another, then the probability of obtaining the data `R heads in N tosses' is given by the binomial distribution (we leave a formal definition of this to a statistics textbook)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "p(D|H,I) \\propto H^R (1-H)^{N-R}.\n", + "\\label{_auto1} \\tag{4}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "It seems reasonable because $H$ is the chance of obtaining a head on any flip, and there were $R$ of them, and $1-H$ is the corresponding probability for a tail, of which there were $N-R$. We note that this binomial distribution also contains a normalization factor, but we will ignore it since it does not depend explicitly on $H$, the quantity of interest. It will be absorbed by the normalization condition ([2](#eq:coin_posterior_norm)).\n", + "\n", + "We perform the setup of this Bayesian framework on the computer." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def prior(H):\n", + " p=np.zeros_like(H)\n", + " p[(0<=x)&(x<=1)]=1 # allowed range: 0<=H<=1\n", + " return p # uniform prior\n", + "def likelihood(H,data):\n", + " N = len(data)\n", + " no_of_heads = sum(data)\n", + " no_of_tails = N - no_of_heads\n", + " return H**no_of_heads * (1-H)**no_of_tails\n", + "def posterior(H,data):\n", + " p=prior(H)*likelihood(H,data)\n", + " norm=np.trapz(p,H)\n", + " return p/norm" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The next step is to confront this setup with the simulated data. To get a feel for the result, it is instructive to see how the posterior pdf evolves as we obtain more and more data pertaining to the coin. The results of such an analyses is shown in Fig. [fig:coinflipping](#fig:coinflipping)." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "x=np.linspace(0,1,100)\n", + "fig, axs = plt.subplots(nrows=4,ncols=3,sharex=True,sharey='row')\n", + "axs_vec=np.reshape(axs,-1)\n", + "axs_vec[0].plot(x,prior(x))\n", + "for ndouble in range(11):\n", + " ax=axs_vec[1+ndouble]\n", + " ax.plot(x,posterior(x,heads[:2**ndouble]))\n", + " ax.text(0.1, 0.8, '$N={0}$'.format(2**ndouble), transform=ax.transAxes)\n", + "for row in range(4): axs[row,0].set_ylabel('$p(H|D_\\mathrm{obs},I)$')\n", + "for col in range(3): axs[-1,col].set_xlabel('$H$')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "
\n", + "\n", + "

The evolution of the posterior pdf for the bias-weighting of a coin, as the number of data available increases. The figure on the top left-hand corner of each panel shows the number of data included in the analysis.

\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "The panel in the top left-hand corner shows the posterior pdf for $H$ given no data, i.e., it is the same as the prior pdf of Eq. ([3](#eq:coin_prior_uniform)). It indicates that we have no more reason to believe that the coin is fair than we have to think that it is double-headed, double-tailed, or of any other intermediate bias-weighting.\n", + "\n", + "The first flip is obviously tails. At this point we have no evidence that the coin has a side with heads, as indicated by the pdf going to zero as $H \\to 1$. The second flip is obviously heads and we have now excluded both extreme options $H=0$ (double-tailed) and $H=1$ (double-headed). We can note that the posterior at this point has the simple form $p(H|D,I) = H(1-H)$ for $0 \\le H \\le 1$.\n", + "\n", + "The remainder of Fig. [fig:coinflipping](#fig:coinflipping) shows how the posterior pdf evolves as the number of data analysed becomes larger and larger. We see that the position of the maximum moves around, but that the amount by which it does so decreases with the increasing number of observations. The width of the posterior pdf also becomes narrower with more data, indicating that we are becoming increasingly confident in our estimate of the bias-weighting. For the coin in this example, the best estimate of $H$ eventually converges to 0.6, which, of course, was the value chosen to simulate the flips.\n", + "\n", + "\n", + "## A few words on different priors\n", + "* uniform\n", + "\n", + "* Gaussian\n", + "\n", + "* Jeffrey's prior\n", + "\n", + "Repeat the coin flipping experiment with other priors.\n", + "\n", + "\n", + "## Bayesian parameter estimation (single parameter)\n", + "We will now consider the very important task of model parameter estimation using statistical inference. \n", + "[CF 1: maybe stress that model parameters are not random variables, and the meaning of parameter estimation is therefore very different between frequentist and bayesian approaches.]\n", + "\n", + "Throughout this section we will consider a specific example that involves a model with a single parameter: \"Measured flux from a star\".\n", + "\n", + "\n", + "\n", + "\n", + "### Example: Measured flux from a star\n", + "\n", + "Adapted from the blog [Pythonic Perambulations](http://jakevdp.github.io) by Jake VanderPlas.\n", + "\n", + "Imagine that we point our telescope to the sky, and observe the light coming from a single star. For the time being, we'll assume that the star's true flux is constant with time, i.e. that is it has a fixed value $F_\\mathrm{true}$ (we'll also ignore effects like sky noise and other sources of systematic error). We'll assume that we perform a series of $N$ measurements with our telescope, where the ith measurement reports the observed photon flux $F_i$ and error $e_i$[^errors].\n", + "The question is, given this set of measurements $D = \\{F_i, e_i\\}$, what is our best estimate of the true flux $F_\\mathrm{true}$?\n", + "\n", + "[^errors]: We'll make the reasonable assumption that errors are Gaussian. In a Frequentist perspective, $e_i$ is the standard deviation of the results of a single measurement event in the limit of repetitions of *that event*. In the Bayesian perspective, $e_i$ is the standard deviation of the (Gaussian) probability distribution describing our knowledge of that particular measurement given its observed value.\n", + "\n", + "Because the measurements are number counts, a Poisson distribution is a good approximation to the measurement process:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "np.random.seed(1) # for repeatability\n", + "F_true = 1000 # true flux, say number of photons measured in 1 second\n", + "N = 50 # number of measurements\n", + "F = stats.poisson(F_true).rvs(N)\n", + " # N measurements of the flux\n", + "e = np.sqrt(F) # errors on Poisson counts estimated via square root" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now let's make a simple visualization of the \"observed\" data, see Fig. [fig:flux](#fig:flux)." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "fig, ax = plt.subplots()\n", + "ax.errorbar(F, np.arange(N), xerr=e, fmt='ok', ecolor='gray', alpha=0.5)\n", + "ax.vlines([F_true], 0, N, linewidth=5, alpha=0.2)\n", + "ax.set_xlabel(\"Flux\");ax.set_ylabel(\"measurement number\");" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "
\n", + "\n", + "

Single photon counts (flux measurements).

\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "These measurements each have a different error $e_i$ which is estimated from Poisson statistics using the standard square-root rule. In this toy example we already know the true flux $F_\\mathrm{true}$, but the question is this: given our measurements and errors, what is our best estimate of the true flux?\n", + "\n", + "Let's take a look at the frequentist and Bayesian approaches to solving this.\n", + "\n", + "### Simple Photon Counts: Frequentist Approach\n", + "\n", + "We'll start with the classical frequentist maximum likelihood approach. Given a single observation $D_i = (F_i, e_i)$, we can compute the probability distribution of the measurement given the true flux Ftrue given our assumption of Gaussian errors" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "p(D_i | F_\\mathrm{true}, I) = \\frac{1}{\\sqrt{2\\pi e_i^2}} \\exp \\left( \\frac{-(F_i-F_\\mathrm{true})^2}{2e_i^2} \\right).\n", + "\\label{_auto2} \\tag{5}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This should be read \"the probability of $D_i$ given $F_\\mathrm{true}$\n", + "equals ...\". You should recognize this as a normal distribution with mean $F_\\mathrm{true}$ and standard deviation $e_i$.\n", + "\n", + "We construct the *likelihood function* by computing the product of the probabilities for each data point" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\mathcal{L}(D | F_\\mathrm{true}, I) = \\prod_{i=1}^N p(D_i | F_\\mathrm{true}, I),\n", + "\\label{_auto3} \\tag{6}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "here $D = \\{D_i\\}$ represents the entire set of measurements. Because the value of the likelihood can become very small, it is often more convenient to instead compute the log-likelihood. Combining the previous two equations and computing the log, we have" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\log\\mathcal{L} = -\\frac{1}{2} \\sum_{i=1}^N \\left[ \\log(2\\pi e_i^2) + \\frac{(F_i-F_\\mathrm{true})^2}{e_i^2} \\right].\n", + "\\label{_auto4} \\tag{7}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "What we'd like to do is determine $F_\\mathrm{true}$ such that the likelihood is maximized. For this simple problem, the maximization can be computed analytically (i.e. by setting $d\\log\\mathcal{L}/d F_\\mathrm{true} = 0$). This results in the following observed estimate of $F_\\mathrm{true}$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "F_\\mathrm{est} = \\sum_{i=1}^N w_i F_i; \\quad w_i = 1/e_i^2.\n", + "\\label{_auto5} \\tag{8}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Notice that in the special case of all errors $e_i$ being equal, this reduces to" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "F_\\mathrm{est} = \\frac{1}{N} \\sum_{i=1} F_i.\n", + "\\label{_auto6} \\tag{9}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "That is, in agreement with intuition, $F_\\mathrm{est}$ is simply the mean of the observed data when errors are equal.\n", + "\n", + "We can go further and ask what the error of our estimate is. In the frequentist approach, this can be accomplished by fitting a Gaussian approximation to the likelihood curve at maximum; in this simple case this can also be solved analytically (the sum of Gaussians is also a Gaussian). It can be shown that the standard deviation of this Gaussian approximation is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\sigma_\\mathrm{est} = \\sum_{i=1}^N w_i.\n", + "\\label{_auto7} \\tag{10}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "These results are fairly simple calculations; let's evaluate them for our toy dataset:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "w=1./e**2\n", + "print(\"\"\"\n", + "F_true = {0}\n", + "F_est = {1:.0f} +/- {2:.0f} (based on {3} measurements) \"\"\"\\\n", + " .format(F_true, (w * F).sum() / w.sum(), w.sum() ** -0.5, N))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`F_true = 1000` \n", + "`F_est = 998 +/- 4 (based on 50 measurements)` \n", + "\n", + "We find that for 50 measurements of the flux, our estimate has an error of about 0.4% and is consistent with the input value.\n", + "\n", + "\n", + "### Simple Photon Counts: Bayesian Approach\n", + "\n", + "The Bayesian approach, as you might expect, begins and ends with probabilities. Our hypothesis is that the star has a constant flux $F_\\mathrm{true}$. It recognizes that what we fundamentally want to compute is our knowledge of the parameters in question given the data and other information (such as our knowledge of uncertainties for the observed values), i.e. in this case, $p(F_\\mathrm{true} | D,I)$.\n", + "Note that this formulation of the problem is fundamentally contrary to the frequentist philosophy, which says that probabilities have no meaning for model parameters like $F_\\mathrm{true}$. Nevertheless, within the Bayesian philosophy this is perfectly acceptable.\n", + "\n", + "To compute this result, Bayesians next apply Bayes' Theorem ([1](#eq:bayes)).\n", + "If we set the prior $p(F_\\mathrm{true}|I) \\propto 1$ (a flat prior), we find\n", + "$p(F_\\mathrm{true}|D,I) \\propto p(D | F_\\mathrm{true},I) \\equiv \\mathcal{L}(D | F_\\mathrm{true},I)$\n", + "and the Bayesian probability is maximized at precisely the same value as the frequentist result! So despite the philosophical differences, we see that (for this simple problem at least) the Bayesian and frequentist point estimates are equivalent.\n", + "\n", + "### A note about priors\n", + "\n", + "The prior allows inclusion of other information into the computation, which becomes very useful in cases where multiple measurement strategies are being combined to constrain a single model. The necessity to specify a prior, however, is one of the more controversial pieces of Bayesian analysis.\n", + "A frequentist will point out that the prior is problematic when no true prior information is available. Though it might seem straightforward to use a noninformative prior like the flat prior mentioned above, there are some [surprisingly subtleties](http://normaldeviate.wordpress.com/2013/07/13/lost-causes-in-statistics-ii-noninformative- priors/comment-page-1/) involved. It turns out that in many situations, a truly noninformative prior does not exist! Frequentists point out that the subjective choice of a prior which necessarily biases your result has no place in statistical data analysis.\n", + "A Bayesian would counter that frequentism doesn't solve this problem, but simply skirts the question. Frequentism can often be viewed as simply a special case of the Bayesian approach for some (implicit) choice of the prior: a Bayesian would say that it's better to make this implicit choice explicit, even if the choice might include some subjectivity.\n", + "\n", + "### Simple Photon Counts: Bayesian approach in practice\n", + "\n", + "Leaving these philosophical debates aside for the time being, let's address how Bayesian results are generally computed in practice. For a one parameter problem like the one considered here, it's as simple as computing the posterior probability $p(F_\\mathrm{true} | D,I)$ as a function of $F_\\mathrm{true}$: this is the distribution reflecting our knowledge of the parameter $F_\\mathrm{true}$.\n", + "But as the dimension of the model grows, this direct approach becomes increasingly intractable. For this reason, Bayesian calculations often depend on sampling methods such as Markov Chain Monte Carlo (MCMC). For this practical example, let us apply an MCMC approach using Dan Foreman-Mackey's [emcee](http://dan.iel.fm/emcee/current/) package. Keep in mind here that the goal is to generate a set of points drawn from the posterior probability distribution, and to use those points to determine the answer we seek.\n", + "To perform this MCMC, we start by defining Python functions for the prior $p(F_\\mathrm{true} | I)$, the likelihood $p(D | F_\\mathrm{true},I)$, and the posterior $p(F_\\mathrm{true} | D,I)$, noting that none of these need be properly normalized. Our model here is one-dimensional, but to handle multi-dimensional models we'll define the model in terms of an array of parameters $\\boldsymbol{\\alpha}$, which in this case is $\\boldsymbol{\\alpha} = [F_\\mathrm{true}]$" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def log_prior(alpha):\n", + " return 0 # flat prior\n", + "\n", + "def log_likelihood(alpha, F, e):\n", + " return -0.5 * np.sum(np.log(2 * np.pi * e ** 2) \\\n", + " + (F - alpha[0]) ** 2 / e ** 2)\n", + " \n", + "def log_posterior(alpha, F, e):\n", + " return log_prior(alpha) + log_likelihood(alpha, F, e)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we set up the problem, including generating some random starting guesses for the multiple chains of points." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "ndim = 1 # number of parameters in the model\n", + "nwalkers = 50 # number of MCMC walkers\n", + "nburn = 1000 # \"burn-in\" period to let chains stabilize\n", + "nsteps = 2000 # number of MCMC steps to take\n", + "# we'll start at random locations between 0 and 2000\n", + "starting_guesses = 2000 * np.random.rand(nwalkers, ndim)\n", + "sampler = emcee.EnsembleSampler(nwalkers, ndim, log_posterior, args=[F,e])\n", + "sampler.run_mcmc(starting_guesses, nsteps)\n", + "# Shape of sampler.chain = (nwalkers, nsteps, ndim)\n", + "# Flatten the sampler chain and discard burn-in points:\n", + "samples = sampler.chain[:, nburn:, :].reshape((-1, ndim))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If this all worked correctly, the array sample should contain a series of 50,000 points drawn from the posterior. Let's plot them and check. See results in Fig. [fig:flux-bayesian](#fig:flux-bayesian)." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "fig, ax = plt.subplots()\n", + "ax.hist(samples, bins=50, histtype=\"stepfilled\", alpha=0.3, normed=True)\n", + "ax.set_xlabel(r'$F_\\mathrm{est}$')\n", + "ax.set_ylabel(r'$p(F_\\mathrm{est}|D,I)$')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "
\n", + "\n", + "

Bayesian posterior pdf (represented by a histogram of MCMC samples) from flux measurements.

\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "### Best estimates and confidence intervals\n", + "\n", + "The posterior distribution from our Bayesian data analysis is the key quantity that encodes our inference about the values of the model parameters, given the data and the relevant background information. Often, however, we wish to summarize this result with just a few numbers: the best estimate and a measure of its reliability. \n", + "\n", + "There are a few different options for this. The choice of the most appropriate one depends mainly on the shape of the posterior distribution:\n", + "\n", + "*Symmetric posterior pdfs*: Since the probability (density) associated with any particular value of the parameter is a measure of how much we believe that it lies in the neighbourhood of that point, our best estimate is given by the maximum of the posterior pdf. If we denote the quantity of interest by $X$, with a posterior pdf $P =p(X|D,I)$, then the best estimate of its value $X_0$ is given by the condition $dP/dX|_{X=X_0}=0$. Strictly speaking, we should also check the sign of the second derivative to ensure that $X_0$ represents a maximum.\n", + "\n", + "To obtain a measure of the reliability of this best estimate, we need to look at the width or spread of the posterior pdf about $X_0$. When considering the behaviour of any function in the neighbourhood of a particular point, it is often helpful to carry out a Taylor series expansion; this is simply a standard tool for (locally) approximating a complicated function by a low-order polynomial. The linear term is zero at the maximum and the quadratic term is often the dominating one determining the width of the posterior pdf. Ignoring all the higher-order terms we arrive at the Gaussian approximation" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
\n", + "\n", + "$$\n", + "\\begin{equation}\n", + "p(X|D,I) \\approx \\frac{1}{\\sigma\\sqrt{2\\pi}} \\exp \\left[ -\\frac{(x-\\mu)^2}{2\\sigma^2} \\right],\n", + "\\label{_auto8} \\tag{11}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where the mean $\\mu = X_0$ and the variance $\\sigma = \\left( - \\left. \\frac{d^2L}{dX^2} \\right|_{X_0} \\right)^{-1/2}$, where $L$ is the logarithm of the posterior $P$. Our inference about the quantity of interest is conveyed very concisely, therefore, by the statement $X = X_0 \\pm \\sigma$, and" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "$$\n", + "p(X_0-\\sigma < X < X_0+\\sigma | D,I) = \\int_{X_0-\\sigma}^{X_0+\\sigma} p(X|D,I) dX \\approx 0.67.\n", + "$$\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "*Asymmetric posterior pdfs*: While the maximum of the posterior ($X_0$) can still be regarded as giving the best estimate, the true value is now more likely to be on one side of this rather than the other. Alternatively one can compute the mean value, $\\langle X \\rangle = \\int X p(X|D,I) dX$, although this tends to overemphasise very long tails. The best option is probably a compromise that can be employed when having access to a large sample from the posterior (as provided by an MCMC), namely to give the median of this ensamble.\n", + "\n", + "Furthermore, the concept of an error-bar does not seem appropriate in this case, as it implicitly entails the idea of symmetry. A good way of expressing the reliability with which a parameter can be inferred, for an asymmetric posterior pdf, is rather through a *confidence interval*. Since the area under the posterior pdf between $X_1$ and $X_2$ is proportional to how much we believe that $X$ lies in that range, the shortest interval that encloses 67% of the area represents a sensible measure of the uncertainty of the estimate. Obviously we can choose to provide some other degree-of-belief that we think is relevant for the case at hand. Assuming that the posterior pdf has been normalized, to have unit area, we need to find $X_1$ and $X_2$ such that:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "$$\n", + "p(X_1 < X < X_2 | D,I) = \\int_{X_1}^{X_2} p(X|D,I) dX \\approx 0.67, \n", + "$$\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where the difference $X_2 - X_1$ is as small as possible. The region $X_1 < X < X_2$ is then called the shortest 67% confidence interval. \n", + "\n", + "*Multimodal posterior pdfs*: We can sometimes obtain posteriors which are multimodal; i.e. contains several disconnected regions with large probabilities. There is no difficulty when one of the maxima is very much larger than the others: we can simply ignore the subsidiary solutions, to a good approximation, and concentrate on the global maximum. The problem arises when there are several maxima of comparable magnitude. What do we now mean by a best estimate, and how should we quantify its reliability? The idea of a best estimate and an error-bar, or even a confidence interval, is merely an attempt to summarize the posterior with just two or three numbers; sometimes this just can’t be done, and so these concepts are not valid. For the bimodal case we might be able to characterize the posterior in terms of a few numbers: two best estimates and their associated error-bars, or disjoint confidence intervals. For a general multimodal pdf, the most honest thing we can do is just display the posterior itself.\n", + "\n", + "### Simple Photon Counts: Best estimates and confidence intervals\n", + "\n", + "To compute these numbers for our example, you would run:" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "sampper=np.percentile(samples, [2.5, 16.5, 50, 83.5, 97.5],axis=0).flatten()\n", + "print(\"\"\"\n", + "F_true = {0}\n", + "Based on {1} measurements the posterior point estimates are:\n", + "...F_est = {2:.0f} +/- {3:.0f}\n", + "or using credible intervals:\n", + "...F_est = {4:.0f} (posterior median) \n", + "...F_est in [{5:.0f}, {6:.0f}] (67% credible interval) \n", + "...F_est in [{7:.0f}, {8:.0f}] (95% credible interval) \"\"\"\\\n", + " .format(F_true, N, np.mean(samples), np.std(samples), \\\n", + " sampper[2], sampper[1], sampper[3], sampper[0], sampper[4]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`F_true = 1000` \n", + "`Based on 50 measurements the posterior point estimates are:` \n", + "`...F_est = 998 +/- 4` \n", + "`or using credible intervals:` \n", + "`...F_est = 998 (posterior median)` \n", + "`...F_est in [993, 1002] (67% credible interval)` \n", + "`...F_est in [989, 1006] (95% credible interval)` \n", + "\n", + "In this particular example, the posterior pdf is actually a Gaussian (since it is constructed as a product of Gaussians), and the mean and variance from the quadratic approximation will agree exactly with the frequentist approach.\n", + "\n", + "From this final result you might come away with the impression that the Bayesian method is unnecessarily complicated, and in this case it certainly is. Using an MCMC sampler to characterize a one-dimensional normal distribution is a bit like using the Death Star to destroy a beach ball, but we did this here because it demonstrates an approach that can scale to complicated posteriors in many, many dimensions, and can provide nice results in more complicated situations where an analytic likelihood approach is not possible.\n", + "\n", + "Furthermore, as data and models grow in complexity, the two approaches can diverge greatly. \n", + "\n", + "\n", + "## Bayesian parameter estimation (multiple parameters, covariance)\n", + "* multidimensional posterior pdf:s\n", + "\n", + "* nuisance parameters (e.g. background subtraction?)\n", + "\n", + "* corner plots, covariance, correlations\n", + "\n", + "* best example?\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "## Bayesian model selection\n", + "* Bayesian evidence\n", + "\n", + "* Occam's razor\n", + "\n", + "* Best example? How many spectral lines are there?" + ] + } + ], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/doc/src/LectureNotes/_build/html/chapter1.html b/doc/src/LectureNotes/_build/html/chapter1.html index 4455a060b..97c2f7dfd 100644 --- a/doc/src/LectureNotes/_build/html/chapter1.html +++ b/doc/src/LectureNotes/_build/html/chapter1.html @@ -124,6 +124,26 @@ 8. Convolutional Neural Networks
+
  • + + 9. Recurrent Neural Networks + +
  • +
  • + + 10. Solving ODEs with Deep Learning + +
  • +
  • + + 11. Data Analysis and Machine Learning: + +
  • +
  • + + 12. Elements of Bayesian theory and Bayesian Neural Networks + +
  • diff --git a/doc/src/LectureNotes/_build/html/chapter10.html b/doc/src/LectureNotes/_build/html/chapter10.html new file mode 100644 index 000000000..c3a6b7869 --- /dev/null +++ b/doc/src/LectureNotes/_build/html/chapter10.html @@ -0,0 +1,9723 @@ + + + + + + + + + 9. Recurrent Neural Networks — Applied Machine Learning and Data Analysis + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + +
    + + +
    +
    + +
    + +
    +

    9. Recurrent Neural Networks

    +

    Overview video. +See also lecture on Thursday October 22 and examples from week 42.

    +

    IN5400 at UiO Lecture

    +

    CS231 at Stanford Lecture

    +
    +

    9.1. Recurrent neural networks: Overarching view

    +

    Till now our focus has been, including convolutional neural networks +as well, on feedforward neural networks. The output or the activations +flow only in one direction, from the input layer to the output layer.

    +

    A recurrent neural network (RNN) looks very much like a feedforward +neural network, except that it also has connections pointing +backward.

    +

    RNNs are used to analyze time series data such as stock prices, and +tell you when to buy or sell. In autonomous driving systems, they can +anticipate car trajectories and help avoid accidents. More generally, +they can work on sequences of arbitrary lengths, rather than on +fixed-sized inputs like all the nets we have discussed so far. For +example, they can take sentences, documents, or audio samples as +input, making them extremely useful for natural language processing +systems such as automatic translation and speech-to-text.

    +
    +
    +

    9.2. Set up of an RNN

    +

    Text to come.

    +
    +
    +

    9.3. A simple example

    +
    +
    +
    %matplotlib inline
    +
    +# Start importing packages
    +import pandas as pd
    +import numpy as np
    +import matplotlib.pyplot as plt
    +import tensorflow as tf
    +from tensorflow.keras import datasets, layers, models
    +from tensorflow.keras.layers import Input
    +from tensorflow.keras.models import Model, Sequential 
    +from tensorflow.keras.layers import Dense, SimpleRNN, LSTM, GRU
    +from tensorflow.keras import optimizers     
    +from tensorflow.keras import regularizers           
    +from tensorflow.keras.utils import to_categorical 
    +
    +
    +
    +# convert into dataset matrix
    +def convertToMatrix(data, step):
    + X, Y =[], []
    + for i in range(len(data)-step):
    +  d=i+step  
    +  X.append(data[i:d,])
    +  Y.append(data[d,])
    + return np.array(X), np.array(Y)
    +
    +step = 4
    +N = 1000    
    +Tp = 800    
    +
    +t=np.arange(0,N)
    +x=np.sin(0.02*t)+2*np.random.rand(N)
    +df = pd.DataFrame(x)
    +df.head()
    +
    +plt.plot(df)
    +plt.show()
    +
    +values=df.values
    +train,test = values[0:Tp,:], values[Tp:N,:]
    +
    +# add step elements into train and test
    +test = np.append(test,np.repeat(test[-1,],step))
    +train = np.append(train,np.repeat(train[-1,],step))
    + 
    +trainX,trainY =convertToMatrix(train,step)
    +testX,testY =convertToMatrix(test,step)
    +trainX = np.reshape(trainX, (trainX.shape[0], 1, trainX.shape[1]))
    +testX = np.reshape(testX, (testX.shape[0], 1, testX.shape[1]))
    +
    +model = Sequential()
    +model.add(SimpleRNN(units=32, input_shape=(1,step), activation="relu"))
    +model.add(Dense(8, activation="relu")) 
    +model.add(Dense(1))
    +model.compile(loss='mean_squared_error', optimizer='rmsprop')
    +model.summary()
    +
    +model.fit(trainX,trainY, epochs=100, batch_size=16, verbose=2)
    +trainPredict = model.predict(trainX)
    +testPredict= model.predict(testX)
    +predicted=np.concatenate((trainPredict,testPredict),axis=0)
    +
    +trainScore = model.evaluate(trainX, trainY, verbose=0)
    +print(trainScore)
    +
    +index = df.index.values
    +plt.plot(index,df)
    +plt.plot(index,predicted)
    +plt.axvline(df.index[Tp], c="r")
    +plt.show()
    +
    +
    +
    +
    +_images/chapter10_1_0.png +
    Model: "sequential"
    +_________________________________________________________________
    +Layer (type)                 Output Shape              Param #   
    +=================================================================
    +simple_rnn (SimpleRNN)       (None, 32)                1184      
    +_________________________________________________________________
    +dense (Dense)                (None, 8)                 264       
    +_________________________________________________________________
    +dense_1 (Dense)              (None, 1)                 9         
    +=================================================================
    +Total params: 1,457
    +Trainable params: 1,457
    +Non-trainable params: 0
    +_________________________________________________________________
    +Epoch 1/100
    +
    +
    +
    50/50 - 0s - loss: 2.1500
    +
    +
    +
    Epoch 2/100
    +50/50 - 0s - loss: 0.4827
    +
    +
    +
    Epoch 3/100
    +50/50 - 0s - loss: 0.4041
    +
    +
    +
    Epoch 4/100
    +50/50 - 0s - loss: 0.3986
    +
    +
    +
    Epoch 5/100
    +50/50 - 0s - loss: 0.3980
    +
    +
    +
    Epoch 6/100
    +
    +
    +
    50/50 - 0s - loss: 0.3996
    +
    +
    +
    Epoch 7/100
    +
    +
    +
    50/50 - 0s - loss: 0.3982
    +
    +
    +
    Epoch 8/100
    +
    +
    +
    50/50 - 0s - loss: 0.3962
    +
    +
    +
    Epoch 9/100
    +
    +
    +
    50/50 - 0s - loss: 0.3965
    +
    +
    +
    Epoch 10/100
    +
    +
    +
    50/50 - 0s - loss: 0.3934
    +
    +
    +
    Epoch 11/100
    +
    +
    +
    50/50 - 0s - loss: 0.3933
    +
    +
    +
    Epoch 12/100
    +
    +
    +
    50/50 - 0s - loss: 0.3951
    +
    +
    +
    Epoch 13/100
    +
    +
    +
    50/50 - 0s - loss: 0.3947
    +
    +
    +
    Epoch 14/100
    +
    +
    +
    50/50 - 0s - loss: 0.3924
    +
    +
    +
    Epoch 15/100
    +
    +
    +
    50/50 - 0s - loss: 0.3932
    +
    +
    +
    Epoch 16/100
    +
    +
    +
    50/50 - 0s - loss: 0.3932
    +
    +
    +
    Epoch 17/100
    +
    +
    +
    50/50 - 0s - loss: 0.3924
    +
    +
    +
    Epoch 18/100
    +
    +
    +
    50/50 - 0s - loss: 0.3914
    +
    +
    +
    Epoch 19/100
    +
    +
    +
    50/50 - 0s - loss: 0.3918
    +
    +
    +
    Epoch 20/100
    +
    +
    +
    50/50 - 0s - loss: 0.3914
    +
    +
    +
    Epoch 21/100
    +
    +
    +
    50/50 - 0s - loss: 0.3918
    +
    +
    +
    Epoch 22/100
    +
    +
    +
    50/50 - 0s - loss: 0.3889
    +
    +
    +
    Epoch 23/100
    +
    +
    +
    50/50 - 0s - loss: 0.3912
    +
    +
    +
    Epoch 24/100
    +
    +
    +
    50/50 - 0s - loss: 0.3892
    +
    +
    +
    Epoch 25/100
    +
    +
    +
    50/50 - 0s - loss: 0.3884
    +
    +
    +
    Epoch 26/100
    +
    +
    +
    50/50 - 0s - loss: 0.3881
    +
    +
    +
    Epoch 27/100
    +
    +
    +
    50/50 - 0s - loss: 0.3886
    +
    +
    +
    Epoch 28/100
    +
    +
    +
    50/50 - 0s - loss: 0.3884
    +
    +
    +
    Epoch 29/100
    +
    +
    +
    50/50 - 0s - loss: 0.3867
    +
    +
    +
    Epoch 30/100
    +
    +
    +
    50/50 - 0s - loss: 0.3878
    +
    +
    +
    Epoch 31/100
    +
    +
    +
    50/50 - 0s - loss: 0.3871
    +
    +
    +
    Epoch 32/100
    +
    +
    +
    50/50 - 0s - loss: 0.3866
    +
    +
    +
    Epoch 33/100
    +
    +
    +
    50/50 - 0s - loss: 0.3869
    +
    +
    +
    Epoch 34/100
    +
    +
    +
    50/50 - 0s - loss: 0.3869
    +
    +
    +
    Epoch 35/100
    +
    +
    +
    50/50 - 0s - loss: 0.3854
    +
    +
    +
    Epoch 36/100
    +
    +
    +
    50/50 - 0s - loss: 0.3848
    +
    +
    +
    Epoch 37/100
    +
    +
    +
    50/50 - 0s - loss: 0.3854
    +
    +
    +
    Epoch 38/100
    +
    +
    +
    50/50 - 0s - loss: 0.3855
    +
    +
    +
    Epoch 39/100
    +
    +
    +
    50/50 - 0s - loss: 0.3839
    +
    +
    +
    Epoch 40/100
    +
    +
    +
    50/50 - 0s - loss: 0.3845
    +
    +
    +
    Epoch 41/100
    +
    +
    +
    50/50 - 0s - loss: 0.3838
    +
    +
    +
    Epoch 42/100
    +
    +
    +
    50/50 - 0s - loss: 0.3824
    +
    +
    +
    Epoch 43/100
    +
    +
    +
    50/50 - 0s - loss: 0.3820
    +
    +
    +
    Epoch 44/100
    +
    +
    +
    50/50 - 0s - loss: 0.3828
    +
    +
    +
    Epoch 45/100
    +
    +
    +
    50/50 - 0s - loss: 0.3818
    +
    +
    +
    Epoch 46/100
    +
    +
    +
    50/50 - 0s - loss: 0.3808
    +
    +
    +
    Epoch 47/100
    +
    +
    +
    50/50 - 0s - loss: 0.3827
    +
    +
    +
    Epoch 48/100
    +
    +
    +
    50/50 - 0s - loss: 0.3818
    +
    +
    +
    Epoch 49/100
    +
    +
    +
    50/50 - 0s - loss: 0.3807
    +
    +
    +
    Epoch 50/100
    +
    +
    +
    50/50 - 0s - loss: 0.3827
    +
    +
    +
    Epoch 51/100
    +
    +
    +
    50/50 - 0s - loss: 0.3796
    +
    +
    +
    Epoch 52/100
    +
    +
    +
    50/50 - 0s - loss: 0.3808
    +
    +
    +
    Epoch 53/100
    +
    +
    +
    50/50 - 0s - loss: 0.3798
    +
    +
    +
    Epoch 54/100
    +
    +
    +
    50/50 - 0s - loss: 0.3807
    +
    +
    +
    Epoch 55/100
    +
    +
    +
    50/50 - 0s - loss: 0.3776
    +
    +
    +
    Epoch 56/100
    +
    +
    +
    50/50 - 0s - loss: 0.3777
    +
    +
    +
    Epoch 57/100
    +
    +
    +
    50/50 - 0s - loss: 0.3793
    +
    +
    +
    Epoch 58/100
    +
    +
    +
    50/50 - 0s - loss: 0.3785
    +
    +
    +
    Epoch 59/100
    +
    +
    +
    50/50 - 0s - loss: 0.3778
    +
    +
    +
    Epoch 60/100
    +
    +
    +
    50/50 - 0s - loss: 0.3782
    +
    +
    +
    Epoch 61/100
    +
    +
    +
    50/50 - 0s - loss: 0.3776
    +
    +
    +
    Epoch 62/100
    +50/50 - 0s - loss: 0.3775
    +
    +
    +
    Epoch 63/100
    +
    +
    +
    50/50 - 0s - loss: 0.3767
    +
    +
    +
    Epoch 64/100
    +
    +
    +
    50/50 - 0s - loss: 0.3761
    +
    +
    +
    Epoch 65/100
    +
    +
    +
    50/50 - 0s - loss: 0.3762
    +
    +
    +
    Epoch 66/100
    +
    +
    +
    50/50 - 0s - loss: 0.3760
    +
    +
    +
    Epoch 67/100
    +
    +
    +
    50/50 - 0s - loss: 0.3762
    +
    +
    +
    Epoch 68/100
    +
    +
    +
    50/50 - 0s - loss: 0.3745
    +
    +
    +
    Epoch 69/100
    +
    +
    +
    50/50 - 0s - loss: 0.3747
    +
    +
    +
    Epoch 70/100
    +
    +
    +
    50/50 - 0s - loss: 0.3756
    +
    +
    +
    Epoch 71/100
    +
    +
    +
    50/50 - 0s - loss: 0.3754
    +
    +
    +
    Epoch 72/100
    +
    +
    +
    50/50 - 0s - loss: 0.3761
    +
    +
    +
    Epoch 73/100
    +
    +
    +
    50/50 - 0s - loss: 0.3758
    +
    +
    +
    Epoch 74/100
    +
    +
    +
    50/50 - 0s - loss: 0.3744
    +
    +
    +
    Epoch 75/100
    +
    +
    +
    50/50 - 0s - loss: 0.3732
    +
    +
    +
    Epoch 76/100
    +
    +
    +
    50/50 - 0s - loss: 0.3733
    +
    +
    +
    Epoch 77/100
    +
    +
    +
    50/50 - 0s - loss: 0.3724
    +
    +
    +
    Epoch 78/100
    +
    +
    +
    50/50 - 0s - loss: 0.3726
    +
    +
    +
    Epoch 79/100
    +
    +
    +
    50/50 - 0s - loss: 0.3726
    +
    +
    +
    Epoch 80/100
    +
    +
    +
    50/50 - 0s - loss: 0.3710
    +
    +
    +
    Epoch 81/100
    +
    +
    +
    50/50 - 0s - loss: 0.3700
    +
    +
    +
    Epoch 82/100
    +
    +
    +
    50/50 - 0s - loss: 0.3711
    +
    +
    +
    Epoch 83/100
    +
    +
    +
    50/50 - 0s - loss: 0.3718
    +
    +
    +
    Epoch 84/100
    +
    +
    +
    50/50 - 0s - loss: 0.3714
    +
    +
    +
    Epoch 85/100
    +
    +
    +
    50/50 - 0s - loss: 0.3712
    +
    +
    +
    Epoch 86/100
    +
    +
    +
    50/50 - 0s - loss: 0.3713
    +
    +
    +
    Epoch 87/100
    +
    +
    +
    50/50 - 0s - loss: 0.3710
    +
    +
    +
    Epoch 88/100
    +
    +
    +
    50/50 - 0s - loss: 0.3714
    +
    +
    +
    Epoch 89/100
    +
    +
    +
    50/50 - 0s - loss: 0.3688
    +
    +
    +
    Epoch 90/100
    +
    +
    +
    50/50 - 0s - loss: 0.3694
    +
    +
    +
    Epoch 91/100
    +
    +
    +
    50/50 - 0s - loss: 0.3696
    +
    +
    +
    Epoch 92/100
    +
    +
    +
    50/50 - 0s - loss: 0.3695
    +
    +
    +
    Epoch 93/100
    +
    +
    +
    50/50 - 0s - loss: 0.3694
    +
    +
    +
    Epoch 94/100
    +
    +
    +
    50/50 - 0s - loss: 0.3704
    +
    +
    +
    Epoch 95/100
    +
    +
    +
    50/50 - 0s - loss: 0.3676
    +
    +
    +
    Epoch 96/100
    +
    +
    +
    50/50 - 0s - loss: 0.3693
    +
    +
    +
    Epoch 97/100
    +
    +
    +
    50/50 - 0s - loss: 0.3664
    +
    +
    +
    Epoch 98/100
    +
    +
    +
    50/50 - 0s - loss: 0.3673
    +
    +
    +
    Epoch 99/100
    +
    +
    +
    50/50 - 0s - loss: 0.3687
    +
    +
    +
    Epoch 100/100
    +
    +
    +
    50/50 - 0s - loss: 0.3675
    +
    +
    +
    0.36208778619766235
    +
    +
    +_images/chapter10_1_197.png +
    +
    +
    +
    +

    9.4. An extrapolation example

    +

    The following code provides an example of how recurrent neural +networks can be used to extrapolate to unknown values of physics data +sets. Specifically, the data sets used in this program come from +a quantum mechanical many-body calculation of energies as functions of the number of particles.

    +
    +
    +
    # For matrices and calculations
    +import numpy as np
    +# For machine learning (backend for keras)
    +import tensorflow as tf
    +# User-friendly machine learning library
    +# Front end for TensorFlow
    +import tensorflow.keras
    +# Different methods from Keras needed to create an RNN
    +# This is not necessary but it shortened function calls 
    +# that need to be used in the code.
    +from tensorflow.keras import datasets, layers, models
    +from tensorflow.keras.layers import Input
    +from tensorflow.keras import regularizers
    +from tensorflow.keras.models import Model, Sequential
    +from tensorflow.keras.layers import Dense, SimpleRNN, LSTM, GRU
    +# For timing the code
    +from timeit import default_timer as timer
    +# For plotting
    +import matplotlib.pyplot as plt
    +
    +
    +# The data set
    +datatype='VaryDimension'
    +X_tot = np.arange(2, 42, 2)
    +y_tot = np.array([-0.03077640549, -0.08336233266, -0.1446729567, -0.2116753732, -0.2830637392, -0.3581341341, -0.436462435, -0.5177783846,
    +	-0.6019067271, -0.6887363571, -0.7782028952, -0.8702784034, -0.9649652536, -1.062292565, -1.16231451, 
    +	-1.265109911, -1.370782966, -1.479465113, -1.591317992, -1.70653767])
    +
    +
    +
    +
    +
    +
    +

    9.5. Formatting the Data

    +

    The way the recurrent neural networks are trained in this program +differs from how machine learning algorithms are usually trained. +Typically a machine learning algorithm is trained by learning the +relationship between the x data and the y data. In this program, the +recurrent neural network will be trained to recognize the relationship +in a sequence of y values. This is type of data formatting is +typically used time series forcasting, but it can also be used in any +extrapolation (time series forecasting is just a specific type of +extrapolation along the time axis). This method of data formatting +does not use the x data and assumes that the y data are evenly spaced.

    +

    For a standard machine learning algorithm, the training data has the +form of (x,y) so the machine learning algorithm learns to assiciate a +y value with a given x value. This is useful when the test data has x +values within the same range as the training data. However, for this +application, the x values of the test data are outside of the x values +of the training data and the traditional method of training a machine +learning algorithm does not work as well. For this reason, the +recurrent neural network is trained on sequences of y values of the +form ((y1, y2), y3), so that the network is concerned with learning +the pattern of the y data and not the relation between the x and y +data. As long as the pattern of y data outside of the training region +stays relatively stable compared to what was inside the training +region, this method of training can produce accurate extrapolations to +y values far removed from the training data set.

    + + + + + +
    +
    +
    # FORMAT_DATA
    +def format_data(data, length_of_sequence = 2):  
    +    """
    +        Inputs:
    +            data(a numpy array): the data that will be the inputs to the recurrent neural
    +                network
    +            length_of_sequence (an int): the number of elements in one iteration of the
    +                sequence patter.  For a function approximator use length_of_sequence = 2.
    +        Returns:
    +            rnn_input (a 3D numpy array): the input data for the recurrent neural network.  Its
    +                dimensions are length of data - length of sequence, length of sequence, 
    +                dimnsion of data
    +            rnn_output (a numpy array): the training data for the neural network
    +        Formats data to be used in a recurrent neural network.
    +    """
    +
    +    X, Y = [], []
    +    for i in range(len(data)-length_of_sequence):
    +        # Get the next length_of_sequence elements
    +        a = data[i:i+length_of_sequence]
    +        # Get the element that immediately follows that
    +        b = data[i+length_of_sequence]
    +        # Reshape so that each data point is contained in its own array
    +        a = np.reshape (a, (len(a), 1))
    +        X.append(a)
    +        Y.append(b)
    +    rnn_input = np.array(X)
    +    rnn_output = np.array(Y)
    +
    +    return rnn_input, rnn_output
    +
    +
    +# ## Defining the Recurrent Neural Network Using Keras
    +# 
    +# The following method defines a simple recurrent neural network in keras consisting of one input layer, one hidden layer, and one output layer.
    +
    +def rnn(length_of_sequences, batch_size = None, stateful = False):
    +    """
    +        Inputs:
    +            length_of_sequences (an int): the number of y values in "x data".  This is determined
    +                when the data is formatted
    +            batch_size (an int): Default value is None.  See Keras documentation of SimpleRNN.
    +            stateful (a boolean): Default value is False.  See Keras documentation of SimpleRNN.
    +        Returns:
    +            model (a Keras model): The recurrent neural network that is built and compiled by this
    +                method
    +        Builds and compiles a recurrent neural network with one hidden layer and returns the model.
    +    """
    +    # Number of neurons in the input and output layers
    +    in_out_neurons = 1
    +    # Number of neurons in the hidden layer
    +    hidden_neurons = 200
    +    # Define the input layer
    +    inp = Input(batch_shape=(batch_size, 
    +                length_of_sequences, 
    +                in_out_neurons))  
    +    # Define the hidden layer as a simple RNN layer with a set number of neurons and add it to 
    +    # the network immediately after the input layer
    +    rnn = SimpleRNN(hidden_neurons, 
    +                    return_sequences=False,
    +                    stateful = stateful,
    +                    name="RNN")(inp)
    +    # Define the output layer as a dense neural network layer (standard neural network layer)
    +    #and add it to the network immediately after the hidden layer.
    +    dens = Dense(in_out_neurons,name="dense")(rnn)
    +    # Create the machine learning model starting with the input layer and ending with the 
    +    # output layer
    +    model = Model(inputs=[inp],outputs=[dens])
    +    # Compile the machine learning model using the mean squared error function as the loss 
    +    # function and an Adams optimizer.
    +    model.compile(loss="mean_squared_error", optimizer="adam")  
    +    return model
    +
    +
    +
    +
    +
    +
    +

    9.6. Predicting New Points With A Trained Recurrent Neural Network

    +
    +
    +
    def test_rnn (x1, y_test, plot_min, plot_max):
    +    """
    +        Inputs:
    +            x1 (a list or numpy array): The complete x component of the data set
    +            y_test (a list or numpy array): The complete y component of the data set
    +            plot_min (an int or float): the smallest x value used in the training data
    +            plot_max (an int or float): the largest x valye used in the training data
    +        Returns:
    +            None.
    +        Uses a trained recurrent neural network model to predict future points in the 
    +        series.  Computes the MSE of the predicted data set from the true data set, saves
    +        the predicted data set to a csv file, and plots the predicted and true data sets w
    +        while also displaying the data range used for training.
    +    """
    +    # Add the training data as the first dim points in the predicted data array as these
    +    # are known values.
    +    y_pred = y_test[:dim].tolist()
    +    # Generate the first input to the trained recurrent neural network using the last two 
    +    # points of the training data.  Based on how the network was trained this means that it
    +    # will predict the first point in the data set after the training data.  All of the 
    +    # brackets are necessary for Tensorflow.
    +    next_input = np.array([[[y_test[dim-2]], [y_test[dim-1]]]])
    +    # Save the very last point in the training data set.  This will be used later.
    +    last = [y_test[dim-1]]
    +
    +    # Iterate until the complete data set is created.
    +    for i in range (dim, len(y_test)):
    +        # Predict the next point in the data set using the previous two points.
    +        next = model.predict(next_input)
    +        # Append just the number of the predicted data set
    +        y_pred.append(next[0][0])
    +        # Create the input that will be used to predict the next data point in the data set.
    +        next_input = np.array([[last, next[0]]], dtype=np.float64)
    +        last = next
    +
    +    # Print the mean squared error between the known data set and the predicted data set.
    +    print('MSE: ', np.square(np.subtract(y_test, y_pred)).mean())
    +    # Save the predicted data set as a csv file for later use
    +    name = datatype + 'Predicted'+str(dim)+'.csv'
    +    np.savetxt(name, y_pred, delimiter=',')
    +    # Plot the known data set and the predicted data set.  The red box represents the region that was used
    +    # for the training data.
    +    fig, ax = plt.subplots()
    +    ax.plot(x1, y_test, label="true", linewidth=3)
    +    ax.plot(x1, y_pred, 'g-.',label="predicted", linewidth=4)
    +    ax.legend()
    +    # Created a red region to represent the points used in the training data.
    +    ax.axvspan(plot_min, plot_max, alpha=0.25, color='red')
    +    plt.show()
    +
    +# Check to make sure the data set is complete
    +assert len(X_tot) == len(y_tot)
    +
    +# This is the number of points that will be used in as the training data
    +dim=12
    +
    +# Separate the training data from the whole data set
    +X_train = X_tot[:dim]
    +y_train = y_tot[:dim]
    +
    +
    +# Generate the training data for the RNN, using a sequence of 2
    +rnn_input, rnn_training = format_data(y_train, 2)
    +
    +
    +# Create a recurrent neural network in Keras and produce a summary of the 
    +# machine learning model
    +model = rnn(length_of_sequences = rnn_input.shape[1])
    +model.summary()
    +
    +# Start the timer.  Want to time training+testing
    +start = timer()
    +# Fit the model using the training data genenerated above using 150 training iterations and a 5%
    +# validation split.  Setting verbose to True prints information about each training iteration.
    +hist = model.fit(rnn_input, rnn_training, batch_size=None, epochs=150, 
    +                 verbose=True,validation_split=0.05)
    +
    +for label in ["loss","val_loss"]:
    +    plt.plot(hist.history[label],label=label)
    +
    +plt.ylabel("loss")
    +plt.xlabel("epoch")
    +plt.title("The final validation loss: {}".format(hist.history["val_loss"][-1]))
    +plt.legend()
    +plt.show()
    +
    +# Use the trained neural network to predict more points of the data set
    +test_rnn(X_tot, y_tot, X_tot[0], X_tot[dim-1])
    +# Stop the timer and calculate the total time needed.
    +end = timer()
    +print('Time: ', end-start)
    +
    +
    +
    +
    +
    Model: "functional_1"
    +_________________________________________________________________
    +Layer (type)                 Output Shape              Param #   
    +=================================================================
    +input_1 (InputLayer)         [(None, 2, 1)]            0         
    +_________________________________________________________________
    +RNN (SimpleRNN)              (None, 200)               40400     
    +_________________________________________________________________
    +dense (Dense)                (None, 1)                 201       
    +=================================================================
    +Total params: 40,601
    +Trainable params: 40,601
    +Non-trainable params: 0
    +_________________________________________________________________
    +Epoch 1/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.1614
    +
    +
    +
    
    +1/1 [==============================] - 0s 168ms/step - loss: 0.1614 - val_loss: 0.1927
    +
    +
    +
    Epoch 2/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0681
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0681 - val_loss: 0.0356
    +
    +
    +
    Epoch 3/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0154
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 0.0154 - val_loss: 0.0018
    +
    +
    +
    Epoch 4/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 4.3675e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 4.3675e-04 - val_loss: 0.0539
    +
    +
    +
    Epoch 5/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0127
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0127 - val_loss: 0.1238
    +
    +
    +
    Epoch 6/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0318
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0318 - val_loss: 0.1571
    +
    +
    +
    Epoch 7/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0409
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0409 - val_loss: 0.1457
    +
    +
    +
    Epoch 8/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0373
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 0.0373 - val_loss: 0.1070
    +
    +
    +
    Epoch 9/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0263
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 0.0263 - val_loss: 0.0618
    +
    +
    +
    Epoch 10/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0140
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 0.0140 - val_loss: 0.0252
    +
    +
    +
    Epoch 11/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0049
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 0.0049 - val_loss: 0.0047
    +
    +
    +
    Epoch 12/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 8.9601e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 8.9601e-04 - val_loss: 1.7706e-04
    +
    +
    +
    Epoch 13/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0015
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 0.0015 - val_loss: 0.0066
    +
    +
    +
    Epoch 14/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0050
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0050 - val_loss: 0.0169
    +
    +
    +
    Epoch 15/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0092
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0092 - val_loss: 0.0252
    +
    +
    +
    Epoch 16/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0122
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0122 - val_loss: 0.0280
    +
    +
    +
    Epoch 17/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0131
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 0.0131 - val_loss: 0.0249
    +
    +
    +
    Epoch 18/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0119
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 0.0119 - val_loss: 0.0178
    +
    +
    +
    Epoch 19/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0091
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0091 - val_loss: 0.0095
    +
    +
    +
    Epoch 20/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0057
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 0.0057 - val_loss: 0.0029
    +
    +
    +
    Epoch 21/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0028
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 0.0028 - val_loss: 5.1024e-05
    +
    +
    +
    Epoch 22/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 9.3047e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 9.3047e-04 - val_loss: 0.0015
    +
    +
    +
    Epoch 23/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 4.2170e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 4.2170e-04 - val_loss: 0.0064
    +
    +
    +
    Epoch 24/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0011
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 0.0011 - val_loss: 0.0127
    +
    +
    +
    Epoch 25/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0024
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 0.0024 - val_loss: 0.0182
    +
    +
    +
    Epoch 26/150
    +
    +
    +
    
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0037
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 0.0037 - val_loss: 0.0210
    +
    +
    +
    Epoch 27/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0044
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 0.0044 - val_loss: 0.0205
    +
    +
    +
    Epoch 28/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0043
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 0.0043 - val_loss: 0.0170
    +
    +
    +
    Epoch 29/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0035
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 0.0035 - val_loss: 0.0118
    +
    +
    +
    Epoch 30/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0024
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 0.0024 - val_loss: 0.0066
    +
    +
    +
    Epoch 31/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0012
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 0.0012 - val_loss: 0.0026
    +
    +
    +
    Epoch 32/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 4.1938e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 4.1938e-04 - val_loss: 4.2108e-04
    +
    +
    +
    Epoch 33/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 1.4696e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 1.4696e-04 - val_loss: 4.9351e-05
    +
    +
    +
    Epoch 34/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 3.3515e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 3.3515e-04 - val_loss: 8.7654e-04
    +
    +
    +
    Epoch 35/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 7.8864e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 7.8864e-04 - val_loss: 0.0021
    +
    +
    +
    Epoch 36/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0013
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 0.0013 - val_loss: 0.0030
    +
    +
    +
    Epoch 37/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0015
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 0.0015 - val_loss: 0.0031
    +
    +
    +
    Epoch 38/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0015
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0015 - val_loss: 0.0026
    +
    +
    +
    Epoch 39/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0013
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 0.0013 - val_loss: 0.0016
    +
    +
    +
    Epoch 40/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 8.4817e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 8.4817e-04 - val_loss: 5.9712e-04
    +
    +
    +
    Epoch 41/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 4.1960e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 4.1960e-04 - val_loss: 5.1834e-05
    +
    +
    +
    Epoch 42/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 1.2261e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 1.2261e-04 - val_loss: 1.0502e-04
    +
    +
    +
    Epoch 43/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 2.5307e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 2.5307e-05 - val_loss: 6.7755e-04
    +
    +
    +
    Epoch 44/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 1.1302e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 1.1302e-04 - val_loss: 0.0015
    +
    +
    +
    Epoch 45/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 3.0417e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 3.0417e-04 - val_loss: 0.0022
    +
    +
    +
    Epoch 46/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 4.9066e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 4.9066e-04 - val_loss: 0.0025
    +
    +
    +
    Epoch 47/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 5.8441e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 5.8441e-04 - val_loss: 0.0023
    +
    +
    +
    Epoch 48/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 5.5018e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 5.5018e-04 - val_loss: 0.0017
    +
    +
    +
    Epoch 49/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 4.1198e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 4.1198e-04 - val_loss: 9.9305e-04
    +
    +
    +
    Epoch 50/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 2.3364e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 2.3364e-04 - val_loss: 3.8335e-04
    +
    +
    +
    Epoch 51/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 8.5796e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 8.5796e-05 - val_loss: 4.9130e-05
    +
    +
    +
    Epoch 52/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 1.5314e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 1.5314e-05 - val_loss: 2.2907e-05
    +
    +
    +
    Epoch 53/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 2.9857e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 2.9857e-05 - val_loss: 2.1308e-04
    +
    +
    +
    Epoch 54/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 1.0133e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 1.0133e-04 - val_loss: 4.6367e-04
    +
    +
    +
    Epoch 55/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 1.8355e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 1.8355e-04 - val_loss: 6.2971e-04
    +
    +
    +
    Epoch 56/150
    +
    +
    +
    
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 2.3446e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 2.3446e-04 - val_loss: 6.3475e-04
    +
    +
    +
    Epoch 57/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 2.3285e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 2.3285e-04 - val_loss: 4.9020e-04
    +
    +
    +
    Epoch 58/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 1.8382e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 1.8382e-04 - val_loss: 2.7457e-04
    +
    +
    +
    Epoch 59/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 1.1231e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 1.1231e-04 - val_loss: 8.7585e-05
    +
    +
    +
    Epoch 60/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 4.9274e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 4.9274e-05 - val_loss: 2.2688e-06
    +
    +
    +
    Epoch 61/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 1.7310e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 1.7310e-05 - val_loss: 3.5831e-05
    +
    +
    +
    Epoch 62/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 2.1970e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 2.1970e-05 - val_loss: 1.4969e-04
    +
    +
    +
    Epoch 63/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 5.1827e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 5.1827e-05 - val_loss: 2.7475e-04
    +
    +
    +
    Epoch 64/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 8.6183e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 8.6183e-05 - val_loss: 3.4722e-04
    +
    +
    +
    Epoch 65/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 1.0592e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 1.0592e-04 - val_loss: 3.3682e-04
    +
    +
    +
    Epoch 66/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 1.0207e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 1.0207e-04 - val_loss: 2.5532e-04
    +
    +
    +
    Epoch 67/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 7.8321e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 7.8321e-05 - val_loss: 1.4419e-04
    +
    +
    +
    Epoch 68/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 4.7236e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 4.7236e-05 - val_loss: 5.0422e-05
    +
    +
    +
    Epoch 69/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 2.2810e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 2.2810e-05 - val_loss: 3.9370e-06
    +
    +
    +
    Epoch 70/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 1.3631e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 19ms/step - loss: 1.3631e-05 - val_loss: 7.0204e-06
    +
    +
    +
    Epoch 71/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 1.9720e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 1.9720e-05 - val_loss: 3.8779e-05
    +
    +
    +
    Epoch 72/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 3.3982e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 3.3982e-05 - val_loss: 6.9903e-05
    +
    +
    +
    Epoch 73/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 4.6795e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 19ms/step - loss: 4.6795e-05 - val_loss: 7.8865e-05
    +
    +
    +
    Epoch 74/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 5.1028e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 5.1028e-05 - val_loss: 6.1482e-05
    +
    +
    +
    Epoch 75/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 4.5036e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 4.5036e-05 - val_loss: 3.0208e-05
    +
    +
    +
    Epoch 76/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 3.2523e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 3.2523e-05 - val_loss: 5.0685e-06
    +
    +
    +
    Epoch 77/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 1.9844e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 1.9844e-05 - val_loss: 1.9610e-06
    +
    +
    +
    Epoch 78/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 1.2452e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 1.2452e-05 - val_loss: 2.4494e-05
    +
    +
    +
    Epoch 79/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 1.2335e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 1.2335e-05 - val_loss: 6.3044e-05
    +
    +
    +
    Epoch 80/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 1.7583e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 1.7583e-05 - val_loss: 1.0059e-04
    +
    +
    +
    Epoch 81/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 2.3980e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 2.3980e-05 - val_loss: 1.2157e-04
    +
    +
    +
    Epoch 82/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 2.7513e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 2.7513e-05 - val_loss: 1.1890e-04
    +
    +
    +
    Epoch 83/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 2.6387e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 2.6387e-05 - val_loss: 9.5984e-05
    +
    +
    +
    Epoch 84/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 2.1564e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 2.1564e-05 - val_loss: 6.3446e-05
    +
    +
    +
    Epoch 85/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 1.5803e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 1.5803e-05 - val_loss: 3.3027e-05
    +
    +
    +
    Epoch 86/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 1.1910e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 1.1910e-05 - val_loss: 1.2295e-05
    +
    +
    +
    Epoch 87/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 1.1264e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 1.1264e-05 - val_loss: 2.4889e-06
    +
    +
    +
    Epoch 88/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 1.3337e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 1.3337e-05 - val_loss: 4.8689e-08
    +
    +
    +
    Epoch 89/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 1.6291e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 1.6291e-05 - val_loss: 1.6905e-07
    +
    +
    +
    Epoch 90/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 1.8174e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 1.8174e-05 - val_loss: 8.0057e-08
    +
    +
    +
    Epoch 91/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 1.7968e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 19ms/step - loss: 1.7968e-05 - val_loss: 2.7600e-07
    +
    +
    +
    Epoch 92/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 1.5971e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 1.5971e-05 - val_loss: 3.3847e-06
    +
    +
    +
    Epoch 93/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 1.3408e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 1.3408e-05 - val_loss: 1.1733e-05
    +
    +
    +
    Epoch 94/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 1.1615e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 1.1615e-05 - val_loss: 2.5258e-05
    +
    +
    +
    Epoch 95/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 1.1290e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 1.1290e-05 - val_loss: 4.0986e-05
    +
    +
    +
    Epoch 96/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 1.2221e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 1.2221e-05 - val_loss: 5.4292e-05
    +
    +
    +
    Epoch 97/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 1.3550e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 1.3550e-05 - val_loss: 6.1085e-05
    +
    +
    +
    Epoch 98/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 1.4361e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 19ms/step - loss: 1.4361e-05 - val_loss: 5.9625e-05
    +
    +
    +
    Epoch 99/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 1.4195e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 1.4195e-05 - val_loss: 5.1104e-05
    +
    +
    +
    Epoch 100/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 1.3226e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 1.3226e-05 - val_loss: 3.8767e-05
    +
    +
    +
    Epoch 101/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 1.2059e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 1.2059e-05 - val_loss: 2.6280e-05
    +
    +
    +
    Epoch 102/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 1.1312e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 1.1312e-05 - val_loss: 1.6264e-05
    +
    +
    +
    Epoch 103/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 1.1259e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 1.1259e-05 - val_loss: 9.6858e-06
    +
    +
    +
    Epoch 104/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 1.1740e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 1.1740e-05 - val_loss: 6.1976e-06
    +
    +
    +
    Epoch 105/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 1.2320e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 1.2320e-05 - val_loss: 4.9763e-06
    +
    +
    +
    Epoch 106/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 1.2591e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 1.2591e-05 - val_loss: 5.4740e-06
    +
    +
    +
    Epoch 107/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 1.2401e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 1.2401e-05 - val_loss: 7.6209e-06
    +
    +
    +
    Epoch 108/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 1.1895e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 1.1895e-05 - val_loss: 1.1510e-05
    +
    +
    +
    Epoch 109/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 1.1385e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 1.1385e-05 - val_loss: 1.6893e-05
    +
    +
    +
    Epoch 110/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 1.1131e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 1.1131e-05 - val_loss: 2.2888e-05
    +
    +
    +
    Epoch 111/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 1.1203e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 1.1203e-05 - val_loss: 2.8135e-05
    +
    +
    +
    Epoch 112/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 1.1467e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 1.1467e-05 - val_loss: 3.1299e-05
    +
    +
    +
    Epoch 113/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 1.1704e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 1.1704e-05 - val_loss: 3.1629e-05
    +
    +
    +
    Epoch 114/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 1.1751e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 1.1751e-05 - val_loss: 2.9233e-05
    +
    +
    +
    Epoch 115/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 1.1592e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 1.1592e-05 - val_loss: 2.4977e-05
    +
    +
    +
    Epoch 116/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 1.1341e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 1.1341e-05 - val_loss: 2.0057e-05
    +
    +
    +
    Epoch 117/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 1.1148e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 1.1148e-05 - val_loss: 1.5546e-05
    +
    +
    +
    Epoch 118/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 1.1104e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 1.1104e-05 - val_loss: 1.2102e-05
    +
    +
    +
    Epoch 119/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 1.1196e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 1.1196e-05 - val_loss: 9.9551e-06
    +
    +
    +
    Epoch 120/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 1.1329e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 1.1329e-05 - val_loss: 9.0678e-06
    +
    +
    +
    Epoch 121/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 1.1403e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 1.1403e-05 - val_loss: 9.3212e-06
    +
    +
    +
    Epoch 122/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 1.1372e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 1.1372e-05 - val_loss: 1.0588e-05
    +
    +
    +
    Epoch 123/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 1.1265e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 1.1265e-05 - val_loss: 1.2699e-05
    +
    +
    +
    Epoch 124/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 1.1155e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 1.1155e-05 - val_loss: 1.5344e-05
    +
    +
    +
    Epoch 125/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 1.1104e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 1.1104e-05 - val_loss: 1.8049e-05
    +
    +
    +
    Epoch 126/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 1.1126e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 1.1126e-05 - val_loss: 2.0259e-05
    +
    +
    +
    Epoch 127/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 1.1188e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 1.1188e-05 - val_loss: 2.1508e-05
    +
    +
    +
    Epoch 128/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 1.1237e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 1.1237e-05 - val_loss: 2.1579e-05
    +
    +
    +
    Epoch 129/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 1.1239e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 1.1239e-05 - val_loss: 2.0558e-05
    +
    +
    +
    Epoch 130/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 1.1197e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 1.1197e-05 - val_loss: 1.8797e-05
    +
    +
    +
    Epoch 131/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 1.1140e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 1.1140e-05 - val_loss: 1.6756e-05
    +
    +
    +
    Epoch 132/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 1.1104e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 1.1104e-05 - val_loss: 1.4866e-05
    +
    +
    +
    Epoch 133/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 1.1104e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 1.1104e-05 - val_loss: 1.3434e-05
    +
    +
    +
    Epoch 134/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 1.1131e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 1.1131e-05 - val_loss: 1.2624e-05
    +
    +
    +
    Epoch 135/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 1.1157e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 1.1157e-05 - val_loss: 1.2484e-05
    +
    +
    +
    Epoch 136/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 1.1164e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 1.1164e-05 - val_loss: 1.2973e-05
    +
    +
    +
    Epoch 137/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 1.1146e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 1.1146e-05 - val_loss: 1.3983e-05
    +
    +
    +
    Epoch 138/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 1.1119e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 1.1119e-05 - val_loss: 1.5332e-05
    +
    +
    +
    Epoch 139/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 1.1098e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 1.1098e-05 - val_loss: 1.6776e-05
    +
    +
    +
    Epoch 140/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 1.1095e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 1.1095e-05 - val_loss: 1.8043e-05
    +
    +
    +
    Epoch 141/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 1.1106e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 19ms/step - loss: 1.1106e-05 - val_loss: 1.8897e-05
    +
    +
    +
    Epoch 142/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 1.1120e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 19ms/step - loss: 1.1120e-05 - val_loss: 1.9197e-05
    +
    +
    +
    Epoch 143/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 1.1125e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 1.1125e-05 - val_loss: 1.8938e-05
    +
    +
    +
    Epoch 144/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 1.1118e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 1.1118e-05 - val_loss: 1.8237e-05
    +
    +
    +
    Epoch 145/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 1.1104e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 1.1104e-05 - val_loss: 1.7295e-05
    +
    +
    +
    Epoch 146/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 1.1093e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 1.1093e-05 - val_loss: 1.6333e-05
    +
    +
    +
    Epoch 147/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 1.1091e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 1.1091e-05 - val_loss: 1.5537e-05
    +
    +
    +
    Epoch 148/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 1.1096e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 1.1096e-05 - val_loss: 1.5039e-05
    +
    +
    +
    Epoch 149/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 1.1103e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 1.1103e-05 - val_loss: 1.4898e-05
    +
    +
    +
    Epoch 150/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 1.1105e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 1.1105e-05 - val_loss: 1.5105e-05
    +
    +
    +_images/chapter10_7_411.png +
    MSE:  9.884935143687282e-05
    +
    +
    +_images/chapter10_7_413.png +
    Time:  4.521348709999998
    +
    +
    +
    +
    +
    +
    +

    9.7. Other Things to Try

    +

    Changing the size of the recurrent neural network and its parameters +can drastically change the results you get from the model. The below +code takes the simple recurrent neural network from above and adds a +second hidden layer, changes the number of neurons in the hidden +layer, and explicitly declares the activation function of the hidden +layers to be a sigmoid function. The loss function and optimizer can +also be changed but are kept the same as the above network. These +parameters can be tuned to provide the optimal result from the +network. For some ideas on how to improve the performance of a +recurrent neural network.

    +
    +
    +
    def rnn_2layers(length_of_sequences, batch_size = None, stateful = False):
    +    """
    +        Inputs:
    +            length_of_sequences (an int): the number of y values in "x data".  This is determined
    +                when the data is formatted
    +            batch_size (an int): Default value is None.  See Keras documentation of SimpleRNN.
    +            stateful (a boolean): Default value is False.  See Keras documentation of SimpleRNN.
    +        Returns:
    +            model (a Keras model): The recurrent neural network that is built and compiled by this
    +                method
    +        Builds and compiles a recurrent neural network with two hidden layers and returns the model.
    +    """
    +    # Number of neurons in the input and output layers
    +    in_out_neurons = 1
    +    # Number of neurons in the hidden layer, increased from the first network
    +    hidden_neurons = 500
    +    # Define the input layer
    +    inp = Input(batch_shape=(batch_size, 
    +                length_of_sequences, 
    +                in_out_neurons))  
    +    # Create two hidden layers instead of one hidden layer.  Explicitly set the activation
    +    # function to be the sigmoid function (the default value is hyperbolic tangent)
    +    rnn1 = SimpleRNN(hidden_neurons, 
    +                    return_sequences=True,  # This needs to be True if another hidden layer is to follow
    +                    stateful = stateful, activation = 'sigmoid',
    +                    name="RNN1")(inp)
    +    rnn2 = SimpleRNN(hidden_neurons, 
    +                    return_sequences=False, activation = 'sigmoid',
    +                    stateful = stateful,
    +                    name="RNN2")(rnn1)
    +    # Define the output layer as a dense neural network layer (standard neural network layer)
    +    #and add it to the network immediately after the hidden layer.
    +    dens = Dense(in_out_neurons,name="dense")(rnn2)
    +    # Create the machine learning model starting with the input layer and ending with the 
    +    # output layer
    +    model = Model(inputs=[inp],outputs=[dens])
    +    # Compile the machine learning model using the mean squared error function as the loss 
    +    # function and an Adams optimizer.
    +    model.compile(loss="mean_squared_error", optimizer="adam")  
    +    return model
    +
    +# Check to make sure the data set is complete
    +assert len(X_tot) == len(y_tot)
    +
    +# This is the number of points that will be used in as the training data
    +dim=12
    +
    +# Separate the training data from the whole data set
    +X_train = X_tot[:dim]
    +y_train = y_tot[:dim]
    +
    +
    +# Generate the training data for the RNN, using a sequence of 2
    +rnn_input, rnn_training = format_data(y_train, 2)
    +
    +
    +# Create a recurrent neural network in Keras and produce a summary of the 
    +# machine learning model
    +model = rnn_2layers(length_of_sequences = 2)
    +model.summary()
    +
    +# Start the timer.  Want to time training+testing
    +start = timer()
    +# Fit the model using the training data genenerated above using 150 training iterations and a 5%
    +# validation split.  Setting verbose to True prints information about each training iteration.
    +hist = model.fit(rnn_input, rnn_training, batch_size=None, epochs=150, 
    +                 verbose=True,validation_split=0.05)
    +
    +
    +# This section plots the training loss and the validation loss as a function of training iteration.
    +# This is not required for analyzing the couple cluster data but can help determine if the network is
    +# being overtrained.
    +for label in ["loss","val_loss"]:
    +    plt.plot(hist.history[label],label=label)
    +
    +plt.ylabel("loss")
    +plt.xlabel("epoch")
    +plt.title("The final validation loss: {}".format(hist.history["val_loss"][-1]))
    +plt.legend()
    +plt.show()
    +
    +# Use the trained neural network to predict more points of the data set
    +test_rnn(X_tot, y_tot, X_tot[0], X_tot[dim-1])
    +# Stop the timer and calculate the total time needed.
    +end = timer()
    +print('Time: ', end-start)
    +
    +
    +
    +
    +
    Model: "functional_3"
    +_________________________________________________________________
    +Layer (type)                 Output Shape              Param #   
    +=================================================================
    +input_2 (InputLayer)         [(None, 2, 1)]            0         
    +_________________________________________________________________
    +RNN1 (SimpleRNN)             (None, 2, 500)            251000    
    +_________________________________________________________________
    +RNN2 (SimpleRNN)             (None, 500)               500500    
    +_________________________________________________________________
    +dense (Dense)                (None, 1)                 501       
    +=================================================================
    +Total params: 752,001
    +Trainable params: 752,001
    +Non-trainable params: 0
    +_________________________________________________________________
    +Epoch 1/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 1.4176
    +
    +
    +
    
    +1/1 [==============================] - 0s 227ms/step - loss: 1.4176 - val_loss: 3.6488
    +
    +
    +
    Epoch 2/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 5.4802
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 5.4802 - val_loss: 0.5738
    +
    +
    +
    Epoch 3/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 1.4330
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 1.4330 - val_loss: 0.8091
    +
    +
    +
    Epoch 4/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.2697
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.2697 - val_loss: 3.5191
    +
    +
    +
    Epoch 5/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 2.1554
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 2.1554 - val_loss: 3.2451
    +
    +
    +
    Epoch 6/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 1.9444
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 1.9444 - val_loss: 1.2933
    +
    +
    +
    Epoch 7/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.5533
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.5533 - val_loss: 0.1028
    +
    +
    +
    Epoch 8/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0521
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0521 - val_loss: 0.1031
    +
    +
    +
    Epoch 9/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.5942
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.5942 - val_loss: 0.3703
    +
    +
    +
    Epoch 10/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 1.1041
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 1.1041 - val_loss: 0.2869
    +
    +
    +
    Epoch 11/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.9592
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.9592 - val_loss: 0.0406
    +
    +
    +
    Epoch 12/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.4307
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.4307 - val_loss: 0.0672
    +
    +
    +
    Epoch 13/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0683
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0683 - val_loss: 0.5012
    +
    +
    +
    Epoch 14/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.1235
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.1235 - val_loss: 1.0556
    +
    +
    +
    Epoch 15/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.4083
    +
    +
    +
    
    +1/1 [==============================] - 0s 19ms/step - loss: 0.4083 - val_loss: 1.3256
    +
    +
    +
    Epoch 16/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.5737
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.5737 - val_loss: 1.1606
    +
    +
    +
    Epoch 17/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.4712
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.4712 - val_loss: 0.7278
    +
    +
    +
    Epoch 18/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.2276
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.2276 - val_loss: 0.3054
    +
    +
    +
    Epoch 19/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0589
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0589 - val_loss: 0.0652
    +
    +
    +
    Epoch 20/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0695
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0695 - val_loss: 8.7287e-04
    +
    +
    +
    Epoch 21/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.1958
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.1958 - val_loss: 0.0067
    +
    +
    +
    Epoch 22/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.2957
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.2957 - val_loss: 0.0046
    +
    +
    +
    Epoch 23/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.2815
    +
    +
    +
    
    +1/1 [==============================] - 0s 20ms/step - loss: 0.2815 - val_loss: 0.0030
    +
    +
    +
    Epoch 24/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.1768
    +
    +
    +
    
    +1/1 [==============================] - 0s 20ms/step - loss: 0.1768 - val_loss: 0.0605
    +
    +
    +
    Epoch 25/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0727
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0727 - val_loss: 0.2095
    +
    +
    +
    Epoch 26/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0430
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0430 - val_loss: 0.4103
    +
    +
    +
    Epoch 27/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0896
    +
    +
    +
    
    +1/1 [==============================] - 0s 19ms/step - loss: 0.0896 - val_loss: 0.5719
    +
    +
    +
    Epoch 28/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.1536
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.1536 - val_loss: 0.6165
    +
    +
    +
    Epoch 29/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.1739
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.1739 - val_loss: 0.5322
    +
    +
    +
    Epoch 30/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.1365
    +
    +
    +
    
    +1/1 [==============================] - 0s 19ms/step - loss: 0.1365 - val_loss: 0.3724
    +
    +
    +
    Epoch 31/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0773
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0773 - val_loss: 0.2118
    +
    +
    +
    Epoch 32/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0432
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0432 - val_loss: 0.0999
    +
    +
    +
    Epoch 33/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0528
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0528 - val_loss: 0.0440
    +
    +
    +
    Epoch 34/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0865
    +
    +
    +
    
    +1/1 [==============================] - 0s 19ms/step - loss: 0.0865 - val_loss: 0.0261
    +
    +
    +
    Epoch 35/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.1092
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.1092 - val_loss: 0.0315
    +
    +
    +
    Epoch 36/150
    +
    +
    +
    
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.1012
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.1012 - val_loss: 0.0612
    +
    +
    +
    Epoch 37/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0719
    +
    +
    +
    
    +1/1 [==============================] - 0s 19ms/step - loss: 0.0719 - val_loss: 0.1231
    +
    +
    +
    Epoch 38/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0466
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0466 - val_loss: 0.2126
    +
    +
    +
    Epoch 39/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0432
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0432 - val_loss: 0.3043
    +
    +
    +
    Epoch 40/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0587
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0587 - val_loss: 0.3636
    +
    +
    +
    Epoch 41/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0747
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0747 - val_loss: 0.3676
    +
    +
    +
    Epoch 42/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0759
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0759 - val_loss: 0.3193
    +
    +
    +
    Epoch 43/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0623
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0623 - val_loss: 0.2431
    +
    +
    +
    Epoch 44/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0468
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0468 - val_loss: 0.1684
    +
    +
    +
    Epoch 45/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0417
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0417 - val_loss: 0.1143
    +
    +
    +
    Epoch 46/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0485
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0485 - val_loss: 0.0857
    +
    +
    +
    Epoch 47/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0580
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0580 - val_loss: 0.0803
    +
    +
    +
    Epoch 48/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0605
    +
    +
    +
    
    +1/1 [==============================] - 0s 19ms/step - loss: 0.0605 - val_loss: 0.0955
    +
    +
    +
    Epoch 49/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0540
    +
    +
    +
    
    +1/1 [==============================] - 0s 19ms/step - loss: 0.0540 - val_loss: 0.1299
    +
    +
    +
    Epoch 50/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0452
    +
    +
    +
    
    +1/1 [==============================] - 0s 19ms/step - loss: 0.0452 - val_loss: 0.1782
    +
    +
    +
    Epoch 51/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0415
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0415 - val_loss: 0.2284
    +
    +
    +
    Epoch 52/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0448
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0448 - val_loss: 0.2639
    +
    +
    +
    Epoch 53/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0502
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0502 - val_loss: 0.2725
    +
    +
    +
    Epoch 54/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0518
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0518 - val_loss: 0.2531
    +
    +
    +
    Epoch 55/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0483
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0483 - val_loss: 0.2155
    +
    +
    +
    Epoch 56/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0434
    +
    +
    +
    
    +1/1 [==============================] - 0s 19ms/step - loss: 0.0434 - val_loss: 0.1742
    +
    +
    +
    Epoch 57/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0415
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0415 - val_loss: 0.1411
    +
    +
    +
    Epoch 58/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0435
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0435 - val_loss: 0.1224
    +
    +
    +
    Epoch 59/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0464
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0464 - val_loss: 0.1194
    +
    +
    +
    Epoch 60/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0470
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0470 - val_loss: 0.1310
    +
    +
    +
    Epoch 61/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0448
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0448 - val_loss: 0.1544
    +
    +
    +
    Epoch 62/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0422
    +
    +
    +
    
    +1/1 [==============================] - 0s 19ms/step - loss: 0.0422 - val_loss: 0.1836
    +
    +
    +
    Epoch 63/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0415
    +
    +
    +
    
    +1/1 [==============================] - 0s 19ms/step - loss: 0.0415 - val_loss: 0.2101
    +
    +
    +
    Epoch 64/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0429
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0429 - val_loss: 0.2253
    +
    +
    +
    Epoch 65/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0444
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0444 - val_loss: 0.2246
    +
    +
    +
    Epoch 66/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0443
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0443 - val_loss: 0.2096
    +
    +
    +
    Epoch 67/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0428
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0428 - val_loss: 0.1869
    +
    +
    +
    Epoch 68/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0415
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0415 - val_loss: 0.1645
    +
    +
    +
    Epoch 69/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0415
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0415 - val_loss: 0.1485
    +
    +
    +
    Epoch 70/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0425
    +
    +
    +
    
    +1/1 [==============================] - 0s 20ms/step - loss: 0.0425 - val_loss: 0.1423
    +
    +
    +
    Epoch 71/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0431
    +
    +
    +
    
    +1/1 [==============================] - 0s 19ms/step - loss: 0.0431 - val_loss: 0.1461
    +
    +
    +
    Epoch 72/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0427
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0427 - val_loss: 0.1584
    +
    +
    +
    Epoch 73/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0418
    +
    +
    +
    
    +1/1 [==============================] - 0s 19ms/step - loss: 0.0418 - val_loss: 0.1752
    +
    +
    +
    Epoch 74/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0413
    +
    +
    +
    
    +1/1 [==============================] - 0s 20ms/step - loss: 0.0413 - val_loss: 0.1915
    +
    +
    +
    Epoch 75/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0416
    +
    +
    +
    
    +1/1 [==============================] - 0s 19ms/step - loss: 0.0416 - val_loss: 0.2018
    +
    +
    +
    Epoch 76/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0421
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0421 - val_loss: 0.2030
    +
    +
    +
    Epoch 77/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0422
    +
    +
    +
    
    +1/1 [==============================] - 0s 19ms/step - loss: 0.0422 - val_loss: 0.1955
    +
    +
    +
    Epoch 78/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0418
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0418 - val_loss: 0.1827
    +
    +
    +
    Epoch 79/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0413
    +
    +
    +
    
    +1/1 [==============================] - 0s 21ms/step - loss: 0.0413 - val_loss: 0.1693
    +
    +
    +
    Epoch 80/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0413
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0413 - val_loss: 0.1595
    +
    +
    +
    Epoch 81/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0416
    +
    +
    +
    
    +1/1 [==============================] - 0s 19ms/step - loss: 0.0416 - val_loss: 0.1557
    +
    +
    +
    Epoch 82/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0418
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0418 - val_loss: 0.1584
    +
    +
    +
    Epoch 83/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0416
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0416 - val_loss: 0.1662
    +
    +
    +
    Epoch 84/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0413
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0413 - val_loss: 0.1764
    +
    +
    +
    Epoch 85/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0411
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0411 - val_loss: 0.1856
    +
    +
    +
    Epoch 86/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0413
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0413 - val_loss: 0.1906
    +
    +
    +
    Epoch 87/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0414
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0414 - val_loss: 0.1899
    +
    +
    +
    Epoch 88/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0414
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0414 - val_loss: 0.1844
    +
    +
    +
    Epoch 89/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0412
    +
    +
    +
    
    +1/1 [==============================] - 0s 20ms/step - loss: 0.0412 - val_loss: 0.1764
    +
    +
    +
    Epoch 90/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0411
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0411 - val_loss: 0.1688
    +
    +
    +
    Epoch 91/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0411
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0411 - val_loss: 0.1641
    +
    +
    +
    Epoch 92/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0412
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0412 - val_loss: 0.1634
    +
    +
    +
    Epoch 93/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0412
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0412 - val_loss: 0.1666
    +
    +
    +
    Epoch 94/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0411
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0411 - val_loss: 0.1723
    +
    +
    +
    Epoch 95/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0410
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0410 - val_loss: 0.1783
    +
    +
    +
    Epoch 96/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0410
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0410 - val_loss: 0.1826
    +
    +
    +
    Epoch 97/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0411
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0411 - val_loss: 0.1836
    +
    +
    +
    Epoch 98/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0411
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0411 - val_loss: 0.1814
    +
    +
    +
    Epoch 99/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0410
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0410 - val_loss: 0.1769
    +
    +
    +
    Epoch 100/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0409
    +
    +
    +
    
    +1/1 [==============================] - 0s 19ms/step - loss: 0.0409 - val_loss: 0.1720
    +
    +
    +
    Epoch 101/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0409
    +
    +
    +
    
    +1/1 [==============================] - 0s 20ms/step - loss: 0.0409 - val_loss: 0.1684
    +
    +
    +
    Epoch 102/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0409
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0409 - val_loss: 0.1673
    +
    +
    +
    Epoch 103/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0409
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0409 - val_loss: 0.1687
    +
    +
    +
    Epoch 104/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0409
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0409 - val_loss: 0.1719
    +
    +
    +
    Epoch 105/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0409
    +
    +
    +
    
    +1/1 [==============================] - 0s 19ms/step - loss: 0.0409 - val_loss: 0.1756
    +
    +
    +
    Epoch 106/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0408
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0408 - val_loss: 0.1784
    +
    +
    +
    Epoch 107/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0408
    +
    +
    +
    
    +1/1 [==============================] - 0s 20ms/step - loss: 0.0408 - val_loss: 0.1793
    +
    +
    +
    Epoch 108/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0408
    +
    +
    +
    
    +1/1 [==============================] - 0s 20ms/step - loss: 0.0408 - val_loss: 0.1781
    +
    +
    +
    Epoch 109/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0408
    +
    +
    +
    
    +1/1 [==============================] - 0s 19ms/step - loss: 0.0408 - val_loss: 0.1754
    +
    +
    +
    Epoch 110/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0408
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0408 - val_loss: 0.1723
    +
    +
    +
    Epoch 111/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0408
    +
    +
    +
    
    +1/1 [==============================] - 0s 21ms/step - loss: 0.0408 - val_loss: 0.1701
    +
    +
    +
    Epoch 112/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0408
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0408 - val_loss: 0.1693
    +
    +
    +
    Epoch 113/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0407
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0407 - val_loss: 0.1702
    +
    +
    +
    Epoch 114/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0407
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0407 - val_loss: 0.1722
    +
    +
    +
    Epoch 115/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0407
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0407 - val_loss: 0.1745
    +
    +
    +
    Epoch 116/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0407
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0407 - val_loss: 0.1760
    +
    +
    +
    Epoch 117/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0407
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0407 - val_loss: 0.1764
    +
    +
    +
    Epoch 118/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0407
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0407 - val_loss: 0.1754
    +
    +
    +
    Epoch 119/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0406
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0406 - val_loss: 0.1736
    +
    +
    +
    Epoch 120/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0406
    +
    +
    +
    
    +1/1 [==============================] - 0s 19ms/step - loss: 0.0406 - val_loss: 0.1718
    +
    +
    +
    Epoch 121/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0406
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0406 - val_loss: 0.1705
    +
    +
    +
    Epoch 122/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0406
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0406 - val_loss: 0.1703
    +
    +
    +
    Epoch 123/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0406
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0406 - val_loss: 0.1711
    +
    +
    +
    Epoch 124/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0405
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0405 - val_loss: 0.1724
    +
    +
    +
    Epoch 125/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0405
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0405 - val_loss: 0.1737
    +
    +
    +
    Epoch 126/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0405
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0405 - val_loss: 0.1744
    +
    +
    +
    Epoch 127/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0405
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0405 - val_loss: 0.1742
    +
    +
    +
    Epoch 128/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0405
    +
    +
    +
    
    +1/1 [==============================] - 0s 20ms/step - loss: 0.0405 - val_loss: 0.1734
    +
    +
    +
    Epoch 129/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0405
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0405 - val_loss: 0.1721
    +
    +
    +
    Epoch 130/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0404
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0404 - val_loss: 0.1711
    +
    +
    +
    Epoch 131/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0404
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0404 - val_loss: 0.1706
    +
    +
    +
    Epoch 132/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0404
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0404 - val_loss: 0.1707
    +
    +
    +
    Epoch 133/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0404
    +
    +
    +
    
    +1/1 [==============================] - 0s 19ms/step - loss: 0.0404 - val_loss: 0.1714
    +
    +
    +
    Epoch 134/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0404
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0404 - val_loss: 0.1722
    +
    +
    +
    Epoch 135/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0403
    +
    +
    +
    
    +1/1 [==============================] - 0s 20ms/step - loss: 0.0403 - val_loss: 0.1728
    +
    +
    +
    Epoch 136/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0403
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0403 - val_loss: 0.1729
    +
    +
    +
    Epoch 137/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0403
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0403 - val_loss: 0.1725
    +
    +
    +
    Epoch 138/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0403
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0403 - val_loss: 0.1717
    +
    +
    +
    Epoch 139/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0403
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0403 - val_loss: 0.1710
    +
    +
    +
    Epoch 140/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0402
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0402 - val_loss: 0.1705
    +
    +
    +
    Epoch 141/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0402
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0402 - val_loss: 0.1704
    +
    +
    +
    Epoch 142/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0402
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0402 - val_loss: 0.1707
    +
    +
    +
    Epoch 143/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0402
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0402 - val_loss: 0.1712
    +
    +
    +
    Epoch 144/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0402
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0402 - val_loss: 0.1716
    +
    +
    +
    Epoch 145/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0402
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0402 - val_loss: 0.1717
    +
    +
    +
    Epoch 146/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0401
    +
    +
    +
    
    +1/1 [==============================] - 0s 19ms/step - loss: 0.0401 - val_loss: 0.1715
    +
    +
    +
    Epoch 147/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0401
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0401 - val_loss: 0.1710
    +
    +
    +
    Epoch 148/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0401
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0401 - val_loss: 0.1705
    +
    +
    +
    Epoch 149/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0401
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0401 - val_loss: 0.1701
    +
    +
    +
    Epoch 150/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0401
    +
    +
    +
    
    +1/1 [==============================] - 0s 20ms/step - loss: 0.0401 - val_loss: 0.1699
    +
    +
    +_images/chapter10_9_421.png +
    MSE:  0.32920351498520983
    +
    +
    +_images/chapter10_9_423.png +
    Time:  6.260979576
    +
    +
    +
    +
    +
    +
    +

    9.8. Other Types of Recurrent Neural Networks

    +

    Besides a simple recurrent neural network layer, there are two other +commonly used types of recurrent neural network layers: Long Short +Term Memory (LSTM) and Gated Recurrent Unit (GRU). For a short +introduction to these layers see https://medium.com/mindboard/lstm-vs-gru-experimental-comparison-955820c21e8b +and https://medium.com/mindboard/lstm-vs-gru-experimental-comparison-955820c21e8b.

    +

    The first network created below is similar to the previous network, +but it replaces the SimpleRNN layers with LSTM layers. The second +network below has two hidden layers made up of GRUs, which are +preceeded by two dense (feeddorward) neural network layers. These +dense layers “preprocess” the data before it reaches the recurrent +layers. This architecture has been shown to improve the performance +of recurrent neural networks (see the link above and also +https://arxiv.org/pdf/1807.02857.pdf.

    +
    +
    +
    def lstm_2layers(length_of_sequences, batch_size = None, stateful = False):
    +    """
    +        Inputs:
    +            length_of_sequences (an int): the number of y values in "x data".  This is determined
    +                when the data is formatted
    +            batch_size (an int): Default value is None.  See Keras documentation of SimpleRNN.
    +            stateful (a boolean): Default value is False.  See Keras documentation of SimpleRNN.
    +        Returns:
    +            model (a Keras model): The recurrent neural network that is built and compiled by this
    +                method
    +        Builds and compiles a recurrent neural network with two LSTM hidden layers and returns the model.
    +    """
    +    # Number of neurons on the input/output layer and the number of neurons in the hidden layer
    +    in_out_neurons = 1
    +    hidden_neurons = 250
    +    # Input Layer
    +    inp = Input(batch_shape=(batch_size, 
    +                length_of_sequences, 
    +                in_out_neurons)) 
    +    # Hidden layers (in this case they are LSTM layers instead if SimpleRNN layers)
    +    rnn= LSTM(hidden_neurons, 
    +                    return_sequences=True,
    +                    stateful = stateful,
    +                    name="RNN", use_bias=True, activation='tanh')(inp)
    +    rnn1 = LSTM(hidden_neurons, 
    +                    return_sequences=False,
    +                    stateful = stateful,
    +                    name="RNN1", use_bias=True, activation='tanh')(rnn)
    +    # Output layer
    +    dens = Dense(in_out_neurons,name="dense")(rnn1)
    +    # Define the midel
    +    model = Model(inputs=[inp],outputs=[dens])
    +    # Compile the model
    +    model.compile(loss='mean_squared_error', optimizer='adam')  
    +    # Return the model
    +    return model
    +
    +def dnn2_gru2(length_of_sequences, batch_size = None, stateful = False):
    +    """
    +        Inputs:
    +            length_of_sequences (an int): the number of y values in "x data".  This is determined
    +                when the data is formatted
    +            batch_size (an int): Default value is None.  See Keras documentation of SimpleRNN.
    +            stateful (a boolean): Default value is False.  See Keras documentation of SimpleRNN.
    +        Returns:
    +            model (a Keras model): The recurrent neural network that is built and compiled by this
    +                method
    +        Builds and compiles a recurrent neural network with four hidden layers (two dense followed by
    +        two GRU layers) and returns the model.
    +    """    
    +    # Number of neurons on the input/output layers and hidden layers
    +    in_out_neurons = 1
    +    hidden_neurons = 250
    +    # Input layer
    +    inp = Input(batch_shape=(batch_size, 
    +                length_of_sequences, 
    +                in_out_neurons)) 
    +    # Hidden Dense (feedforward) layers
    +    dnn = Dense(hidden_neurons/2, activation='relu', name='dnn')(inp)
    +    dnn1 = Dense(hidden_neurons/2, activation='relu', name='dnn1')(dnn)
    +    # Hidden GRU layers
    +    rnn1 = GRU(hidden_neurons, 
    +                    return_sequences=True,
    +                    stateful = stateful,
    +                    name="RNN1", use_bias=True)(dnn1)
    +    rnn = GRU(hidden_neurons, 
    +                    return_sequences=False,
    +                    stateful = stateful,
    +                    name="RNN", use_bias=True)(rnn1)
    +    # Output layer
    +    dens = Dense(in_out_neurons,name="dense")(rnn)
    +    # Define the model
    +    model = Model(inputs=[inp],outputs=[dens])
    +    # Compile the mdoel
    +    model.compile(loss='mean_squared_error', optimizer='adam')  
    +    # Return the model
    +    return model
    +
    +# Check to make sure the data set is complete
    +assert len(X_tot) == len(y_tot)
    +
    +# This is the number of points that will be used in as the training data
    +dim=12
    +
    +# Separate the training data from the whole data set
    +X_train = X_tot[:dim]
    +y_train = y_tot[:dim]
    +
    +
    +# Generate the training data for the RNN, using a sequence of 2
    +rnn_input, rnn_training = format_data(y_train, 2)
    +
    +
    +# Create a recurrent neural network in Keras and produce a summary of the 
    +# machine learning model
    +# Change the method name to reflect which network you want to use
    +model = dnn2_gru2(length_of_sequences = 2)
    +model.summary()
    +
    +# Start the timer.  Want to time training+testing
    +start = timer()
    +# Fit the model using the training data genenerated above using 150 training iterations and a 5%
    +# validation split.  Setting verbose to True prints information about each training iteration.
    +hist = model.fit(rnn_input, rnn_training, batch_size=None, epochs=150, 
    +                 verbose=True,validation_split=0.05)
    +
    +
    +# This section plots the training loss and the validation loss as a function of training iteration.
    +# This is not required for analyzing the couple cluster data but can help determine if the network is
    +# being overtrained.
    +for label in ["loss","val_loss"]:
    +    plt.plot(hist.history[label],label=label)
    +
    +plt.ylabel("loss")
    +plt.xlabel("epoch")
    +plt.title("The final validation loss: {}".format(hist.history["val_loss"][-1]))
    +plt.legend()
    +plt.show()
    +
    +# Use the trained neural network to predict more points of the data set
    +test_rnn(X_tot, y_tot, X_tot[0], X_tot[dim-1])
    +# Stop the timer and calculate the total time needed.
    +end = timer()
    +print('Time: ', end-start)
    +
    +
    +# ### Training Recurrent Neural Networks in the Standard Way (i.e. learning the relationship between the X and Y data)
    +# 
    +# Finally, comparing the performace of a recurrent neural network using the standard data formatting to the performance of the network with time sequence data formatting shows the benefit of this type of data formatting with extrapolation.
    +
    +# Check to make sure the data set is complete
    +assert len(X_tot) == len(y_tot)
    +
    +# This is the number of points that will be used in as the training data
    +dim=12
    +
    +# Separate the training data from the whole data set
    +X_train = X_tot[:dim]
    +y_train = y_tot[:dim]
    +
    +# Reshape the data for Keras specifications
    +X_train = X_train.reshape((dim, 1))
    +y_train = y_train.reshape((dim, 1))
    +
    +
    +# Create a recurrent neural network in Keras and produce a summary of the 
    +# machine learning model
    +# Set the sequence length to 1 for regular data formatting 
    +model = rnn(length_of_sequences = 1)
    +model.summary()
    +
    +# Start the timer.  Want to time training+testing
    +start = timer()
    +# Fit the model using the training data genenerated above using 150 training iterations and a 5%
    +# validation split.  Setting verbose to True prints information about each training iteration.
    +hist = model.fit(X_train, y_train, batch_size=None, epochs=150, 
    +                 verbose=True,validation_split=0.05)
    +
    +
    +# This section plots the training loss and the validation loss as a function of training iteration.
    +# This is not required for analyzing the couple cluster data but can help determine if the network is
    +# being overtrained.
    +for label in ["loss","val_loss"]:
    +    plt.plot(hist.history[label],label=label)
    +
    +plt.ylabel("loss")
    +plt.xlabel("epoch")
    +plt.title("The final validation loss: {}".format(hist.history["val_loss"][-1]))
    +plt.legend()
    +plt.show()
    +
    +# Use the trained neural network to predict the remaining data points
    +X_pred = X_tot[dim:]
    +X_pred = X_pred.reshape((len(X_pred), 1))
    +y_model = model.predict(X_pred)
    +y_pred = np.concatenate((y_tot[:dim], y_model.flatten()))
    +
    +# Plot the known data set and the predicted data set.  The red box represents the region that was used
    +# for the training data.
    +fig, ax = plt.subplots()
    +ax.plot(X_tot, y_tot, label="true", linewidth=3)
    +ax.plot(X_tot, y_pred, 'g-.',label="predicted", linewidth=4)
    +ax.legend()
    +# Created a red region to represent the points used in the training data.
    +ax.axvspan(X_tot[0], X_tot[dim], alpha=0.25, color='red')
    +plt.show()
    +
    +# Stop the timer and calculate the total time needed.
    +end = timer()
    +print('Time: ', end-start)
    +
    +
    +
    +
    +
    Model: "functional_5"
    +_________________________________________________________________
    +Layer (type)                 Output Shape              Param #   
    +=================================================================
    +input_3 (InputLayer)         [(None, 2, 1)]            0         
    +_________________________________________________________________
    +dnn (Dense)                  (None, 2, 125)            250       
    +_________________________________________________________________
    +dnn1 (Dense)                 (None, 2, 125)            15750     
    +_________________________________________________________________
    +RNN1 (GRU)                   (None, 2, 250)            282750    
    +_________________________________________________________________
    +RNN (GRU)                    (None, 250)               376500    
    +_________________________________________________________________
    +dense (Dense)                (None, 1)                 251       
    +=================================================================
    +Total params: 675,501
    +Trainable params: 675,501
    +Non-trainable params: 0
    +_________________________________________________________________
    +Epoch 1/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.2339
    +
    +
    +
    
    +1/1 [==============================] - 1s 653ms/step - loss: 0.2339 - val_loss: 0.5383
    +
    +
    +
    Epoch 2/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.1652
    +
    +
    +
    
    +1/1 [==============================] - 0s 19ms/step - loss: 0.1652 - val_loss: 0.3519
    +
    +
    +
    Epoch 3/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.1008
    +
    +
    +
    
    +1/1 [==============================] - 0s 19ms/step - loss: 0.1008 - val_loss: 0.1726
    +
    +
    +
    Epoch 4/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0430
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0430 - val_loss: 0.0348
    +
    +
    +
    Epoch 5/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0070
    +
    +
    +
    
    +1/1 [==============================] - 0s 20ms/step - loss: 0.0070 - val_loss: 0.0070
    +
    +
    +
    Epoch 6/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0194
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0194 - val_loss: 0.0534
    +
    +
    +
    Epoch 7/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0503
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0503 - val_loss: 0.0415
    +
    +
    +
    Epoch 8/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0430
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0430 - val_loss: 0.0088
    +
    +
    +
    Epoch 9/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0204
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0204 - val_loss: 0.0014
    +
    +
    +
    Epoch 10/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0061
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0061 - val_loss: 0.0239
    +
    +
    +
    Epoch 11/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0052
    +
    +
    +
    
    +1/1 [==============================] - 0s 19ms/step - loss: 0.0052 - val_loss: 0.0584
    +
    +
    +
    Epoch 12/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0120
    +
    +
    +
    
    +1/1 [==============================] - 0s 19ms/step - loss: 0.0120 - val_loss: 0.0860
    +
    +
    +
    Epoch 13/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0191
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0191 - val_loss: 0.0977
    +
    +
    +
    Epoch 14/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0225
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0225 - val_loss: 0.0928
    +
    +
    +
    Epoch 15/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0213
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0213 - val_loss: 0.0754
    +
    +
    +
    Epoch 16/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0166
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0166 - val_loss: 0.0516
    +
    +
    +
    Epoch 17/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0106
    +
    +
    +
    
    +1/1 [==============================] - 0s 19ms/step - loss: 0.0106 - val_loss: 0.0278
    +
    +
    +
    Epoch 18/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0056
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0056 - val_loss: 0.0099
    +
    +
    +
    Epoch 19/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0032
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0032 - val_loss: 0.0011
    +
    +
    +
    Epoch 20/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0042
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0042 - val_loss: 4.2492e-04
    +
    +
    +
    Epoch 21/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0072
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0072 - val_loss: 0.0028
    +
    +
    +
    Epoch 22/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0096
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0096 - val_loss: 0.0035
    +
    +
    +
    Epoch 23/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0094
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0094 - val_loss: 0.0016
    +
    +
    +
    Epoch 24/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0068
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0068 - val_loss: 2.1770e-05
    +
    +
    +
    Epoch 25/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0037
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0037 - val_loss: 0.0014
    +
    +
    +
    Epoch 26/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0017
    +
    +
    +
    
    +1/1 [==============================] - 0s 20ms/step - loss: 0.0017 - val_loss: 0.0061
    +
    +
    +
    Epoch 27/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0015
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0015 - val_loss: 0.0121
    +
    +
    +
    Epoch 28/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0025
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0025 - val_loss: 0.0166
    +
    +
    +
    Epoch 29/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0037
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0037 - val_loss: 0.0177
    +
    +
    +
    Epoch 30/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0042
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0042 - val_loss: 0.0151
    +
    +
    +
    Epoch 31/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0037
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0037 - val_loss: 0.0101
    +
    +
    +
    Epoch 32/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0024
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0024 - val_loss: 0.0046
    +
    +
    +
    Epoch 33/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0011
    +
    +
    +
    
    +1/1 [==============================] - 0s 19ms/step - loss: 0.0011 - val_loss: 8.8886e-04
    +
    +
    +
    Epoch 34/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 2.7391e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 2.7391e-04 - val_loss: 6.9638e-05
    +
    +
    +
    Epoch 35/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 3.0805e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 3.0805e-04 - val_loss: 0.0016
    +
    +
    +
    Epoch 36/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 9.6065e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 9.6065e-04 - val_loss: 0.0037
    +
    +
    +
    Epoch 37/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0016
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0016 - val_loss: 0.0045
    +
    +
    +
    Epoch 38/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0016
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0016 - val_loss: 0.0035
    +
    +
    +
    Epoch 39/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0011
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0011 - val_loss: 0.0016
    +
    +
    +
    Epoch 40/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 3.6501e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 3.6501e-04 - val_loss: 2.5101e-04
    +
    +
    +
    Epoch 41/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 5.2387e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 19ms/step - loss: 5.2387e-05 - val_loss: 4.9809e-05
    +
    +
    +
    Epoch 42/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 2.7319e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 19ms/step - loss: 2.7319e-04 - val_loss: 5.0112e-04
    +
    +
    +
    Epoch 43/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 7.0581e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 7.0581e-04 - val_loss: 7.5034e-04
    +
    +
    +
    Epoch 44/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 9.3238e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 19ms/step - loss: 9.3238e-04 - val_loss: 5.0648e-04
    +
    +
    +
    Epoch 45/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 8.0866e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 8.0866e-04 - val_loss: 9.4408e-05
    +
    +
    +
    Epoch 46/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 4.7288e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 4.7288e-04 - val_loss: 5.9254e-05
    +
    +
    +
    Epoch 47/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 1.8597e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 20ms/step - loss: 1.8597e-04 - val_loss: 6.7079e-04
    +
    +
    +
    Epoch 48/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 1.2584e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 20ms/step - loss: 1.2584e-04 - val_loss: 0.0017
    +
    +
    +
    Epoch 49/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 2.6867e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 2.6867e-04 - val_loss: 0.0024
    +
    +
    +
    Epoch 50/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 4.3826e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 19ms/step - loss: 4.3826e-04 - val_loss: 0.0025
    +
    +
    +
    Epoch 51/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 4.6733e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 4.6733e-04 - val_loss: 0.0018
    +
    +
    +
    Epoch 52/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 3.3438e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 3.3438e-04 - val_loss: 9.4701e-04
    +
    +
    +
    Epoch 53/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 1.5339e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 1.5339e-04 - val_loss: 2.6460e-04
    +
    +
    +
    Epoch 54/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 5.4331e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 5.4331e-05 - val_loss: 6.5156e-06
    +
    +
    +
    Epoch 55/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 7.7712e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 7.7712e-05 - val_loss: 6.1830e-05
    +
    +
    +
    Epoch 56/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 1.6479e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 1.6479e-04 - val_loss: 1.8163e-04
    +
    +
    +
    Epoch 57/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 2.2423e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 2.2423e-04 - val_loss: 1.9299e-04
    +
    +
    +
    Epoch 58/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 2.0515e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 19ms/step - loss: 2.0515e-04 - val_loss: 9.4929e-05
    +
    +
    +
    Epoch 59/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 1.2535e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 1.2535e-04 - val_loss: 6.2223e-06
    +
    +
    +
    Epoch 60/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 4.6826e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 4.6826e-05 - val_loss: 3.4402e-05
    +
    +
    +
    Epoch 61/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 2.2165e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 2.2165e-05 - val_loss: 1.7489e-04
    +
    +
    +
    Epoch 62/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 5.5691e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 5.5691e-05 - val_loss: 3.1733e-04
    +
    +
    +
    Epoch 63/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 1.0595e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 1.0595e-04 - val_loss: 3.4700e-04
    +
    +
    +
    Epoch 64/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 1.2525e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 1.2525e-04 - val_loss: 2.4500e-04
    +
    +
    +
    Epoch 65/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 9.9924e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 9.9924e-05 - val_loss: 9.6135e-05
    +
    +
    +
    Epoch 66/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 5.5901e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 5.5901e-05 - val_loss: 6.8225e-06
    +
    +
    +
    Epoch 67/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 2.9911e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 2.9911e-05 - val_loss: 1.7879e-05
    +
    +
    +
    Epoch 68/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 3.7141e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 3.7141e-05 - val_loss: 8.5801e-05
    +
    +
    +
    Epoch 69/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 6.3071e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 6.3071e-05 - val_loss: 1.3386e-04
    +
    +
    +
    Epoch 70/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 8.0889e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 8.0889e-05 - val_loss: 1.1862e-04
    +
    +
    +
    Epoch 71/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 7.5159e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 20ms/step - loss: 7.5159e-05 - val_loss: 5.8102e-05
    +
    +
    +
    Epoch 72/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 5.2129e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 5.2129e-05 - val_loss: 7.2266e-06
    +
    +
    +
    Epoch 73/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 3.1149e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 20ms/step - loss: 3.1149e-05 - val_loss: 7.1946e-06
    +
    +
    +
    Epoch 74/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 2.6803e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 20ms/step - loss: 2.6803e-05 - val_loss: 5.2427e-05
    +
    +
    +
    Epoch 75/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 3.7385e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 24ms/step - loss: 3.7385e-05 - val_loss: 1.0039e-04
    +
    +
    +
    Epoch 76/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 4.8700e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 4.8700e-05 - val_loss: 1.1159e-04
    +
    +
    +
    Epoch 77/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 4.8312e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 20ms/step - loss: 4.8312e-05 - val_loss: 8.1357e-05
    +
    +
    +
    Epoch 78/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 3.6325e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 21ms/step - loss: 3.6325e-05 - val_loss: 3.6670e-05
    +
    +
    +
    Epoch 79/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 2.3281e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 19ms/step - loss: 2.3281e-05 - val_loss: 6.9527e-06
    +
    +
    +
    Epoch 80/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 1.9011e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 1.9011e-05 - val_loss: 6.2134e-08
    +
    +
    +
    Epoch 81/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 2.4047e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 20ms/step - loss: 2.4047e-05 - val_loss: 3.3985e-06
    +
    +
    +
    Epoch 82/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 3.0829e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 25ms/step - loss: 3.0829e-05 - val_loss: 3.1615e-06
    +
    +
    +
    Epoch 83/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 3.1812e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 20ms/step - loss: 3.1812e-05 - val_loss: 1.7273e-08
    +
    +
    +
    Epoch 84/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 2.6124e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 19ms/step - loss: 2.6124e-05 - val_loss: 6.8793e-06
    +
    +
    +
    Epoch 85/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 1.9199e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 19ms/step - loss: 1.9199e-05 - val_loss: 3.3150e-05
    +
    +
    +
    Epoch 86/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 1.6832e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 1.6832e-05 - val_loss: 7.2050e-05
    +
    +
    +
    Epoch 87/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 1.9787e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 19ms/step - loss: 1.9787e-05 - val_loss: 1.0364e-04
    +
    +
    +
    Epoch 88/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 2.3840e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 19ms/step - loss: 2.3840e-05 - val_loss: 1.1049e-04
    +
    +
    +
    Epoch 89/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 2.4491e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 24ms/step - loss: 2.4491e-05 - val_loss: 9.1017e-05
    +
    +
    +
    Epoch 90/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 2.1253e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 20ms/step - loss: 2.1253e-05 - val_loss: 5.8702e-05
    +
    +
    +
    Epoch 91/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 1.7418e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 20ms/step - loss: 1.7418e-05 - val_loss: 2.9923e-05
    +
    +
    +
    Epoch 92/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 1.6259e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 19ms/step - loss: 1.6259e-05 - val_loss: 1.2810e-05
    +
    +
    +
    Epoch 93/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 1.7905e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 1.7905e-05 - val_loss: 6.0232e-06
    +
    +
    +
    Epoch 94/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 1.9781e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 1.9781e-05 - val_loss: 5.3134e-06
    +
    +
    +
    Epoch 95/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 1.9548e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 19ms/step - loss: 1.9548e-05 - val_loss: 9.3216e-06
    +
    +
    +
    Epoch 96/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 1.7296e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 19ms/step - loss: 1.7296e-05 - val_loss: 1.9159e-05
    +
    +
    +
    Epoch 97/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 1.5052e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 1.5052e-05 - val_loss: 3.3857e-05
    +
    +
    +
    Epoch 98/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 1.4498e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 19ms/step - loss: 1.4498e-05 - val_loss: 4.7879e-05
    +
    +
    +
    Epoch 99/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 1.5386e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 19ms/step - loss: 1.5386e-05 - val_loss: 5.4022e-05
    +
    +
    +
    Epoch 100/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 1.6115e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 1.6115e-05 - val_loss: 4.8949e-05
    +
    +
    +
    Epoch 101/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 1.5549e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 19ms/step - loss: 1.5549e-05 - val_loss: 3.5722e-05
    +
    +
    +
    Epoch 102/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 1.4079e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 1.4079e-05 - val_loss: 2.1059e-05
    +
    +
    +
    Epoch 103/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 1.2963e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 20ms/step - loss: 1.2963e-05 - val_loss: 1.0307e-05
    +
    +
    +
    Epoch 104/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 1.2911e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 19ms/step - loss: 1.2911e-05 - val_loss: 4.7690e-06
    +
    +
    +
    Epoch 105/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 1.3470e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 1.3470e-05 - val_loss: 2.9656e-06
    +
    +
    +
    Epoch 106/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 1.3678e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 20ms/step - loss: 1.3678e-05 - val_loss: 3.4672e-06
    +
    +
    +
    Epoch 107/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 1.3126e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 1.3126e-05 - val_loss: 6.0939e-06
    +
    +
    +
    Epoch 108/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 1.2266e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 20ms/step - loss: 1.2266e-05 - val_loss: 1.0808e-05
    +
    +
    +
    Epoch 109/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 1.1796e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 19ms/step - loss: 1.1796e-05 - val_loss: 1.6232e-05
    +
    +
    +
    Epoch 110/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 1.1902e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 22ms/step - loss: 1.1902e-05 - val_loss: 1.9843e-05
    +
    +
    +
    Epoch 111/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 1.2143e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 1.2143e-05 - val_loss: 1.9755e-05
    +
    +
    +
    Epoch 112/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 1.2022e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 1.2022e-05 - val_loss: 1.6197e-05
    +
    +
    +
    Epoch 113/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 1.1506e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 20ms/step - loss: 1.1506e-05 - val_loss: 1.1183e-05
    +
    +
    +
    Epoch 114/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 1.0982e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 1.0982e-05 - val_loss: 6.8771e-06
    +
    +
    +
    Epoch 115/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 1.0778e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 1.0778e-05 - val_loss: 4.3037e-06
    +
    +
    +
    Epoch 116/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 1.0826e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 19ms/step - loss: 1.0826e-05 - val_loss: 3.4128e-06
    +
    +
    +
    Epoch 117/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 1.0803e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 1.0803e-05 - val_loss: 3.9190e-06
    +
    +
    +
    Epoch 118/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 1.0525e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 19ms/step - loss: 1.0525e-05 - val_loss: 5.7593e-06
    +
    +
    +
    Epoch 119/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 1.0114e-05
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 1.0114e-05 - val_loss: 8.7378e-06
    +
    +
    +
    Epoch 120/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 9.8203e-06
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 9.8203e-06 - val_loss: 1.2031e-05
    +
    +
    +
    Epoch 121/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 9.7284e-06
    +
    +
    +
    
    +1/1 [==============================] - 0s 19ms/step - loss: 9.7284e-06 - val_loss: 1.4340e-05
    +
    +
    +
    Epoch 122/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 9.6966e-06
    +
    +
    +
    
    +1/1 [==============================] - 0s 19ms/step - loss: 9.6966e-06 - val_loss: 1.4696e-05
    +
    +
    +
    Epoch 123/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 9.5506e-06
    +
    +
    +
    
    +1/1 [==============================] - 0s 20ms/step - loss: 9.5506e-06 - val_loss: 1.3124e-05
    +
    +
    +
    Epoch 124/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 9.2787e-06
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 9.2787e-06 - val_loss: 1.0547e-05
    +
    +
    +
    Epoch 125/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 9.0185e-06
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 9.0185e-06 - val_loss: 8.0814e-06
    +
    +
    +
    Epoch 126/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 8.8755e-06
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 8.8755e-06 - val_loss: 6.4479e-06
    +
    +
    +
    Epoch 127/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 8.8137e-06
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 8.8137e-06 - val_loss: 5.8674e-06
    +
    +
    +
    Epoch 128/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 8.7187e-06
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 8.7187e-06 - val_loss: 6.2909e-06
    +
    +
    +
    Epoch 129/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 8.5374e-06
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 8.5374e-06 - val_loss: 7.5345e-06
    +
    +
    +
    Epoch 130/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 8.3250e-06
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 8.3250e-06 - val_loss: 9.2095e-06
    +
    +
    +
    Epoch 131/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 8.1651e-06
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 8.1651e-06 - val_loss: 1.0688e-05
    +
    +
    +
    Epoch 132/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 8.0688e-06
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 8.0688e-06 - val_loss: 1.1327e-05
    +
    +
    +
    Epoch 133/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 7.9771e-06
    +
    +
    +
    
    +1/1 [==============================] - 0s 19ms/step - loss: 7.9771e-06 - val_loss: 1.0835e-05
    +
    +
    +
    Epoch 134/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 7.8467e-06
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 7.8467e-06 - val_loss: 9.4450e-06
    +
    +
    +
    Epoch 135/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 7.6825e-06
    +
    +
    +
    
    +1/1 [==============================] - 0s 19ms/step - loss: 7.6825e-06 - val_loss: 7.7252e-06
    +
    +
    +
    Epoch 136/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 7.5362e-06
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 7.5362e-06 - val_loss: 6.2324e-06
    +
    +
    +
    Epoch 137/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 7.4299e-06
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 7.4299e-06 - val_loss: 5.2841e-06
    +
    +
    +
    Epoch 138/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 7.3370e-06
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 7.3370e-06 - val_loss: 4.9452e-06
    +
    +
    +
    Epoch 139/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 7.2211e-06
    +
    +
    +
    
    +1/1 [==============================] - 0s 19ms/step - loss: 7.2211e-06 - val_loss: 5.1307e-06
    +
    +
    +
    Epoch 140/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 7.0810e-06
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 7.0810e-06 - val_loss: 5.6509e-06
    +
    +
    +
    Epoch 141/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 6.9456e-06
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 6.9456e-06 - val_loss: 6.2259e-06
    +
    +
    +
    Epoch 142/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 6.8358e-06
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 6.8358e-06 - val_loss: 6.5445e-06
    +
    +
    +
    Epoch 143/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 6.7413e-06
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 6.7413e-06 - val_loss: 6.4017e-06
    +
    +
    +
    Epoch 144/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 6.6380e-06
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 6.6380e-06 - val_loss: 5.8084e-06
    +
    +
    +
    Epoch 145/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 6.5196e-06
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 6.5196e-06 - val_loss: 4.9715e-06
    +
    +
    +
    Epoch 146/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 6.4007e-06
    +
    +
    +
    
    +1/1 [==============================] - 0s 19ms/step - loss: 6.4007e-06 - val_loss: 4.1612e-06
    +
    +
    +
    Epoch 147/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 6.2981e-06
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 6.2981e-06 - val_loss: 3.5793e-06
    +
    +
    +
    Epoch 148/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 6.2091e-06
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 6.2091e-06 - val_loss: 3.3095e-06
    +
    +
    +
    Epoch 149/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 6.1165e-06
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 6.1165e-06 - val_loss: 3.3423e-06
    +
    +
    +
    Epoch 150/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 6.0133e-06
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 6.0133e-06 - val_loss: 3.6012e-06
    +
    +
    +_images/chapter10_11_326.png +
    MSE:  1.9124180119966666e-05
    +
    +
    +_images/chapter10_11_328.png +
    Time:  9.464447478
    +
    +
    +
    Model: "functional_7"
    +_________________________________________________________________
    +Layer (type)                 Output Shape              Param #   
    +=================================================================
    +input_4 (InputLayer)         [(None, 1, 1)]            0         
    +_________________________________________________________________
    +RNN (SimpleRNN)              (None, 200)               40400     
    +_________________________________________________________________
    +dense (Dense)                (None, 1)                 201       
    +=================================================================
    +Total params: 40,601
    +Trainable params: 40,601
    +Non-trainable params: 0
    +_________________________________________________________________
    +Epoch 1/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 1.4102
    +
    +
    +
    
    +1/1 [==============================] - 0s 154ms/step - loss: 1.4102 - val_loss: 2.1967
    +
    +
    +
    Epoch 2/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.9243
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.9243 - val_loss: 1.4521
    +
    +
    +
    Epoch 3/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.5465
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.5465 - val_loss: 0.8738
    +
    +
    +
    Epoch 4/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.2756
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.2756 - val_loss: 0.4570
    +
    +
    +
    Epoch 5/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.1066
    +
    +
    +
    
    +1/1 [==============================] - 0s 20ms/step - loss: 0.1066 - val_loss: 0.1890
    +
    +
    +
    Epoch 6/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0284
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0284 - val_loss: 0.0477
    +
    +
    +
    Epoch 7/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0229
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 0.0229 - val_loss: 0.0012
    +
    +
    +
    Epoch 8/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0654
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0654 - val_loss: 0.0122
    +
    +
    +
    Epoch 9/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.1283
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.1283 - val_loss: 0.0453
    +
    +
    +
    Epoch 10/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.1870
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.1870 - val_loss: 0.0747
    +
    +
    +
    Epoch 11/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.2252
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.2252 - val_loss: 0.0870
    +
    +
    +
    Epoch 12/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.2363
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.2363 - val_loss: 0.0801
    +
    +
    +
    Epoch 13/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.2218
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 0.2218 - val_loss: 0.0593
    +
    +
    +
    Epoch 14/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.1884
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 0.1884 - val_loss: 0.0332
    +
    +
    +
    Epoch 15/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.1445
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.1445 - val_loss: 0.0111
    +
    +
    +
    Epoch 16/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0988
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0988 - val_loss: 3.2715e-04
    +
    +
    +
    Epoch 17/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0585
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0585 - val_loss: 0.0055
    +
    +
    +
    Epoch 18/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0286
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 0.0286 - val_loss: 0.0275
    +
    +
    +
    Epoch 19/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0116
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0116 - val_loss: 0.0639
    +
    +
    +
    Epoch 20/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0072
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0072 - val_loss: 0.1091
    +
    +
    +
    Epoch 21/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0129
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 0.0129 - val_loss: 0.1561
    +
    +
    +
    Epoch 22/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0249
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 0.0249 - val_loss: 0.1975
    +
    +
    +
    Epoch 23/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0388
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0388 - val_loss: 0.2272
    +
    +
    +
    Epoch 24/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0505
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0505 - val_loss: 0.2413
    +
    +
    +
    Epoch 25/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0572
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0572 - val_loss: 0.2389
    +
    +
    +
    Epoch 26/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0578
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0578 - val_loss: 0.2215
    +
    +
    +
    Epoch 27/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0526
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0526 - val_loss: 0.1927
    +
    +
    +
    Epoch 28/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0430
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0430 - val_loss: 0.1571
    +
    +
    +
    Epoch 29/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0313
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0313 - val_loss: 0.1197
    +
    +
    +
    Epoch 30/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0198
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0198 - val_loss: 0.0845
    +
    +
    +
    Epoch 31/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0105
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0105 - val_loss: 0.0548
    +
    +
    +
    Epoch 32/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0045
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0045 - val_loss: 0.0320
    +
    +
    +
    Epoch 33/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0022
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0022 - val_loss: 0.0165
    +
    +
    +
    Epoch 34/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0032
    +
    +
    +
    
    +1/1 [==============================] - 0s 22ms/step - loss: 0.0032 - val_loss: 0.0071
    +
    +
    +
    Epoch 35/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0065
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0065 - val_loss: 0.0024
    +
    +
    +
    Epoch 36/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0105
    +
    +
    +
    
    +1/1 [==============================] - 0s 19ms/step - loss: 0.0105 - val_loss: 5.8779e-04
    +
    +
    +
    Epoch 37/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0140
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0140 - val_loss: 9.0393e-05
    +
    +
    +
    Epoch 38/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0161
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0161 - val_loss: 2.5875e-05
    +
    +
    +
    Epoch 39/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0163
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0163 - val_loss: 1.0453e-04
    +
    +
    +
    Epoch 40/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0146
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0146 - val_loss: 5.5861e-04
    +
    +
    +
    Epoch 41/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0117
    +
    +
    +
    
    +1/1 [==============================] - 0s 19ms/step - loss: 0.0117 - val_loss: 0.0019
    +
    +
    +
    Epoch 42/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0083
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 0.0083 - val_loss: 0.0047
    +
    +
    +
    Epoch 43/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0050
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0050 - val_loss: 0.0091
    +
    +
    +
    Epoch 44/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0027
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0027 - val_loss: 0.0151
    +
    +
    +
    Epoch 45/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0015
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0015 - val_loss: 0.0221
    +
    +
    +
    Epoch 46/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0015
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0015 - val_loss: 0.0294
    +
    +
    +
    Epoch 47/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0023
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0023 - val_loss: 0.0358
    +
    +
    +
    Epoch 48/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0036
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0036 - val_loss: 0.0407
    +
    +
    +
    Epoch 49/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0048
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0048 - val_loss: 0.0432
    +
    +
    +
    Epoch 50/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0056
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0056 - val_loss: 0.0432
    +
    +
    +
    Epoch 51/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0057
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0057 - val_loss: 0.0409
    +
    +
    +
    Epoch 52/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0053
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0053 - val_loss: 0.0368
    +
    +
    +
    Epoch 53/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0043
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0043 - val_loss: 0.0315
    +
    +
    +
    Epoch 54/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0032
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0032 - val_loss: 0.0258
    +
    +
    +
    Epoch 55/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0023
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0023 - val_loss: 0.0203
    +
    +
    +
    Epoch 56/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0016
    +
    +
    +
    
    +1/1 [==============================] - 0s 19ms/step - loss: 0.0016 - val_loss: 0.0156
    +
    +
    +
    Epoch 57/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0013
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0013 - val_loss: 0.0118
    +
    +
    +
    Epoch 58/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0014
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0014 - val_loss: 0.0089
    +
    +
    +
    Epoch 59/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0017
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0017 - val_loss: 0.0071
    +
    +
    +
    Epoch 60/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0022
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0022 - val_loss: 0.0060
    +
    +
    +
    Epoch 61/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0025
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0025 - val_loss: 0.0055
    +
    +
    +
    Epoch 62/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0026
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0026 - val_loss: 0.0057
    +
    +
    +
    Epoch 63/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0026
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0026 - val_loss: 0.0064
    +
    +
    +
    Epoch 64/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0023
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 0.0023 - val_loss: 0.0076
    +
    +
    +
    Epoch 65/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0019
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0019 - val_loss: 0.0093
    +
    +
    +
    Epoch 66/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0016
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 0.0016 - val_loss: 0.0113
    +
    +
    +
    Epoch 67/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0013
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0013 - val_loss: 0.0136
    +
    +
    +
    Epoch 68/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0012
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0012 - val_loss: 0.0160
    +
    +
    +
    Epoch 69/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0012
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0012 - val_loss: 0.0181
    +
    +
    +
    Epoch 70/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0013
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 0.0013 - val_loss: 0.0198
    +
    +
    +
    Epoch 71/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0014
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0014 - val_loss: 0.0209
    +
    +
    +
    Epoch 72/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0015
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0015 - val_loss: 0.0213
    +
    +
    +
    Epoch 73/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0016
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 0.0016 - val_loss: 0.0210
    +
    +
    +
    Epoch 74/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0015
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0015 - val_loss: 0.0202
    +
    +
    +
    Epoch 75/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0014
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 0.0014 - val_loss: 0.0189
    +
    +
    +
    Epoch 76/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0013
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0013 - val_loss: 0.0174
    +
    +
    +
    Epoch 77/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0011
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0011 - val_loss: 0.0158
    +
    +
    +
    Epoch 78/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 0.0011
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0011 - val_loss: 0.0143
    +
    +
    +
    Epoch 79/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0010
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0010 - val_loss: 0.0130
    +
    +
    +
    Epoch 80/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0010
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0010 - val_loss: 0.0120
    +
    +
    +
    Epoch 81/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0011
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0011 - val_loss: 0.0114
    +
    +
    +
    Epoch 82/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0011
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0011 - val_loss: 0.0110
    +
    +
    +
    Epoch 83/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0011
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0011 - val_loss: 0.0110
    +
    +
    +
    Epoch 84/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0011
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0011 - val_loss: 0.0113
    +
    +
    +
    Epoch 85/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0011
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0011 - val_loss: 0.0118
    +
    +
    +
    Epoch 86/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 0.0011
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 0.0011 - val_loss: 0.0125
    +
    +
    +
    Epoch 87/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 9.9906e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 9.9906e-04 - val_loss: 0.0133
    +
    +
    +
    Epoch 88/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 9.5899e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 9.5899e-04 - val_loss: 0.0142
    +
    +
    +
    Epoch 89/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 9.3780e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 9.3780e-04 - val_loss: 0.0150
    +
    +
    +
    Epoch 90/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 9.3488e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 9.3488e-04 - val_loss: 0.0156
    +
    +
    +
    Epoch 91/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 9.4357e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 9.4357e-04 - val_loss: 0.0161
    +
    +
    +
    Epoch 92/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 9.5451e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 9.5451e-04 - val_loss: 0.0163
    +
    +
    +
    Epoch 93/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 9.5936e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 9.5936e-04 - val_loss: 0.0163
    +
    +
    +
    Epoch 94/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 9.5352e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 9.5352e-04 - val_loss: 0.0161
    +
    +
    +
    Epoch 95/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 9.3717e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 9.3717e-04 - val_loss: 0.0156
    +
    +
    +
    Epoch 96/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 9.1432e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 9.1432e-04 - val_loss: 0.0150
    +
    +
    +
    Epoch 97/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 8.9074e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 8.9074e-04 - val_loss: 0.0144
    +
    +
    +
    Epoch 98/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 8.7159e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 8.7159e-04 - val_loss: 0.0138
    +
    +
    +
    Epoch 99/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 8.5960e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 8.5960e-04 - val_loss: 0.0132
    +
    +
    +
    Epoch 100/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 8.5449e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 8.5449e-04 - val_loss: 0.0127
    +
    +
    +
    Epoch 101/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 8.5362e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 8.5362e-04 - val_loss: 0.0124
    +
    +
    +
    Epoch 102/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 8.5331e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 8.5331e-04 - val_loss: 0.0122
    +
    +
    +
    Epoch 103/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 8.5041e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 8.5041e-04 - val_loss: 0.0121
    +
    +
    +
    Epoch 104/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 8.4335e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 8.4335e-04 - val_loss: 0.0121
    +
    +
    +
    Epoch 105/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 8.3246e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 8.3246e-04 - val_loss: 0.0122
    +
    +
    +
    Epoch 106/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 8.1954e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 8.1954e-04 - val_loss: 0.0124
    +
    +
    +
    Epoch 107/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 8.0688e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 8.0688e-04 - val_loss: 0.0127
    +
    +
    +
    Epoch 108/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 7.9636e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 7.9636e-04 - val_loss: 0.0129
    +
    +
    +
    Epoch 109/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 7.8874e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 7.8874e-04 - val_loss: 0.0131
    +
    +
    +
    Epoch 110/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 7.8361e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 7.8361e-04 - val_loss: 0.0132
    +
    +
    +
    Epoch 111/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 7.7972e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 7.7972e-04 - val_loss: 0.0133
    +
    +
    +
    Epoch 112/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 7.7562e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 7.7562e-04 - val_loss: 0.0132
    +
    +
    +
    Epoch 113/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 7.7023e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 7.7023e-04 - val_loss: 0.0131
    +
    +
    +
    Epoch 114/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 7.6324e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 7.6324e-04 - val_loss: 0.0129
    +
    +
    +
    Epoch 115/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 7.5506e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 7.5506e-04 - val_loss: 0.0126
    +
    +
    +
    Epoch 116/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 7.4655e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 7.4655e-04 - val_loss: 0.0123
    +
    +
    +
    Epoch 117/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 7.3860e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 7.3860e-04 - val_loss: 0.0121
    +
    +
    +
    Epoch 118/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 7.3174e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 7.3174e-04 - val_loss: 0.0118
    +
    +
    +
    Epoch 119/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 7.2605e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 7.2605e-04 - val_loss: 0.0115
    +
    +
    +
    Epoch 120/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 7.2114e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 19ms/step - loss: 7.2114e-04 - val_loss: 0.0114
    +
    +
    +
    Epoch 121/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 7.1643e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 7.1643e-04 - val_loss: 0.0112
    +
    +
    +
    Epoch 122/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 7.1139e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 7.1139e-04 - val_loss: 0.0111
    +
    +
    +
    Epoch 123/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 7.0577e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 7.0577e-04 - val_loss: 0.0111
    +
    +
    +
    Epoch 124/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 6.9964e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 19ms/step - loss: 6.9964e-04 - val_loss: 0.0111
    +
    +
    +
    Epoch 125/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 6.9330e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 6.9330e-04 - val_loss: 0.0112
    +
    +
    +
    Epoch 126/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 6.8710e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 6.8710e-04 - val_loss: 0.0112
    +
    +
    +
    Epoch 127/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 6.8134e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 6.8134e-04 - val_loss: 0.0112
    +
    +
    +
    Epoch 128/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 6.7611e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 6.7611e-04 - val_loss: 0.0113
    +
    +
    +
    Epoch 129/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 6.7125e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 6.7125e-04 - val_loss: 0.0113
    +
    +
    +
    Epoch 130/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 6.6659e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 6.6659e-04 - val_loss: 0.0112
    +
    +
    +
    Epoch 131/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 6.6186e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 6.6186e-04 - val_loss: 0.0112
    +
    +
    +
    Epoch 132/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 6.5694e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 6.5694e-04 - val_loss: 0.0111
    +
    +
    +
    Epoch 133/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 6.5184e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 6.5184e-04 - val_loss: 0.0110
    +
    +
    +
    Epoch 134/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 6.4666e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 19ms/step - loss: 6.4666e-04 - val_loss: 0.0108
    +
    +
    +
    Epoch 135/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 6.4156e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 6.4156e-04 - val_loss: 0.0107
    +
    +
    +
    Epoch 136/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 6.3666e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 6.3666e-04 - val_loss: 0.0105
    +
    +
    +
    Epoch 137/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 6.3201e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 6.3201e-04 - val_loss: 0.0104
    +
    +
    +
    Epoch 138/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 6.2756e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 6.2756e-04 - val_loss: 0.0103
    +
    +
    +
    Epoch 139/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 6.2321e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 6.2321e-04 - val_loss: 0.0102
    +
    +
    +
    Epoch 140/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 6.1888e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 6.1888e-04 - val_loss: 0.0102
    +
    +
    +
    Epoch 141/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 6.1449e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 6.1449e-04 - val_loss: 0.0101
    +
    +
    +
    Epoch 142/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 6.1007e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 6.1007e-04 - val_loss: 0.0101
    +
    +
    +
    Epoch 143/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 6.0565e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 6.0565e-04 - val_loss: 0.0101
    +
    +
    +
    Epoch 144/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 6.0129e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 18ms/step - loss: 6.0129e-04 - val_loss: 0.0101
    +
    +
    +
    Epoch 145/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 5.9706e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 5.9706e-04 - val_loss: 0.0100
    +
    +
    +
    Epoch 146/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 5.9295e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 5.9295e-04 - val_loss: 0.0100
    +
    +
    +
    Epoch 147/150
    +
    +1/1 [==============================] - ETA: 0s - loss: 5.8894e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 16ms/step - loss: 5.8894e-04 - val_loss: 0.0100
    +
    +
    +
    Epoch 148/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 5.8501e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 5.8501e-04 - val_loss: 0.0100
    +
    +
    +
    Epoch 149/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 5.8111e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 17ms/step - loss: 5.8111e-04 - val_loss: 0.0099
    +
    +
    +
    Epoch 150/150
    +
    +
    +
    1/1 [==============================] - ETA: 0s - loss: 5.7722e-04
    +
    +
    +
    
    +1/1 [==============================] - 0s 19ms/step - loss: 5.7722e-04 - val_loss: 0.0098
    +
    +
    +_images/chapter10_11_687.png +_images/chapter10_11_688.png +
    Time:  4.337630193999999
    +
    +
    +
    +
    +
    +
    +
    +

    10. Solving ODEs with Deep Learning

    +

    The Universal Approximation Theorem states that a neural network can +approximate any function at a single hidden layer along with one input +and output layer to any given precision.

    +
    +

    10.1. Ordinary Differential Equations

    +

    An ordinary differential equation (ODE) is an equation involving functions having one variable.

    +

    In general, an ordinary differential equation looks like

    + +
    +
    +\[ +\begin{equation} \label{ode} \tag{1} +f\left(x, \, g(x), \, g'(x), \, g''(x), \, \dots \, , \, g^{(n)}(x)\right) = 0 +\end{equation} +\]
    +

    where \(g(x)\) is the function to find, and \(g^{(n)}(x)\) is the \(n\)-th derivative of \(g(x)\).

    +

    The \(f\left(x, g(x), g'(x), g''(x), \, \dots \, , g^{(n)}(x)\right)\) is just a way to write that there is an expression involving \(x\) and \(g(x), \ g'(x), \ g''(x), \, \dots \, , \text{ and } g^{(n)}(x)\) on the left side of the equality sign in (1). +The highest order of derivative, that is the value of \(n\), determines to the order of the equation. +The equation is referred to as a \(n\)-th order ODE. +Along with (1), some additional conditions of the function \(g(x)\) are typically given +for the solution to be unique.

    +
    +
    +

    10.2. The trial solution

    +

    Let the trial solution \(g_t(x)\) be

    + +
    +
    +\[ +\begin{equation} + g_t(x) = h_1(x) + h_2(x,N(x,P)) +\label{_auto1} \tag{2} +\end{equation} +\]
    +

    where \(h_1(x)\) is a function that makes \(g_t(x)\) satisfy a given set +of conditions, \(N(x,P)\) a neural network with weights and biases +described by \(P\) and \(h_2(x, N(x,P))\) some expression involving the +neural network. The role of the function \(h_2(x, N(x,P))\), is to +ensure that the output from \(N(x,P)\) is zero when \(g_t(x)\) is +evaluated at the values of \(x\) where the given conditions must be +satisfied. The function \(h_1(x)\) should alone make \(g_t(x)\) satisfy +the conditions.

    +

    But what about the network \(N(x,P)\)?

    +

    As described previously, an optimization method could be used to minimize the parameters of a neural network, that being its weights and biases, through backward propagation.

    +
    +
    +

    10.3. Minimization process

    +

    For the minimization to be defined, we need to have a cost function at hand to minimize.

    +

    It is given that \(f\left(x, \, g(x), \, g'(x), \, g''(x), \, \dots \, , \, g^{(n)}(x)\right)\) should be equal to zero in (1). +We can choose to consider the mean squared error as the cost function for an input \(x\). +Since we are looking at one input, the cost function is just \(f\) squared. +The cost function \(c\left(x, P \right)\) can therefore be expressed as

    +
    +\[ +C\left(x, P\right) = \big(f\left(x, \, g(x), \, g'(x), \, g''(x), \, \dots \, , \, g^{(n)}(x)\right)\big)^2 +\]
    +

    If \(N\) inputs are given as a vector \(\boldsymbol{x}\) with elements \(x_i\) for \(i = 1,\dots,N\), +the cost function becomes

    + +
    +
    +\[ +\begin{equation} \label{cost} \tag{3} + C\left(\boldsymbol{x}, P\right) = \frac{1}{N} \sum_{i=1}^N \big(f\left(x_i, \, g(x_i), \, g'(x_i), \, g''(x_i), \, \dots \, , \, g^{(n)}(x_i)\right)\big)^2 +\end{equation} +\]
    +

    The neural net should then find the parameters \(P\) that minimizes the cost function in +(3) for a set of \(N\) training samples \(x_i\).

    +
    +
    +

    10.4. Minimizing the cost function using gradient descent and automatic differentiation

    +

    To perform the minimization using gradient descent, the gradient of \(C\left(\boldsymbol{x}, P\right)\) is needed. +It might happen so that finding an analytical expression of the gradient of \(C(\boldsymbol{x}, P)\) from (3) gets too messy, depending on which cost function one desires to use.

    +

    Luckily, there exists libraries that makes the job for us through automatic differentiation. +Automatic differentiation is a method of finding the derivatives numerically with very high precision.

    +
    +
    +

    10.5. Example: Exponential decay

    +

    An exponential decay of a quantity \(g(x)\) is described by the equation

    + +
    +
    +\[ +\begin{equation} \label{solve_expdec} \tag{4} + g'(x) = -\gamma g(x) +\end{equation} +\]
    +

    with \(g(0) = g_0\) for some chosen initial value \(g_0\).

    +

    The analytical solution of (4) is

    + +
    +
    +\[ +\begin{equation} + g(x) = g_0 \exp\left(-\gamma x\right) +\label{_auto2} \tag{5} +\end{equation} +\]
    +

    Having an analytical solution at hand, it is possible to use it to compare how well a neural network finds a solution of (4).

    +
    +
    +

    10.6. The function to solve for

    +

    The program will use a neural network to solve

    + +
    +
    +\[ +\begin{equation} \label{solveode} \tag{6} +g'(x) = -\gamma g(x) +\end{equation} +\]
    +

    where \(g(0) = g_0\) with \(\gamma\) and \(g_0\) being some chosen values.

    +

    In this example, \(\gamma = 2\) and \(g_0 = 10\).

    +
    +
    +

    10.7. The trial solution

    +

    To begin with, a trial solution \(g_t(t)\) must be chosen. A general trial solution for ordinary differential equations could be

    +
    +\[ +g_t(x, P) = h_1(x) + h_2(x, N(x, P)) +\]
    +

    with \(h_1(x)\) ensuring that \(g_t(x)\) satisfies some conditions and \(h_2(x,N(x, P))\) an expression involving \(x\) and the output from the neural network \(N(x,P)\) with \(P \) being the collection of the weights and biases for each layer. For now, it is assumed that the network consists of one input layer, one hidden layer, and one output layer.

    +
    +
    +

    10.8. Setup of Network

    +

    In this network, there are no weights and bias at the input layer, so \(P = \{ P_{\text{hidden}}, P_{\text{output}} \}\). +If there are \(N_{\text{hidden} }\) neurons in the hidden layer, then \(P_{\text{hidden}}\) is a \(N_{\text{hidden} } \times (1 + N_{\text{input}})\) matrix, given that there are \(N_{\text{input}}\) neurons in the input layer.

    +

    The first column in \(P_{\text{hidden} }\) represents the bias for each neuron in the hidden layer and the second column represents the weights for each neuron in the hidden layer from the input layer. +If there are \(N_{\text{output} }\) neurons in the output layer, then \(P_{\text{output}} \) is a \(N_{\text{output} } \times (1 + N_{\text{hidden} })\) matrix.

    +

    Its first column represents the bias of each neuron and the remaining columns represents the weights to each neuron.

    +

    It is given that \(g(0) = g_0\). The trial solution must fulfill this condition to be a proper solution of (6). A possible way to ensure that \(g_t(0, P) = g_0\), is to let \(F(N(x,P)) = x \cdot N(x,P)\) and \(A(x) = g_0\). This gives the following trial solution:

    + +
    +
    +\[ +\begin{equation} \label{trial} \tag{7} +g_t(x, P) = g_0 + x \cdot N(x, P) +\end{equation} +\]
    +
    +
    +

    10.9. Reformulating the problem

    +

    We wish that our neural network manages to minimize a given cost function.

    +

    A reformulation of out equation, (6), must therefore be done, +such that it describes the problem a neural network can solve for.

    +

    The neural network must find the set of weights and biases \(P\) such that the trial solution in (7) satisfies (6).

    +

    The trial solution

    +
    +\[ +g_t(x, P) = g_0 + x \cdot N(x, P) +\]
    +

    has been chosen such that it already solves the condition \(g(0) = g_0\). What remains, is to find \(P\) such that

    + +
    +
    +\[ +\begin{equation} \label{nnmin} \tag{8} +g_t'(x, P) = - \gamma g_t(x, P) +\end{equation} +\]
    +

    is fulfilled as best as possible.

    +
    +
    +

    10.10. More technicalities

    +

    The left hand side and right hand side of (8) must be computed separately, and then the neural network must choose weights and biases, contained in \(P\), such that the sides are equal as best as possible. +This means that the absolute or squared difference between the sides must be as close to zero, ideally equal to zero. +In this case, the difference squared shows to be an appropriate measurement of how erroneous the trial solution is with respect to \(P\) of the neural network.

    +

    This gives the following cost function our neural network must solve for:

    +
    +\[ +\min_{P}\Big\{ \big(g_t'(x, P) - ( -\gamma g_t(x, P) \big)^2 \Big\} +\]
    +

    (the notation \(\min_{P}\{ f(x, P) \}\) means that we desire to find \(P\) that yields the minimum of \(f(x, P)\))

    +

    or, in terms of weights and biases for the hidden and output layer in our network:

    +
    +\[ +\min_{P_{\text{hidden} }, \ P_{\text{output} }}\Big\{ \big(g_t'(x, \{ P_{\text{hidden} }, P_{\text{output} }\}) - ( -\gamma g_t(x, \{ P_{\text{hidden} }, P_{\text{output} }\}) \big)^2 \Big\} +\]
    +

    for an input value \(x\).

    +
    +
    +

    10.11. More details

    +

    If the neural network evaluates \(g_t(x, P)\) at more values for \(x\), say \(N\) values \(x_i\) for \(i = 1, \dots, N\), then the total error to minimize becomes

    + +
    +
    +\[ +\begin{equation} \label{min} \tag{9} +\min_{P}\Big\{\frac{1}{N} \sum_{i=1}^N \big(g_t'(x_i, P) - ( -\gamma g_t(x_i, P) \big)^2 \Big\} +\end{equation} +\]
    +

    Letting \(\boldsymbol{x}\) be a vector with elements \(x_i\) and \(C(\boldsymbol{x}, P) = \frac{1}{N} \sum_i \big(g_t'(x_i, P) - ( -\gamma g_t(x_i, P) \big)^2\) denote the cost function, the minimization problem that our network must solve, becomes

    +
    +\[ +\min_{P} C(\boldsymbol{x}, P) +\]
    +

    In terms of \(P_{\text{hidden} }\) and \(P_{\text{output} }\), this could also be expressed as

    +
    +\[ +\min_{P_{\text{hidden} }, \ P_{\text{output} }} C(\boldsymbol{x}, \{P_{\text{hidden} }, P_{\text{output} }\}) +\]
    +
    +
    +

    10.12. A possible implementation of a neural network

    +

    For simplicity, it is assumed that the input is an array \(\boldsymbol{x} = (x_1, \dots, x_N)\) with \(N\) elements. It is at these points the neural network should find \(P\) such that it fulfills (9).

    +

    First, the neural network must feed forward the inputs. +This means that \(\boldsymbol{x}s\) must be passed through an input layer, a hidden layer and a output layer. The input layer in this case, does not need to process the data any further. +The input layer will consist of \(N_{\text{input} }\) neurons, passing its element to each neuron in the hidden layer. The number of neurons in the hidden layer will be \(N_{\text{hidden} }\).

    +
    +
    +

    10.13. Technicalities

    +

    For the \(i\)-th in the hidden layer with weight \(w_i^{\text{hidden} }\) and bias \(b_i^{\text{hidden} }\), the weighting from the \(j\)-th neuron at the input layer is:

    +
    +\[\begin{split} +\begin{aligned} +z_{i,j}^{\text{hidden}} &= b_i^{\text{hidden}} + w_i^{\text{hidden}}x_j \\ +&= +\begin{pmatrix} +b_i^{\text{hidden}} & w_i^{\text{hidden}} +\end{pmatrix} +\begin{pmatrix} +1 \\ +x_j +\end{pmatrix} +\end{aligned} +\end{split}\]
    +
    +
    +

    10.14. Final technicalities I

    +

    The result after weighting the inputs at the \(i\)-th hidden neuron can be written as a vector:

    +
    +\[\begin{split} +\begin{aligned} +\boldsymbol{z}_{i}^{\text{hidden}} &= \Big( b_i^{\text{hidden}} + w_i^{\text{hidden}}x_1 , \ b_i^{\text{hidden}} + w_i^{\text{hidden}} x_2, \ \dots \, , \ b_i^{\text{hidden}} + w_i^{\text{hidden}} x_N\Big) \\ +&= +\begin{pmatrix} + b_i^{\text{hidden}} & w_i^{\text{hidden}} +\end{pmatrix} +\begin{pmatrix} +1 & 1 & \dots & 1 \\ +x_1 & x_2 & \dots & x_N +\end{pmatrix} \\ +&= \boldsymbol{p}_{i, \text{hidden}}^T X +\end{aligned} +\end{split}\]
    +
    +
    +

    10.15. Final technicalities II

    +

    The vector \(\boldsymbol{p}_{i, \text{hidden}}^T\) constitutes each row in \(P_{\text{hidden} }\), which contains the weights for the neural network to minimize according to (9).

    +

    After having found \(\boldsymbol{z}_{i}^{\text{hidden}} \) for every \(i\)-th neuron within the hidden layer, the vector will be sent to an activation function \(a_i(\boldsymbol{z})\).

    +

    In this example, the sigmoid function has been chosen to be the activation function for each hidden neuron:

    +
    +\[ +f(z) = \frac{1}{1 + \exp{(-z)}} +\]
    +

    It is possible to use other activations functions for the hidden layer also.

    +

    The output \(\boldsymbol{x}_i^{\text{hidden}}\) from each \(i\)-th hidden neuron is:

    +
    +\[ +\boldsymbol{x}_i^{\text{hidden} } = f\big( \boldsymbol{z}_{i}^{\text{hidden}} \big) +\]
    +

    The outputs \(\boldsymbol{x}_i^{\text{hidden} } \) are then sent to the output layer.

    +

    The output layer consists of one neuron in this case, and combines the +output from each of the neurons in the hidden layers. The output layer +combines the results from the hidden layer using some weights \(w_i^{\text{output}}\) +and biases \(b_i^{\text{output}}\). In this case, +it is assumes that the number of neurons in the output layer is one.

    +
    +
    +

    10.16. Final technicalities III

    +

    The procedure of weighting the output neuron \(j\) in the hidden layer to the \(i\)-th neuron in the output layer is similar as for the hidden layer described previously.

    +
    +\[\begin{split} +\begin{aligned} +z_{1,j}^{\text{output}} & = +\begin{pmatrix} +b_1^{\text{output}} & \boldsymbol{w}_1^{\text{output}} +\end{pmatrix} +\begin{pmatrix} +1 \\ +\boldsymbol{x}_j^{\text{hidden}} +\end{pmatrix} +\end{aligned} +\end{split}\]
    +
    +
    +

    10.17. Final technicalities IV

    +

    Expressing \(z_{1,j}^{\text{output}}\) as a vector gives the following way of weighting the inputs from the hidden layer:

    +
    +\[\begin{split} +\boldsymbol{z}_{1}^{\text{output}} = +\begin{pmatrix} +b_1^{\text{output}} & \boldsymbol{w}_1^{\text{output}} +\end{pmatrix} +\begin{pmatrix} +1 & 1 & \dots & 1 \\ +\boldsymbol{x}_1^{\text{hidden}} & \boldsymbol{x}_2^{\text{hidden}} & \dots & \boldsymbol{x}_N^{\text{hidden}} +\end{pmatrix} +\end{split}\]
    +

    In this case we seek a continuous range of values since we are approximating a function. This means that after computing \(\boldsymbol{z}_{1}^{\text{output}}\) the neural network has finished its feed forward step, and \(\boldsymbol{z}_{1}^{\text{output}}\) is the final output of the network.

    +
    +
    +

    10.18. Back propagation

    +

    The next step is to decide how the parameters should be changed such that they minimize the cost function.

    +

    The chosen cost function for this problem is

    +
    +\[ +C(\boldsymbol{x}, P) = \frac{1}{N} \sum_i \big(g_t'(x_i, P) - ( -\gamma g_t(x_i, P) \big)^2 +\]
    +

    In order to minimize the cost function, an optimization method must be chosen.

    +

    Here, gradient descent with a constant step size has been chosen.

    +
    +
    +

    10.19. Gradient descent

    +

    The idea of the gradient descent algorithm is to update parameters in +a direction where the cost function decreases goes to a minimum.

    +

    In general, the update of some parameters \(\boldsymbol{\omega}\) given a cost +function defined by some weights \(\boldsymbol{\omega}\), \(C(\boldsymbol{x}, +\boldsymbol{\omega})\), goes as follows:

    +
    +\[ +\boldsymbol{\omega}_{\text{new} } = \boldsymbol{\omega} - \lambda \nabla_{\boldsymbol{\omega}} C(\boldsymbol{x}, \boldsymbol{\omega}) +\]
    +

    for a number of iterations or until \( \big|\big| \boldsymbol{\omega}_{\text{new} } - \boldsymbol{\omega} \big|\big|\) becomes smaller than some given tolerance.

    +

    The value of \(\lambda\) decides how large steps the algorithm must take +in the direction of \( \nabla_{\boldsymbol{\omega}} C(\boldsymbol{x}, \boldsymbol{\omega})\). +The notation \(\nabla_{\boldsymbol{\omega}}\) express the gradient with respect +to the elements in \(\boldsymbol{\omega}\).

    +

    In our case, we have to minimize the cost function \(C(\boldsymbol{x}, P)\) with +respect to the two sets of weights and biases, that is for the hidden +layer \(P_{\text{hidden} }\) and for the output layer \(P_{\text{output} +}\) .

    +

    This means that \(P_{\text{hidden} }\) and \(P_{\text{output} }\) is updated by

    +
    +\[\begin{split} +\begin{aligned} +P_{\text{hidden},\text{new}} &= P_{\text{hidden}} - \lambda \nabla_{P_{\text{hidden}}} C(\boldsymbol{x}, P) \\ +P_{\text{output},\text{new}} &= P_{\text{output}} - \lambda \nabla_{P_{\text{output}}} C(\boldsymbol{x}, P) +\end{aligned} +\end{split}\]
    +
    +
    +

    10.20. The code for solving the ODE

    +
    +
    +
    import autograd.numpy as np
    +from autograd import grad, elementwise_grad
    +import autograd.numpy.random as npr
    +from matplotlib import pyplot as plt
    +
    +def sigmoid(z):
    +    return 1/(1 + np.exp(-z))
    +
    +# Assuming one input, hidden, and output layer
    +def neural_network(params, x):
    +
    +    # Find the weights (including and biases) for the hidden and output layer.
    +    # Assume that params is a list of parameters for each layer.
    +    # The biases are the first element for each array in params,
    +    # and the weights are the remaning elements in each array in params.
    +
    +    w_hidden = params[0]
    +    w_output = params[1]
    +
    +    # Assumes input x being an one-dimensional array
    +    num_values = np.size(x)
    +    x = x.reshape(-1, num_values)
    +
    +    # Assume that the input layer does nothing to the input x
    +    x_input = x
    +
    +    ## Hidden layer:
    +
    +    # Add a row of ones to include bias
    +    x_input = np.concatenate((np.ones((1,num_values)), x_input ), axis = 0)
    +
    +    z_hidden = np.matmul(w_hidden, x_input)
    +    x_hidden = sigmoid(z_hidden)
    +
    +    ## Output layer:
    +
    +    # Include bias:
    +    x_hidden = np.concatenate((np.ones((1,num_values)), x_hidden ), axis = 0)
    +
    +    z_output = np.matmul(w_output, x_hidden)
    +    x_output = z_output
    +
    +    return x_output
    +
    +# The trial solution using the deep neural network:
    +def g_trial(x,params, g0 = 10):
    +    return g0 + x*neural_network(params,x)
    +
    +# The right side of the ODE:
    +def g(x, g_trial, gamma = 2):
    +    return -gamma*g_trial
    +
    +# The cost function:
    +def cost_function(P, x):
    +
    +    # Evaluate the trial function with the current parameters P
    +    g_t = g_trial(x,P)
    +
    +    # Find the derivative w.r.t x of the neural network
    +    d_net_out = elementwise_grad(neural_network,1)(P,x)
    +
    +    # Find the derivative w.r.t x of the trial function
    +    d_g_t = elementwise_grad(g_trial,0)(x,P)
    +
    +    # The right side of the ODE
    +    func = g(x, g_t)
    +
    +    err_sqr = (d_g_t - func)**2
    +    cost_sum = np.sum(err_sqr)
    +
    +    return cost_sum / np.size(err_sqr)
    +
    +# Solve the exponential decay ODE using neural network with one input, hidden, and output layer
    +def solve_ode_neural_network(x, num_neurons_hidden, num_iter, lmb):
    +    ## Set up initial weights and biases
    +
    +    # For the hidden layer
    +    p0 = npr.randn(num_neurons_hidden, 2 )
    +
    +    # For the output layer
    +    p1 = npr.randn(1, num_neurons_hidden + 1 ) # +1 since bias is included
    +
    +    P = [p0, p1]
    +
    +    print('Initial cost: %g'%cost_function(P, x))
    +
    +    ## Start finding the optimal weights using gradient descent
    +
    +    # Find the Python function that represents the gradient of the cost function
    +    # w.r.t the 0-th input argument -- that is the weights and biases in the hidden and output layer
    +    cost_function_grad = grad(cost_function,0)
    +
    +    # Let the update be done num_iter times
    +    for i in range(num_iter):
    +        # Evaluate the gradient at the current weights and biases in P.
    +        # The cost_grad consist now of two arrays;
    +        # one for the gradient w.r.t P_hidden and
    +        # one for the gradient w.r.t P_output
    +        cost_grad =  cost_function_grad(P, x)
    +
    +        P[0] = P[0] - lmb * cost_grad[0]
    +        P[1] = P[1] - lmb * cost_grad[1]
    +
    +    print('Final cost: %g'%cost_function(P, x))
    +
    +    return P
    +
    +def g_analytic(x, gamma = 2, g0 = 10):
    +    return g0*np.exp(-gamma*x)
    +
    +# Solve the given problem
    +if __name__ == '__main__':
    +    # Set seed such that the weight are initialized
    +    # with same weights and biases for every run.
    +    npr.seed(15)
    +
    +    ## Decide the vales of arguments to the function to solve
    +    N = 10
    +    x = np.linspace(0, 1, N)
    +
    +    ## Set up the initial parameters
    +    num_hidden_neurons = 10
    +    num_iter = 10000
    +    lmb = 0.001
    +
    +    # Use the network
    +    P = solve_ode_neural_network(x, num_hidden_neurons, num_iter, lmb)
    +
    +    # Print the deviation from the trial solution and true solution
    +    res = g_trial(x,P)
    +    res_analytical = g_analytic(x)
    +
    +    print('Max absolute difference: %g'%np.max(np.abs(res - res_analytical)))
    +
    +    # Plot the results
    +    plt.figure(figsize=(10,10))
    +
    +    plt.title('Performance of neural network solving an ODE compared to the analytical solution')
    +    plt.plot(x, res_analytical)
    +    plt.plot(x, res[0,:])
    +    plt.legend(['analytical','nn'])
    +    plt.xlabel('x')
    +    plt.ylabel('g(x)')
    +    plt.show()
    +
    +
    +
    +
    +
    Initial cost: 367.01
    +
    +
    +
    Final cost: 0.0666807
    +Max absolute difference: 0.0437499
    +
    +
    +_images/chapter10_59_2.png +
    +
    +
    +
    +

    10.21. The network with one input layer, specified number of hidden layers, and one output layer

    +

    It is also possible to extend the construction of our network into a more general one, allowing the network to contain more than one hidden layers.

    +

    The number of neurons within each hidden layer are given as a list of integers in the program below.

    +
    +
    +
    import autograd.numpy as np
    +from autograd import grad, elementwise_grad
    +import autograd.numpy.random as npr
    +from matplotlib import pyplot as plt
    +
    +def sigmoid(z):
    +    return 1/(1 + np.exp(-z))
    +
    +# The neural network with one input layer and one output layer,
    +# but with number of hidden layers specified by the user.
    +def deep_neural_network(deep_params, x):
    +    # N_hidden is the number of hidden layers
    +
    +    N_hidden = np.size(deep_params) - 1 # -1 since params consists of
    +                                        # parameters to all the hidden
    +                                        # layers AND the output layer.
    +
    +    # Assumes input x being an one-dimensional array
    +    num_values = np.size(x)
    +    x = x.reshape(-1, num_values)
    +
    +    # Assume that the input layer does nothing to the input x
    +    x_input = x
    +
    +    # Due to multiple hidden layers, define a variable referencing to the
    +    # output of the previous layer:
    +    x_prev = x_input
    +
    +    ## Hidden layers:
    +
    +    for l in range(N_hidden):
    +        # From the list of parameters P; find the correct weigths and bias for this layer
    +        w_hidden = deep_params[l]
    +
    +        # Add a row of ones to include bias
    +        x_prev = np.concatenate((np.ones((1,num_values)), x_prev ), axis = 0)
    +
    +        z_hidden = np.matmul(w_hidden, x_prev)
    +        x_hidden = sigmoid(z_hidden)
    +
    +        # Update x_prev such that next layer can use the output from this layer
    +        x_prev = x_hidden
    +
    +    ## Output layer:
    +
    +    # Get the weights and bias for this layer
    +    w_output = deep_params[-1]
    +
    +    # Include bias:
    +    x_prev = np.concatenate((np.ones((1,num_values)), x_prev), axis = 0)
    +
    +    z_output = np.matmul(w_output, x_prev)
    +    x_output = z_output
    +
    +    return x_output
    +
    +# The trial solution using the deep neural network:
    +def g_trial_deep(x,params, g0 = 10):
    +    return g0 + x*deep_neural_network(params, x)
    +
    +# The right side of the ODE:
    +def g(x, g_trial, gamma = 2):
    +    return -gamma*g_trial
    +
    +# The same cost function as before, but calls deep_neural_network instead.
    +def cost_function_deep(P, x):
    +
    +    # Evaluate the trial function with the current parameters P
    +    g_t = g_trial_deep(x,P)
    +
    +    # Find the derivative w.r.t x of the neural network
    +    d_net_out = elementwise_grad(deep_neural_network,1)(P,x)
    +
    +    # Find the derivative w.r.t x of the trial function
    +    d_g_t = elementwise_grad(g_trial_deep,0)(x,P)
    +
    +    # The right side of the ODE
    +    func = g(x, g_t)
    +
    +    err_sqr = (d_g_t - func)**2
    +    cost_sum = np.sum(err_sqr)
    +
    +    return cost_sum / np.size(err_sqr)
    +
    +# Solve the exponential decay ODE using neural network with one input and one output layer,
    +# but with specified number of hidden layers from the user.
    +def solve_ode_deep_neural_network(x, num_neurons, num_iter, lmb):
    +    # num_hidden_neurons is now a list of number of neurons within each hidden layer
    +
    +    # The number of elements in the list num_hidden_neurons thus represents
    +    # the number of hidden layers.
    +
    +    # Find the number of hidden layers:
    +    N_hidden = np.size(num_neurons)
    +
    +    ## Set up initial weights and biases
    +
    +    # Initialize the list of parameters:
    +    P = [None]*(N_hidden + 1) # + 1 to include the output layer
    +
    +    P[0] = npr.randn(num_neurons[0], 2 )
    +    for l in range(1,N_hidden):
    +        P[l] = npr.randn(num_neurons[l], num_neurons[l-1] + 1) # +1 to include bias
    +
    +    # For the output layer
    +    P[-1] = npr.randn(1, num_neurons[-1] + 1 ) # +1 since bias is included
    +
    +    print('Initial cost: %g'%cost_function_deep(P, x))
    +
    +    ## Start finding the optimal weights using gradient descent
    +
    +    # Find the Python function that represents the gradient of the cost function
    +    # w.r.t the 0-th input argument -- that is the weights and biases in the hidden and output layer
    +    cost_function_deep_grad = grad(cost_function_deep,0)
    +
    +    # Let the update be done num_iter times
    +    for i in range(num_iter):
    +        # Evaluate the gradient at the current weights and biases in P.
    +        # The cost_grad consist now of N_hidden + 1 arrays; the gradient w.r.t the weights and biases
    +        # in the hidden layers and output layers evaluated at x.
    +        cost_deep_grad =  cost_function_deep_grad(P, x)
    +
    +        for l in range(N_hidden+1):
    +            P[l] = P[l] - lmb * cost_deep_grad[l]
    +
    +    print('Final cost: %g'%cost_function_deep(P, x))
    +
    +    return P
    +
    +def g_analytic(x, gamma = 2, g0 = 10):
    +    return g0*np.exp(-gamma*x)
    +
    +# Solve the given problem
    +if __name__ == '__main__':
    +    npr.seed(15)
    +
    +    ## Decide the vales of arguments to the function to solve
    +    N = 10
    +    x = np.linspace(0, 1, N)
    +
    +    ## Set up the initial parameters
    +    num_hidden_neurons = np.array([10,10])
    +    num_iter = 10000
    +    lmb = 0.001
    +
    +    P = solve_ode_deep_neural_network(x, num_hidden_neurons, num_iter, lmb)
    +
    +    res = g_trial_deep(x,P)
    +    res_analytical = g_analytic(x)
    +
    +    plt.figure(figsize=(10,10))
    +
    +    plt.title('Performance of a deep neural network solving an ODE compared to the analytical solution')
    +    plt.plot(x, res_analytical)
    +    plt.plot(x, res[0,:])
    +    plt.legend(['analytical','dnn'])
    +    plt.ylabel('g(x)')
    +    plt.show()
    +
    +
    +
    +
    +
    +
    +

    10.22. Example: Population growth

    +

    A logistic model of population growth assumes that a population converges toward an equilibrium. +The population growth can be modeled by

    + +
    +
    +\[ +\begin{equation} \label{log} \tag{10} + g'(t) = \alpha g(t)(A - g(t)) +\end{equation} +\]
    +

    where \(g(t)\) is the population density at time \(t\), \(\alpha > 0\) the growth rate and \(A > 0\) is the maximum population number in the environment. +Also, at \(t = 0\) the population has the size \(g(0) = g_0\), where \(g_0\) is some chosen constant.

    +

    In this example, similar network as for the exponential decay using Autograd has been used to solve the equation. However, as the implementation might suffer from e.g numerical instability +and high execution time (this might be more apparent in the examples solving PDEs), +using a library like TensorFlow is recommended. +Here, we stay with a more simple approach and implement for comparison, the simple forward Euler method.

    +
    +
    +

    10.23. Setting up the problem

    +

    Here, we will model a population \(g(t)\) in an environment having carrying capacity \(A\). +The population follows the model

    + +
    +
    +\[ +\begin{equation} \label{solveode_population} \tag{11} +g'(t) = \alpha g(t)(A - g(t)) +\end{equation} +\]
    +

    where \(g(0) = g_0\).

    +

    In this example, we let \(\alpha = 2\), \(A = 1\), and \(g_0 = 1.2\).

    +
    +
    +

    10.24. The trial solution

    +

    We will get a slightly different trial solution, as the boundary conditions are different +compared to the case for exponential decay.

    +

    A possible trial solution satisfying the condition \(g(0) = g_0\) could be

    +
    +\[ +h_1(t) = g_0 + t \cdot N(t,P) +\]
    +

    with \(N(t,P)\) being the output from the neural network with weights and biases for each layer collected in the set \(P\).

    +

    The analytical solution is

    +
    +\[ +g(t) = \frac{Ag_0}{g_0 + (A - g_0)\exp(-\alpha A t)} +\]
    +
    +
    +

    10.25. The program using Autograd

    +

    The network will be the similar as for the exponential decay example, but with some small modifications for our problem.

    +
    +
    +
    import autograd.numpy as np
    +from autograd import grad, elementwise_grad
    +import autograd.numpy.random as npr
    +from matplotlib import pyplot as plt
    +
    +def sigmoid(z):
    +    return 1/(1 + np.exp(-z))
    +
    +# Function to get the parameters.
    +# Done such that one can easily change the paramaters after one's liking.
    +def get_parameters():
    +    alpha = 2
    +    A = 1
    +    g0 = 1.2
    +    return alpha, A, g0
    +
    +def deep_neural_network(P, x):
    +    # N_hidden is the number of hidden layers
    +    N_hidden = np.size(P) - 1 # -1 since params consist of parameters to all the hidden layers AND the output layer
    +
    +    # Assumes input x being an one-dimensional array
    +    num_values = np.size(x)
    +    x = x.reshape(-1, num_values)
    +
    +    # Assume that the input layer does nothing to the input x
    +    x_input = x
    +
    +    # Due to multiple hidden layers, define a variable referencing to the
    +    # output of the previous layer:
    +    x_prev = x_input
    +
    +    ## Hidden layers:
    +
    +    for l in range(N_hidden):
    +        # From the list of parameters P; find the correct weigths and bias for this layer
    +        w_hidden = P[l]
    +
    +        # Add a row of ones to include bias
    +        x_prev = np.concatenate((np.ones((1,num_values)), x_prev ), axis = 0)
    +
    +        z_hidden = np.matmul(w_hidden, x_prev)
    +        x_hidden = sigmoid(z_hidden)
    +
    +        # Update x_prev such that next layer can use the output from this layer
    +        x_prev = x_hidden
    +
    +    ## Output layer:
    +
    +    # Get the weights and bias for this layer
    +    w_output = P[-1]
    +
    +    # Include bias:
    +    x_prev = np.concatenate((np.ones((1,num_values)), x_prev), axis = 0)
    +
    +    z_output = np.matmul(w_output, x_prev)
    +    x_output = z_output
    +
    +    return x_output
    +
    +
    +def cost_function_deep(P, x):
    +
    +    # Evaluate the trial function with the current parameters P
    +    g_t = g_trial_deep(x,P)
    +
    +    # Find the derivative w.r.t x of the trial function
    +    d_g_t = elementwise_grad(g_trial_deep,0)(x,P)
    +
    +    # The right side of the ODE
    +    func = f(x, g_t)
    +
    +    err_sqr = (d_g_t - func)**2
    +    cost_sum = np.sum(err_sqr)
    +
    +    return cost_sum / np.size(err_sqr)
    +
    +# The right side of the ODE:
    +def f(x, g_trial):
    +    alpha,A, g0 = get_parameters()
    +    return alpha*g_trial*(A - g_trial)
    +
    +# The trial solution using the deep neural network:
    +def g_trial_deep(x, params):
    +    alpha,A, g0 = get_parameters()
    +    return g0 + x*deep_neural_network(params,x)
    +
    +# The analytical solution:
    +def g_analytic(t):
    +    alpha,A, g0 = get_parameters()
    +    return A*g0/(g0 + (A - g0)*np.exp(-alpha*A*t))
    +
    +def solve_ode_deep_neural_network(x, num_neurons, num_iter, lmb):
    +    # num_hidden_neurons is now a list of number of neurons within each hidden layer
    +
    +    # Find the number of hidden layers:
    +    N_hidden = np.size(num_neurons)
    +
    +    ## Set up initial weigths and biases
    +
    +    # Initialize the list of parameters:
    +    P = [None]*(N_hidden + 1) # + 1 to include the output layer
    +
    +    P[0] = npr.randn(num_neurons[0], 2 )
    +    for l in range(1,N_hidden):
    +        P[l] = npr.randn(num_neurons[l], num_neurons[l-1] + 1) # +1 to include bias
    +
    +    # For the output layer
    +    P[-1] = npr.randn(1, num_neurons[-1] + 1 ) # +1 since bias is included
    +
    +    print('Initial cost: %g'%cost_function_deep(P, x))
    +
    +    ## Start finding the optimal weigths using gradient descent
    +
    +    # Find the Python function that represents the gradient of the cost function
    +    # w.r.t the 0-th input argument -- that is the weights and biases in the hidden and output layer
    +    cost_function_deep_grad = grad(cost_function_deep,0)
    +
    +    # Let the update be done num_iter times
    +    for i in range(num_iter):
    +        # Evaluate the gradient at the current weights and biases in P.
    +        # The cost_grad consist now of N_hidden + 1 arrays; the gradient w.r.t the weights and biases
    +        # in the hidden layers and output layers evaluated at x.
    +        cost_deep_grad =  cost_function_deep_grad(P, x)
    +
    +        for l in range(N_hidden+1):
    +            P[l] = P[l] - lmb * cost_deep_grad[l]
    +
    +    print('Final cost: %g'%cost_function_deep(P, x))
    +
    +    return P
    +
    +if __name__ == '__main__':
    +    npr.seed(4155)
    +
    +    ## Decide the vales of arguments to the function to solve
    +    Nt = 10
    +    T = 1
    +    t = np.linspace(0,T, Nt)
    +
    +    ## Set up the initial parameters
    +    num_hidden_neurons = [100, 50, 25]
    +    num_iter = 1000
    +    lmb = 1e-3
    +
    +    P = solve_ode_deep_neural_network(t, num_hidden_neurons, num_iter, lmb)
    +
    +    g_dnn_ag = g_trial_deep(t,P)
    +    g_analytical = g_analytic(t)
    +
    +    # Find the maximum absolute difference between the solutons:
    +    diff_ag = np.max(np.abs(g_dnn_ag - g_analytical))
    +    print("The max absolute difference between the solutions is: %g"%diff_ag)
    +
    +    plt.figure(figsize=(10,10))
    +
    +    plt.title('Performance of neural network solving an ODE compared to the analytical solution')
    +    plt.plot(t, g_analytical)
    +    plt.plot(t, g_dnn_ag[0,:])
    +    plt.legend(['analytical','nn'])
    +    plt.xlabel('t')
    +    plt.ylabel('g(t)')
    +
    +    plt.show()
    +
    +
    +
    +
    +
    +
    +

    10.26. Using forward Euler to solve the ODE

    +

    A straightforward way of solving an ODE numerically, is to use Euler’s method.

    +

    Euler’s method uses Taylor series to approximate the value at a function \(f\) at a step \(\Delta x\) from \(x\):

    +
    +\[ +f(x + \Delta x) \approx f(x) + \Delta x f'(x) +\]
    +

    In our case, using Euler’s method to approximate the value of \(g\) at a step \(\Delta t\) from \(t\) yields

    +
    +\[\begin{split} +\begin{aligned} + g(t + \Delta t) &\approx g(t) + \Delta t g'(t) \\ + &= g(t) + \Delta t \big(\alpha g(t)(A - g(t))\big) +\end{aligned} +\end{split}\]
    +

    along with the condition that \(g(0) = g_0\).

    +

    Let \(t_i = i \cdot \Delta t\) where \(\Delta t = \frac{T}{N_t-1}\) where \(T\) is the final time our solver must solve for and \(N_t\) the number of values for \(t \in [0, T]\) for \(i = 0, \dots, N_t-1\).

    +

    For \(i \geq 1\), we have that

    +
    +\[\begin{split} +\begin{aligned} +t_i &= i\Delta t \\ +&= (i - 1)\Delta t + \Delta t \\ +&= t_{i-1} + \Delta t +\end{aligned} +\end{split}\]
    +

    Now, if \(g_i = g(t_i)\) then

    + +
    +
    +\[\begin{split} +\begin{equation} + \begin{aligned} + g_i &= g(t_i) \\ + &= g(t_{i-1} + \Delta t) \\ + &\approx g(t_{i-1}) + \Delta t \big(\alpha g(t_{i-1})(A - g(t_{i-1}))\big) \\ + &= g_{i-1} + \Delta t \big(\alpha g_{i-1}(A - g_{i-1})\big) + \end{aligned} +\end{equation} \label{odenum} \tag{12} +\end{split}\]
    +

    for \(i \geq 1\) and \(g_0 = g(t_0) = g(0) = g_0\).

    +

    Equation (12) could be implemented in the following way, +extending the program that uses the network using Autograd:

    +
    +
    +
    # Assume that all function definitions from the example program using Autograd
    +# are located here.
    +
    +if __name__ == '__main__':
    +    npr.seed(4155)
    +
    +    ## Decide the vales of arguments to the function to solve
    +    Nt = 10
    +    T = 1
    +    t = np.linspace(0,T, Nt)
    +
    +    ## Set up the initial parameters
    +    num_hidden_neurons = [100,50,25]
    +    num_iter = 1000
    +    lmb = 1e-3
    +
    +    P = solve_ode_deep_neural_network(t, num_hidden_neurons, num_iter, lmb)
    +
    +    g_dnn_ag = g_trial_deep(t,P)
    +    g_analytical = g_analytic(t)
    +
    +    # Find the maximum absolute difference between the solutons:
    +    diff_ag = np.max(np.abs(g_dnn_ag - g_analytical))
    +    print("The max absolute difference between the solutions is: %g"%diff_ag)
    +
    +    plt.figure(figsize=(10,10))
    +
    +    plt.title('Performance of neural network solving an ODE compared to the analytical solution')
    +    plt.plot(t, g_analytical)
    +    plt.plot(t, g_dnn_ag[0,:])
    +    plt.legend(['analytical','nn'])
    +    plt.xlabel('t')
    +    plt.ylabel('g(t)')
    +
    +    ## Find an approximation to the funtion using forward Euler
    +
    +    alpha, A, g0 = get_parameters()
    +    dt = T/(Nt - 1)
    +
    +    # Perform forward Euler to solve the ODE
    +    g_euler = np.zeros(Nt)
    +    g_euler[0] = g0
    +
    +    for i in range(1,Nt):
    +        g_euler[i] = g_euler[i-1] + dt*(alpha*g_euler[i-1]*(A - g_euler[i-1]))
    +
    +    # Print the errors done by each method
    +    diff1 = np.max(np.abs(g_euler - g_analytical))
    +    diff2 = np.max(np.abs(g_dnn_ag[0,:] - g_analytical))
    +
    +    print('Max absolute difference between Euler method and analytical: %g'%diff1)
    +    print('Max absolute difference between deep neural network and analytical: %g'%diff2)
    +
    +    # Plot results
    +    plt.figure(figsize=(10,10))
    +
    +    plt.plot(t,g_euler)
    +    plt.plot(t,g_analytical)
    +    plt.plot(t,g_dnn_ag[0,:])
    +
    +    plt.legend(['euler','analytical','dnn'])
    +    plt.xlabel('Time t')
    +    plt.ylabel('g(t)')
    +
    +    plt.show()
    +
    +
    +
    +
    +
    +
    +

    10.27. Example: Solving the one dimensional Poisson equation

    +

    The Poisson equation for \(g(x)\) in one dimension is

    + +
    +
    +\[ +\begin{equation} \label{poisson} \tag{13} + -g''(x) = f(x) +\end{equation} +\]
    +

    where \(f(x)\) is a given function for \(x \in (0,1)\).

    +

    The conditions that \(g(x)\) is chosen to fulfill, are

    +
    +\[\begin{split} +\begin{align*} + g(0) &= 0 \\ + g(1) &= 0 +\end{align*} +\end{split}\]
    +

    This equation can be solved numerically using programs where e.g Autograd and TensorFlow are used. +The results from the networks can then be compared to the analytical solution. +In addition, it could be interesting to see how a typical method for numerically solving second order ODEs compares to the neural networks.

    +
    +
    +

    10.28. The specific equation to solve for

    +

    Here, the function \(g(x)\) to solve for follows the equation

    +
    +\[ +-g''(x) = f(x),\qquad x \in (0,1) +\]
    +

    where \(f(x)\) is a given function, along with the chosen conditions

    + +
    +
    +\[ +\begin{aligned} +g(0) = g(1) = 0 +\end{aligned}\label{cond} \tag{14} +\]
    +

    In this example, we consider the case when \(f(x) = (3x + x^2)\exp(x)\).

    +

    For this case, a possible trial solution satisfying the conditions could be

    +
    +\[ +g_t(x) = x \cdot (1-x) \cdot N(P,x) +\]
    +

    The analytical solution for this problem is

    +
    +\[ +g(x) = x(1 - x)\exp(x) +\]
    +
    +
    +

    10.29. Solving the equation using Autograd

    +
    +
    +
    import autograd.numpy as np
    +from autograd import grad, elementwise_grad
    +import autograd.numpy.random as npr
    +from matplotlib import pyplot as plt
    +
    +def sigmoid(z):
    +    return 1/(1 + np.exp(-z))
    +
    +def deep_neural_network(deep_params, x):
    +    # N_hidden is the number of hidden layers
    +    N_hidden = np.size(deep_params) - 1 # -1 since params consist of parameters to all the hidden layers AND the output layer
    +
    +    # Assumes input x being an one-dimensional array
    +    num_values = np.size(x)
    +    x = x.reshape(-1, num_values)
    +
    +    # Assume that the input layer does nothing to the input x
    +    x_input = x
    +
    +    # Due to multiple hidden layers, define a variable referencing to the
    +    # output of the previous layer:
    +    x_prev = x_input
    +
    +    ## Hidden layers:
    +
    +    for l in range(N_hidden):
    +        # From the list of parameters P; find the correct weigths and bias for this layer
    +        w_hidden = deep_params[l]
    +
    +        # Add a row of ones to include bias
    +        x_prev = np.concatenate((np.ones((1,num_values)), x_prev ), axis = 0)
    +
    +        z_hidden = np.matmul(w_hidden, x_prev)
    +        x_hidden = sigmoid(z_hidden)
    +
    +        # Update x_prev such that next layer can use the output from this layer
    +        x_prev = x_hidden
    +
    +    ## Output layer:
    +
    +    # Get the weights and bias for this layer
    +    w_output = deep_params[-1]
    +
    +    # Include bias:
    +    x_prev = np.concatenate((np.ones((1,num_values)), x_prev), axis = 0)
    +
    +    z_output = np.matmul(w_output, x_prev)
    +    x_output = z_output
    +
    +    return x_output
    +
    +def solve_ode_deep_neural_network(x, num_neurons, num_iter, lmb):
    +    # num_hidden_neurons is now a list of number of neurons within each hidden layer
    +
    +    # Find the number of hidden layers:
    +    N_hidden = np.size(num_neurons)
    +
    +    ## Set up initial weigths and biases
    +
    +    # Initialize the list of parameters:
    +    P = [None]*(N_hidden + 1) # + 1 to include the output layer
    +
    +    P[0] = npr.randn(num_neurons[0], 2 )
    +    for l in range(1,N_hidden):
    +        P[l] = npr.randn(num_neurons[l], num_neurons[l-1] + 1) # +1 to include bias
    +
    +    # For the output layer
    +    P[-1] = npr.randn(1, num_neurons[-1] + 1 ) # +1 since bias is included
    +
    +    print('Initial cost: %g'%cost_function_deep(P, x))
    +
    +    ## Start finding the optimal weigths using gradient descent
    +
    +    # Find the Python function that represents the gradient of the cost function
    +    # w.r.t the 0-th input argument -- that is the weights and biases in the hidden and output layer
    +    cost_function_deep_grad = grad(cost_function_deep,0)
    +
    +    # Let the update be done num_iter times
    +    for i in range(num_iter):
    +        # Evaluate the gradient at the current weights and biases in P.
    +        # The cost_grad consist now of N_hidden + 1 arrays; the gradient w.r.t the weights and biases
    +        # in the hidden layers and output layers evaluated at x.
    +        cost_deep_grad =  cost_function_deep_grad(P, x)
    +
    +        for l in range(N_hidden+1):
    +            P[l] = P[l] - lmb * cost_deep_grad[l]
    +
    +    print('Final cost: %g'%cost_function_deep(P, x))
    +
    +    return P
    +
    +## Set up the cost function specified for this Poisson equation:
    +
    +# The right side of the ODE
    +def f(x):
    +    return (3*x + x**2)*np.exp(x)
    +
    +def cost_function_deep(P, x):
    +
    +    # Evaluate the trial function with the current parameters P
    +    g_t = g_trial_deep(x,P)
    +
    +    # Find the derivative w.r.t x of the trial function
    +    d2_g_t = elementwise_grad(elementwise_grad(g_trial_deep,0))(x,P)
    +
    +    right_side = f(x)
    +
    +    err_sqr = (-d2_g_t - right_side)**2
    +    cost_sum = np.sum(err_sqr)
    +
    +    return cost_sum/np.size(err_sqr)
    +
    +# The trial solution:
    +def g_trial_deep(x,P):
    +    return x*(1-x)*deep_neural_network(P,x)
    +
    +# The analytic solution;
    +def g_analytic(x):
    +    return x*(1-x)*np.exp(x)
    +
    +if __name__ == '__main__':
    +    npr.seed(4155)
    +
    +    ## Decide the vales of arguments to the function to solve
    +    Nx = 10
    +    x = np.linspace(0,1, Nx)
    +
    +    ## Set up the initial parameters
    +    num_hidden_neurons = [200,100]
    +    num_iter = 1000
    +    lmb = 1e-3
    +
    +    P = solve_ode_deep_neural_network(x, num_hidden_neurons, num_iter, lmb)
    +
    +    g_dnn_ag = g_trial_deep(x,P)
    +    g_analytical = g_analytic(x)
    +
    +    # Find the maximum absolute difference between the solutons:
    +    max_diff = np.max(np.abs(g_dnn_ag - g_analytical))
    +    print("The max absolute difference between the solutions is: %g"%max_diff)
    +
    +    plt.figure(figsize=(10,10))
    +
    +    plt.title('Performance of neural network solving an ODE compared to the analytical solution')
    +    plt.plot(x, g_analytical)
    +    plt.plot(x, g_dnn_ag[0,:])
    +    plt.legend(['analytical','nn'])
    +    plt.xlabel('x')
    +    plt.ylabel('g(x)')
    +    plt.show()
    +
    +
    +
    +
    +
    +
    +

    10.30. Comparing with a numerical scheme

    +

    The Poisson equation is possible to solve using Taylor series to approximate the second derivative.

    +

    Using Taylor series, the second derivative can be expressed as

    +
    +\[ +g''(x) = \frac{g(x + \Delta x) - 2g(x) + g(x-\Delta x)}{\Delta x^2} + E_{\Delta x}(x) +\]
    +

    where \(\Delta x\) is a small step size and \(E_{\Delta x}(x)\) being the error term.

    +

    Looking away from the error terms gives an approximation to the second derivative:

    + +
    +
    +\[ +\begin{equation} \label{approx} \tag{15} +g''(x) \approx \frac{g(x + \Delta x) - 2g(x) + g(x-\Delta x)}{\Delta x^2} +\end{equation} +\]
    +

    If \(x_i = i \Delta x = x_{i-1} + \Delta x\) and \(g_i = g(x_i)\) for \(i = 1,\dots N_x - 2\) with \(N_x\) being the number of values for \(x\), (15) becomes

    +
    +\[\begin{split} +\begin{aligned} +g''(x_i) &\approx \frac{g(x_i + \Delta x) - 2g(x_i) + g(x_i -\Delta x)}{\Delta x^2} \\ +&= \frac{g_{i+1} - 2g_i + g_{i-1}}{\Delta x^2} +\end{aligned} +\end{split}\]
    +

    Since we know from our problem that

    +
    +\[\begin{split} +\begin{aligned} +-g''(x) &= f(x) \\ +&= (3x + x^2)\exp(x) +\end{aligned} +\end{split}\]
    +

    along with the conditions \(g(0) = g(1) = 0\), +the following scheme can be used to find an approximate solution for \(g(x)\) numerically:

    + +
    +
    +\[\begin{split} +\begin{equation} + \begin{aligned} + -\Big( \frac{g_{i+1} - 2g_i + g_{i-1}}{\Delta x^2} \Big) &= f(x_i) \\ + -g_{i+1} + 2g_i - g_{i-1} &= \Delta x^2 f(x_i) + \end{aligned} +\end{equation} \label{odesys} \tag{16} +\end{split}\]
    +

    for \(i = 1, \dots, N_x - 2\) where \(g_0 = g_{N_x - 1} = 0\) and \(f(x_i) = (3x_i + x_i^2)\exp(x_i)\), which is given for our specific problem.

    +

    The equation can be rewritten into a matrix equation:

    +
    +\[\begin{split} +\begin{aligned} +\begin{pmatrix} +2 & -1 & 0 & \dots & 0 \\ +-1 & 2 & -1 & \dots & 0 \\ +\vdots & & \ddots & & \vdots \\ +0 & \dots & -1 & 2 & -1 \\ +0 & \dots & 0 & -1 & 2\\ +\end{pmatrix} +\begin{pmatrix} +g_1 \\ +g_2 \\ +\vdots \\ +g_{N_x - 3} \\ +g_{N_x - 2} +\end{pmatrix} +&= +\Delta x^2 +\begin{pmatrix} +f(x_1) \\ +f(x_2) \\ +\vdots \\ +f(x_{N_x - 3}) \\ +f(x_{N_x - 2}) +\end{pmatrix} \\ +\boldsymbol{A}\boldsymbol{g} &= \boldsymbol{f}, +\end{aligned} +\end{split}\]
    +

    which makes it possible to solve for the vector \(\boldsymbol{g}\).

    +
    +
    +

    10.31. Setting up the code

    +

    We can then compare the result from this numerical scheme with the output from our network using Autograd:

    +
    +
    +
    import autograd.numpy as np
    +from autograd import grad, elementwise_grad
    +import autograd.numpy.random as npr
    +from matplotlib import pyplot as plt
    +
    +def sigmoid(z):
    +    return 1/(1 + np.exp(-z))
    +
    +def deep_neural_network(deep_params, x):
    +    # N_hidden is the number of hidden layers
    +    N_hidden = np.size(deep_params) - 1 # -1 since params consist of parameters to all the hidden layers AND the output layer
    +
    +    # Assumes input x being an one-dimensional array
    +    num_values = np.size(x)
    +    x = x.reshape(-1, num_values)
    +
    +    # Assume that the input layer does nothing to the input x
    +    x_input = x
    +
    +    # Due to multiple hidden layers, define a variable referencing to the
    +    # output of the previous layer:
    +    x_prev = x_input
    +
    +    ## Hidden layers:
    +
    +    for l in range(N_hidden):
    +        # From the list of parameters P; find the correct weigths and bias for this layer
    +        w_hidden = deep_params[l]
    +
    +        # Add a row of ones to include bias
    +        x_prev = np.concatenate((np.ones((1,num_values)), x_prev ), axis = 0)
    +
    +        z_hidden = np.matmul(w_hidden, x_prev)
    +        x_hidden = sigmoid(z_hidden)
    +
    +        # Update x_prev such that next layer can use the output from this layer
    +        x_prev = x_hidden
    +
    +    ## Output layer:
    +
    +    # Get the weights and bias for this layer
    +    w_output = deep_params[-1]
    +
    +    # Include bias:
    +    x_prev = np.concatenate((np.ones((1,num_values)), x_prev), axis = 0)
    +
    +    z_output = np.matmul(w_output, x_prev)
    +    x_output = z_output
    +
    +    return x_output
    +
    +def solve_ode_deep_neural_network(x, num_neurons, num_iter, lmb):
    +    # num_hidden_neurons is now a list of number of neurons within each hidden layer
    +
    +    # Find the number of hidden layers:
    +    N_hidden = np.size(num_neurons)
    +
    +    ## Set up initial weigths and biases
    +
    +    # Initialize the list of parameters:
    +    P = [None]*(N_hidden + 1) # + 1 to include the output layer
    +
    +    P[0] = npr.randn(num_neurons[0], 2 )
    +    for l in range(1,N_hidden):
    +        P[l] = npr.randn(num_neurons[l], num_neurons[l-1] + 1) # +1 to include bias
    +
    +    # For the output layer
    +    P[-1] = npr.randn(1, num_neurons[-1] + 1 ) # +1 since bias is included
    +
    +    print('Initial cost: %g'%cost_function_deep(P, x))
    +
    +    ## Start finding the optimal weigths using gradient descent
    +
    +    # Find the Python function that represents the gradient of the cost function
    +    # w.r.t the 0-th input argument -- that is the weights and biases in the hidden and output layer
    +    cost_function_deep_grad = grad(cost_function_deep,0)
    +
    +    # Let the update be done num_iter times
    +    for i in range(num_iter):
    +        # Evaluate the gradient at the current weights and biases in P.
    +        # The cost_grad consist now of N_hidden + 1 arrays; the gradient w.r.t the weights and biases
    +        # in the hidden layers and output layers evaluated at x.
    +        cost_deep_grad =  cost_function_deep_grad(P, x)
    +
    +        for l in range(N_hidden+1):
    +            P[l] = P[l] - lmb * cost_deep_grad[l]
    +
    +    print('Final cost: %g'%cost_function_deep(P, x))
    +
    +    return P
    +
    +## Set up the cost function specified for this Poisson equation:
    +
    +# The right side of the ODE
    +def f(x):
    +    return (3*x + x**2)*np.exp(x)
    +
    +def cost_function_deep(P, x):
    +
    +    # Evaluate the trial function with the current parameters P
    +    g_t = g_trial_deep(x,P)
    +
    +    # Find the derivative w.r.t x of the trial function
    +    d2_g_t = elementwise_grad(elementwise_grad(g_trial_deep,0))(x,P)
    +
    +    right_side = f(x)
    +
    +    err_sqr = (-d2_g_t - right_side)**2
    +    cost_sum = np.sum(err_sqr)
    +
    +    return cost_sum/np.size(err_sqr)
    +
    +# The trial solution:
    +def g_trial_deep(x,P):
    +    return x*(1-x)*deep_neural_network(P,x)
    +
    +# The analytic solution;
    +def g_analytic(x):
    +    return x*(1-x)*np.exp(x)
    +
    +if __name__ == '__main__':
    +    npr.seed(4155)
    +
    +    ## Decide the vales of arguments to the function to solve
    +    Nx = 10
    +    x = np.linspace(0,1, Nx)
    +
    +    ## Set up the initial parameters
    +    num_hidden_neurons = [200,100]
    +    num_iter = 1000
    +    lmb = 1e-3
    +
    +    P = solve_ode_deep_neural_network(x, num_hidden_neurons, num_iter, lmb)
    +
    +    g_dnn_ag = g_trial_deep(x,P)
    +    g_analytical = g_analytic(x)
    +
    +    # Find the maximum absolute difference between the solutons:
    +
    +    plt.figure(figsize=(10,10))
    +
    +    plt.title('Performance of neural network solving an ODE compared to the analytical solution')
    +    plt.plot(x, g_analytical)
    +    plt.plot(x, g_dnn_ag[0,:])
    +    plt.legend(['analytical','nn'])
    +    plt.xlabel('x')
    +    plt.ylabel('g(x)')
    +
    +    ## Perform the computation using the numerical scheme
    +
    +    dx = 1/(Nx - 1)
    +
    +    # Set up the matrix A
    +    A = np.zeros((Nx-2,Nx-2))
    +
    +    A[0,0] = 2
    +    A[0,1] = -1
    +
    +    for i in range(1,Nx-3):
    +        A[i,i-1] = -1
    +        A[i,i] = 2
    +        A[i,i+1] = -1
    +
    +    A[Nx - 3, Nx - 4] = -1
    +    A[Nx - 3, Nx - 3] = 2
    +
    +    # Set up the vector f
    +    f_vec = dx**2 * f(x[1:-1])
    +
    +    # Solve the equation
    +    g_res = np.linalg.solve(A,f_vec)
    +
    +    g_vec = np.zeros(Nx)
    +    g_vec[1:-1] = g_res
    +
    +    # Print the differences between each method
    +    max_diff1 = np.max(np.abs(g_dnn_ag - g_analytical))
    +    max_diff2 = np.max(np.abs(g_vec - g_analytical))
    +    print("The max absolute difference between the analytical solution and DNN Autograd: %g"%max_diff1)
    +    print("The max absolute difference between the analytical solution and numerical scheme: %g"%max_diff2)
    +
    +    # Plot the results
    +    plt.figure(figsize=(10,10))
    +
    +    plt.plot(x,g_vec)
    +    plt.plot(x,g_analytical)
    +    plt.plot(x,g_dnn_ag[0,:])
    +
    +    plt.legend(['numerical scheme','analytical','dnn'])
    +    plt.show()
    +
    +
    +
    +
    +
    +
    +

    10.32. Partial Differential Equations

    +

    A partial differential equation (PDE) has a solution here the function +is defined by multiple variables. The equation may involve all kinds +of combinations of which variables the function is differentiated with +respect to.

    +

    In general, a partial differential equation for a function \(g(x_1,\dots,x_N)\) with \(N\) variables may be expressed as

    + +
    +
    +\[ +\begin{equation} \label{PDE} \tag{17} + f\left(x_1, \, \dots \, , x_N, \frac{\partial g(x_1,\dots,x_N) }{\partial x_1}, \dots , \frac{\partial g(x_1,\dots,x_N) }{\partial x_N}, \frac{\partial g(x_1,\dots,x_N) }{\partial x_1\partial x_2}, \, \dots \, , \frac{\partial^n g(x_1,\dots,x_N) }{\partial x_N^n} \right) = 0 +\end{equation} +\]
    +

    where \(f\) is an expression involving all kinds of possible mixed derivatives of \(g(x_1,\dots,x_N)\) up to an order \(n\). In order for the solution to be unique, some additional conditions must also be given.

    +
    +
    +

    10.33. Type of problem

    +

    The problem our network must solve for, is similar to the ODE case. +We must have a trial solution \(g_t\) at hand.

    +

    For instance, the trial solution could be expressed as

    +
    +\[ +\begin{align*} + g_t(x_1,\dots,x_N) = h_1(x_1,\dots,x_N) + h_2(x_1,\dots,x_N,N(x_1,\dots,x_N,P)) +\end{align*} +\]
    +

    where \(h_1(x_1,\dots,x_N)\) is a function that ensures \(g_t(x_1,\dots,x_N)\) satisfies some given conditions. +The neural network \(N(x_1,\dots,x_N,P)\) has weights and biases described by \(P\) and \(h_2(x_1,\dots,x_N,N(x_1,\dots,x_N,P))\) is an expression using the output from the neural network in some way.

    +

    The role of the function \(h_2(x_1,\dots,x_N,N(x_1,\dots,x_N,P))\), is to ensure that the output of \(N(x_1,\dots,x_N,P)\) is zero when \(g_t(x_1,\dots,x_N)\) is evaluated at the values of \(x_1,\dots,x_N\) where the given conditions must be satisfied. The function \(h_1(x_1,\dots,x_N)\) should alone make \(g_t(x_1,\dots,x_N)\) satisfy the conditions.

    +
    +
    +

    10.34. Network requirements

    +

    The network tries then the minimize the cost function following the +same ideas as described for the ODE case, but now with more than one +variables to consider. The concept still remains the same; find a set +of parameters \(P\) such that the expression \(f\) in (17) is as +close to zero as possible.

    +

    As for the ODE case, the cost function is the mean squared error that +the network must try to minimize. The cost function for the network to +minimize is

    +
    +\[ +C\left(x_1, \dots, x_N, P\right) = \left( f\left(x_1, \, \dots \, , x_N, \frac{\partial g(x_1,\dots,x_N) }{\partial x_1}, \dots , \frac{\partial g(x_1,\dots,x_N) }{\partial x_N}, \frac{\partial g(x_1,\dots,x_N) }{\partial x_1\partial x_2}, \, \dots \, , \frac{\partial^n g(x_1,\dots,x_N) }{\partial x_N^n} \right) \right)^2 +\]
    +
    +
    +

    10.35. More details

    +

    If we let \(\boldsymbol{x} = \big( x_1, \dots, x_N \big)\) be an array containing the values for \(x_1, \dots, x_N\) respectively, the cost function can be reformulated into the following:

    +
    +\[ +C\left(\boldsymbol{x}, P\right) = f\left( \left( \boldsymbol{x}, \frac{\partial g(\boldsymbol{x}) }{\partial x_1}, \dots , \frac{\partial g(\boldsymbol{x}) }{\partial x_N}, \frac{\partial g(\boldsymbol{x}) }{\partial x_1\partial x_2}, \, \dots \, , \frac{\partial^n g(\boldsymbol{x}) }{\partial x_N^n} \right) \right)^2 +\]
    +

    If we also have \(M\) different sets of values for \(x_1, \dots, x_N\), that is \(\boldsymbol{x}_i = \big(x_1^{(i)}, \dots, x_N^{(i)}\big)\) for \(i = 1,\dots,M\) being the rows in matrix \(X\), the cost function can be generalized into

    +
    +\[ +C\left(X, P \right) = \sum_{i=1}^M f\left( \left( \boldsymbol{x}_i, \frac{\partial g(\boldsymbol{x}_i) }{\partial x_1}, \dots , \frac{\partial g(\boldsymbol{x}_i) }{\partial x_N}, \frac{\partial g(\boldsymbol{x}_i) }{\partial x_1\partial x_2}, \, \dots \, , \frac{\partial^n g(\boldsymbol{x}_i) }{\partial x_N^n} \right) \right)^2. +\]
    +
    +
    +

    10.36. Example: The diffusion equation

    +

    In one spatial dimension, the equation reads

    +
    +\[ +\frac{\partial g(x,t)}{\partial t} = \frac{\partial^2 g(x,t)}{\partial x^2} +\]
    +

    where a possible choice of conditions are

    +
    +\[\begin{split} +\begin{align*} +g(0,t) &= 0 ,\qquad t \geq 0 \\ +g(1,t) &= 0, \qquad t \geq 0 \\ +g(x,0) &= u(x),\qquad x\in [0,1] +\end{align*} +\end{split}\]
    +

    with \(u(x)\) being some given function.

    +
    +
    +

    10.37. Defining the problem

    +

    For this case, we want to find \(g(x,t)\) such that

    + +
    +
    +\[ +\begin{equation} + \frac{\partial g(x,t)}{\partial t} = \frac{\partial^2 g(x,t)}{\partial x^2} +\end{equation} \label{diffonedim} \tag{18} +\]
    +

    and

    +
    +\[\begin{split} +\begin{align*} +g(0,t) &= 0 ,\qquad t \geq 0 \\ +g(1,t) &= 0, \qquad t \geq 0 \\ +g(x,0) &= u(x),\qquad x\in [0,1] +\end{align*} +\end{split}\]
    +

    with \(u(x) = \sin(\pi x)\).

    +

    First, let us set up the deep neural network. +The deep neural network will follow the same structure as discussed in the examples solving the ODEs. +First, we will look into how Autograd could be used in a network tailored to solve for bivariate functions.

    +
    +
    +

    10.38. Setting up the network using Autograd

    +

    The only change to do here, is to extend our network such that +functions of multiple parameters are correctly handled. In this case +we have two variables in our function to solve for, that is time \(t\) +and position \(x\). The variables will be represented by a +one-dimensional array in the program. The program will evaluate the +network at each possible pair \((x,t)\), given an array for the desired +\(x\)-values and \(t\)-values to approximate the solution at.

    +
    +
    +
    def sigmoid(z):
    +    return 1/(1 + np.exp(-z))
    +
    +def deep_neural_network(deep_params, x):
    +    # x is now a point and a 1D numpy array; make it a column vector
    +    num_coordinates = np.size(x,0)
    +    x = x.reshape(num_coordinates,-1)
    +
    +    num_points = np.size(x,1)
    +
    +    # N_hidden is the number of hidden layers
    +    N_hidden = np.size(deep_params) - 1 # -1 since params consist of parameters to all the hidden layers AND the output layer
    +
    +    # Assume that the input layer does nothing to the input x
    +    x_input = x
    +    x_prev = x_input
    +
    +    ## Hidden layers:
    +
    +    for l in range(N_hidden):
    +        # From the list of parameters P; find the correct weigths and bias for this layer
    +        w_hidden = deep_params[l]
    +
    +        # Add a row of ones to include bias
    +        x_prev = np.concatenate((np.ones((1,num_points)), x_prev ), axis = 0)
    +
    +        z_hidden = np.matmul(w_hidden, x_prev)
    +        x_hidden = sigmoid(z_hidden)
    +
    +        # Update x_prev such that next layer can use the output from this layer
    +        x_prev = x_hidden
    +
    +    ## Output layer:
    +
    +    # Get the weights and bias for this layer
    +    w_output = deep_params[-1]
    +
    +    # Include bias:
    +    x_prev = np.concatenate((np.ones((1,num_points)), x_prev), axis = 0)
    +
    +    z_output = np.matmul(w_output, x_prev)
    +    x_output = z_output
    +
    +    return x_output[0][0]
    +
    +
    +
    +
    +
    +
    +

    10.39. Setting up the network using Autograd; The trial solution

    +

    The cost function must then iterate through the given arrays +containing values for \(x\) and \(t\), defines a point \((x,t)\) the deep +neural network and the trial solution is evaluated at, and then finds +the Jacobian of the trial solution.

    +

    A possible trial solution for this PDE is

    +
    +\[ +g_t(x,t) = h_1(x,t) + x(1-x)tN(x,t,P) +\]
    +

    with \(A(x,t)\) being a function ensuring that \(g_t(x,t)\) satisfies our given conditions, and \(N(x,t,P)\) being the output from the deep neural network using weights and biases for each layer from \(P\).

    +

    To fulfill the conditions, \(A(x,t)\) could be:

    +
    +\[ +h_1(x,t) = (1-t)\Big(u(x) - \big((1-x)u(0) + x u(1)\big)\Big) = (1-t)u(x) = (1-t)\sin(\pi x) +\]
    +

    since \((0) = u(1) = 0\) and \(u(x) = \sin(\pi x)\).

    +
    +
    +

    10.40. Why the jacobian?

    +

    The Jacobian is used because the program must find the derivative of +the trial solution with respect to \(x\) and \(t\).

    +

    This gives the necessity of computing the Jacobian matrix, as we want +to evaluate the gradient with respect to \(x\) and \(t\) (note that the +Jacobian of a scalar-valued multivariate function is simply its +gradient).

    +

    In Autograd, the differentiation is by default done with respect to +the first input argument of your Python function. Since the points is +an array representing \(x\) and \(t\), the Jacobian is calculated using +the values of \(x\) and \(t\).

    +

    To find the second derivative with respect to \(x\) and \(t\), the +Jacobian can be found for the second time. The result is a Hessian +matrix, which is the matrix containing all the possible second order +mixed derivatives of \(g(x,t)\).

    +
    +
    +
    # Set up the trial function:
    +def u(x):
    +    return np.sin(np.pi*x)
    +
    +def g_trial(point,P):
    +    x,t = point
    +    return (1-t)*u(x) + x*(1-x)*t*deep_neural_network(P,point)
    +
    +# The right side of the ODE:
    +def f(point):
    +    return 0.
    +
    +# The cost function:
    +def cost_function(P, x, t):
    +    cost_sum = 0
    +
    +    g_t_jacobian_func = jacobian(g_trial)
    +    g_t_hessian_func = hessian(g_trial)
    +
    +    for x_ in x:
    +        for t_ in t:
    +            point = np.array([x_,t_])
    +
    +            g_t = g_trial(point,P)
    +            g_t_jacobian = g_t_jacobian_func(point,P)
    +            g_t_hessian = g_t_hessian_func(point,P)
    +
    +            g_t_dt = g_t_jacobian[1]
    +            g_t_d2x = g_t_hessian[0][0]
    +
    +            func = f(point)
    +
    +            err_sqr = ( (g_t_dt - g_t_d2x) - func)**2
    +            cost_sum += err_sqr
    +
    +    return cost_sum
    +
    +
    +
    +
    +
    +
    +

    10.41. Setting up the network using Autograd; The full program

    +

    Having set up the network, along with the trial solution and cost function, we can now see how the deep neural network performs by comparing the results to the analytical solution.

    +

    The analytical solution of our problem is

    +
    +\[ +g(x,t) = \exp(-\pi^2 t)\sin(\pi x) +\]
    +

    A possible way to implement a neural network solving the PDE, is given below. +Be aware, though, that it is fairly slow for the parameters used. +A better result is possible, but requires more iterations, and thus longer time to complete.

    +

    Indeed, the program below is not optimal in its implementation, but rather serves as an example on how to implement and use a neural network to solve a PDE. +Using TensorFlow results in a much better execution time. Try it!

    +
    +
    +
    import autograd.numpy as np
    +from autograd import jacobian,hessian,grad
    +import autograd.numpy.random as npr
    +from matplotlib import cm
    +from matplotlib import pyplot as plt
    +from mpl_toolkits.mplot3d import axes3d
    +
    +## Set up the network
    +
    +def sigmoid(z):
    +    return 1/(1 + np.exp(-z))
    +
    +def deep_neural_network(deep_params, x):
    +    # x is now a point and a 1D numpy array; make it a column vector
    +    num_coordinates = np.size(x,0)
    +    x = x.reshape(num_coordinates,-1)
    +
    +    num_points = np.size(x,1)
    +
    +    # N_hidden is the number of hidden layers
    +    N_hidden = np.size(deep_params) - 1 # -1 since params consist of parameters to all the hidden layers AND the output layer
    +
    +    # Assume that the input layer does nothing to the input x
    +    x_input = x
    +    x_prev = x_input
    +
    +    ## Hidden layers:
    +
    +    for l in range(N_hidden):
    +        # From the list of parameters P; find the correct weigths and bias for this layer
    +        w_hidden = deep_params[l]
    +
    +        # Add a row of ones to include bias
    +        x_prev = np.concatenate((np.ones((1,num_points)), x_prev ), axis = 0)
    +
    +        z_hidden = np.matmul(w_hidden, x_prev)
    +        x_hidden = sigmoid(z_hidden)
    +
    +        # Update x_prev such that next layer can use the output from this layer
    +        x_prev = x_hidden
    +
    +    ## Output layer:
    +
    +    # Get the weights and bias for this layer
    +    w_output = deep_params[-1]
    +
    +    # Include bias:
    +    x_prev = np.concatenate((np.ones((1,num_points)), x_prev), axis = 0)
    +
    +    z_output = np.matmul(w_output, x_prev)
    +    x_output = z_output
    +
    +    return x_output[0][0]
    +
    +## Define the trial solution and cost function
    +def u(x):
    +    return np.sin(np.pi*x)
    +
    +def g_trial(point,P):
    +    x,t = point
    +    return (1-t)*u(x) + x*(1-x)*t*deep_neural_network(P,point)
    +
    +# The right side of the ODE:
    +def f(point):
    +    return 0.
    +
    +# The cost function:
    +def cost_function(P, x, t):
    +    cost_sum = 0
    +
    +    g_t_jacobian_func = jacobian(g_trial)
    +    g_t_hessian_func = hessian(g_trial)
    +
    +    for x_ in x:
    +        for t_ in t:
    +            point = np.array([x_,t_])
    +
    +            g_t = g_trial(point,P)
    +            g_t_jacobian = g_t_jacobian_func(point,P)
    +            g_t_hessian = g_t_hessian_func(point,P)
    +
    +            g_t_dt = g_t_jacobian[1]
    +            g_t_d2x = g_t_hessian[0][0]
    +
    +            func = f(point)
    +
    +            err_sqr = ( (g_t_dt - g_t_d2x) - func)**2
    +            cost_sum += err_sqr
    +
    +    return cost_sum /( np.size(x)*np.size(t) )
    +
    +## For comparison, define the analytical solution
    +def g_analytic(point):
    +    x,t = point
    +    return np.exp(-np.pi**2*t)*np.sin(np.pi*x)
    +
    +## Set up a function for training the network to solve for the equation
    +def solve_pde_deep_neural_network(x,t, num_neurons, num_iter, lmb):
    +    ## Set up initial weigths and biases
    +    N_hidden = np.size(num_neurons)
    +
    +    ## Set up initial weigths and biases
    +
    +    # Initialize the list of parameters:
    +    P = [None]*(N_hidden + 1) # + 1 to include the output layer
    +
    +    P[0] = npr.randn(num_neurons[0], 2 + 1 ) # 2 since we have two points, +1 to include bias
    +    for l in range(1,N_hidden):
    +        P[l] = npr.randn(num_neurons[l], num_neurons[l-1] + 1) # +1 to include bias
    +
    +    # For the output layer
    +    P[-1] = npr.randn(1, num_neurons[-1] + 1 ) # +1 since bias is included
    +
    +    print('Initial cost: ',cost_function(P, x, t))
    +
    +    cost_function_grad = grad(cost_function,0)
    +
    +    # Let the update be done num_iter times
    +    for i in range(num_iter):
    +        cost_grad =  cost_function_grad(P, x , t)
    +
    +        for l in range(N_hidden+1):
    +            P[l] = P[l] - lmb * cost_grad[l]
    +
    +    print('Final cost: ',cost_function(P, x, t))
    +
    +    return P
    +
    +if __name__ == '__main__':
    +    ### Use the neural network:
    +    npr.seed(15)
    +
    +    ## Decide the vales of arguments to the function to solve
    +    Nx = 10; Nt = 10
    +    x = np.linspace(0, 1, Nx)
    +    t = np.linspace(0,1,Nt)
    +
    +    ## Set up the parameters for the network
    +    num_hidden_neurons = [100, 25]
    +    num_iter = 250
    +    lmb = 0.01
    +
    +    P = solve_pde_deep_neural_network(x,t, num_hidden_neurons, num_iter, lmb)
    +
    +    ## Store the results
    +    g_dnn_ag = np.zeros((Nx, Nt))
    +    G_analytical = np.zeros((Nx, Nt))
    +    for i,x_ in enumerate(x):
    +        for j, t_ in enumerate(t):
    +            point = np.array([x_, t_])
    +            g_dnn_ag[i,j] = g_trial(point,P)
    +
    +            G_analytical[i,j] = g_analytic(point)
    +
    +    # Find the map difference between the analytical and the computed solution
    +    diff_ag = np.abs(g_dnn_ag - G_analytical)
    +    print('Max absolute difference between the analytical solution and the network: %g'%np.max(diff_ag))
    +
    +    ## Plot the solutions in two dimensions, that being in position and time
    +
    +    T,X = np.meshgrid(t,x)
    +
    +    fig = plt.figure(figsize=(10,10))
    +    ax = fig.gca(projection='3d')
    +    ax.set_title('Solution from the deep neural network w/ %d layer'%len(num_hidden_neurons))
    +    s = ax.plot_surface(T,X,g_dnn_ag,linewidth=0,antialiased=False,cmap=cm.viridis)
    +    ax.set_xlabel('Time $t$')
    +    ax.set_ylabel('Position $x$');
    +
    +
    +    fig = plt.figure(figsize=(10,10))
    +    ax = fig.gca(projection='3d')
    +    ax.set_title('Analytical solution')
    +    s = ax.plot_surface(T,X,G_analytical,linewidth=0,antialiased=False,cmap=cm.viridis)
    +    ax.set_xlabel('Time $t$')
    +    ax.set_ylabel('Position $x$');
    +
    +    fig = plt.figure(figsize=(10,10))
    +    ax = fig.gca(projection='3d')
    +    ax.set_title('Difference')
    +    s = ax.plot_surface(T,X,diff_ag,linewidth=0,antialiased=False,cmap=cm.viridis)
    +    ax.set_xlabel('Time $t$')
    +    ax.set_ylabel('Position $x$');
    +
    +    ## Take some slices of the 3D plots just to see the solutions at particular times
    +    indx1 = 0
    +    indx2 = int(Nt/2)
    +    indx3 = Nt-1
    +
    +    t1 = t[indx1]
    +    t2 = t[indx2]
    +    t3 = t[indx3]
    +
    +    # Slice the results from the DNN
    +    res1 = g_dnn_ag[:,indx1]
    +    res2 = g_dnn_ag[:,indx2]
    +    res3 = g_dnn_ag[:,indx3]
    +
    +    # Slice the analytical results
    +    res_analytical1 = G_analytical[:,indx1]
    +    res_analytical2 = G_analytical[:,indx2]
    +    res_analytical3 = G_analytical[:,indx3]
    +
    +    # Plot the slices
    +    plt.figure(figsize=(10,10))
    +    plt.title("Computed solutions at time = %g"%t1)
    +    plt.plot(x, res1)
    +    plt.plot(x,res_analytical1)
    +    plt.legend(['dnn','analytical'])
    +
    +    plt.figure(figsize=(10,10))
    +    plt.title("Computed solutions at time = %g"%t2)
    +    plt.plot(x, res2)
    +    plt.plot(x,res_analytical2)
    +    plt.legend(['dnn','analytical'])
    +
    +    plt.figure(figsize=(10,10))
    +    plt.title("Computed solutions at time = %g"%t3)
    +    plt.plot(x, res3)
    +    plt.plot(x,res_analytical3)
    +    plt.legend(['dnn','analytical'])
    +
    +    plt.show()
    +
    +
    +
    +
    +
    +
    +

    10.42. Example: Solving the wave equation with Neural Networks

    +

    The wave equation is

    +
    +\[ +\frac{\partial^2 g(x,t)}{\partial t^2} = c^2\frac{\partial^2 g(x,t)}{\partial x^2} +\]
    +

    with \(c\) being the specified wave speed.

    +

    Here, the chosen conditions are

    +
    +\[\begin{split} +\begin{align*} + g(0,t) &= 0 \\ + g(1,t) &= 0 \\ + g(x,0) &= u(x) \\ + \frac{\partial g(x,t)}{\partial t} \Big |_{t = 0} &= v(x) +\end{align*} +\end{split}\]
    +

    where \(\frac{\partial g(x,t)}{\partial t} \Big |_{t = 0}\) means the derivative of \(g(x,t)\) with respect to \(t\) is evaluated at \(t = 0\), and \(u(x)\) and \(v(x)\) being given functions.

    +
    +
    +

    10.43. The problem to solve for

    +

    The wave equation to solve for, is

    + +
    +
    +\[ +\begin{equation} \label{wave} \tag{19} +\frac{\partial^2 g(x,t)}{\partial t^2} = c^2 \frac{\partial^2 g(x,t)}{\partial x^2} +\end{equation} +\]
    +

    where \(c\) is the given wave speed. +The chosen conditions for this equation are

    + +
    +
    +\[\begin{split} +\begin{aligned} +g(0,t) &= 0, &t \geq 0 \\ +g(1,t) &= 0, &t \geq 0 \\ +g(x,0) &= u(x), &x\in[0,1] \\ +\frac{\partial g(x,t)}{\partial t}\Big |_{t = 0} &= v(x), &x \in [0,1] +\end{aligned} \label{condwave} \tag{20} +\end{split}\]
    +

    In this example, let \(c = 1\) and \(u(x) = \sin(\pi x)\) and \(v(x) = -\pi\sin(\pi x)\).

    +
    +
    +

    10.44. The trial solution

    +

    Setting up the network is done in similar matter as for the example of solving the diffusion equation. +The only things we have to change, is the trial solution such that it satisfies the conditions from (20) and the cost function.

    +

    The trial solution becomes slightly different since we have other conditions than in the example of solving the diffusion equation. Here, a possible trial solution \(g_t(x,t)\) is

    +
    +\[ +g_t(x,t) = h_1(x,t) + x(1-x)t^2N(x,t,P) +\]
    +

    where

    +
    +\[ +h_1(x,t) = (1-t^2)u(x) + tv(x) +\]
    +

    Note that this trial solution satisfies the conditions only if \(u(0) = v(0) = u(1) = v(1) = 0\), which is the case in this example.

    +
    +
    +

    10.45. The analytical solution

    +

    The analytical solution for our specific problem, is

    +
    +\[ +g(x,t) = \sin(\pi x)\cos(\pi t) - \sin(\pi x)\sin(\pi t) +\]
    +
    +
    +

    10.46. Solving the wave equation - the full program using Autograd

    +
    +
    +
    import autograd.numpy as np
    +from autograd import hessian,grad
    +import autograd.numpy.random as npr
    +from matplotlib import cm
    +from matplotlib import pyplot as plt
    +from mpl_toolkits.mplot3d import axes3d
    +
    +## Set up the trial function:
    +def u(x):
    +    return np.sin(np.pi*x)
    +
    +def v(x):
    +    return -np.pi*np.sin(np.pi*x)
    +
    +def h1(point):
    +    x,t = point
    +    return (1 - t**2)*u(x) + t*v(x)
    +
    +def g_trial(point,P):
    +    x,t = point
    +    return h1(point) + x*(1-x)*t**2*deep_neural_network(P,point)
    +
    +## Define the cost function
    +def cost_function(P, x, t):
    +    cost_sum = 0
    +
    +    g_t_hessian_func = hessian(g_trial)
    +
    +    for x_ in x:
    +        for t_ in t:
    +            point = np.array([x_,t_])
    +
    +            g_t_hessian = g_t_hessian_func(point,P)
    +
    +            g_t_d2x = g_t_hessian[0][0]
    +            g_t_d2t = g_t_hessian[1][1]
    +
    +            err_sqr = ( (g_t_d2t - g_t_d2x) )**2
    +            cost_sum += err_sqr
    +
    +    return cost_sum / (np.size(t) * np.size(x))
    +
    +## The neural network
    +def sigmoid(z):
    +    return 1/(1 + np.exp(-z))
    +
    +def deep_neural_network(deep_params, x):
    +    # x is now a point and a 1D numpy array; make it a column vector
    +    num_coordinates = np.size(x,0)
    +    x = x.reshape(num_coordinates,-1)
    +
    +    num_points = np.size(x,1)
    +
    +    # N_hidden is the number of hidden layers
    +    N_hidden = np.size(deep_params) - 1 # -1 since params consist of parameters to all the hidden layers AND the output layer
    +
    +    # Assume that the input layer does nothing to the input x
    +    x_input = x
    +    x_prev = x_input
    +
    +    ## Hidden layers:
    +
    +    for l in range(N_hidden):
    +        # From the list of parameters P; find the correct weigths and bias for this layer
    +        w_hidden = deep_params[l]
    +
    +        # Add a row of ones to include bias
    +        x_prev = np.concatenate((np.ones((1,num_points)), x_prev ), axis = 0)
    +
    +        z_hidden = np.matmul(w_hidden, x_prev)
    +        x_hidden = sigmoid(z_hidden)
    +
    +        # Update x_prev such that next layer can use the output from this layer
    +        x_prev = x_hidden
    +
    +    ## Output layer:
    +
    +    # Get the weights and bias for this layer
    +    w_output = deep_params[-1]
    +
    +    # Include bias:
    +    x_prev = np.concatenate((np.ones((1,num_points)), x_prev), axis = 0)
    +
    +    z_output = np.matmul(w_output, x_prev)
    +    x_output = z_output
    +
    +    return x_output[0][0]
    +
    +## The analytical solution
    +def g_analytic(point):
    +    x,t = point
    +    return np.sin(np.pi*x)*np.cos(np.pi*t) - np.sin(np.pi*x)*np.sin(np.pi*t)
    +
    +def solve_pde_deep_neural_network(x,t, num_neurons, num_iter, lmb):
    +    ## Set up initial weigths and biases
    +    N_hidden = np.size(num_neurons)
    +
    +    ## Set up initial weigths and biases
    +
    +    # Initialize the list of parameters:
    +    P = [None]*(N_hidden + 1) # + 1 to include the output layer
    +
    +    P[0] = npr.randn(num_neurons[0], 2 + 1 ) # 2 since we have two points, +1 to include bias
    +    for l in range(1,N_hidden):
    +        P[l] = npr.randn(num_neurons[l], num_neurons[l-1] + 1) # +1 to include bias
    +
    +    # For the output layer
    +    P[-1] = npr.randn(1, num_neurons[-1] + 1 ) # +1 since bias is included
    +
    +    print('Initial cost: ',cost_function(P, x, t))
    +
    +    cost_function_grad = grad(cost_function,0)
    +
    +    # Let the update be done num_iter times
    +    for i in range(num_iter):
    +        cost_grad =  cost_function_grad(P, x , t)
    +
    +        for l in range(N_hidden+1):
    +            P[l] = P[l] - lmb * cost_grad[l]
    +
    +
    +    print('Final cost: ',cost_function(P, x, t))
    +
    +    return P
    +
    +if __name__ == '__main__':
    +    ### Use the neural network:
    +    npr.seed(15)
    +
    +    ## Decide the vales of arguments to the function to solve
    +    Nx = 10; Nt = 10
    +    x = np.linspace(0, 1, Nx)
    +    t = np.linspace(0,1,Nt)
    +
    +    ## Set up the parameters for the network
    +    num_hidden_neurons = [50,20]
    +    num_iter = 1000
    +    lmb = 0.01
    +
    +    P = solve_pde_deep_neural_network(x,t, num_hidden_neurons, num_iter, lmb)
    +
    +    ## Store the results
    +    res = np.zeros((Nx, Nt))
    +    res_analytical = np.zeros((Nx, Nt))
    +    for i,x_ in enumerate(x):
    +        for j, t_ in enumerate(t):
    +            point = np.array([x_, t_])
    +            res[i,j] = g_trial(point,P)
    +
    +            res_analytical[i,j] = g_analytic(point)
    +
    +    diff = np.abs(res - res_analytical)
    +    print("Max difference between analytical and solution from nn: %g"%np.max(diff))
    +
    +    ## Plot the solutions in two dimensions, that being in position and time
    +
    +    T,X = np.meshgrid(t,x)
    +
    +    fig = plt.figure(figsize=(10,10))
    +    ax = fig.gca(projection='3d')
    +    ax.set_title('Solution from the deep neural network w/ %d layer'%len(num_hidden_neurons))
    +    s = ax.plot_surface(T,X,res,linewidth=0,antialiased=False,cmap=cm.viridis)
    +    ax.set_xlabel('Time $t$')
    +    ax.set_ylabel('Position $x$');
    +
    +
    +    fig = plt.figure(figsize=(10,10))
    +    ax = fig.gca(projection='3d')
    +    ax.set_title('Analytical solution')
    +    s = ax.plot_surface(T,X,res_analytical,linewidth=0,antialiased=False,cmap=cm.viridis)
    +    ax.set_xlabel('Time $t$')
    +    ax.set_ylabel('Position $x$');
    +
    +
    +    fig = plt.figure(figsize=(10,10))
    +    ax = fig.gca(projection='3d')
    +    ax.set_title('Difference')
    +    s = ax.plot_surface(T,X,diff,linewidth=0,antialiased=False,cmap=cm.viridis)
    +    ax.set_xlabel('Time $t$')
    +    ax.set_ylabel('Position $x$');
    +
    +    ## Take some slices of the 3D plots just to see the solutions at particular times
    +    indx1 = 0
    +    indx2 = int(Nt/2)
    +    indx3 = Nt-1
    +
    +    t1 = t[indx1]
    +    t2 = t[indx2]
    +    t3 = t[indx3]
    +
    +    # Slice the results from the DNN
    +    res1 = res[:,indx1]
    +    res2 = res[:,indx2]
    +    res3 = res[:,indx3]
    +
    +    # Slice the analytical results
    +    res_analytical1 = res_analytical[:,indx1]
    +    res_analytical2 = res_analytical[:,indx2]
    +    res_analytical3 = res_analytical[:,indx3]
    +
    +    # Plot the slices
    +    plt.figure(figsize=(10,10))
    +    plt.title("Computed solutions at time = %g"%t1)
    +    plt.plot(x, res1)
    +    plt.plot(x,res_analytical1)
    +    plt.legend(['dnn','analytical'])
    +
    +    plt.figure(figsize=(10,10))
    +    plt.title("Computed solutions at time = %g"%t2)
    +    plt.plot(x, res2)
    +    plt.plot(x,res_analytical2)
    +    plt.legend(['dnn','analytical'])
    +
    +    plt.figure(figsize=(10,10))
    +    plt.title("Computed solutions at time = %g"%t3)
    +    plt.plot(x, res3)
    +    plt.plot(x,res_analytical3)
    +    plt.legend(['dnn','analytical'])
    +
    +    plt.show()
    +
    +
    +
    +
    +
    + +
    + + + + +
    + +
    +
    + + + +
    +
    +

    + + By Morten Hjorth-Jensen
    + + © Copyright 2020.
    +

    +
    +
    +
    + + +
    +
    + + + + + \ No newline at end of file diff --git a/doc/src/LectureNotes/_build/html/chapter11.html b/doc/src/LectureNotes/_build/html/chapter11.html new file mode 100644 index 000000000..da9037a15 --- /dev/null +++ b/doc/src/LectureNotes/_build/html/chapter11.html @@ -0,0 +1,899 @@ + + + + + + + + + 11. Data Analysis and Machine Learning: — Applied Machine Learning and Data Analysis + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + +
    + +
    + +
    + + + + + + + + + + + + +
    + + +
    +
    + Contents +
    + +
    +
    +
    +
    + +
    + + +
    +

    11. Data Analysis and Machine Learning:

    + + +

    Christian Forssén, Department of Physics, Chalmers University of Technology, Sweden

    + + **Morten Hjorth-Jensen**, Department of Physics, University of Oslo and Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University +

    Date: Dec 23, 2020

    +

    Copyright 1999-2020, Morten Hjorth-Jensen. Released under CC Attribution-NonCommercial 4.0 license

    +
    +
    +

    12. Elements of Bayesian theory and Bayesian Neural Networks

    +
    +

    12.1. Why Bayesian Statistics?

    +

    We have already made ourselves familiar with elements of a statistical +data analysis via quantities like the bias-variance tradeoff as well +as some central distribution functions such as the Normal +distribution, the binomial distribution and other probability +distribution functions.

    +

    In essentially all the Machine Learning algorithms we have studied, +our focus has been on a so-called frequentist approach, where +knowledge of an underlying likelihood function has not been +emphasized. Our data, whether we had a classification or a regression +problem, have been our central points of departure.

    +

    Here we wish to merge this approach with the derivation of a +likelihood function which can be used to make prediction on how our +system under study evolves. We will venture into the realm of what is +called Bayesian Neural Networks. To get an overarching view on what +this entails, the following figure conveys the essential differences +between a standard Neural network that we have met earlier and a +Bayesian Neural Network. In order to get there, we need to present +some of the basic elements of Bayesian statistics, starting with the +product rule and Bayes’ theorem.

    +
    +
    +

    12.2. Inference

    +

    Inference: +:
    +“the act of passing from one proposition, statement or judgment considered as true to another whose truth is believed to follow from that of the former” (Webster) +Do premises \(A, B, \ldots \to\) hypothesis, \(H\)?

    +

    Deductive inference: +:
    +Premises allow definite determination of truth/falsity of H (syllogisms, symbolic logic, Boolean algebra) +\(B(H|A,B,...) = 0\) or \(1\)

    +

    Inductive inference: +:
    +Premises bear on truth/falsity of H, but don’t allow its definite determination (weak syllogisms, analogies) +\(A, B, C, D\) share properties \(x, y, z\); \(E\) has properties \(x, y\) +\(\to\) \(E\) probably has property \(z\).

    +
    +
    +

    12.3. Statistical Inference

    +
      +
    • Quantify the strength of inductive inferences from facts, in the form of data (\(D\)), and other premises, e.g. models, to hypotheses about the phenomena producing the data.

    • +
    • Quantify via probabilities, or averages calculated using probabilities. Frequentists (\(\mathcal{F}\)) and Bayesians (\(\mathcal{B}\)) use probabilities very differently for this.

    • +
    • To the pioneers such as Bernoulli, Bayes and Laplace, a probability represented a degree-of-belief or plausability: how much they thought that something as true based on the evidence at hand. This is the Bayesian approach.

    • +
    • To the 19th century scholars, this seemed too vague and subjective. They redefined probability as the long run relative frequency with which an event occurred, given (infinitely) many repeated (experimental) trials.

    • +
    +
    +
    +

    12.4. Some history

    +

    Adapted from D.S. Sivia1:

    +
    +

    Although the frequency definition appears to be more objective, its range of validity is also far more limited. For example, Laplace used (his) probability theory to estimate the mass of Saturn, given orbital data that were available to him from various astronomical observatories. In essence, he computed the posterior pdf for the mass M , given the data and all the relevant background information I (such as a knowledge of the laws of classical mechanics): prob(M|{data},I); this is shown schematically in the figure [Fig. 1.2].

    +
    + + +

    + + +
    +

    To Laplace, the (shaded) area under the posterior pdf curve between \(m_1\) and \(m_2\) was a measure of how much he believed that the mass of Saturn lay in the range \(m_1 \le M \le m_2\). As such, the position of the maximum of the posterior pdf represents a best estimate of the mass; its width, or spread, about this optimal value gives an indication of the uncertainty in the estimate. Laplace stated that: ‘ … it is a bet of 11,000 to 1 that the error of this result is not 1/100th of its value.’ He would have won the bet, as another 150 years’ accumulation of data has changed the estimate by only 0.63%!

    +
    +
    +

    According to the frequency definition, however, we are not permitted to use probability theory to tackle this problem. This is because the mass of Saturn is a constant and not a random variable; therefore, it has no frequency distribution and so probability theory cannot be used.

    +

    If the pdf [of Fig. 1.2] had to be interpreted in terms of the frequency definition, we would have to imagine a large ensemble of universes in which everything remains constant apart from the mass of Saturn.

    +
    +
    +

    As this scenario appears quite far-fetched, we might be inclined to think of [Fig. 1.2] in terms of the distribution of the measurements of the mass in many repetitions of the experiment. Although we are at liberty to think about a problem in any way that facilitates its solution, or our understanding of it, having to seek a frequency interpretation for every data analysis problem seems rather perverse. +For example, what do we mean by the ‘measurement of the mass’ when the data consist of orbital periods? Besides, why should we have to think about many repetitions of an experiment that never happened? What we really want to do is to make the best inference of the mass given the (few) data that we actually have; this is precisely the Bayes and Laplace view of probability.

    +
    +
    +

    Faced with the realization that the frequency definition of probability theory did not permit most real-life scientific problems to be addressed, a new subject was invented — statistics! To estimate the mass of Saturn, for example, one has to relate the mass to the data through some function called the statistic; since the data are subject to ‘random’ noise, the statistic becomes the random variable to which the rules of probability the- ory can be applied. But now the question arises: How should we choose the statistic? The frequentist approach does not yield a natural way of doing this and has, therefore, led to the development of several alternative schools of orthodox or conventional statis- tics. The masters, such as Fisher, Neyman and Pearson, provided a variety of different principles, which has merely resulted in a plethora of tests and procedures without any clear underlying rationale. This lack of unifying principles is, perhaps, at the heart of the shortcomings of the cook-book approach to statistics that students are often taught even today.

    +
    +
    +
    +

    12.5. The Bayesian recipe

    +

    Assess hypotheses by calculating their probabilities \(p(H_i | \ldots)\) conditional on known and/or presumed information using the rules of probability theory.

    +

    Probability Theory Axioms: +Product (AND) rule : +:
    +\(p(A, B | I) = p(A|I) p(B|A, I) = p(B|I)p(A|B,I)\) +Should read \(p(A,B|I)\) as the probability for propositions \(A\) AND \(B\) being true given that \(I\) is true.

    +

    Sum (OR) rule: +:
    +\(p(A + B | I) = p(A | I) + p(B | I) - p(A, B | I)\) +\(p(A+B|I)\) is the probability that proposition \(A\) OR \(B\) is true given that \(I\) is true.

    +

    Normalization: +:
    +\(p(A|I) + p(\bar{A}|I) = 1\) +\(\bar{A}\) denotes the proposition that \(A\) is false.

    +
    +
    +

    12.6. Bayes’ theorem

    +

    Bayes’ theorem follows directly from the product rule

    +
    +\[\]
    +

    p(A|B,I) = \frac{p(B|A,I) p(A|I)}{p(B|I)}. +$\( +\)$

    +

    The importance of this property to data analysis becomes apparent if we replace \(A\) and \(B\) by hypothesis(\(H\)) and data(\(D\)):

    + +
    +
    +\[ +\begin{equation} +p(H|D,I) = \frac{p(D|H,I) p(H|I)}{p(D|I)}. +\label{eq:bayes} \tag{1} +\end{equation} +\]
    +

    The power of Bayes’ theorem lies in the fact that it relates the quantity of interest, the probability that the hypothesis is true given the data, to the term we have a better chance of being able to assign, the probability that we would have observed the measured data if the hypothesis was true.

    +

    The various terms in Bayes’ theorem have formal names.

    +
      +
    • The quantity on the far right, \(p(H|I)\), is called the prior probability; it represents our state of knowledge (or ignorance) about the truth of the hypothesis before we have analysed the current data.

    • +
    • This is modified by the experimental measurements through \(p(D|H,I)\), the likelihood function,

    • +
    • The denominator \(p(D|I)\) is called the evidence. It does not depend on the hypothesis and can be regarded as a normalization constant.

    • +
    • Together, these yield the posterior probability, \(p(H|D, I )\), representing our state of knowledge about the truth of the hypothesis in the light of the data.

    • +
    +

    In a sense, Bayes’ theorem encapsulates the process of learning.

    +
    +
    +

    12.7. The friends of Bayes’ theorem

    +

    Normalization: +:
    +\(\sum_i p(H_i|\ldots) = 1\).

    +

    Marginalization: +:
    +\(\sum_i p(A,H_i|I) = \sum_i p(H_i|A,I) p(A|I) = p(A|I)\).

    +

    Marginalization (continuum limit): +:
    +\(\int dx p(A,H(x)|I) = p(A|I)\).

    +

    In the above, \(H_i\) is an exclusive and exhaustive list of hypotheses. For example,let’s imagine that there are five candidates in a presidential election; then \(H_1\) could be the proposition that the first candidate will win, and so on. The probability that \(A\) is true, for example that unemployment will be lower in a year’s time (given all relevant information \(I\), but irrespective of whoever becomes president) is then given by \(\sum_i p(A,H_i|I)\).

    +

    In the continuum limit of propositions we must understand \(p(\ldots)\) as a pdf (probability density function).

    +

    Marginalization is a very powerful device in data analysis because it enables us to deal with nuisance parameters; that is, quantities which necessarily enter the analysis but are of no intrinsic interest. The unwanted background signal present in many experimental measurements are examples of nuisance parameters.

    +
    +
    +

    12.8. Inference With Parametric Models

    +

    Inductive inference with parametric models is a very important tool in the natural sciences.

    +
      +
    • Consider \(N\) different models \(M_i\) (\(i = 1, \ldots, N\)), each with parameters \(\boldsymbol{\alpha}_i\). Each of them implies a sampling distribution (conditional predictive distribution for possible data)

    • +
    +
    +\[\]
    +

    p(D|\boldsymbol{\alpha}_i, M_i) +$\( +\)$

    +
      +
    • The \(\boldsymbol{\alpha}_i\) dependence when we fix attention on the actual, observed data (\(D_\mathrm{obs}\)) is the likelihood function:

    • +
    +
    +\[\]
    +

    \mathcal{L}_i (\boldsymbol{\alpha}i) \equiv p(D\mathrm{obs}|\boldsymbol{\alpha}_i, M_i) +$\( +\)$

    +
      +
    • We may be uncertain about \(i\) (model uncertainty),

    • +
    • or uncertain about \(\boldsymbol{\alpha}_i\) (parameter uncertainty).

    • +
    +

    Parameter Estimation: +:
    +Premise = choice of model (pick specific \(i\)) +\(\Rightarrow\) What can we say about \(\boldsymbol{\alpha}_i\)?

    +

    Model comparison: +:
    +Premise = \(\{M_i\}\) +\(\Rightarrow\) What can we say about \(i\)?

    +

    Model adequacy: +:
    +Premise = \(M_1\) +\(\Rightarrow\) Is \(M_1\) adequate?

    +

    Hybrid Uncertainty: +:
    +Models share some common params: \(\boldsymbol{\alpha}_1 = \{ \boldsymbol{\varphi}, \boldsymbol{\eta}_i\}\) +\(\Rightarrow\) What can we say about \(\boldsymbol{\varphi}\)? (Systematic error is an example)

    +
    +
    +

    12.9. Illustrative examples with python code

    +
      +
    • Is this a fair coin? (analytical)

    • +
    • Flux from a star (single parameter, MCMC)

    • +
    • The lighthouse problem (two parameters, MCMC)

    • +
    • Linear fit with outliers (nuisance parameters)

    • +
    • +
    +
    +
    +

    12.10. Example: Is this a fair coin?

    +

    Let us begin with the analysis of data from a simple coin-tossing experiment. +Given that we had observed 6 heads in 8 flips, would you think it was a fair coin? By fair, we mean that we would be prepared to lay an even 1 : 1 bet on the outcome of a flip being a head or a tail. If we decide that the coin was fair, the question which follows naturally is how sure are we that this was so; if it was not fair, how unfair do we think it was? Furthermore, if we were to continue collecting data for this particular coin, observing the outcomes of additional flips, how would we update our belief on the fairness of the coin?

    +

    A sensible way of formulating this problem is to consider a large number of hypotheses about the range in which the bias-weighting of the coin might lie. If we denote the bias-weighting by \(H\), then \(H = 0\) and \(H = 1\) can represent a coin which produces a tail or a head on every flip, respectively. There is a continuum of possibilities for the value of H between these limits, with \(H = 0.5\) indicating a fair coin. Our state of knowledge about the fairness, or the degree of unfairness, of the coin is then completely summarized by specifying how much we believe these various propositions to be true.

    +

    Let us perform a computer simulation of a coin-tossing experiment. This provides the data that we will be analysing.

    +

    0

    +

    < +< +< +! +! +C +O +D +E +_ +B +L +O +C +K

    +

    p +y +c +o +d

    +
    +
    +
    np.random.seed(999)         # for reproducibility
    +a=0.6                       # biased coin
    +flips=np.random.rand(2**12) # simulates 4096 coin flips
    +heads=flips<a               # boolean array, heads[i]=True if flip i is heads
    +
    +
    +
    +
    +
    ---------------------------------------------------------------------------
    +NameError                                 Traceback (most recent call last)
    +<ipython-input-1-3f1158901148> in <module>
    +----> 1 np.random.seed(999)         # for reproducibility
    +      2 a=0.6                       # biased coin
    +      3 flips=np.random.rand(2**12) # simulates 4096 coin flips
    +      4 heads=flips<a               # boolean array, heads[i]=True if flip i is heads
    +
    +NameError: name 'np' is not defined
    +
    +
    +
    +
    +

    In the light of this data, our inference about the fairness of this coin is summarized by the conditional pdf: \(p(H|D,I)\). This is, of course, shorthand for the limiting case of a continuum of propositions for the value of \(H\); that is to say, the probability that \(H\) lies in an infinitesimally narrow range is given by \(p(H|D,I) dH\).

    +

    To estimate this posterior pdf, we need to use Bayes’ theorem (1). We will ignore the denominator \(p(D|I)\) as it does not involve bias-weighting explicitly, and it will therefore not affect the shape of the desired pdf. At the end we can evaluate the missing constant subsequently from the normalization condition

    + +
    +
    +\[ +\begin{equation} +\int_0^1 p(H|D,I) dH = 1. +\label{eq:coin_posterior_norm} \tag{2} +\end{equation} +\]
    +

    The prior pdf, \(p(H|I)\), represents what we know about the coin given only the information \(I\) that we are dealing with a ‘strange coin’. We could keep a very open mind about the nature of the coin; a simple probability assignment which reflects this is a uniform, or flat, prior

    + +
    +
    +\[\begin{split} +\begin{equation} +p(H|I) = \left\{ \begin{array}{ll} +1 & 0 \le H \le 1, \\ +0 & \mathrm{otherwise}. +\end{array} \right. +\label{eq:coin_prior_uniform} \tag{3} +\end{equation} +\end{split}\]
    +

    We will get back later to the choice of prior and its effect on the analysis.

    +

    This prior state of knowledge, or ignorance, is modified by the data through the likelihood function \(p(D|H,I)\). It is a measure of the chance that we would have obtained the data that we actually observed, if the value of the bias-weighting was given (as known). If, in the conditioning information \(I\), we assume that the flips of the coin were independent events, so that the outcome of one did not influence that of another, then the probability of obtaining the data `R heads in N tosses’ is given by the binomial distribution (we leave a formal definition of this to a statistics textbook)

    + +
    +
    +\[ +\begin{equation} +p(D|H,I) \propto H^R (1-H)^{N-R}. +\label{_auto1} \tag{4} +\end{equation} +\]
    +

    It seems reasonable because \(H\) is the chance of obtaining a head on any flip, and there were \(R\) of them, and \(1-H\) is the corresponding probability for a tail, of which there were \(N-R\). We note that this binomial distribution also contains a normalization factor, but we will ignore it since it does not depend explicitly on \(H\), the quantity of interest. It will be absorbed by the normalization condition (2).

    +

    We perform the setup of this Bayesian framework on the computer.

    +
    +
    +
    def prior(H):
    +    p=np.zeros_like(H)
    +    p[(0<=x)&(x<=1)]=1      # allowed range: 0<=H<=1
    +    return p                # uniform prior
    +def likelihood(H,data):
    +    N = len(data)
    +    no_of_heads = sum(data)
    +    no_of_tails = N - no_of_heads
    +    return H**no_of_heads * (1-H)**no_of_tails
    +def posterior(H,data):
    +    p=prior(H)*likelihood(H,data)
    +    norm=np.trapz(p,H)
    +    return p/norm
    +
    +
    +
    +
    +

    The next step is to confront this setup with the simulated data. To get a feel for the result, it is instructive to see how the posterior pdf evolves as we obtain more and more data pertaining to the coin. The results of such an analyses is shown in Fig. fig:coinflipping.

    +
    +
    +
    x=np.linspace(0,1,100)
    +fig, axs = plt.subplots(nrows=4,ncols=3,sharex=True,sharey='row')
    +axs_vec=np.reshape(axs,-1)
    +axs_vec[0].plot(x,prior(x))
    +for ndouble in range(11):
    +    ax=axs_vec[1+ndouble]
    +    ax.plot(x,posterior(x,heads[:2**ndouble]))
    +    ax.text(0.1, 0.8, '$N={0}$'.format(2**ndouble), transform=ax.transAxes)
    +for row in range(4): axs[row,0].set_ylabel('$p(H|D_\mathrm{obs},I)$')
    +for col in range(3): axs[-1,col].set_xlabel('$H$')
    +
    +
    +
    +
    + + +
    +

    The evolution of the posterior pdf for the bias-weighting of a coin, as the number of data available increases. The figure on the top left-hand corner of each panel shows the number of data included in the analysis.

    + + +

    The panel in the top left-hand corner shows the posterior pdf for \(H\) given no data, i.e., it is the same as the prior pdf of Eq. (3). It indicates that we have no more reason to believe that the coin is fair than we have to think that it is double-headed, double-tailed, or of any other intermediate bias-weighting.

    +

    The first flip is obviously tails. At this point we have no evidence that the coin has a side with heads, as indicated by the pdf going to zero as \(H \to 1\). The second flip is obviously heads and we have now excluded both extreme options \(H=0\) (double-tailed) and \(H=1\) (double-headed). We can note that the posterior at this point has the simple form \(p(H|D,I) = H(1-H)\) for \(0 \le H \le 1\).

    +

    The remainder of Fig. fig:coinflipping shows how the posterior pdf evolves as the number of data analysed becomes larger and larger. We see that the position of the maximum moves around, but that the amount by which it does so decreases with the increasing number of observations. The width of the posterior pdf also becomes narrower with more data, indicating that we are becoming increasingly confident in our estimate of the bias-weighting. For the coin in this example, the best estimate of \(H\) eventually converges to 0.6, which, of course, was the value chosen to simulate the flips.

    +
    +
    +

    12.11. A few words on different priors

    +
      +
    • uniform

    • +
    • Gaussian

    • +
    • Jeffrey’s prior

    • +
    +

    Repeat the coin flipping experiment with other priors.

    +
    +
    +

    12.12. Bayesian parameter estimation (single parameter)

    +

    We will now consider the very important task of model parameter estimation using statistical inference. +[CF 1: maybe stress that model parameters are not random variables, and the meaning of parameter estimation is therefore very different between frequentist and bayesian approaches.]

    +

    Throughout this section we will consider a specific example that involves a model with a single parameter: “Measured flux from a star”.

    +
    +

    12.12.1. Example: Measured flux from a star

    +

    Adapted from the blog Pythonic Perambulations by Jake VanderPlas.

    +

    Imagine that we point our telescope to the sky, and observe the light coming from a single star. For the time being, we’ll assume that the star’s true flux is constant with time, i.e. that is it has a fixed value \(F_\mathrm{true}\) (we’ll also ignore effects like sky noise and other sources of systematic error). We’ll assume that we perform a series of \(N\) measurements with our telescope, where the ith measurement reports the observed photon flux \(F_i\) and error \(e_i\)2. +The question is, given this set of measurements \(D = \{F_i, e_i\}\), what is our best estimate of the true flux \(F_\mathrm{true}\)?

    +

    Because the measurements are number counts, a Poisson distribution is a good approximation to the measurement process:

    +
    +
    +
    np.random.seed(1)      # for repeatability
    +F_true = 1000          # true flux, say number of photons measured in 1 second
    +N = 50                 # number of measurements
    +F = stats.poisson(F_true).rvs(N)
    +                       # N measurements of the flux
    +e = np.sqrt(F)         # errors on Poisson counts estimated via square root
    +
    +
    +
    +
    +

    Now let’s make a simple visualization of the “observed” data, see Fig. fig:flux.

    +
    +
    +
    fig, ax = plt.subplots()
    +ax.errorbar(F, np.arange(N), xerr=e, fmt='ok', ecolor='gray', alpha=0.5)
    +ax.vlines([F_true], 0, N, linewidth=5, alpha=0.2)
    +ax.set_xlabel("Flux");ax.set_ylabel("measurement number");
    +
    +
    +
    +
    + + +
    +

    Single photon counts (flux measurements).

    + + +

    These measurements each have a different error \(e_i\) which is estimated from Poisson statistics using the standard square-root rule. In this toy example we already know the true flux \(F_\mathrm{true}\), but the question is this: given our measurements and errors, what is our best estimate of the true flux?

    +

    Let’s take a look at the frequentist and Bayesian approaches to solving this.

    +
    +
    +

    12.12.2. Simple Photon Counts: Frequentist Approach

    +

    We’ll start with the classical frequentist maximum likelihood approach. Given a single observation \(D_i = (F_i, e_i)\), we can compute the probability distribution of the measurement given the true flux Ftrue given our assumption of Gaussian errors

    + +
    +
    +\[ +\begin{equation} +p(D_i | F_\mathrm{true}, I) = \frac{1}{\sqrt{2\pi e_i^2}} \exp \left( \frac{-(F_i-F_\mathrm{true})^2}{2e_i^2} \right). +\label{_auto2} \tag{5} +\end{equation} +\]
    +

    This should be read “the probability of \(D_i\) given \(F_\mathrm{true}\) +equals …”. You should recognize this as a normal distribution with mean \(F_\mathrm{true}\) and standard deviation \(e_i\).

    +

    We construct the likelihood function by computing the product of the probabilities for each data point

    + +
    +
    +\[ +\begin{equation} +\mathcal{L}(D | F_\mathrm{true}, I) = \prod_{i=1}^N p(D_i | F_\mathrm{true}, I), +\label{_auto3} \tag{6} +\end{equation} +\]
    +

    here \(D = \{D_i\}\) represents the entire set of measurements. Because the value of the likelihood can become very small, it is often more convenient to instead compute the log-likelihood. Combining the previous two equations and computing the log, we have

    + +
    +
    +\[ +\begin{equation} +\log\mathcal{L} = -\frac{1}{2} \sum_{i=1}^N \left[ \log(2\pi e_i^2) + \frac{(F_i-F_\mathrm{true})^2}{e_i^2} \right]. +\label{_auto4} \tag{7} +\end{equation} +\]
    +

    What we’d like to do is determine \(F_\mathrm{true}\) such that the likelihood is maximized. For this simple problem, the maximization can be computed analytically (i.e. by setting \(d\log\mathcal{L}/d F_\mathrm{true} = 0\)). This results in the following observed estimate of \(F_\mathrm{true}\)

    + +
    +
    +\[ +\begin{equation} +F_\mathrm{est} = \sum_{i=1}^N w_i F_i; \quad w_i = 1/e_i^2. +\label{_auto5} \tag{8} +\end{equation} +\]
    +

    Notice that in the special case of all errors \(e_i\) being equal, this reduces to

    + +
    +
    +\[ +\begin{equation} +F_\mathrm{est} = \frac{1}{N} \sum_{i=1} F_i. +\label{_auto6} \tag{9} +\end{equation} +\]
    +

    That is, in agreement with intuition, \(F_\mathrm{est}\) is simply the mean of the observed data when errors are equal.

    +

    We can go further and ask what the error of our estimate is. In the frequentist approach, this can be accomplished by fitting a Gaussian approximation to the likelihood curve at maximum; in this simple case this can also be solved analytically (the sum of Gaussians is also a Gaussian). It can be shown that the standard deviation of this Gaussian approximation is

    + +
    +
    +\[ +\begin{equation} +\sigma_\mathrm{est} = \sum_{i=1}^N w_i. +\label{_auto7} \tag{10} +\end{equation} +\]
    +

    These results are fairly simple calculations; let’s evaluate them for our toy dataset:

    +
    +
    +
    w=1./e**2
    +print("""
    +F_true = {0}
    +F_est = {1:.0f} +/- {2:.0f} (based on {3} measurements) """\
    +          .format(F_true, (w * F).sum() / w.sum(), w.sum() ** -0.5, N))
    +
    +
    +
    +
    +

    F_true = 1000 +F_est = 998 +/- 4 (based on 50 measurements)

    +

    We find that for 50 measurements of the flux, our estimate has an error of about 0.4% and is consistent with the input value.

    +
    +
    +

    12.12.3. Simple Photon Counts: Bayesian Approach

    +

    The Bayesian approach, as you might expect, begins and ends with probabilities. Our hypothesis is that the star has a constant flux \(F_\mathrm{true}\). It recognizes that what we fundamentally want to compute is our knowledge of the parameters in question given the data and other information (such as our knowledge of uncertainties for the observed values), i.e. in this case, \(p(F_\mathrm{true} | D,I)\). +Note that this formulation of the problem is fundamentally contrary to the frequentist philosophy, which says that probabilities have no meaning for model parameters like \(F_\mathrm{true}\). Nevertheless, within the Bayesian philosophy this is perfectly acceptable.

    +

    To compute this result, Bayesians next apply Bayes’ Theorem (1). +If we set the prior \(p(F_\mathrm{true}|I) \propto 1\) (a flat prior), we find +\(p(F_\mathrm{true}|D,I) \propto p(D | F_\mathrm{true},I) \equiv \mathcal{L}(D | F_\mathrm{true},I)\) +and the Bayesian probability is maximized at precisely the same value as the frequentist result! So despite the philosophical differences, we see that (for this simple problem at least) the Bayesian and frequentist point estimates are equivalent.

    +
    +
    +

    12.12.4. A note about priors

    +

    The prior allows inclusion of other information into the computation, which becomes very useful in cases where multiple measurement strategies are being combined to constrain a single model. The necessity to specify a prior, however, is one of the more controversial pieces of Bayesian analysis. +A frequentist will point out that the prior is problematic when no true prior information is available. Though it might seem straightforward to use a noninformative prior like the flat prior mentioned above, there are some [surprisingly subtleties](http://normaldeviate.wordpress.com/2013/07/13/lost-causes-in-statistics-ii-noninformative- priors/comment-page-1/) involved. It turns out that in many situations, a truly noninformative prior does not exist! Frequentists point out that the subjective choice of a prior which necessarily biases your result has no place in statistical data analysis. +A Bayesian would counter that frequentism doesn’t solve this problem, but simply skirts the question. Frequentism can often be viewed as simply a special case of the Bayesian approach for some (implicit) choice of the prior: a Bayesian would say that it’s better to make this implicit choice explicit, even if the choice might include some subjectivity.

    +
    +
    +

    12.12.5. Simple Photon Counts: Bayesian approach in practice

    +

    Leaving these philosophical debates aside for the time being, let’s address how Bayesian results are generally computed in practice. For a one parameter problem like the one considered here, it’s as simple as computing the posterior probability \(p(F_\mathrm{true} | D,I)\) as a function of \(F_\mathrm{true}\): this is the distribution reflecting our knowledge of the parameter \(F_\mathrm{true}\). +But as the dimension of the model grows, this direct approach becomes increasingly intractable. For this reason, Bayesian calculations often depend on sampling methods such as Markov Chain Monte Carlo (MCMC). For this practical example, let us apply an MCMC approach using Dan Foreman-Mackey’s emcee package. Keep in mind here that the goal is to generate a set of points drawn from the posterior probability distribution, and to use those points to determine the answer we seek. +To perform this MCMC, we start by defining Python functions for the prior \(p(F_\mathrm{true} | I)\), the likelihood \(p(D | F_\mathrm{true},I)\), and the posterior \(p(F_\mathrm{true} | D,I)\), noting that none of these need be properly normalized. Our model here is one-dimensional, but to handle multi-dimensional models we’ll define the model in terms of an array of parameters \(\boldsymbol{\alpha}\), which in this case is \(\boldsymbol{\alpha} = [F_\mathrm{true}]\)

    +
    +
    +
    def log_prior(alpha):
    +    return 0 # flat prior
    +
    +def log_likelihood(alpha, F, e):
    +    return -0.5 * np.sum(np.log(2 * np.pi * e ** 2) \
    +                             + (F - alpha[0]) ** 2 / e ** 2)
    +                             
    +def log_posterior(alpha, F, e):
    +    return log_prior(alpha) + log_likelihood(alpha, F, e)
    +
    +
    +
    +
    +

    Now we set up the problem, including generating some random starting guesses for the multiple chains of points.

    +
    +
    +
    ndim = 1      # number of parameters in the model
    +nwalkers = 50 # number of MCMC walkers
    +nburn = 1000  # "burn-in" period to let chains stabilize
    +nsteps = 2000 # number of MCMC steps to take
    +# we'll start at random locations between 0 and 2000
    +starting_guesses = 2000 * np.random.rand(nwalkers, ndim)
    +sampler = emcee.EnsembleSampler(nwalkers, ndim, log_posterior, args=[F,e])
    +sampler.run_mcmc(starting_guesses, nsteps)
    +# Shape of sampler.chain  = (nwalkers, nsteps, ndim)
    +# Flatten the sampler chain and discard burn-in points:
    +samples = sampler.chain[:, nburn:, :].reshape((-1, ndim))
    +
    +
    +
    +
    +

    If this all worked correctly, the array sample should contain a series of 50,000 points drawn from the posterior. Let’s plot them and check. See results in Fig. fig:flux-bayesian.

    +
    +
    +
    fig, ax = plt.subplots()
    +ax.hist(samples, bins=50, histtype="stepfilled", alpha=0.3, normed=True)
    +ax.set_xlabel(r'$F_\mathrm{est}$')
    +ax.set_ylabel(r'$p(F_\mathrm{est}|D,I)$')
    +
    +
    +
    +
    + + +
    +

    Bayesian posterior pdf (represented by a histogram of MCMC samples) from flux measurements.

    + + +
    +
    +

    12.12.6. Best estimates and confidence intervals

    +

    The posterior distribution from our Bayesian data analysis is the key quantity that encodes our inference about the values of the model parameters, given the data and the relevant background information. Often, however, we wish to summarize this result with just a few numbers: the best estimate and a measure of its reliability.

    +

    There are a few different options for this. The choice of the most appropriate one depends mainly on the shape of the posterior distribution:

    +

    Symmetric posterior pdfs: Since the probability (density) associated with any particular value of the parameter is a measure of how much we believe that it lies in the neighbourhood of that point, our best estimate is given by the maximum of the posterior pdf. If we denote the quantity of interest by \(X\), with a posterior pdf \(P =p(X|D,I)\), then the best estimate of its value \(X_0\) is given by the condition \(dP/dX|_{X=X_0}=0\). Strictly speaking, we should also check the sign of the second derivative to ensure that \(X_0\) represents a maximum.

    +

    To obtain a measure of the reliability of this best estimate, we need to look at the width or spread of the posterior pdf about \(X_0\). When considering the behaviour of any function in the neighbourhood of a particular point, it is often helpful to carry out a Taylor series expansion; this is simply a standard tool for (locally) approximating a complicated function by a low-order polynomial. The linear term is zero at the maximum and the quadratic term is often the dominating one determining the width of the posterior pdf. Ignoring all the higher-order terms we arrive at the Gaussian approximation

    + +
    +
    +\[ +\begin{equation} +p(X|D,I) \approx \frac{1}{\sigma\sqrt{2\pi}} \exp \left[ -\frac{(x-\mu)^2}{2\sigma^2} \right], +\label{_auto8} \tag{11} +\end{equation} +\]
    +

    where the mean \(\mu = X_0\) and the variance \(\sigma = \left( - \left. \frac{d^2L}{dX^2} \right|_{X_0} \right)^{-1/2}\), where \(L\) is the logarithm of the posterior \(P\). Our inference about the quantity of interest is conveyed very concisely, therefore, by the statement \(X = X_0 \pm \sigma\), and

    +
    +\[\]
    +

    p(X_0-\sigma < X < X_0+\sigma | D,I) = \int_{X_0-\sigma}^{X_0+\sigma} p(X|D,I) dX \approx 0.67. +$\( +\)$

    +

    Asymmetric posterior pdfs: While the maximum of the posterior (\(X_0\)) can still be regarded as giving the best estimate, the true value is now more likely to be on one side of this rather than the other. Alternatively one can compute the mean value, \(\langle X \rangle = \int X p(X|D,I) dX\), although this tends to overemphasise very long tails. The best option is probably a compromise that can be employed when having access to a large sample from the posterior (as provided by an MCMC), namely to give the median of this ensamble.

    +

    Furthermore, the concept of an error-bar does not seem appropriate in this case, as it implicitly entails the idea of symmetry. A good way of expressing the reliability with which a parameter can be inferred, for an asymmetric posterior pdf, is rather through a confidence interval. Since the area under the posterior pdf between \(X_1\) and \(X_2\) is proportional to how much we believe that \(X\) lies in that range, the shortest interval that encloses 67% of the area represents a sensible measure of the uncertainty of the estimate. Obviously we can choose to provide some other degree-of-belief that we think is relevant for the case at hand. Assuming that the posterior pdf has been normalized, to have unit area, we need to find \(X_1\) and \(X_2\) such that:

    +
    +\[\]
    +

    p(X_1 < X < X_2 | D,I) = \int_{X_1}^{X_2} p(X|D,I) dX \approx 0.67, +$\( +\)$

    +

    where the difference \(X_2 - X_1\) is as small as possible. The region \(X_1 < X < X_2\) is then called the shortest 67% confidence interval.

    +

    Multimodal posterior pdfs: We can sometimes obtain posteriors which are multimodal; i.e. contains several disconnected regions with large probabilities. There is no difficulty when one of the maxima is very much larger than the others: we can simply ignore the subsidiary solutions, to a good approximation, and concentrate on the global maximum. The problem arises when there are several maxima of comparable magnitude. What do we now mean by a best estimate, and how should we quantify its reliability? The idea of a best estimate and an error-bar, or even a confidence interval, is merely an attempt to summarize the posterior with just two or three numbers; sometimes this just can’t be done, and so these concepts are not valid. For the bimodal case we might be able to characterize the posterior in terms of a few numbers: two best estimates and their associated error-bars, or disjoint confidence intervals. For a general multimodal pdf, the most honest thing we can do is just display the posterior itself.

    +
    +
    +

    12.12.7. Simple Photon Counts: Best estimates and confidence intervals

    +

    To compute these numbers for our example, you would run:

    +
    +
    +
    sampper=np.percentile(samples, [2.5, 16.5, 50, 83.5, 97.5],axis=0).flatten()
    +print("""
    +F_true = {0}
    +Based on {1} measurements the posterior point estimates are:
    +...F_est = {2:.0f} +/- {3:.0f}
    +or using credible intervals:
    +...F_est = {4:.0f}          (posterior median) 
    +...F_est in [{5:.0f}, {6:.0f}] (67% credible interval) 
    +...F_est in [{7:.0f}, {8:.0f}] (95% credible interval) """\
    +          .format(F_true, N, np.mean(samples), np.std(samples), \
    +                      sampper[2], sampper[1], sampper[3], sampper[0], sampper[4]))
    +
    +
    +
    +
    +

    F_true = 1000 +Based on 50 measurements the posterior point estimates are: +...F_est = 998 +/- 4 +or using credible intervals: +...F_est = 998          (posterior median)
    +...F_est in [993, 1002] (67% credible interval)
    +...F_est in [989, 1006] (95% credible interval)

    +

    In this particular example, the posterior pdf is actually a Gaussian (since it is constructed as a product of Gaussians), and the mean and variance from the quadratic approximation will agree exactly with the frequentist approach.

    +

    From this final result you might come away with the impression that the Bayesian method is unnecessarily complicated, and in this case it certainly is. Using an MCMC sampler to characterize a one-dimensional normal distribution is a bit like using the Death Star to destroy a beach ball, but we did this here because it demonstrates an approach that can scale to complicated posteriors in many, many dimensions, and can provide nice results in more complicated situations where an analytic likelihood approach is not possible.

    +

    Furthermore, as data and models grow in complexity, the two approaches can diverge greatly.

    +
    +
    +
    +

    12.13. Bayesian parameter estimation (multiple parameters, covariance)

    +
      +
    • multidimensional posterior pdf:s

    • +
    • nuisance parameters (e.g. background subtraction?)

    • +
    • corner plots, covariance, correlations

    • +
    • best example?

    • +
    +
    +
    +

    12.14. Bayesian model selection

    +
      +
    • Bayesian evidence

    • +
    • Occam’s razor

    • +
    • Best example? How many spectral lines are there?

    • +
    +
    +
    +
    1
    +

    Sivia, Devinderjit, and John Skilling. Data Analysis : A Bayesian Tutorial, OUP Oxford, 2006

    +
    +
    2
    +

    We’ll make the reasonable assumption that errors are Gaussian. In a Frequentist perspective, \(e_i\) is the standard deviation of the results of a single measurement event in the limit of repetitions of that event. In the Bayesian perspective, \(e_i\) is the standard deviation of the (Gaussian) probability distribution describing our knowledge of that particular measurement given its observed value.

    +
    +
    +
    +
    + + + + +
    + +
    +
    + + + +
    +
    +

    + + By Morten Hjorth-Jensen
    + + © Copyright 2020.
    +

    +
    +
    +
    + + +
    +
    + + + + + \ No newline at end of file diff --git a/doc/src/LectureNotes/_build/html/chapter2.html b/doc/src/LectureNotes/_build/html/chapter2.html index 74589ccf1..7d3bd7ab6 100644 --- a/doc/src/LectureNotes/_build/html/chapter2.html +++ b/doc/src/LectureNotes/_build/html/chapter2.html @@ -125,6 +125,26 @@ 8. Convolutional Neural Networks +
  • + + 9. Recurrent Neural Networks + +
  • +
  • + + 10. Solving ODEs with Deep Learning + +
  • +
  • + + 11. Data Analysis and Machine Learning: + +
  • +
  • + + 12. Elements of Bayesian theory and Bayesian Neural Networks + +
  • @@ -1121,27 +1141,27 @@ uncorrelated.

    -
    2.1453055662574343
    -[[12.86665228 10.42534378 14.91184964  7.05197852 10.73905189  9.78942024
    -   2.99691286  8.42384711 18.16377739 12.166796  ]
    - [10.42534378  8.44724724 12.082487    5.71394166  8.70143262  7.93198333
    -   2.42828097  6.82551297 14.71739653  9.85827768]
    - [14.91184964 12.082487   17.28213796  8.17291407 12.44606006 11.34548129
    -   3.47328217  9.76284574 21.05097048 14.10074886]
    - [ 7.05197852  5.71394166  8.17291407  3.8650614   5.88587937  5.36540351
    -   1.64255353  4.61695766  9.95523663  6.6684    ]
    - [10.73905189  8.70143262 12.44606006  5.88587937  8.96326666  8.17066394
    -   2.50135015  7.03089888 15.16025642 10.15492225]
    - [ 9.78942024  7.93198333 11.34548129  5.36540351  8.17066394  7.44814941
    -   2.28016105  6.40917136 13.819667    9.25694395]
    - [ 2.99691286  2.42828097  3.47328217  1.64255353  2.50135015  2.28016105
    -   0.69804379  1.96209046  4.23072426  2.83390167]
    - [ 8.42384711  6.82551297  9.76284574  4.61695766  7.03089888  6.40917136
    -   1.96209046  5.51512534 11.89189544  7.96564848]
    - [18.16377739 14.71739653 21.05097048  9.95523663 15.16025642 13.819667
    -   4.23072426 11.89189544 25.64169777 17.17579438]
    - [12.166796    9.85827768 14.10074886  6.6684     10.15492225  9.25694395
    -   2.83390167  7.96564848 17.17579438 11.50500702]]
    +
    2.599907486910053
    +[[ 0.2319431   1.78702425  2.33555576  1.01612686  0.80805005  1.10075065
    +   1.70915039  0.60318841  0.62019593  1.49305147]
    + [ 1.78702425 13.76827179 17.99447691  7.82883097  6.22568649  8.48082175
    +  13.16828638  4.64731357  4.77834938 11.5033349 ]
    + [ 2.33555576 17.99447691 23.51792615 10.23191002  8.13667637 11.08403099
    +  17.21032448  6.07381797  6.24507555 15.03431202]
    + [ 1.01612686  7.82883097 10.23191002  4.45158225  3.54001199  4.82231328
    +   7.48767091  2.64252717  2.71703596  6.54095632]
    + [ 0.80805005  6.22568649  8.13667637  3.54001199  2.81510801  3.83482678
    +   5.95438729  2.10140515  2.16065644  5.20153566]
    + [ 1.10075065  8.48082175 11.08403099  4.82231328  3.83482678  5.22391907
    +   8.11124963  2.86259878  2.94331271  7.08569196]
    + [ 1.70915039 13.16828638 17.21032448  7.48767091  5.95438729  8.11124963
    +  12.59444676  4.44479575  4.57012136 11.00204953]
    + [ 0.60318841  4.64731357  6.07381797  2.64252717  2.10140515  2.86259878
    +   4.44479575  1.56864447  1.61287402  3.88281152]
    + [ 0.62019593  4.77834938  6.24507555  2.71703596  2.16065644  2.94331271
    +   4.57012136  1.61287402  1.65835067  3.9922914 ]
    + [ 1.49305147 11.5033349  15.03431202  6.54095632  5.20153566  7.08569196
    +  11.00204953  3.88281152  3.9922914   9.61098936]]
     
    @@ -1449,15 +1469,15 @@ more practically oriented methods like the blocking technique.

    -
    0.021442867969978376
    -4.117524456004779
    -0.06378292739195897
    -0.9888063524440697 9.919191379006188 17.823611314267136
    -2.969136019500522 3.214525177223236 9.842379203904565
    -[[ 0.98880635  2.96913602  3.21452518]
    - [ 2.96913602  9.91919138  9.8423792 ]
    - [ 3.21452518  9.8423792  17.82361131]]
    -[25.24964689  0.08489291  3.39706925]
    +
    0.09525604390305954
    +4.231031843972674
    +0.04124568972977915
    +0.831883346005529 8.296268771337688 5.337726521457732
    +2.4701318674515136 1.7159602029423742 5.229477584776403
    +[[0.83188335 2.47013187 1.7159602 ]
    + [2.47013187 8.29626877 5.22947758]
    + [1.7159602  5.22947758 5.33772652]]
    +[12.99430696  0.07864499  1.39292669]
     
    @@ -1864,7 +1884,7 @@ assumption for approximating \(\sigma
    -
    -0.04067115014325762 0.9243683507629109
    +
    0.054334900100894076 1.0092227336467725
     
    _images/chapter2_184_1.png diff --git a/doc/src/LectureNotes/_build/html/chapter3.html b/doc/src/LectureNotes/_build/html/chapter3.html index f50739533..b206f7591 100644 --- a/doc/src/LectureNotes/_build/html/chapter3.html +++ b/doc/src/LectureNotes/_build/html/chapter3.html @@ -125,6 +125,26 @@ 8. Convolutional Neural Networks +
  • + + 9. Recurrent Neural Networks + +
  • +
  • + + 10. Solving ODEs with Deep Learning + +
  • +
  • + + 11. Data Analysis and Machine Learning: + +
  • +
  • + + 12. Elements of Bayesian theory and Bayesian Neural Networks + +
  • @@ -650,8 +670,8 @@ developed in the 1970s, namely EISPACK and LINPACK. We describe them shortly he
    -
    [-0.36370241  0.57281693  0.31446735 -1.74797657 -1.47723222 -1.24113195
    - -0.714415   -1.26679543 -0.27301697  0.6793838 ]
    +
    [-2.57325284 -1.11383985  0.52678895 -0.47530983 -0.1807752   0.52810513
    + -1.50448048  0.33629261 -1.41402417 -0.39264297]
     
    diff --git a/doc/src/LectureNotes/_build/html/chapter4.html b/doc/src/LectureNotes/_build/html/chapter4.html index 4c1ebec41..acc3b9e60 100644 --- a/doc/src/LectureNotes/_build/html/chapter4.html +++ b/doc/src/LectureNotes/_build/html/chapter4.html @@ -125,6 +125,26 @@ 8. Convolutional Neural Networks +
  • + + 9. Recurrent Neural Networks + +
  • +
  • + + 10. Solving ODEs with Deep Learning + +
  • +
  • + + 11. Data Analysis and Machine Learning: + +
  • +
  • + + 12. Elements of Bayesian theory and Bayesian Neural Networks + +
  • @@ -1756,13 +1776,13 @@ but now splitting the data into a training set and a test set.

    Training R2
    -0.9999854211447763
    +0.9999863998248437
     Training MSE
    -6.298065171189058
    +6.805697972778246
     Test R2
    -0.9999855160996954
    +0.9999773431421539
     Test MSE
    -7.1872710004915445
    +4.962804899252701
     
    @@ -1893,7 +1913,7 @@ dtype: int64
    -
    <matplotlib.axes._subplots.AxesSubplot at 0x7f9dd7c37eb0>
    +
    <matplotlib.axes._subplots.AxesSubplot at 0x7fe6839db970>
     
    _images/chapter4_131_1.png @@ -2179,27 +2199,27 @@ techniques.

    MSE before scaling: 0.00
     R2 score before scaling 0.99
     Feature min values before scaling:
    - [1.00000000e+00 1.00405815e-03 3.33637629e-03 1.00813277e-06
    - 3.34991581e-06 1.11314068e-05 1.01222393e-09 3.36351028e-09
    - 1.11765797e-08 3.71385616e-08 1.01633169e-12 3.37715992e-12
    - 1.12219360e-11 3.72892756e-11 1.23908217e-10 1.02045611e-15
    - 3.39086494e-15 1.12674763e-14 3.74406011e-14 1.24411055e-13
    - 4.13404436e-13]
    + [1.00000000e+00 4.73875395e-04 1.62035199e-03 2.24557890e-07
    + 7.67844938e-07 2.62554056e-06 1.06412459e-10 3.63862824e-10
    + 1.24417907e-09 4.25429987e-09 5.04262460e-14 1.72425639e-13
    + 5.89585850e-13 2.01600803e-12 6.89346326e-12 2.38957572e-17
    + 8.17082679e-17 2.79390227e-16 9.55336603e-16 3.26664263e-15
    + 1.11698369e-14]
     Feature max values before scaling:
    - [1.         0.99985941 0.99746704 0.99971883 0.99732681 0.99494051
    - 0.99957828 0.99718659 0.99480062 0.99242037 0.99943775 0.99704639
    - 0.99466076 0.99228084 0.98990661 0.99929723 0.99690622 0.99452092
    - 0.99214133 0.98976744 0.98739922]
    + [1.         0.99909628 0.99839582 0.99819339 0.99749355 0.99679421
    + 0.9972913  0.9965921  0.9958934  0.99519518 0.99639003 0.99569147
    + 0.99499339 0.9942958  0.99359871 0.99548958 0.99479165 0.9940942
    + 0.99339724 0.99270078 0.9920048 ]
     Feature min values after scaling:
    - [ 0.         -1.79147165 -1.7862625  -1.1584177  -1.16385875 -1.16903529
    - -0.9111456  -0.91736698 -0.92355665 -0.92969742 -0.77335697 -0.77892437
    - -0.78453895 -0.79019355 -0.79588019 -0.6835654  -0.68819847 -0.69289982
    - -0.69766733 -0.70249839 -0.70738995]
    + [ 0.         -1.71950803 -1.74066137 -1.12098766 -1.13008641 -1.13882035
    + -0.88585974 -0.89326197 -0.90038244 -0.90721064 -0.75127414 -0.7579701
    + -0.76446674 -0.77075409 -0.77682281 -0.6609642  -0.66708788 -0.67306513
    + -0.67888673 -0.68454393 -0.69002844]
     Feature max values after scaling:
    - [0.         1.702894   1.66035996 2.19865243 2.16709986 2.13442274
    - 2.59980117 2.57660557 2.55254863 2.52759568 2.94821185 2.93060502
    - 2.91238065 2.89350743 2.8739528  3.26264844 3.24876534 3.23444979
    - 3.21967888 3.20442837 3.18867266]
    + [0.         1.75646602 1.64607128 2.30045841 2.19871569 2.09765001
    + 2.75230652 2.65433203 2.55670018 2.45952257 3.14599634 3.05079367
    + 2.95561862 2.86057207 2.76575615 3.49778287 3.40509201 3.31215604
    + 3.21906542 3.12591311 3.03279417]
     MSE after  scaling: 0.00
     R2 score for  scaled data: 0.99
     
    @@ -2789,10 +2809,10 @@ covariance matrix through the np.linalg.eig() function.

    -
    0.012893004091480358
    -4.036145788156587
    -[[0.84855665 2.43974599]
    - [2.43974599 8.11534493]]
    +
    0.13175867934658783
    +4.345411944186196
    +[[ 0.99370801  2.9978939 ]
    + [ 2.9978939  10.13547884]]
     
    @@ -2832,10 +2852,10 @@ a more brute force way. Here we scale the mean values for each column of the des
    -
    0.08534074521320528
    -1.494502745126961
    -[[1.         0.54933577]
    - [0.54933577 1.        ]]
    +
    0.07991186451576213
    +1.435691712612069
    +[[1.         0.69854547]
    + [0.69854547 1.        ]]
     
    @@ -2867,30 +2887,30 @@ this matrix we easily see that it is a positive definite matrix.

    -
    [[ 0.01162555 -0.25149407]
    - [ 0.32741231  1.04530907]
    - [-0.5034199  -1.57100552]
    - [ 1.67655824  6.4270278 ]
    - [-2.84730394 -8.72396496]
    - [ 0.71213034  4.19282793]
    - [ 0.6767474   0.58026128]
    - [ 0.05853864 -0.83340221]
    - [-0.2484568  -1.90992384]
    - [ 0.13616818  1.04436453]]
    +
    [[-0.35269644 -0.0359786 ]
    + [ 0.91157022  2.38965729]
    + [-0.68652791 -1.88459927]
    + [ 0.73533968  3.47606953]
    + [-0.59301581 -2.13696995]
    + [-0.37142517 -1.24766758]
    + [-0.12619024 -0.45164224]
    + [-1.74004988 -5.63952222]
    + [ 1.7194963   3.93948143]
    + [ 0.50349923  1.59117161]]
               0         1
    -0  0.011626 -0.251494
    -1  0.327412  1.045309
    -2 -0.503420 -1.571006
    -3  1.676558  6.427028
    -4 -2.847304 -8.723965
    -5  0.712130  4.192828
    -6  0.676747  0.580261
    -7  0.058539 -0.833402
    -8 -0.248457 -1.909924
    -9  0.136168  1.044365
    -        0       1
    -0  1.0000  0.9645
    -1  0.9645  1.0000
    +0 -0.352696 -0.035979
    +1  0.911570  2.389657
    +2 -0.686528 -1.884599
    +3  0.735340  3.476070
    +4 -0.593016 -2.136970
    +5 -0.371425 -1.247668
    +6 -0.126190 -0.451642
    +7 -1.740050 -5.639522
    +8  1.719496  3.939481
    +9  0.503499  1.591172
    +          0         1
    +0  1.000000  0.970341
    +1  0.970341  1.000000
     
    @@ -2950,37 +2970,37 @@ this matrix we easily see that it is a positive definite matrix.

         0         1         2         3         4         5         6         7   \
     0   0.0  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000   
    -1   0.0  0.067129  0.071920  0.066488  0.067965  0.069289  0.058136  0.058890   
    -2   0.0  0.071920  0.077903  0.072255  0.074320  0.076177  0.063662  0.064746   
    -3   0.0  0.066488  0.072255  0.070120  0.072252  0.074165  0.064037  0.065174   
    -4   0.0  0.067965  0.074320  0.072252  0.074718  0.076940  0.066275  0.067613   
    -5   0.0  0.069289  0.076177  0.074165  0.076940  0.079448  0.068289  0.069815   
    -6   0.0  0.058136  0.063662  0.064037  0.066275  0.068289  0.060371  0.061607   
    -7   0.0  0.058890  0.064746  0.065174  0.067613  0.069815  0.061607  0.062970   
    -8   0.0  0.059633  0.065798  0.066265  0.068894  0.071275  0.062784  0.064269   
    -9   0.0  0.060376  0.066836  0.067327  0.070137  0.072691  0.063919  0.065523   
    -10  0.0  0.049985  0.054935  0.056831  0.058951  0.060864  0.054874  0.056079   
    -11  0.0  0.050516  0.055671  0.057601  0.059851  0.061888  0.055712  0.057004   
    -12  0.0  0.051063  0.056417  0.058372  0.060747  0.062904  0.056542  0.057918   
    -13  0.0  0.051629  0.057177  0.059149  0.061648  0.063923  0.057370  0.058831   
    -14  0.0  0.052218  0.057957  0.059939  0.062558  0.064951  0.058203  0.059747   
    +1   0.0  0.080229  0.080679  0.087554  0.086417  0.085175  0.083141  0.081602   
    +2   0.0  0.080679  0.082259  0.089654  0.089067  0.088307  0.086044  0.084862   
    +3   0.0  0.087554  0.089654  0.100625  0.100093  0.099390  0.098651  0.097358   
    +4   0.0  0.086417  0.089067  0.100093  0.099970  0.099642  0.098705  0.097743   
    +5   0.0  0.085175  0.088307  0.099390  0.099642  0.099662  0.098566  0.097913   
    +6   0.0  0.083141  0.086044  0.098651  0.098705  0.098566  0.098847  0.098003   
    +7   0.0  0.081602  0.084862  0.097358  0.097743  0.097913  0.098003  0.097449   
    +8   0.0  0.080151  0.083732  0.096133  0.096822  0.097279  0.097201  0.096917   
    +9   0.0  0.078794  0.082667  0.094987  0.095957  0.096680  0.096453  0.096419   
    +10  0.0  0.076701  0.079987  0.093012  0.093523  0.093835  0.094703  0.094277   
    +11  0.0  0.075255  0.078808  0.091666  0.092450  0.093019  0.093698  0.093521   
    +12  0.0  0.073932  0.077731  0.090440  0.091477  0.092285  0.092793  0.092846   
    +13  0.0  0.072727  0.076752  0.089333  0.090604  0.091633  0.091986  0.092253   
    +14  0.0  0.071634  0.075869  0.088337  0.089826  0.091062  0.091273  0.091739   
     
               8         9         10        11        12        13        14  
     0   0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
    -1   0.059633  0.060376  0.049985  0.050516  0.051063  0.051629  0.052218  
    -2   0.065798  0.066836  0.054935  0.055671  0.056417  0.057177  0.057957  
    -3   0.066265  0.067327  0.056831  0.057601  0.058372  0.059149  0.059939  
    -4   0.068894  0.070137  0.058951  0.059851  0.060747  0.061648  0.062558  
    -5   0.071275  0.072691  0.060864  0.061888  0.062904  0.063923  0.064951  
    -6   0.062784  0.063919  0.054874  0.055712  0.056542  0.057370  0.058203  
    -7   0.064269  0.065523  0.056079  0.057004  0.057918  0.058831  0.059747  
    -8   0.065687  0.067056  0.057224  0.058233  0.059231  0.060226  0.061224  
    -9   0.067056  0.068537  0.058326  0.059418  0.060497  0.061573  0.062652  
    -10  0.057224  0.058326  0.050807  0.051634  0.052448  0.053259  0.054070  
    -11  0.058233  0.059418  0.051634  0.052522  0.053398  0.054270  0.055142  
    -12  0.059231  0.060497  0.052448  0.053398  0.054336  0.055268  0.056202  
    -13  0.060226  0.061573  0.053259  0.054270  0.055268  0.056262  0.057257  
    -14  0.061224  0.062652  0.054070  0.055142  0.056202  0.057257  0.058313  
    +1   0.080151  0.078794  0.076701  0.075255  0.073932  0.072727  0.071634  
    +2   0.083732  0.082667  0.079987  0.078808  0.077731  0.076752  0.075869  
    +3   0.096133  0.094987  0.093012  0.091666  0.090440  0.089333  0.088337  
    +4   0.096822  0.095957  0.093523  0.092450  0.091477  0.090604  0.089826  
    +5   0.097279  0.096680  0.093835  0.093019  0.092285  0.091633  0.091062  
    +6   0.097201  0.096453  0.094703  0.093698  0.092793  0.091986  0.091273  
    +7   0.096917  0.096419  0.094277  0.093521  0.092846  0.092253  0.091739  
    +8   0.096634  0.096370  0.093871  0.093345  0.092885  0.092491  0.092163  
    +9   0.096370  0.096324  0.093496  0.093186  0.092926  0.092718  0.092564  
    +10  0.093871  0.093496  0.091863  0.091208  0.090630  0.090128  0.089699  
    +11  0.093345  0.093186  0.091208  0.090769  0.090391  0.090075  0.089820  
    +12  0.092885  0.092926  0.090630  0.090391  0.090200  0.090057  0.089963  
    +13  0.092491  0.092718  0.090128  0.090075  0.090057  0.090076  0.090133  
    +14  0.092163  0.092564  0.089699  0.089820  0.089963  0.090133  0.090330  
     
    @@ -3330,10 +3350,10 @@ number \(i\) is left out. Usin
    -
    Runtime: 0.410282 sec
    +
    Runtime: 0.396214 sec
     Jackknife Statistics :
     original           bias      std. error
    - 100.139        100.129        0.148994
    + 99.9535        99.9435        0.150002
     
    @@ -3475,10 +3495,10 @@ theorem.

    -
    Runtime: 2.02233 sec
    +
    Runtime: 2.03201 sec
     Bootstrap Statistics :
     original           bias      std. error
    - 100.067  14.9691         100.07        0.150582
    +  100.07   15.041        100.069        0.149551
     
    ---------------------------------------------------------------------------
    diff --git a/doc/src/LectureNotes/_build/html/chapter5.html b/doc/src/LectureNotes/_build/html/chapter5.html
    index 884f12c3b..2fddb972a 100644
    --- a/doc/src/LectureNotes/_build/html/chapter5.html
    +++ b/doc/src/LectureNotes/_build/html/chapter5.html
    @@ -125,6 +125,26 @@
        8. Convolutional Neural Networks
       
      
    + 
  • + + 9. Recurrent Neural Networks + +
  • +
  • + + 10. Solving ODEs with Deep Learning + +
  • +
  • + + 11. Data Analysis and Machine Learning: + +
  • +
  • + + 12. Elements of Bayesian theory and Bayesian Neural Networks + +
  • diff --git a/doc/src/LectureNotes/_build/html/chapter6.html b/doc/src/LectureNotes/_build/html/chapter6.html index 8edbea2fb..b136b980b 100644 --- a/doc/src/LectureNotes/_build/html/chapter6.html +++ b/doc/src/LectureNotes/_build/html/chapter6.html @@ -125,6 +125,26 @@ 8. Convolutional Neural Networks +
  • + + 9. Recurrent Neural Networks + +
  • +
  • + + 10. Solving ODEs with Deep Learning + +
  • +
  • + + 11. Data Analysis and Machine Learning: + +
  • +
  • + + 12. Elements of Bayesian theory and Bayesian Neural Networks + +
  • @@ -2464,6 +2484,14 @@ Accuracy score on test set: 0.07777777777777778
    +
    +
    <ipython-input-5-16b8e3cda33a>:4: RuntimeWarning: overflow encountered in exp
    +  return 1/(1 + np.exp(-x))
    +
    +
    +_images/chapter6_134_1.png +_images/chapter6_134_2.png +
    @@ -2499,6 +2527,335 @@ performance overall.

    +
    +
    /Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:582: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.
    +  warnings.warn(
    +
    +
    +
    Learning rate  =  1e-05
    +Lambda =  1e-05
    +Accuracy score on test set:  0.18333333333333332
    +
    +
    +
    /Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:582: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.
    +  warnings.warn(
    +
    +
    +
    Learning rate  =  1e-05
    +Lambda =  0.0001
    +Accuracy score on test set:  0.18611111111111112
    +
    +
    +
    /Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:582: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.
    +  warnings.warn(
    +
    +
    +
    Learning rate  =  1e-05
    +Lambda =  0.001
    +Accuracy score on test set:  0.13055555555555556
    +
    +
    +
    /Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:582: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.
    +  warnings.warn(
    +
    +
    +
    Learning rate  =  1e-05
    +Lambda =  0.01
    +Accuracy score on test set:  0.24444444444444444
    +
    +
    +
    /Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:582: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.
    +  warnings.warn(
    +
    +
    +
    Learning rate  =  1e-05
    +Lambda =  0.1
    +Accuracy score on test set:  0.23333333333333334
    +
    +
    +
    /Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:582: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.
    +  warnings.warn(
    +
    +
    +
    Learning rate  =  1e-05
    +Lambda =  1.0
    +Accuracy score on test set:  0.12777777777777777
    +
    +
    +
    /Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:582: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.
    +  warnings.warn(
    +
    +
    +
    Learning rate  =  1e-05
    +Lambda =  10.0
    +Accuracy score on test set:  0.1527777777777778
    +
    +
    +
    /Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:582: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.
    +  warnings.warn(
    +
    +
    +
    Learning rate  =  0.0001
    +Lambda =  1e-05
    +Accuracy score on test set:  0.9111111111111111
    +
    +
    +
    /Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:582: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.
    +  warnings.warn(
    +
    +
    +
    Learning rate  =  0.0001
    +Lambda =  0.0001
    +Accuracy score on test set:  0.8888888888888888
    +
    +
    +
    /Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:582: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.
    +  warnings.warn(
    +
    +
    +
    Learning rate  =  0.0001
    +Lambda =  0.001
    +Accuracy score on test set:  0.8722222222222222
    +
    +
    +
    /Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:582: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.
    +  warnings.warn(
    +
    +
    +
    Learning rate  =  0.0001
    +Lambda =  0.01
    +Accuracy score on test set:  0.8305555555555556
    +
    +
    +
    /Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:582: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.
    +  warnings.warn(
    +
    +
    +
    Learning rate  =  0.0001
    +Lambda =  0.1
    +Accuracy score on test set:  0.8888888888888888
    +
    +
    +
    /Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:582: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.
    +  warnings.warn(
    +
    +
    +
    Learning rate  =  0.0001
    +Lambda =  1.0
    +Accuracy score on test set:  0.8805555555555555
    +
    +
    +
    /Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:582: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.
    +  warnings.warn(
    +
    +
    +
    Learning rate  =  0.0001
    +Lambda =  10.0
    +Accuracy score on test set:  0.8944444444444445
    +
    +
    +
    /Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:582: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.
    +  warnings.warn(
    +
    +
    +
    Learning rate  =  0.001
    +Lambda =  1e-05
    +Accuracy score on test set:  0.975
    +
    +
    +
    /Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:582: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.
    +  warnings.warn(
    +
    +
    +
    Learning rate  =  0.001
    +Lambda =  0.0001
    +Accuracy score on test set:  0.9777777777777777
    +
    +
    +
    /Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:582: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.
    +  warnings.warn(
    +
    +
    +
    Learning rate  =  0.001
    +Lambda =  0.001
    +Accuracy score on test set:  0.9805555555555555
    +
    +
    +
    /Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:582: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.
    +  warnings.warn(
    +
    +
    +
    Learning rate  =  0.001
    +Lambda =  0.01
    +Accuracy score on test set:  0.9861111111111112
    +
    +
    +
    /Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:582: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.
    +  warnings.warn(
    +
    +
    +
    Learning rate  =  0.001
    +Lambda =  0.1
    +Accuracy score on test set:  0.9805555555555555
    +
    +
    +
    /Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:582: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.
    +  warnings.warn(
    +
    +
    +
    Learning rate  =  0.001
    +Lambda =  1.0
    +Accuracy score on test set:  0.9777777777777777
    +
    +
    +
    /Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:582: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.
    +  warnings.warn(
    +
    +
    +
    Learning rate  =  0.001
    +Lambda =  10.0
    +Accuracy score on test set:  0.9444444444444444
    +
    +
    +
    /Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:582: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.
    +  warnings.warn(
    +
    +
    +
    Learning rate  =  0.01
    +Lambda =  1e-05
    +Accuracy score on test set:  0.9861111111111112
    +
    +
    +
    Learning rate  =  0.01
    +Lambda =  0.0001
    +Accuracy score on test set:  0.9888888888888889
    +
    +
    +
    Learning rate  =  0.01
    +Lambda =  0.001
    +Accuracy score on test set:  0.9888888888888889
    +
    +
    +
    Learning rate  =  0.01
    +Lambda =  0.01
    +Accuracy score on test set:  0.9861111111111112
    +
    +
    +
    Learning rate  =  0.01
    +Lambda =  0.1
    +Accuracy score on test set:  0.9888888888888889
    +
    +
    +
    Learning rate  =  0.01
    +Lambda =  1.0
    +Accuracy score on test set:  0.9722222222222222
    +
    +
    +
    Learning rate  =  0.01
    +Lambda =  10.0
    +Accuracy score on test set:  0.9527777777777777
    +
    +
    +
    Learning rate  =  0.1
    +Lambda =  1e-05
    +Accuracy score on test set:  0.8777777777777778
    +
    +
    +
    Learning rate  =  0.1
    +Lambda =  0.0001
    +Accuracy score on test set:  0.8388888888888889
    +
    +
    +
    Learning rate  =  0.1
    +Lambda =  0.001
    +Accuracy score on test set:  0.8916666666666667
    +
    +
    +
    Learning rate  =  0.1
    +Lambda =  0.01
    +Accuracy score on test set:  0.9111111111111111
    +
    +Learning rate  =  0.1
    +Lambda =  0.1
    +Accuracy score on test set:  0.9166666666666666
    +
    +
    +
    Learning rate  =  0.1
    +Lambda =  1.0
    +Accuracy score on test set:  0.9083333333333333
    +
    +
    +
    Learning rate  =  0.1
    +Lambda =  10.0
    +Accuracy score on test set:  0.7944444444444444
    +
    +
    +
    Learning rate  =  1.0
    +Lambda =  1e-05
    +Accuracy score on test set:  0.09166666666666666
    +
    +Learning rate  =  1.0
    +Lambda =  0.0001
    +Accuracy score on test set:  0.11388888888888889
    +
    +
    +
    Learning rate  =  1.0
    +Lambda =  0.001
    +Accuracy score on test set:  0.07777777777777778
    +
    +Learning rate  =  1.0
    +Lambda =  0.01
    +
    +
    +
    Accuracy score on test set:  0.14444444444444443
    +
    +Learning rate  =  1.0
    +Lambda =  0.1
    +Accuracy score on test set:  0.11944444444444445
    +
    +
    +
    Learning rate  =  1.0
    +Lambda =  1.0
    +Accuracy score on test set:  0.1361111111111111
    +
    +
    +
    Learning rate  =  1.0
    +Lambda =  10.0
    +Accuracy score on test set:  0.13055555555555556
    +
    +Learning rate  =  10.0
    +Lambda =  1e-05
    +Accuracy score on test set:  0.07777777777777778
    +
    +Learning rate  =  10.0
    +Lambda =  0.0001
    +Accuracy score on test set:  0.21388888888888888
    +
    +
    +
    Learning rate  =  10.0
    +Lambda =  0.001
    +Accuracy score on test set:  0.10555555555555556
    +
    +Learning rate  =  10.0
    +Lambda =  0.01
    +Accuracy score on test set:  0.07777777777777778
    +
    +Learning rate  =  10.0
    +Lambda =  0.1
    +Accuracy score on test set:  0.125
    +
    +
    +
    Learning rate  =  10.0
    +Lambda =  1.0
    +Accuracy score on test set:  0.1527777777777778
    +
    +
    +
    Learning rate  =  10.0
    +Lambda =  10.0
    +Accuracy score on test set:  0.17777777777777778
    +
    +
    +
    @@ -2542,6 +2899,10 @@ performance overall.

    +
    +_images/chapter6_138_0.png +_images/chapter6_138_1.png +
    @@ -2580,6 +2941,14 @@ how simple solving a machine learning problem can be.

    +
    +
      File "<ipython-input-13-6ea927cc6e88>", line 1
    +    pip3 install tensorflow
    +         ^
    +SyntaxError: invalid syntax
    +
    +
    +

    and/or if you use anaconda, just write (or install from the graphical user interface)

    diff --git a/doc/src/LectureNotes/_build/html/chapter7.html b/doc/src/LectureNotes/_build/html/chapter7.html index c6427dccb..c2c669c6d 100644 --- a/doc/src/LectureNotes/_build/html/chapter7.html +++ b/doc/src/LectureNotes/_build/html/chapter7.html @@ -125,6 +125,26 @@ 8. Convolutional Neural Networks +
  • + + 9. Recurrent Neural Networks + +
  • +
  • + + 10. Solving ODEs with Deep Learning + +
  • +
  • + + 11. Data Analysis and Machine Learning: + +
  • +
  • + + 12. Elements of Bayesian theory and Bayesian Neural Networks + +
  • diff --git a/doc/src/LectureNotes/_build/html/chapter8.html b/doc/src/LectureNotes/_build/html/chapter8.html index 6518e1815..dcc3bd69f 100644 --- a/doc/src/LectureNotes/_build/html/chapter8.html +++ b/doc/src/LectureNotes/_build/html/chapter8.html @@ -125,6 +125,26 @@ 8. Convolutional Neural Networks +
  • + + 9. Recurrent Neural Networks + +
  • +
  • + + 10. Solving ODEs with Deep Learning + +
  • +
  • + + 11. Data Analysis and Machine Learning: + +
  • +
  • + + 12. Elements of Bayesian theory and Bayesian Neural Networks + +
  • @@ -548,27 +568,27 @@ techniques.

    MSE before scaling: 0.01
     R2 score before scaling 0.94
     Feature min values before scaling:
    - [1.00000000e+00 2.52277631e-04 1.58998839e-03 6.36440033e-08
    - 4.01118504e-07 2.52806307e-06 1.60559584e-11 1.01193226e-10
    - 6.37773764e-10 4.01959093e-09 4.05055916e-15 2.55287874e-14
    - 1.60896055e-13 1.01405288e-12 6.39110289e-12 1.02186547e-18
    - 6.44034203e-18 4.05904756e-17 2.55822858e-16 1.61233230e-15
    - 1.01617794e-14]
    + [1.00000000e+00 3.86972479e-03 3.66528972e-03 1.49747700e-05
    + 1.41836625e-05 1.34343487e-05 5.79482386e-08 5.48868704e-08
    + 5.19872323e-08 4.92407803e-08 2.24243736e-10 2.12397083e-10
    + 2.01176282e-10 1.90548268e-10 1.80481726e-10 8.67761543e-13
    + 8.21918258e-13 7.78496845e-13 7.37369358e-13 6.98414609e-13
    + 6.61517814e-13]
     Feature max values before scaling:
    - [1.         0.99869632 0.999475   0.99739435 0.998172   0.99895027
    - 0.99609407 0.99687071 0.99764796 0.99842581 0.99479548 0.99557111
    - 0.99634735 0.99712419 0.99790164 0.99349859 0.99427321 0.99504844
    - 0.99582426 0.99660069 0.99737773]
    + [1.         0.99791107 0.99418827 0.99582651 0.99211148 0.98841032
    + 0.9937463  0.99003903 0.9863456  0.98266595 0.99167043 0.98797091
    + 0.9842852  0.98061323 0.97695496 0.9895989  0.98590711 0.98222909
    + 0.9785648  0.97491417 0.97127716]
     Feature min values after scaling:
    - [ 0.         -1.70327945 -1.70487638 -1.10269333 -1.11031464 -1.11779074
    - -0.8675412  -0.87387845 -0.88025384 -0.88666051 -0.73621263 -0.74081963
    - -0.74548023 -0.75019465 -0.75496285 -0.65064103 -0.65385832 -0.65711132
    - -0.66040159 -0.66373067 -0.66710007]
    + [ 0.         -1.66745992 -1.72823447 -1.09228638 -1.1114811  -1.1313648
    + -0.86506245 -0.87590574 -0.88698187 -0.89829265 -0.73687981 -0.74440021
    + -0.75205856 -0.75985475 -0.76778823 -0.65190491 -0.65755533 -0.66330693
    + -0.66916042 -0.67511627 -0.68117476]
     Feature max values after scaling:
    - [0.         1.7648157  1.69590827 2.29614193 2.24159129 2.18630067
    - 2.72674862 2.67767959 2.62822832 2.57838874 3.10180456 3.05384136
    - 3.0057178  2.95743601 2.90899738 3.44157349 3.39262419 3.3436382
    - 3.2946235  3.24558749 3.196537  ]
    + [0.         1.76330702 1.70952132 2.29506297 2.25330559 2.21033632
    + 2.73427311 2.69911557 2.66307432 2.6261167  3.11835914 3.08796041
    + 3.05688927 3.02512212 2.99263434 3.46490261 3.4379033  3.41038453
    + 3.38232999 3.35372259 3.32454443]
     MSE after  scaling: 0.00
     R2 score for  scaled data: 0.97
     
    @@ -683,9 +703,7 @@ Test set accuracy scaled data with Standar Scaler: 0.96
    Test set accuracy: 0.95
    -
    -
    -
    Test set accuracy scaled data: 0.96
    +Test set accuracy scaled data: 0.96
     
    /Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/sklearn/linear_model/_logistic.py:762: ConvergenceWarning: lbfgs failed to converge (status=1):
    @@ -953,10 +971,10 @@ covariance matrix through the np.linalg.eig() function.

    -
    0.07206099142503472
    -4.125937788943556
    -[[ 1.03889255  3.1254397 ]
    - [ 3.1254397  10.77395298]]
    +
    0.11455861677725063
    +4.414311328416008
    +[[1.04460586 2.98508511]
    + [2.98508511 9.60711152]]
     
    @@ -996,10 +1014,10 @@ a more brute force way. Here we scale the mean values for each column of the des
    -
    0.07865526085644693
    -1.4346285243728323
    -[[1.         0.63566281]
    - [0.63566281 1.        ]]
    +
    0.07650519724946082
    +1.5077307406836722
    +[[1.         0.63582252]
    + [0.63582252 1.        ]]
     
    @@ -1031,30 +1049,30 @@ this matrix we easily see that it is a positive definite matrix.

    -
    [[ 0.53680052  2.50858953]
    - [-0.62753667 -1.74895806]
    - [ 0.16570918  0.64706639]
    - [-0.27228985 -0.08345099]
    - [ 0.85643181  1.55737697]
    - [-0.329196   -2.18391809]
    - [ 0.92272798  2.91370357]
    - [-0.37864859 -0.25719203]
    - [-0.55226917 -1.4496257 ]
    - [-0.32172921 -1.9035916 ]]
    +
    [[-0.21054401 -1.67179046]
    + [-0.27924545 -1.98111498]
    + [-1.24089109 -3.51965915]
    + [ 2.17042981  6.77708985]
    + [-0.36489938 -0.63821317]
    + [-1.61222872 -5.67668711]
    + [-0.67184873 -0.62798419]
    + [ 1.21860807  4.36876959]
    + [ 0.0351748  -0.93789716]
    + [ 0.95544469  3.90748678]]
               0         1
    -0  0.536801  2.508590
    -1 -0.627537 -1.748958
    -2  0.165709  0.647066
    -3 -0.272290 -0.083451
    -4  0.856432  1.557377
    -5 -0.329196 -2.183918
    -6  0.922728  2.913704
    -7 -0.378649 -0.257192
    -8 -0.552269 -1.449626
    -9 -0.321729 -1.903592
    +0 -0.210544 -1.671790
    +1 -0.279245 -1.981115
    +2 -1.240891 -3.519659
    +3  2.170430  6.777090
    +4 -0.364899 -0.638213
    +5 -1.612229 -5.676687
    +6 -0.671849 -0.627984
    +7  1.218608  4.368770
    +8  0.035175 -0.937897
    +9  0.955445  3.907487
               0         1
    -0  1.000000  0.907143
    -1  0.907143  1.000000
    +0  1.000000  0.972249
    +1  0.972249  1.000000
     
    @@ -1114,37 +1132,37 @@ this matrix we easily see that it is a positive definite matrix.

         0         1         2         3         4         5         6         7   \
     0   0.0  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000   
    -1   0.0  0.076168  0.080935  0.078268  0.081921  0.085682  0.070727  0.073798   
    -2   0.0  0.080935  0.086925  0.081766  0.086005  0.090410  0.072900  0.076302   
    -3   0.0  0.078268  0.081766  0.085075  0.088305  0.091557  0.079623  0.082640   
    -4   0.0  0.081921  0.086005  0.088305  0.091884  0.095514  0.082116  0.085368   
    -5   0.0  0.085682  0.090410  0.091557  0.095514  0.099557  0.084565  0.088068   
    -6   0.0  0.070727  0.072900  0.079623  0.082116  0.084565  0.076371  0.078937   
    -7   0.0  0.073798  0.076302  0.082640  0.085368  0.088068  0.078937  0.081684   
    -8   0.0  0.077019  0.079892  0.085767  0.088751  0.091725  0.081567  0.084509   
    -9   0.0  0.080401  0.083686  0.089005  0.092271  0.095547  0.084258  0.087409   
    -10  0.0  0.062426  0.063699  0.072024  0.073913  0.075721  0.070361  0.072486   
    -11  0.0  0.065031  0.066507  0.074745  0.076802  0.078786  0.072797  0.075066   
    -12  0.0  0.067773  0.069474  0.077585  0.079825  0.082002  0.075324  0.077748   
    -13  0.0  0.070658  0.072612  0.080551  0.082990  0.085376  0.077944  0.080532   
    -14  0.0  0.073697  0.075932  0.083645  0.086302  0.088919  0.080656  0.083422   
    +1   0.0  0.062851  0.073533  0.065769  0.068538  0.069947  0.059538  0.060320   
    +2   0.0  0.073533  0.087625  0.078561  0.082559  0.084744  0.071705  0.072983   
    +3   0.0  0.065769  0.078561  0.072769  0.076696  0.079022  0.068407  0.069803   
    +4   0.0  0.068538  0.082559  0.076696  0.081211  0.083977  0.072511  0.074206   
    +5   0.0  0.069947  0.084744  0.079022  0.083977  0.087102  0.075127  0.077070   
    +6   0.0  0.059538  0.071705  0.068407  0.072511  0.075127  0.066156  0.067782   
    +7   0.0  0.060320  0.072983  0.069803  0.074206  0.077070  0.067782  0.069583   
    +8   0.0  0.060735  0.073737  0.070715  0.075353  0.078424  0.068928  0.070878   
    +9   0.0  0.060967  0.074217  0.071359  0.076188  0.079434  0.069792  0.071870   
    +10  0.0  0.052371  0.063245  0.061909  0.065807  0.068404  0.061247  0.062897   
    +11  0.0  0.052613  0.063714  0.062491  0.066554  0.069297  0.062003  0.063759   
    +12  0.0  0.052756  0.064027  0.062920  0.067118  0.069987  0.062592  0.064441   
    +13  0.0  0.052853  0.064260  0.063261  0.067574  0.070552  0.063079  0.065009   
    +14  0.0  0.052933  0.064453  0.063553  0.067966  0.071040  0.063502  0.065504   
     
               8         9         10        11        12        13        14  
     0   0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000  
    -1   0.077019  0.080401  0.062426  0.065031  0.067773  0.070658  0.073697  
    -2   0.079892  0.083686  0.063699  0.066507  0.069474  0.072612  0.075932  
    -3   0.085767  0.089005  0.072024  0.074745  0.077585  0.080551  0.083645  
    -4   0.088751  0.092271  0.073913  0.076802  0.079825  0.082990  0.086302  
    -5   0.091725  0.095547  0.075721  0.078786  0.082002  0.085376  0.088919  
    -6   0.081567  0.084258  0.070361  0.072797  0.075324  0.077944  0.080656  
    -7   0.084509  0.087409  0.072486  0.075066  0.077748  0.080532  0.083422  
    -8   0.087542  0.090669  0.074644  0.077376  0.080221  0.083181  0.086261  
    -9   0.090669  0.094040  0.076827  0.079721  0.082739  0.085887  0.089170  
    -10  0.074644  0.076827  0.065759  0.067867  0.070042  0.072284  0.074590  
    -11  0.077376  0.079721  0.067867  0.070098  0.072403  0.074782  0.077234  
    -12  0.080221  0.082739  0.070042  0.072403  0.074845  0.077371  0.079979  
    -13  0.083181  0.085887  0.072284  0.074782  0.077371  0.080053  0.082828  
    -14  0.086261  0.089170  0.074590  0.077234  0.079979  0.082828  0.085781  
    +1   0.060735  0.060967  0.052371  0.052613  0.052756  0.052853  0.052933  
    +2   0.073737  0.074217  0.063245  0.063714  0.064027  0.064260  0.064453  
    +3   0.070715  0.071359  0.061909  0.062491  0.062920  0.063261  0.063553  
    +4   0.075353  0.076188  0.065807  0.066554  0.067118  0.067574  0.067966  
    +5   0.078424  0.079434  0.068404  0.069297  0.069987  0.070552  0.071040  
    +6   0.068928  0.069792  0.061247  0.062003  0.062592  0.063079  0.063502  
    +7   0.070878  0.071870  0.062897  0.063759  0.064441  0.065009  0.065504  
    +8   0.072303  0.073408  0.064109  0.065065  0.065830  0.066473  0.067035  
    +9   0.073408  0.074615  0.065054  0.066094  0.066934  0.067645  0.068268  
    +10  0.064109  0.065054  0.057780  0.058594  0.059248  0.059799  0.060281  
    +11  0.065065  0.066094  0.058594  0.059478  0.060193  0.060800  0.061333  
    +12  0.065830  0.066934  0.059248  0.060193  0.060965  0.061622  0.062202  
    +13  0.066473  0.067645  0.059799  0.060800  0.061622  0.062326  0.062949  
    +14  0.067035  0.068268  0.060281  0.061333  0.062202  0.062949  0.063612  
     
    @@ -1341,10 +1359,10 @@ We can write our own code or simply use either the functionaly of numpy<
              0         1
    -0  3.884269  1.937050
    -1  1.937050  1.951359
    -[[3.88426936 1.93705016]
    - [1.93705016 1.95135877]]
    +0  3.963873  1.979586
    +1  1.979586  1.976796
    +[[3.96387325 1.97958566]
    + [1.97958566 1.97679551]]
     
    @@ -1371,8 +1389,8 @@ Our own code here is not very elegant and asks for obvious improvements. It is t
    Centered covariance using own code
    -[[3.88426936 1.93705016]
    - [1.93705016 1.95135877]]
    +[[3.96387325 1.97958566]
    + [1.97958566 1.97679551]]
     
    _images/chapter8_77_1.png @@ -1432,16 +1450,14 @@ questions.

    Eigenvalues of Covariance matrix
    -5.082577137078103
    -0.7530509884519185
    +5.185256249406441
    +0.7554125101643117
     First eigenvector
    -[0.85042593 0.5260948 ]
    +[0.85104821 0.52508756]
     Second eigenvector
    -[-0.5260948   0.85042593]
    -
    -
    -
    Eigenvector of largest eigenvalue
    -[-0.85042593 -0.5260948 ]
    +[-0.52508756  0.85104821]
    +Eigenvector of largest eigenvalue
    +[-0.85104821 -0.52508756]
     
    diff --git a/doc/src/LectureNotes/_build/html/chapter9.html b/doc/src/LectureNotes/_build/html/chapter9.html index e90eece7b..8b71ce520 100644 --- a/doc/src/LectureNotes/_build/html/chapter9.html +++ b/doc/src/LectureNotes/_build/html/chapter9.html @@ -38,6 +38,7 @@ + @@ -124,6 +125,26 @@ 8. Convolutional Neural Networks +
  • + + 9. Recurrent Neural Networks + +
  • +
  • + + 10. Solving ODEs with Deep Learning + +
  • +
  • + + 11. Data Analysis and Machine Learning: + +
  • +
  • + + 12. Elements of Bayesian theory and Bayesian Neural Networks + +
  • @@ -731,88 +752,88 @@ labels = (n_inputs) = (1797,)
    -
     1/12 [=>............................] - ETA: 0s - loss: 2.5817 - accuracy: 0.2500
    +
     1/12 [=>............................] - ETA: 0s - loss: 3.0150 - accuracy: 0.1250
     
    
    -12/12 [==============================] - 0s 917us/step - loss: 2.8078 - accuracy: 0.1139
    +12/12 [==============================] - 0s 958us/step - loss: 2.9441 - accuracy: 0.0722
     
    Learning rate =  1e-05
     Lambda =  1e-05
    -Test accuracy: 0.114
    +Test accuracy: 0.072
     
    -
     1/12 [=>............................] - ETA: 0s - loss: 3.0782 - accuracy: 0.1875
    +
     1/12 [=>............................] - ETA: 0s - loss: 3.3024 - accuracy: 0.0312
     
    
    -12/12 [==============================] - 0s 932us/step - loss: 3.3640 - accuracy: 0.1500
    +12/12 [==============================] - 0s 957us/step - loss: 3.0967 - accuracy: 0.1389
     
    Learning rate =  1e-05
     Lambda =  0.0001
    -Test accuracy: 0.150
    +Test accuracy: 0.139
     
    -
     1/12 [=>............................] - ETA: 0s - loss: 2.7005 - accuracy: 0.0312
    +
     1/12 [=>............................] - ETA: 0s - loss: 2.9008 - accuracy: 0.2188
     
    
    -12/12 [==============================] - 0s 933us/step - loss: 2.7588 - accuracy: 0.0944
    +12/12 [==============================] - 0s 1ms/step - loss: 3.4843 - accuracy: 0.1028
     
    Learning rate =  1e-05
     Lambda =  0.001
    -Test accuracy: 0.094
    +Test accuracy: 0.103
     
    -
     1/12 [=>............................] - ETA: 0s - loss: 3.9994 - accuracy: 0.1250
    +
     1/12 [=>............................] - ETA: 0s - loss: 3.7695 - accuracy: 0.1250
     
    
    -12/12 [==============================] - 0s 1ms/step - loss: 4.2041 - accuracy: 0.1028
    +12/12 [==============================] - 0s 968us/step - loss: 3.6647 - accuracy: 0.1417
     
    Learning rate =  1e-05
     Lambda =  0.01
    -Test accuracy: 0.103
    +Test accuracy: 0.142
     
    -
     1/12 [=>............................] - ETA: 0s - loss: 12.9177 - accuracy: 0.1250
    +
     1/12 [=>............................] - ETA: 0s - loss: 12.4141 - accuracy: 0.0938
     
    
    -12/12 [==============================] - 0s 939us/step - loss: 12.8693 - accuracy: 0.1056
    +12/12 [==============================] - 0s 960us/step - loss: 12.3084 - accuracy: 0.1028
     
    Learning rate =  1e-05
     Lambda =  0.1
    -Test accuracy: 0.106
    +Test accuracy: 0.103
     
    -
     1/12 [=>............................] - ETA: 0s - loss: 92.4325 - accuracy: 0.1250
    +
     1/12 [=>............................] - ETA: 0s - loss: 92.7441 - accuracy: 0.0938
     
    
    -12/12 [==============================] - 0s 2ms/step - loss: 92.4491 - accuracy: 0.1111
    +12/12 [==============================] - 0s 959us/step - loss: 91.7224 - accuracy: 0.1306
     
    Learning rate =  1e-05
     Lambda =  1.0
    -Test accuracy: 0.111
    +Test accuracy: 0.131
     
    -
     1/12 [=>............................] - ETA: 0s - loss: 514.5186 - accuracy: 0.0312
    +
     1/12 [=>............................] - ETA: 0s - loss: 514.1083 - accuracy: 0.0625
     
    
    -12/12 [==============================] - 0s 939us/step - loss: 514.2589 - accuracy: 0.1028
    +12/12 [==============================] - 0s 958us/step - loss: 513.9800 - accuracy: 0.1111
     
    Learning rate =  1e-05
     Lambda =  10.0
    -Test accuracy: 0.103
    +Test accuracy: 0.111
     
    @@ -1679,6 +1700,7 @@ of recurrent neural networks (see the link above and also
    diff --git a/doc/src/LectureNotes/_build/html/genindex.html b/doc/src/LectureNotes/_build/html/genindex.html index acf3d8d03..e4499bbc7 100644 --- a/doc/src/LectureNotes/_build/html/genindex.html +++ b/doc/src/LectureNotes/_build/html/genindex.html @@ -123,6 +123,26 @@ 8. Convolutional Neural Networks +
  • + + 9. Recurrent Neural Networks + +
  • +
  • + + 10. Solving ODEs with Deep Learning + +
  • +
  • + + 11. Data Analysis and Machine Learning: + +
  • +
  • + + 12. Elements of Bayesian theory and Bayesian Neural Networks + +
  • diff --git a/doc/src/LectureNotes/_build/html/objects.inv b/doc/src/LectureNotes/_build/html/objects.inv index c7cb8c33a06ed3e59f29fb4a6150d5cbeec631a2..2022fee48bf4061d8d9d9d3d2aaf222a4bec6e0f 100644 GIT binary patch delta 1011 zcmV@+k3q@6xxgncpE$dW6`Q2+a0 z$ubG4F^28VzF=(Wp8Iv~u^cT}W>NRR*!X>{BIx!Y3eWyp*i^t!TCL(dvRp~93a+wD zaE#%GSq4{q6L=-pOIU_i~`UaJ|Kalvf?(*-JBc-V<$mK)0>_R47me_8{7 zTEc%sYbg@iz_i7<11i@r=h|3^9aLS|fHG3KB#^a-vludFU=tS(Bc&`KFv*@3xMDcA*q;b|riGSm@f zL@ZCK7%>C!iZz!t@Rue0B+oLXEqukuDqYo%+^8jLrrlivjHl}a-_~Hg4GiMcdY2aS zEgxf`dS&{q#`IljI#6<{L~gzDZ}d%&vWfAhw-;=N!ha!DPpjFYzefut;zYCgBQAMN zeaFZCN$+ga&Z4n1rJjycrk`T9k{;kqW!kMwyWX^Wl&ZMKdscL-g))FUnrv!E8OMv& z9cK51T~O;btPQ%#ZyJ`*Let9idzRqQI-AE?&P9CuPo5Q2*GK$GYGCm=s!^r3HovP@ zTX+2f+y^+Z0X@NFk`yH8V8k6N{PG!AZnP68W5-4ds%Mc*0y-twT9GAe10y z-)Mk3a4S(Kg)65M=REaQqM0+Omp&8_Y}GoP^M3=v2^#o`=~PK7#1|8BAsDr+t=EeK zyao-Ou2grX;=;d?=mpg})5`;V24Nj3*(D{_mJ|C*(h{jPlSY&k_XJk%T}TQ$P)d_3 zFpDrLjBOL5Aj0P~6N)x&-nd_9Y4(Y}1>9Pytvh3^xLv?{ZD+U#1+}N^My+cjYK`jk ze}BnTqaOWR;b~NuKOrTJnz4sCG^#-Bac`XK|7w7vK-*fM<=Q5{xrD#VNq}qG^o+zE zYin`*N;pw``hME)bzmSE9WouO?vPTW!WtM-<2W7a5+?mQ9N|H7I_ViYuyu&j+U3$e z>Gz&}ZfL>a%jo7|Fs%)tZex{KjE;|#pKKes?by@t@cLmo9DQu%V7>dfdYaF2*N-hO z#!WP(#o2G8>v}(zN?Ks;Rvco3KIEsh{+kHtC?$c^t_tlYl h&j>b7;`9*`Kt6EMuI9}zmp}GuYs{`OhhN&X@YhbF`vw32 delta 986 zcmV<0110?32*e1Gcz@zH6n*Dc+?l>YvyiXdz9l5POJ~DofV9)6jIb|8jV!s64C{a2 zE6FDD))+&#(-#t3I_G{L$StUN~H}DE|)quJRs43=} z5+%`Ym3}dOSbu4if?XpRo@N3eLmgp8CH2LO5i=0q)$6)}{yNal^DI-^!fzN^rK{YL z8MQ&pw0lZ`@pKp9`v$J}f$NS_>0MaNmwbk0lU2|U4bTq(I#zO{L~cE}ig{Yb+)I$6 ziSe7q3${ez7^=5bSJS_}wGwfn+3FcLJf^zi^XT31qJNIFXzWs{m$Q`VmsoA3C-|v? z4l3xtLkGQ7#SPZ8Vo)sv2Oemqs2stMH>(F=kA+=R>1t?$F7tI@cvluJtUs~@d%I|! zmpK>l*`Ik3)$ z_^4Tm27mli&MTR1j~AN1awaXe98K2{&QA!TRH<8LXw2sp zGp~d5h?6Ap6}_9t4KeYAxv)CBa&dwyrJVgv1Js9mi8?7BnGp?{058Z1>@_!Ef^sLqjIpJ1~T)~S*M zQc`U>bzf*&YHH1-5h3Hgft5Q8NnyuIX;KAd5$1)lU0f8@@Hx$dqK)+j_v?`681FmK z?WEdL6Tz0-HSE?7x_gpSN1ATcx-O#Ds$Tz>OttFKzZITVh4~Ru(yAFph(oIibRPHC zxqtqz1~@9)w$Wx-tM@mT@N1X^xTQ_6Ox$&CBadGxZxo;ZI3ErBFcyq1nXaoIkV2!x z8kkVwI9=)zCjC7e;Yo73=^47P^{J<|i)Hj~G<>yL(}MBW>D|+K(da_c#wxBDT|ZKM zZshiJFJ_b5r^RIYsgr@-?$_*TzRX=c_EVUc-QV0j+#e in  +----> 1 np.random.seed(999) # for reproducibility + 2 a=0.6 # biased coin + 3 flips=np.random.rand(2**12) # simulates 4096 coin flips + 4 heads=flips<a # boolean array, heads[i]=True if flip i is heads + +NameError: name 'np' is not defined +NameError: name 'np' is not defined + diff --git a/doc/src/LectureNotes/_build/html/reports/chapter6.log b/doc/src/LectureNotes/_build/html/reports/chapter6.log index f568062dd..002670576 100644 --- a/doc/src/LectureNotes/_build/html/reports/chapter6.log +++ b/doc/src/LectureNotes/_build/html/reports/chapter6.log @@ -1,14 +1,3 @@ -Traceback (most recent call last): - File "/Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/nbclient/client.py", line 604, in _async_poll_for_reply - msg = await ensure_async(self.kc.shell_channel.get_msg(timeout=new_timeout)) - File "/Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/nbclient/util.py", line 85, in ensure_async - result = await obj - File "/Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/jupyter_client/asynchronous/channels.py", line 48, in get_msg - raise Empty -_queue.Empty - -During handling of the above exception, another exception occurred: - Traceback (most recent call last): File "/Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/jupyter_cache/executors/utils.py", line 51, in single_nb_execution executenb( @@ -22,18 +11,19 @@ Traceback (most recent call last): return future.result() File "/Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/nbclient/client.py", line 535, in async_execute await self.async_execute_cell( - File "/Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/nbclient/client.py", line 811, in async_execute_cell - exec_reply = await self.task_poll_for_reply - File "/Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/nbclient/client.py", line 628, in _async_poll_for_reply - await self._async_handle_timeout(timeout, cell) - File "/Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/nbclient/client.py", line 678, in _async_handle_timeout - raise CellTimeoutError.error_from_timeout_and_cell( -nbclient.exceptions.CellTimeoutError: A cell timed out while it was being executed, after 30 seconds. -The message was: Cell execution timed out. -Here is a preview of the cell contents: -------------------- -['eta_vals = np.logspace(-5, 1, 7)', 'lmbd_vals = np.logspace(-5, 1, 7)', '# store the models for later use', 'DNN_numpy = np.zeros((len(eta_vals), len(lmbd_vals)), dtype=object)', ''] -... -[' ', ' print("Learning rate = ", eta)', ' print("Lambda = ", lmbd)', ' print("Accuracy score on test set: ", accuracy_score(Y_test, test_predict))', ' print()'] -------------------- + File "/Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/nbclient/client.py", line 827, in async_execute_cell + self._check_raise_for_error(cell, exec_reply) + File "/Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/nbclient/client.py", line 735, in _check_raise_for_error + raise CellExecutionError.from_cell_and_msg(cell, exec_reply['content']) +nbclient.exceptions.CellExecutionError: An error occurred while executing the following cell: +------------------ +pip3 install tensorflow +------------------ + + File "", line 1 + pip3 install tensorflow + ^ +SyntaxError: invalid syntax + +SyntaxError: invalid syntax (, line 1) diff --git a/doc/src/LectureNotes/_build/html/search.html b/doc/src/LectureNotes/_build/html/search.html index 97a950d46..aa6673f02 100644 --- a/doc/src/LectureNotes/_build/html/search.html +++ b/doc/src/LectureNotes/_build/html/search.html @@ -128,6 +128,26 @@ 8. Convolutional Neural Networks +
  • + + 9. Recurrent Neural Networks + +
  • +
  • + + 10. Solving ODEs with Deep Learning + +
  • +
  • + + 11. Data Analysis and Machine Learning: + +
  • +
  • + + 12. Elements of Bayesian theory and Bayesian Neural Networks + +
  • diff --git a/doc/src/LectureNotes/_build/html/searchindex.js b/doc/src/LectureNotes/_build/html/searchindex.js index bae7a166b..02df29b79 100644 --- a/doc/src/LectureNotes/_build/html/searchindex.js +++ b/doc/src/LectureNotes/_build/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({docnames:["chapter1","chapter2","chapter3","chapter4","chapter5","chapter6","chapter7","chapter8","chapter9","testbook/_build/jupyter_execute/chapter1","testbook/_build/jupyter_execute/chapter2","testbook/_build/jupyter_execute/chapter3","testbook/_build/jupyter_execute/chapter4","testbook/_build/jupyter_execute/chapter5","testbook/_build/jupyter_execute/chapter6","testbook/_build/jupyter_execute/chapter7","testbook/_build/jupyter_execute/lecturenotes/lecturenotes/notebooks","testbook/_build/jupyter_execute/notebooks","testbook/chapter1","testbook/chapter2","testbook/chapter3","testbook/chapter4","testbook/chapter5","testbook/chapter6","testbook/chapter7","testbook/content","testbook/intro","testbook/lecturenotes/CONDUCT","testbook/lecturenotes/CONTRIBUTING","testbook/lecturenotes/README","testbook/lecturenotes/lecturenotes/content","testbook/lecturenotes/lecturenotes/intro","testbook/lecturenotes/lecturenotes/markdown","testbook/lecturenotes/lecturenotes/notebooks","testbook/markdown"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":3,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":2,"sphinx.domains.rst":2,"sphinx.domains.std":1,"sphinx.ext.intersphinx":1,sphinx:56},filenames:["chapter1.ipynb","chapter2.ipynb","chapter3.ipynb","chapter4.ipynb","chapter5.ipynb","chapter6.ipynb","chapter7.ipynb","chapter8.ipynb","chapter9.ipynb","testbook/_build/jupyter_execute/chapter1.ipynb","testbook/_build/jupyter_execute/chapter2.ipynb","testbook/_build/jupyter_execute/chapter3.ipynb","testbook/_build/jupyter_execute/chapter4.ipynb","testbook/_build/jupyter_execute/chapter5.ipynb","testbook/_build/jupyter_execute/chapter6.ipynb","testbook/_build/jupyter_execute/chapter7.ipynb","testbook/_build/jupyter_execute/lecturenotes/lecturenotes/notebooks.ipynb","testbook/_build/jupyter_execute/notebooks.ipynb","testbook/chapter1.ipynb","testbook/chapter2.ipynb","testbook/chapter3.ipynb","testbook/chapter4.ipynb","testbook/chapter5.ipynb","testbook/chapter6.ipynb","testbook/chapter7.ipynb","testbook/content.md","testbook/intro.md","testbook/lecturenotes/CONDUCT.md","testbook/lecturenotes/CONTRIBUTING.md","testbook/lecturenotes/README.md","testbook/lecturenotes/lecturenotes/content.md","testbook/lecturenotes/lecturenotes/intro.md","testbook/lecturenotes/lecturenotes/markdown.md","testbook/lecturenotes/lecturenotes/notebooks.ipynb","testbook/markdown.md"],objects:{},objnames:{},objtypes:{},terms:{"00000000e":[3,7],"000e":7,"00405815e":3,"00578340e":[],"00694659e":[],"00813277e":3,"00pm":26,"01118504e":7,"01193226e":7,"01222393e":3,"012e":7,"01347297e":[],"01405288e":7,"01443312e":[],"01617794e":7,"01633169e":3,"01959093e":7,"01968016e":7,"02004166e":[],"02045611e":3,"02176297e":[],"02186547e":7,"02599545e":[],"03123374e":[],"03233215e":[],"03256632e":5,"03288157e":[],"03446279e":[],"03705850e":[],"04029857e":[],"040e":7,"041e":7,"04719753e":[],"04722875e":[],"04904333e":[],"05055916e":7,"05246505e":[],"058e":7,"05904756e":7,"060e":7,"064e":7,"06648521e":[],"07106781e":3,"07557895e":[],"075e":7,"07968357e":[],"08248290e":3,"08318298e":5,"08678173e":[],"08915360e":[],"09013732e":[],"09284157e":[],"09358934e":[],"09507879e":[],"0_tlsccwai":26,"0_utc9il9i":26,"0x7f9dd7c37eb0":3,"0x7fad47b08730":[],"0x7fb5be1db040":[],"0x7fddb4c436d0":[],"0x7ff4f8410b20":[],"0x7ff6a7303b50":[],"1000s":3,"100m":[11,20],"10368860e":[],"10378326e":5,"10665316e":[],"10687329e":[],"10836834e":[],"10898112e":3,"10th":26,"10x":2,"112453549290521e":[12,21],"11314068e":3,"11487443e":[],"114e":7,"11507992e":5,"115e":7,"11705599e":[],"11765797e":3,"117e":7,"12219360e":3,"12403403e":[],"12471292e":[],"12541909e":[],"12674763e":3,"12868265e":[],"12908684e":[],"12cm":[10,19],"13037918e":7,"13404436e":3,"14549644e":7,"146e":7,"14g":3,"15657183e":[],"15751255e":[],"15g":3,"16214154e":[],"16496581e":3,"16b8e3cda33a":5,"17061481e":[],"17174962e":5,"17314f270d45":7,"17683028e":7,"18442813e":[],"18721828e":7,"19218307e":[],"19614372e":7,"1970s":[2,10,19],"19762810e":[],"198e":7,"1_1":5,"1_2":5,"1_2v2se359":26,"1_2v439nza":26,"1_3":5,"1_azwo1s2r":26,"1_b81t0tta":26,"1_d70czgce":26,"1_e1cs5784":26,"1_ftgzt035":26,"1_hxxec3uc":26,"1_i9hczn21":26,"1_j5ugthfg":26,"1_rz8vr2ht":26,"1_sp7p28vk":26,"1_t1pocrww":26,"1_t2l86862":26,"1_utivxb87":26,"1_w9xc8az7":26,"1_wk9trq9k":26,"1cm":[1,2,6,11,20],"1e4":3,"1kg":[10,19],"1kgm":[10,19],"1ms":8,"202e":7,"20686874e":[],"20745612e":[],"21351358e":[],"21635571e":[],"21814310e":[],"21869563e":[],"21st":26,"22164060e":[],"22421033e":[],"224805627923717e":[12,21],"22674158e":[],"226e":7,"228e":7,"23908217e":3,"23h":[15,24],"24411055e":3,"24623749e":[],"24629399e":[],"24790498e":[],"24h":[15,24],"252e":7,"254e":7,"2572e3a4b38d":5,"26349118e":[],"263e":7,"26519220e":[],"26888965e":[],"268e":7,"27564656e":[],"27881252e":[],"279e":7,"27n_":1,"28119384e":[],"28444646e":[],"28590170e":[],"28kg":[15,24],"29001174e":[],"29127820e":[],"2_1":5,"2_2":5,"2_3":5,"2_i":5,"2_m":1,"2_x":1,"2cm":[6,10,19],"2dimgrav":[14,23],"2dimhovv":[14,23],"2ff97f4bf03b":1,"2k_2":[13,22],"2k_3":[13,22],"2me":[14,23],"2meb":[14,23],"2mr":[14,23],"2mr_":[14,23],"2ms":8,"2nd":[13,22,26],"2v_":[11,20],"2v_x":[11,20],"2v_y":[11,20],"2x_ix_jy_iy_j":6,"2x_j":6,"2y_0":[10,19],"2y_j":6,"2z_":7,"30273573e":[],"30579019e":7,"30pm":26,"31819744e":7,"32218090e":[],"32849325e":[],"33026664e":7,"33066907e":3,"33291949e":[],"33381074e":[],"333e":7,"33583503e":[],"33608388e":[],"33637629e":3,"33851317e":[],"34991581e":3,"35186316e":[],"35938336e":[],"36351028e":3,"36440033e":7,"36648631e":[],"36816390e":[],"37689988e":[],"37715992e":3,"37773764e":7,"379e":7,"38189254e":[],"381e":7,"38483045e":7,"39086494e":3,"39110289e":7,"39377982e":[],"39860289e":7,"3rd":26,"40925064e":[],"41088348e":[],"412252157986472e":[12,21],"41241709e":[],"41511965e":5,"422e":7,"43297505e":[],"435e":7,"43821714e":[],"44034203e":7,"44786221e":7,"447e":7,"44970586e":5,"45035234e":[],"45426079e":[],"47269386e":[],"47580075e":[],"48974653e":[],"49887171e":[],"4ar":[14,23],"4dr":[14,23],"4f_0":[12,21],"4pm":26,"4th":26,"501e":7,"50446329e":[],"50470354e":[],"504e":7,"50565973e":7,"50pm":26,"50x10":5,"512e":7,"51355225e":[],"51502206e":[],"51737928e":[],"52131750e":[],"52177694e":[],"52277631e":7,"52491181e":[],"52533249e":[],"52583599e":[],"52783754e":[],"52806307e":7,"53990135e988":3,"54220685e":[],"54223480e":[],"54686289e":[],"55287874e":7,"55456211e":[],"55726683e":[],"55822858e":7,"55868382e":[],"56282700e":[],"56432255e":7,"565e":7,"56min":[15,24],"57072598e":[],"570e":7,"57425734e":3,"58130740e":[],"58458590e":[],"58473257e":[],"58928789e":[],"58934440e":[],"58977964e":7,"58998839e":7,"59310961e":7,"59766065e":[],"59775278e":[],"59958864e":[],"5cm":[1,13,22],"5th":26,"604e":7,"60505104e":[],"60559584e":7,"60896055e":7,"60996409e":[],"61028757e":7,"61233230e":7,"61445925e":[],"62113986e":[],"62496853e":[],"62790003e":[],"628e":7,"63164705e":[],"63177381e":[],"63748198e":[],"638e":7,"64043119e":[],"64x50":5,"65939208e":3,"66371431e":[],"66517501e":[],"66678115e":[],"67887686e":[],"67901631e":[],"67m":[15,24],"69069n_":1,"69095941e":7,"69238112e":7,"6n_":1,"6pm":26,"6th":26,"70287435e":[],"70865417e":[],"70896266e":7,"710e":7,"71385616e":3,"713e":7,"71833086e":[],"72347840e":[],"72352580e":[],"72892756e":3,"729e":7,"73212847e":[],"73374509e":[],"74406011e":3,"744e":7,"74784357e":[],"75209222e":[],"76071445e":[],"77350269e":3,"77667437e":[],"77804918e":7,"78512013e":[],"78920723e":[],"79318674e":7,"79464371e":[],"7th":26,"80872400e":[],"811e":7,"81402316e":7,"81862750e":[],"82725395e":[],"83131741e":[],"83194721e":7,"83259341e":7,"83286207e":[],"83323451e":[],"84045777e":[],"84355903e":5,"84443254e":5,"84683780e":[],"852e":7,"86195387e":7,"86797194e":[],"873e":7,"882e":7,"885e":7,"89045976e":[],"89354206e":[],"89456494e":[],"8th":26,"8x8":5,"903e":7,"90524667e":[],"90555053e":[],"90838144e":[],"91032829e":[],"91269450e":7,"917u":8,"91811329e":7,"92507116e":5,"92870110e":[],"92983892e":7,"930e":7,"932u":8,"933u":8,"938e":7,"93947492e":[],"939u":8,"94395333e":[],"94466097e":[],"94553659e":[],"948e":7,"95125898e":[],"954e":7,"95572537e":[],"955820c21e8b":8,"96064784e":[],"960e":7,"97624658e":[],"98010863e":[],"981e":7,"984e":7,"98658737e":[],"99126621e":7,"996e":7,"9th":26,"abstract":[5,9,18],"boolean":8,"break":[2,3,7,10,11,14,19,20,23],"byte":[2,10,19],"case":[0,2,3,4,5,7,8,9,11,12,13,14,15,18,20,21,22,23,24],"catch":2,"char":1,"class":[0,1,2,3,5,6,7,8,9,10,13,18,19,22,26],"const":[1,7],"default":[2,3,4,5,8,10,19,32,34],"final":[1,2,3,4,6,9,13,14,15,18,22,23,24],"float":[1,2,3,7,8,9,10,12,18,19,21],"function":[0,2,8,9,10,11,12,13,14,15,18,19,20,21,22,23,24,32,34],"import":[0,3,4,5,6,7,9,11,12,13,14,16,17,18,20,21,22,23,26,29,33],"int":[1,3,5,7,8,11,13,14,20,22,23],"long":[1,2,5,8,11,13,14,15,20,22,23,24],"new":[0,1,2,3,4,5,6,7,9,10,11,12,13,18,19,20,21,22],"null":1,"public":[0,2,10,19,27],"return":[1,2,3,5,6,7,8,9,10,11,12,13,14,18,19,20,21,22,23],"s\u00f8renssen":26,"short":[8,25,30],"super":3,"switch":[2,14,15,23,24],"throw":[1,11,13,15,20,22,24],"true":[1,2,3,4,5,6,7,8,12,13,14,15,21,22,23,24],"try":[0,1,2,4,5,6,7,9,10,11,13,14,18,19,20,22,23],"var":[1,3,7],"while":[0,1,2,3,5,6,7,8,11,12,13,15,20,21,22,24,26],AGE:3,AMS:26,Added:[11,20],Adding:[0,5],And:[0,1,3,8,9,10,18,19],Are:[7,11,20],BPS:26,Being:27,But:[1,2,3,5,7,11,12,15,16,17,20,21,24,33],CAS:[2,10,19],DIS:3,Doing:3,EoS:3,For:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,19,20,21,22,23,24,26,32,33,34],GPS:0,Going:[3,5],I_s:[13,22],Ising:5,Its:[5,7,8],MDS:7,NNs:5,N_s:6,Not:[0,2,3,7],ODE:[11,20],One:[0,1,3,4,5,6,7,8,12,13,14,15,21,22,23,24],PCs:7,RMS:1,Such:[1,3,5,9,11,18,20],That:[1,2,4,5,7,11,15,20,24],The:[0,2,9,10,14,18,19,23,26,27,28,29,32,34],Then:[1,2,3,5,6,7,10,14,15,19,23,24],There:[0,1,2,3,5,6,7,8,9,10,12,13,15,16,17,18,19,21,22,24,25,30,32,33,34],These:[0,1,2,3,5,6,7,8,9,10,11,13,14,15,18,19,20,22,23,24,26],Use:[0,8,14,23],Useful:3,Uses:8,Using:[2,3,6,8,10,11,12,13,14,15,19,20,21,22,23,24,27],With:[1,2,3,5,6,7,9,10,11,12,13,14,15,18,19,20,21,22,23,24],Yes:[0,11,20],__doc__:3,__future__:6,__init__:[3,5],__name__:3,_auto10:[3,5,11,12,13,14,20,21,22,23],_auto11:[3,11,12,13,14,20,21,22,23],_auto12:[11,12,13,14,20,21,22,23],_auto13:[3,11,12,13,14,20,21,22,23],_auto14:[11,12,13,14,20,21,22,23],_auto15:[11,12,13,14,20,21,22,23],_auto16:[11,13,14,20,22,23],_auto17:[11,13,14,20,22,23],_auto18:[11,13,14,20,22,23],_auto19:[11,13,20,22],_auto1:[1,3,4,5,11,12,13,14,15,20,21,22,23,24],_auto20:[11,13,20,22],_auto21:[11,13,20,22],_auto23:[13,22],_auto24:[13,22],_auto25:[13,22],_auto26:[13,22],_auto27:[13,22],_auto28:[13,22],_auto29:[13,22],_auto2:[1,3,5,11,12,13,14,15,20,21,22,23,24],_auto30:[13,22],_auto31:[13,22],_auto32:[13,22],_auto33:[13,22],_auto34:[13,22],_auto3:[3,5,11,12,13,14,15,20,21,22,23,24],_auto4:[3,5,11,12,13,14,15,20,21,22,23,24],_auto5:[3,5,11,12,13,14,20,21,22,23],_auto6:[3,5,11,12,13,14,20,21,22,23],_auto7:[3,5,11,12,13,14,20,21,22,23],_auto8:[3,5,11,12,13,14,20,21,22,23],_auto9:[3,5,11,12,13,14,20,21,22,23],_ax:3,_base:6,_build:29,_check_optimize_result:7,_compon:7,_datafram:[2,10,19],_lambda:3,_logist:7,_ratio:7,_setattr_cm:3,_subplot:3,_update_properti:3,_varianc:7,a_0:[3,12,21],a_1:[13,15,22,24],a_1a:[2,3],a_1x:[12,21],a_2:[13,15,22,24],a_2a:[2,3],a_2a_3:[12,21],a_2x:[12,21],a_3:[2,15,24],a_3a:3,a_3a_2:[12,21],a_4:2,a_4a:3,a_fc1:5,a_fc2:5,a_h:5,a_i:[2,5,10,12,15,19,21,24],a_j:5,a_ja_k:[12,21],a_k:5,a_n:[12,21],a_p:[13,22],a_x:[10,19],a_z:[10,19],aaverag:[10,19],abandon:5,abid:[1,28],abil:[0,2],abl:[1,2,3,4,5,11,13,14,20,22,23,26],abort:1,abotu:[15,24],about:[0,1,3,5,6,7,8,9,11,12,13,14,15,16,17,18,20,21,22,23,24,26,28,32,33,34],abov:[1,2,3,4,5,6,7,8,10,11,12,13,14,15,19,20,21,22,23,24],abovement:[3,9,15,18,24],abs:[2,3,9,12,18,21],absolut:[2,3,9,10,18,19],absorb:[13,14,15,22,23,24],abus:27,acccess:2,accelearatio:[10,19],acceler:[12,13,14,21,22,23,26],acceleromet:[15,24],accept:[0,3,8,11,20,27,32,34],access:[0,1,2,3,7,8],accid:[3,8],accommod:[13,22],accompani:[0,3],accomplish:[6,14,23],accord:[1,2,3,5,10,13,14,15,19,22,23,24],accordingli:7,account:[0,1,2,8,10,15,19,24,27],accumul:[1,5,9,18],accur:[1,3,8,12,21],accuraci:[0,2,3,5,7,8,12,21],accuracy_scor:[2,5],accuracy_score_numpi:5,achiev:[0,2,3,5,6,10,19],aco:[1,11,20],acquaint:0,acquir:[0,5,26],acr:3,across:[2,3,5,8,10,19],act:[5,10,12,13,14,15,19,21,22,23,24,26,27],action:[1,11,12,20,21,27,29],activ:[2,8,26],actual:[2,3,5,6,7,10,11,14,15,19,20,23,24],adam:8,adapt:[3,27],add:[0,1,2,3,5,6,7,10,11,12,13,15,19,20,21,22,24,32,34],add_:[16,17,33],add_graph:5,add_subplot:[4,5],added:[2,3,5,6,7,8,9,11,12,15,18,20,21,24],adding:[3,5,12,13,21,22],addit:[0,1,2,3,4,5,6,7,8,9,10,11,13,14,15,18,19,20,22,23,24,26],addition:5,address:[7,9,12,18,21,27],adjac:5,adjust:[11,13,14,20,22,23],admir:2,adopt:[10,19],advanc:[5,9,18,27],advantag:[3,5,8,11,20],afecionado:2,affect:[3,12,14,21,23],affin:[3,6,7,8],afford:8,aficionado:2,african:3,after:[0,1,2,3,5,7,8,10,12,13,14,19,21,22,23,26],afterward:[2,10,19],again:[0,1,2,3,4,5,6,7,12,13,15,21,22,24,32,34],against:[5,11,13,20,22],age:[0,2,3,27],agre:[1,13,22,28],aid:7,aim:[0,2,4,7,9,10,11,12,14,18,19,20,21,23],air:[12,13,15,21,22,24,26],aircraft:[15,24],airplan:8,akin:[13,22],algebra:[0,2,14,23],algo:[0,1],algorithm:[0,1,2,4,6,8,9,10,11,13,18,19,20,22,26],align:[1,3,4,6,16,17,27,33],all:[0,1,2,3,4,5,7,8,9,10,11,12,13,14,15,18,19,20,21,22,23,24,27,29,32,34],allevi:5,allow:[0,2,3,5,6,7,8,9,10,11,12,13,14,18,19,20,21,22,23,26,32,34],almost:[0,1,2,3,5,6,7],alon:[13,22],along:[2,3,7,8,10,12,14,15,19,21,23,24],alpha:[1,2,3,5,6,7,8,11,12,14,15,20,21,23,24],alpha_n:[13,22],alreadi:[1,2,5,10,11,13,19,20,22,32,34],also:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,26,32,33,34],alter:[1,5],altern:[2,3,5,6,7,10,11,12,19,20,21],although:[3,5,6,11,12,13,20,21,22],alwai:[0,1,2,3,5,8,10,11,12,14,19,20,21,23,26,28],amaz:0,ame2016:[2,3],american:3,among:[0,3,5,8],amongst:[14,23],amount:[3,6,8,12,13,15,21,22,24],amplitud:[11,13,15,20,22,24],an_:1,anaconda3:[3,6,7],anaconda:[2,5,10,19,26],analog:[14,23],analogu:[14,23],analys:[1,3],analysi:[2,4,5,8,9,10,11,14,18,19,20,23],analyt:[2,3,4,5,9,11,12,13,15,18,20,21,22,24,26],analyz:[0,1,2,3,5,8,11,20,26],ander:26,andrew:5,anew:[12,13,14,21,22,23],angl:[1,3,7,10,12,13,14,15,19,21,22,23,24],angmom:[14,23],angular:[11,13,14,15,20,22,23,24,26],anharmon:[13,22],ani:[0,1,2,3,4,5,6,8,11,12,13,14,15,20,21,22,23,24,27,28,32,34],anim:5,ann:5,annot:[2,3,5,6,7,8],anoth:[0,1,2,5,6,7,8,10,11,13,14,15,19,20,22,23,24,32,34],ans:1,ansatz:2,answer:[0,2,3,5,10,11,13,19,20,22],anticip:[8,10,19],antiparallel:[14,23],antisymmetri:[12,21],anymor:6,anyon:6,anyth:[1,5,28],apach:5,apart:7,api:[2,5,10,19],appar:[15,24],appear:[0,1,2,5,8,11,12,13,14,15,20,21,22,23,24,27],append:[1,2,6,8,10,19],appendix:[13,22],appl:0,appli:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,18,19,20,21,22,23,26,27],applic:[0,1,2,3,5,7,8,9,11,15,18,20,24,26],appoint:27,appreci:28,approach:[1,2,5,7,9,10,12,13,14,18,19,21,22,23],appropri:[1,3,5,11,20,27],approx:[1,3,7,11,12,13,14,15,20,21,22,23,24],approxim:[1,3,4,7,8,9,11,12,13,15,18,20,21,22,24],apt:[2,10,19],aragorn:[2,10,19],arang:[2,3,4,5,8,10,19],arbitrari:[1,5,6,8,11,13,14,15,20,22,23,24],arbitrarili:[2,5,7,14,23],architectur:8,arctan:[14,23],arctanh:[10,19],area:[0,2,8,11,12,14,20,21,23],areal:[14,23],arg:3,argc:1,argmax:[5,7],argsort:7,argu:5,argument:[1,3,5,7,8],argv:1,aris:[0,1,2,3,5,15,24],arithmet:2,arma:1,armadillo:1,around:[1,2,3,5,7,10,11,12,13,14,15,19,20,21,22,23,24],arrai:[1,3,5,6,8,9,12,13,14,16,17,18,21,22,23,33],arrang:[8,26],arriv:[1,2,7,9,18],arrow:[5,11,20],arrowprop:6,art:0,articl:[1,3,5,8,28],artifici:[0,2,4],artificialneuron:5,artist:3,arxiv:8,asarrai:2,ascii:[1,2],asid:[12,13,21,22],asin:[11,13,20,22],ask:[3,5,7,11,15,20,24],aspect:[2,9,11,18,20],assembl:[2,8],assert:8,assess:[0,3],assici:8,assign:[0,2,3,4,5,6,14,23,26],assist:26,associ:[1,2,3,5,15,24,32,34],assum:[1,2,3,4,5,6,7,8,10,11,12,13,14,15,19,20,21,22,23,24],assumpt:[0,1,2,7,8,15,24],ast:3,asteroid:[14,23],astronom:[12,21],asymmetr:[12,21],asymmetri:2,asymptot:[3,14,23],atoi:1,atom:[2,11,12,13,14,20,21,22,23],attack:27,attempt:[2,12,21],attent:[2,10,15,19,24,27],attitud:[0,9,18],attract:[2,14,23],attribut:3,attributeerror:3,audi:2,audio:8,auditori:[32,34],australia:[32,34],author:[0,1,2,5],authour:[0,2],auto:[1,7],autocor:1,autocorrelation_tim:1,autocorrelform:1,autocovari:1,autograd:[2,10,19],autom:[0,9,18,29],automag:[0,2,10,19],automat:[2,7,8,10,19,29],automobil:[8,11,20],autonom:8,avail:[0,2,3,5,7,9,10,18,19,26],avdt:[11,20],avenu:0,averag:[1,2,3,5,8,12,14,21,23],avg:1,avoid:[0,2,3,7,8,10,12,19,21],awai:[1,3,13,14,15,22,23,24],aws:26,axel:[11,20],axes:[3,6,7,8,10,11,16,17,19,20,33],axes_grid1:3,axessubplot:3,axhlin:6,axi:[1,2,3,4,5,6,7,8,11,12,14,15,20,21,23,24],axlabel:[2,10,19],axs:[10,19],axvlin:[6,8],axvspan:8,azimuth:[12,14,21,23],b_1:5,b_1e:[13,22],b_2e:[13,22],b_fc1:5,b_fc2:5,b_i:[3,5],b_ia_:3,b_j:5,b_k:5,b_m:5,b_out:5,b_p:[13,22],b_x:[10,19],b_y:[10,19],b_z:[10,19],back:[0,1,3,8,10,11,12,14,15,19,20,21,23,24],backend:8,background:[10,19],backpropag:5,backward:[5,8,14,23],bad:[1,3],badli:1,baggin:[2,10,19],bake:[9,18],balanc:3,ball:[10,11,15,19,20,24],ban:27,band:[2,10,19],bandwidth:[2,10,19],bar:[2,7,10,12,19,21],barrier:26,base:[0,1,2,3,4,5,6,8,9,10,13,18,19,22],basi:[2,3,4,5,6,7,10,14,19,23,26],basic:[0,1,5,6,9,13,15,18,22,24],batch:[5,7,8],batch_i:5,batch_shap:8,batch_siz:[5,8],batch_x:5,bay:4,bayesian:0,bdb:[14,23],becaus:[0,2,3,5,6,8,9,11,12,13,14,15,18,20,21,22,23,24],becom:[0,1,2,3,5,7,10,11,12,13,14,15,19,20,21,22,23,24],been:[0,2,3,5,7,8,9,10,11,13,18,19,20,22,26,29],befor:[0,1,2,3,4,5,6,8,9,11,12,13,14,15,18,20,21,22,23,24],beforehand:[0,1,2],began:[14,23],begin:[1,2,3,4,5,6,7,10,11,12,13,14,15,16,17,19,20,21,22,23,24,26,33],behav:[3,5,14,23],behavior:[0,2,5,9,13,18,22,27],behaviour:5,behind:[0,2,3,5,6,13,22],being:[0,1,2,3,4,5,6,7,8,9,13,14,15,18,22,23,24,32,34],believ:[11,20],belong:[4,6,15,24],below:[1,2,3,4,5,6,7,8,9,10,11,12,13,15,18,19,20,21,22,24,28],benchmark:[9,18],benefici:5,benefit:[2,5,7,8,9,18],bengio:5,benign:7,besid:8,best:[0,1,2,3,5,6,7,8,11,13,14,20,22,23,27,28],beta:[2,4,5,7,14,23],beta_0:[3,4,5,13,22],beta_0x_:3,beta_1:[3,4,5],beta_1x_0:3,beta_1x_1:[3,4],beta_1x_2:3,beta_1x_:3,beta_1x_i:4,beta_2:3,beta_2x_0:3,beta_2x_1:3,beta_2x_2:[3,4],beta_2x_:3,beta_:[3,4],beta_i:3,beta_j:3,beta_n:[13,22],beta_p:4,beta_px_p:4,better:[0,2,5,7,8,9,11,12,13,18,20,21,22],between:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,19,20,21,22,23,24],beyond:[0,2,3,5,6,9,13,18,22],bia:[0,1,5,6,8],bias:[3,8],bias_vari:5,bib:[32,34],bibliographi:[32,34],bibtex:[32,34],bicycl:[10,19],big:[0,2,3,5,11,20],bigger:5,bigr:5,bilbo:[2,10,19],billion:5,bin:[1,3,7],binari:[1,2,4,8],binomi:0,binsboot:3,bioinformat:[0,2],biolog:5,bird:[2,8],birth:[2,10,19],bit:[1,2,5,10,11,13,15,19,20,22,24,28],bitwis:1,bla:[2,10,19],black:6,blob:26,block:[0,2,3,10,19,26,32,34],blockeulercrom:[13,22],blockingavg:1,blockingstd:1,blockingvar:1,blocksiz:1,blocksizemax:1,blocksizemin:1,blog:28,blue:[2,8],blue_patch:[10,19],bmatrix:[2,3,4,5,6,7,10,19],bmi:5,bodi:[0,3,5,8,11,12,15,20,21,24,26,27],boldfac:[3,10,19],boldsymbol:[0,2,5,6,7,10,11,12,14,15,19,20,21,23,24],bolt:[11,20],boltzmann:[0,5],bonu:[9,18],book:[8,16,17,26,32,33,34],boost:5,bootavg:1,bootstd:1,bootstrap:[0,5],bootvar:1,bootvec:1,bore:0,borrow:[2,10,19],boston_dataset:3,bot:6,both:[0,1,2,3,5,6,9,10,11,13,14,15,18,19,20,22,23,24,27,32,34],bottl:4,bottom:[3,13,22],bounc:[11,20],bound:[3,5,6,14,23],boundari:[5,6,7,11,20],box:[8,12,21,32,34],boyd:6,bracket:[1,8],brain:[4,5],brake:[15,24],branch:[28,29],brand:0,breast:5,brew:[2,10,19],brg:6,brian:[32,34],brief:[12,21],briefli:[2,9,13,18,22],bring:[2,3,13,15,22,24],brisban:[32,34],broad:[0,2],broken:[11,20],browser:2,brute:[3,7],bte:[13,22],bthe:[14,23],buck:0,bui:8,build:[0,1,2,3,10,19,32,34],built:[3,5,8,13,22,29,32,34],bunch:7,bundl:31,buoyanc:[10,19],bus:[15,24],busi:3,butler:26,c46dd114b2af:6,c_0:1,c_1:[5,15,24],c_1e:[15,24],c_2:[5,15,24],c_2e:[15,24],c_3:5,c_4:5,c_i:5,c_k:1,c_w:[11,20],cal:[5,6],calcul:[0,2,3,5,6,7,8,9,10,11,12,13,14,18,19,20,21,22,23],calculu:26,call:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,18,19,20,21,22,23,24,32,34],callabl:3,came:[11,15,20,24],camera:0,can:[0,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,26,28,29,32,33,34],cancel:[3,12,21],cancer:5,cancerpd:7,candid:6,cannot:[0,1,2,3,5,6,7,11,12,20,21],canopi:[2,10,19],capabl:[0,2,6,10,19],capita:3,captur:[5,7],car:[0,8,11,15,20,24],card:[0,3,4],cardin:5,care:[7,13,22],carlo:[0,1,2,3],carmak:0,carri:[3,4],cartesian:[10,14,19,23],cast:5,cat:8,categor:[0,2,5,7,8],categori:[0,2,4,5,8],categorical_crossentropi:[5,8],caus:[0,1,3,7,11,15,20,24],causal:3,causat:0,caveat:[12,21],cbook:3,ccc:5,cdf:1,cdot:[1,2,3,5,10,11,12,13,14,15,19,20,21,22,23,24],ceil:[10,12,13,14,19,21,22,23],cell:[32,34],cellphon:26,center:[1,2,3,4,6,11,12,13,15,20,21,22,24,26],central:[0,2,3,6,8,9,10,15,18,19,24,26],centrifug:26,centroid:1,centuri:[8,9,18],certain:[0,1,2,3,4,8,14,23],cha:3,chain:[0,1,12,14,15,21,23,24,26],challeng:[12,21],chanc:[1,5,14,23],chang:[1,2,3,5,6,7,8,9,10,11,12,13,14,15,18,19,20,21,22,23,24,28],channel:8,chapter:[3,7,8,13,22,26],charact:[1,2,3,6,8],character:[1,5,6],characterist:[3,8,13,22],charg:[2,11,14,20,23],charl:3,cheap:3,cheaper:5,check:[2,3,5,7,8,10,11,13,16,17,19,20,22,31,33],checkmark:[13,22],chemic:1,chi:2,chimborazo:[15,24],choic:[1,3,8,10,11,13,14,19,20,22,23],choleski:3,choos:[1,3,7,8,10,11,12,13,14,19,20,21,22,23],chosen:[1,2,3,5,6,10,11,12,13,14,15,19,20,21,22,23,24],chosen_datapoint:5,chpater:[13,22],christoph:[32,34],cifar10:8,cifar:8,cin:1,circ:[5,15,24],circl:[3,5,6,7,11,14,20,23],circuit:[13,22],circul:[14,15,23,24],circular:[11,12,14,20,21,23],circumst:27,circumv:[3,5],cite:[32,34],citizen:0,civita:[12,21],claim:0,clarifi:27,clariti:1,class_nam:8,classic:[2,9,12,14,15,18,21,23,24,34],classif:[0,2,3,4,6,8,10,19],classifi:[0,4,5,7],classificaton:5,clean:5,clear:[5,14,23],clearli:[1,3,6,7,8,11,12,20,21],clever:5,clf3:2,clf:[2,3,6],clf_lasso:3,clf_ridg:3,clip:[1,8],clockwis:[11,15,20,24],clone:[28,29],close:[0,1,2,3,5,6,7,10,11,13,14,15,19,20,22,23,24],closer:[11,20],closest:[6,7,10,14,19,23],closur:[2,10,19],cloud:[2,10,19],cluster:[0,2,3,5,7,8],cmap:[2,3,5,6,8,16,17,33],cmap_arg:3,cmath:1,cmse201:[9,18],cn_:1,cna:[11,20],cnn:5,cnn_kera:8,cntk:[2,10,19],code:[0,2,4,8,9,11,18,20],coef0:6,coef:2,coef_:[2,3,6],coeffici:[2,3,4,6,11,13,15,20,22,24],coerc:[2,3],cognit:[32,34],coin:1,col:[2,3,7,10,19],colab:[2,10,19],cold:[16,17,33],colinear:3,collaps:6,collect:[1,2,3,7,10,11,19,20],collid:[0,14,23],collinear:3,collis:[0,14,23],color:[1,2,3,6,8,10,14,16,17,19,23,33],color_channel:8,color_cod:3,colorbar:3,column:[2,3,5,6,7,10,19],com:[8,26],combin:[1,3,4,9,12,14,15,18,21,23,24],come:[0,2,3,5,8,10,11,13,14,15,19,20,22,23,24],comma:2,command:[0,1,2,5,9,10,18,19,32,34],comment:27,commerci:[2,10,19],commit:[27,28],commod:2,common:[0,1,2,3,4,5,7,8,10,11,12,13,14,19,20,21,22,23],commonli:[3,4,5,8],commonmark:[32,34],commun:[0,2,5,27],commut:[12,21],compact:[3,4,5,7,12,14,21,23],compactli:[12,21],compani:0,compar:[2,3,7,8,9,10,11,13,14,15,18,19,20,22,23,24],comparison:8,compat:4,compdriv:[13,22],compet:[0,2,9,18,26],compil:[0,1,2,5],complaint:27,complement:[12,21],complementari:[13,22],complet:[2,5,8,11,13,20,22],completenn:5,complex:[0,3,5,6,7,13,14,15,22,23,24,32,34],complic:[0,2,3,5,9,11,14,15,18,20,23,24],compon:[3,5,8,11,12,13,14,15,20,21,22,23,24],components_:7,compos:5,compress:[2,3,7,11,20],compris:3,compromis:3,comput:[0,2,3,5,6,8,9,11,12,13,15,18,20,21,22,24,26,32,34],computation:[0,1,8],con:26,concaten:[3,8],concentr:3,concept:[0,2,3,12,21],conceptu:[5,14,15,23,24],concern:[0,4,5,8,12,21],concic:[2,10,19],conclud:2,conclus:[0,5],conda:[2,5,10,19,28],condit:[1,3,6,7,10,11,12,13,14,15,19,20,21,22,23,24],conduct:[0,9,18],confer:[32,34],confid:[3,4,6],confidenti:27,configur:8,confirm:5,confus:3,congruenti:1,conjug:6,connect:[2,3,5,7,8,10,19,26],consequ:[3,5,6,9,14,18,23],conserv:[3,11,13,14,20,22,23,26],consid:[0,1,2,3,4,5,6,8,11,12,13,14,15,20,21,22,23,24,27],consider:[0,3,5,7,11,20],consist:[1,3,5,8,11,13,20,22],constant:[1,2,3,5,6,11,12,13,14,15,20,21,22,23,24],constitu:2,constitut:3,constrain:[5,7,8,14,23],constraint:[3,6,26],construct:[0,1,2,3,5,6,7,9,18,27],consumpt:[11,20],contact:[2,11,14,20,23,27],contain:[0,1,2,3,4,5,6,7,8,9,10,18,19,26],content:[2,10,19,31,32,34],context:3,continu:[0,2,3,4,5,6,9,10,11,15,18,19,20,24],continuosli:0,contourf:6,contrast:[5,11,15,20,24],contribut:[0,1,2,3,8,12,13,14,15,21,22,23,24,27,29],contributor:[0,2,27,28],control:[0,2,5,8],conv2d:8,conv:8,conveni:[2,3,5,9,10,11,12,14,18,19,20,21,23],convent:[5,9,10,18,19],converg:[3,5,6,7],convergencewarn:[6,7],convert:[2,3,7,8,10,14,15,19,23,24],converttomatrix:8,convex:4,convolut:[13,22],cookiecutt:29,coolwarm:[16,17,33],coordin:[3,5,7,11,12,13,14,20,21,22,23,26],coorel:3,copi:[5,28],corel:0,corioli:26,corner:[15,24],corona:26,corr:[3,7],correalt:[3,7],correct:[0,1,2,3,5,8,11,12,13,15,20,21,22,24,27],correct_predict:5,correctli:[3,5],correl:[0,2,5],correlation_matrix:[3,7],correspod:[15,24],correspond:[1,2,3,5,6,7,8,10,12,13,14,15,19,21,22,23,24],cortex:[5,32,34],cos:[3,10,11,12,13,14,15,19,20,21,22,23,24],cosh:[10,19],cosin:[3,13,22],cost:[0,1,2,3,4,6,8],could:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,18,19,20,21,22,23,24,27,28],coulomb:[2,14,23],count:[1,2],counter:[10,13,15,19,22,24],coupl:[3,8,10,11,13,19,20,22],cours:[0,1,3,7,8,9,10,11,12,18,19,20,21,26],cout:1,cov:[1,2,3,7],cov_xi:[3,7],cov_xx:[3,7],cov_yi:[3,7],covari:[0,2],covariance_matrix:[3,7],coven:27,cover:[0,2,13,14,22,23,25,26,30],covert:2,covxi:1,covxx:1,covxz:1,covyi:1,covyz:1,covzz:1,creat:[2,5,7,8,9,10,14,16,17,18,19,23,27,28,29,33],create_accuraci:5,create_biases_and_weight:5,create_convolutional_neural_network_kera:8,create_dnn:5,create_loss:5,create_neural_network_kera:5,create_optimis:5,create_placehold:5,create_x:[3,7],creation:5,credit:[0,3,4,26,28],crim:3,crime:3,criteria:[1,2],critic:[0,12,21,26,27],criticallydamp:[13,22],cromer:[13,22,26],cross:[0,1,4,5,8,10,11,12,13,15,19,20,21,22,24,26],cross_val_scor:3,crossvalid:3,crucial:[1,5],cs231:8,csc:[13,22],csr_matrix:2,cstdlib:1,csv:[2,3,8],ctnk:5,ctrajectori:[14,23],cubic:2,cumsum:[2,7,10,19],cumul:3,current:[8,15,24,29],curs:[3,7],curv:[4,5,11,12,20,21],curvatur:[14,15,23,24],custom_lin:[16,17,33],cvxopt:6,cycl:[1,5,14,23],cycler:[16,17,33],cyclon:[15,24],cyclotron:[11,20],d2l:26,da_d:[14,23],da_i:[15,24],dagger:[2,3,10,19],dai:[5,9,11,15,18,20,24,26],damp:26,dampeddiffyq:[13,22],darkr:1,dat:[2,3,10,19],dat_id:[2,3,7,10,12,13,14,19,21,22,23],data:[4,6,9,10,11,12,13,14,16,17,18,19,20,21,22,23,33],data_id:[2,3,7,10,12,13,14,19,21,22,23],data_indic:5,data_panda:[2,10,19],data_path:[2,3,7,10,12,13,14,19,21,22,23],databas:[2,5],datafil:[2,3,7,10,12,13,14,19,21,22,23],datafram:[2,3,7,8,10,19],datapoint:[3,4,5,7],dataset:[3,4,6,7],datatyp:8,date:[0,2,10,19],dbh:5,dbo:5,ddot:[11,13,14,15,20,22,23,24],ddrive:[13,22],dead:5,deadlin:26,deal:[0,1,2,3,5,6,7,8,10,15,19,24],dearli:0,debt:4,debug:3,decad:[0,2,8],decai:[1,2,11,13,20,22],decid:[0,3,8],decim:[2,3],decis:[0,2,5,6,7],decision_funct:6,decisiontreeregressor:2,declar:[2,3,8,10,19],decomposit:[0,5],decompost:3,decreas:[3,5,7,12,21],deduc:[0,2,11,20],deem:[11,20,27],deep:[2,4,8,11,20],deepen:[9,18],deeper:[0,2,8,9,11,12,18,20,21,26],deer:8,def:[1,2,3,5,6,7,8,9,10,12,13,14,18,19,21,22,23],def_covari:1,default_tim:8,defect:3,defici:3,defin:[1,2,3,4,6,7,8,9,10,12,13,14,15,18,19,21,22,23,24,26,27,32,34],definit:[3,6,7,9,10,11,13,14,15,18,19,20,22,23,24],defint:[1,10,19],deflect:[15,24],degre:[0,1,2,6,9,11,12,13,14,15,18,20,21,22,23,24],delet:[1,3],delimit:8,deliv:2,delta:[1,2,5,6,10,11,12,13,14,15,19,20,21,22,23,24],delta_:[2,5,10,19],delta_h:[2,5],delta_j:5,delta_k:5,delta_l:5,delta_n:[2,13,22],deltat:[10,12,13,14,19,21,22,23],deltax:[14,23],delv:2,demonstr:[2,3,4,5,13,15,22,24],demostr:[15,24],den:8,denomin:[5,13,14,22,23],denot:[1,3,4,5,12,15,21,24],dens:5,densiti:[1,3,11,14,20,23],depart:[15,24],departur:[14,23],depend:[1,2,3,4,5,6,7,10,11,12,13,14,15,19,20,21,22,23,24,26,32,34],depict:1,deploy:[2,10,19],deposit:[14,23],depth:8,deriv:[2,3,4,6,7,9,10,11,15,18,19,20,24,26],derogatori:27,descend:[3,7],descent:[0,3,4,6,8],descr:3,describ:[0,2,3,5,6,7,10,11,13,14,15,19,20,22,23,24],descript:[3,6,15,24],deserv:0,design:[2,4,5,11,13,20,22],designmatrix:3,desir:[0,2,3],despit:[5,11,20],det:3,detail:[2,7,10,12,14,19,21,23,26,27,28],detect:[5,6,15,24],detector:[14,23],determin:[0,1,2,3,5,6,7,8,10,11,12,13,15,19,20,21,22,24,26,27],determinist:[1,4],detial:26,detriment:0,dev:[1,5],develop:[0,2,6,7,8,9,10,11,12,13,14,18,19,20,21,22,23,26,28,29],deviat:[2,3,5,10,19],devic:[9,18],devis:5,df1:[2,10,19],diag:[3,6],diagnost:5,diagon:[1,2,3,4,10,19],diagonaliz:3,diagram:26,diagsvd:3,dial:[13,22],dialect:0,diamet:[15,24],dict:[3,6],dict_kei:3,dictionari:3,did:[3,4,5,7,11,13,15,20,22,24],die:5,died:[13,22],diff:[11,20],diffeent:6,differ:[0,1,2,3,5,7,8,10,11,12,13,14,15,19,20,21,22,23,24,26,27,32,34],differenti:[0,2,8,12,14,15,21,23,24,26],difficult:[0,1,3,5,11,12,15,20,21,24],difficulti:[0,5],digit:[0,2,5,8],dilut:5,dim:[7,8,13,22],dimens:[2,3,5,6,7,8,12,13,15,21,22,24],dimension:[0,2,8,10,12,13,14,19,21,22,23],dimensionless:[2,11,12,13,20,21,22],diment:[10,19],dimless:[11,20],dimnsion:8,diod:[13,22],direct:[0,2,3,5,7,8,10,11,12,13,14,15,19,20,21,22,23,24],directli:[1,3,5,10,14,19,23,32,34],directori:29,disabl:[27,29],disadvantag:2,disappear:[13,14,22,23],discard:[3,7],disciplin:[0,2,5],disclaim:[0,1],discours:[0,9,18],discov:0,discrep:[15,24],discret:[4,5,8,9,13,18,22],discrimin:[4,7],discuss:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,18,19,20,21,22,23,24,26],discussiom:26,diseas:4,disk:2,disord:4,displac:[12,13,15,21,22,24],displai:[1,2,3,5,6,7,8,10,14,19,23,32,34],displaystyl:3,disregard:2,disrupt:0,dissimilar:7,dissip:[11,20],dissipitav:[13,22],distanc:[1,3,6,7,11,12,14,15,20,21,23,24],distant:[14,23],distinct:[4,6,8],distinctli:6,distinguish:[1,2,6,7,11,20],distort:[14,15,23,24],distplot:3,distribuit:[10,19],distribut:[0,2,3,5,7,10,14,15,19,23,24],distrubut:[2,10,19],dive:[2,3,6,13,22],diverg:[5,14,23],divid:[0,1,2,3,5,6,7,8,10,11,13,14,19,20,22,23],divis:[1,3,6],dna:4,dnn1:8,dnn2_gru2:8,dnn:[2,5,8],dnn_kera:5,dnn_numpi:5,dnn_scikit:[2,5],dnn_tf:5,doc:[26,28,32,34],doconc:2,docstr:28,doctest:[9,18],document:[7,8,16,17,32,33,34],doe:[0,1,2,3,5,6,7,8,10,11,12,13,14,15,19,20,21,22,23,24],doesn:[5,8,11,12,20,21,32,34],dog:[5,8],doing:[2,3,7,11,20],dollar:[16,17,33],domain:6,domin:[2,11,14,20,23],don:[1,2,3,5,6,7,10,11,14,15,19,20,23,24],done:[1,2,3,7,8,10,11,12,13,14,15,19,20,21,22,23,24],door:[13,22],dot:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,18,19,20,21,22,23,24],doubl:[1,2,10,11,14,15,19,20,23,24,26],doubli:[5,12,15,21,24],down:[2,3,7,11,13,14,15,20,22,23,24],download:[2,5,8,10,19],downsampl:8,drag:[10,11,13,19,20,22],dramat:7,drastic:8,draw:[3,11,20],drawback:[3,7],drawn:[1,2,3,4,5,7,10,19],dream:0,drive:[0,8,11,13,20,22],driven:[26,28],drivenosc:[13,22],driver:0,drop:[1,2,3,7,15,24],dropna:[2,3],dry:0,dtype:[2,3,5,8,10,19],dub:2,due:[3,5,6,7,10,11,12,13,14,15,19,20,21,22,23,24,26],dummi:3,dure:[0,2,5,6,7,8,13,15,22,24],dv_:[11,20],dv_x:[11,12,15,20,21,24],dv_y:[11,12,15,20,21,24],dv_z:[12,15,21,24],dwell:3,dwh:5,dwo:5,dx_1:1,dx_n:1,dxdy:[13,22],dying:5,e_0:[11,20],each:[0,1,2,3,4,5,6,7,8,10,12,13,14,15,19,21,22,23,24],eager:3,eapprox:[2,3],ear:0,earli:5,earlier:[3,4,5,6,7,12,13,21,22],earth:[11,14,15,20,23,24,26],earthsuneul:[12,21],earthsunvv:[12,21],easi:[0,2,3,4,5,6,7,10,11,12,13,14,19,20,21,22,23],easier:[0,1,2,3,6,14,23,26,28],easili:[0,2,3,4,5,6,7,9,10,11,12,13,18,19,20,21,22],east:[15,24],ebind:[2,3],eccentr:[14,23],econom:0,econometr:[2,10,19],ecosystem:[2,10,19,32,34],edgecolor:3,edit:[2,27],edu:26,educ:[0,2,3,9,13,18,22,26],eff:[1,14,15,23,24],effect:[1,5,10,11,13,19,20,22,26],effic:5,effici:[1,2,8,10,11,19,20],efron:[1,3],eig:[1,2,3,7],eigen:1,eigenpair:[3,7],eigenvalu:[2,3,6,7,10,19],eigenvector:[3,7],eight:[2,10,19],eigval:[1,2],eigvalu:7,eigvec:[1,2],eigvector:7,eispack:[2,10,19],either:[0,1,2,3,4,5,6,7,11,12,13,14,15,20,21,22,23,24],elabor:1,elast:[14,23],electr:[2,5,11,13,14,20,22,23],electrodynam:[14,23],electromagnet:[11,14,20,23],electron:[9,12,14,18,21,23,27],eleg:7,elel:[10,19],element:[0,2,3,4,5,6,7,8,9,11,12,18,20,21],elementari:[2,10,19,26],elementwis:8,elessar:[2,10,19],elimin:[6,13,14,22,23],ellips:[14,15,23,24],ellipt:[15,24,26],els:[1,4,5,11,20],elu:5,elus:0,email:26,emb:[16,17,33],embed:[3,7],embodi:3,emit:[1,12,21],empathi:27,emphas:[0,2,13,22,26],emphasi:[2,10,19],empir:[1,5,7],emploi:[1,2,3,5,7,11,13,20,22],employ:[0,2,3],employe:0,empti:3,emul:5,enabl:[7,9,18],enbodi:[13,22],encapsul:[13,14,22,23],encod:[0,7,8],encompass:[0,1,2,11,20],encount:[0,1,3,4,5,14,23],end:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,19,20,21,22,23,24,26,33],endl:1,endpoint:[1,3,13,22],energi:[8,10,11,13,14,15,19,20,22,23,24,26],enforc:5,engag:[9,18],engin:[0,1,2,5,10,11,19,20,26],enhanc:[9,18,26,28],enorm:8,enough:[0,3,11,14,15,20,23,24],enquiri:[11,20],enscrib:[12,21],ensembl:[1,5],ensur:[1,3,5,7,8,13,14,22,23],entail:2,enter:[0,1,3,13,15,22,24],enthought:[2,10,19],entir:[1,2,4,5,8,10,13,14,19,22,23,32,34],entiti:[2,5,10,19],entitl:0,entri:[2,3,5,6,7],entropi:[2,4,5,8],enumer:[2,3,5,6,8],env:1,environ:[2,9,10,11,18,19,20,27,29],eol:3,eosfit:3,epoch:[2,5,8],epsilon:[3,4,12,21],epsilon_0:[3,14,23],epsilon_1:3,epsilon_2:3,epsilon_:[2,3,11,12,20,21],epsilon_i:3,eqnarrai:[3,11,12,13,14,15,20,21,22,23,24],equador:[15,24],equal:[0,1,2,3,5,6,7,10,11,13,14,15,19,20,22,23,24],equat:[0,1,2,4,7,9,14,15,18,23,24,26],equatori:[15,24],equilibrium:[5,11,20],equiv:[1,12,13,14,15,21,22,23,24],equival:[2,3,5,6,7,10,12,13,14,19,21,22,23],erf:1,eriador:[2,10,19],eridg:3,err:2,err_:3,error:[0,1,2,4,5,7,8,9,13,18,22],error_estimate_corr_tim:1,error_hidden:5,error_output:5,escap:[16,17,33],especi:[5,12,13,14,21,22,23],essenti:[0,1,2,3,5,9,11,15,18,20,24],establish:7,estim:[0,1,2,3,4,5,12,21],estimated_mse_fold:3,estimated_mse_kfold:3,estimated_mse_sklearn:3,eta0:6,eta:[2,5,6,8,13,15,22,24],eta_v:[2,5,8],etc:[0,1,3,4,5,6,7,10,11,16,17,19,20,26,33],ethic:[9,18],ethnic:27,etsim:3,euclidean:[3,7],euler:[11,13,20,22,26],eulerintegr:[10,19],eurler:[10,19],european:0,evalu:[0,1,2,3,9,11,12,13,18,20,21,22,26],even:[0,1,2,3,5,6,7,8,10,11,12,13,14,15,19,20,21,22,23,24,28],evenli:8,event:[0,4,27],eventson:3,eventu:[3,5,7,11,15,20,24],everest:[15,24],everi:[1,2,3,5,7,8,10,11,12,15,19,20,21,24,28],everybodi:[0,26],everyon:27,everyth:[5,11,14,20,23],evid:[11,20,32,34],evolut:[13,14,22,23],evolv:[0,2],exact:[1,2,3,5,7,9,10,11,12,13,18,19,20,21,22],exactli:[3,5,7,8,14,15,23,24],exam:26,examin:3,exampl:[0,4,11,13,15,16,17,20,22,24,26,27,32,33,34],exce:5,excel:[0,2,3,5,29],except:[1,3,6,8,11,15,20,24],excess:2,excit:[0,2,13,14,22,23],exclud:[3,5],exclus:[1,2,3,8],execut:3,executablebook:29,exercis:[0,2,3,9,11,12,18,20,21,26],exert:[12,21],exhaust:3,exhibit:[3,6],exist:[0,2,3,5,6,7,8,10,12,13,14,19,21,22,23,29,32,34],exit:[1,3],exp:[1,3,4,5,6,7,13,22],exp_term:5,expand:[3,4,7,10,13,19,22],expans:[3,5,6,12,13,14,21,22,23],expect:[0,2,5,7,11,13,14,15,20,22,23,24,27],expectation_value_of_h_wrt_p:1,expens:1,experi:[0,2,3,5,6,9,11,14,15,18,20,23,24,27],experiment:[1,2,3,8,11,14,20,23],experimentalist:[14,23],expert:5,explain:[1,2,3,7,15,24,28],explained_variance_ratio_:7,explanatori:3,explicit:[2,3,8,10,12,13,15,19,21,22,24,27],explicitli:[0,2,8,12,21],explod:5,exploit:[3,5,8],explor:[2,3,6,9,10,18,19],expon:5,exponenti:[2,5,11,13,20,22],expos:0,express:[1,2,4,5,8,10,11,13,14,15,19,20,22,23,24,27],exptmean:1,exptvari:1,ext:[13,22],extend:[0,4,7,9,10,18,19],extens:[0,2,3,5,12,14,21,23,32,34],extent:[0,2,3,26],extern:[3,11,12,13,14,15,20,21,22,23,24],extra:[3,5,8,13,22,26],extract:[0,2,3,4,6,7,11,13,14,20,22,23],extrapol:[2,3],extrem:[0,2,3,4,5,6,7,8,9,10,18,19],extrins:7,eye:[0,2],f11:2,f12:2,f13:2,f6d7a289d493:[2,10,19],f_0:[12,13,21,22],f_0b:[12,21],f_0e:[13,22],f_2:5,f_3:5,f_d:1,f_g:[12,21],f_h:[12,21],f_i:[3,5,11,13,20,22],f_m:[13,22],f_n:[13,22],f_r:[14,23],f_x:[11,12,14,20,21,23],f_xv_x:[12,21],f_y:[11,14,20,23],f_yv_i:[12,21],f_zv_z:[12,21],face:27,facecolor:[1,3,6],facil:0,facilit:5,fact:[0,2,3,5,7,8,10,12,13,14,15,19,21,22,23,24],factor:[1,2,3,5,7,11,12,14,20,21,23],fade:3,fail:[3,6,7,14,23],failur:4,fair:27,fairli:1,faith:27,fall:[6,14,23,26],fallingbasebal:[10,19],fals:[2,3,4,5,8,13,22],famili:[0,1,2,4,6,7,10,13,19,22,26],familiar:[0,1,2,6,10,12,14,19,21,23],famou:[0,3,5],fanci:0,far:[0,1,2,3,5,6,7,8,11,14,20,23],fashion:[0,9,18],fast:[1,2,3,5,8,10,15,19,24],fastdriven1:[13,22],fastdriven2:[13,22],faster:7,favor:4,favorit:1,fc1:5,fc2:5,featur:[1,4,5,8,13,22],feature_nam:[3,7],feb:26,februari:[13,22],fed:[0,5],feed:[0,2,7,8,11,20],feed_dict:5,feed_forward:5,feed_forward_out:5,feed_forward_train:5,feeddorward:8,feedforward:[5,8],feel:[2,7,10,12,13,15,19,21,22,24,31],feet:[3,15,24],fellow:0,felt:[11,20],few:[1,2,5,8,25,30],fewer:[2,7],ffedbda27704:[13,22],ffnn:5,fictiti:[15,24],field:[0,2,3,5,12,13,14,15,21,22,23,24,26],fifth:[2,10,19],fig:[2,3,4,5,7,8,10,12,13,14,16,17,19,21,22,23,33],fig_id:[2,3,7,10,12,13,14,19,21,22,23],figaxi:1,figsiz:[2,3,5,6,7,8,10,16,17,19,33],figur:[2,3,4,5,6,7,8,10,11,12,13,14,15,19,20,21,22,23,24],figure_id:[2,3,7,10,12,13,14,19,21,22,23],figurefil:[2,3,7,10,12,13,14,19,21,22,23],file:[1,2,3,5,6,7,10,12,13,14,19,21,22,23,26,28],filenam:[1,2,3,10,19],fileout:1,filewrit:5,fill:3,filter:8,financ:[0,2],find:[0,1,2,4,5,6,7,9,11,12,13,14,15,18,20,21,22,23,24,26],fine:5,finish:[11,20],finit:[1,3,5,14,23],first:[0,1,3,4,7,8,9,12,13,14,15,18,21,22,23,24,26,32,34],firsteigvector:7,fit:[0,1,4,5,6,7,8,11,20],fit_intercept:3,fit_transform:[2,3,6,7],fiti:2,five:[2,3],fix:[2,5,8,11,12,13,14,15,16,17,20,21,22,23,24,33],flat:5,flatten:[5,8],flavor:[32,34],flexibl:[2,3,5,6,9,10,13,18,19,22],flip:[14,23],float32:5,float64:[2,3,8,10,19],floor:[10,19],flop:3,flow:[5,8,11,15,20,24],fly:[7,14,23],flyvbjerg:1,fmax:[13,22],focault:[15,24],foci:[14,23],focoault:[15,24],focu:[0,2,3,8,10,11,14,15,19,20,23,24],focus:[4,5,13,22,27],folder:[2,10,19,26],folk:0,follow:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,18,19,20,21,22,23,24,27,32,34],font:[1,2,10,13,19,22],fontdict:1,fontsiz:[1,3,6],footbal:[14,23],foral:6,forc:[3,7,9,10,12,18,19,21,26],forcast:8,forcedblockeulercrom:[13,22],forcedblockrk4:[13,22],forecast:[5,8],forest:[0,2,5],forget:7,fork:28,form:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,19,20,21,22,23,24],formal:[1,8,10,12,15,19,21,24,26],formalim:26,format:[1,2,3,6,7,9,10,12,13,14,18,19,21,22,23],format_data:8,formul:[3,7,11,20],formula:[1,10,12,13,14,19,21,22,23],forth:[5,14,15,23,24],fortran90:1,fortran:[0,2,10,19],fortun:[3,7],forum:26,forward:[2,3,8,10,11,12,13,15,19,20,21,22,24],forwardeul:[13,22],forwardeulercrom:[13,22],foster:27,foucalt:26,foucault:26,found:[3,5,7,11,13,14,20,22,23,29],foundat:[9,18],four:[5,6,8,12,15,21,24],fourier:[3,26],fourierdef1:[13,22],fourierdef2:[13,22],fourierseriessign:[13,22],fouriersolut:[13,22],fourpi2:[12,21],fourth:[2,5,10,13,19,22],frac:[1,2,3,4,5,6,7,9,10,11,12,13,14,15,18,19,20,21,22,23,24],frame:[7,11,14,20,23,26],framework:[0,1,5,6],frankefunct:[3,7],free:[1,2,7,10,19,27],freedom:[9,11,13,14,18,20,22,23],freeli:[0,2],freewai:[11,20],frequenc:[1,3,7,10,11,13,14,15,19,20,22,23,24],frequent:[0,2,6],frib:26,friction:[11,13,20,22,26],frictionless:[11,20],fridai:26,friendli:[8,13,22],frodo:[2,10,19],frog:8,from:[0,1,2,4,6,7,9,10,11,12,13,14,16,17,18,19,20,21,22,23,26,27,33],from_logit:8,front:[0,2,8],frontier:[32,34],frydai:26,fstream:1,ftild:[13,22],fuel:[11,20],fulfil:[3,5,11,20],full:[0,1,2,3,4,10,19],fulli:[1,3,5,8,29],fun:[2,10,19],func:3,functionali:7,fundament:[0,3,11,13,20,22],further:[2,8,9,10,11,12,14,15,18,19,20,21,23,24,26,27],furthermor:[2,3,4,5,7,9,10,11,18,19,20],furthest:[15,24],futur:[0,2,6,8,11,13,20,22],futurist:0,fwhm:[13,22],g_m:[13,22],g_n:[13,22],gain:[0,3,5,9,11,12,13,18,20,21,22,26],galaxi:[11,20],galleri:[0,2],gallon:[14,23],gamge:[2,10,19],gamma1:6,gamma2:6,gamma:[3,6,7,11,13,14,15,20,22,23,24],gamma_:3,gamma_i:[1,3,6],gamma_x:3,gap:6,gate:[5,8],gather:5,gaug:5,gauss:[14,23],gaussian:[3,6,13,22],gaussian_rbf:6,gca:[3,6],gen:1,gender:[3,27],genener:8,gener:[0,2,5,6,7,8,9,10,11,12,13,14,15,18,19,20,21,22,23,24,26],generallay:5,genet:[0,5],geodes:[7,15,24],geometr:[2,11,12,20,21],geq:[3,6],get:[0,1,3,4,5,7,8,9,10,11,12,13,14,15,18,19,20,21,22,23,24,26,31],get_default_graph:5,get_yaxi:6,get_yticklabel:3,getattr:3,ggplot:[10,19],ghp:29,gibb:0,git:[0,26],github:[0,2,26,28,29],gitlab:0,give:[0,1,2,3,4,5,6,10,11,12,13,14,15,19,20,21,22,23,24,26,31],given:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,18,19,20,21,22,23,24,28],global:[1,4,12,13,21,22],global_step:5,global_variables_initi:5,glorot:5,gm_1m_2:[14,23],gm_:[12,14,21,23],gm_am_b:[14,23],gmm:[14,15,23,24],goal:[0,2,3,4,11,20],goe:[2,3,5,12,13,14,21,22,23,26],going:[2,5,6,7,8,11,15,20,24],gold:[14,23],gone:3,gong:5,good:[1,2,3,5,7,8,9,11,13,18,20,22,26,27],googl:[2,5,10,19],got:5,govern:[9,11,18,20],gracefulli:27,grader:26,gradient:[0,2,3,4,6,8,15,24],gradientdescentoptim:5,gradual:[11,13,20,22],graph:[0,5,7],graphic:[2,5,9,11,18,20],grasp:[0,2],gravgauss:[14,23],gravit:[5,10,11,12,13,15,19,20,21,22,24,26],graviti:[10,14,15,19,23,24,26],gray_r:[5,8],grayscal:8,graze:[14,23],great:[11,20],greater:[1,5,7],greatli:28,green:[1,2,8,13,22],greeni:[13,22],greeny2:[13,22],grid:[1,3,4,5,6,8,11,14,20,23],ground:[2,10,15,19,24],group:[0,2,3],groupbi:[2,3],grow:[5,8],growth:2,gru:8,guarante:[0,1,3,7],guess:[5,11,13,15,20,22,24],guid:[0,5,16,17,33],habit:[9,18],had:[0,2,3,5,11,12,14,20,21,23],hadamard:5,half:[5,6,14,23],hamiltonian:[12,21],hand:[0,1,2,3,5,7,8,9,10,11,14,15,18,19,20,23,24,26],handi:[8,12,15,21,24],handl:[5,7],handsid:5,handwrit:5,handwritten:5,handwrittennot:26,happen:[1,5,8,11,14,20,23],harass:27,hard:[4,5,6],hardcopi:[2,10,19],harder:[3,5,7],harm:27,harmon:[11,12,20,21,26],has:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,18,19,20,21,22,23,24,26,29,32,34],hassl:[2,10,19],hast:0,hat:[1,2,3,4,5,7,10,11,12,13,14,15,19,20,21,22,23,24],have:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,18,19,20,21,22,23,24,26,27],haven:5,hbar:[12,21],hdf5:2,hdhpk14:[32,34],head:[1,3,8],header:[2,3],hear:[0,2],heart:[0,2],heatmap:[2,3,5,7,8],heavi:[9,14,18,23],heavili:[0,2],heavisid:5,heer:[32,34],height:[5,8,11,12,14,15,20,21,23,24],helic:[11,20],help:[0,5,8,9,14,18,23,28],hemispher:[15,24],henc:[2,3,5,6,11,20],her:4,here:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,26,28,29,32,33,34],hereaft:[3,5,6,12,15,21,24],hermitian:[2,10,19],hessenberg:[2,10,19],hhint:[12,21],hidden:[5,8],hidden_bia:5,hidden_bias_gradi:5,hidden_layer_s:[2,5],hidden_neuron:8,hidden_weight:5,hidden_weights_gradi:5,high:[0,2,3,5,7,8,10,13,15,19,22,24],higher:[0,2,3,5,6,7,10,11,12,13,14,15,19,20,21,22,23,24],highest:5,highli:[1,2,3,8,10,19],highwai:3,hinder:0,hing:6,hire:[0,2],his:4,hist:[1,3,7,8],histogram:[1,3,7],histor:[4,7],histori:[5,8],histtyp:3,hit:[0,10,11,14,19,20,23],hjensen:[6,7,26],hjorth:26,hobbi:1,hoc:3,hold:[1,3,5,8,11,13,15,20,22,24],holder:3,holdgraf:[32,34],holdgraf_evidence_2014:[32,34],home:[3,26],homework:[12,14,21,23,26],homogen:[5,11,13,15,20,22,24],homogn:[11,20],homogsolut:[13,22],hope:[0,9,18],hopefulli:[1,3,7,11,20],horizont:[7,11,15,20,24],hors:[4,8],hot:[5,16,17,33],hour:[1,5,15,24,26],how:[0,2,4,5,7,8,9,10,11,12,13,14,15,18,19,20,21,22,23,24,25,26,28,30,31],howev:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,18,19,20,21,22,23,24],hspace:[1,2,6,10,11,13,19,20,22],htm:26,html:[2,7,9,16,17,18,26,29,33],http:[2,5,7,8,10,19,26],huang:2,huber:2,huge:[5,8],human:[0,2,5,32,34],hundr:5,hungri:5,hurrican:[15,24],hv_:[12,21],hw10:26,hydrogen:2,hyperbol:8,hyperbola:[14,23],hyperparam:6,hyperparamet:[3,8],hyperplan:7,i_1:3,i_2:3,i_c:[13,22],i_i:[13,22],idea:[0,1,2,3,5,8],ideal:[0,1,2,3,6,9,11,13,18,20,22],idem:3,ident:[3,5,13,22,27],identifi:[0,2,4,5,6,7,9,14,18,23],idum:1,ieor:1,iet:[13,22],ifs:[2,10,19],ignor:[3,7,8,10,12,14,15,19,21,23,24],iii:[2,10,19],ijk:[11,12,20,21],illustr:[0,5,11,14,15,20,23,24],imag:[3,5,7,16,17,33],image_height:8,image_path:[2,3,7,10,12,13,14,19,21,22,23],image_width:8,imageri:27,imagin:[11,12,20,21],imaginari:[13,15,22,24],immedi:[0,2,3,8,13,22,26],impact:[0,9,14,18,23],impart:[11,20],implement:[2,3,6,7,8,9,11,12,13,18,20,21,22,26],impli:[2,3,8,9,10,13,18,19,22],implic:[11,20],implicit:8,implicitli:[1,7],impos:[0,3,5,7],imposs:[0,3],impress:[0,2,5],improv:[0,3,7,8,11,12,13,20,21,22],impuls:[13,22],imshow:[3,5,8],in5400:8,in_out_neuron:8,inact:5,inadequ:0,inappropri:27,incid:[14,23,27],includ:[1,2,3,5,7,8,9,11,13,14,15,16,17,18,20,22,23,24,27,28,32,33,34],include_bia:3,inclus:[9,18,27],incom:[5,14,23],inconsist:[13,22],incorpor:[13,15,22,24],incorrect:5,incoveni:6,increas:[0,1,2,3,5,6,7,8,9,12,13,14,18,21,22,23],increasingli:1,incred:0,increment:[9,18],ind:3,inde:[0,2,3,11,12,13,14,20,21,22,23],indent:[1,13,22],indentationerror:1,independ:[1,3,4,5,6,10,11,12,13,14,15,19,20,21,22,23,24,26],index:[1,2,3,5,8,10,19],index_col:[2,3],indic:[2,3,5,7,8,10,11,19,20],indispens:3,individu:[1,4,5,13,14,22,23,27],indu:3,industri:[9,18],inelast:[14,23],inequ:[0,6],inerti:[11,20,26],inertia:[11,20],inf:3,infam:0,infer:[0,3,5,14,23],infil:[2,3,10,19],infin:[3,7,13,22],infinit:[0,11,13,14,20,22,23],infinitesim:[1,13,22],influenc:[3,10,11,14,19,20,23],influenti:5,info:[2,5,10,19],inform:[0,2,3,5,7,8,12,14,16,17,21,23,27,29,32,33,34],infti:[1,11,13,20,22],ingredi:[0,2],inher:3,inherit:[2,10,19],init:[32,34],initi:[1,2,3,5,10,11,12,13,14,15,19,20,21,22,23,24],initialis:1,inlin:[1,2,3,4,5,6,7,8,9,10,12,13,14,18,19,21,22,23],inner:3,inoccu:0,inp:8,input:[0,1,2,3,4,5,6,7,8,9,10,12,13,18,19,21,22,32,34],input_shap:8,inputs_shuffl:5,insert:[1,5,6,10,12,13,14,15,19,21,22,23,24,32,34],insid:[3,7,8,14,23,32,34],insight:[0,2,3,5,9,11,18,20,26],inspect:[11,13,14,20,22,23],inspir:[0,2,5],instal:[5,26,28,29],instanc:[0,3,5,7,11,20,27],instant:[12,21],instantan:[10,19],instead:[0,1,2,3,5,6,7,8,9,10,11,12,14,18,19,20,21,23],institut:[0,5],instruct:[0,5],instructor:26,insult:27,int32:5,int64:3,int_0:[1,9,10,11,12,13,15,18,19,20,21,22,24],int_:[1,10,11,12,13,19,20,21,22],int_a:[1,9,12,18,21],integ:[1,2,5,10,14,19,23],integer_vector:5,integr:[0,1,2,9,11,13,14,18,20,22,23,26],integraldef:[12,21],integrand:[13,22],intellig:[0,2],intens:[5,9,18],interact:[2,3,5,10,11,13,14,16,17,19,20,22,23,33],intercept:[2,3,6],intercept_:[2,3,6],interchang:5,interest:[0,1,2,3,4,5,6,7,8,10,12,13,15,19,21,22,24,27],interfac:[2,5,9,18],interior:2,intermedi:[13,22],intern:[5,11,12,14,20,21,23,32,34],internet:[15,24],interpol:[5,8,12,21],interpr:3,interpret:[0,1,2,5,10,11,12,19,20,21],interv:[1,3,4,9,11,12,13,18,20,21,22],intimid:2,intract:[3,7],intrins:[1,2,7,8,10,19],intro:[32,34],introduc:[0,1,2,5,6,9,10,11,12,13,15,18,19,20,21,22,24,26],introduct:[3,5,8,26],introductori:[2,3],intuit:[2,3,5,6],inv:3,invalid:[2,5,6,7,10,19],invalu:[2,9,10,18,19],invari:[5,12,21],invd:3,inver:6,invers:[2,3,7,10,11,13,14,19,20,22,23],invers_period:1,inverse_transform:6,invert:[3,4,11,12,20,21],investig:[9,18,27],invis:[14,23],invok:[3,6,11,20],involv:[0,3,4,5,7,10,11,13,14,19,20,22,23],inward:[15,24],iomanip:1,ion:[16,17,33],ios:1,iostream:1,ipca:7,ipynb:[2,10,19,32,34],ipython:[1,2,3,5,6,7,10,13,19,22],iri:6,irreduc:3,irrelev:[3,13,22],irrespect:[0,2],ising:5,ismov:[11,20],isnul:3,isol:[10,12,19,21],isomap:7,isotrop:[15,24],issu:[0,5,27,28],item:[0,2,3],items:[2,10,19],iter:[1,3,5,6,7,8,11,20],its:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,18,19,20,21,22,23,24,27,28,32,34],itself:[1,3,5,11,12,13,14,20,21,22,23],j_lasso_sk:3,j_ridge_sk:3,j_sk:3,jackknavg:1,jackknif:0,jackknstd:1,jackknvar:1,jackknvec:1,januari:7,jargon:1,jensen:26,jeremi:26,job:[6,11,20],john:26,join:[2,3,7,10,12,13,14,19,21,22,23],joul:[10,19],journal:1,jrt:26,juli:26,jump:1,jupyt:[0,2,9,10,16,17,18,19,29,32,33,34],jupytext:[32,34],just:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,19,20,21,22,23,26],justif:[0,2],k1v:[13,22],k1x:[13,22],k2v:[13,22],k2x:[13,22],k3v:[13,22],k3x:[13,22],k4v:[13,22],k4x:[13,22],k_1:[13,22],k_2:[13,22],k_3:[13,22],k_4:[13,22],kappa_d:1,karush:6,keep:[0,2,3,5,7,9,10,11,12,13,16,17,18,19,20,21,22,28,33],keepdim:[3,5],kei:[3,5,13,22],kepler:[14,23,26],kept:[8,13,22],kera:[0,2,10,19],kernel:[3,5,32,34],kernel_regular:[5,8],kernelpca:7,kev:[2,3],keyword:[2,10,19],kfold:3,kick:5,kilogram:[10,19],kind:[0,3,5,6,8,11,14,20,23,32,34],kindergarten:0,kinet:[10,11,12,13,14,19,20,21,22,23],kkt:6,knight:[32,34],know:[0,1,2,3,6,10,11,13,14,15,19,20,22,23,24,26],knowledg:[0,2,3,9,18,26],known:[0,1,3,4,5,6,7,8,10,11,12,13,15,19,20,21,22,24,26],kondev:2,kpca:7,kr_:[14,23],krh:[14,23],kuhn:6,kutta2:[13,22],kutta4:[13,22],kutta:26,kwarg:3,kwown:3,l1_l2:8,l2_loss:5,l_1:4,l_2:4,l_j:5,l_z:[12,21],la_:[16,17,33],la_i:5,la_k:5,lab:[0,14,23],label:[1,2,3,4,5,6,8,11,12,13,14,15,20,21,22,23,24],labels:[3,6],labels_shuffl:5,laboratori:[11,14,15,20,23,24],lack:[0,2],lad:0,lagrang:[6,7,12,21,26],lagrangian:[12,21,26],lai:[9,18],lambda:[1,2,4,5,6,8],lambda_0:7,lambda_1:[3,6,7],lambda_2:[6,7],lambda_:7,lambda_i:[6,7],lambda_iy_i:6,lambda_jy_iy_j:6,lambda_k:6,lambda_n:[3,6],land:[3,6],landmark:6,langl:[1,3,7],langrangian:26,languag:[2,5,6,8,10,19,27,32,34],lapack:[2,10,19],larg:[0,1,2,3,5,6,7,9,10,11,13,14,18,19,20,22,23,26],larger:[1,2,3,6,7,8,9,13,18,22],largest:[6,7,8],lass:0,lasso:4,lasso_sk:3,last:[0,1,2,3,5,8,10,11,12,13,14,15,19,20,21,22,23,24],later:[0,1,2,3,4,5,6,8,10,11,12,13,14,19,20,21,22,23],latest:26,latex:[2,9,10,18,19],latitud:[15,24],latter:[0,1,2,3,4,6,7,10,11,12,13,14,15,19,20,21,22,23,24],lattic:5,launch:0,law:[0,2,5,9,10,13,14,15,18,19,22,23,24,26],layer:2,lbfg:7,lbl:3,lcc:3,lda:7,ldot:[1,3,7],lead:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,19,20,21,22,23,24],leader:0,leadership:27,leaki:5,learn:[4,6,8,10,19],learnabl:8,learning_r:[5,6],learning_rate_init:[2,5],least:[0,1,2,4,6,7,10,11,19,20],leav:[3,5,7,8,12,14,21,23],lectur:[0,2,3,5,7,10,13,15,19,22,24],lecturenot:28,left:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,18,19,20,21,22,23,24],leftarrow:[5,6],legend:[2,3,6,7,8,10,16,17,19,33],len:[1,2,3,5,6,7,8,10,19],length:[1,2,3,5,6,7,8,10,11,12,13,19,20,21,22],length_of_sequ:8,lengthi:[15,24],leq:[1,2,3,4,6],less:[0,1,2,3,5,6,9,10,13,14,15,18,19,22,23,24,32,34],let:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,18,19,20,21,22,23,24],letter:[1,2,3,10,19],level:[2,3,5,9,10,15,18,19,24,27],levi:[12,21],lhs:[10,19],lib:[3,6,7],liblinear:6,librari:[0,1,3,5,7,8,9,18],licens:[2,5,10,19],lie:[1,3,7],lies:[6,7,9,18],life:[0,2,5,6,9,15,18,24],light:[2,11,20],lightgrai:[14,23],like:[0,1,2,3,4,5,7,8,9,10,11,12,13,14,15,18,19,20,21,22,23,24,26,29,32,34],likelihood:[0,3,5],lim_:[1,10,19],limit:[3,6,7,9,10,11,12,13,15,18,19,20,21,22,24,26],lin_clf:6,lin_model:3,linalg:[1,2,3,6,7],line1:6,line2:6,line2d:[16,17,33],line3:6,line:[0,1,2,3,6,7,8,9,10,13,15,16,17,18,19,22,24,32,33,34],linear:[0,1,4,5,7,8,10,11,13,19,20,22,26],linear_model:[2,3,6,7],linear_regress:3,linearli:[3,7,11,13,20,22],linearregress:[2,3],linearsvc:6,liner:[5,8],linestyl:[14,23],linewidth:[2,3,6,8],link:[2,5,8,15,24],linpack:[2,10,19],linreg:2,linspac:[1,2,3,6,13,14,16,17,22,23,33],linux:[2,5,10,19],liquid:[2,3],list:[2,3,8,10,13,19,22,28,29],listcomp:3,literatur:[4,5,14,23,26],littl:[5,8,10,14,19,23,28],live:6,lle:3,lmb:3,lmbd:[2,5,8],lmbd_val:[2,5,8],load:[2,3],load_boston:3,load_breast_canc:7,load_data:8,load_digit:[5,8],load_iri:6,loc:[2,3,6,7,8,10,19],local:[3,4,5,7,8,12,13,14,15,21,22,23,24,28,29],locat:[6,8,14,23,26],log10:[3,9,18],log:[2,3,4,5,7,10,19],log_:2,logarithm:[2,4,10,19],logic:[0,2],logist:[2,3,6],logisticregress:7,logit:[4,5],logreg:7,logspac:[2,3,5,8,16,17,33],longer:[1,2,6,8,10,11,12,13,14,19,20,21,22,23],loocv:3,look:[0,1,2,3,5,6,7,8,10,11,12,14,15,19,20,21,23,24,28,32,34],loop:[1,2,3,5,10,11,12,19,20,21],loos:[15,24],lorentz:[15,24],lose:5,loss:[0,2,3,4,5,6,7,8,10,11,12,19,20,21],lost:[13,22],lot:[3,9,16,17,18,33],love:[11,13,20,22],low:[1,3,7,14,15,23,24],lower:[2,3,5,8,10,12,13,14,15,19,21,22,23,24],lowercas:[2,10,19],lowest:1,lstat:3,lstm:8,lstm_2layer:8,lstsq:3,lvert:5,m_0:[12,21],m_1:[14,23],m_1m_2:[14,23],m_2:[14,23],m_e:[12,21],m_h:2,m_i:[12,21],m_iv_i:[12,21],m_l:5,m_n:2,m_p:2,machin:[3,4,5,8,10,19],made:[0,2,4,5,7,8,9,12,13,18,21,22],mae:2,magnitud:[5,7,10,11,12,13,14,15,19,20,21,22,23,24],mai:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,15,18,19,20,21,22,24,27,29],mail:[26,27],main:[0,2,3,4,8,13,22,29],mainli:[2,3,4,11,13,20,22],maintain:[3,11,13,20,22,27],major:[2,3,5,9,10,18,19],make:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,26,27,28,33],make_axes_locat:3,make_moon:6,make_pipelin:[2,3],makedir:[2,3,7,10,12,13,14,19,21,22,23],makeplot:[2,10,19],malign:7,malth:26,manag:[2,5,8,10,19],mani:[0,1,2,3,4,6,7,8,10,11,13,14,15,19,20,22,23,24,25,26,30,32,34],manifestli:[12,21],manifold:7,manner:[8,15,24],manual:[9,18,29],map:[0,1,2,3,4,5,6,7],margin:[0,2,6,12,21],marit:3,mark:[2,10,19],markedli:[32,34],marker:[2,3],market:0,markov:0,markup:[32,34],marsaglia:1,mask:1,mass:[3,5,10,11,12,13,15,19,20,21,22,24,26],massag:2,masses2016:2,masses2016ol:3,masses2016tre:2,masseval2016:[2,3,10,19],massiv:[15,24],master:26,match:[5,14,23],materi:[0,2,3,4,5,7,8,9,10,11,12,13,15,18,19,20,21,22,24],math:[1,2,4,5,9,10,12,13,14,16,17,18,19,21,22,23,33],mathbb:[1,3,4,5,6,7],mathbf:[1,2,3,4,6,10,19],mathcal:[3,4,5],mathemat:[0,1,2,7,9,11,13,18,20,22,26],mathemati:[2,10,19],mathemt:3,mathrm:[1,2,3,4,5,6,7,10,11,12,13,15,19,20,21,22,24],matmul:[3,5],matplotlib:[1,2,3,4,5,6,7,8,9,10,12,13,14,16,17,18,19,21,22,23,33],matric:[3,4,6,7,8],matrix:[4,6,8],matter:[7,8],matur:[9,18],max:[2,3,5,7,8,12,13,14,21,22,23],max_depth:2,max_it:[2,5,6,7],maxdegre:3,maxim:[4,5,6,7],maxima:[14,23],maximum:[2,3,6,7,8,11,12,13,14,20,21,22,23],maxpolydegre:3,maxpooling2d:8,mbox:[3,16,17,33],mcculloch:5,mcint:1,mcintsqr2:1,mdoel:8,mean:[0,2,3,4,5,8,9,10,11,12,13,15,16,17,18,19,20,21,22,24,26,33],mean_absolute_error:[2,3],mean_i:1,mean_squared_error:[2,3,7,8],mean_squared_log_error:2,mean_x:1,meaning:0,meansquarederror:2,meant:[0,4,9,14,18,23,26],meantempvec:1,meanvec:1,measur:[1,2,3,5,7,10,11,13,14,15,19,20,22,23,24],mechan:[0,1,8,9,11,12,13,15,18,20,21,22,24,34],mechanist:0,media:[26,27],median:[2,3,7],mediaspac:26,medicin:[0,5],medium:[6,8,11,13,16,17,20,22,33],medv:3,meet:[9,18],mehta:3,member:27,memori:[5,7,8,13,22],mention:[1,2,5,11,13,14,20,22,23],mere:[14,23],mersienn:1,mesh:[10,11,12,19,20,21],meshgrid:[3,6,7],messi:[13,14,22,23],met:[0,2,3,6,7,12,21],metadata:[32,34],meter:[10,14,19,23],method:[0,2,4,5,6,7,8,9,11,14,18,20,23,26],methodolog:[9,18],metric:[2,3,5,7,8],metropoli:0,mev:[1,2,3],mgh:[14,15,23,24],mgl:[13,22],mglearn:[2,10,19],mgsin:[11,13,20,22],mgx:[15,24],mgy:[15,24],mhjensen:26,michael:8,michigan:34,mid:[5,7,12,21],midel:8,midpoint:[12,13,21,22,26],midterm:26,might:[3,5,7,11,12,14,20,21,23,28],mileag:[11,20],miller:1,million:[2,3,7],mimic:5,min:[3,6,7,14,23],min_:3,mind:[0,2,3],mindboard:8,mine:[2,10,19],mini:[5,7],minibatch:[5,7],minim:[0,1,2,3,4,5,7,13,14,22,23],minima:[2,4,5,14,23],minimum:[3,5,6,7,13,14,22,23],minmaxscal:[3,7],minneapoli:[15,24],minor:1,minut:[14,23],misclassif:6,misclassifi:6,mismatch:5,miss:3,mix:[5,10,11,13,19,20,22],mkdir:[2,3,7,10,12,13,14,19,21,22,23],mlab:[1,3],mle:[1,4],mlk:26,mlpclassifi:5,mlpregressor:2,mnist:[5,7],mod:1,mode:[1,13,22],model:[1,4,6,7,9,14,18,23],model_select:[2,3,5,7,8],modern:[0,2,3,4,9,18],modif:[5,14,23],modifi:[2,3,4,5,6,10,15,19,24],modul:[2,3,5,7,9,10,18,19],modular:[1,9,18],modulo:1,moe:[3,7],molecul:[11,20],molten:[15,24],moment:3,momenta:[10,14,19,23],momentum:[10,11,13,14,19,20,22,23,26],mondai:26,monoton:[1,5],monstertruck:0,mont:[0,1,2,3],montecarlocycl:1,moon:[14,23],moor:3,more:[0,1,5,9,12,14,15,16,17,18,21,23,24,26,28,29,32,33,34],moreoev:34,moreov:[2,8,32],morten:26,most:[0,1,2,3,4,5,6,7,8,9,10,11,12,14,15,18,19,20,21,23,24,32,34],mostli:[5,7],motion:[0,2,9,12,13,15,18,21,22,24,26],motiv:[5,11,13,20,22],mount:[15,24],move:[1,2,3,4,5,11,12,14,15,20,21,23,24,26],mpatch:[10,19],mph:[11,20],mpl:[2,10,13,19,22],mpl_toolkit:3,mplregressor:5,mr_:[14,23],mrv_:[14,23],mse:[2,3,7,8],msle:2,msu:26,mt19937_64:1,mu0:1,mu1:1,mu2:1,mu_:1,mu_k:[11,20],mu_n:7,mu_x:1,much:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,18,19,20,21,22,23,24],multi:[2,3,4,8,10,19],multiclass:[4,5],multidimension:[2,5,7,10,19],multinomi:4,multipl:[1,3,4,8,10,11,19,20],multipli:[1,3,7,8,10,11,12,15,19,20,21,24,26],multiplum:6,multitud:2,multivari:[0,1,2,7],multivariate_norm:7,murphi:7,must:[1,3,5,6,8,11,13,14,15,20,22,23,24,32,34],mutat:4,mutual:[3,8],mv_0:[12,21],mv_:[14,23],mv_e:[12,21],mvn:1,mx_:1,mydirectivenam:[32,34],myriad:[2,10,19],mz1:1,mz2:1,n_0:[1,5],n_b:1,n_boostrap:3,n_bootstrap:3,n_categori:[5,8],n_compon:7,n_featur:5,n_filter:8,n_hidden_neuron:[2,5],n_i:1,n_input:[5,8],n_iter_i:7,n_l:[1,5],n_neurons_connect:8,n_neurons_layer1:5,n_neurons_layer2:5,n_sampl:[3,6],n_split:3,nabla:[5,12,14,21,23],nabla_i:[12,21],nabla_jv:[12,21],naimi:2,naiv:4,name:[0,2,3,4,5,6,8,10,11,12,13,15,19,20,21,22,24,28,32,34],name_scop:5,namespac:1,narrow:28,nation:[5,27],nativ:[2,10,19],natur:[0,1,2,5,6,8,9,11,13,18,20,22],navier:5,navig:29,nbconvert:[2,10,19],nboot:1,ndarrai:3,nearest:[3,5,7,8],nearli:[15,24],neat:[2,10,19],neccesari:3,necessari:[0,5,6,8,11,13,20,22],necessarili:[0,1,7,14,23],neck:4,need:[0,1,3,5,6,7,8,11,12,13,14,15,20,21,22,23,24],neg:[1,2,3,4,5,11,13,14,15,20,22,23,24],neg_mean_squared_error:3,neglect:[1,13,14,22,23],neglig:[1,15,24],neighbor:[3,7,8],neq:1,nervou:5,nest:5,net:[5,8,11,12,14,15,20,21,23,24],netlib:[2,10,19],network:[0,3,4,10,19],neural:[0,3,4,10,19],neural_network:[2,5],neuralnetwork:5,neuralnetworktensorflow:5,neurosci:[32,34],neutral:2,neutron:2,never:[1,3,5,13,14,22,23],new_hobbit:[2,10,19],new_sig:3,newaxi:[2,3,8],newdata:[10,19],newli:[0,10,19],newton1:[11,20],newton:[1,4,5,6,10,13,15,19,22,24,26],newtonian:[15,24],next:[1,2,5,6,8,10,12,13,14,15,19,21,22,23,24],next_input:8,nice:[2,3,5,7,10,19,26],nielsen:8,nitric:3,nlambda:3,nldr:7,nm_n:2,nmse:3,node:5,nois:[2,3,6],noisi:[3,5],non:[1,3,4,5,7,8,12,13,21,22,26],none:[1,3,5,8],nonlinear:[3,5,6,7,8],nonneg:3,nonparametr:3,nonsens:1,nonsingular:[2,10,19],nonumb:[4,6,11,12,13,14,15,20,21,22,23,24],nor:[0,5],norm:[2,3,5,6,7,11,12,13,20,21,22],normal:[0,2,3,4,5,6,7,8,9,10,11,12,13,15,18,19,20,21,22,24],normali:[2,10,19],normpdf:3,north:[15,24],northern:[15,24],notat:[1,3,10,12,19,21],note:[1,2,3,4,5,6,7,8,10,11,12,13,14,19,20,21,22,23,28,32,34],notebook:[0,2,5,8,9,10,18,19,32,34],notesapril10:26,notesapril13:26,notesapril15:26,notesapril17:26,notesapril1:26,notesapril20:26,notesapril22:26,notesapril24:26,notesapril3:26,notesapril6:26,notesapril8:26,notesmarch13:26,notesmarch16:26,notesmarch18:26,notesmarch20:26,notesmarch23:26,notesmarch25:26,notesmarch27:26,notesmarch30:26,notesmarch9:26,noth:[1,3,5,6,10,19],notic:[1,2,5,10,12,15,19,21,24],notion:8,novel:[3,8],novemb:5,now:[1,2,4,5,6,8,10,11,12,13,14,15,19,20,21,22,23,24],nowadai:[0,2,5,8,9,18],nox:3,nozzl:[14,23],npt:[9,18],nsampl:3,nscl:26,nspin:1,nuclear:[13,14,22,23],nuclei:[1,2,14,23],nucleon:[2,3],nucleu:[2,14,23],number:[0,2,4,5,6,8,9,10,11,12,13,14,15,18,19,20,21,22,23,24],numer:[0,2,3,5,7,9,10,11,14,18,19,20,23,26],numpi:[1,3,4,5,6,7,8,9,12,13,14,16,17,18,21,22,23,33],nutshel:7,obei:[7,11,14,15,20,23,24],object:[2,3,6,8,10,14,19,23,26],oblig:27,observ:[3,4,5,6,7,8,11,14,15,20,23,24],obstacl:0,obtain:[1,3,4,5,6,10,11,12,13,14,15,19,20,21,22,23,24],obviou:[0,1,3,7,12,21],obviouli:2,obvious:[0,2,3,10,11,12,19,20,21],occupi:3,occur:[1,2,6,11,13,14,15,20,22,23,24],ocean:[15,24],odd:[2,3,4,7,12,13,21,22],odot:[12,21],off:[1,3,5,8,13,14,22,23],offend:2,offens:27,offer:[2,3,7,9,18],offic:26,offici:[27,28],offlin:27,ofil:1,ofstream:1,often:[0,1,2,3,4,5,6,7,9,10,11,13,14,15,18,19,20,22,23,24],ofter:[2,10,19],oint:[14,23],old:[5,12,21],ols_inv:3,ols_sk:3,ols_svd:3,omega02:[14,23],omega:[3,10,11,12,13,14,15,19,20,21,22,23,24],omega_0:[11,14,15,20,23,24],omega_0a:[13,22],omega_0t:[11,13,14,15,20,22,23,24],omega_c:[11,20],omega_ct:[11,20],omega_cv_i:[11,20],omega_i:[15,24],omega_t:[13,22],omega_x:[15,24],omega_xv_i:[15,24],omega_xv_z:[15,24],omega_yv_x:[15,24],omega_yv_z:[15,24],omega_z:[15,24],omega_zt:[15,24],omega_zv_i:[15,24],omega_zv_x:[15,24],omegatild:[13,22],omit:3,omnipres:[13,22],onc:[1,3,5,7,11,13,14,20,22,23,32,34],one:[0,1,2,4,6,7,8,9,12,13,14,15,18,21,22,23,24,32,34],onehot:5,onehot_vector:5,ones:[0,2,3,6,7,10,12,19,21],onli:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,18,19,20,21,22,23,24,32,34],onlin:[0,2,7,27],onto:[7,11,20],open:[0,1,2,3,5,9,10,18,19,27,28,29],oper:[0,1,2,3,5,7,8,10,12,13,19,21,22,28],operation:1,oplu:1,opportun:[0,2],oppos:[3,11,20],opposit:[5,6,11,12,14,15,20,21,23,24],oppotun:[9,18],opt:[0,2,3,5,6,7],optim:[0,4,7,8],optimis:8,option:[0,5,6,7,8],optmiz:5,orang:2,orbit:[12,21,26],order:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,18,19,20,21,22,23,24],ordinari:[4,7,8,11,13,20,22],org:[2,5,7,8,10,19],organ:[3,10,19],orient:[1,3,10,19,27],origin:[1,2,3,5,6,7,8,10,11,12,13,14,15,19,20,21,22,23,24],orthogn:3,orthogon:[2,3,6,7,10,15,19,24],orthonorm:3,oscil:[11,12,15,20,21,24,26],oscillatori:[13,22],osx:[2,10,19],other:[0,2,3,4,6,9,11,12,13,14,15,18,20,21,22,23,24,27],otherwis:[2,3,4,5,12,14,21,23,27],ouput:5,our:[0,4,6,8,9,12,14,15,18,21,23,24],ourselv:[0,2,3,6,7,10,11,13,14,15,19,20,22,23,24],out:[1,2,3,4,5,6,7,10,12,13,14,15,16,17,19,21,22,23,24,31,33],outcom:[1,3,4,5,9,15,18,24],outer:[3,5],outfilenam:1,outgo:[14,23],outlier:[2,3,6,7],outlin:[3,7,9,18],output:[0,2,3,4,5,6,8,10,11,19,20,32,34],output_bia:5,output_bias_gradi:5,output_weight:5,output_weights_gradi:5,outputlayer1:5,outputlayer2:5,outsid:8,outward:[12,14,15,21,23,24],over:[0,1,2,3,5,9,10,11,12,13,14,18,19,20,21,22,23],overal:[5,14,23],overarch:[0,11,20],overcom:[5,11,20],overdetermin:3,overfit:[3,5,8],overflow:5,overhead:5,overlap:[6,7,8],overlin:[2,3,7,10,19],overst:[0,2],overtrain:8,overview:[0,8,26],owe:0,own:[0,2,5,6,8,9,12,13,15,18,21,22,24,26],owner:3,oxid:3,p_0:[14,23],p_0b:[14,23],p_0b_:[14,23],p_2:[12,21],p_f:[14,23],p_fr:[14,23],p_i:1,p_j:1,p_n:1,p_x:[1,12,21],pack:2,packag:[0,1,3,5,6,7,8,13,22],pad:8,page:[2,29,31,32,34],pai:5,painless:2,paint:[14,23],pair:[1,2,3,8,11,20],panda:[8,12,13,14,21,22,23],panel:[2,10,19],paper:[5,9,18,26],paradigm:[0,2],parallel:[2,10,11,12,14,19,20,21,23],paramet:[0,1,2,5,6,7,8,10,14,19,23],parameter:[0,3,11,13,20,22],parametr:[2,3],paramt:8,pari:[15,24],park:1,part:[0,1,2,3,5,7,9,10,13,14,15,18,19,22,23,24,26,28],partform:[13,22],partial:[1,3,4,5,6,7,11,12,20,21],partial_:[12,21],partial_i:[12,21],partial_r:[14,23],partial_ru:[14,23],partial_ru_:[14,23],partial_tv:[12,21],partial_x:[12,13,21,22],partial_xv:[12,13,21,22],partial_yv:[12,21],partial_z:[12,21],partial_zv:[12,21],particip:[14,23,27],particl:[1,2,3,8,11,12,13,14,15,20,21,22,23,24,26],particular:[0,1,2,3,5,7,8,9,10,11,13,14,18,19,20,22,23,26],particularli:[1,3,6,7,9,13,18,22],partit:5,partli:3,paslei:[32,34],pass:[1,8,13,14,22,23],passeng:0,past:1,patch:[1,3,10,19],path:[2,3,7,10,11,12,13,14,15,19,20,21,22,23,24,32,34],patient:4,patter:8,pattern:[0,2,5,8,15,24,32,34],pauli:2,pavement:[11,20],pca:3,pdf:[0,2,3,8,10,19,26],pedagog:[3,9,18],pen:[9,18],penal:3,penalti:3,pencil:[9,18,26],pend1:[11,13,20,22],pend2:[11,13,20,22],pendulum:26,penros:3,peopl:[0,3,5],per:[2,3,9,10,14,15,18,19,23,24],perceiv:0,percentag:[3,7,26],perceptron:[2,4],peregrin:[2,10,19],perfect:[2,3,5,14,23],perfectli:[3,11,20],perform:[1,2,6,7,8,10,11,12,13,14,15,19,20,21,22,23,24],performac:8,perhap:[0,2,3,11,12,20,21],period:[5,11,14,15,20,23,24],perman:27,permiss:27,permut:[7,12,21],perp:[14,23],perpendicular:[11,14,15,20,23,24],person:[4,27],perspect:[12,21],pertain:[10,19],pertin:[5,9,18],perturb:[14,23],petal:6,petersen:1,phantom:1,phase:[3,5,11,13,15,20,22,24],phasespac:[14,23],phenomena:[1,13,22],phi:[6,10,11,12,13,14,19,20,21,22,23],phi_a:[15,24],phi_b:[15,24],phi_k:6,philosophi:[13,22],phone:26,phonon:[13,22],phrase:0,phy321:34,physic:[0,1,2,3,4,5,8,9,10,11,12,13,14,15,18,19,20,21,22,23,24,27],physics321:26,piazza:26,pick:[1,5,7,13,22],pictur:[0,2,13,22],pie:[2,10,19],piec:[5,7,12,14,21,23],pillow:[2,10,19],pinv:3,pip3:[2,5,10,19],pip:[2,5,10,19,29],pipelin:[2,3,6],pippin:[2,10,19],pitfal:[12,21],pitt:5,pixel:[5,8],pixel_height:[5,8],pixel_width:[5,8],place:[2,3,6,10,14,15,19,23,24],placehold:5,plai:[0,2,3,6,8,11,12,13,20,21,22],plain:[5,6],plan:[3,26],plane:[6,10,14,15,19,23,24],planet:[14,23],planetari:[14,23],plateau:1,platform:[2,10,19],plausibl:5,pleas:[7,26,28],plenti:5,plethora:5,plot:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,17,18,19,20,21,22,23,33],plot_count:3,plot_dataset:6,plot_max:8,plot_min:8,plot_predict:6,plt:[1,2,3,4,5,6,7,8,9,10,12,13,14,16,17,18,19,21,22,23,33],plu:[2,13,15,22,24],plug:[11,13,14,20,22,23],png:[2,3,7,10,12,13,14,19,21,22,23],point:[0,1,2,3,4,5,6,7,9,10,11,12,13,14,15,18,19,20,21,22,23,24],poisson:0,polar:[12,13,14,15,21,22,23,24],pole:[15,24],poli:[3,6],polici:27,polit:[0,27],poly100_kernel_svm_clf:6,poly3:2,poly3_plot:2,poly_featur:6,poly_kernel_svm_clf:6,polydegre:3,polym:5,polynomi:[0,2,3,4,6,7,12,21],polynomial_featur:3,polynomial_svm_clf:6,polynomialfeatur:[2,3,6],polytrop:3,pool:8,pool_siz:8,poor:5,popul:[2,3],popular:[0,1,2,3,5,6,7,8,10,13,19,22],popularli:2,portion:7,pose:[0,1,7],posit:[1,3,4,5,6,7,10,11,12,13,14,15,19,20,21,22,23,24,27],possess:[15,24],possibl:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,18,19,20,21,22,28],post:[16,17,26,27,28,33],postpon:[3,10,19],potenti:[0,2,3,5,9,10,11,12,13,18,19,20,21,22,26],pott:5,power:[2,3,5,6,7,9,11,13,18,20,22,32,34],practic:[1,3,4,6,14,23],practition:[2,5,8],pre:[32,34],preced:[1,5,7],preceed:8,preceq:6,precess:[15,24],precis:[0,1,2,3,7,10,12,14,19,21,23],precmess:[15,24],pred:3,predict:[0,2,3,4,5,6,7,10,15,19,24,32,34],predict_prob:5,predictor:[2,3,4,7],prefer:[2,5,6,7,13,22],prepar:[2,10,19],preprocess:[2,6,8],prerequisit:[0,2],presenc:[11,13,20,22],present:[0,1,2,3,5,9,12,18,21],preserv:[7,8],pressur:[15,24],pretti:[2,6,10,19],prevent:1,previou:[1,3,5,6,7,8,10,11,13,14,19,20,22,23],previous:[1,8],price:[3,8],primal:6,primari:[0,4],prime:[1,12,13,21,22],princip:[3,13,22],principl:[2,3,4,6,11,15,20,24],print:[1,2,3,5,6,7,8,10,12,14,19,21,23,32,34],print_funct:6,printout:[3,10,19],prior:[0,2,3],prioriti:0,privaci:0,privat:[0,2,27],privileg:[10,19],pro:26,prob:1,probabilist:3,probabl:[2,3,4,5,8,14,23],problem:[0,1,2,4,7,9,10,11,13,15,18,19,20,22,24,26],proce:[0,2,3,6,7,13,14,22,23],procedur:[6,7,15,24],proceed:[11,20],process:[0,1,2,3,9,10,11,18,19,20,26,29],prod_:[4,5],produc:[0,1,2,3,5,7,8,9,10,15,18,19,24],product:[2,3,4,5,6,8,10,12,14,19,21,23],profess:3,profession:27,profound:[12,21],program:[1,2,3,5,6,8,9,10,11,13,18,19,20,22],progress:5,prohibit:3,project:[0,1,2,3,5,7,9,15,18,24,26,27,28,29],project_root_dir:[2,3,7,10,12,13,14,19,21,22,23],promin:5,promis:6,pronounc:[2,10,19],proof:[3,5,12,21],prop:3,prop_cycl:[16,17,33],propag:8,proper:[0,2,3],properli:[5,6,9,18,32,34],properti:[2,5,7,8,10,11,15,19,20,24],proport:[1,2,3,5,7,11,13,20,22],propos:[5,28],propto:[14,23],protect:0,proton:[2,14,23],prove:[8,15,24],provid:[1,2,3,5,6,8,9,10,11,13,14,15,18,19,20,22,23,24],proxi:5,pseudoinvers:3,pseudorandom:1,psycholog:[0,2],ptratio:3,pub:26,publish:27,pull:[14,23,26,28,29],pulsar:5,punish:[0,2,5],pure:[1,13,14,22,23],purpos:[0,2,5,9,11,13,18,20,22,32,34],push:[15,24,28,29],put:[13,14,22,23],puzzl:[11,20],pycod:[2,10,19],pyhton2:[2,10,19],pylab:[2,10,13,19,22],pyplot:[1,2,3,4,5,6,7,8,9,10,12,13,14,16,17,18,19,21,22,23,33],python3:[2,3,6,7,10,19],python:[0,3,5,6,7,9,11,13,18,20,22,26],pytorch:[0,2,5,10,19],qbv_x:[11,20],qbv_y:[11,20],qquad:[2,7,10,19],quad:5,quadrat:[2,6,11,13,14,20,22,23],qualit:1,qualiti:[0,2,9,10,11,13,18,19,20,22],quantifi:[5,14,23],quantit:[0,3],quantiti:[1,2,3,4,5,7,11,12,13,15,20,21,22,24],quantum:[0,5,8,12,13,21,22],quartil:[3,7],question:[0,3,5,7,10,11,13,19,20,22,26],quick:[1,9,18],quickli:[7,8,12,13,14,15,21,22,23,24],quit:[3,5],quitecompl:[14,23],quot:1,r2_score:[2,3],r2score:2,r_1:[13,22],r_1t:[13,22],r_2:[13,14,22,23],r_2t:[13,22],r_h:[12,21],r_i:[12,21],rab:[12,14,21,23],race:27,rad:3,radial:[3,5,6,12,14,15,21,23,24],radialeqofmot:[14,23],radialeqofmotion2:[14,23],radialgvv:[14,23],radialhovv:[14,23],radii:[14,23],radio:[13,22],radioact:1,radiu:[3,7,11,14,15,20,23,24],rais:3,ramsai:[32,34],ran1:1,ran2:1,ran3:1,rand:[1,2,3,8,10,19],rand_max:1,randint:3,randn:[2,3,5,7,10,16,17,19,33],random:[0,2,3,5,6,8,10,14,16,17,19,23,33],random_devic:1,random_indic:[5,8],random_st:[3,6,7],randomli:[1,3,5],randomnumbergener:1,rang:[1,2,3,4,5,7,8,9,10,11,12,13,14,16,17,18,19,20,21,22,23,33],rangl:[1,3,7],rangle_x:1,rank:[3,8],raphson:[5,6],rapidli:[0,2,15,24],rare:[11,20],rate:[3,5,6,8,12,14,15,21,23,24],rather:[0,1,2,3,4,5,6,7,8,11,12,13,14,15,20,21,22,23,24],ratio:[4,7,13,14,22,23],rational:2,ravel:[3,6,7],raw:[1,8],rawdata:[10,19],rbf:[5,6,7],rbf_kernel_svm_clf:6,rbf_pca:7,rcond:3,rcparam:[1,2,5,6,8,10,13,16,17,19,22,33],rdotdot:[14,23],rdr:[13,22],reach:[1,3,5,7,8,11,12,14,20,21,23],reaction:[11,12,20,21],read:[0,1,3,5,6,8,9,10,11,12,13,18,19,20,21,22,26],read_csv:3,read_fwf:[2,3],reader:[0,1,2,10,19],readi:[2,5,6,7,9,10,18,19,28],readili:5,real:[3,4,5,7,9,10,13,14,15,18,19,22,23,24],realist:[9,18],realiti:[1,15,24],realiz:[5,13,14,22,23],realli:[2,5,11,20],reason:[0,3,5,8,9,15,18,24,27],rebenstock:26,recal:[1,2,3,5,7,10,15,19,24],recalcul:1,recast:[11,13,20,22],receiv:[1,5,8,13,22],recent:[0,2,3],recept:[5,8],receptive_field:8,recip:[2,3,4,10,19],recogn:[2,8,14,23,29],recognit:[0,2,5,8],recommend:[1,2,3,6,8,10,12,19,21,26,29],reconstruct:7,record:[11,20],recov:[10,19],recreat:1,rectangl:3,rectifi:[5,8],rectilinear:[15,24],recur:[0,2],recurs:[2,10,19],recycl:1,red:[2,3,6,8],redefin:3,reduc:[2,5,8,11,13,14,20,22,23],reduce_mean:5,reduct:[1,2,3],refactor:[9,18],refer:[0,2,3,5,7,8,9,11,13,14,15,18,20,22,23,24,26,32,34],refin:5,refit:3,reflect:[0,1,2,5,8,9,18],reformul:[11,20],reg:7,regard:[5,27],regardless:[5,14,23,27],region:[5,8,9,15,18,24],regist:1,regr_1:2,regr_2:2,regr_3:2,regress:[0,5,6],regressor:[3,4],regular:[4,15,24,32,34],regularizer_loss:5,regularizer_loss_fc1:5,regularizer_loss_fc2:5,regularizer_loss_out:5,reinforc:[0,2,6],reject:27,rel:[0,1,2,3,4,5,8,9,11,12,13,15,18,20,21,22,24,26,32,34],relat:[0,1,2,3,5,7,8,10,11,12,13,14,15,19,20,21,22,23,24,26],relationship:[0,2,3,7,8,15,24],relatist:[15,24],relativeerror:[3,9,18],relativist:[11,13,20,22],releas:[2,5,10,19,28],relev:[1,2,3,7,9,10,18,19],reli:[0,2,3,6,7,11,20],reliabl:[1,4,12,21],religion:27,relu:8,remain:[1,3,5,8,11,13,20,22],remaind:1,remark:[5,15,24],rememb:[2,6,10,13,19,22,28],remind:[0,1,3,7,9,11,13,14,15,18,20,22,23,24],remov:[3,8,27,29],render:[2,3,7,10,19,29,32,34],reorder:4,reorgan:[2,10,19],repeat:[1,2,3,5,7,8,10,11,12,13,14,15,19,20,21,22,23,24],repeated:0,repeatedli:[1,3,13,22],repel:[14,23],repercuss:27,repetit:3,rephras:[11,20],replac:[2,3,5,8,9,10,12,13,14,18,19,21,22,23,26],replica:3,repo:[28,29],report:[9,18,27],repositori:[0,29],repres:[0,1,2,3,4,5,6,8,9,10,11,12,13,14,15,18,19,20,21,22,23,24,27],represent:[0,1,3,5,7,8,13,22,27],reproduc:[0,1,2,5,9,14,16,17,18,23,26,28,33],repuls:[2,14,23],request:[0,2,28,29],requir:[2,3,5,6,7,8,9,10,11,13,14,18,19,20,22,23,29],resampl:[0,1],rescal:[3,5,7],research:[0,2],resembl:[1,3,15,24],reserv:[1,3,5],reset:1,reshap:[2,3,5,6,8,10,19],residenti:3,residu:3,resist:[12,13,21,22,26],reson:26,respect:[0,1,2,3,4,5,6,7,8,9,10,11,13,15,18,19,20,22,24,27],respond:[5,27],respons:[3,4,5,11,15,20,24],rest:[3,7,10,11,13,14,15,19,20,22,23,24,32,34],restat:[3,5],restor:[11,20],restrict:[0,5,15,24],result:[0,1,2,4,5,6,7,8,9,10,12,13,14,15,18,19,21,22,23,24,26,32,34],ret:3,retail:3,retain:[3,12,21],rethink:3,return_sequ:8,reus:[8,12,13,21,22],reveal:[0,5],revers:[5,14,23],revert:[10,19],review:27,revis:[5,10,19],revisit:[13,22],reward:[0,2],rework:5,rewrit:[1,2,4,5,6,10,11,12,13,14,15,19,20,21,22,23,24],rewritten:[1,3,6,14,23],rgb:8,rho:[3,14,15,23,24],rho_m:[11,20],rho_ma:[11,20],rhs:[7,10,19],rich:[0,2],ridg:[2,4,7],ridge_sk:3,right:[1,2,3,4,5,6,8,9,10,11,12,13,14,15,18,19,20,21,22,23,24,27],rightarrow:[1,3,5,6,7,10,11,12,13,14,15,19,20,21,22,23,24],rigid:[15,24],rigor:[0,2,15,24],ring:[3,14,23],rise:[3,15,24],risk:2,river:3,rk2:[13,22],rk4:[13,22],rmin:[14,23],rminofa:[14,23],rmse:3,rmsprop:8,rnn1:8,rnn2:8,rnn:5,rnn_2layer:8,rnn_input:8,rnn_output:8,rnn_train:8,rntrick1:1,rntrick2:1,rntrick3:1,rntrick4:1,road:0,robert:[32,34],robust:2,robustscal:[3,7],rocket:[12,21],role:[0,2,3,6,12,21],rolenam:[32,34],roll:[3,13,22],room:[0,2,3,26],root:[0,1,2,3,13,22],rot:[2,10,19],rotat:[6,10,11,12,14,19,20,21,23,26],roughli:[5,8,14,23],round:[3,7,15,24],routin:[2,10,19],row:[2,3,5,7,10,19],rp_f:[14,23],rrr:3,rtotheta:[14,23],rule:[3,9,10,14,15,18,19,23,24,26],run:[0,2,3,5,6,7,9,10,11,14,18,19,20,23,29,32,34],rung:26,runner:[10,19],runtim:[3,5],runtimewarn:5,rust:2,ruthtraj:[14,23],rvert:5,rvert_2:5,rwidth:3,s_0:[15,24],s_1:3,s_h:[12,21],s_i:[3,4],s_j:3,s_k:3,safe:1,sai:[0,1,2,3,4,5,6,7,8,10,11,14,15,19,20,23,24],said:3,sake:[2,3,4,7],sale:2,sam:[2,10,19],same:[1,2,5,6,7,8,10,11,12,13,14,15,19,20,21,22,23,24,32,34],sampl:[0,2,3,4,5,6,8,14,15,16,17,23,24,31,33],sampleexptvari:1,sampler:0,samwis:[2,10,19],sanitize_sequ:3,satisfactori:2,satisfi:[1,3,5,6,11,13,14,20,22,23],satur:[3,5],save:[2,3,7,8,9,10,12,13,14,18,19,21,22,23],save_fig:[2,3,7,10,12,13,14,19,21,22,23],savefig:[1,2,3,7,10,12,13,14,19,21,22,23],savetxt:8,saw:[12,13,21,22],scalar:3,scale:[2,3,4,5,6,7,9,10,14,18,19,23,26],scaler:[3,6,7],scan:4,scatt:[14,23],scattangl:[14,23],scatter:[2,3,6,10,19,26],scenario:3,scene:7,scheme:[5,10,19],schrage:1,sci:26,scienc:[0,1,2,5,8,9,10,18,19,26],scientif:[0,2,9,10,18,19,26],scientist:[0,2],scikit:[0,6,8,10,19],scikitlearn:2,scipi:[2,3,10,13,19,22],scl:3,scope:[5,28],score:[2,3,5,7,8,26],scores_kfold:3,sea:[15,24],seaborn:[2,3,5,7,8,10,13,19,22],seamless:[2,10,19],search:[2,5,8,11,14,20,23],seat:[15,24],sec:3,second:[0,1,2,3,4,5,6,7,8,10,12,13,14,15,19,21,22,23,24,26],secondeigvector:7,secondli:[5,13,22],section:[1,8,10,11,13,15,19,20,22,24,25,26,30],sector:[0,2],secur:0,see:[0,1,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,26,29,32,33,34],seed:[1,2,3,5,6,7,8,10,16,17,19,33],seek:[5,6],seem:[5,8,13,14,22,23],seemingli:2,seen:[0,1,2,3,5,7,8,9,11,14,15,18,20,23,24],seismic:3,seldomli:[2,9,18],select:[2,3,5,6,7,10,19],self:[0,1,3,5,9,18],sell:8,semi:6,semilogx:3,send:[5,26,28],sens:[0,3,6,11,20],sensibl:8,sensit:[2,3,7],sensor:0,sent:26,sentenc:[5,8],separ:[1,2,3,5,6,8,10,11,13,14,19,20,22,23,27],septemb:3,sequenc:[1,2,4,5,8,10,19],sequenti:[1,5,8],seri:[0,2,3,5,7,8,10,19,26],serif:[1,2,10,13,19,22],seriou:0,serv:[0,2,4,5,8,32,34],sess:5,session:[5,26],set:[0,1,2,4,7,9,10,12,13,14,15,18,19,21,22,23,24,27,28],set_:3,set_label:3,set_tick:6,set_titl:[2,4,5,7,8],set_xlabel:[2,3,4,5,7,8,10,12,13,14,19,21,22,23],set_xlim:[4,5,10,12,13,19,21,22],set_ylabel:[2,3,5,7,8,10,12,13,14,19,21,22,23],set_ylim:[4,5],set_ytick:7,set_yticklabel:3,setiosflag:1,setminu:3,setosa:6,setosa_or_versicolor:6,setp:3,setprecis:1,setup:[2,3,5,6,10,15,19,24,28],setw:1,sever:[0,1,2,3,4,5,6,7,8,9,10,12,13,18,19,21,22,26],sexist:0,sexual:27,sgd:[5,8],sgd_clf:6,sgdclassifi:6,shape:[2,3,5,6,7,8,9,10,14,15,18,19,23,24],share:[0,2,5,8,10,19],she:4,shift:[1,5],ship:8,shire:[2,10,19],shock:[13,22],shorten:8,shorter:1,shorthand:[2,10,12,19,21],shortli:[2,7,10,11,19,20],should:[0,2,3,6,8,10,11,12,13,14,15,19,20,21,22,23,24,26,29],show:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,18,19,20,21,22,23,24,27],shown:[1,5,6,7,8,11,12,20,21],showpoint:1,shrink:[3,6,8],shrinkag:3,shrunk:7,shuffl:[3,5],side:[3,5,6,10,11,14,15,19,20,23,24],sigh:[2,10,19],sigma0:1,sigma1:1,sigma2:1,sigma:[1,2,3,4,5,7,14,23],sigma_1:3,sigma_2:3,sigma_:[1,2,3,14,23],sigma_fn:[4,5],sigma_i:[2,3],sigma_j:3,sigma_m:1,sigma_n:[1,7],sigma_x:1,sigmoid:[4,6,8],sign:[1,4,5,6,11,14,15,16,17,20,23,24,26,33],signal:[5,13,22],signific:[5,15,24],significantli:[1,5,11,13,20,22],sim:[1,3,14,23],similar:[0,2,3,4,6,7,8,9,13,14,18,22,23,26,32,34],similarli:[1,2,3,5,6,7,10,13,14,15,19,22,23,24],simpl:[0,4,9,11,13,14,15,18,20,22,23,24],simpler:[0,2,5,9,11,12,18,20,21],simplernn:8,simplest:[0,2,3,5,8,10,12,13,15,19,21,22,24,32,34],simpli:[1,2,3,5,6,7,9,10,11,12,13,14,15,18,19,20,21,22,23,24],simplic:[3,4,5,6,7,10,11,14,19,20,23],simplicti:[13,22],simplifi:[0,2,3,10,14,19,23],simplist:1,simpson:26,simul:[0,1,3,11,20],simultan:3,sin:[2,3,5,8,10,11,12,13,14,15,19,20,21,22,23,24],sinc:[0,1,2,3,4,5,6,7,9,10,11,12,15,18,19,20,21,24],sine:[5,13,22],singl:[1,2,4,5,6,8,10,12,13,14,15,19,21,22,23,24,26],singular:0,sit:[13,15,22,24],site:[0,2,3,6,7],situat:[0,2,3,4,9,13,14,15,18,22,23,24],six:1,size:[1,2,5,6,7,8,10,11,12,13,14,19,20,21,22,23,27],sketch:[11,14,20,23],skill:[0,2,9,18,26],skip:7,skl:[2,3,7],sklearn:[2,3,5,6,7,8],slack:6,slice:[2,10,19],slide:[1,3,8,26],slight:[3,32,34],slightli:[1,3,4,5,11,12,15,20,21,24],slope:[5,6,7,10,19],sloppi:[11,20],slow:[3,6,7,11,20],slower:[2,3,10,15,19,24],slowli:5,slp:5,small:[1,2,3,5,6,7,8,11,12,13,14,15,20,21,22,23,24,26,31,32,34],smaller:[1,2,3,5,6,7,12,14,21,23],smallest:[2,8,10,19],smart:3,smooth:3,sne:7,sneak:3,sns:[2,3,5,7,8],soar:3,social:[0,2,27],societ:0,societi:[0,9,18],sofist:0,soft:[4,5],soften:6,softmax:[4,8],softmax_cross_entropy_with_logits_v2:5,softmax_loss:5,softwar:[0,6,9,18,26],sol:6,sole:[0,2,3],solid:[0,2,4,13,14,22,23],solut:[1,3,5,6,7,9,11,12,13,15,18,20,21,22,24,26],solv:[0,2,3,5,7,8,9,12,14,15,18,21,23,24,26],solver:[6,7,11,20],some:[0,1,4,5,6,7,8,9,11,12,13,14,15,16,17,18,20,21,22,23,24,26,32,33,34],someth:[0,1,5,7,11,20],sometim:[3,5,7,14,23],somewher:[14,23],soon:[3,10,13,15,19,22,24],sophist:[0,2],sort:[1,3,7],sound:[0,9,13,18,22],sourc:[0,1,2,3,5,9,10,11,13,14,18,19,20,22,23,29],south:[15,24],southern:[15,24],sovl:[12,21],space:[1,3,5,7,8,11,13,15,20,22,24,26,27],spacetim:[15,24],span:[0,2,3,7,10,19,32,34],spare:5,spars:[2,3,8],sparse_mtx:2,sparsecategoricalcrossentropi:8,spartan:[14,23],spatial:[5,8,10,13,19,22],speak:1,speci:[14,23],special:[1,2,3,4,5,9,10,11,15,18,19,20,24],specif:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,18,19,20,21,22,23,24,27,32,34],specifi:[0,1,2,3,4,7,10,11,15,19,20,24],specifici:2,spectacular:8,speech:[0,2,5,8],speed:[5,11,12,20,21],spell:[12,21],spend:1,sphere:[3,7,14,23],spheric:[14,23],sphinx:[32,34],spin:[3,12,21],spite:[0,2],spline:6,split:[0,1,2,5,6,7,8,12,21],spontan:[1,12,21],sprai:[14,23],spread:[1,3,7,14,23],spring2020:26,spring:[11,13,14,20,22,23,34],springer:26,springforc:[13,22],spuriou:[15,24],sqrsignal:[13,22],sqrt:[1,3,6,7,10,11,12,13,14,15,19,20,21,22,23,24],squar:[0,1,2,4,5,6,7,8,10,11,13,14,19,20,22,23],squash:5,srand:1,stabil:[11,13,20,22],stabl:[2,3,7,8,12,14,21,23],stack:[3,8],stadium:[14,23],stage:[0,11,13,20,22],stai:[2,3,7,8,11,12,13,14,15,20,21,22,23,24],stand:[0,2,3,5,10,15,19,24,32,34],standar:7,standard:[0,2,3,4,5,6,8,10,11,14,15,19,20,23,24],standardscal:[3,6,7],standpoint:[9,18],stanford:8,start:[0,1,3,5,6,7,8,9,10,11,12,13,14,15,18,19,20,21,22,23,24,26,31],startpoint:1,stat:3,state:[0,1,2,4,5,6,7,8,10,11,12,13,14,15,16,17,19,20,21,22,23,24,33,34],statement:[0,2,7,10,19],station:[13,22],statis:3,statist:[0,2,4,5,7,10,11,19,20],statu:[3,4,7],std:[1,2,3,10,19],stddev:5,stdev:1,steadi:[13,22],step:[1,2,4,5,8,10,13,14,15,19,22,23,24,28],step_fn:[4,5],stepsiz:[9,18],stereo:8,sthetover2:[14,23],still:[1,3,7,8,11,14,20,23],stimuli:5,stochast:[0,3,5,6,7],stock:[0,8],stoke:5,stone:[2,4],stop:[1,5,7,8,10,11,19,20],storag:3,store:[1,2,5,7,8,10,19,32,34],str:[5,8],straight:[0,2,3,6,11,15,20,24],straightforward:[3,6],strategi:[0,5,11,12,14,20,21,23],stratifi:3,stream:5,strength:[2,3,13,22],stretch:[7,11,14,20,23],strict:6,strictli:[6,11,20],strike:[3,14,23],string:[1,5],stroke:4,strong:[1,5,13,14,22,23],strongli:[0,2,3,6,8,10,14,19,23],stronli:3,structur:[0,2,3,5,8,9,10,18,19,26,31,32,34],stuck:5,student:[0,2,9,18],studi:[0,2,3,5,6,7,9,10,11,14,15,18,19,20,23,24,26],style:[2,10,13,19,22],sub:5,subdivid:[0,2,10,11,12,19,20,21],subfield:[0,2],subinterv:[12,21],subject:[1,3,6],subplot:[2,3,5,6,7,8,10,12,13,14,16,17,19,21,22,23,33],subplots_adjust:[1,6],subprogram:[2,10,19],subroutin:2,subscript:[5,10,12,15,19,21,24],subsect:[13,22],subsequ:[1,3,5],subset:[2,3,5,10,19],subspac:[3,6,7],substep:7,substitut:[3,5,11,12,13,14,15,20,21,22,23,24],subtend:[14,23],subtl:5,subtract:[1,3,7,8],succeed:2,success:[1,4,8],sucess:1,sudden:[13,22],suddenli:[15,24],sudo:[2,10,19],suffer:[3,5],suffic:[10,19],suffici:[3,5,6,7,13,14,15,22,23,24],suggest:5,suit:[5,6,13,22],suitabl:[1,3,7],sum:[1,2,4,5,6,7,11,12,13,14,20,21,22,23],sum_:[1,2,3,4,5,6,7,11,12,13,14,20,21,22,23],sum_i:[3,6,7,12,13,15,21,22,24],sum_ia_i:[15,24],sum_im_i:[12,21],sum_im_ix_i:[12,21],sum_j:3,sum_k:[2,3,5,6,10,19],sum_n:[13,22],sum_nx_:[13,22],summar:3,summari:[5,8,26],summat:3,sun:[11,14,20,23,26],superfici:8,superscript:5,supervis:[0,2,3,4],supplement:[4,15,24],support:[0,3,5],suppos:[0,2,3,4,5,6,7,10,11,15,19,20,24],supposedli:0,sure:[3,5,8,16,17,33],surfac:[2,11,12,14,15,20,21,23,24],surpass:3,surpris:2,surprisingli:[14,23],surround:[8,14,23],surv:0,survei:[0,2],svc:[6,7],svd:7,svdinv:3,svm:[6,7],svm_clf:6,svr:7,sweep:[11,20],swift:0,swing:[13,22],symbol:[1,2,5,7,9,10,11,12,18,19,20,21,26],symmetr:[0,2,3,5,6,7,10,14,15,19,23,24],symmetri:[3,13,22],sympi:[2,9,10,12,18,19,21],symplect:[12,21],synonim:1,syntax:[2,7,10,19,32,34],syntaxerror:[2,6,7,10,19],system:[0,2,3,4,5,8,9,10,13,14,18,19,22,23,26,28],systemat:[1,3],t_0:[10,19],t_f:[10,11,19,20],t_h:[12,21],t_i:[5,7,10,11,12,13,19,20,21,22],t_j:5,t_n:[12,21],t_x:[15,24],t_y:[15,24],tab:[13,22,29],taberror:[13,22],tabl:[1,2,10,19],tabul:2,tabular:[2,10,19],tag:[1,3,4,5,11,12,13,14,15,20,21,22,23,24,28],taht:2,tail:1,tailor:[2,6,7],taiwan:3,take:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,18,19,20,21,22,23,24,27],taken:[2,3,5,8,10,19],takeoff:[15,24],tan:[13,22],tangent:[5,8,15,24],tanh:[4,5,6,8,10,19],target:[2,3,5,6,7,8,14,23],task:[0,2,3,5,7,8],tau:[1,12,13,21,22],tau_z:[12,21],taught:[0,8,9,18],tax:3,taxpay:0,taylor2:26,taylor:[10,11,12,13,14,19,20,21,22,23,26],tba:26,tdt:[10,19],teach:[9,18],team:[5,27],teaser:2,techniqu:[0,1,2,3,5,6,9,10,11,12,18,19,20,21],technolog:[0,2,5],tediou:[9,14,18,23],tell:[1,3,7,8,11,12,13,20,21,22],temperatur:3,templat:29,tempor:[13,22],temporari:27,temporarili:27,ten:[2,10,19],tend:[3,5,6,8,11,14,15,20,23,24],tendenc:2,tension:[3,15,24],tensor:8,tensorboard:5,tensorflow:[0,2,6,10,19],term1:[3,7],term2:[3,7],term3:[3,7],term4:[3,7],term:[1,2,3,4,6,7,8,9,10,11,12,13,14,15,18,19,20,21,22,23,24,28],termin:[3,11,20],test:[0,1,2,6,7,8,9,11,14,18,20,23,29],test_acc:8,test_accuraci:[5,8],test_error:3,test_imag:8,test_ind:3,test_label:8,test_loss:[5,8],test_pr:5,test_predict:5,test_rnn:8,test_siz:[3,5,7,8],testerror:3,testi:8,testpredict:8,testx:8,tex:[16,17,33],text:[1,2,3,5,6,7,8,10,13,19,22,26,32,34],textbook:[11,20],tfinal:[10,12,13,14,19,21,22,23],than:[1,2,3,4,5,7,8,10,11,13,14,15,19,20,22,23,24],theano:[2,5,10,19],thei:[0,1,2,3,4,5,6,7,8,9,10,11,13,14,15,18,19,20,22,23,24,26,27,28,32,34],them:[0,2,5,6,7,8,9,10,13,15,18,19,22,24],theme:2,themselv:[1,2],thenc:3,theorem:[3,12,21,26],theoret:[3,11,20],theori:[0,2,5,6,11,13,20,22],thereaft:[2,3,5,7,10,13,15,19,22,24],therebi:[0,1,2,4,7,10,13,15,19,22,24],therefor:[1,2,3,4,5,6,7,8,13,14,22,23],therein:7,thereof:[0,2,3],theta:[1,3,5,11,12,13,14,15,20,21,22,23,24],theta_0:[11,14,20,23],theta_:[5,14,23],theta_i:5,theta_k:1,thi:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,27,28,29,30,31,32,33,34],thick:[14,23],thin:[14,23],thing:[1,3,5,7],think:[0,1,3,5,8,9,11,13,14,15,18,20,22,23,24,26],third:[0,2,3,8,10,12,13,14,15,19,21,22,23,24],thirti:7,those:[2,3,6,7,10,11,12,13,14,15,19,20,21,22,23,24,32,34],though:[0,1,5,11,13,14,20,22,23],thought:[1,3,14,15,23,24],thousand:[0,2,3,5,7],threaten:27,three:[0,2,3,5,6,8,10,12,13,15,19,21,22,24],threshold:[5,7,8],through:[0,1,2,3,5,6,7,8,9,10,11,12,14,15,18,19,20,21,23,24,26,28],throughout:[0,1,2,3,10,19],thrown:[11,20],thu:[0,1,2,3,4,5,6,7,10,11,12,13,14,15,19,20,21,22,23,24,26],thumb:3,thursdai:26,tick_param:3,ticker:1,tidal:[15,24],tide:[14,23],tight_layout:[7,10,12,13,14,19,21,22,23],tightli:7,tild:[1,2,3,7,13,22],till:[3,4,5,6,7,8,10,11,15,19,20,24],time:[1,2,3,4,5,6,7,8,9,11,12,13,14,15,18,20,21,22,23,24,26,32,34],timefunct:1,timeit:8,timer:8,tiniti:[10,19],tip:[8,25,30],tire:[11,20],titl:[1,2,3,5,6,8],to_categor:[5,8],to_categorical_numpi:5,to_numer:[2,3],to_str:1,todai:0,togeth:[2,3,6,7,14,15,23,24],toler:[11,20],tolist:8,tomographi:5,too:[1,3,7,11,20],took:[2,6,10,19],tool:[0,1,2,3,5,7,8,9,10,18,19,32,34],toolbox:6,top:[2,3,9,10,15,18,19,24],topic:[0,2,3,4,6,9,18,26],topolog:[5,8],torqu:[11,12,13,20,21,22],tot:[14,23],total:[1,3,4,5,6,7,8,11,12,13,14,20,21,22,23,26],totaldimens:7,totalvari:1,tout:0,toward:[4,5,13,14,15,22,23,24,27],town:3,tqdm:3,traceback:3,track:[5,8,10,14,19,23],tract:3,tractabl:[0,3,7],traction:0,trade:3,tradeoff:0,tradit:[0,2,3,5,8],tradition:[9,18],train:[0,2,6,7,9,11,15,18,20,24],train_accuraci:[2,5,8],train_end:5,train_error:3,train_imag:8,train_ind:3,train_label:8,train_loss:5,train_pr:5,train_siz:[5,8],train_test_split:[2,3,5,7,8],train_test_split_numpi:5,trainabl:5,traini:8,trainingerror:3,trainpredict:8,trainscor:8,trainx:8,trait:[0,2],trajectori:[8,11,12,13,14,20,21,22,23],transcendent:[11,20],transform:[3,4,5,6,7,14,23,26],transit:[3,5],translat:[5,8,12,13,21,22],translation:[12,21],transpos:[3,5,7],transvers:[14,23],trapez1:[12,21],trapez:[9,12,18,21],trapezoid:[9,18,26],trapoezoid:[12,21],travel:[11,14,20,23],treat:[1,3,5,8,13,14,15,22,23,24],tree:[0,5,26],trend:1,tri:[11,20],trial:[0,1,2,3],triangular:[2,10,19],trick:[1,6,7,8,14,15,23,24],trickier:[1,10,19],tridiagon:[2,10,19],trivial:[1,3,5,7,14,23],troll:27,troubl:[3,5,6,7],troubleshoot:28,truck:8,true_divid:5,true_fun:3,truncat:[10,13,19,22],truncated_norm:5,trust:[11,12,20,21],truth:0,tucker:6,tumor:[4,7],tumour:7,tune:[2,8,10,13,19,22],turn:[0,1,2,3,5,6,7,9,11,12,13,15,18,20,21,22,24],tutori:5,tweak:[1,5],twice:[10,14,19,23],twist:7,twister:1,two:[0,1,2,3,5,7,8,10,12,13,15,19,21,22,24,26,32,34],twoard:[15,24],txt:29,type:[0,1,3,6,10,11,12,13,19,20,21,22,26],typeset:[9,18],typic:[0,1,2,3,4,5,8,11,12,13,14,20,21,22,23],u_i:5,ubuntu:[2,10,19],uci:3,ugli:[13,22],unaccept:27,unari:[2,10,19],unbalanc:3,unbias:[1,2,3],unbound:[14,23],uncertainti:[3,11,20],uncertitud:1,unchang:[5,8,12,21],uncov:5,undamp:[13,22],undefin:3,under:[2,3,5,10,11,12,14,19,20,21,23],underdetermin:3,underfit:[3,5],undergo:[9,11,14,18,20,23],undergradu:0,underli:[0,1,2,5,9,18],understand:[0,2,5,8,9,11,18,20,26],understood:[6,11,14,20,23],undesir:6,undetermin:6,undriven:[11,13,20,22],unexpect:[1,3],unexpected:1,unfortun:[5,6,11,20],unicode_liter:6,uniform:[0,2,3,5,7,11,20],uniform_real_distribut:1,uniformli:[1,14,15,23,24],unifrompdf:1,union:3,uniqu:[0,2,3,9,18],unit:[1,2,3,5,8,9,11,12,13,15,18,20,21,22,24],unitari:[2,3,10,19],unitarili:[2,10,19],uniti:[1,13,22],univ:26,univari:1,univers:[0,8,34],unix:5,unknow:3,unknown:[3,5,6,7,8,13,22],unknowwn:5,unlabel:5,unless:[2,3,7,11,12,13,15,20,21,22,24],unlik:[1,5,6,8],unlimit:[12,21],unord:8,unravel:5,unrol:[7,8],unscatt:[14,23],unseen:4,unstabl:[5,14,23],unsupervis:[0,2,5],unsymmetr:[2,10,19],until:[1,5,8,13,22],unusu:5,unwelcom:27,updat:[3,5,7,10,12,13,14,19,21,22,23],upgrad:[11,20],upon:[0,5,7,11,15,20,24],upper:[2,3,6,10,12,19,21],uppercas:[1,2,10,19],ups:2,upward:[11,15,20,24],usag:[0,1,2,3,6,10,19],usain:[11,20],uscibook:26,usd10000:3,usd:3,use:[0,2,3,4,6,7,8,9,10,11,12,13,14,15,18,19,20,21,22,23,24,26,27,28,32,34],use_bia:8,usecol:[2,3],used:[0,1,2,3,4,5,6,7,9,10,11,12,13,14,15,18,19,20,21,22,23,24,26,32,34],useful:[0,1,2,4,5,7,8,10,11,12,13,14,15,19,20,21,22,23,24,26],useless:5,user:[2,4,5,6,7,8,9,10,11,18,19,20],uses:[1,2,3,5,7,8,10,12,13,14,19,21,22,23,32,34],usetex:1,using:[0,3,6,7,8,9,10,11,12,13,14,15,18,19,20,21,22,23,24,26,27,28,29],usr:1,usual:[2,4,5,8,11,14,15,20,23,24],util:[2,3,5,8],utliz:[12,21],utmost:0,v_0:[7,10,11,12,13,19,20,21,22],v_1:[12,21],v_e:[12,21],v_i:[10,11,12,19,20,21],v_jb_k:[11,20],v_n:[12,21],v_t:[10,11,19,20],v_x:[11,12,15,20,21,24],v_xf_x:[12,21],v_y:[11,12,20,21],v_yf_i:[12,21],v_z:[11,12,15,20,21,24],v_zf_z:[12,21],v_zt:[11,20],val_accuraci:8,val_loss:8,valid:[0,1,5,8,9,11,18,20,32,34],validation_data:8,validation_split:8,valu:[0,2,4,5,6,8,9,10,11,12,13,14,18,19,20,21,22,23],valy:8,van:3,vandenbergh:6,vandermond:3,vanilla:7,vanish:[1,5],var_x:1,varabl:6,varepsilon:3,varepsilon_:3,varepsilon_i:3,vari:[3,5,8,10,15,19,24],variabl:[2,3,4,5,6,7,10,12,14,15,19,21,23,24,26],varianc:[0,2,4,5,7],variance_i:[3,7],variance_x:[3,7],variant:[2,3,5,6,7,9,10,18,19],variat:[7,12,21,26,32,34],varieti:[0,2,5,10,19],variou:[0,1,2,4,5,6,7,9,10,12,13,15,18,19,21,22,24,26],vartempvec:1,varvec:1,varydimens:8,vastli:8,vaverag:[10,19],vdt:[11,20],vec:[1,3],vecto:[12,21],vector:[4,8,11,12,14,15,20,21,23,24,26],vehicl:[15,24],veloc:[11,13,14,15,20,22,23,24,26],velocityverlet:[13,22],ventur:[0,2,6,9,10,12,18,19,21],verbos:[5,8],veri:[0,1,2,3,5,6,7,8,10,11,12,13,15,19,20,21,22,24,26,32,34],verif:[9,18,26],verifi:[2,7,9,10,11,13,18,19,20,22],verlet:[13,14,22,23,26],versa:[12,21],versatil:[2,6,9,10,18,19],versicolor:6,version:[0,1,2,10,13,14,19,22,23,27,28,29],versu:[5,14,23],vert:[2,3,4,5,6,7,10,19],vert_1:3,vert_2:[3,7],vert_:[12,21],vertic:3,via:[0,1,2,3,5,6,7,9,10,11,12,13,18,19,20,21,22,27],vibrat:[14,23],vice:[12,21],video:[5,26],view:[0,1,2,5,9,10,12,15,18,19,21,24,26],viewpoint:27,violat:6,viridi:[2,5,8],virtual:[5,29],virtualenv:28,viru:26,viscos:[11,13,20,22],viscou:[11,13,20,22],vision:[0,2,8],visual:[0,2,3,7,13,22],viz:[1,3,6],vmax:3,vmc:1,vmin:3,volcano:[15,24],voltag:[14,23],volum:[2,11,14,20,23],volunt:28,vstack:[1,2,3,7],w_1:6,w_1x_1:6,w_1x_:6,w_2:6,w_2x_2:6,w_2x_:6,w_fc1:5,w_fc2:5,w_i:5,w_ix_i:5,w_out:5,w_px_:6,w_px_p:6,wai:[0,1,2,3,4,5,6,7,8,9,10,12,18,19,21,25,27,28,30],walker:1,wang:2,want:[0,1,2,3,5,6,7,8,10,11,13,15,16,17,19,20,22,24,28,33],warn:6,warrant:3,wast:8,water:[14,15,23,24],wave:[13,22],wavelet:6,wealth:[0,9,18],weather:[5,15,24],web:[2,9,18,26,28],websit:[2,10,19,28],wedg:[1,6],wednesdai:26,weekli:26,weight:[0,1,3,4,8,12,21],weight_vari:5,welcom:[6,27,28,29,32],well:[0,1,2,3,4,5,6,10,11,12,13,14,15,16,17,19,20,21,22,23,24,26,33],wendi:[32,34],went:6,were:[0,1,2,3,4,5,6,7,8,11,12,13,14,15,20,21,22,23,24],wessel:3,what:[4,5,7,8,9,10,11,12,13,14,15,18,19,20,21,22,23,24,26,27],whatev:[0,8],when:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,18,19,20,21,22,23,24,26,27,32,34],whenev:1,where:[0,1,2,4,5,6,7,8,9,10,11,12,13,14,15,18,19,20,21,22,23,24],wherea:[1,3,11,12,14,20,21,23,32,34],wherein:5,whether:[0,1,2,4,11,12,13,14,20,21,22,23,28,32,34],which:[0,2,3,4,6,7,8,9,10,11,12,13,14,15,18,19,20,21,22,23,24,27,32,34],whichev:8,who:[0,2,27],whoever:28,whole:[5,7,8],whose:[1,3,12,13,21,22],whow:[3,7],why:[0,2,11,15,20,24],wide:[2,3,5,8,10,11,13,19,20,22],widehat:3,wider:[0,15,24],width:[2,3,6,8],wieringen:3,wiki:27,willing:0,win:[14,23],wind:[11,13,20,22],wiscons:7,wise:[3,5],wish:[0,2,4,6,7,10,11,13,14,15,19,20,22,23,24,29],wither:3,within:[0,1,2,4,5,8,11,20,27,29],without:[0,2,3,5,6,7,10,11,13,19,20,22,26,27],witth:[13,22],won:[2,3],wonder:6,word:[1,2,3,7,8,15,24],work:[0,1,2,3,4,5,6,7,8,9,10,11,13,14,16,17,18,19,20,22,23,26,28,32,33,34],workflow:29,world:[3,6,7,8,11,20],worldwid:[2,15,24],wors:[2,3,5,8],would:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,19,20,21,22,23,24,26,28],wrap:[2,3,10,19,26],write:[0,1,2,3,5,6,9,10,12,13,14,15,18,19,21,22,23,24,25,30,32,34],writer:5,written:[0,1,2,3,5,7,9,10,11,12,13,14,18,19,20,21,22,23,32,34],wrong:[5,6,9,18,26],wrongli:1,wrote:[0,3,7],www:[2,5,10,19,26],wx_1:6,x0s:6,x1_exampl:6,x1d:6,x1s:6,x2d:[6,7],x2d_train:7,x2dsl:7,x2s:6,x3s:6,x_0:[2,3,7,10,11,12,13,19,20,21,22],x_1:[0,1,2,3,4,6,7,10,12,19,21],x_2:[0,1,2,3,4,6,7,10,12,19,21],x_3:[1,6],x_center:7,x_data:5,x_data_ful:5,x_f:[12,21],x_i:[1,2,3,4,5,6,7,11,12,20,21],x_ix_:3,x_iy_i:6,x_j:[1,5,6],x_jy_j:6,x_k:[1,5],x_l:1,x_m:[1,5],x_n:[0,1,3,5,6,7,13,22],x_p:[4,13,22],x_pred:8,x_reduc:7,x_scale:6,x_test:[3,5,7,8],x_test_own:3,x_test_scal:[3,7],x_tot:8,x_train:[2,3,5,7,8],x_train_own:3,x_train_scal:[3,7],xarrai:[2,10,19],xavier:5,xcode:[2,10,19],xf_y:[12,21],xfinal:[14,23],xi_1:6,xi_:6,xi_i:6,xiniti:[14,23],xlabel:[1,2,3,6,8,9,10,18,19],xlim:3,xnew:2,xpd:[3,7],xplot:2,xtest:3,xtick:[3,6,8],xtrain:3,xytext:6,y_0:[2,3,7,10,11,12,19,20,21],y_1:[2,3,6,7,12,13,21,22],y_1y_1:6,y_1y_1k:6,y_1y_2:6,y_1y_2k:6,y_1y_n:6,y_1y_nk:6,y_2:[2,3,6,7,12,21],y_2y_1:6,y_2y_1k:6,y_2y_2:6,y_2y_2k:6,y_3:2,y_data:[3,5],y_data_ful:5,y_decis:6,y_i:[2,3,4,5,6,7,10,12,13,19,21,22],y_ix_:3,y_ix_i:[4,6],y_iy_jk:6,y_j:[3,5,6],y_k:5,y_model:[3,8],y_n:[6,12,21],y_ny_1:6,y_ny_1k:6,y_ny_2:6,y_ny_2k:6,y_ny_n:6,y_ny_nk:6,y_p:[11,20],y_pred:[3,5,6,8],y_test:[3,5,7,8],y_test_onehot:5,y_test_predict:3,y_tot:8,y_train:[2,3,5,7,8],y_train_onehot:5,y_train_predict:3,yanalyt:[10,19],year:[0,2,12,13,21,22],yes:[0,3,4],yet:[0,3,5,6,7,10,11,14,19,20,23],yf_x:[12,21],yield:[1,2,3,5,6,10,12,13,14,19,21,22,23],ylabel:[1,2,3,6,8,9,10,18,19],ylim:[3,8,13,22],yoshua:5,you:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,26,28,29,31,32,33,34],young:[0,2],your:[0,1,2,3,5,6,7,9,10,11,12,13,15,16,17,18,19,20,21,22,24,26,28,29,33],yourself:[2,7,14,15,23,24],ypred:3,ypredict:[2,3],yridg:3,ytest:3,ytick:[3,6,8],ytild:3,ytildenp:3,ytrain:3,z_0:[2,11,20],z_1:2,z_2:2,z_c:5,z_h:5,z_i:5,z_k:5,z_m:5,z_o:5,z_out:5,zaman:1,zero:[1,2,3,5,6,7,8,9,10,11,12,13,14,15,18,19,20,21,22,23,24],zillion:0,zip:3,zm_h:2,zone:3,zze:[14,23]},titles:["Introduction to Applied Data Analysis and Machine Learning","1. Elements of Probability Theory and Statistical Data Analysis","2. Getting started, our first data and Machine Learning encounters","3. Linear Regression and more Advanced Regression Analysis","4. Logistic Regression","5. Neural networks, from the simple perceptron to deep learning","6. Support Vector Machines, overarching aims","7. Dimensionality Reduction","8. Convolutional Neural Networks","Introduction","Space, Time, Motion, Reference Frames and Reminder on vectors and other mathematical quantities","Basic Steps of Scientific Investigations","Work, Energy, Momentum and Conservation laws","Harmonic Oscillator","Two-body Problems","Non-inertial Frames, Translation and Rotating Coordinate Systems","Content with notebooks","Content with notebooks","Introduction","Space, Time, Motion, Reference Frames and Reminder on vectors and other mathematical quantities","Basic Steps of Scientific Investigations","Work, Energy, Momentum and Conservation laws","Harmonic Oscillator","Two-body Problems","Non-inertial Frames, Translation and Rotating Coordinate Systems","Content in Jupyter Book","PHY321, Classical Mechanics I, Michigan State University, Spring 2021","Code of Conduct","Contributing","LectureNotes","Content in Jupyter Book","Welcome to your Jupyter Book","Markdown Files","Content with notebooks","Markdown Files"],titleterms:{"break":26,"case":[1,6,10,19],"class":4,"final":[5,7,8,10,11,12,19,20,21,26],"function":[1,3,4,5,6,7],"import":[1,2,8,10,19],"new":8,"transient":[13,22],"try":8,Adding:[3,6,12,21,32,34],And:[2,11,20],Going:[11,20],Ising:3,NNs:8,OLS:3,One:[11,20],The:[1,3,4,5,6,7,8,11,12,13,15,20,21,22,24],Then:[11,20],Useful:[2,10,19],Using:[5,32,34],With:8,about:2,abov:[9,18],acceler:[10,11,15,19,20,24],act:[11,20],activ:5,actual:1,add:8,adjust:5,advanc:3,again:8,aim:[3,6],air:[10,11,19,20],aka:3,algebra:[3,10,15,19,24],algorithm:[3,5,7,12,21],all:6,altern:[13,22],analysi:[0,1,3,7],analyt:[10,19],angular:[12,21],anoth:3,appli:0,approach:[0,3,6,11,20],approxim:5,april:26,architectur:5,arrai:[2,10,19],artifici:5,asap:26,aspect:0,assumpt:3,attempt:[6,10,19],attribut:27,autocorrel:1,averag:[10,19],back:[5,6,7],backend:5,background:3,ballist:[11,20],basebal:[10,19],basic:[2,3,4,7,10,11,12,19,20,21],befor:7,beta:[3,13,22],better:[1,3,6],bia:3,bias:[0,5],binari:5,bind:[2,3],binomi:1,block:[1,11,13,16,17,20,22,33],bodi:[14,23],boldsymbol:3,book:[25,29,30,31],bootstrap:[1,3],boston:3,breast:7,brief:[2,3,8],bring:5,bug:28,build:[5,8,12,21,29],buld:[12,21],calcul:1,can:3,cancer:7,center:[7,14,23],central:1,centrifug:[14,15,23,24],chain:5,chi:3,choic:[0,5],choos:5,cifar01:8,citat:[32,34],classic:[7,11,13,20,22,26],classif:[5,7],classifi:6,cnn:8,code:[1,3,5,6,7,10,12,13,14,16,17,19,21,22,23,27,28,32,33,34],collect:[5,8],compact:[10,19],compil:8,compon:7,comput:[1,7,10,19],computation:3,concept:[1,9,18],conduct:[27,28],conserv:[12,21],constant:[10,19],content:[16,17,25,30,33],continu:[1,7],contn:[11,20],contribut:28,contributor:29,convex:6,convolut:[5,8],coordin:[15,24],corioli:[15,24],correl:[1,3,7,8],cost:5,cote:[12,21],coupl:[12,21],covari:[1,3,7],credit:29,critic:[13,22],cromer:[10,12,19,21],cross:[3,14,23],cumul:1,cython:2,damp:[13,22],dampl:[13,22],data:[0,1,2,3,5,7,8],dataset:[5,8],date:26,decompos:3,decomposit:[3,7],deep:5,defin:[5,11,20],definit:[1,5],degre:[3,7],demonstr:1,dens:[3,8],deriv:[5,12,13,14,21,22,23],descent:5,design:[3,7],detail:[3,6,8,11,20],develop:5,deviat:1,diagon:7,dice:1,differ:6,differenti:[10,11,13,19,20,22],dimens:[10,11,14,19,20,23],dimension:[3,6,7],direct:[32,34],discret:[1,10,12,19,21],disguis:1,distribut:1,document:28,doing:5,domain:1,don:8,down:5,driven:[13,22],earth:[12,21],economi:3,effect:[14,15,23,24],element:[1,10,19],ellipt:[14,23],encount:[2,10,19],energi:[2,3,12,21],enforc:27,equal:[12,21],equat:[3,5,6,10,11,12,13,19,20,21,22],error:[3,12,21],essenti:[],etc:[2,8],ethic:0,euler:[10,12,15,19,21,24],evalu:[5,8],event:1,exampl:[1,2,3,5,6,7,8,9,10,12,14,18,19,21,23],execut:[32,34],expect:[1,3],expens:3,experi:1,exponenti:1,express:[3,12,21],extens:[10,19],extrapol:8,extrem:[],factor:[13,22],fall:[10,11,15,19,20,24],famili:[3,5],famou:[1,2,10,19],fantast:3,featur:[2,3,6,7,10,19,28],februari:26,feed:5,feedback:28,field:[11,20],file:[8,32,34],find:[3,10,19],first:[2,5,6,10,11,19,20],fit:[2,3],fix:[3,28],fold:3,forc:[11,13,14,15,20,22,23,24],format:8,forward:5,foucault:[15,24],fouri:[13,22],fourier:[13,22],frame:[10,15,19,24],frank:[3,7],freedom:[3,7],frequentist:0,from:[3,5,8,15,24],full:[5,8],funtion:5,galilean:[15,24],gaussian:1,gener:[1,3],geometr:7,get:[2,6,28],going:3,good:0,grade:26,gradient:5,gravit:[14,23],handl:[0,2,10,19],happen:3,harmon:[13,14,22,23],height:[10,19],host:29,hous:3,how:[1,3,6],hyperbol:5,hyperparamet:5,hyperplan:6,idea:7,identifi:[11,20],illustr:[9,18],imag:8,implement:[1,5,10,19,28],improv:5,includ:[4,10,19],increment:7,inerti:[15,24],instal:[2,10,19],integr:[10,12,19,21],interpret:[3,7],introduc:[3,7],introduct:[0,2,4,9,18],investig:[11,20],its:1,jackknif:[1,3],januari:26,julia:2,jupyt:[25,30,31],kera:[5,8],kernel:[6,7],known:[9,18],kutta:[13,22],label:[10,19],lagrangian:6,lambda:3,languag:0,lasso:3,last:6,law:[11,12,20,21],layer:[5,8],learn:[0,2,3,5,7,26],least:3,lectur:26,lecturenot:29,librari:[2,10,19],likelihood:4,limit:[1,5],linear:[2,3,6,15,24],link:[3,7,26],list:5,lle:7,logist:[4,5,7],machin:[0,2,6,7],made:3,magnet:[11,20],mai:26,main:1,mani:[5,9,18],march:26,markdown:[16,17,32,33,34],mass:[2,14,23],materi:26,math:3,mathemat:[3,5,6,10,12,19,21],matric:[2,10,19],matrix:[1,2,3,5,7,10,19],matter:3,maximum:4,mean:[1,7],mechan:26,medic:8,meet:[1,2,10,19],mercer:6,mersenn:1,method:[1,3,10,12,13,19,21,22],michigan:26,minim:6,mlp:5,mnist:8,model:[0,2,3,5,8,10,11,19,20],moment:1,momentum:[12,21],moon:6,more:[2,3,4,6,7,8,10,11,13,19,20,22],motion:[10,11,14,19,20,23],multi:5,multidisciplinari:[],multilay:5,multipl:5,multipli:6,myst:[16,17,32,33,34],name:1,need:[2,10,19],network:[2,5,8],neural:[2,5,8],neuron:[5,8],newton:[11,12,20,21],non:[6,15,24],normal:1,notat:5,note:26,notebook:[16,17,33],now:[3,7],nuclear:[2,3],numba:2,number:[1,3,7],numer:[1,12,13,21,22],numpi:[2,10,19],object:[5,11,15,20,24],observ:1,obtain:7,omega_0:[13,22],one:[3,5,10,11,19,20],ones:5,optim:[3,5,6],optmiz:6,orbit:[14,23],ordinari:3,organ:2,orient:5,oscil:[13,14,22,23],other:[1,5,7,8,10,19,26],our:[1,2,3,5,7,10,11,13,19,20,22,27],outcom:[0,26],output:[1,16,17,33],overarch:[3,6,7,8],overdamp:[13,22],own:[3,7],packag:[2,10,19],panda:[2,3,7,10,19],paramet:[3,4],part:[8,11,20],pass:5,pca:7,pdf:1,pendulum:[11,13,15,20,22,24],perceptron:5,perform:[3,5],period:[1,13,22],perspect:[5,15,24],philosophi:[12,21],phy321:26,pledg:27,point:8,poisson:1,possibl:26,potenti:[14,15,23,24],practic:[10,19,26],pre:[5,8],predict:8,preprocess:[3,7],prerequisit:8,princip:7,principl:[13,22],probabl:[0,1],problem:[3,5,6,12,14,21,23],procedur:3,process:[5,8],program:0,projectil:[11,20],proof:7,propag:5,properti:[1,3],pseudo:1,python:[1,2,10,19],quadratur:[12,21],quantiti:[10,19],quick:6,raindrop:[11,20],ran0:1,random:[1,7],read:2,real:2,realist:6,recip:1,rectangl:[12,21],rectangular:[12,21],recurr:[5,8],reduc:[3,7],reduct:[7,8],refer:[10,19],reformul:3,regress:[2,3,4,7],regular:[3,5,8],rel:[14,23],relev:5,relu:5,remind:[2,6,10,19],report:28,repositori:3,resampl:3,resist:[10,11,19,20],reson:[13,22],respons:[13,22,27],result:[3,11,20],rewrit:[3,7],rich:[],ridg:3,rng:1,rnn:8,role:[32,34],rotat:[15,24],rule:[5,12,21],run:8,rung:[13,22],rutherford:[14,23],same:3,sampl:[1,7],scale:[8,11,13,20,22],scan:8,scatter:[14,23],schedul:26,scientif:[11,20],scikit:[2,3,5,7],scope:27,second:[11,20],section:[14,23],see:2,select:1,seri:[13,22],set:[3,5,6,8,11,20],should:[1,5,7],sigmoid:5,simpl:[1,2,3,5,6,7,8,10,12,19,21],simpler:6,simpson:[12,21],singl:[11,20],singular:[3,7],sinusoid:[13,22],situat:1,size:3,slide:[11,13,20,22],small:0,soft:6,softer:[11,20],softmax:5,softwar:[2,10,19],solar:[12,21],solut:[10,14,19,23],solv:[6,10,11,13,19,20,22],some:[2,3,10,19],sound:8,space:[6,10,19],split:[3,11,20],spring:26,squar:3,stabil:[14,23],standard:[1,27],start:[2,28],state:[3,26],statist:[1,3],step:[3,6,7,11,12,20,21],stochast:1,strong:8,studi:[12,13,21,22],submit:28,suit:3,sum:3,summari:2,sun:[12,21],superposit:[13,22],supervis:5,support:[6,7],svd:3,symmetri:[12,21],system:[11,12,15,20,21,24],systemat:8,teach:26,team:26,techniqu:7,tensorflow:[5,8],term:5,test:[3,5],textbook:26,theorem:[1,5,6,7,15,24],theori:1,thi:26,thing:8,think:7,third:[11,20],three:1,tidal:[14,23],tied:[11,20],time:[10,19],togeth:5,top:[5,8],toss:1,toward:7,tradeoff:3,train:[3,5,8],transform:[8,13,15,22,24],translat:[15,24],trapezoid:[12,21],tree:2,truncat:[12,21],two:[4,6,11,14,20,23],type:[2,5,8],uncorrel:1,underdamp:[13,22],understand:3,uniform:1,unit:[10,19],univers:[5,26],updat:26,usag:29,use:[1,5],used:8,useful:3,using:[1,2,5],valid:3,valu:[1,3,7],variabl:1,varianc:[1,3],variou:3,vector:[2,3,5,6,7,10,19],veloc:[10,12,19,21],verifi:8,verlet:[12,21],view:[3,7,8],visual:[5,8],volum:8,wai:[11,20],wall:[11,20],week:26,weight:5,welcom:31,well:[8,9,18],what:[0,1,2,3,6,32,34],where:3,which:[1,5],why:[1,3,5,7,8],width:[13,22],wood:2,work:[12,21],write:[7,28],your:[31,32,34],z_j:5}}) \ No newline at end of file +Search.setIndex({docnames:["chapter1","chapter10","chapter11","chapter2","chapter3","chapter4","chapter5","chapter6","chapter7","chapter8","chapter9","testbook/_build/jupyter_execute/chapter1","testbook/_build/jupyter_execute/chapter2","testbook/_build/jupyter_execute/chapter3","testbook/_build/jupyter_execute/chapter4","testbook/_build/jupyter_execute/chapter5","testbook/_build/jupyter_execute/chapter6","testbook/_build/jupyter_execute/chapter7","testbook/_build/jupyter_execute/lecturenotes/lecturenotes/notebooks","testbook/_build/jupyter_execute/notebooks","testbook/chapter1","testbook/chapter2","testbook/chapter3","testbook/chapter4","testbook/chapter5","testbook/chapter6","testbook/chapter7","testbook/content","testbook/intro","testbook/lecturenotes/CONDUCT","testbook/lecturenotes/CONTRIBUTING","testbook/lecturenotes/README","testbook/lecturenotes/lecturenotes/content","testbook/lecturenotes/lecturenotes/intro","testbook/lecturenotes/lecturenotes/markdown","testbook/lecturenotes/lecturenotes/notebooks","testbook/markdown"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":3,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":2,"sphinx.domains.rst":2,"sphinx.domains.std":1,"sphinx.ext.intersphinx":1,sphinx:56},filenames:["chapter1.ipynb","chapter10.ipynb","chapter11.ipynb","chapter2.ipynb","chapter3.ipynb","chapter4.ipynb","chapter5.ipynb","chapter6.ipynb","chapter7.ipynb","chapter8.ipynb","chapter9.ipynb","testbook/_build/jupyter_execute/chapter1.ipynb","testbook/_build/jupyter_execute/chapter2.ipynb","testbook/_build/jupyter_execute/chapter3.ipynb","testbook/_build/jupyter_execute/chapter4.ipynb","testbook/_build/jupyter_execute/chapter5.ipynb","testbook/_build/jupyter_execute/chapter6.ipynb","testbook/_build/jupyter_execute/chapter7.ipynb","testbook/_build/jupyter_execute/lecturenotes/lecturenotes/notebooks.ipynb","testbook/_build/jupyter_execute/notebooks.ipynb","testbook/chapter1.ipynb","testbook/chapter2.ipynb","testbook/chapter3.ipynb","testbook/chapter4.ipynb","testbook/chapter5.ipynb","testbook/chapter6.ipynb","testbook/chapter7.ipynb","testbook/content.md","testbook/intro.md","testbook/lecturenotes/CONDUCT.md","testbook/lecturenotes/CONTRIBUTING.md","testbook/lecturenotes/README.md","testbook/lecturenotes/lecturenotes/content.md","testbook/lecturenotes/lecturenotes/intro.md","testbook/lecturenotes/lecturenotes/markdown.md","testbook/lecturenotes/lecturenotes/notebooks.ipynb","testbook/markdown.md"],objects:{},objnames:{},objtypes:{},terms:{"00000000e":[5,9],"000e":9,"0039e":1,"00405815e":[],"00578340e":[],"0057e":1,"0059e":1,"00694659e":[],"00813277e":[],"00pm":28,"01118504e":[],"0112e":1,"0114e":1,"01176282e":9,"01193226e":[],"01222393e":[],"0129e":1,"012e":9,"0133e":1,"01347297e":[],"01405288e":[],"01443312e":[],"01600803e":5,"01617794e":[],"01633169e":[],"0185e":1,"01959093e":[],"01968016e":9,"02004166e":[],"02045611e":[],"0204e":1,"0207e":1,"0208e":1,"02176297e":[],"02186547e":[],"0232e":1,"02599545e":[],"0259e":1,"0307e":1,"03123374e":[],"03233215e":[],"03256632e":7,"03288157e":[],"03446279e":[],"0364e":1,"03705850e":[],"0393e":1,"04029857e":[],"040e":9,"0417e":1,"041e":9,"0422e":1,"04262460e":5,"0453e":1,"04719753e":[],"04722875e":[],"04904333e":[],"0502e":1,"05055916e":[],"0515e":1,"05246505e":[],"0525e":1,"0547e":1,"0558e":1,"0565e":1,"0577e":1,"0581e":1,"0588e":1,"058e":9,"05904756e":[],"0592e":1,"0595e":1,"060e":9,"06412459e":5,"0648e":1,"064e":9,"06648521e":[],"0678e":1,"0685e":1,"0688e":1,"07106781e":5,"07557895e":[],"075e":9,"0778e":1,"07968357e":[],"0803e":1,"0805e":1,"0808e":1,"0810e":1,"0814e":1,"08248290e":5,"0826e":1,"0829e":1,"08318298e":7,"0835e":1,"0866e":1,"08678173e":[],"0889e":1,"08915360e":[],"09013732e":[],"09284157e":[],"09358934e":[],"0939e":1,"09507879e":[],"0982e":1,"0986e":1,"0_tlsccwai":28,"0_utc9il9i":28,"0x7f9dd7c37eb0":[],"0x7fad47b08730":[],"0x7fb5be1db040":[],"0x7fddb4c436d0":[],"0x7fe6839db970":5,"0x7ff4f8410b20":[],"0x7ff6a7303b50":[],"1000s":5,"1007e":1,"100m":[13,22],"100th":2,"1017e":1,"1024e":1,"1028e":1,"10368860e":[],"10378326e":7,"1049e":1,"1059e":1,"10665316e":[],"10687329e":[],"10836834e":[],"1085e":1,"10898112e":5,"1091e":1,"1093e":1,"1095e":1,"1096e":1,"1098e":1,"10th":28,"10x":4,"1103e":1,"1104e":1,"1105e":1,"1106e":1,"1118e":1,"1119e":1,"1120e":1,"112453549290521e":[14,23],"1125e":1,"1126e":1,"11314068e":[],"1131e":1,"1139e":1,"1140e":1,"1146e":1,"11487443e":[],"1148e":1,"1149e":1,"114e":9,"11507992e":7,"1155e":1,"1157e":1,"1159e":1,"115e":9,"1164e":1,"1165e":1,"11698369e":5,"11705599e":[],"11765797e":[],"117e":9,"1183e":1,"1188e":1,"1196e":1,"1197e":1,"1198e":1,"1203e":1,"12219360e":[],"1231e":1,"1237e":1,"12397083e":9,"1239e":1,"12403403e":[],"12471292e":[],"1253e":1,"12541909e":[],"1259e":1,"1264e":1,"1265e":1,"12674763e":[],"12868265e":[],"12908684e":[],"1290e":1,"1299e":1,"12cm":[12,21],"1302e":1,"13037918e":9,"1307e":1,"1308e":1,"1312e":1,"1327e":1,"1329e":1,"13404436e":[],"1341e":1,"1357e":1,"1372e":1,"1385e":1,"1403e":1,"1432e":1,"1449e":1,"14549644e":9,"1467e":1,"146e":9,"1482e":1,"14g":5,"1506e":1,"1508e":1,"1510e":1,"154m":1,"1564e":1,"15657183e":[],"15751255e":[],"1579e":1,"1592e":1,"15g":5,"1612e":1,"1615e":1,"16214154e":[],"1629e":1,"1643e":1,"16496581e":5,"1651e":1,"168m":1,"16b8e3cda33a":7,"16m":1,"1704e":1,"17061481e":[],"17082679e":5,"17174962e":7,"17314f270d45":9,"1733e":1,"1740e":1,"1751e":1,"17683028e":9,"1770e":1,"1796e":1,"17m":1,"1812e":1,"1827e":1,"1830e":1,"1834e":1,"18442813e":[],"1862e":1,"18721828e":9,"1888e":1,"1890e":1,"1895e":1,"18m":1,"1902e":1,"1910e":1,"19218307e":[],"1938e":1,"1946e":1,"1954e":1,"1960e":1,"19614372e":9,"1970e":1,"1970s":[4,12,21],"19762810e":[],"1976e":1,"19872323e":9,"198e":9,"19m":1,"19th":2,"1_1":7,"1_2":7,"1_2v2se359":28,"1_2v439nza":28,"1_3":7,"1_azwo1s2r":28,"1_b81t0tta":28,"1_d70czgce":28,"1_e1cs5784":28,"1_ftgzt035":28,"1_hxxec3uc":28,"1_i9hczn21":28,"1_j5ugthfg":28,"1_rz8vr2ht":28,"1_sp7p28vk":28,"1_t1pocrww":28,"1_t2l86862":28,"1_utivxb87":28,"1_w9xc8az7":28,"1_wk9trq9k":28,"1cm":[3,4,8,13,22],"1e4":5,"1kg":[12,21],"1kgm":[12,21],"1ms":10,"2022e":1,"202e":9,"2031e":1,"2050e":1,"2059e":1,"20686874e":[],"20745612e":[],"2091e":1,"2095e":1,"20m":1,"2102e":1,"2108e":1,"2114e":1,"2129e":1,"2134e":1,"21351358e":[],"2143e":1,"2157e":1,"21635571e":[],"2165e":1,"2170e":1,"21814310e":[],"21869563e":[],"21918258e":9,"21m":1,"21st":28,"2211e":1,"22164060e":[],"2221e":1,"2223e":1,"22421033e":[],"224805627923717e":[14,23],"2259e":1,"2261e":1,"2266e":1,"22674158e":[],"226e":9,"227m":1,"228e":9,"2295e":1,"22m":1,"2320e":1,"2321e":1,"2324e":1,"2335e":1,"2387e":1,"23908217e":[],"23h":[17,26],"2401e":1,"2423e":1,"24243736e":9,"2427e":1,"24411055e":[],"24417907e":5,"2452e":1,"24557890e":5,"24623749e":[],"24629399e":[],"24790498e":[],"2484e":1,"2492e":1,"24h":[17,26],"24m":1,"2523e":1,"2525e":1,"252e":9,"2535e":1,"25429987e":5,"254e":9,"2572e3a4b38d":7,"2584e":1,"2591e":1,"25m":1,"2605e":1,"2624e":1,"26349118e":[],"263e":9,"26519220e":[],"26664263e":5,"26888965e":[],"2688e":1,"268e":9,"2699e":1,"2715e":1,"27564656e":[],"2756e":1,"2787e":1,"27881252e":[],"279e":9,"27n_":3,"2810e":1,"28119384e":[],"2841e":1,"28444646e":[],"28590170e":[],"2888e":1,"28kg":[17,26],"29001174e":[],"2907e":1,"2909e":1,"2911e":1,"29127820e":[],"2963e":1,"2971e":1,"2973e":1,"2981e":1,"2_1":7,"2_2":7,"2_3":7,"2_i":7,"2_m":3,"2_x":3,"2cm":[8,12,21],"2dimgrav":[16,25],"2dimhovv":[16,25],"2e_i":2,"2ff97f4bf03b":3,"2g_i":1,"2k_2":[15,24],"2k_3":[15,24],"2me":[16,25],"2meb":[16,25],"2mr":[16,25],"2mr_":[16,25],"2ms":[],"2nd":[15,24,28],"2v_":[13,22],"2v_x":[13,22],"2v_y":[13,22],"2x_ix_jy_iy_j":8,"2x_j":8,"2y_0":[12,21],"2y_j":8,"2z_":9,"30273573e":[],"3027e":1,"3037e":1,"3044e":1,"3047e":1,"30579019e":9,"3071e":1,"3095e":1,"30pm":28,"3124e":1,"3126e":1,"3134e":1,"3150e":1,"3174e":1,"31819744e":9,"3201e":1,"3212e":1,"3216e":1,"32218090e":[],"3226e":1,"3238e":1,"3246e":1,"3250e":1,"3281e":1,"32849325e":[],"3285e":1,"33026664e":9,"33066907e":5,"33291949e":[],"3337e":1,"33381074e":[],"333e":9,"33583503e":[],"33608388e":[],"33637629e":[],"3364e":1,"3370e":1,"33851317e":[],"3386e":1,"3408e":1,"3423e":1,"34343487e":9,"3434e":1,"3438e":1,"3446e":1,"3470e":1,"3475e":1,"3488e":1,"34991581e":[],"3515e":1,"35186316e":[],"3550e":1,"35938336e":[],"3631e":1,"36351028e":[],"36440033e":[],"36648631e":[],"3666e":1,"3675e":1,"3678e":1,"36816390e":[],"3682e":1,"3717e":1,"37369358e":9,"37689988e":[],"37715992e":[],"37773764e":[],"3780e":1,"379e":9,"38189254e":[],"381e":9,"3826e":1,"3840e":1,"3847e":1,"38483045e":9,"3857e":1,"3860e":1,"38957572e":5,"39086494e":[],"39110289e":[],"39377982e":[],"3980e":1,"3982e":1,"3983e":1,"3985e":1,"39860289e":9,"3f1158901148":2,"3rd":28,"3x_i":1,"4007e":1,"4017e":1,"4022e":1,"4047e":1,"4079e":1,"40925064e":[],"41088348e":[],"412252157986472e":[14,23],"41241709e":[],"4128e":1,"41511965e":7,"4156e":1,"41836625e":9,"4195e":1,"422e":9,"4292e":1,"4299e":1,"43297505e":[],"4331e":1,"4335e":1,"4340e":1,"4357e":1,"435e":9,"4361e":1,"43821714e":[],"4402e":1,"44034203e":[],"4408e":1,"4419e":1,"4450e":1,"44786221e":9,"4479e":1,"447e":9,"4491e":1,"4494e":1,"44970586e":7,"4498e":1,"4500e":1,"45035234e":[],"45426079e":[],"4655e":1,"4666e":1,"4672e":1,"4696e":1,"4700e":1,"4701e":1,"4722e":1,"47269386e":[],"4740e":1,"47580075e":[],"4817e":1,"4866e":1,"48868704e":9,"4889e":1,"48974653e":[],"4898e":1,"4929e":1,"4969e":1,"49747700e":9,"4977e":1,"49887171e":[],"4ar":[16,25],"4dr":[16,25],"4f_0":[14,23],"4pm":28,"4th":28,"5018e":1,"501e":9,"5034e":1,"5036e":1,"5039e":1,"5041e":1,"50446329e":[],"50470354e":[],"504e":9,"5052e":1,"50565973e":9,"50pm":28,"50x10":7,"5101e":1,"5105e":1,"512e":9,"51355225e":[],"51502206e":[],"5156e":1,"5159e":1,"51737928e":[],"5184e":1,"5196e":1,"52131750e":[],"52177694e":[],"52277631e":[],"52491181e":[],"52533249e":[],"52583599e":[],"5258e":1,"52783754e":[],"52806307e":[],"5307e":1,"5314e":1,"5331e":1,"5332e":1,"5339e":1,"5344e":1,"5345e":1,"5352e":1,"5362e":1,"5374e":1,"5386e":1,"53990135e988":5,"54220685e":[],"54223480e":[],"5445e":1,"5449e":1,"5451e":1,"54686289e":[],"5506e":1,"55287874e":[],"5532e":1,"55336603e":5,"5537e":1,"55456211e":[],"5546e":1,"5549e":1,"55726683e":[],"55822858e":[],"55868382e":[],"56282700e":[],"56432255e":9,"565e":9,"5691e":1,"5694e":1,"56min":[17,26],"57072598e":[],"570e":9,"5722e":1,"57425734e":5,"5793e":1,"5796e":1,"5801e":1,"5803e":1,"58130740e":[],"5831e":1,"58458590e":[],"58473257e":[],"5861e":1,"5875e":1,"58928789e":[],"58934440e":[],"58977964e":9,"58998839e":[],"5899e":1,"5901e":1,"59310961e":9,"5936e":1,"5960e":1,"5971e":1,"59766065e":[],"59775278e":[],"5984e":1,"59958864e":[],"5cm":[3,15,24],"5th":28,"6012e":1,"604e":9,"60505104e":[],"60559584e":[],"6065e":1,"60896055e":[],"60996409e":[],"61028757e":9,"6115e":1,"61233230e":[],"6124e":1,"6135e":1,"61445925e":[],"61517814e":9,"6183e":1,"6186e":1,"6197e":1,"62035199e":5,"6209e":1,"62113986e":[],"6232e":1,"62496853e":[],"62554056e":5,"6259e":1,"6264e":1,"62790003e":[],"6280e":1,"628e":9,"6291e":1,"63164705e":[],"63177381e":[],"6324e":1,"6325e":1,"6333e":1,"6367e":1,"63748198e":[],"6380e":1,"63862824e":5,"6387e":1,"638e":9,"64043119e":[],"6460e":1,"6479e":1,"64x50":7,"6501e":1,"6509e":1,"653m":1,"65939208e":5,"66371431e":[],"66517501e":[],"66528972e":9,"6659e":1,"66678115e":[],"6670e":1,"6733e":1,"6756e":1,"67761543e":9,"6776e":1,"67844938e":5,"67887686e":[],"67901631e":[],"6795e":1,"67m":[17,26],"6803e":1,"6825e":1,"6826e":1,"6832e":1,"6858e":1,"6867e":1,"6893e":1,"6905e":1,"69069n_":3,"69095941e":9,"69238112e":9,"6966e":1,"6ea927cc6e88":7,"6n_":3,"6pm":28,"6th":28,"7023e":1,"70287435e":[],"7079e":1,"70865417e":[],"70896266e":9,"710e":9,"7125e":1,"71385616e":[],"713e":9,"7141e":1,"7159e":1,"71833086e":[],"7187e":1,"72347840e":[],"72352580e":[],"7236e":1,"72425639e":5,"7252e":1,"7273e":1,"7284e":1,"7287e":1,"7288e":1,"72892756e":[],"7295e":1,"7296e":1,"729e":9,"7310e":1,"7319e":1,"73212847e":[],"73374509e":[],"7378e":1,"7385e":1,"73875395e":5,"7391e":1,"7413e":1,"7418e":1,"74406011e":[],"744e":9,"7457e":1,"7475e":1,"74784357e":[],"7489e":1,"7513e":1,"75209222e":[],"7562e":1,"7583e":1,"7585e":1,"7593e":1,"7600e":1,"76071445e":[],"7611e":1,"7654e":1,"7690e":1,"7706e":1,"7712e":1,"7722e":1,"77350269e":5,"7755e":1,"77667437e":[],"77804918e":9,"78496845e":9,"78512013e":[],"7879e":1,"78920723e":[],"7905e":1,"79318674e":9,"79390227e":5,"79464371e":[],"79482386e":9,"7968e":1,"7972e":1,"7th":28,"8043e":1,"80481726e":9,"8049e":1,"8084e":1,"80872400e":[],"8102e":1,"8111e":1,"811e":9,"8134e":1,"8135e":1,"8137e":1,"81402316e":9,"8163e":1,"8174e":1,"81862750e":[],"8203e":1,"8225e":1,"8237e":1,"82725395e":[],"8312e":1,"83131741e":[],"83194721e":9,"8321e":1,"83259341e":9,"83286207e":[],"83323451e":[],"8335e":1,"8355e":1,"8358e":1,"8361e":1,"8382e":1,"84045777e":[],"84355903e":7,"8441e":1,"84443254e":7,"8467e":1,"84683780e":[],"8501e":1,"852e":9,"8597e":1,"86195387e":9,"8674e":1,"86797194e":[],"8689e":1,"86972479e":9,"8700e":1,"8702e":1,"8710e":1,"873e":9,"8755e":1,"8767e":1,"8771e":1,"8779e":1,"8793e":1,"8797e":1,"882e":9,"884935143687282e":1,"885e":9,"8864e":1,"8865e":1,"8874e":1,"8886e":1,"8894e":1,"8897e":1,"89045976e":[],"89346326e":5,"89354206e":[],"8938e":1,"89456494e":[],"8949e":1,"89585850e":5,"8th":28,"8x8":7,"9011e":1,"9020e":1,"903e":9,"90524667e":[],"90548268e":9,"90555053e":[],"9066e":1,"9074e":1,"90838144e":[],"91032829e":[],"9124180119966666e":1,"91269450e":9,"9130e":1,"9159e":1,"917u":[],"91811329e":9,"9190e":1,"9197e":1,"9199e":1,"9233e":1,"92407803e":9,"92507116e":7,"9254e":1,"9274e":1,"92870110e":[],"9295e":1,"92983892e":9,"9299e":1,"9305e":1,"930e":9,"932u":[],"9330e":1,"933u":[],"9351e":1,"9370e":1,"938e":9,"93947492e":[],"939u":[],"94395333e":[],"94466097e":[],"9452e":1,"94553659e":[],"9456e":1,"948e":9,"95125898e":[],"9527e":1,"9548e":1,"954e":9,"9551e":1,"95572537e":[],"955820c21e8b":[1,10],"957u":10,"958u":10,"959u":10,"9601e":1,"96064784e":[],"960e":9,"960u":10,"9610e":1,"9625e":1,"9636e":1,"9638e":1,"9656e":1,"968u":10,"9706e":1,"9712e":1,"9715e":1,"9720e":1,"9755e":1,"97624658e":[],"9763e":1,"9771e":1,"9781e":1,"9787e":1,"98010863e":[],"9809e":1,"981e":9,"98414609e":9,"9843e":1,"9844e":1,"984e":9,"9857e":1,"98658737e":[],"9903e":1,"9906e":1,"9911e":1,"99126621e":9,"9923e":1,"9924e":1,"9964e":1,"996e":9,"9th":28,"abstract":[7,11,20],"boolean":[1,2,10],"break":[4,5,9,12,13,16,21,22,25],"byte":[4,12,21],"case":[0,1,2,4,5,6,7,9,10,11,13,14,15,16,17,20,22,23,24,25,26],"catch":4,"char":3,"class":[0,3,4,5,7,8,9,10,11,12,15,20,21,24,28],"const":[3,9],"default":[1,4,5,6,7,10,12,21,34,36],"final":[2,3,4,5,6,8,11,15,16,17,20,24,25,26],"float":[1,3,4,5,9,10,11,12,14,20,21,23],"forss\u00e9n":2,"function":[0,2,4,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,34,36],"import":[0,1,2,5,6,7,8,9,11,13,14,15,16,18,19,20,22,23,24,25,28,31,35],"int":[1,2,3,5,7,9,10,13,15,16,22,24,25],"long":[1,2,3,4,7,10,13,15,16,17,22,24,25,26],"new":[0,2,3,4,5,6,7,8,9,11,12,13,14,15,20,21,22,23,24],"null":3,"public":[0,4,12,21,29],"return":[1,2,3,4,5,7,8,9,10,11,12,13,14,15,16,20,21,22,23,24,25],"s\u00f8renssen":28,"short":[1,10,27,32],"super":5,"switch":[4,16,17,25,26],"throw":[3,13,15,17,22,24,26],"true":[1,2,3,4,5,6,7,8,9,10,14,15,16,17,23,24,25,26],"try":[0,3,4,6,7,8,9,11,12,13,15,16,20,21,22,24,25],"var":[3,5,9],"while":[0,1,2,3,4,5,7,8,9,10,13,14,15,17,22,23,24,26,28],AGE:5,AMS:28,AND:[1,2],Added:[13,22],Adding:[0,7],And:[0,3,5,10,11,12,20,21],Are:[9,13,22],BPS:28,Being:29,But:[1,2,3,4,5,7,9,13,14,17,18,19,22,23,26,35],CAS:[4,12,21],DIS:5,Doing:5,EoS:5,For:[0,1,2,3,4,5,6,7,8,9,10,12,13,14,15,16,17,18,19,21,22,23,24,25,26,28,34,35,36],GPS:0,Going:[5,7],I_s:[15,24],Ising:7,Its:[1,7,9,10],MDS:9,NNs:7,N_s:8,Not:[0,4,5,9],ODE:[13,22],One:[0,3,5,6,7,8,9,10,14,15,16,17,23,24,25,26],PCs:9,RMS:3,Such:[3,5,7,11,13,20,22],That:[2,3,4,6,7,9,13,17,22,26],The:[0,4,11,12,16,20,21,25,28,29,30,31,34,36],Then:[3,4,5,7,8,9,12,16,17,21,25,26],There:[0,2,3,4,5,7,8,9,10,11,12,14,15,17,18,19,20,21,23,24,26,27,32,34,35,36],These:[0,1,2,3,4,5,7,8,9,10,11,12,13,15,16,17,20,21,22,24,25,26,28],Use:[0,1,10,16,25],Useful:5,Uses:[1,10],Using:[2,4,5,8,10,12,13,14,15,16,17,21,22,23,24,25,26,29],With:[3,4,5,7,8,9,11,12,13,14,15,16,17,20,21,22,23,24,25,26],Yes:[0,13,22],_________________________________________________________________:1,__doc__:5,__future__:8,__init__:[5,7],__main__:1,__name__:[1,5],_auto10:[5,7,13,14,15,16,22,23,24,25],_auto11:[5,13,14,15,16,22,23,24,25],_auto12:[13,14,15,16,22,23,24,25],_auto13:[5,13,14,15,16,22,23,24,25],_auto14:[13,14,15,16,22,23,24,25],_auto15:[13,14,15,16,22,23,24,25],_auto16:[13,15,16,22,24,25],_auto17:[13,15,16,22,24,25],_auto18:[13,15,16,22,24,25],_auto19:[13,15,22,24],_auto1:[1,2,3,5,6,7,13,14,15,16,17,22,23,24,25,26],_auto20:[13,15,22,24],_auto21:[13,15,22,24],_auto23:[15,24],_auto24:[15,24],_auto25:[15,24],_auto26:[15,24],_auto27:[15,24],_auto28:[15,24],_auto29:[15,24],_auto2:[1,2,3,5,7,13,14,15,16,17,22,23,24,25,26],_auto30:[15,24],_auto31:[15,24],_auto32:[15,24],_auto33:[15,24],_auto34:[15,24],_auto3:[2,5,7,13,14,15,16,17,22,23,24,25,26],_auto4:[2,5,7,13,14,15,16,17,22,23,24,25,26],_auto5:[2,5,7,13,14,15,16,22,23,24,25],_auto6:[2,5,7,13,14,15,16,22,23,24,25],_auto7:[2,5,7,13,14,15,16,22,23,24,25],_auto8:[2,5,7,13,14,15,16,22,23,24,25],_auto9:[5,7,13,14,15,16,22,23,24,25],_ax:5,_base:8,_build:31,_check_optimize_result:9,_compon:9,_datafram:[4,12,21],_lambda:5,_logist:9,_multilayer_perceptron:7,_ratio:9,_setattr_cm:5,_subplot:5,_update_properti:5,_varianc:9,a_0:[5,14,23],a_1:[15,17,24,26],a_1a:[4,5],a_1x:[14,23],a_2:[15,17,24,26],a_2a:[4,5],a_2a_3:[14,23],a_2x:[14,23],a_3:[4,17,26],a_3a:5,a_3a_2:[14,23],a_4:4,a_4a:5,a_fc1:7,a_fc2:7,a_h:7,a_i:[1,4,7,12,14,17,21,23,26],a_j:7,a_ja_k:[14,23],a_k:7,a_n:[14,23],a_p:[15,24],a_x:[12,21],a_z:[12,21],aaverag:[12,21],abandon:7,abid:[3,30],abil:[0,4],abl:[2,3,4,5,6,7,13,15,16,22,24,25,28],abort:3,abotu:[17,26],about:[0,1,3,5,7,8,9,10,11,13,14,15,16,17,18,19,20,22,23,24,25,26,28,30,34,35,36],abov:[1,2,3,4,5,6,7,8,9,10,12,13,14,15,16,17,21,22,23,24,25,26],abovement:[5,11,17,20,26],abs:[1,4,5,11,14,20,23],absolut:[1,4,5,11,12,20,21],absorb:[2,15,16,17,24,25,26],abus:29,acccess:4,accelearatio:[12,21],acceler:[14,15,16,23,24,25,28],acceleromet:[17,26],accept:[0,2,5,10,13,22,29,34,36],access:[0,2,3,4,5,9,10],accid:[1,5,10],accommod:[15,24],accompani:[0,5],accomplish:[2,8,16,25],accord:[1,2,3,4,5,7,12,15,16,17,21,24,25,26],accordingli:9,account:[0,3,4,10,12,17,21,26,29],accumul:[2,3,7,11,20],accur:[1,3,5,10,14,23],accuraci:[0,4,5,7,9,10,14,23],accuracy_scor:[4,7],accuracy_score_numpi:7,achiev:[0,4,5,7,8,12,21],aco:[3,13,22],acquaint:0,acquir:[0,7,28],acr:5,across:[4,5,7,10,12,21],act:[2,7,12,14,15,16,17,21,23,24,25,26,28,29],action:[3,13,14,22,23,29,31],activ:[1,4,10,28],actual:[2,4,5,7,8,9,12,13,16,17,21,22,25,26],adam:[1,10],adapt:[2,5,29],add:[0,1,3,4,5,7,8,9,12,13,14,15,17,21,22,23,24,26,34,36],add_:[18,19,35],add_graph:7,add_subplot:[6,7],added:[4,5,7,8,9,10,11,13,14,17,20,22,23,26],adding:[5,7,14,15,23,24],addit:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,15,16,17,20,21,22,24,25,26,28],addition:7,address:[2,9,11,14,20,23,29],adequ:2,adequaci:2,adjac:7,adjust:[13,15,16,22,24,25],admir:4,adopt:[12,21],advanc:[7,11,20,29],advantag:[5,7,10,13,22],afecionado:4,affect:[2,5,14,16,23,25],affin:[5,8,9,10],afford:10,aficionado:4,african:5,after:[0,1,3,4,5,7,9,10,12,14,15,16,21,23,24,25,28],afterward:[4,12,21],ag_0:1,again:[0,3,4,5,6,7,8,9,14,15,17,23,24,26,34,36],against:[7,13,15,22,24],age:[0,4,5,29],agre:[2,3,15,24,30],agreement:2,aid:9,aim:[0,4,6,9,11,12,13,14,16,20,21,22,23,25],air:[14,15,17,23,24,26,28],aircraft:[17,26],airplan:10,akin:[15,24],algebra:[0,2,4,16,25],algo:[0,3],algorithm:[0,1,2,3,4,6,8,10,11,12,13,15,20,21,22,24,28],align:[1,3,5,6,8,18,19,29,35],all:[0,1,2,3,4,5,6,7,9,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,29,31,34,36],allevi:7,allow:[0,1,2,4,5,7,8,9,10,11,12,13,14,15,16,20,21,22,23,24,25,28,34,36],almost:[0,3,4,5,7,8,9],alon:[1,15,24],along:[1,4,5,9,10,12,14,16,17,21,23,25,26],alpha:[1,2,3,4,5,7,8,9,10,13,14,16,17,22,23,25,26],alpha_n:[15,24],alreadi:[1,2,3,4,7,12,13,15,21,22,24,34,36],also:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,34,35,36],alter:[3,7],altern:[2,4,5,7,8,9,12,13,14,21,22,23],although:[2,5,7,8,13,14,15,22,23,24],alwai:[0,3,4,5,7,10,12,13,14,16,21,22,23,25,28,30],amaz:0,ame2016:[4,5],american:5,among:[0,5,7,10],amongst:[16,25],amount:[2,5,8,10,14,15,17,23,24,26],amplitud:[13,15,17,22,24,26],an_:3,anaconda3:[5,7,8,9],anaconda:[4,7,12,21,28],analog:[2,16,25],analogu:[16,25],analys:[2,3,5],analysi:[4,6,7,10,11,12,13,16,20,21,22,25],analyt:[2,4,5,6,7,11,13,14,15,17,20,22,23,24,26,28],analyz:[0,1,3,4,5,7,10,13,22,28],ander:28,andrew:7,anew:[14,15,16,23,24,25],angl:[3,5,9,12,14,15,16,17,21,23,24,25,26],angmom:[16,25],angular:[13,15,16,17,22,24,25,26,28],anharmon:[15,24],ani:[0,1,2,3,4,5,6,7,8,10,13,14,15,16,17,22,23,24,25,26,29,30,34,36],anim:7,ann:7,annot:[4,5,7,8,9,10],anoth:[0,1,2,3,4,7,8,9,10,12,13,15,16,17,21,22,24,25,26,34,36],ans:3,ansatz:4,answer:[0,2,4,5,7,12,13,15,21,22,24],antialias:1,anticip:[1,10,12,21],antiparallel:[16,25],antisymmetri:[14,23],anymor:8,anyon:8,anyth:[3,7,30],apach:7,apart:[2,9],api:[4,7,12,21],appar:[1,2,17,26],appear:[0,2,3,4,7,10,13,14,15,16,17,22,23,24,25,26,29],append:[1,3,4,8,10,12,21],appendix:[15,24],appl:0,appli:[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,20,21,22,23,24,25,28,29],applic:[0,1,3,4,5,7,9,10,11,13,17,20,22,26,28],appoint:29,appreci:30,approach:[1,3,4,7,9,11,12,14,15,16,20,21,23,24,25],appropri:[1,2,3,5,7,13,22,29],approx:[1,2,3,5,9,13,14,15,16,17,22,23,24,25,26],approxim:[1,2,3,5,6,9,10,11,13,14,15,17,20,22,23,24,26],apt:[4,12,21],aragorn:[4,12,21],arang:[1,2,4,5,6,7,10,12,21],arbitrari:[1,3,7,8,10,13,15,16,17,22,24,25,26],arbitrarili:[4,7,9,16,25],architectur:[1,10],arctan:[16,25],arctanh:[12,21],area:[0,2,4,10,13,14,16,22,23,25],areal:[16,25],arg:[2,5],argc:3,argmax:[7,9],argsort:9,argu:7,argument:[1,3,5,7,9,10],argv:3,aris:[0,2,3,4,5,7,17,26],arithmet:4,arma:3,armadillo:3,around:[2,3,4,5,7,9,12,13,14,15,16,17,21,22,23,24,25,26],arrai:[1,2,3,5,7,8,10,11,14,15,16,18,19,20,23,24,25,35],arrang:[10,28],arriv:[2,3,4,9,11,20],arrow:[7,13,22],arrowprop:8,art:0,articl:[3,5,7,10,30],artifici:[0,1,4,6],artificialneuron:7,artist:5,arxiv:[1,10],asarrai:4,ascii:[3,4],asid:[2,14,15,23,24],asin:[13,15,22,24],ask:[2,5,7,9,13,17,22,26],aspect:[4,11,13,20,22],assembl:[4,10],assert:[1,10],assess:[0,2,5],assici:[1,10],assign:[0,2,4,5,6,7,8,16,25,28],assist:28,associ:[2,3,4,5,7,17,26,34,36],assum:[1,2,3,4,5,6,7,8,9,10,12,13,14,15,16,17,21,22,23,24,25,26],assumpt:[0,2,3,4,9,10,17,26],ast:5,asteroid:[16,25],astronom:[2,14,23],astronomi:2,asymmetr:[2,14,23],asymmetri:4,asymptot:[5,16,25],atoi:3,atom:[4,13,14,15,16,22,23,24,25],attack:29,attempt:[2,4,14,23],attent:[2,4,12,17,21,26,29],attitud:[0,11,20],attract:[4,16,25],attribut:[2,5],attributeerror:5,audi:4,audio:[1,10],auditori:[34,36],australia:[34,36],author:[0,3,4,7],authour:[0,4],auto:[3,9],autocor:3,autocorrelation_tim:3,autocorrelform:3,autocovari:3,autograd:[4,12,21],autom:[0,11,20,31],automag:[0,4,12,21],automat:[4,9,10,12,21,31],automobil:[10,13,22],autonom:[1,10],avail:[0,2,4,5,7,9,11,12,20,21,28],avdt:[13,22],avenu:0,averag:[2,3,4,5,7,10,14,16,23,25],avg:3,avoid:[0,1,4,5,9,10,12,14,21,23],awai:[1,2,3,5,15,16,17,24,25,26],awar:1,aws:28,axel:[13,22],axes3d:1,axes:[5,8,9,10,12,13,18,19,21,22,35],axes_grid1:5,axessubplot:5,axhlin:8,axi:[1,2,3,4,5,6,7,8,9,10,13,14,16,17,22,23,25,26],axiom:2,axlabel:[4,12,21],axs:[2,12,21],axs_vec:2,axvlin:[1,8,10],axvspan:[1,10],azimuth:[14,16,23,25],b_1:[1,7],b_1e:[15,24],b_2e:[15,24],b_fc1:7,b_fc2:7,b_i:[1,5,7],b_ia_:5,b_j:7,b_k:7,b_m:7,b_out:7,b_p:[15,24],b_x:[12,21],b_y:[12,21],b_z:[12,21],back:[0,2,3,5,10,12,13,14,16,17,21,22,23,25,26],backend:[1,10],background:[2,12,21],backpropag:7,backward:[1,7,10,16,25],bad:[3,5],badli:3,baggin:[4,12,21],bake:[11,20],balanc:5,ball:[2,12,13,17,21,22,26],ban:29,band:[4,12,21],bandwidth:[4,12,21],bar:[2,4,9,12,14,21,23],barrier:28,base:[0,1,2,3,4,5,6,7,8,10,11,12,15,20,21,24],basi:[4,5,6,7,8,9,12,16,21,25,28],basic:[0,2,3,7,8,11,15,17,20,24,26],batch:[7,9,10],batch_i:7,batch_shap:[1,10],batch_siz:[1,7,10],batch_x:7,bay:6,bayesian:0,bdb:[16,25],beach:2,bear:2,becaus:[0,1,2,4,5,7,8,10,11,13,14,15,16,17,20,22,23,24,25,26],becom:[0,1,2,3,4,5,7,9,12,13,14,15,16,17,21,22,23,24,25,26],been:[0,1,2,4,5,7,9,10,11,12,13,15,20,21,22,24,28,31],befor:[0,1,2,3,4,5,6,7,8,10,11,13,14,15,16,17,20,22,23,24,25,26],beforehand:[0,3,4],began:[16,25],begin:[1,2,3,4,5,6,7,8,9,12,13,14,15,16,17,18,19,21,22,23,24,25,26,28,35],behav:[5,7,16,25],behavior:[0,4,7,11,15,20,24,29],behaviour:[2,7],behind:[0,4,5,7,8,15,24],being:[0,1,2,3,4,5,6,7,8,9,10,11,15,16,17,20,24,25,26,34,36],belief:2,believ:[2,13,22],belong:[6,8,17,26],below:[1,3,4,5,6,7,8,9,10,11,12,13,14,15,17,20,21,22,23,24,26,30],benchmark:[11,20],benefici:7,benefit:[1,4,7,9,10,11,20],bengio:7,benign:9,bernoulli:2,besid:[1,2,10],best:[0,1,3,4,5,7,8,9,10,13,15,16,22,24,25,29,30],bet:2,beta:[4,6,7,9,16,25],beta_0:[5,6,7,15,24],beta_0x_:5,beta_1:[5,6,7],beta_1x_0:5,beta_1x_1:[5,6],beta_1x_2:5,beta_1x_:5,beta_1x_i:6,beta_2:5,beta_2x_0:5,beta_2x_1:5,beta_2x_2:[5,6],beta_2x_:5,beta_:[5,6],beta_i:5,beta_j:5,beta_n:[15,24],beta_p:6,beta_px_p:6,better:[0,1,2,4,7,9,10,11,13,14,15,20,22,23,24],between:[0,1,2,3,4,5,6,7,8,9,10,12,13,14,15,16,17,21,22,23,24,25,26],beyond:[0,4,5,7,8,11,15,20,24],bia:[0,1,2,3,7,8,10],bias:[1,2,5,10],bias_vari:7,bib:[34,36],bibliographi:[34,36],bibtex:[34,36],bicycl:[12,21],big:[0,1,4,5,7,13,22],bigger:7,bigr:7,bilbo:[4,12,21],billion:7,bimod:2,bin:[2,3,5,9],binari:[3,4,6,10],binomi:[0,2],binsboot:5,bioinformat:[0,4],biolog:7,bird:[4,10],birth:[4,12,21],bit:[2,3,4,7,12,13,15,17,21,22,24,26,30],bitwis:3,bivari:1,bla:[4,12,21],black:8,blob:28,block:[0,4,5,12,21,28,34,36],blockeulercrom:[15,24],blockingavg:3,blockingstd:3,blockingvar:3,blocksiz:3,blocksizemax:3,blocksizemin:3,blog:[2,30],blue:[4,10],blue_patch:[12,21],bmatrix:[4,5,6,7,8,9,12,21],bmi:7,bodi:[0,1,5,7,10,13,14,17,22,23,26,28,29],boldfac:[5,12,21],boldsymbol:[0,1,2,4,7,8,9,12,13,14,16,17,21,22,23,25,26],bolt:[13,22],boltzmann:[0,7],bonu:[11,20],book:[2,10,18,19,28,34,35,36],boost:7,bootavg:3,bootstd:3,bootstrap:[0,7],bootvar:3,bootvec:3,bore:0,borrow:[4,12,21],boston_dataset:5,bot:8,both:[0,2,3,4,5,7,8,11,12,13,15,16,17,20,21,22,24,25,26,29,34,36],bottl:6,bottom:[5,15,24],bounc:[13,22],bound:[5,7,8,16,25],boundari:[1,7,8,9,13,22],box:[1,10,14,23,34,36],boyd:8,bracket:[1,3,10],brain:[6,7],brake:[17,26],branch:[30,31],brand:0,breast:7,brew:[4,12,21],brg:8,brian:[34,36],brief:[14,23],briefli:[4,11,15,20,24],bring:[4,5,15,17,24,26],brisban:[34,36],broad:[0,4],broken:[13,22],browser:4,brute:[5,9],bte:[15,24],bthe:[16,25],buck:0,bui:[1,10],build:[0,1,3,4,5,12,21,34,36],built:[1,5,7,10,15,24,31,34,36],bunch:9,bundl:33,buoyanc:[12,21],burn:2,bus:[17,26],busi:5,butler:28,c46dd114b2af:8,c_0:3,c_1:[7,17,26],c_1e:[17,26],c_2:[7,17,26],c_2e:[17,26],c_3:7,c_4:7,c_i:7,c_k:3,c_w:[13,22],cal:[7,8],calcul:[0,1,2,4,5,7,8,9,10,11,12,13,14,15,16,20,21,22,23,24,25],calculu:28,call:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,34,36],callabl:5,came:[13,17,22,26],camera:0,can:[0,1,2,3,4,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,30,31,34,35,36],cancel:[5,14,23],cancer:7,cancerpd:9,candid:[2,8],cannot:[0,2,3,4,5,7,8,9,13,14,22,23],canopi:[4,12,21],capabl:[0,4,8,12,21],capac:1,capita:5,captur:[7,9],car:[0,1,10,13,17,22,26],card:[0,5,6],cardin:7,care:[9,15,24],carlo:[0,2,3,4,5],carmak:0,carri:[1,2,5,6],cartesian:[12,16,21,25],cast:7,cat:10,categor:[0,4,7,9,10],categori:[0,4,6,7,10],categorical_crossentropi:[7,10],caus:[0,2,3,5,9,13,17,22,26],causal:5,causat:0,caveat:[14,23],cbook:5,ccc:7,cdf:3,cdot:[1,3,4,5,7,12,13,14,15,16,17,21,22,23,24,25,26],ceil:[12,14,15,16,21,23,24,25],cell:[34,36],cellphon:28,center:[3,4,5,6,8,13,14,15,17,22,23,24,26,28],central:[0,2,4,5,8,10,11,12,17,20,21,26,28],centrifug:28,centroid:3,centuri:[2,10,11,20],certain:[0,3,4,5,6,10,16,25],certainli:2,cha:5,chain:[0,2,3,14,16,17,23,25,26,28],challeng:[14,23],chalmer:2,chanc:[2,3,7,16,25],chang:[1,2,3,4,5,7,8,9,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,30],channel:10,chapter:[5,9,10,15,24,28],charact:[3,4,5,8,10],character:[2,3,7,8],characterist:[5,10,15,24],charg:[4,13,16,22,25],charl:5,cheap:5,cheaper:7,check:[1,2,4,5,7,9,10,12,13,15,18,19,21,22,24,33,35],checkmark:[15,24],chemic:3,chi:4,chiaramont:1,chimborazo:[17,26],choic:[1,2,3,5,10,12,13,15,16,21,22,24,25],choleski:5,choos:[1,2,3,5,9,10,12,13,14,15,16,21,22,23,24,25],chosen:[1,2,3,4,5,7,8,12,13,14,15,16,17,21,22,23,24,25,26],chosen_datapoint:7,chpater:[15,24],christian:2,christoph:[34,36],cifar10:10,cifar:10,cin:3,circ:[7,17,26],circl:[5,7,8,9,13,16,22,25],circuit:[15,24],circul:[16,17,25,26],circular:[13,14,16,22,23,25],circumst:29,circumv:[5,7],cite:[34,36],citizen:0,civita:[14,23],claim:0,clarifi:29,clariti:3,class_nam:10,classic:[2,4,11,14,16,17,20,23,25,26,36],classif:[0,2,4,5,6,8,10,12,21],classifi:[0,6,7,9],classificaton:7,clean:7,clear:[2,7,16,25],clearli:[3,5,8,9,10,13,14,22,23],clever:7,clf3:4,clf:[4,5,8],clf_lasso:5,clf_ridg:5,clip:[3,10],clockwis:[13,17,22,26],clone:[30,31],close:[0,1,3,4,5,7,8,9,12,13,15,16,17,21,22,24,25,26],closer:[13,22],closest:[8,9,12,16,21,25],closur:[4,12,21],cloud:[4,12,21],cluster:[0,1,4,5,7,9,10],cmap:[1,4,5,7,8,10,18,19,35],cmap_arg:5,cmath:3,cmse201:[11,20],cn_:3,cna:[13,22],cnn:7,cnn_kera:10,cntk:[4,12,21],code:[0,4,6,10,11,13,20,22],coef0:8,coef:4,coef_:[4,5,8],coeffici:[4,5,6,8,13,15,17,22,24,26],coerc:[4,5],cognit:[34,36],coin:3,coin_posterior_norm:2,coin_prior_uniform:2,coinflip:2,coinflipping_fig_1:2,col:[2,4,5,9,12,21],colab:[4,12,21],cold:[18,19,35],colinear:5,collaps:8,collect:[1,2,3,4,5,9,12,13,21,22],collid:[0,16,25],collinear:5,collis:[0,16,25],color:[1,3,4,5,8,10,12,16,18,19,21,25,35],color_channel:10,color_cod:5,colorbar:5,column:[1,4,5,7,8,9,12,21],com:[1,2,10,28],combin:[1,2,3,5,6,11,14,16,17,20,23,25,26],come:[0,1,2,4,5,7,10,12,13,15,16,17,21,22,24,25,26],comma:4,command:[0,3,4,7,11,12,20,21,34,36],comment:[2,29],commerci:[4,12,21],commit:[29,30],commod:4,common:[0,2,3,4,5,6,7,9,10,12,13,14,15,16,21,22,23,24,25],commonli:[1,5,6,7,10],commonmark:[34,36],commun:[0,4,7,29],commut:[14,23],compact:[5,6,7,9,14,16,23,25],compactli:[14,23],compani:0,compar:[2,4,5,9,10,11,12,13,15,16,17,20,21,22,24,25,26],comparison:[1,2,10],compat:6,compdriv:[15,24],compet:[0,4,11,20,28],compil:[0,1,3,4,7],complaint:29,complement:[14,23],complementari:[15,24],complet:[1,2,4,7,10,13,15,22,24],completenn:7,complex:[0,2,5,7,8,9,15,16,17,24,25,26,34,36],complic:[0,2,4,5,7,11,13,16,17,20,22,25,26],compon:[1,5,7,10,13,14,15,16,17,22,23,24,25,26],components_:9,compos:7,compress:[4,5,9,13,22],compris:5,compromis:[2,5],comput:[0,1,2,4,5,7,8,10,11,13,14,15,17,20,22,23,24,26,28,34,36],computation:[0,3,10],con:28,concaten:[1,5,10],concentr:[2,5],concept:[0,1,2,4,5,14,23],conceptu:[7,16,17,25,26],concern:[0,1,6,7,10,14,23],concic:[4,12,21],concis:2,conclud:4,conclus:[0,7],cond:1,conda:[4,7,12,21,30],condit:[1,2,3,5,8,9,12,13,14,15,16,17,21,22,23,24,25,26],conduct:[0,11,20],condwav:1,confer:[34,36],confid:[5,6,8],confidenti:29,configur:10,confirm:7,confront:2,confus:5,congruenti:3,conjug:8,connect:[1,4,5,7,9,10,12,21,28],consequ:[5,7,8,11,16,20,25],conserv:[5,13,15,16,22,24,25,28],consid:[0,1,2,3,4,5,6,7,8,10,13,14,15,16,17,22,23,24,25,26,29],consider:[0,5,7,9,13,22],consist:[1,2,3,5,7,10,13,15,22,24],constant:[1,2,3,4,5,7,8,13,14,15,16,17,22,23,24,25,26],constitu:4,constitut:[1,5],constrain:[2,7,9,10,16,25],constraint:[5,8,28],construct:[0,1,2,3,4,5,7,8,9,11,20,29],consumpt:[13,22],contact:[4,13,16,22,25,29],contain:[0,1,2,3,4,5,6,7,8,9,10,11,12,20,21,28],content:[4,12,21,33,34,36],context:5,continu:[0,1,2,4,5,6,7,8,11,12,13,17,20,21,22,26],continuosli:0,continuum:2,contourf:8,contrari:2,contrast:[7,13,17,22,26],contribut:[0,3,4,5,10,14,15,16,17,23,24,25,26,29,31],contributor:[0,4,29,30],control:[0,4,7,10],controversi:2,conv2d:10,conv:10,convei:2,conveni:[2,4,5,7,11,12,13,14,16,20,21,22,23,25],convent:[2,7,11,12,20,21],converg:[1,2,5,7,8,9],convergencewarn:[7,8,9],convert:[1,4,5,9,10,12,16,17,21,25,26],converttomatrix:[1,10],convex:6,convolut:[1,15,24],cook:2,cookiecutt:31,coolwarm:[18,19,35],coordin:[5,7,9,13,14,15,16,22,23,24,25,28],coorel:5,copi:[7,30],copyright:2,corel:0,corioli:28,corner:[2,17,26],corona:28,corr:[5,9],correalt:[5,9],correct:[0,1,3,4,5,7,10,13,14,15,17,22,23,24,26,29],correct_predict:7,correctli:[1,2,5,7],correl:[0,2,4,7],correlation_matrix:[5,9],correspod:[17,26],correspond:[2,3,4,5,7,8,9,10,12,14,15,16,17,21,23,24,25,26],cortex:[7,34,36],cos:[1,5,12,13,14,15,16,17,21,22,23,24,25,26],cosh:[12,21],cosin:[5,15,24],cost:[0,3,4,5,6,8,10],cost_deep_grad:1,cost_funct:1,cost_function_deep:1,cost_function_deep_grad:1,cost_function_grad:1,cost_grad:1,cost_sum:1,could:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,29,30],coulomb:[4,16,25],count:[3,4],counter:[2,12,15,17,21,24,26],coupl:[1,5,10,12,13,15,21,22,24],cours:[0,2,3,5,9,10,11,12,13,14,20,21,22,23,28],cout:3,cov:[3,4,5,9],cov_xi:[5,9],cov_xx:[5,9],cov_yi:[5,9],covari:[0,4],covariance_matrix:[5,9],coven:29,cover:[0,4,15,16,24,25,27,28,32],covert:4,covxi:3,covxx:3,covxz:3,covyi:3,covyz:3,covzz:3,creat:[1,4,7,9,10,11,12,16,18,19,20,21,25,29,30,31,35],create_accuraci:7,create_biases_and_weight:7,create_convolutional_neural_network_kera:10,create_dnn:7,create_loss:7,create_neural_network_kera:7,create_optimis:7,create_placehold:7,create_x:[5,9],creation:7,credibl:2,credit:[0,5,6,28,30],crim:5,crime:5,criteria:[3,4],critic:[0,14,23,28,29],criticallydamp:[15,24],cromer:[15,24,28],cross:[0,3,6,7,10,12,13,14,15,17,21,22,23,24,26,28],cross_val_scor:5,crossvalid:5,crucial:[3,7],cs231:[1,10],csc:[15,24],csr_matrix:4,cstdlib:3,csv:[1,4,5,10],ctnk:7,ctrajectori:[16,25],cubic:4,cumsum:[4,9,12,21],cumul:5,current:[1,2,10,17,26,31],curs:[5,9],curv:[2,6,7,13,14,22,23],curvatur:[16,17,25,26],custom_lin:[18,19,35],cvxopt:8,cycl:[3,7,16,25],cycler:[18,19,35],cyclon:[17,26],cyclotron:[2,13,22],d2_g_t:1,d2l:28,d_g_t:1,d_i:2,d_net_out:1,da_d:[16,25],da_i:[17,26],dagger:[4,5,12,21],dai:[7,11,13,17,20,22,26,28],damp:28,dampeddiffyq:[15,24],dan:2,darkr:3,dat:[4,5,12,21],dat_id:[4,5,9,12,14,15,16,21,23,24,25],data:[6,8,11,12,13,14,15,16,18,19,20,21,22,23,24,25,35],data_id:[4,5,9,12,14,15,16,21,23,24,25],data_indic:7,data_panda:[4,12,21],data_path:[4,5,9,12,14,15,16,21,23,24,25],databas:[4,7],datafil:[4,5,9,12,14,15,16,21,23,24,25],datafram:[1,4,5,9,10,12,21],datapoint:[5,6,7,9],dataset:[1,2,5,6,8,9],datatyp:[1,10],date:[0,2,4,12,21],dbh:7,dbo:7,ddot:[1,13,15,16,17,22,24,25,26],ddrive:[15,24],dead:7,deadlin:28,deal:[0,2,3,4,5,7,8,9,10,12,17,21,26],dearli:0,death:2,debat:2,debt:6,debug:5,dec:2,decad:[0,4,10],decai:[3,4,13,15,22,24],decid:[0,1,2,5,10],decim:[4,5],decis:[0,4,7,8,9],decision_funct:8,decisiontreeregressor:4,declar:[1,4,5,10,12,21],decomposit:[0,7],decompost:5,decreas:[1,2,5,7,9,14,23],deduc:[0,4,13,22],deduct:2,deem:[13,22,29],deep:[4,6,10,13,22],deep_neural_network:1,deep_param:1,deepen:[11,20],deeper:[0,4,10,11,13,14,20,22,23,28],deer:10,def:[1,2,3,4,5,7,8,9,10,11,12,14,15,16,20,21,23,24,25],def_covari:3,default_tim:[1,10],defect:5,defici:5,defin:[2,3,4,5,6,8,9,10,11,12,14,15,16,17,20,21,23,24,25,26,28,29,34,36],definit:[1,2,5,8,9,11,12,13,15,16,17,20,21,22,24,25,26],defint:[3,12,21],deflect:[17,26],degre:[0,2,3,4,8,11,13,14,15,16,17,20,22,23,24,25,26],delet:[3,5],delimit:[1,10],deliv:4,delta:[1,3,4,7,8,12,13,14,15,16,17,21,22,23,24,25,26],delta_:[4,7,12,21],delta_h:[4,7],delta_j:7,delta_k:7,delta_l:7,delta_n:[4,15,24],deltat:[12,14,15,16,21,23,24,25],deltax:[16,25],delv:4,demonstr:[2,4,5,6,7,15,17,24,26],demostr:[17,26],den:[1,10],denomin:[2,7,15,16,24,25],denot:[1,2,3,5,6,7,14,17,23,26],dens:[1,7],dense_1:1,densiti:[1,2,3,5,13,16,22,25],depart:[2,17,26],departur:[2,16,25],depend:[1,2,3,4,5,6,7,8,9,12,13,14,15,16,17,21,22,23,24,25,26,28,34,36],depict:3,deploy:[4,12,21],deposit:[16,25],depth:10,deriv:[1,2,4,5,6,8,9,11,12,13,17,20,21,22,26,28],derogatori:29,descend:[5,9],descent:[0,5,6,8,10],descr:5,describ:[0,1,2,4,5,7,8,9,12,13,15,16,17,21,22,24,25,26],descript:[5,8,17,26],deserv:0,design:[4,6,7,13,15,22,24],designmatrix:5,desir:[0,1,2,4,5],despit:[2,7,13,22],destroi:2,det:5,detail:[4,9,12,14,16,21,23,25,28,29,30],detect:[7,8,17,26],detector:[16,25],determin:[0,1,2,3,4,5,7,8,9,10,12,13,14,15,17,21,22,23,24,26,28,29],determinist:[3,6],detial:28,detriment:0,dev:[3,7],develop:[0,2,4,8,9,10,11,12,13,14,15,16,20,21,22,23,24,25,28,30,31],deviat:[1,2,4,5,7,12,21],devic:[2,11,20],devinderjit:2,devis:7,df1:[4,12,21],diag:[5,8],diagnost:7,diagon:[3,4,5,6,12,21],diagonaliz:5,diagram:28,diagsvd:5,dial:[15,24],dialect:0,diamet:[17,26],dict:[5,8],dict_kei:5,dictionari:5,did:[2,5,6,7,9,13,15,17,22,24,26],die:7,died:[15,24],diff1:1,diff2:1,diff:[1,13,22],diff_ag:1,diffeent:8,differ:[0,1,3,4,5,7,9,10,12,13,14,15,16,17,21,22,23,24,25,26,28,29,34,36],differenti:[0,4,10,14,16,17,23,25,26,28],difficult:[0,3,5,7,13,14,17,22,23,26],difficulti:[0,2,7],diffonedim:1,digit:[0,4,7,10],dilut:7,dim:[1,9,10,15,24],dimens:[1,2,4,5,7,8,9,10,14,15,17,23,24,26],dimension:[0,2,4,10,12,14,15,16,21,23,24,25],dimensionless:[4,13,14,15,22,23,24],diment:[12,21],dimless:[13,22],dimnsion:[1,10],diod:[15,24],direct:[0,1,2,4,5,7,9,10,12,13,14,15,16,17,21,22,23,24,25,26],directli:[2,3,5,7,12,16,21,25,34,36],directori:31,disabl:[29,31],disadvantag:4,disappear:[15,16,24,25],discard:[2,5,9],disciplin:[0,4,7],disclaim:[0,3],disconnect:2,discours:[0,11,20],discov:0,discrep:[17,26],discret:[6,7,10,11,15,20,24],discrimin:[6,9],discuss:[0,1,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,28],discussiom:28,diseas:6,disjoint:2,disk:4,disord:6,displac:[14,15,17,23,24,26],displai:[1,2,3,4,5,7,8,9,10,12,16,21,25,34,36],displaystyl:5,disregard:4,disrupt:0,dissimilar:9,dissip:[13,22],dissipitav:[15,24],distanc:[3,5,8,9,13,14,16,17,22,23,25,26],distant:[16,25],distinct:[6,8,10],distinctli:8,distinguish:[3,4,8,9,13,22],distort:[16,17,25,26],distplot:5,distribuit:[12,21],distribut:[0,2,4,5,7,9,12,16,17,21,25,26],distrubut:[4,12,21],dive:[4,5,8,15,24],diverg:[2,7,16,25],divid:[0,3,4,5,7,8,9,10,12,13,15,16,21,22,24,25],divis:[3,5,8],dna:6,dnn1:[1,10],dnn2_gru2:[1,10],dnn:[1,4,7,10],dnn_kera:7,dnn_numpi:7,dnn_scikit:[4,7],dnn_tf:7,doc:[28,30,34,36],doconc:4,docstr:30,doctest:[11,20],document:[1,9,10,18,19,34,35,36],doe:[0,1,2,3,4,5,7,8,9,10,12,13,14,15,16,17,21,22,23,24,25,26],doesn:[2,7,10,13,14,22,23,34,36],dog:[7,10],doing:[2,4,5,9,13,22],dollar:[18,19,35],dom:2,domain:8,domin:[2,4,13,16,22,25],don:[2,3,4,5,7,8,9,12,13,16,17,21,22,25,26],done:[1,2,3,4,5,9,10,12,13,14,15,16,17,21,22,23,24,25,26],door:[15,24],dot:[0,1,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26],doubl:[2,3,4,12,13,16,17,21,22,25,26,28],doubli:[7,14,17,23,26],down:[4,5,9,13,15,16,17,22,24,25,26],download:[4,7,10,12,21],downsampl:10,drag:[12,13,15,21,22,24],dramat:9,drastic:[1,10],draw:[5,13,22],drawback:[5,9],drawn:[2,3,4,5,6,7,9,12,21],dream:0,drive:[0,1,10,13,15,22,24],driven:[28,30],drivenosc:[15,24],driver:0,drop:[3,4,5,9,17,26],dropna:[4,5],dry:0,dtype:[1,4,5,7,10,12,21],dub:4,due:[1,5,7,8,9,12,13,14,15,16,17,21,22,23,24,25,26,28],dummi:5,dure:[0,4,7,8,9,10,15,17,24,26],dv_:[13,22],dv_x:[13,14,17,22,23,26],dv_y:[13,14,17,22,23,26],dv_z:[14,17,23,26],dwell:5,dwh:7,dwo:7,dx_1:3,dx_n:3,dxdy:[15,24],dying:7,e_0:[13,22],e_i:2,each:[0,1,2,3,4,5,6,7,8,9,10,12,14,15,16,17,21,23,24,25,26],eager:5,eapprox:[4,5],ear:0,earli:7,earlier:[2,5,6,7,8,9,14,15,23,24],earth:[13,16,17,22,25,26,28],earthsuneul:[14,23],earthsunvv:[14,23],easi:[0,4,5,6,7,8,9,12,13,14,15,16,21,22,23,24,25],easier:[0,3,4,5,8,16,25,28,30],easili:[0,1,4,5,6,7,8,9,11,12,13,14,15,20,21,22,23,24],east:[17,26],ebind:[4,5],eccentr:[16,25],ecolor:2,econom:0,econometr:[4,12,21],ecosystem:[4,12,21,34,36],edgecolor:5,edit:[4,29],edu:28,educ:[0,4,5,11,15,20,24,28],eff:[3,16,17,25,26],effect:[2,3,7,12,13,15,21,22,24,28],effic:7,effici:[3,4,10,12,13,21,22],efron:[3,5],eig:[3,4,5,9],eigen:3,eigenpair:[5,9],eigenvalu:[4,5,8,9,12,21],eigenvector:[5,9],eight:[4,12,21],eigval:[3,4],eigvalu:9,eigvec:[3,4],eigvector:9,eispack:[4,12,21],either:[0,3,4,5,6,7,8,9,13,14,15,16,17,22,23,24,25,26],elabor:3,elast:[16,25],elect:2,electr:[4,7,13,15,16,22,24,25],electrodynam:[16,25],electromagnet:[13,16,22,25],electron:[11,14,16,20,23,25,29],eleg:9,elel:[12,21],element:[0,1,4,5,6,7,8,9,10,11,13,14,20,22,23],elementari:[4,12,21,28],elementwis:10,elementwise_grad:1,elessar:[4,12,21],elimin:[8,15,16,24,25],ellips:[16,17,25,26],ellipt:[17,26,28],els:[3,6,7,13,22],elu:7,elus:0,email:28,emb:[18,19,35],embed:[5,9],embodi:5,emce:2,emit:[3,14,23],empathi:29,emphas:[0,2,4,15,24,28],emphasi:[4,12,21],empir:[3,7,9],emploi:[2,3,4,5,7,9,13,15,22,24],employ:[0,4,5],employe:0,empti:5,emul:7,enabl:[2,9,11,20],enbodi:[15,24],encapsul:[2,15,16,24,25],enclos:2,encod:[0,2,9,10],encompass:[0,3,4,13,22],encount:[0,3,5,6,7,16,25],end:[0,1,2,3,4,5,6,7,8,9,10,12,13,14,15,16,17,18,19,21,22,23,24,25,26,28,35],endl:3,endpoint:[3,5,15,24],energi:[1,10,12,13,15,16,17,21,22,24,25,26,28],enforc:7,engag:[11,20],engin:[0,3,4,7,12,13,21,22,28],enhanc:[11,20,28,30],enorm:10,enough:[0,5,13,16,17,22,25,26],enquiri:[13,22],ensambl:2,enscrib:[14,23],ensembl:[2,3,7],ensemblesampl:2,ensur:[1,2,3,5,7,9,10,15,16,24,25],entail:[2,4],enter:[0,2,3,5,15,17,24,26],enthought:[4,12,21],entir:[2,3,4,6,7,10,12,15,16,21,24,25,34,36],entiti:[4,7,12,21],entitl:0,entri:[4,5,7,8,9],entropi:[4,6,7,10],enumer:[1,4,5,7,8,10],env:3,environ:[1,4,11,12,13,20,21,22,29,31],eol:5,eosfit:5,epoch:[1,4,7,10],epsilon:[5,6,14,23],epsilon_0:[5,16,25],epsilon_1:5,epsilon_2:5,epsilon_:[4,5,13,14,22,23],epsilon_i:5,eqnarrai:[5,13,14,15,16,17,22,23,24,25,26],equador:[17,26],equal:[0,1,2,3,4,5,7,8,9,12,13,15,16,17,21,22,24,25,26],equat:[0,2,3,4,6,9,11,16,17,20,25,26,28],equatori:[17,26],equilibrium:[1,7,13,22],equiv:[2,3,14,15,16,17,23,24,25,26],equival:[2,4,5,7,8,9,12,14,15,16,21,23,24,25],erf:3,eriador:[4,12,21],eridg:5,err:4,err_:5,err_sqr:1,erron:1,error:[0,1,2,3,4,6,7,9,10,11,15,20,24],error_estimate_corr_tim:3,error_hidden:7,error_output:7,errorbar:2,escap:[18,19,35],especi:[7,14,15,16,23,24,25],essenc:2,essenti:[0,2,3,4,5,7,11,13,17,20,22,26],est:2,establish:9,estim:[0,3,4,5,6,7,14,23],estimated_mse_fold:5,estimated_mse_kfold:5,estimated_mse_sklearn:5,eta0:8,eta:[1,2,4,7,8,10,15,17,24,26],eta_v:[4,7,10],etc:[0,3,5,6,7,8,9,12,13,18,19,21,22,28,35],ethic:[11,20],ethnic:29,etsim:5,euclidean:[5,9],euler:[13,15,22,24,28],eulerintegr:[12,21],eurler:[12,21],european:0,evalu:[0,1,2,3,4,5,11,13,14,15,20,22,23,24,28],even:[0,2,3,4,5,7,8,9,10,12,13,14,15,16,17,21,22,23,24,25,26,30],evenli:[1,10],event:[0,2,6,29],eventson:5,eventu:[2,5,7,9,13,17,22,26],everest:[17,26],everi:[1,2,3,4,5,7,9,10,12,13,14,17,21,22,23,26,30],everybodi:[0,28],everyon:29,everyth:[2,7,13,16,22,25],evid:[2,13,22,34,36],evolut:[2,15,16,24,25],evolv:[0,2,4],exact:[3,4,5,7,9,11,12,13,14,15,20,21,22,23,24],exactli:[2,5,7,9,10,16,17,25,26],exam:28,examin:5,exampl:[0,6,13,15,17,18,19,22,24,26,28,29,34,35,36],exce:7,excel:[0,4,5,7,31],except:[1,3,5,8,10,13,17,22,26],excess:4,excit:[0,4,15,16,24,25],exclud:[2,5,7],exclus:[2,3,4,5,10],execut:[1,5],executablebook:31,exercis:[0,4,5,11,13,14,20,22,23,28],exert:[14,23],exhaust:[2,5],exhibit:[5,8],exist:[0,1,2,4,5,7,8,9,10,12,14,15,16,21,23,24,25,31,34,36],exit:[3,5],exp:[1,2,3,5,6,7,8,9,15,24],exp_term:7,expand:[5,6,9,12,15,21,24],expans:[2,5,7,8,14,15,16,23,24,25],expect:[0,2,4,7,9,13,15,16,17,22,24,25,26,29],expectation_value_of_h_wrt_p:3,expens:3,experi:[0,2,4,5,7,8,11,13,16,17,20,22,25,26,29],experiment:[1,2,3,4,5,10,13,16,22,25],experimentalist:[16,25],expert:7,explain:[3,4,5,9,17,26,30],explained_variance_ratio_:9,explanatori:5,explicit:[2,4,5,10,12,14,15,17,21,23,24,26,29],explicitli:[0,1,2,4,10,14,23],explod:7,exploit:[5,7,10],explor:[4,5,8,11,12,20,21],expon:7,exponenti:[4,7,13,15,22,24],expos:0,express:[1,2,3,4,6,7,10,12,13,15,16,17,21,22,24,25,26,29],exptmean:3,exptvari:3,ext:[15,24],extend:[0,1,6,9,11,12,20,21],extens:[0,4,5,7,14,16,23,25,34,36],extent:[0,4,5,28],extern:[5,13,14,15,16,17,22,23,24,25,26],extra:[5,7,10,15,24,28],extract:[0,4,5,6,8,9,13,15,16,22,24,25],extrapol:[4,5],extrem:[0,1,2,4,5,6,7,8,9,10,11,12,20,21],extrins:9,eye:[0,4],f11:4,f12:4,f13:4,f6d7a289d493:[4,12,21],f_0:[14,15,23,24],f_0b:[14,23],f_0e:[15,24],f_2:7,f_3:7,f_d:3,f_est:2,f_g:[14,23],f_h:[14,23],f_i:[2,5,7,13,15,22,24],f_m:[15,24],f_n:[15,24],f_r:[16,25],f_true:2,f_vec:1,f_x:[13,14,16,22,23,25],f_xv_x:[14,23],f_y:[13,16,22,25],f_yv_i:[14,23],f_zv_z:[14,23],face:[2,29],facecolor:[3,5,8],facil:0,facilit:[2,7],fact:[0,2,4,5,7,9,10,12,14,15,16,17,21,23,24,25,26],factor:[2,3,4,5,7,9,13,14,16,22,23,25],fade:5,fail:[5,8,9,16,25],failur:6,fair:29,fairli:[1,2,3],faith:29,fall:[8,16,25,28],fallingbasebal:[12,21],fals:[1,2,4,5,6,7,10,15,24],falsiti:2,famili:[0,3,4,6,8,9,12,15,21,24,28],familiar:[0,2,3,4,8,12,14,16,21,23,25],famou:[0,5,7],fanci:0,far:[0,1,2,3,4,5,7,8,9,10,13,16,22,25],fashion:[0,11,20],fast:[3,4,5,7,10,12,17,21,26],fastdriven1:[15,24],fastdriven2:[15,24],faster:9,favor:6,favorit:3,fc1:7,fc2:7,featur:[3,6,7,10,15,24],feature_nam:[5,9],feb:28,februari:[15,24],fed:[0,7],feed:[0,1,4,9,10,13,22],feed_dict:7,feed_forward:7,feed_forward_out:7,feed_forward_train:7,feeddorward:[1,10],feedforward:[1,7,10],feel:[2,4,9,12,14,15,17,21,23,24,26,33],feet:[5,17,26],fellow:0,felt:[13,22],fetch:2,few:[3,4,7,10,27,32],fewer:[4,9],ffedbda27704:[15,24],ffnn:7,fictiti:[17,26],field:[0,4,5,7,14,15,16,17,23,24,25,26,28],fifth:[4,12,21],fig:[1,2,4,5,6,7,9,10,12,14,15,16,18,19,21,23,24,25,35],fig_id:[4,5,9,12,14,15,16,21,23,24,25],figaxi:3,figsiz:[1,4,5,7,8,9,10,12,18,19,21,35],figur:[1,2,4,5,6,7,8,9,10,12,13,14,15,16,17,21,22,23,24,25,26],figure_id:[4,5,9,12,14,15,16,21,23,24,25],figurefil:[4,5,9,12,14,15,16,21,23,24,25],file:[1,3,4,5,7,8,9,12,14,15,16,21,23,24,25,28,30],filenam:[3,4,5,12,21],fileout:3,filewrit:7,fill:5,filter:10,financ:[0,4],find:[0,1,2,3,4,6,7,8,9,11,13,14,15,16,17,20,22,23,24,25,26,28],fine:7,finish:[1,13,22],finit:[3,5,7,16,25],first:[0,1,2,3,5,6,9,10,11,14,15,16,17,20,23,24,25,26,28,34,36],firsteigvector:9,fisher:2,fit:[0,1,2,3,6,7,8,9,10,13,22],fit_intercept:5,fit_transform:[4,5,8,9],fiti:4,five:[2,4,5],fix:[1,2,4,7,10,13,14,15,16,17,18,19,22,23,24,25,26,35],flat:[2,7],flatten:[1,2,7,10],flavor:[34,36],flexibl:[4,5,7,8,11,12,15,20,21,24],flip:[2,16,25],float32:7,float64:[1,4,5,10,12,21],floor:[12,21],flop:5,flow:[1,7,10,13,17,22,26],fly:[9,16,25],flyvbjerg:3,fmax:[15,24],fmt:2,focault:[17,26],foci:[16,25],focoault:[17,26],focu:[0,1,2,4,5,10,12,13,16,17,21,22,25,26],focus:[6,7,15,24,29],folder:[4,12,21,28],folk:0,follow:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,29,34,36],font:[3,4,12,15,21,24],fontdict:3,fontsiz:[3,5,8],footbal:[16,25],foral:8,forc:[5,9,11,12,14,20,21,23,28],forcast:[1,10],forcedblockeulercrom:[15,24],forcedblockrk4:[15,24],forecast:[1,7,10],foreman:2,forest:[0,4,7],forget:9,fork:30,form:[0,1,2,3,4,5,6,7,8,9,10,12,13,14,15,16,17,21,22,23,24,25,26],formal:[2,3,10,12,14,17,21,23,26,28],formalim:28,format:[2,3,4,5,8,9,11,12,14,15,16,20,21,23,24,25],format_data:[1,10],former:2,formul:[2,5,9,13,22],formula:[3,12,14,15,16,21,23,24,25],forth:[7,16,17,25,26],fortran90:3,fortran:[0,4,12,21],fortun:[5,9],forum:28,forward:[4,5,10,12,13,14,15,17,21,22,23,24,26],forwardeul:[15,24],forwardeulercrom:[15,24],foster:29,foucalt:28,foucault:28,found:[1,5,7,9,13,15,16,22,24,25,31],foundat:[11,20],four:[1,7,8,10,14,17,23,26],fourier:[5,28],fourierdef1:[15,24],fourierdef2:[15,24],fourierseriessign:[15,24],fouriersolut:[15,24],fourpi2:[14,23],fourth:[4,7,12,15,21,24],frac:[1,2,3,4,5,6,7,8,9,11,12,13,14,15,16,17,20,21,22,23,24,25,26],frame:[9,13,16,22,25,28],framework:[0,2,3,7,8],frankefunct:[5,9],free:[3,4,9,12,21,29],freedom:[11,13,15,16,20,22,24,25],freeli:[0,4],freewai:[13,22],frequenc:[2,3,5,9,12,13,15,16,17,21,22,24,25,26],frequent:[0,2,4,8],frib:28,friction:[13,15,22,24,28],frictionless:[13,22],fridai:28,friendli:[1,10,15,24],frodo:[4,12,21],frog:10,from:[0,1,3,4,6,8,9,11,12,13,14,15,16,18,19,20,21,22,23,24,25,28,29,35],from_logit:10,front:[0,1,4,10],frontier:[34,36],frydai:28,fstream:3,ftild:[15,24],ftrue:2,fuel:[13,22],fulfil:[1,5,7,13,22],full:[0,3,4,5,6,12,21],fulli:[3,5,7,10,31],fun:[4,12,21],func:[1,5],functional_1:1,functional_3:1,functional_5:1,functional_7:1,functionali:9,fundament:[0,2,5,13,15,22,24],funtion:1,further:[1,2,4,10,11,12,13,14,16,17,20,21,22,23,25,26,28,29],furthermor:[2,4,5,6,7,9,11,12,13,20,21,22],furthest:[17,26],futur:[0,1,4,8,10,13,15,22,24],futurist:0,fwhm:[15,24],g_0:1,g_1:1,g_2:1,g_analyt:1,g_dnn_ag:1,g_euler:1,g_i:1,g_m:[15,24],g_n:[15,24],g_re:1,g_t:1,g_t_d2t:1,g_t_d2x:1,g_t_dt:1,g_t_hessian:1,g_t_hessian_func:1,g_t_jacobian:1,g_t_jacobian_func:1,g_trial:1,g_trial_deep:1,g_vec:1,gain:[0,5,7,11,13,14,15,20,22,23,24,28],galaxi:[13,22],galleri:[0,4],gallon:[16,25],gamge:[4,12,21],gamma1:8,gamma2:8,gamma:[1,5,8,9,13,15,16,17,22,24,25,26],gamma_:5,gamma_i:[3,5,8],gamma_x:5,gap:8,gate:[1,7,10],gather:7,gaug:7,gauss:[16,25],gaussian:[2,5,8,15,24],gaussian_rbf:8,gca:[1,5,8],gen:3,gender:[5,29],genener:[1,10],gener:[0,1,2,4,7,8,9,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,28],generallay:7,genet:[0,7],geodes:[9,17,26],geometr:[4,13,14,22,23],geq:[1,5,8],get:[0,1,2,3,5,6,7,9,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,28,33],get_default_graph:7,get_paramet:1,get_yaxi:8,get_yticklabel:5,getattr:5,ggplot:[12,21],ghp:31,gibb:0,git:[0,28],github:[0,4,28,30,31],gitlab:0,give:[0,1,2,3,4,5,6,7,8,12,13,14,15,16,17,21,22,23,24,25,26,28,33],given:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,30],global:[2,3,6,14,15,23,24],global_step:7,global_variables_initi:7,glorot:7,gm_1m_2:[16,25],gm_:[14,16,23,25],gm_am_b:[16,25],gmm:[16,17,25,26],goal:[0,2,4,5,6,13,22],goe:[1,4,5,7,14,15,16,23,24,25,28],going:[2,4,7,8,9,10,13,17,22,26],gold:[16,25],gone:5,gong:7,good:[2,3,4,5,7,9,10,11,13,15,20,22,24,28,29],googl:[4,7,12,21],got:7,govern:[11,13,20,22],gracefulli:29,grad:1,grader:28,gradient:[0,4,5,6,8,10,17,26],gradientdescentoptim:7,gradual:[13,15,22,24],grai:2,graph:[0,7,9],graphic:[4,7,11,13,20,22],grasp:[0,4],gravgauss:[16,25],gravit:[7,12,13,14,15,17,21,22,23,24,26,28],graviti:[12,16,17,21,25,26,28],gray_r:[7,10],grayscal:10,graze:[16,25],great:[13,22],greater:[3,7,9],greatli:[2,30],green:[3,4,10,15,24],greeni:[15,24],greeny2:[15,24],grid:[3,5,6,7,8,10,13,16,22,25],ground:[4,12,17,21,26],group:[0,4,5],groupbi:[4,5],grow:[2,7,10],growth:4,gru:[1,10],guarante:[0,3,5,9],guess:[2,7,13,15,17,22,24,26],guid:[0,7,18,19,35],h_1:[1,2],h_2:1,h_i:2,habit:[11,20],had:[0,2,4,5,7,13,14,16,22,23,25],hadamard:7,half:[7,8,16,25],hamiltonian:[14,23],hand:[0,1,2,3,4,5,7,9,10,11,12,13,16,17,20,21,22,25,26,28],handi:[10,14,17,23,26],handl:[1,2,7,9],handsid:7,handwrit:7,handwritten:7,handwrittennot:28,happen:[1,2,3,7,10,13,16,22,25],harass:29,hard:[6,7,8],hardcopi:[4,12,21],harder:[5,7,9],harm:29,harmon:[13,14,22,23,28],has:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,28,31,34,36],hasn:7,hassl:[4,12,21],hast:0,hat:[3,4,5,6,7,9,12,13,14,15,16,17,21,22,23,24,25,26],have:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,28,29],haven:7,hbar:[14,23],hdf5:4,hdhpk14:[34,36],head:[1,2,3,5,10],header:[4,5],hear:[0,4],heart:[0,2,4],heatmap:[4,5,7,9,10],heavi:[11,16,20,25],heavili:[0,4],heavisid:7,heer:[34,36],height:[7,10,13,14,16,17,22,23,25,26],helic:[13,22],help:[0,1,2,7,10,11,16,20,25,30],hemispher:[17,26],henc:[4,5,7,8,13,22],her:6,here:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,30,31,34,35,36],hereaft:[5,7,8,14,17,23,26],hermitian:[4,12,21],hessenberg:[4,12,21],hessian:1,hhint:[14,23],hidden:[7,10],hidden_bia:7,hidden_bias_gradi:7,hidden_layer_s:[4,7],hidden_neuron:[1,10],hidden_weight:7,hidden_weights_gradi:7,high:[0,1,4,5,7,9,10,12,15,17,21,24,26],higher:[0,2,4,5,7,8,9,12,13,14,15,16,17,21,22,23,24,25,26],highest:[1,7],highli:[3,4,5,10,12,21],highwai:5,him:2,hinder:0,hing:8,hire:[0,4],his:[2,6],hist:[1,2,3,5,9,10],histogram:[2,3,5,9],histor:[6,9],histori:[1,7,10],histtyp:[2,5],hit:[0,12,13,16,21,22,25],hjensen:[7,8,9,28],hjorth:[2,28],hobbi:3,hoc:5,hold:[3,5,7,10,13,15,17,22,24,26],holder:5,holdgraf:[34,36],holdgraf_evidence_2014:[34,36],home:[5,28],homework:[14,16,23,25,28],homogen:[7,13,15,17,22,24,26],homogn:[13,22],homogsolut:[15,24],honchar:1,honest:2,hope:[0,11,20],hopefulli:[3,5,9,13,22],horizont:[9,13,17,22,26],hors:[6,10],hot:[7,18,19,35],hour:[3,7,17,26,28],how:[0,1,2,4,6,7,9,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,27,28,30,32,33],howev:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26],hspace:[3,4,8,12,13,15,21,22,24],htm:28,html:[4,9,11,18,19,20,28,31,35],http:[1,2,4,7,9,10,12,21,28],huang:4,huber:4,huge:[7,10],human:[0,4,7,34,36],hundr:7,hungri:7,hurrican:[17,26],hv_:[14,23],hw10:28,hybrid:2,hydrogen:4,hyperbol:[1,10],hyperbola:[16,25],hyperparam:8,hyperparamet:[5,10],hyperplan:9,hypothes:2,hypothesi:2,i_1:5,i_2:5,i_c:[15,24],i_i:[15,24],idea:[0,1,2,3,4,5,7,10],ideal:[0,1,3,4,5,8,11,13,15,20,22,24],idem:5,ident:[5,7,15,24,29],identifi:[0,4,6,7,8,9,11,16,20,25],idum:3,ieor:3,iet:[15,24],ifs:[4,12,21],ignor:[2,5,9,10,12,14,16,17,21,23,25,26],iii:[4,12,21],ijk:[13,14,22,23],illustr:[0,7,13,16,17,22,25,26],imag:[5,7,9,18,19,35],image_height:10,image_path:[4,5,9,12,14,15,16,21,23,24,25],image_width:10,imageri:29,imagin:[2,13,14,22,23],imaginari:[15,17,24,26],immedi:[0,1,4,5,10,15,24,28],impact:[0,11,16,20,25],impart:[13,22],implement:[4,5,8,9,10,11,13,14,15,20,22,23,24,28],impli:[2,4,5,10,11,12,15,20,21,24],implic:[13,22],implicit:[2,10],implicitli:[2,3,9],impos:[0,5,7,9],imposs:[0,5],impress:[0,2,4,7],improv:[0,1,5,9,10,13,14,15,22,23,24],impuls:[15,24],imshow:[5,7,10],in5400:[1,10],in_out_neuron:[1,10],inact:7,inadequ:0,inappropri:29,incid:[16,25,29],inclin:2,includ:[1,2,3,4,5,7,9,10,11,13,15,16,17,18,19,20,22,24,25,26,29,30,34,35,36],include_bia:5,inclus:[2,11,20,29],incom:[7,16,25],inconsist:[15,24],incorpor:[15,17,24,26],incorrect:7,incoveni:8,increas:[0,1,2,3,4,5,7,8,9,10,11,14,15,16,20,23,24,25],increasingli:[2,3],incred:0,increment:[11,20],ind:5,inde:[0,1,4,5,13,14,15,16,22,23,24,25],indent:[3,15,24],indentationerror:3,independ:[2,3,5,6,7,8,12,13,14,15,16,17,21,22,23,24,25,26,28],index:[1,3,4,5,7,10,12,21],index_col:[4,5],indic:[2,4,5,7,9,10,12,13,21,22],indispens:5,individu:[3,6,7,15,16,24,25,29],indu:5,induct:2,industri:[11,20],indx1:1,indx2:1,indx3:1,inelast:[16,25],inequ:[0,8],inerti:[13,22,28],inertia:[13,22],inf:5,infam:0,infer:[0,5,7,16,25],infil:[4,5,12,21],infin:[5,9,15,24],infinit:[0,2,13,15,16,22,24,25],infinitesim:[2,3,15,24],influenc:[2,5,12,13,16,21,22,25],influenti:7,info:[4,7,12,21],inform:[0,1,2,4,5,7,9,10,14,16,18,19,23,25,29,31,34,35,36],infti:[3,13,15,22,24],ingredi:[0,4],inher:5,inherit:[4,12,21],init:[34,36],initi:[1,3,4,5,7,12,13,14,15,16,17,21,22,23,24,25,26],initialis:3,inlin:[1,3,4,5,6,7,8,9,10,11,12,14,15,16,20,21,23,24,25],inner:5,inoccu:0,inp:[1,10],input:[0,2,3,4,5,6,7,8,9,10,11,12,14,15,20,21,23,24,34,36],input_1:1,input_2:1,input_3:1,input_4:1,input_shap:[1,10],inputlay:1,inputs_shuffl:7,insert:[3,7,8,12,14,15,16,17,21,23,24,25,26,34,36],insid:[1,5,9,10,16,25,34,36],insight:[0,4,5,7,11,13,20,22,28],inspect:[13,15,16,22,24,25],inspir:[0,4,7],instabl:1,instal:[7,28,30,31],instanc:[0,1,5,7,9,13,22,29],instant:[14,23],instantan:[12,21],instead:[0,1,2,3,4,5,7,8,9,10,11,12,13,14,16,20,21,22,23,25],institut:[0,7],instruct:[0,2,7],instructor:28,insult:29,int32:7,int64:5,int_0:[2,3,11,12,13,14,15,17,20,21,22,23,24,26],int_:[2,3,12,13,14,15,21,22,23,24],int_a:[3,11,14,20,23],integ:[1,3,4,7,12,16,21,25],integer_vector:7,integr:[0,3,4,11,13,15,16,20,22,24,25,28],integraldef:[14,23],integrand:[15,24],intellig:[0,4],intens:[7,11,20],interact:[4,5,7,12,13,15,16,18,19,21,22,24,25,35],intercept:[4,5,8],intercept_:[4,5,8],interchang:7,interest:[0,1,2,3,4,5,6,7,8,9,10,12,14,15,17,21,23,24,26,29],interfac:[4,7,11,20],interior:4,intermedi:[2,15,24],intern:[7,13,14,16,22,23,25,34,36],internet:[17,26],interpol:[7,10,14,23],interpr:5,interpret:[0,2,3,4,7,12,13,14,21,22,23],interv:[3,5,6,11,13,14,15,20,22,23,24],intimid:4,intract:[2,5,9],intrins:[2,3,4,9,10,12,21],intro:[34,36],introduc:[0,3,4,7,8,11,12,13,14,15,17,20,21,22,23,24,26,28],introduct:[1,5,7,10,28],introductori:[4,5],intuit:[2,4,5,7,8],inv:5,invalid:[4,7,8,9,12,21],invalu:[4,11,12,20,21],invari:[7,14,23],invd:5,invent:2,inver:8,invers:[4,5,9,12,13,15,16,21,22,24,25],invers_period:3,inverse_transform:8,invert:[5,6,13,14,22,23],investig:[11,20,29],invis:[16,25],invok:[5,8,13,22],involv:[0,1,2,5,6,7,9,12,13,15,16,21,22,24,25],inward:[17,26],iomanip:3,ion:[18,19,35],ios:3,iostream:3,ipca:9,ipynb:[4,12,21,34,36],ipython:[2,3,4,5,7,8,9,12,15,21,24],iri:8,irreduc:5,irrelev:[5,15,24],irrespect:[0,2,4],ising:7,ismov:[13,22],isnul:5,isol:[12,14,21,23],isomap:9,isotrop:[17,26],issu:[0,7,29,30],item:[0,4,5],items:[4,12,21],iter:[1,3,5,7,8,9,10,13,22],ith:2,its:[0,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,29,30,34,36],itself:[2,3,5,7,13,14,15,16,22,23,24,25],j_lasso_sk:5,j_ridge_sk:5,j_sk:5,jackknavg:3,jackknif:0,jackknstd:3,jackknvar:3,jackknvec:3,jake:2,januari:9,jargon:3,jeffrei:2,jensen:[2,28],jeremi:28,job:[1,8,13,22],john:[2,28],join:[4,5,9,12,14,15,16,21,23,24,25],joul:[12,21],journal:3,jrt:28,judgment:2,juli:28,jump:3,jupyt:[0,4,11,12,18,19,20,21,31,34,35,36],jupytext:[34,36],just:[0,1,2,3,4,5,6,7,8,9,10,12,13,14,15,16,21,22,23,24,25,28],justif:[0,4],k1v:[15,24],k1x:[15,24],k2v:[15,24],k2x:[15,24],k3v:[15,24],k3x:[15,24],k4v:[15,24],k4x:[15,24],k_1:[15,24],k_2:[15,24],k_3:[15,24],k_4:[15,24],kappa_d:3,karush:8,keep:[0,2,4,5,7,9,11,12,13,14,15,18,19,20,21,22,23,24,30,35],keepdim:[5,7],kei:[2,5,7,15,24],kepler:[16,25,28],kept:[1,10,15,24],kera:[0,1,4,12,21],kernel:[5,7,34,36],kernel_regular:[7,10],kernelpca:9,kev:[4,5],keyword:[4,12,21],kfold:5,kick:7,kiener:1,kilogram:[12,21],kind:[0,1,5,7,8,10,13,16,22,25,34,36],kindergarten:0,kinet:[12,13,14,15,16,21,22,23,24,25],kkt:8,knight:[34,36],know:[0,1,2,3,4,5,8,12,13,15,16,17,21,22,24,25,26,28],knowledg:[0,2,4,5,11,20,28],known:[0,1,2,3,5,6,7,8,9,10,12,13,14,15,17,21,22,23,24,26,28],kondev:4,kpca:9,kr_:[16,25],krh:[16,25],kuhn:8,kutta2:[15,24],kutta4:[15,24],kutta:28,kwarg:5,kwown:5,l1_l2:10,l2_loss:7,l_1:6,l_2:6,l_j:7,l_z:[14,23],la_:[18,19,35],la_i:7,la_k:7,lab:[0,16,25],label:[1,2,3,4,5,6,7,8,10,13,14,15,16,17,22,23,24,25,26],labels:[5,8],labels_shuffl:7,laboratori:[2,13,16,17,22,25,26],lack:[0,2,4],lad:0,lagari:1,lagrang:[8,9,14,23,28],lagrangian:[14,23,28],lai:[2,11,20],lambda:[1,3,4,6,7,8,10],lambda_0:9,lambda_1:[5,8,9],lambda_2:[8,9],lambda_:9,lambda_i:[8,9],lambda_iy_i:8,lambda_jy_iy_j:8,lambda_k:8,lambda_n:[5,8],land:[5,8],landmark:8,langl:[2,3,5,9],langrangian:28,languag:[1,4,7,8,10,12,21,29,34,36],lapack:[4,12,21],laplac:2,larg:[0,1,2,3,4,5,7,8,9,11,12,13,15,16,20,21,22,24,25,28],larger:[2,3,4,5,8,9,10,11,15,20,24],largest:[1,8,9,10],lass:0,lasso:6,lasso_sk:5,last:[0,1,2,3,4,5,7,10,12,13,14,15,16,17,21,22,23,24,25,26],later:[0,1,2,3,4,5,6,7,8,10,12,13,14,15,16,21,22,23,24,25],latest:28,latex:[4,11,12,20,21],latitud:[17,26],latter:[0,3,4,5,6,8,9,12,13,14,15,16,17,21,22,23,24,25,26],lattic:7,launch:0,law:[0,2,4,7,11,12,15,16,17,20,21,24,25,26,28],layer:4,lbfg:9,lbl:5,lcc:5,lda:9,ldot:[2,3,5,9],lead:[0,3,4,5,6,7,8,9,10,12,13,14,15,16,17,21,22,23,24,25,26],leader:0,leadership:29,leaki:7,learn:[6,8,10,12,21],learnabl:10,learning_r:[7,8],learning_rate_init:[4,7],least:[0,2,3,4,6,8,9,12,13,21,22],leav:[2,5,7,9,10,14,16,23,25],lectur:[0,1,4,5,7,9,12,15,17,21,24,26],lecturenot:30,led:2,left:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26],leftarrow:[7,8],legend:[1,4,5,8,9,10,12,18,19,21,35],len:[1,2,3,4,5,7,8,9,10,12,21],length:[1,3,4,5,7,8,9,10,12,13,14,15,21,22,23,24],length_of_sequ:[1,10],lengthi:[17,26],leq:[3,4,5,6,8],less:[0,3,4,5,7,8,11,12,15,16,17,20,21,24,25,26,34,36],let:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26],letter:[3,4,5,12,21],level:[4,5,7,11,12,17,20,21,26,29],levi:[14,23],lhs:[12,21],lib:[5,7,8,9],liberti:2,liblinear:8,librari:[0,1,3,5,7,9,10,11,20],licens:[2,4,7,12,21],lie:[2,3,5,9],lies:[2,8,9,11,20],life:[0,2,4,7,8,11,17,20,26],light:[2,4,13,22],lightgrai:[16,25],lighthous:2,like:[0,1,2,3,4,5,6,7,9,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,28,31,34,36],likelihood:[0,2,5,7],lim_:[3,12,21],limit:[2,5,8,9,11,12,13,14,15,17,20,21,22,23,24,26,28],lin_clf:8,lin_model:5,linalg:[1,3,4,5,8,9],line1:8,line2:8,line2d:[18,19,35],line3:8,line:[0,2,3,4,5,7,8,9,10,11,12,15,17,18,19,20,21,24,26,34,35,36],linear:[0,2,3,6,7,9,10,12,13,15,21,22,24,28],linear_model:[4,5,8,9],linear_regress:5,linearli:[5,9,13,15,22,24],linearregress:[4,5],linearsvc:8,liner:[7,10],linestyl:[16,25],linewidth:[1,2,4,5,8,10],link:[1,4,7,10,17,26],linpack:[4,12,21],linreg:4,linspac:[1,2,3,4,5,8,15,16,18,19,24,25,35],linux:[4,7,12,21],liquid:[4,5],list:[1,2,4,5,10,12,15,21,24,30,31],listcomp:5,literatur:[6,7,16,25,28],littl:[7,10,12,16,21,25,30],live:8,lle:5,lmb:[1,5],lmbd:[4,7,10],lmbd_val:[4,7,10],load:[4,5],load_boston:5,load_breast_canc:9,load_data:10,load_digit:[7,10],load_iri:8,loc:[4,5,8,9,10,12,21],local:[2,5,6,7,9,10,14,15,16,17,23,24,25,26,30,31],locat:[1,2,8,10,16,25,28],log10:[5,11,20],log:[1,2,4,5,6,7,9,12,21],log_:4,log_likelihood:2,log_posterior:2,log_prior:2,logarithm:[2,4,6,12,21],logic:[0,2,4],logist:[1,4,5,8],logisticregress:9,logit:[6,7],logreg:9,logspac:[4,5,7,10,18,19,35],longer:[1,3,4,8,10,12,13,14,15,16,21,22,23,24,25],loocv:5,look:[0,1,2,3,4,5,7,8,9,10,12,13,14,16,17,21,22,23,25,26,30,34,36],loop:[3,4,5,7,12,13,14,21,22,23],loos:[17,26],lorentz:[17,26],lose:7,loss:[0,1,4,5,6,7,8,9,10,12,13,14,21,22,23],lost:[2,15,24],lot:[5,11,18,19,20,35],love:[13,15,22,24],low:[2,3,5,9,16,17,25,26],lower:[2,4,5,7,10,12,14,15,16,17,21,23,24,25,26],lowercas:[4,12,21],lowest:3,lstat:5,lstm:[1,10],lstm_2layer:[1,10],lstsq:5,luckili:1,lvert:7,m_0:[14,23],m_1:[2,16,25],m_1m_2:[16,25],m_2:[2,16,25],m_e:[14,23],m_h:4,m_i:[2,14,23],m_iv_i:[14,23],m_l:7,m_n:4,m_p:4,machin:[1,5,6,7,10,12,21],mackei:2,made:[0,1,2,4,6,7,9,10,11,14,15,20,23,24],mae:4,magnitud:[2,7,9,12,13,14,15,16,17,21,22,23,24,25,26],mai:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,20,21,22,23,24,26,29,31],mail:[28,29],main:[0,4,5,6,10,15,24,31],mainli:[2,4,5,6,13,15,22,24],maintain:[5,13,15,22,24,29],major:[4,5,7,11,12,20,21],make:[0,1,2,3,4,5,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,35],make_axes_locat:5,make_moon:8,make_pipelin:[4,5],makedir:[4,5,9,12,14,15,16,21,23,24,25],makeplot:[4,12,21],malign:9,malth:28,manag:[1,4,7,10,12,21],mani:[0,1,2,3,4,5,6,8,9,10,12,13,15,16,17,21,22,24,25,26,27,28,32,34,36],manifestli:[14,23],manifold:9,manner:[10,17,26],manual:[11,20,31],map:[0,1,3,4,5,6,7,8,9],margin:[0,2,4,8,14,23],marit:5,mark:[4,12,21],markedli:[34,36],marker:[4,5],market:0,markov:[0,2],markup:[34,36],marsaglia:3,mask:3,mass:[2,5,7,12,13,14,15,17,21,22,23,24,26,28],massag:4,masses2016:4,masses2016ol:5,masses2016tre:4,masseval2016:[4,5,12,21],massiv:[17,26],master:[2,28],match:[7,16,25],materi:[0,4,5,6,7,9,10,11,12,13,14,15,17,20,21,22,23,24,26],math:[3,4,6,7,11,12,14,15,16,18,19,20,21,23,24,25,35],mathbb:[3,5,6,7,8,9],mathbf:[3,4,5,6,8,12,21],mathcal:[2,5,6,7],mathemat:[0,3,4,9,11,13,15,20,22,24,28],mathemati:[4,12,21],mathemt:5,mathrm:[2,3,4,5,6,7,8,9,12,13,14,15,17,21,22,23,24,26],matmul:[1,5,7],matplotlib:[1,3,4,5,6,7,8,9,10,11,12,14,15,16,18,19,20,21,23,24,25,35],matric:[1,5,6,8,9,10],matrix:[1,6,8,10],matter:[1,9,10],matur:[11,20],max:[1,4,5,7,9,10,14,15,16,23,24,25],max_depth:4,max_diff1:1,max_diff2:1,max_diff:1,max_it:[4,7,8,9],maxdegre:5,maxim:[2,6,7,8,9],maxima:[2,16,25],maximum:[1,2,4,5,7,8,9,10,13,14,15,16,22,23,24,25],maxpolydegre:5,maxpooling2d:10,mayb:2,mbox:[5,18,19,35],mcculloch:7,mcint:3,mcintsqr2:3,mcmc:2,mdoel:[1,10],mean:[0,1,2,4,5,6,7,10,11,12,13,14,15,17,18,19,20,21,22,23,24,26,28,35],mean_absolute_error:[4,5],mean_i:3,mean_squared_error:[1,4,5,9,10],mean_squared_log_error:4,mean_x:3,meaning:0,meansquarederror:4,meant:[0,6,11,16,20,25,28],meantempvec:3,meanvec:3,measur:[1,3,4,5,7,9,12,13,15,16,17,21,22,24,25,26],mechan:[0,1,2,3,10,11,13,14,15,17,20,22,23,24,26,36],mechanist:0,media:[28,29],median:[2,4,5,9],mediaspac:28,medicin:[0,7],medium:[1,8,10,13,15,18,19,22,24,35],medv:5,meet:[11,20],mehta:5,member:29,memori:[1,7,9,10,15,24],mention:[2,3,4,7,13,15,16,22,24,25],mere:[2,16,25],merg:2,mersienn:3,mesh:[12,13,14,21,22,23],meshgrid:[1,5,8,9],messi:[1,15,16,24,25],met:[0,2,4,5,8,9,14,23],metadata:[34,36],meter:[12,16,21,25],method:[0,1,2,4,6,7,8,9,10,11,13,16,20,22,25,28],methodolog:[11,20],metric:[4,5,7,9,10],metropoli:0,mev:[3,4,5],mgh:[16,17,25,26],mgl:[15,24],mglearn:[4,12,21],mgsin:[13,15,22,24],mgx:[17,26],mgy:[17,26],mhjensen:28,michael:10,michigan:[2,36],mid:[7,9,14,23],midel:[1,10],midpoint:[14,15,23,24,28],midterm:28,might:[1,2,5,7,9,13,14,16,22,23,25,30],mileag:[13,22],miller:3,million:[4,5,9],mimic:7,min:[1,5,8,9,16,25],min_:[1,5],mind:[0,2,4,5],mindboard:[1,10],mine:[4,12,21],mini:[7,9],minibatch:[7,9],minim:[0,3,4,5,6,7,9,15,16,24,25],minima:[4,6,7,16,25],minimum:[1,5,7,8,9,15,16,24,25],minmaxscal:[5,9],minneapoli:[17,26],minor:3,minut:[16,25],misclassif:8,misclassifi:8,mismatch:7,miss:[2,5],mix:[1,7,12,13,15,21,22,24],mkdir:[4,5,9,12,14,15,16,21,23,24,25],mlab:[3,5],mle:[3,6],mlk:28,mlpclassifi:7,mlpregressor:4,mnist:[7,9],mod:3,mode:[3,15,24],model:[1,3,6,8,9,11,16,20,25],model_select:[4,5,7,9,10],modern:[0,4,5,6,11,20],modif:[1,7,16,25],modifi:[2,4,5,6,7,8,12,17,21,26],modul:[2,4,5,7,9,11,12,20,21],modular:[3,11,20],modulo:3,moe:[5,9],molecul:[13,22],molten:[17,26],moment:5,momenta:[12,16,21,25],momentum:[12,13,15,16,21,22,24,25,28],mondai:28,monoton:[3,7],monstertruck:0,mont:[0,2,3,4,5],montecarlocycl:3,moon:[16,25],moor:5,more:[0,2,3,7,11,14,16,17,18,19,20,23,25,26,28,30,31,34,35,36],moreoev:36,moreov:[4,10,34],morten:[2,28],most:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,16,17,20,21,22,23,25,26,34,36],mostli:[7,9],motion:[0,4,11,14,15,17,20,23,24,26,28],motiv:[7,13,15,22,24],mount:[17,26],move:[2,3,4,5,6,7,13,14,16,17,22,23,25,26,28],mpatch:[12,21],mph:[13,22],mpl:[4,12,15,21,24],mpl_toolkit:[1,5],mplot3d:1,mplregressor:7,mr_:[16,25],mrv_:[16,25],mse:[1,4,5,9,10],msle:4,msu:28,mt19937_64:3,mu0:3,mu1:3,mu2:3,mu_:3,mu_k:[13,22],mu_n:9,mu_x:3,much:[0,1,2,3,4,5,7,8,9,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26],multi:[2,4,5,6,10,12,21],multiclass:[6,7],multidimension:[2,4,7,9,12,21],multimod:2,multinomi:6,multipl:[1,3,5,6,10,12,13,21,22],multipli:[3,5,9,10,12,13,14,17,21,22,23,26,28],multiplum:8,multitud:4,multivari:[0,1,3,4,9],multivariate_norm:9,murphi:9,must:[1,2,3,5,7,8,10,13,15,16,17,22,24,25,26,34,36],mutat:6,mutual:[5,10],mv_0:[14,23],mv_:[16,25],mv_e:[14,23],mvn:3,mx_:3,mydirectivenam:[34,36],myriad:[4,12,21],mz1:3,mz2:3,n_0:[3,7],n_b:3,n_boostrap:5,n_bootstrap:5,n_categori:[7,10],n_compon:9,n_featur:7,n_filter:10,n_hidden:1,n_hidden_neuron:[4,7],n_i:3,n_input:[7,10],n_iter_i:9,n_l:[3,7],n_neurons_connect:10,n_neurons_layer1:7,n_neurons_layer2:7,n_sampl:[5,8],n_split:5,n_t:1,n_x:1,nabla:[7,14,16,23,25],nabla_:1,nabla_i:[14,23],nabla_jv:[14,23],naimi:4,naiv:6,name:[0,1,2,4,5,6,7,8,10,12,13,14,15,17,21,22,23,24,26,30,34,36],name_scop:7,nameerror:2,namespac:3,narrow:[2,30],nation:[2,7,29],nativ:[4,12,21],natur:[0,1,2,3,4,7,8,10,11,13,15,20,22,24],navier:7,navig:31,nbconvert:[4,12,21],nboot:3,nburn:2,ncol:2,ndarrai:5,ndim:2,ndoubl:2,nearest:[5,7,9,10],nearli:[17,26],neat:[4,12,21],neccesari:5,necess:[1,2],necessari:[0,1,7,8,10,13,15,22,24],necessarili:[0,2,3,9,16,25],neck:6,need:[0,1,2,3,5,7,8,9,10,13,14,15,16,17,22,23,24,25,26],neg:[3,4,5,6,7,13,15,16,17,22,24,25,26],neg_mean_squared_error:5,neglect:[3,15,16,24,25],neglig:[3,17,26],neighbor:[5,9,10],neighbourhood:2,neq:3,nervou:7,nest:7,net:[1,7,10,13,14,16,17,22,23,25,26],netlib:[4,12,21],network:[0,5,6,12,21],neural:[0,5,6,12,21],neural_network:[1,4,7],neuralnetwork:7,neuralnetworktensorflow:7,neuron:1,neurosci:[34,36],neutral:4,neutron:4,never:[2,3,5,7,15,16,24,25],nevertheless:2,new_hobbit:[4,12,21],new_sig:5,newaxi:[4,5,10],newdata:[12,21],newli:[0,12,21],newton1:[13,22],newton:[3,6,7,8,12,15,17,21,24,26,28],newtonian:[17,26],next:[1,2,3,4,7,8,10,12,14,15,16,17,21,23,24,25,26],next_input:[1,10],neyman:2,nice:[2,4,5,7,9,12,21,28],nielsen:10,nitric:5,nlambda:5,nldr:9,nm_n:4,nmse:5,nnmin:1,no_of_head:2,no_of_tail:2,node:7,nois:[2,4,5,8],noisi:[5,7],non:[1,3,5,6,7,9,10,14,15,23,24,28],noncommerci:2,none:[1,2,3,5,7,10],noninform:2,nonlinear:[5,7,8,9,10],nonneg:5,nonparametr:5,nonsens:3,nonsingular:[4,12,21],nonumb:[6,8,13,14,15,16,17,22,23,24,25,26],nor:[0,7],norm:[2,4,5,7,8,9,13,14,15,22,23,24],normal:[0,2,4,5,6,7,8,9,10,11,12,13,14,15,17,20,21,22,23,24,26],normaldevi:2,normali:[4,12,21],normpdf:5,north:[17,26],northern:[17,26],notat:[1,3,5,12,14,21,23],note:[1,3,4,5,6,7,8,9,10,12,13,14,15,16,21,22,23,24,25,30,34,36],notebook:[0,4,7,10,11,12,20,21,34,36],notesapril10:28,notesapril13:28,notesapril15:28,notesapril17:28,notesapril1:28,notesapril20:28,notesapril22:28,notesapril24:28,notesapril3:28,notesapril6:28,notesapril8:28,notesmarch13:28,notesmarch16:28,notesmarch18:28,notesmarch20:28,notesmarch23:28,notesmarch25:28,notesmarch27:28,notesmarch30:28,notesmarch9:28,noth:[1,3,5,7,8,12,21],notic:[2,3,4,7,12,14,17,21,23,26],notion:10,novel:[5,10],novemb:7,now:[1,2,3,4,6,7,8,10,12,13,14,15,16,17,21,22,23,24,25,26],nowadai:[0,4,7,10,11,20],nox:5,nozzl:[16,25],npr:1,npt:[11,20],nrow:2,nsampl:5,nscl:28,nspin:3,nstep:2,nuclear:[15,16,24,25],nuclei:[3,4,16,25],nucleon:[4,5],nucleu:[4,16,25],nuisanc:2,num_coordin:1,num_hidden_neuron:1,num_it:1,num_neuron:1,num_neurons_hidden:1,num_point:1,num_valu:1,number:[0,2,4,6,7,8,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26],numer:[0,4,5,7,9,11,12,13,16,20,21,22,25,28],numpi:[1,3,5,6,7,8,9,10,11,14,15,16,18,19,20,23,24,25,35],nutshel:9,nwalker:2,obei:[9,13,16,17,22,25,26],object:[2,4,5,8,10,12,16,21,25,28],oblig:29,obs:2,observ:[2,5,6,7,8,9,10,13,16,17,22,25,26],observatori:2,obstacl:0,obtain:[2,3,5,6,7,8,12,13,14,15,16,17,21,22,23,24,25,26],obviou:[0,3,5,9,14,23],obviouli:4,obvious:[0,2,4,5,12,13,14,21,22,23],occam:2,occupi:5,occur:[2,3,4,8,13,15,16,17,22,24,25,26],ocean:[17,26],octob:1,odd:[4,5,6,9,14,15,23,24],ode:1,odenum:1,odesi:1,odot:[14,23],off:[3,5,7,10,15,16,24,25],offend:4,offens:29,offer:[4,5,9,11,20],offic:28,offici:[29,30],offlin:29,ofil:3,ofstream:3,often:[0,2,3,4,5,6,7,8,9,11,12,13,15,16,17,20,21,22,24,25,26],ofter:[4,12,21],oint:[16,25],old:[7,14,23],ols_inv:5,ols_sk:5,ols_svd:5,omega02:[16,25],omega:[1,5,12,13,14,15,16,17,21,22,23,24,25,26],omega_0:[13,16,17,22,25,26],omega_0a:[15,24],omega_0t:[13,15,16,17,22,24,25,26],omega_c:[13,22],omega_ct:[13,22],omega_cv_i:[13,22],omega_i:[17,26],omega_t:[15,24],omega_x:[17,26],omega_xv_i:[17,26],omega_xv_z:[17,26],omega_yv_x:[17,26],omega_yv_z:[17,26],omega_z:[17,26],omega_zt:[17,26],omega_zv_i:[17,26],omega_zv_x:[17,26],omegatild:[15,24],omit:5,omnipres:[15,24],onc:[3,5,7,9,13,15,16,22,24,25,34,36],one:[0,2,3,4,6,8,9,10,11,14,15,16,17,20,23,24,25,26,34,36],onehot:7,onehot_vector:7,ones:[0,1,4,5,8,9,12,14,21,23],onli:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,34,36],onlin:[0,4,9,29],onto:[9,13,22],open:[0,2,3,4,5,7,11,12,20,21,29,30,31],oper:[0,3,4,5,7,9,10,12,14,15,21,23,24,30],operation:3,oplu:3,opportun:[0,4],oppos:[5,13,22],opposit:[7,8,13,14,16,17,22,23,25,26],oppotun:[11,20],opt:[0,4,5,7,8,9],optim:[0,1,2,6,9,10],optimis:10,option:[0,2,7,8,9,10],optmiz:7,orang:4,orbit:[2,14,23,28],order:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26],ordinari:[6,9,10,13,15,22,24],org:[1,4,7,9,10,12,21],organ:[5,12,21],ori:2,orient:[3,5,12,21,29],origin:[3,4,5,7,8,9,10,12,13,14,15,16,17,21,22,23,24,25,26],orthodox:2,orthogn:5,orthogon:[4,5,8,9,12,17,21,26],orthonorm:5,oscil:[13,14,17,22,23,26,28],oscillatori:[15,24],oslo:2,osx:[4,12,21],other:[0,2,4,5,6,8,11,13,14,15,16,17,20,22,23,24,25,26,29],otherwis:[2,4,5,6,7,14,16,23,25,29],oup:2,ouput:7,our:[0,1,2,6,8,10,11,14,16,17,20,23,25,26],ourselv:[0,2,4,5,8,9,12,13,15,16,17,21,22,24,25,26],out:[1,2,3,4,5,6,7,8,9,12,14,15,16,17,18,19,21,23,24,25,26,33,35],outcom:[2,3,5,6,7,11,17,20,26],outer:[5,7],outfilenam:3,outgo:[16,25],outlier:[2,4,5,8,9],outlin:[5,9,11,20],output:[0,4,5,6,7,8,10,12,13,21,22,34,36],output_bia:7,output_bias_gradi:7,output_weight:7,output_weights_gradi:7,outputlayer1:7,outputlayer2:7,outsid:[1,10],outward:[14,16,17,23,25,26],over:[0,3,4,5,7,11,12,13,14,15,16,20,21,22,23,24,25],overal:[7,16,25],overarch:[0,2,13,22],overcom:[7,13,22],overdetermin:5,overemphasis:2,overfit:[5,7,10],overflow:7,overhead:7,overlap:[8,9,10],overlin:[4,5,9,12,21],overst:[0,4],overtrain:[1,10],overview:[0,1,10,28],owe:0,own:[0,1,4,7,8,10,11,14,15,17,20,23,24,26,28],owner:5,oxford:2,oxid:5,p_0:[16,25],p_0b:[16,25],p_0b_:[16,25],p_2:[14,23],p_f:[16,25],p_fr:[16,25],p_hidden:1,p_i:3,p_j:3,p_n:3,p_output:1,p_x:[3,14,23],pack:4,packag:[0,1,2,3,5,7,8,9,10,15,24],pad:10,page:[2,4,31,33,34,36],pai:7,painless:4,paint:[16,25],pair:[1,3,4,5,10,13,22],panda:[1,10,14,15,16,23,24,25],panel:[2,4,12,21],paper:[7,11,20,28],paradigm:[0,4],parallel:[4,12,13,14,16,21,22,23,25],param:[1,2],paramat:1,paramet:[0,1,3,4,7,8,9,10,12,16,21,25],parameter:[0,5,13,15,22,24],parametr:[4,5],paramt:10,pari:[17,26],park:3,part:[0,3,4,5,7,9,11,12,15,16,17,20,21,24,25,26,28,30],partform:[15,24],partial:[3,5,6,7,8,9,13,14,22,23],partial_:[14,23],partial_i:[14,23],partial_r:[16,25],partial_ru:[16,25],partial_ru_:[16,25],partial_tv:[14,23],partial_x:[14,15,23,24],partial_xv:[14,15,23,24],partial_yv:[14,23],partial_z:[14,23],partial_zv:[14,23],particip:[16,25,29],particl:[1,3,4,5,10,13,14,15,16,17,22,23,24,25,26,28],particular:[0,1,2,3,4,5,7,9,10,11,12,13,15,16,20,21,22,24,25,28],particularli:[3,5,8,9,11,15,20,24],partit:7,partli:5,paslei:[34,36],pass:[1,2,3,10,15,16,24,25],passeng:0,past:3,patch:[3,5,12,21],path:[4,5,9,12,13,14,15,16,17,21,22,23,24,25,26,34,36],patient:6,patter:[1,10],pattern:[0,1,4,7,10,17,26,34,36],pauli:4,pavement:[13,22],pca:5,pde:1,pdf:[0,1,2,4,5,10,12,21,28],pearson:2,pedagog:[5,11,20],pen:[11,20],penal:5,penalti:5,pencil:[11,20,28],pend1:[13,15,22,24],pend2:[13,15,22,24],pendulum:28,penros:5,peopl:[0,5,7],per:[4,5,11,12,16,17,20,21,25,26],perambul:2,perceiv:0,percentag:[5,9,28],percentil:2,perceptron:[4,6],peregrin:[4,12,21],perfect:[4,5,7,16,25],perfectli:[2,5,13,22],perform:[1,2,3,4,8,9,10,12,13,14,15,16,17,21,22,23,24,25,26],performac:[1,10],perhap:[0,2,4,5,13,14,22,23],period:[2,7,13,16,17,22,25,26],perman:29,permiss:29,permit:2,permut:[9,14,23],perp:[16,25],perpendicular:[13,16,17,22,25,26],person:[6,29],perspect:[2,14,23],pertain:[2,12,21],pertin:[7,11,20],perturb:[16,25],pervers:2,petal:8,petersen:3,phantom:3,phase:[5,7,13,15,17,22,24,26],phasespac:[16,25],phenomena:[2,3,15,24],phi:[8,12,13,14,15,16,21,22,23,24,25],phi_a:[17,26],phi_b:[17,26],phi_k:8,philosoph:2,philosophi:[2,15,24],phone:28,phonon:[15,24],phrase:0,phy321:36,physic:[0,1,2,3,4,5,6,7,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,29],physics321:28,piazza:28,pick:[2,3,7,9,15,24],pictur:[0,4,15,24],pie:[4,12,21],piec:[2,7,9,14,16,23,25],pillow:[4,12,21],pinv:5,pioneer:2,pip3:[4,7,12,21],pip:[4,7,12,21,31],pipelin:[4,5,8],pippin:[4,12,21],pitfal:[14,23],pitt:7,pixel:[7,10],pixel_height:[7,10],pixel_width:[7,10],place:[2,4,5,8,12,16,17,21,25,26],placehold:7,plai:[0,4,5,8,10,13,14,15,22,23,24],plain:[7,8],plan:[5,28],plane:[8,12,16,17,21,25,26],planet:[16,25],planetari:[16,25],plateau:3,platform:[4,12,21],plausabl:2,plausibl:7,pleas:[9,28,30],plenti:7,plethora:[2,7],plot:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,18,19,20,21,22,23,24,25,35],plot_count:5,plot_dataset:8,plot_max:[1,10],plot_min:[1,10],plot_predict:8,plot_surfac:1,plt:[1,2,3,4,5,6,7,8,9,10,11,12,14,15,16,18,19,20,21,23,24,25,35],plu:[4,15,17,24,26],plug:[13,15,16,22,24,25],pmatrix:1,png:[2,4,5,9,12,14,15,16,21,23,24,25],point:[0,2,3,4,5,6,7,8,9,11,12,13,14,15,16,17,20,21,22,23,24,25,26],poisson:[0,2],polar:[14,15,16,17,23,24,25,26],pole:[17,26],poli:[5,8],polici:29,polit:[0,29],poly100_kernel_svm_clf:8,poly3:4,poly3_plot:4,poly_featur:8,poly_kernel_svm_clf:8,polydegre:5,polym:7,polynomi:[0,2,4,5,6,8,9,14,23],polynomial_featur:5,polynomial_svm_clf:8,polynomialfeatur:[4,5,8],polytrop:5,pool:10,pool_siz:10,poor:7,popul:[4,5],popular:[0,3,4,5,7,8,9,10,12,15,21,24],popularli:4,portion:9,pose:[0,3,9],posit:[1,2,3,5,6,7,8,9,12,13,14,15,16,17,21,22,23,24,25,26,29],possess:[17,26],possibl:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,20,21,22,23,24,30],post:[18,19,28,29,30,35],posterior:2,postpon:[5,12,21],potenti:[0,4,5,7,11,12,13,14,15,20,21,22,23,24,28],pott:7,power:[2,4,5,7,8,9,11,13,15,20,22,24,34,36],practic:[3,5,6,8,16,25],practition:[4,7,10],pre:[34,36],preced:[3,7,9],preceed:[1,10],preceq:8,precess:[17,26],precis:[0,1,2,3,4,5,9,12,14,16,21,23,25],precmess:[17,26],pred:5,predict:[0,2,4,5,6,7,8,9,12,17,21,26,34,36],predict_prob:7,predictor:[4,5,6,9],prefer:[4,7,8,9,15,24],premis:2,prepar:[2,4,12,21],preprocess:[1,4,8,10],prerequisit:[0,4],presenc:[13,15,22,24],present:[0,2,3,4,5,7,11,14,20,23],preserv:[9,10],presid:2,presidenti:2,pressur:[17,26],presum:2,pretti:[4,8,12,21],prevent:3,previou:[1,2,3,5,7,8,9,10,12,13,15,16,21,22,24,25],previous:[1,3,10],price:[1,5,10],primal:8,primari:[0,6],prime:[3,14,15,23,24],princip:[5,15,24],principl:[2,4,5,6,8,13,17,22,26],print:[1,2,3,4,5,7,8,9,10,12,14,16,21,23,25,34,36],print_funct:8,printout:[5,12,21],prior:[0,4,5],prioriti:0,privaci:0,privat:[0,4,29],privileg:[12,21],pro:28,prob:[2,3],probabilist:5,probabl:[2,4,5,6,7,10,16,25],problem:[0,2,3,4,6,9,11,12,13,15,17,20,21,22,24,26,28],problemat:2,proce:[0,4,5,8,9,15,16,24,25],procedur:[1,2,8,9,17,26],proceed:[13,22],process:[0,2,3,4,5,11,12,13,20,21,22,28,31],prod_:[2,6,7],produc:[0,1,2,3,4,5,7,9,10,11,12,17,20,21,26],product:[2,4,5,6,7,8,10,12,14,16,21,23,25],profess:5,profession:29,profound:[14,23],program:[3,4,5,7,8,10,11,12,13,15,20,21,22,24],progress:7,prohibit:5,project:[0,1,3,4,5,7,9,11,17,20,26,28,29,30,31],project_root_dir:[4,5,9,12,14,15,16,21,23,24,25],promin:7,promis:8,pronounc:[4,12,21],proof:[5,7,14,23],prop:5,prop_cycl:[18,19,35],propag:10,proper:[0,1,4,5],properli:[2,7,8,11,20,34,36],properti:[2,4,7,9,10,12,13,17,21,22,26],proport:[2,3,4,5,7,9,13,15,22,24],propos:[7,30],proposit:2,propto:[2,16,25],protect:0,proton:[4,16,25],prove:[10,17,26],provid:[1,2,3,4,5,7,8,10,11,12,13,15,16,17,20,21,22,24,25,26],proxi:7,pseudoinvers:5,pseudorandom:3,psycholog:[0,4],ptratio:5,pub:28,publish:29,pull:[16,25,28,30,31],pulsar:7,punish:[0,4,7],pure:[3,15,16,24,25],purpos:[0,4,7,11,13,15,20,22,24,34,36],push:[17,26,30,31],put:[15,16,24,25],puzzl:[13,22],pycod:[4,12,21],pyhton2:[4,12,21],pylab:[4,12,15,21,24],pyplot:[1,3,4,5,6,7,8,9,10,11,12,14,15,16,18,19,20,21,23,24,25,35],python3:[4,5,7,8,9,12,21],python:[0,1,5,7,8,9,11,13,15,20,22,24,28],pytorch:[0,4,7,12,21],qbv_x:[13,22],qbv_y:[13,22],qquad:[1,4,9,12,21],quad:[2,7],quadrat:[2,4,8,13,15,16,22,24,25],qualit:3,qualiti:[0,4,11,12,13,15,20,21,22,24],quantifi:[2,7,16,25],quantit:[0,5],quantiti:[1,2,3,4,5,6,7,9,13,14,15,17,22,23,24,26],quantum:[0,1,7,10,14,15,23,24],quartil:[5,9],question:[0,2,5,7,9,12,13,15,21,22,24,28],quick:[3,11,20],quickli:[9,10,14,15,16,17,23,24,25,26],quit:[2,5,7],quitecompl:[16,25],quot:3,r2_score:[4,5],r2score:4,r_1:[15,24],r_1t:[15,24],r_2:[15,16,24,25],r_2t:[15,24],r_h:[14,23],r_i:[14,23],rab:[14,16,23,25],race:29,rad:5,radial:[5,7,8,14,16,17,23,25,26],radialeqofmot:[16,25],radialeqofmotion2:[16,25],radialgvv:[16,25],radialhovv:[16,25],radii:[16,25],radio:[15,24],radioact:3,radiu:[5,9,13,16,17,22,25,26],rais:5,ramsai:[34,36],ran1:3,ran2:3,ran3:3,rand:[1,2,3,4,5,10,12,21],rand_max:3,randint:5,randn:[1,4,5,7,9,12,18,19,21,35],random:[0,1,2,4,5,7,8,10,12,16,18,19,21,25,35],random_devic:3,random_indic:[7,10],random_st:[5,8,9],randomli:[3,5,7],randomnumbergener:3,rang:[1,2,3,4,5,6,7,9,10,11,12,13,14,15,16,18,19,20,21,22,23,24,25,35],rangl:[2,3,5,9],rangle_x:3,rank:[5,10],raphson:[7,8],rapidli:[0,4,17,26],rare:[13,22],rate:[1,5,7,8,10,14,16,17,23,25,26],rather:[0,1,2,3,4,5,6,7,8,9,10,13,14,15,16,17,22,23,24,25,26],ratio:[6,9,15,16,24,25],rational:[2,4],ravel:[5,8,9],raw:[3,10],rawdata:[12,21],razor:2,rbf:[7,8,9],rbf_kernel_svm_clf:8,rbf_pca:9,rcond:5,rcparam:[3,4,7,8,10,12,15,18,19,21,24,35],rdotdot:[16,25],rdr:[15,24],reach:[1,3,5,7,9,10,13,14,16,22,23,25],reaction:[13,14,22,23],read:[0,1,2,3,5,7,8,10,11,12,13,14,15,20,21,22,23,24,28],read_csv:5,read_fwf:[4,5],reader:[0,3,4,12,21],readi:[4,7,8,9,11,12,20,21,30],readili:7,real:[2,5,6,7,9,11,12,15,16,17,20,21,24,25,26],realist:[11,20],realiti:[3,17,26],realiz:[2,7,15,16,24,25],realli:[2,4,7,13,22],realm:2,reason:[0,1,2,5,7,10,11,17,20,26,29],rebenstock:28,recal:[3,4,5,7,9,12,17,21,26],recalcul:3,recast:[13,15,22,24],receiv:[3,7,10,15,24],recent:[0,2,4,5],recept:[7,10],receptive_field:10,recip:[4,5,6,12,21],recogn:[1,2,4,10,16,25,31],recognit:[0,4,7,10],recommend:[1,3,4,5,8,10,12,14,21,23,28,31],reconstruct:9,record:[13,22],recov:[12,21],recreat:3,rectangl:5,rectifi:[7,10],rectilinear:[17,26],recur:[0,4],recurs:[4,12,21],recycl:3,red:[1,4,5,8,10],redefin:[2,5],reduc:[2,4,7,10,13,15,16,22,24,25],reduce_mean:7,reduct:[3,4,5],refactor:[11,20],refer:[0,1,4,5,7,9,10,11,13,15,16,17,20,22,24,25,26,28,34,36],referenc:1,refin:7,refit:5,reflect:[0,1,2,3,4,7,10,11,20],reformul:[13,22],reg:9,regard:[2,7,29],regardless:[7,16,25,29],region:[1,2,7,10,11,17,20,26],regist:3,regr_1:4,regr_2:4,regr_3:4,regress:[0,2,7,8],regressor:[5,6],regular:[1,6,17,26,34,36],regularizer_loss:7,regularizer_loss_fc1:7,regularizer_loss_fc2:7,regularizer_loss_out:7,reinforc:[0,4,8],reject:29,rel:[0,1,2,3,4,5,6,7,10,11,13,14,15,17,20,22,23,24,26,28,34,36],relat:[0,1,2,3,4,5,7,9,10,12,13,14,15,16,17,21,22,23,24,25,26,28],relationship:[0,1,4,5,9,10,17,26],relatist:[17,26],relativeerror:[5,11,20],relativist:[13,15,22,24],releas:[2,4,7,12,21,30],relev:[2,3,4,5,9,11,12,20,21],reli:[0,4,5,8,9,13,22],reliabl:[2,3,6,14,23],religion:29,relu:[1,10],remain:[1,2,3,5,7,10,13,15,22,24],remaind:[2,3],reman:1,remark:[7,17,26],rememb:[4,8,12,15,21,24,30],remind:[0,3,5,9,11,13,15,16,17,20,22,24,25,26],remov:[1,5,10,29,31],render:[4,5,9,12,21,31,34,36],reorder:6,reorgan:[4,12,21],repeat:[1,2,3,4,5,7,9,10,12,13,14,15,16,17,21,22,23,24,25,26],repeated:0,repeatedli:[3,5,15,24],repel:[16,25],repercuss:29,repetit:[2,5],rephras:[13,22],replac:[1,2,4,5,7,10,11,12,14,15,16,20,21,23,24,25,28],replica:5,repo:[30,31],report:[2,11,20,29],repositori:[0,31],repres:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,29],represent:[0,3,5,7,9,10,15,24,29],reproduc:[0,2,3,4,7,11,16,18,19,20,25,28,30,35],repuls:[4,16,25],request:[0,4,30,31],requir:[4,5,7,8,9,10,11,12,13,15,16,20,21,22,24,25,31],res1:1,res2:1,res3:1,res:1,res_analyt:1,res_analytical1:1,res_analytical2:1,res_analytical3:1,resampl:[0,3],rescal:[5,7,9],research:[0,4],resembl:[3,5,17,26],reserv:[3,5,7],reset:3,reshap:[1,2,4,5,7,8,10,12,21],residenti:5,residu:5,resist:[14,15,23,24,28],reson:28,respect:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,15,17,20,21,22,24,26,29],respond:[7,29],respons:[5,6,7,13,17,22,26],rest:[5,9,12,13,15,16,17,21,22,24,25,26,34,36],restat:[5,7],restor:[13,22],restrict:[0,7,17,26],result:[0,1,2,3,4,6,7,8,9,10,11,12,14,15,16,17,20,21,23,24,25,26,28,34,36],ret:5,retail:5,retain:[5,14,23],rethink:5,return_sequ:[1,10],reus:[10,14,15,23,24],reveal:[0,7],revers:[7,16,25],revert:[12,21],review:29,revis:[7,12,21],revisit:[15,24],reward:[0,4],rework:7,rewrit:[3,4,6,7,8,12,13,14,15,16,17,21,22,23,24,25,26],rewritten:[1,3,5,8,16,25],rgb:10,rho:[5,16,17,25,26],rho_m:[13,22],rho_ma:[13,22],rhs:[9,12,21],rich:[0,4],ridg:[4,6,9],ridge_sk:5,right:[1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,29],right_sid:1,rightarrow:[2,3,5,7,8,9,12,13,14,15,16,17,21,22,23,24,25,26],rigid:[17,26],rigor:[0,4,17,26],ring:[5,16,25],rise:[5,17,26],risk:4,river:5,rk2:[15,24],rk4:[15,24],rmin:[16,25],rminofa:[16,25],rmse:5,rmsprop:[1,10],rnn1:[1,10],rnn2:[1,10],rnn:7,rnn_2layer:[1,10],rnn_input:[1,10],rnn_output:[1,10],rnn_train:[1,10],rntrick1:3,rntrick2:3,rntrick3:3,rntrick4:3,road:0,robert:[34,36],robust:4,robustscal:[5,9],rocket:[14,23],role:[0,1,4,5,8,14,23],rolenam:[34,36],roll:[5,15,24],room:[0,4,5,28],root:[0,2,3,4,5,15,24],rot:[4,12,21],rotat:[8,12,13,14,16,21,22,23,25,28],roughli:[7,10,16,25],round:[5,9,17,26],routin:[4,12,21],row:[1,2,4,5,7,9,12,21],rp_f:[16,25],rrr:5,rtotheta:[16,25],rule:[2,5,11,12,16,17,20,21,25,26,28],run:[0,1,2,4,5,7,8,9,11,12,13,16,20,21,22,25,31,34,36],run_mcmc:2,rung:28,runner:[12,21],runtim:[5,7],runtimewarn:7,rust:4,ruthtraj:[16,25],rvert:7,rvert_2:7,rvs:2,rwidth:5,s_0:[17,26],s_1:5,s_h:[14,23],s_i:[5,6],s_j:5,s_k:5,safe:3,sai:[0,1,2,3,4,5,6,7,8,9,10,12,13,16,17,21,22,25,26],said:5,sake:[4,5,6,9],sale:4,sam:[4,12,21],same:[1,2,3,4,7,8,9,10,12,13,14,15,16,17,21,22,23,24,25,26,34,36],sampl:[0,1,2,4,5,6,7,8,10,16,17,18,19,25,26,33,35],sampleexptvari:3,sampler:[0,2],sampper:2,samwis:[4,12,21],sanitize_sequ:5,satisfactori:4,satisfi:[1,3,5,7,8,13,15,16,22,24,25],satur:[5,7],saturn:2,save:[1,4,5,9,10,11,12,14,15,16,20,21,23,24,25],save_fig:[4,5,9,12,14,15,16,21,23,24,25],savefig:[3,4,5,9,12,14,15,16,21,23,24,25],savetxt:[1,10],saw:[14,15,23,24],scalar:[1,5],scale:[2,4,5,6,7,8,9,11,12,16,20,21,25,28],scaler:[5,8,9],scan:6,scatt:[16,25],scattangl:[16,25],scatter:[4,5,8,12,21,28],scenario:[2,5],scene:9,schemat:2,scheme:[7,12,21],scholar:2,school:2,schrage:3,sci:28,scienc:[0,2,3,4,7,10,11,12,20,21,28],scientif:[0,2,4,11,12,20,21,28],scientist:[0,4],scikit:[0,8,10,12,21],scikitlearn:4,scipi:[4,5,12,15,21,24],scl:5,scope:[7,30],score:[4,5,7,9,10,28],scores_kfold:5,sea:[17,26],seaborn:[4,5,7,9,10,12,15,21,24],seamless:[4,12,21],search:[4,7,10,13,16,22,25],seat:[17,26],sec:5,second:[0,1,2,3,4,5,6,7,8,9,10,12,14,15,16,17,21,23,24,25,26,28],secondeigvector:9,secondli:[7,15,24],section:[1,2,3,10,12,13,15,17,21,22,24,26,27,28,32],sector:[0,4],secur:0,see:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,31,34,35,36],seed:[1,2,3,4,5,7,8,9,10,12,18,19,21,35],seek:[1,2,7,8],seem:[2,7,10,15,16,24,25],seemingli:4,seen:[0,3,4,5,7,9,10,11,13,16,17,20,22,25,26],seismic:5,seldomli:[4,11,20],select:[4,5,7,8,9,12,21],self:[0,3,5,7,11,20],sell:[1,10],semi:8,semilogx:5,send:[7,28,30],sens:[0,2,5,8,13,22],sensibl:[2,10],sensit:[4,5,9],sensor:0,sent:[1,28],sentenc:[1,7,10],separ:[1,3,4,5,7,8,10,12,13,15,16,21,22,24,25,29],septemb:5,sequenc:[1,3,4,6,7,10,12,21],sequenti:[1,3,7,10],seri:[0,1,2,4,5,7,9,10,12,21,28],serif:[3,4,12,15,21,24],seriou:0,serv:[0,1,4,6,7,10,34,36],sess:7,session:[7,28],set:[0,2,3,4,6,9,11,12,14,15,16,17,20,21,23,24,25,26,29,30],set_:5,set_label:5,set_tick:8,set_titl:[1,4,6,7,9,10],set_xlabel:[1,2,4,5,6,7,9,10,12,14,15,16,21,23,24,25],set_xlim:[6,7,12,14,15,21,23,24],set_ylabel:[1,2,4,5,7,9,10,12,14,15,16,21,23,24,25],set_ylim:[6,7],set_ytick:9,set_yticklabel:5,setiosflag:3,setminu:5,setosa:8,setosa_or_versicolor:8,setp:5,setprecis:3,setup:[2,4,5,7,8,12,17,21,26,30],setw:3,sever:[0,2,3,4,5,6,7,8,9,10,11,12,14,15,20,21,23,24,28],sexist:0,sexual:29,sgd:[7,10],sgd_clf:8,sgdclassifi:8,shade:2,shape:[1,2,4,5,7,8,9,10,11,12,16,17,20,21,25,26],share:[0,2,4,7,10,12,21],sharei:2,sharex:2,she:6,shift:[3,7],ship:10,shire:[4,12,21],shock:[15,24],shortcom:2,shorten:[1,10],shorter:3,shortest:2,shorthand:[2,4,12,14,21,23],shortli:[4,9,12,13,21,22],should:[0,1,2,4,5,8,10,12,13,14,15,16,17,21,22,23,24,25,26,28,31],show:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,29],shown:[1,2,3,7,8,9,10,13,14,22,23],showpoint:3,shrink:[5,8,10],shrinkag:5,shrunk:9,shuffl:[5,7],side:[1,2,5,7,8,12,13,16,17,21,22,25,26],sigh:[4,12,21],sigma0:3,sigma1:3,sigma2:3,sigma:[2,3,4,5,6,7,9,16,25],sigma_1:5,sigma_2:5,sigma_:[2,3,4,5,16,25],sigma_fn:[6,7],sigma_i:[4,5],sigma_j:5,sigma_m:3,sigma_n:[3,9],sigma_x:3,sigmoid:[1,6,8,10],sign:[1,2,3,6,7,8,13,16,17,18,19,22,25,26,28,35],signal:[2,7,15,24],signific:[7,17,26],significantli:[3,7,13,15,22,24],sim:[3,5,16,25],similar:[0,1,4,5,6,8,9,10,11,15,16,20,24,25,28,34,36],similarli:[3,4,5,7,8,9,12,15,16,17,21,24,25,26],simpl:[0,6,11,13,15,16,17,20,22,24,25,26],simple_rnn:1,simpler:[0,4,7,11,13,14,20,22,23],simplernn:[1,10],simplest:[0,4,5,7,10,12,14,15,17,21,23,24,26,34,36],simpli:[1,2,3,4,5,7,8,9,11,12,13,14,15,16,17,20,21,22,23,24,25,26],simplic:[1,5,6,7,8,9,12,13,16,21,22,25],simplicti:[15,24],simplifi:[0,4,5,12,16,21,25],simplist:3,simpson:28,simul:[0,2,3,5,13,22],simultan:5,sin:[1,4,5,7,10,12,13,14,15,16,17,21,22,23,24,25,26],sinc:[0,1,2,3,4,5,6,7,8,9,11,12,13,14,17,20,21,22,23,26],sine:[7,15,24],singl:[1,3,4,6,7,8,10,12,14,15,16,17,21,23,24,25,26,28],singlephotoncount_fig_1:2,singlephotoncount_fig_2:2,singular:0,sit:[15,17,24,26],site:[0,4,5,7,8,9],situat:[0,2,4,5,6,11,15,16,17,20,24,25,26],sivia:2,six:3,size:[1,3,4,7,8,9,10,12,13,14,15,16,21,22,23,24,25,29],sketch:[13,16,22,25],skill:[0,2,4,11,20,28],skip:9,skirt:2,skl:[4,5,9],sklearn:[4,5,7,8,9,10],sky:2,slack:8,slice:[1,4,12,21],slide:[3,5,10,28],slight:[5,34,36],slightli:[1,3,5,6,7,13,14,17,22,23,26],slope:[7,8,9,12,21],sloppi:[13,22],slow:[1,5,8,9,13,22],slower:[4,5,12,17,21,26],slowli:7,slp:7,small:[1,2,3,4,5,7,8,9,10,13,14,15,16,17,22,23,24,25,26,28,33,34,36],smaller:[1,3,4,5,7,8,9,14,16,23,25],smallest:[1,4,10,12,21],smart:5,smooth:5,sne:9,sneak:5,sns:[4,5,7,9,10],soar:5,social:[0,4,29],societ:0,societi:[0,11,20],sofist:0,soft:[6,7],soften:8,softmax:[6,10],softmax_cross_entropy_with_logits_v2:7,softmax_loss:7,softwar:[0,8,11,20,28],sol:8,sole:[0,4,5],solid:[0,4,6,15,16,24,25],solut:[2,3,5,7,8,9,11,13,14,15,17,20,22,23,24,26,28],soluton:1,solv:[0,2,4,5,7,9,10,11,14,16,17,20,23,25,26,28],solve_expdec:1,solve_ode_deep_neural_network:1,solve_ode_neural_network:1,solve_pde_deep_neural_network:1,solveod:1,solveode_popul:1,solver:[1,8,9,13,22],some:[0,1,3,6,7,8,9,10,11,13,14,15,16,17,18,19,20,22,23,24,25,26,28,34,35,36],someth:[0,2,3,7,9,13,22],sometim:[2,5,7,9,16,25],somewher:[16,25],soon:[5,12,15,17,21,24,26],sophist:[0,4],sort:[3,5,9],sound:[0,11,15,20,24],sourc:[0,2,3,4,5,7,11,12,13,15,16,20,21,22,24,25,31],south:[17,26],southern:[17,26],sovl:[14,23],space:[1,3,5,7,9,10,13,15,17,22,24,26,28,29],spacetim:[17,26],span:[0,4,5,9,12,21,34,36],spare:7,spars:[4,5,10],sparse_mtx:4,sparsecategoricalcrossentropi:10,spartan:[16,25],spatial:[1,7,10,12,15,21,24],speak:[2,3],speci:[16,25],special:[2,3,4,5,6,7,11,12,13,17,20,21,22,26],specif:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,29,34,36],specifi:[0,2,3,4,5,6,9,12,13,17,21,22,26],specifici:4,spectacular:10,spectral:2,speech:[0,1,4,7,10],speed:[1,7,13,14,22,23],spell:[14,23],spend:3,sphere:[5,9,16,25],spheric:[16,25],sphinx:[34,36],spin:[5,14,23],spite:[0,4],spline:8,split:[0,1,3,4,7,8,9,10,14,23],spontan:[3,14,23],sprai:[16,25],spread:[2,3,5,9,16,25],spring2020:28,spring:[13,15,16,22,24,25,36],springer:28,springforc:[15,24],spuriou:[17,26],sqrsignal:[15,24],sqrt:[2,3,5,8,9,12,13,14,15,16,17,21,22,23,24,25,26],squar:[0,1,2,3,4,6,7,8,9,10,12,13,15,16,21,22,24,25],squash:7,srand:3,stabil:[2,13,15,22,24],stabl:[1,4,5,9,10,14,16,23,25],stack:[5,10],stadium:[16,25],stage:[0,13,15,22,24],stai:[1,4,5,9,10,13,14,15,16,17,22,23,24,25,26],stand:[0,4,5,7,12,17,21,26,34,36],standar:9,standard:[0,1,2,4,5,6,7,8,10,12,13,16,17,21,22,25,26],standardscal:[5,8,9],standpoint:[11,20],stanford:[1,10],start:[0,1,2,3,5,7,8,9,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,28,33],starting_guess:2,startpoint:3,stat:[2,5],state:[0,1,2,3,4,6,7,8,9,10,12,13,14,15,16,17,18,19,21,22,23,24,25,26,35,36],statement:[0,2,4,9,12,21],stati:2,station:[15,24],statis:5,statist:[0,4,6,7,9,12,13,21,22],statu:[5,6,9],std:[2,3,4,5,12,21],stddev:7,stdev:3,steadi:[15,24],step:[1,2,3,4,6,7,10,12,15,16,17,21,24,25,26,30],step_fn:[6,7],stepfil:2,stepsiz:[11,20],stereo:10,sthetover2:[16,25],still:[1,2,3,5,9,10,13,16,22,25],stimuli:7,stochast:[0,5,7,8,9],stock:[0,1,10],stoke:7,stone:[4,6],stop:[1,3,7,9,10,12,13,21,22],storag:5,store:[1,3,4,7,9,10,12,21,34,36],str:[1,7,10],straight:[0,4,5,8,13,17,22,26],straightforward:[1,2,5,8],strang:2,strategi:[0,2,7,13,14,16,22,23,25],stratifi:5,stream:7,strength:[2,4,5,15,24],stress:2,stretch:[9,13,16,22,25],strict:8,strictli:[2,8,13,22],strike:[5,16,25],string:[3,7],stroke:6,strong:[3,7,15,16,24,25],strongli:[0,4,5,8,10,12,16,21,25],stronli:5,structur:[0,1,4,5,7,10,11,12,20,21,28,33,34,36],stuck:7,student:[0,2,4,11,20],studi:[0,2,4,5,7,8,9,11,12,13,16,17,20,21,22,25,26,28],style:[4,12,15,21,24],sub:7,subdivid:[0,4,12,13,14,21,22,23],subfield:[0,4],subinterv:[14,23],subject:[2,3,5,8],subplot:[1,2,4,5,7,8,9,10,12,14,15,16,18,19,21,23,24,25,35],subplots_adjust:[3,8],subprogram:[4,12,21],subroutin:4,subscript:[7,12,14,17,21,23,26],subsect:[15,24],subsequ:[2,3,5,7],subset:[4,5,7,12,21],subsidiari:2,subspac:[5,8,9],substep:9,substitut:[5,7,13,14,15,16,17,22,23,24,25,26],subtend:[16,25],subtl:7,subtleti:2,subtract:[1,2,3,5,9,10],succeed:4,success:[3,6,10],sucess:3,sudden:[15,24],suddenli:[17,26],sudo:[4,12,21],suffer:[1,5,7],suffic:[12,21],suffici:[5,7,8,9,15,16,17,24,25,26],suggest:7,suit:[7,8,15,24],suitabl:[3,5,9],sum:[1,2,3,4,6,7,8,9,13,14,15,16,22,23,24,25],sum_:[1,2,3,4,5,6,7,8,9,13,14,15,16,22,23,24,25],sum_i:[1,2,5,8,9,14,15,17,23,24,26],sum_ia_i:[17,26],sum_im_i:[14,23],sum_im_ix_i:[14,23],sum_j:5,sum_k:[4,5,7,8,12,21],sum_n:[15,24],sum_nx_:[15,24],summar:[2,5],summari:[1,7,10,28],summat:5,sun:[13,16,22,25,28],superconduct:2,superfici:10,superscript:7,supervis:[0,4,5,6],supplement:[6,17,26],support:[0,5,7],suppos:[0,4,5,6,7,8,9,12,13,17,21,22,26],supposedli:0,sure:[1,2,5,7,10,18,19,35],surfac:[4,13,14,16,17,22,23,25,26],surpass:5,surpris:4,surprisingli:[2,16,25],surround:[10,16,25],surv:0,survei:[0,4],svc:[8,9],svd:9,svdinv:5,svm:[8,9],svm_clf:8,svr:9,sweden:2,sweep:[13,22],swift:0,swing:[15,24],syllog:2,symbol:[2,3,4,7,9,11,12,13,14,20,21,22,23,28],symmetr:[0,2,4,5,7,8,9,12,16,17,21,25,26],symmetri:[2,5,15,24],sympi:[4,11,12,14,20,21,23],symplect:[14,23],synonim:3,syntax:[4,7,9,12,21,34,36],syntaxerror:[4,7,8,9,12,21],system:[0,1,2,4,5,6,7,10,11,12,15,16,20,21,24,25,28,30],systemat:[2,3,5],t_0:[1,12,21],t_f:[12,13,21,22],t_h:[14,23],t_i:[1,7,9,12,13,14,15,21,22,23,24],t_j:7,t_n:[14,23],t_x:[17,26],t_y:[17,26],tab:[15,24,31],taberror:[15,24],tabl:[3,4,12,21],tabul:4,tabular:[4,12,21],tackl:2,tag:[1,2,3,5,6,7,13,14,15,16,17,22,23,24,25,26,30],taht:4,tail:[2,3],tailor:[1,4,8,9],taiwan:5,take:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,29],taken:[4,5,7,10,12,21],takeoff:[17,26],tan:[15,24],tangent:[1,7,10,17,26],tanh:[1,6,7,8,10,12,21],target:[4,5,7,8,9,10,16,25],task:[0,2,4,5,7,9,10],tau:[3,14,15,23,24],tau_z:[14,23],taught:[0,2,10,11,20],tax:5,taxpay:0,taylor2:28,taylor:[1,2,12,13,14,15,16,21,22,23,24,25,28],tba:28,tdt:[12,21],teach:[11,20],team:[7,29],teaser:4,techniqu:[0,3,4,5,7,8,11,12,13,14,20,21,22,23],technolog:[0,2,4,7],tediou:[11,16,20,25],telescop:2,tell:[1,3,5,9,10,13,14,15,22,23,24],temperatur:5,templat:31,tempor:[15,24],temporari:29,temporarili:29,ten:[4,12,21],tend:[2,5,7,8,10,13,16,17,22,25,26],tendenc:4,tension:[5,17,26],tensor:10,tensorboard:7,tensorflow:[0,1,4,8,12,21],term1:[5,9],term2:[5,9],term3:[5,9],term4:[5,9],term:[1,2,3,4,5,6,8,9,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,30],termin:[5,13,22],test:[0,1,2,3,4,8,9,10,11,13,16,20,22,25,31],test_acc:10,test_accuraci:[7,10],test_error:5,test_imag:10,test_ind:5,test_label:10,test_loss:[7,10],test_pr:7,test_predict:7,test_rnn:[1,10],test_siz:[5,7,9,10],testerror:5,testi:[1,10],testpredict:[1,10],testx:[1,10],tex:[18,19,35],text:[1,2,3,4,5,7,8,9,10,12,15,21,24,28,34,36],textbook:[2,13,22],tfinal:[12,14,15,16,21,23,24,25],than:[1,2,3,4,5,6,7,9,10,12,13,15,16,17,21,22,24,25,26],theano:[4,7,12,21],thei:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,15,16,17,20,21,22,24,25,26,28,29,30,34,36],them:[0,1,2,4,7,8,9,10,11,12,15,17,20,21,24,26],theme:4,themselv:[3,4],thenc:5,theorem:[1,5,14,23,28],theoret:[5,13,22],theori:[0,4,7,8,13,15,22,24],thereaft:[4,5,7,9,12,15,17,21,24,26],therebi:[0,3,4,6,9,12,15,17,21,24,26],therefor:[1,2,3,4,5,6,7,8,9,10,15,16,24,25],therein:9,thereof:[0,4,5],theta:[3,5,7,13,14,15,16,17,22,23,24,25,26],theta_0:[13,16,22,25],theta_:[7,16,25],theta_i:7,theta_k:3,thi:[0,1,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,29,30,31,32,33,34,35,36],thick:[16,25],thin:[16,25],thing:[2,3,5,7,9],think:[0,2,3,5,7,10,11,13,15,16,17,20,22,24,25,26,28],third:[0,4,5,10,12,14,15,16,17,21,23,24,25,26],thirti:9,those:[2,4,5,8,9,12,13,14,15,16,17,21,22,23,24,25,26,34,36],though:[0,1,2,3,7,13,15,16,22,24,25],thought:[2,3,5,16,17,25,26],thousand:[0,4,5,7,9],threaten:29,three:[0,2,4,5,7,8,10,12,14,15,17,21,23,24,26],threshold:[7,9,10],through:[0,1,2,3,4,5,7,8,9,10,11,12,13,14,16,17,20,21,22,23,25,26,28,30],throughout:[0,2,3,4,5,12,21],thrown:[13,22],thu:[0,1,3,4,5,6,7,8,9,12,13,14,15,16,17,21,22,23,24,25,26,28],thumb:5,thursdai:[1,28],tic:2,tick_param:5,ticker:3,tidal:[17,26],tide:[16,25],tight_layout:[9,12,14,15,16,21,23,24,25],tightli:9,tild:[3,4,5,9,15,24],till:[1,5,6,7,8,9,10,12,13,17,21,22,26],time:[1,2,3,4,5,6,7,8,9,10,11,13,14,15,16,17,20,22,23,24,25,26,28,34,36],timefunct:3,timeit:[1,10],timer:[1,10],tiniti:[12,21],tip:[10,27,32],tire:[13,22],titl:[1,3,4,5,7,8,10],to_categor:[1,7,10],to_categorical_numpi:7,to_numer:[4,5],to_str:3,todai:[0,2],togeth:[2,4,5,8,9,16,17,25,26],toi:2,toler:[1,13,22],tolist:[1,10],tomographi:7,too:[1,2,3,5,9,13,22],took:[4,8,12,21],tool:[0,2,3,4,5,7,9,10,11,12,20,21,34,36],toolbox:8,top:[2,4,5,11,12,17,20,21,26],topic:[0,4,5,6,8,11,20,28],topolog:[7,10],torqu:[13,14,15,22,23,24],toss:2,tot:[16,25],total:[1,3,5,6,7,8,9,10,13,14,15,16,22,23,24,25,28],totaldimens:9,totalvari:3,tout:0,toward:[1,6,7,15,16,17,24,25,26,29],town:5,tqdm:5,traceback:[2,5],track:[7,10,12,16,21,25],tract:5,tractabl:[0,5,9],traction:0,trade:5,tradeoff:[0,2],tradit:[0,1,4,5,7,10],tradition:[11,20],train:[0,4,8,9,11,13,17,20,22,26],train_accuraci:[4,7,10],train_end:7,train_error:5,train_imag:10,train_ind:5,train_label:10,train_loss:7,train_pr:7,train_siz:[7,10],train_test_split:[4,5,7,9,10],train_test_split_numpi:7,trainabl:[1,7],traini:[1,10],trainingerror:5,trainpredict:[1,10],trainscor:[1,10],trainx:[1,10],trait:[0,4],trajectori:[1,10,13,14,15,16,22,23,24,25],transax:2,transcendent:[13,22],transform:[2,5,6,7,8,9,16,25,28],transit:[5,7],translat:[1,7,10,14,15,23,24],translation:[14,23],transpos:[5,7,9],transvers:[16,25],trapez1:[14,23],trapez:[11,14,20,23],trapezoid:[11,20,28],trapoezoid:[14,23],trapz:2,travel:[13,16,22,25],treat:[3,5,7,10,15,16,17,24,25,26],tree:[0,7,28],trend:3,tri:[1,13,22],trial:[0,2,3,4,5],triangular:[4,12,21],trick:[3,8,9,10,16,17,25,26],trickier:[3,12,21],tridiagon:[4,12,21],trivial:[3,5,7,9,16,25],troll:29,troubl:[5,7,8,9],troubleshoot:30,truck:10,true_divid:7,true_fun:5,truli:2,truncat:[12,15,21,24],truncated_norm:7,trust:[13,14,22,23],truth:[0,2],tucker:8,tumor:[6,9],tumour:9,tune:[1,4,10,12,15,21,24],turn:[0,2,3,4,5,7,8,9,11,13,14,15,17,20,22,23,24,26],tutori:[2,7],tveito:1,tweak:[3,7],twice:[12,16,21,25],twist:9,twister:3,two:[0,1,2,3,4,5,7,9,10,12,14,15,17,21,23,24,26,28,34,36],twoard:[17,26],txt:31,type:[0,3,5,8,12,13,14,15,21,22,23,24,28],typeset:[11,20],typic:[0,1,3,4,5,6,7,10,13,14,15,16,22,23,24,25],u_i:7,ubuntu:[4,12,21],uci:5,ugli:[15,24],uio:1,unaccept:29,unari:[4,12,21],unbalanc:5,unbias:[3,4,5],unbound:[16,25],uncertain:2,uncertainti:[2,5,13,22],uncertitud:3,unchang:[7,10,14,23],uncov:7,undamp:[15,24],undefin:5,under:[2,4,5,7,12,13,14,16,21,22,23,25],underdetermin:5,underfit:[5,7],undergo:[11,13,16,20,22,25],undergradu:0,underli:[0,2,3,4,7,11,20],understand:[0,2,4,7,10,11,13,20,22,28],understood:[8,13,16,22,25],undesir:8,undetermin:8,undriven:[13,15,22,24],unemploy:2,unexpect:[3,5],unexpected:3,unfair:2,unfortun:[7,8,13,22],unicode_liter:8,unifi:2,uniform:[0,2,4,5,7,9,13,22],uniform_real_distribut:3,uniformli:[3,16,17,25,26],unifrompdf:3,union:5,uniqu:[0,1,4,5,11,20],unit:[1,2,3,4,5,7,10,11,13,14,15,17,20,22,23,24,26],unitari:[4,5,12,21],unitarili:[4,12,21],uniti:[3,15,24],univ:28,univari:3,univers:[0,1,2,10,36],unix:7,unknow:5,unknown:[1,5,7,8,9,10,15,24],unknowwn:7,unlabel:7,unless:[4,5,9,13,14,15,17,22,23,24,26],unlik:[3,7,8,10],unlimit:[14,23],unnecessarili:2,unord:10,unravel:7,unrol:[9,10],unscatt:[16,25],unseen:6,unstabl:[7,16,25],unsupervis:[0,4,7],unsymmetr:[4,12,21],until:[1,3,7,10,15,24],unusu:7,unwant:2,unwelcom:29,updat:[1,2,5,7,9,12,14,15,16,21,23,24,25],upgrad:[13,22],upon:[0,7,9,13,17,22,26],upper:[4,5,8,12,14,21,23],uppercas:[3,4,12,21],ups:4,upward:[13,17,22,26],usag:[0,3,4,5,8,12,21],usain:[13,22],uscibook:28,usd10000:5,usd:5,use:[0,1,2,4,5,6,8,9,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,28,29,30,34,36],use_bia:[1,10],usecol:[4,5],used:[0,1,2,3,4,5,6,7,8,9,11,12,13,14,15,16,17,20,21,22,23,24,25,26,28,34,36],useful:[0,1,2,3,4,6,7,9,10,12,13,14,15,16,17,21,22,23,24,25,26,28],useless:7,user:[1,4,6,7,8,9,10,11,12,13,20,21,22],uses:[1,3,4,5,7,9,10,12,14,15,16,21,23,24,25,34,36],usetex:3,using:[0,2,5,8,9,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,28,29,30,31],usr:3,usual:[1,4,6,7,10,13,16,17,22,25,26],util:[1,4,5,7,10],utliz:[14,23],utmost:0,v_0:[9,12,13,14,15,21,22,23,24],v_1:[14,23],v_e:[14,23],v_i:[12,13,14,21,22,23],v_jb_k:[13,22],v_n:[14,23],v_t:[12,13,21,22],v_x:[13,14,17,22,23,26],v_xf_x:[14,23],v_y:[13,14,22,23],v_yf_i:[14,23],v_z:[13,14,17,22,23,26],v_zf_z:[14,23],v_zt:[13,22],vagu:2,val_accuraci:10,val_loss:[1,10],vale:1,valid:[0,1,2,3,7,10,11,13,20,22,34,36],validation_data:10,validation_split:[1,10],valu:[0,1,2,4,6,7,8,10,11,12,13,14,15,16,20,21,22,23,24,25],valy:[1,10],van:5,vandenbergh:8,vandermond:5,vanderpla:2,vanilla:9,vanish:[3,7],var_x:3,varabl:8,varepsilon:5,varepsilon_:5,varepsilon_i:5,vari:[5,7,10,12,17,21,26],variabl:[1,2,4,5,6,7,8,9,12,14,16,17,21,23,25,26,28],varianc:[0,2,4,6,7,9],variance_i:[5,9],variance_x:[5,9],variant:[4,5,7,8,9,11,12,20,21],variat:[9,14,23,28,34,36],varieti:[0,2,4,7,12,21],variou:[0,2,3,4,6,7,8,9,11,12,14,15,17,20,21,23,24,26,28],varphi:2,vartempvec:3,varvec:3,varydimens:[1,10],vastli:10,vaverag:[12,21],vdot:1,vdt:[13,22],vec:[3,5],vecto:[14,23],vector:[1,6,10,13,14,16,17,22,23,25,26,28],vehicl:[17,26],veloc:[13,15,16,17,22,24,25,26,28],velocityverlet:[15,24],ventur:[0,2,4,8,11,12,14,20,21,23],verbos:[1,7,10],veri:[0,1,2,3,4,5,7,8,9,10,12,13,14,15,17,21,22,23,24,26,28,34,36],verif:[11,20,28],verifi:[4,9,11,12,13,15,20,21,22,24],verlet:[15,16,24,25,28],versa:[14,23],versatil:[4,8,11,12,20,21],versicolor:8,version:[0,3,4,12,15,16,21,24,25,29,30,31],versu:[7,16,25],vert:[4,5,6,7,8,9,12,21],vert_1:5,vert_2:[5,9],vert_:[14,23],vertic:5,via:[0,2,3,4,5,7,8,9,11,12,13,14,15,20,21,22,23,24,29],vibrat:[16,25],vice:[14,23],video:[1,7,28],view:[0,2,3,4,7,11,12,14,17,20,21,23,26,28],viewpoint:29,violat:8,viridi:[1,4,7,10],virtual:[7,31],virtualenv:30,viru:28,viscos:[13,15,22,24],viscou:[13,15,22,24],vision:[0,4,10],visual:[0,2,4,5,9,15,24],viz:[3,5,8],vline:2,vmax:5,vmc:3,vmin:5,volcano:[17,26],voltag:[16,25],volum:[4,13,16,22,25],volunt:30,vstack:[3,4,5,9],w_1:8,w_1x_1:8,w_1x_:8,w_2:8,w_2x_2:8,w_2x_:8,w_fc1:7,w_fc2:7,w_hidden:1,w_i:[1,2,7],w_ix_i:7,w_out:7,w_output:1,w_px_:8,w_px_p:8,wai:[0,1,2,3,4,5,6,7,8,9,10,11,12,14,20,21,23,27,29,30,32],walker:[2,3],wang:4,want:[0,1,2,3,4,5,7,8,9,10,12,13,15,17,18,19,21,22,24,26,30,35],warn:[7,8],warrant:5,wast:10,water:[16,17,25,26],wave:[15,24],wavelet:8,weak:2,wealth:[0,11,20],weather:[7,17,26],web:[4,11,20,28,30],websit:[4,12,21,30],webster:2,wedg:[3,8],wednesdai:28,week:1,weekli:28,weight:[0,1,2,3,5,6,10,14,23],weight_vari:7,weigth:1,welcom:[8,29,30,31,34],well:[0,1,2,3,4,5,6,7,8,12,13,14,15,16,17,18,19,21,22,23,24,25,26,28,35],wendi:[34,36],went:8,were:[0,2,3,4,5,6,7,8,9,10,13,14,15,16,17,22,23,24,25,26],wessel:5,what:[1,2,6,7,9,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,28,29],whatev:[0,10],when:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,28,29,34,36],whenev:3,where:[0,1,2,3,4,6,7,8,9,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26],wherea:[3,5,13,14,16,22,23,25,34,36],wherein:7,whether:[0,2,3,4,6,13,14,15,16,22,23,24,25,30,34,36],which:[0,1,2,4,5,6,8,9,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26,29,34,36],whichev:10,who:[0,4,29],whoever:[2,30],whole:[1,7,9,10],whose:[2,3,5,14,15,23,24],whow:[5,9],why:[0,4,13,17,22,26],wide:[4,5,7,10,12,13,15,21,22,24],widehat:5,wider:[0,17,26],width:[2,4,5,8,10],wieringen:5,wiki:29,willing:0,win:[2,16,25],wind:[13,15,22,24],winther:1,wiscons:9,wise:[5,7],wish:[0,1,2,4,6,8,9,12,13,15,16,17,21,22,24,25,26,31],wither:5,within:[0,1,2,3,4,6,7,10,13,22,29,31],without:[0,2,4,5,7,8,9,12,13,15,21,22,24,28,29],witth:[15,24],won:[2,4,5],wonder:8,word:[3,4,5,9,10,17,26],wordpress:2,work:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,15,16,18,19,20,21,22,24,25,28,30,34,35,36],workflow:31,world:[5,8,9,10,13,22],worldwid:[4,17,26],wors:[4,5,7,10],would:[0,2,3,4,5,6,7,8,9,10,12,13,14,15,16,17,21,22,23,24,25,26,28,30],wrap:[4,5,12,21,28],write:[0,1,3,4,5,7,8,11,12,14,15,16,17,20,21,23,24,25,26,27,32,34,36],writer:7,written:[0,1,3,4,5,7,9,11,12,13,14,15,16,20,21,22,23,24,25,34,36],wrong:[7,8,11,20,28],wrongli:3,wrote:[0,5,9],www:[4,7,12,21,28],wx_1:8,x0s:8,x1_exampl:8,x1d:8,x1s:8,x2d:[8,9],x2d_train:9,x2dsl:9,x2s:8,x3s:8,x_0:[2,4,5,9,12,13,14,15,21,22,23,24],x_1:[0,1,2,3,4,5,6,8,9,12,14,21,23],x_2:[0,1,2,3,4,5,6,8,9,12,14,21,23],x_3:[3,8],x_center:9,x_data:7,x_data_ful:7,x_f:[14,23],x_hidden:1,x_i:[1,3,4,5,6,7,8,9,13,14,22,23],x_input:1,x_ix_:5,x_iy_i:8,x_j:[1,3,7,8],x_jy_j:8,x_k:[3,7],x_l:3,x_m:[3,7],x_n:[0,1,3,5,7,8,9,15,24],x_output:1,x_p:[6,15,24],x_pred:[1,10],x_prev:1,x_reduc:9,x_scale:8,x_test:[5,7,9,10],x_test_own:5,x_test_scal:[5,9],x_tot:[1,10],x_train:[1,4,5,7,9,10],x_train_own:5,x_train_scal:[5,9],xarrai:[4,12,21],xavier:7,xcode:[4,12,21],xerr:2,xf_y:[14,23],xfinal:[16,25],xi_1:8,xi_:8,xi_i:8,xiniti:[16,25],xlabel:[1,3,4,5,8,10,11,12,20,21],xlim:5,xnew:4,xpd:[5,9],xplot:4,xtest:5,xtick:[5,8,10],xtrain:5,xytext:8,y_0:[4,5,9,12,13,14,21,22,23],y_1:[4,5,8,9,14,15,23,24],y_1y_1:8,y_1y_1k:8,y_1y_2:8,y_1y_2k:8,y_1y_n:8,y_1y_nk:8,y_2:[4,5,8,9,14,23],y_2y_1:8,y_2y_1k:8,y_2y_2:8,y_2y_2k:8,y_3:4,y_data:[5,7],y_data_ful:7,y_decis:8,y_i:[4,5,6,7,8,9,12,14,15,21,23,24],y_ix_:5,y_ix_i:[6,8],y_iy_jk:8,y_j:[5,7,8],y_k:7,y_model:[1,5,10],y_n:[8,14,23],y_ny_1:8,y_ny_1k:8,y_ny_2:8,y_ny_2k:8,y_ny_n:8,y_ny_nk:8,y_p:[13,22],y_pred:[1,5,7,8,10],y_test:[1,5,7,9,10],y_test_onehot:7,y_test_predict:5,y_tot:[1,10],y_train:[1,4,5,7,9,10],y_train_onehot:7,y_train_predict:5,yanalyt:[12,21],year:[0,2,4,14,15,23,24],yes:[0,5,6],yet:[0,5,7,8,9,12,13,16,21,22,25],yf_x:[14,23],yield:[1,2,3,4,5,7,8,12,14,15,16,21,23,24,25],ylabel:[1,3,4,5,8,10,11,12,20,21],ylim:[5,10,15,24],yoshua:7,you:[0,1,2,3,4,5,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,30,31,33,34,35,36],young:[0,4],your:[0,1,2,3,4,5,7,8,9,11,12,13,14,15,17,18,19,20,21,22,23,24,26,28,30,31,35],yourself:[4,9,16,17,25,26],ypred:5,ypredict:[4,5],yridg:5,ytest:5,ytick:[5,8,10],ytild:5,ytildenp:5,ytrain:5,z_0:[4,13,22],z_1:4,z_2:4,z_c:7,z_h:7,z_hidden:1,z_i:7,z_k:7,z_m:7,z_o:7,z_out:7,z_output:1,zaman:3,zero:[1,2,3,4,5,7,8,9,10,11,12,13,14,15,16,17,20,21,22,23,24,25,26],zeros_lik:2,zillion:0,zip:5,zm_h:4,zone:5,zze:[16,25]},titles:["Introduction to Applied Data Analysis and Machine Learning","9. Recurrent Neural Networks","11. Data Analysis and Machine Learning:","1. Elements of Probability Theory and Statistical Data Analysis","2. Getting started, our first data and Machine Learning encounters","3. Linear Regression and more Advanced Regression Analysis","4. Logistic Regression","5. Neural networks, from the simple perceptron to deep learning","6. Support Vector Machines, overarching aims","7. Dimensionality Reduction","8. Convolutional Neural Networks","Introduction","Space, Time, Motion, Reference Frames and Reminder on vectors and other mathematical quantities","Basic Steps of Scientific Investigations","Work, Energy, Momentum and Conservation laws","Harmonic Oscillator","Two-body Problems","Non-inertial Frames, Translation and Rotating Coordinate Systems","Content with notebooks","Content with notebooks","Introduction","Space, Time, Motion, Reference Frames and Reminder on vectors and other mathematical quantities","Basic Steps of Scientific Investigations","Work, Energy, Momentum and Conservation laws","Harmonic Oscillator","Two-body Problems","Non-inertial Frames, Translation and Rotating Coordinate Systems","Content in Jupyter Book","PHY321, Classical Mechanics I, Michigan State University, Spring 2021","Code of Conduct","Contributing","LectureNotes","Content in Jupyter Book","Welcome to your Jupyter Book","Markdown Files","Content with notebooks","Markdown Files"],titleterms:{"break":28,"case":[3,8,12,21],"class":6,"final":[1,7,9,10,12,13,14,21,22,23,28],"function":[1,3,5,6,7,8,9],"import":[3,4,10,12,21],"new":[1,10],"transient":[15,24],"try":[1,10],Adding:[5,8,14,23,34,36],And:[4,13,22],Going:[13,22],Ising:5,NNs:10,ODE:1,ODEs:1,OLS:5,One:[13,22],The:[1,2,3,5,6,7,8,9,10,13,14,15,17,22,23,24,26],Then:[13,22],Useful:[4,12,21],Using:[1,7,34,36],With:[1,2,10],about:[2,4],abov:[11,20],acceler:[12,13,17,21,22,26],act:[13,22],activ:7,actual:3,add:10,adjust:7,advanc:5,again:10,aim:[5,8],air:[12,13,21,22],aka:5,algebra:[5,12,17,21,26],algorithm:[5,7,9,14,23],all:8,altern:[15,24],analysi:[0,2,3,5,9],analyt:[1,12,21],angular:[14,23],anoth:5,appli:0,approach:[0,2,5,8,13,22],approxim:7,april:28,architectur:7,arrai:[4,12,21],artifici:7,asap:28,aspect:0,assumpt:5,attempt:[8,12,21],attribut:29,autocorrel:3,autograd:1,automat:1,averag:[12,21],back:[1,7,8,9],backend:7,background:5,ballist:[13,22],basebal:[12,21],basic:[4,5,6,9,12,13,14,21,22,23],bay:2,bayesian:2,befor:9,best:2,beta:[5,15,24],better:[3,5,8],bia:5,bias:[0,7],binari:7,bind:[4,5],binomi:3,block:[3,13,15,18,19,22,24,35],bodi:[16,25],boldsymbol:5,book:[27,31,32,33],bootstrap:[3,5],boston:5,breast:9,brief:[4,5,10],bring:7,bug:30,build:[7,10,14,23,31],buld:[14,23],calcul:3,can:5,cancer:9,center:[9,16,25],central:3,centrifug:[16,17,25,26],chain:7,chi:5,choic:[0,7],choos:7,cifar01:10,citat:[34,36],classic:[9,13,15,22,24,28],classif:[7,9],classifi:8,cnn:10,code:[1,2,3,5,7,8,9,12,14,15,16,18,19,21,23,24,25,29,30,34,35,36],coin:2,collect:[7,10],compact:[12,21],compar:1,compil:10,compon:9,comput:[3,9,12,21],computation:5,concept:[3,11,20],conduct:[29,30],confid:2,conserv:[14,23],constant:[12,21],content:[18,19,27,32,35],continu:[3,9],contn:[13,22],contribut:30,contributor:31,convex:8,convolut:[7,10],coordin:[17,26],corioli:[17,26],correl:[3,5,9,10],cost:[1,7],cote:[14,23],count:2,coupl:[14,23],covari:[2,3,5,9],credit:31,critic:[15,24],cromer:[12,14,21,23],cross:[5,16,25],cumul:3,cython:4,damp:[15,24],dampl:[15,24],data:[0,1,2,3,4,5,7,9,10],dataset:[7,10],date:28,decai:1,decompos:5,decomposit:[5,9],deep:[1,7],defin:[1,7,13,22],definit:[3,7],degre:[5,9],demonstr:3,dens:[5,10],deriv:[7,14,15,16,23,24,25],descent:[1,7],design:[5,9],detail:[1,5,8,10,13,22],develop:7,deviat:3,diagon:9,dice:3,differ:[2,8],differenti:[1,12,13,15,21,22,24],diffus:1,dimens:[12,13,16,21,22,25],dimension:[1,5,8,9],direct:[34,36],discret:[3,12,14,21,23],disguis:3,distribut:3,document:30,doing:7,domain:3,don:10,down:7,driven:[15,24],earth:[14,23],economi:5,effect:[16,17,25,26],element:[2,3,12,21],ellipt:[16,25],encount:[4,12,21],energi:[4,5,14,23],enforc:29,equal:[14,23],equat:[1,5,7,8,12,13,14,15,21,22,23,24],error:[5,14,23],essenti:[],estim:2,etc:[4,10],ethic:0,euler:[1,12,14,17,21,23,26],evalu:[7,10],event:3,exampl:[1,2,3,4,5,7,8,9,10,11,12,14,16,20,21,23,25],execut:[34,36],expect:[3,5],expens:5,experi:3,exponenti:[1,3],express:[5,14,23],extens:[12,21],extrapol:[1,10],extrem:[],factor:[15,24],fair:2,fall:[12,13,17,21,22,26],famili:[5,7],famou:[3,4,12,21],fantast:5,featur:[4,5,8,9,12,21,30],februari:28,feed:7,feedback:30,few:2,field:[13,22],file:[10,34,36],find:[5,12,21],first:[4,7,8,12,13,21,22],fit:[4,5],fix:[5,30],flux:2,fold:5,forc:[13,15,16,17,22,24,25,26],format:[1,10],forward:[1,7],foucault:[17,26],fouri:[15,24],fourier:[15,24],frame:[12,17,21,26],frank:[5,9],freedom:[5,9],frequentist:[0,2],friend:2,from:[2,5,7,10,17,26],full:[1,7,10],funtion:7,galilean:[17,26],gaussian:3,gener:[3,5],geometr:9,get:[4,8,30],going:5,good:0,grade:28,gradient:[1,7],gravit:[16,25],growth:1,handl:[0,4,12,21],happen:5,harmon:[15,16,24,25],height:[12,21],hidden:1,histori:2,host:31,hous:5,how:[3,5,8],hyperbol:7,hyperparamet:7,hyperplan:8,idea:9,identifi:[13,22],iii:1,illustr:[2,11,20],imag:10,implement:[1,3,7,12,21,30],improv:7,includ:[6,12,21],increment:9,inerti:[17,26],infer:2,input:1,instal:[4,12,21],integr:[12,14,21,23],interpret:[5,9],interv:2,introduc:[5,9],introduct:[0,4,6,11,20],investig:[13,22],its:3,jackknif:[3,5],jacobian:1,januari:28,julia:4,jupyt:[27,32,33],kera:[7,10],kernel:[8,9],known:[11,20],kutta:[15,24],label:[12,21],lagrangian:8,lambda:5,languag:0,lasso:5,last:8,law:[13,14,22,23],layer:[1,7,10],learn:[0,1,2,4,5,7,9,28],least:5,lectur:28,lecturenot:31,librari:[4,12,21],likelihood:6,limit:[3,7],linear:[4,5,8,17,26],link:[5,9,28],list:7,lle:9,logist:[6,7,9],machin:[0,2,4,8,9],made:5,magnet:[13,22],mai:28,main:3,mani:[7,11,20],march:28,markdown:[18,19,34,35,36],mass:[4,16,25],materi:28,math:5,mathemat:[5,7,8,12,14,21,23],matric:[4,12,21],matrix:[3,4,5,7,9,12,21],matter:5,maximum:6,mean:[3,9],measur:2,mechan:28,medic:10,meet:[3,4,12,21],mercer:8,mersenn:3,method:[3,5,12,14,15,21,23,24],michigan:28,minim:[1,8],mlp:7,mnist:10,model:[0,2,4,5,7,10,12,13,21,22],moment:3,momentum:[14,23],moon:8,more:[1,4,5,6,8,9,10,12,13,15,21,22,24],motion:[12,13,16,21,22,25],multi:7,multidisciplinari:[],multilay:7,multipl:[2,7],multipli:8,myst:[18,19,34,35,36],name:3,need:[4,12,21],network:[1,2,4,7,10],neural:[1,2,4,7,10],neuron:[7,10],newton:[13,14,22,23],non:[8,17,26],normal:3,notat:7,note:[2,28],notebook:[18,19,35],now:[5,9],nuclear:[4,5],numba:4,number:[1,3,5,9],numer:[1,3,14,15,23,24],numpi:[4,12,21],object:[7,13,17,22,26],observ:3,obtain:9,omega_0:[15,24],one:[1,5,7,12,13,21,22],ones:7,optim:[5,7,8],optmiz:8,orbit:[16,25],ordinari:[1,5],organ:4,orient:7,oscil:[15,16,24,25],other:[1,3,7,9,10,12,21,28],our:[3,4,5,7,9,12,13,15,21,22,24,29],outcom:[0,28],output:[1,3,18,19,35],overarch:[1,5,8,9,10],overdamp:[15,24],own:[5,9],packag:[4,12,21],panda:[4,5,9,12,21],paramet:[2,5,6],parametr:2,part:[10,13,22],partial:1,pass:7,pca:9,pdf:3,pendulum:[13,15,17,22,24,26],perceptron:7,perform:[5,7],period:[3,15,24],perspect:[7,17,26],philosophi:[14,23],photon:2,phy321:28,pledg:29,point:[1,10],poisson:[1,3],popul:1,possibl:[1,28],potenti:[16,17,25,26],practic:[2,12,21,28],pre:[7,10],predict:[1,10],preprocess:[5,9],prerequisit:10,princip:9,principl:[15,24],prior:2,probabl:[0,3],problem:[1,5,7,8,14,16,23,25],procedur:5,process:[1,7,10],program:[0,1],projectil:[13,22],proof:9,propag:[1,7],properti:[3,5],pseudo:3,python:[2,3,4,12,21],quadratur:[14,23],quantiti:[12,21],quick:8,raindrop:[13,22],ran0:3,random:[3,9],read:4,real:4,realist:8,recip:[2,3],rectangl:[14,23],rectangular:[14,23],recurr:[1,7,10],reduc:[5,9],reduct:[9,10],refer:[12,21],reformul:[1,5],regress:[4,5,6,9],regular:[5,7,10],rel:[16,25],relev:7,relu:7,remind:[4,8,12,21],report:30,repositori:5,requir:1,resampl:5,resist:[12,13,21,22],reson:[15,24],resourc:1,respons:[15,24,29],result:[5,13,22],rewrit:[5,9],rich:[],ridg:5,rng:3,rnn:[1,10],role:[34,36],rotat:[17,26],rule:[7,14,23],run:10,rung:[15,24],rutherford:[16,25],same:5,sampl:[3,9],scale:[10,13,15,22,24],scan:10,scatter:[16,25],schedul:28,scheme:1,scientif:[13,22],scikit:[4,5,7,9],scope:29,second:[13,22],section:[16,25],see:4,select:[2,3],seri:[15,24],set:[1,5,7,8,10,13,22],setup:1,should:[3,7,9],sigmoid:7,simpl:[1,2,3,4,5,7,8,9,10,12,14,21,23],simpler:8,simpson:[14,23],singl:[2,13,22],singular:[5,9],sinusoid:[15,24],situat:3,size:5,slide:[13,15,22,24],small:0,soft:8,softer:[13,22],softmax:7,softwar:[4,12,21],solar:[14,23],solut:[1,12,16,21,25],solv:[1,8,12,13,15,21,22,24],some:[2,4,5,12,21],sound:10,space:[8,12,21],specif:1,specifi:1,split:[5,13,22],spring:28,squar:5,stabil:[16,25],standard:[3,29],star:2,start:[4,30],state:[5,28],statist:[2,3,5],step:[5,8,9,13,14,22,23],stochast:3,strong:10,studi:[14,15,23,24],submit:30,suit:5,sum:5,summari:4,sun:[14,23],superposit:[15,24],supervis:7,support:[8,9],svd:5,symmetri:[14,23],system:[13,14,17,22,23,26],systemat:10,teach:28,team:28,technic:1,techniqu:9,tensorflow:[7,10],term:7,test:[5,7],textbook:28,theorem:[2,3,7,8,9,17,26],theori:[2,3],thi:[2,28],thing:[1,10],think:9,third:[13,22],three:3,tidal:[16,25],tied:[13,22],time:[12,21],togeth:7,top:[7,10],toss:3,toward:9,tradeoff:5,train:[1,5,7,10],transform:[10,15,17,24,26],translat:[17,26],trapezoid:[14,23],tree:4,trial:1,truncat:[14,23],two:[6,8,13,16,22,25],type:[1,4,7,10],uncorrel:3,underdamp:[15,24],understand:5,uniform:3,unit:[12,21],univers:[7,28],updat:28,usag:31,use:[3,7],used:10,useful:5,using:[1,3,4,7],valid:5,valu:[3,5,9],variabl:3,varianc:[3,5],variou:5,vector:[4,5,7,8,9,12,21],veloc:[12,14,21,23],verifi:10,verlet:[14,23],view:[1,5,9,10],visual:[7,10],volum:10,wai:[13,22],wall:[13,22],wave:1,week:28,weight:7,welcom:33,well:[10,11,20],what:[0,3,4,5,8,34,36],where:5,which:[3,7],why:[1,2,3,5,7,9,10],width:[15,24],wood:4,word:2,work:[14,23],write:[9,30],your:[33,34,36],z_j:7}}) \ No newline at end of file diff --git a/doc/src/LectureNotes/_build/html/testbook/_build/jupyter_execute/chapter1.html b/doc/src/LectureNotes/_build/html/testbook/_build/jupyter_execute/chapter1.html index 643e65252..86e67674f 100644 --- a/doc/src/LectureNotes/_build/html/testbook/_build/jupyter_execute/chapter1.html +++ b/doc/src/LectureNotes/_build/html/testbook/_build/jupyter_execute/chapter1.html @@ -123,6 +123,26 @@ 8. Convolutional Neural Networks +
  • + + 9. Recurrent Neural Networks + +
  • +
  • + + 10. Solving ODEs with Deep Learning + +
  • +
  • + + 11. Data Analysis and Machine Learning: + +
  • +
  • + + 12. Elements of Bayesian theory and Bayesian Neural Networks + +
  • diff --git a/doc/src/LectureNotes/_build/html/testbook/_build/jupyter_execute/chapter2.html b/doc/src/LectureNotes/_build/html/testbook/_build/jupyter_execute/chapter2.html index 2a8c644e3..fd278804d 100644 --- a/doc/src/LectureNotes/_build/html/testbook/_build/jupyter_execute/chapter2.html +++ b/doc/src/LectureNotes/_build/html/testbook/_build/jupyter_execute/chapter2.html @@ -123,6 +123,26 @@ 8. Convolutional Neural Networks +
  • + + 9. Recurrent Neural Networks + +
  • +
  • + + 10. Solving ODEs with Deep Learning + +
  • +
  • + + 11. Data Analysis and Machine Learning: + +
  • +
  • + + 12. Elements of Bayesian theory and Bayesian Neural Networks + +
  • @@ -1553,8 +1573,8 @@ developed in the 1970s, namely EISPACK and LINPACK. We describe them shortly he
    -
    [-1.17029256  1.16440383 -0.52324284  0.91883189 -0.05688344 -0.80125589
    -  1.85759035 -1.11063616  0.67761635  0.09188807]
    +
    [ 1.8413241  -1.44931127  0.91189378  1.82553587  0.69940044 -0.65726179
    +  1.72526513  1.82825747 -1.34003257 -0.5817835 ]
     
    diff --git a/doc/src/LectureNotes/_build/html/testbook/_build/jupyter_execute/chapter3.html b/doc/src/LectureNotes/_build/html/testbook/_build/jupyter_execute/chapter3.html index 26cb92774..fc7200445 100644 --- a/doc/src/LectureNotes/_build/html/testbook/_build/jupyter_execute/chapter3.html +++ b/doc/src/LectureNotes/_build/html/testbook/_build/jupyter_execute/chapter3.html @@ -123,6 +123,26 @@ 8. Convolutional Neural Networks +
  • + + 9. Recurrent Neural Networks + +
  • +
  • + + 10. Solving ODEs with Deep Learning + +
  • +
  • + + 11. Data Analysis and Machine Learning: + +
  • +
  • + + 12. Elements of Bayesian theory and Bayesian Neural Networks + +
  • diff --git a/doc/src/LectureNotes/_build/html/testbook/_build/jupyter_execute/chapter4.html b/doc/src/LectureNotes/_build/html/testbook/_build/jupyter_execute/chapter4.html index 5a8a0e5a1..391128f41 100644 --- a/doc/src/LectureNotes/_build/html/testbook/_build/jupyter_execute/chapter4.html +++ b/doc/src/LectureNotes/_build/html/testbook/_build/jupyter_execute/chapter4.html @@ -123,6 +123,26 @@ 8. Convolutional Neural Networks +
  • + + 9. Recurrent Neural Networks + +
  • +
  • + + 10. Solving ODEs with Deep Learning + +
  • +
  • + + 11. Data Analysis and Machine Learning: + +
  • +
  • + + 12. Elements of Bayesian theory and Bayesian Neural Networks + +
  • diff --git a/doc/src/LectureNotes/_build/html/testbook/_build/jupyter_execute/chapter5.html b/doc/src/LectureNotes/_build/html/testbook/_build/jupyter_execute/chapter5.html index 335a300c2..e31cecfb7 100644 --- a/doc/src/LectureNotes/_build/html/testbook/_build/jupyter_execute/chapter5.html +++ b/doc/src/LectureNotes/_build/html/testbook/_build/jupyter_execute/chapter5.html @@ -123,6 +123,26 @@ 8. Convolutional Neural Networks +
  • + + 9. Recurrent Neural Networks + +
  • +
  • + + 10. Solving ODEs with Deep Learning + +
  • +
  • + + 11. Data Analysis and Machine Learning: + +
  • +
  • + + 12. Elements of Bayesian theory and Bayesian Neural Networks + +
  • diff --git a/doc/src/LectureNotes/_build/html/testbook/_build/jupyter_execute/chapter6.html b/doc/src/LectureNotes/_build/html/testbook/_build/jupyter_execute/chapter6.html index 71426d615..d6d910bbd 100644 --- a/doc/src/LectureNotes/_build/html/testbook/_build/jupyter_execute/chapter6.html +++ b/doc/src/LectureNotes/_build/html/testbook/_build/jupyter_execute/chapter6.html @@ -123,6 +123,26 @@ 8. Convolutional Neural Networks +
  • + + 9. Recurrent Neural Networks + +
  • +
  • + + 10. Solving ODEs with Deep Learning + +
  • +
  • + + 11. Data Analysis and Machine Learning: + +
  • +
  • + + 12. Elements of Bayesian theory and Bayesian Neural Networks + +
  • diff --git a/doc/src/LectureNotes/_build/html/testbook/_build/jupyter_execute/chapter7.html b/doc/src/LectureNotes/_build/html/testbook/_build/jupyter_execute/chapter7.html index 135392f9b..6940fe2db 100644 --- a/doc/src/LectureNotes/_build/html/testbook/_build/jupyter_execute/chapter7.html +++ b/doc/src/LectureNotes/_build/html/testbook/_build/jupyter_execute/chapter7.html @@ -123,6 +123,26 @@ 8. Convolutional Neural Networks +
  • + + 9. Recurrent Neural Networks + +
  • +
  • + + 10. Solving ODEs with Deep Learning + +
  • +
  • + + 11. Data Analysis and Machine Learning: + +
  • +
  • + + 12. Elements of Bayesian theory and Bayesian Neural Networks + +
  • diff --git a/doc/src/LectureNotes/_build/html/testbook/_build/jupyter_execute/lecturenotes/lecturenotes/notebooks.html b/doc/src/LectureNotes/_build/html/testbook/_build/jupyter_execute/lecturenotes/lecturenotes/notebooks.html index 5d794f596..2c3e21ad8 100644 --- a/doc/src/LectureNotes/_build/html/testbook/_build/jupyter_execute/lecturenotes/lecturenotes/notebooks.html +++ b/doc/src/LectureNotes/_build/html/testbook/_build/jupyter_execute/lecturenotes/lecturenotes/notebooks.html @@ -123,6 +123,26 @@ 8. Convolutional Neural Networks +
  • + + 9. Recurrent Neural Networks + +
  • +
  • + + 10. Solving ODEs with Deep Learning + +
  • +
  • + + 11. Data Analysis and Machine Learning: + +
  • +
  • + + 12. Elements of Bayesian theory and Bayesian Neural Networks + +
  • diff --git a/doc/src/LectureNotes/_build/html/testbook/_build/jupyter_execute/notebooks.html b/doc/src/LectureNotes/_build/html/testbook/_build/jupyter_execute/notebooks.html index 7962b9748..bd8c407a7 100644 --- a/doc/src/LectureNotes/_build/html/testbook/_build/jupyter_execute/notebooks.html +++ b/doc/src/LectureNotes/_build/html/testbook/_build/jupyter_execute/notebooks.html @@ -123,6 +123,26 @@ 8. Convolutional Neural Networks +
  • + + 9. Recurrent Neural Networks + +
  • +
  • + + 10. Solving ODEs with Deep Learning + +
  • +
  • + + 11. Data Analysis and Machine Learning: + +
  • +
  • + + 12. Elements of Bayesian theory and Bayesian Neural Networks + +
  • diff --git a/doc/src/LectureNotes/_build/html/testbook/chapter1.html b/doc/src/LectureNotes/_build/html/testbook/chapter1.html index ccae0322d..9e69a6d47 100644 --- a/doc/src/LectureNotes/_build/html/testbook/chapter1.html +++ b/doc/src/LectureNotes/_build/html/testbook/chapter1.html @@ -123,6 +123,26 @@ 8. Convolutional Neural Networks +
  • + + 9. Recurrent Neural Networks + +
  • +
  • + + 10. Solving ODEs with Deep Learning + +
  • +
  • + + 11. Data Analysis and Machine Learning: + +
  • +
  • + + 12. Elements of Bayesian theory and Bayesian Neural Networks + +
  • diff --git a/doc/src/LectureNotes/_build/html/testbook/chapter2.html b/doc/src/LectureNotes/_build/html/testbook/chapter2.html index 0b6aa8244..66fbb90bb 100644 --- a/doc/src/LectureNotes/_build/html/testbook/chapter2.html +++ b/doc/src/LectureNotes/_build/html/testbook/chapter2.html @@ -123,6 +123,26 @@ 8. Convolutional Neural Networks +
  • + + 9. Recurrent Neural Networks + +
  • +
  • + + 10. Solving ODEs with Deep Learning + +
  • +
  • + + 11. Data Analysis and Machine Learning: + +
  • +
  • + + 12. Elements of Bayesian theory and Bayesian Neural Networks + +
  • @@ -1553,8 +1573,8 @@ developed in the 1970s, namely EISPACK and LINPACK. We describe them shortly he
    -
    [-0.15903306 -1.03373868  0.31582494 -0.65395262  0.96308377 -0.89760255
    -  1.62466988  1.27946914 -0.71331923 -0.2179017 ]
    +
    [-1.04569783  1.68833083  1.59472197 -0.22027464 -1.12477388  0.78480985
    +  0.8799874  -0.43301111 -0.53140431  0.2976373 ]
     
    diff --git a/doc/src/LectureNotes/_build/html/testbook/chapter3.html b/doc/src/LectureNotes/_build/html/testbook/chapter3.html index 927ff395d..5de2bc5ba 100644 --- a/doc/src/LectureNotes/_build/html/testbook/chapter3.html +++ b/doc/src/LectureNotes/_build/html/testbook/chapter3.html @@ -123,6 +123,26 @@ 8. Convolutional Neural Networks +
  • + + 9. Recurrent Neural Networks + +
  • +
  • + + 10. Solving ODEs with Deep Learning + +
  • +
  • + + 11. Data Analysis and Machine Learning: + +
  • +
  • + + 12. Elements of Bayesian theory and Bayesian Neural Networks + +
  • diff --git a/doc/src/LectureNotes/_build/html/testbook/chapter4.html b/doc/src/LectureNotes/_build/html/testbook/chapter4.html index 0801201a6..72cd947b4 100644 --- a/doc/src/LectureNotes/_build/html/testbook/chapter4.html +++ b/doc/src/LectureNotes/_build/html/testbook/chapter4.html @@ -123,6 +123,26 @@ 8. Convolutional Neural Networks +
  • + + 9. Recurrent Neural Networks + +
  • +
  • + + 10. Solving ODEs with Deep Learning + +
  • +
  • + + 11. Data Analysis and Machine Learning: + +
  • +
  • + + 12. Elements of Bayesian theory and Bayesian Neural Networks + +
  • diff --git a/doc/src/LectureNotes/_build/html/testbook/chapter5.html b/doc/src/LectureNotes/_build/html/testbook/chapter5.html index 901060374..513936694 100644 --- a/doc/src/LectureNotes/_build/html/testbook/chapter5.html +++ b/doc/src/LectureNotes/_build/html/testbook/chapter5.html @@ -123,6 +123,26 @@ 8. Convolutional Neural Networks +
  • + + 9. Recurrent Neural Networks + +
  • +
  • + + 10. Solving ODEs with Deep Learning + +
  • +
  • + + 11. Data Analysis and Machine Learning: + +
  • +
  • + + 12. Elements of Bayesian theory and Bayesian Neural Networks + +
  • diff --git a/doc/src/LectureNotes/_build/html/testbook/chapter6.html b/doc/src/LectureNotes/_build/html/testbook/chapter6.html index 5df638df7..f49b0d517 100644 --- a/doc/src/LectureNotes/_build/html/testbook/chapter6.html +++ b/doc/src/LectureNotes/_build/html/testbook/chapter6.html @@ -123,6 +123,26 @@ 8. Convolutional Neural Networks +
  • + + 9. Recurrent Neural Networks + +
  • +
  • + + 10. Solving ODEs with Deep Learning + +
  • +
  • + + 11. Data Analysis and Machine Learning: + +
  • +
  • + + 12. Elements of Bayesian theory and Bayesian Neural Networks + +
  • diff --git a/doc/src/LectureNotes/_build/html/testbook/chapter7.html b/doc/src/LectureNotes/_build/html/testbook/chapter7.html index acdf58c52..065a34b70 100644 --- a/doc/src/LectureNotes/_build/html/testbook/chapter7.html +++ b/doc/src/LectureNotes/_build/html/testbook/chapter7.html @@ -123,6 +123,26 @@ 8. Convolutional Neural Networks +
  • + + 9. Recurrent Neural Networks + +
  • +
  • + + 10. Solving ODEs with Deep Learning + +
  • +
  • + + 11. Data Analysis and Machine Learning: + +
  • +
  • + + 12. Elements of Bayesian theory and Bayesian Neural Networks + +
  • diff --git a/doc/src/LectureNotes/_build/html/testbook/content.html b/doc/src/LectureNotes/_build/html/testbook/content.html index 8b3bcc931..68436a41a 100644 --- a/doc/src/LectureNotes/_build/html/testbook/content.html +++ b/doc/src/LectureNotes/_build/html/testbook/content.html @@ -123,6 +123,26 @@ 8. Convolutional Neural Networks +
  • + + 9. Recurrent Neural Networks + +
  • +
  • + + 10. Solving ODEs with Deep Learning + +
  • +
  • + + 11. Data Analysis and Machine Learning: + +
  • +
  • + + 12. Elements of Bayesian theory and Bayesian Neural Networks + +
  • diff --git a/doc/src/LectureNotes/_build/html/testbook/intro.html b/doc/src/LectureNotes/_build/html/testbook/intro.html index 4ebb9e5bc..4dee964ee 100644 --- a/doc/src/LectureNotes/_build/html/testbook/intro.html +++ b/doc/src/LectureNotes/_build/html/testbook/intro.html @@ -123,6 +123,26 @@ 8. Convolutional Neural Networks +
  • + + 9. Recurrent Neural Networks + +
  • +
  • + + 10. Solving ODEs with Deep Learning + +
  • +
  • + + 11. Data Analysis and Machine Learning: + +
  • +
  • + + 12. Elements of Bayesian theory and Bayesian Neural Networks + +
  • diff --git a/doc/src/LectureNotes/_build/html/testbook/lecturenotes/CONDUCT.html b/doc/src/LectureNotes/_build/html/testbook/lecturenotes/CONDUCT.html index 59ba705a2..99541d9d1 100644 --- a/doc/src/LectureNotes/_build/html/testbook/lecturenotes/CONDUCT.html +++ b/doc/src/LectureNotes/_build/html/testbook/lecturenotes/CONDUCT.html @@ -123,6 +123,26 @@ 8. Convolutional Neural Networks +
  • + + 9. Recurrent Neural Networks + +
  • +
  • + + 10. Solving ODEs with Deep Learning + +
  • +
  • + + 11. Data Analysis and Machine Learning: + +
  • +
  • + + 12. Elements of Bayesian theory and Bayesian Neural Networks + +
  • diff --git a/doc/src/LectureNotes/_build/html/testbook/lecturenotes/CONTRIBUTING.html b/doc/src/LectureNotes/_build/html/testbook/lecturenotes/CONTRIBUTING.html index 3b241a3d1..a5ce3a0c7 100644 --- a/doc/src/LectureNotes/_build/html/testbook/lecturenotes/CONTRIBUTING.html +++ b/doc/src/LectureNotes/_build/html/testbook/lecturenotes/CONTRIBUTING.html @@ -123,6 +123,26 @@ 8. Convolutional Neural Networks +
  • + + 9. Recurrent Neural Networks + +
  • +
  • + + 10. Solving ODEs with Deep Learning + +
  • +
  • + + 11. Data Analysis and Machine Learning: + +
  • +
  • + + 12. Elements of Bayesian theory and Bayesian Neural Networks + +
  • diff --git a/doc/src/LectureNotes/_build/html/testbook/lecturenotes/README.html b/doc/src/LectureNotes/_build/html/testbook/lecturenotes/README.html index 4189370a6..49dd40798 100644 --- a/doc/src/LectureNotes/_build/html/testbook/lecturenotes/README.html +++ b/doc/src/LectureNotes/_build/html/testbook/lecturenotes/README.html @@ -123,6 +123,26 @@ 8. Convolutional Neural Networks +
  • + + 9. Recurrent Neural Networks + +
  • +
  • + + 10. Solving ODEs with Deep Learning + +
  • +
  • + + 11. Data Analysis and Machine Learning: + +
  • +
  • + + 12. Elements of Bayesian theory and Bayesian Neural Networks + +
  • diff --git a/doc/src/LectureNotes/_build/html/testbook/lecturenotes/lecturenotes/content.html b/doc/src/LectureNotes/_build/html/testbook/lecturenotes/lecturenotes/content.html index 5cbfd6ce8..95e4b43c0 100644 --- a/doc/src/LectureNotes/_build/html/testbook/lecturenotes/lecturenotes/content.html +++ b/doc/src/LectureNotes/_build/html/testbook/lecturenotes/lecturenotes/content.html @@ -123,6 +123,26 @@ 8. Convolutional Neural Networks +
  • + + 9. Recurrent Neural Networks + +
  • +
  • + + 10. Solving ODEs with Deep Learning + +
  • +
  • + + 11. Data Analysis and Machine Learning: + +
  • +
  • + + 12. Elements of Bayesian theory and Bayesian Neural Networks + +
  • diff --git a/doc/src/LectureNotes/_build/html/testbook/lecturenotes/lecturenotes/intro.html b/doc/src/LectureNotes/_build/html/testbook/lecturenotes/lecturenotes/intro.html index e7c7c7138..47b359168 100644 --- a/doc/src/LectureNotes/_build/html/testbook/lecturenotes/lecturenotes/intro.html +++ b/doc/src/LectureNotes/_build/html/testbook/lecturenotes/lecturenotes/intro.html @@ -123,6 +123,26 @@ 8. Convolutional Neural Networks +
  • + + 9. Recurrent Neural Networks + +
  • +
  • + + 10. Solving ODEs with Deep Learning + +
  • +
  • + + 11. Data Analysis and Machine Learning: + +
  • +
  • + + 12. Elements of Bayesian theory and Bayesian Neural Networks + +
  • diff --git a/doc/src/LectureNotes/_build/html/testbook/lecturenotes/lecturenotes/markdown.html b/doc/src/LectureNotes/_build/html/testbook/lecturenotes/lecturenotes/markdown.html index 6f35fa6c4..70507d92b 100644 --- a/doc/src/LectureNotes/_build/html/testbook/lecturenotes/lecturenotes/markdown.html +++ b/doc/src/LectureNotes/_build/html/testbook/lecturenotes/lecturenotes/markdown.html @@ -123,6 +123,26 @@ 8. Convolutional Neural Networks +
  • + + 9. Recurrent Neural Networks + +
  • +
  • + + 10. Solving ODEs with Deep Learning + +
  • +
  • + + 11. Data Analysis and Machine Learning: + +
  • +
  • + + 12. Elements of Bayesian theory and Bayesian Neural Networks + +
  • diff --git a/doc/src/LectureNotes/_build/html/testbook/lecturenotes/lecturenotes/notebooks.html b/doc/src/LectureNotes/_build/html/testbook/lecturenotes/lecturenotes/notebooks.html index 2912b35e5..80c431b7f 100644 --- a/doc/src/LectureNotes/_build/html/testbook/lecturenotes/lecturenotes/notebooks.html +++ b/doc/src/LectureNotes/_build/html/testbook/lecturenotes/lecturenotes/notebooks.html @@ -123,6 +123,26 @@ 8. Convolutional Neural Networks +
  • + + 9. Recurrent Neural Networks + +
  • +
  • + + 10. Solving ODEs with Deep Learning + +
  • +
  • + + 11. Data Analysis and Machine Learning: + +
  • +
  • + + 12. Elements of Bayesian theory and Bayesian Neural Networks + +
  • diff --git a/doc/src/LectureNotes/_build/html/testbook/markdown.html b/doc/src/LectureNotes/_build/html/testbook/markdown.html index 9432c7af8..760066aa4 100644 --- a/doc/src/LectureNotes/_build/html/testbook/markdown.html +++ b/doc/src/LectureNotes/_build/html/testbook/markdown.html @@ -123,6 +123,26 @@ 8. Convolutional Neural Networks +
  • + + 9. Recurrent Neural Networks + +
  • +
  • + + 10. Solving ODEs with Deep Learning + +
  • +
  • + + 11. Data Analysis and Machine Learning: + +
  • +
  • + + 12. Elements of Bayesian theory and Bayesian Neural Networks + +
  • diff --git a/doc/src/LectureNotes/_build/jupyter_execute/chapter1.ipynb b/doc/src/LectureNotes/_build/jupyter_execute/chapter1.ipynb index bc7a8ae19..5a48fe5ec 100644 --- a/doc/src/LectureNotes/_build/jupyter_execute/chapter1.ipynb +++ b/doc/src/LectureNotes/_build/jupyter_execute/chapter1.ipynb @@ -416,6 +416,8 @@ "chapter7.ipynb\n", "chapter8.ipynb\n", "chapter9.ipynb\n", + "chapter10.ipynb\n", + "chapter11.ipynb\n", "```\n" ] } diff --git a/doc/src/LectureNotes/_build/jupyter_execute/chapter1.txt b/doc/src/LectureNotes/_build/jupyter_execute/chapter1.txt index db9b269da..4711f18d7 100644 --- a/doc/src/LectureNotes/_build/jupyter_execute/chapter1.txt +++ b/doc/src/LectureNotes/_build/jupyter_execute/chapter1.txt @@ -405,4 +405,6 @@ chapter6.ipynb chapter7.ipynb chapter8.ipynb chapter9.ipynb +chapter10.ipynb +chapter11.ipynb ``` diff --git a/doc/src/LectureNotes/_build/jupyter_execute/chapter10.ipynb b/doc/src/LectureNotes/_build/jupyter_execute/chapter10.ipynb new file mode 100644 index 000000000..627851844 --- /dev/null +++ b/doc/src/LectureNotes/_build/jupyter_execute/chapter10.ipynb @@ -0,0 +1,17610 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Recurrent Neural Networks\n", + "\n", + "[Overview video](https://www.youtube.com/watch?v=SEnXr6v2ifU&ab_channel=AlexanderAmini).\n", + "See also lecture on Thursday October 22 and examples from [week 42](https://compphysics.github.io/MachineLearning/doc/pub/week42/html/week42.html).\n", + "\n", + "[IN5400 at UiO Lecture](https://www.uio.no/studier/emner/matnat/ifi/IN5400/v20/material/week10/in5400_2020_week10_recurrent_neural_network.pdf)\n", + "\n", + "[CS231 at Stanford Lecture](https://www.youtube.com/watch?v=6niqTuYFZLQ&list=PLzUTmXVwsnXod6WNdg57Yc3zFx_f-RYsq&index=10&ab_channel=StanfordUniversitySchoolofEngineering)\n", + "\n", + "## Recurrent neural networks: Overarching view\n", + "\n", + "Till now our focus has been, including convolutional neural networks\n", + "as well, on feedforward neural networks. The output or the activations\n", + "flow only in one direction, from the input layer to the output layer.\n", + "\n", + "A recurrent neural network (RNN) looks very much like a feedforward\n", + "neural network, except that it also has connections pointing\n", + "backward. \n", + "\n", + "RNNs are used to analyze time series data such as stock prices, and\n", + "tell you when to buy or sell. In autonomous driving systems, they can\n", + "anticipate car trajectories and help avoid accidents. More generally,\n", + "they can work on sequences of arbitrary lengths, rather than on\n", + "fixed-sized inputs like all the nets we have discussed so far. For\n", + "example, they can take sentences, documents, or audio samples as\n", + "input, making them extremely useful for natural language processing\n", + "systems such as automatic translation and speech-to-text.\n", + "\n", + "\n", + "\n", + "\n", + "## Set up of an RNN\n", + "\n", + "\n", + "Text to come.\n", + "\n", + "\n", + "## A simple example" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "filenames": { + "image/png": "/Users/hjensen/Teaching/FYS-STK4150/doc/src/LectureNotes/_build/jupyter_execute/chapter10_1_0.png" + }, + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: \"sequential\"\n", + "_________________________________________________________________\n", + "Layer (type) Output Shape Param # \n", + "=================================================================\n", + "simple_rnn (SimpleRNN) (None, 32) 1184 \n", + "_________________________________________________________________\n", + "dense (Dense) (None, 8) 264 \n", + "_________________________________________________________________\n", + "dense_1 (Dense) (None, 1) 9 \n", + "=================================================================\n", + "Total params: 1,457\n", + "Trainable params: 1,457\n", + "Non-trainable params: 0\n", + "_________________________________________________________________\n", + "Epoch 1/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 2.1500\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 2/100\n", + "50/50 - 0s - loss: 0.4827\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 3/100\n", + "50/50 - 0s - loss: 0.4041\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 4/100\n", + "50/50 - 0s - loss: 0.3986\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 5/100\n", + "50/50 - 0s - loss: 0.3980\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 6/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3996\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 7/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3982\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 8/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3962\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 9/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3965\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 10/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3934\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 11/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3933\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 12/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3951\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 13/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3947\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 14/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3924\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 15/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3932\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 16/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3932\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 17/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3924\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 18/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3914\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 19/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3918\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 20/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3914\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 21/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3918\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 22/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3889\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 23/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3912\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 24/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3892\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 25/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3884\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 26/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3881\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 27/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3886\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 28/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3884\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 29/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3867\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 30/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3878\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 31/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3871\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 32/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3866\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 33/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3869\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 34/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3869\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 35/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3854\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 36/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3848\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 37/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3854\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 38/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3855\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 39/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3839\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 40/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3845\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 41/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3838\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 42/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3824\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 43/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3820\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 44/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3828\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 45/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3818\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 46/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3808\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 47/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3827\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 48/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3818\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 49/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3807\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 50/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3827\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 51/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3796\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 52/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3808\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 53/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3798\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 54/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3807\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 55/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3776\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 56/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3777\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 57/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3793\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 58/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3785\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 59/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3778\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 60/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3782\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 61/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3776\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 62/100\n", + "50/50 - 0s - loss: 0.3775\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 63/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3767\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 64/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3761\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 65/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3762\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 66/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3760\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 67/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3762\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 68/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3745\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 69/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3747\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 70/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3756\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 71/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3754\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 72/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3761\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 73/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3758\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 74/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3744\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 75/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3732\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 76/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3733\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 77/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3724\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 78/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3726\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 79/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3726\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 80/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3710\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 81/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3700\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 82/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3711\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 83/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3718\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 84/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3714\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 85/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3712\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 86/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3713\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 87/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3710\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 88/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3714\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 89/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3688\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 90/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3694\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 91/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3696\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 92/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3695\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 93/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3694\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 94/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3704\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 95/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3676\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 96/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3693\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 97/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3664\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 98/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3673\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 99/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3687\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 100/100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 - 0s - loss: 0.3675\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.36208778619766235\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "filenames": { + "image/png": "/Users/hjensen/Teaching/FYS-STK4150/doc/src/LectureNotes/_build/jupyter_execute/chapter10_1_197.png" + }, + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "%matplotlib inline\n", + "\n", + "# Start importing packages\n", + "import pandas as pd\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import tensorflow as tf\n", + "from tensorflow.keras import datasets, layers, models\n", + "from tensorflow.keras.layers import Input\n", + "from tensorflow.keras.models import Model, Sequential \n", + "from tensorflow.keras.layers import Dense, SimpleRNN, LSTM, GRU\n", + "from tensorflow.keras import optimizers \n", + "from tensorflow.keras import regularizers \n", + "from tensorflow.keras.utils import to_categorical \n", + "\n", + "\n", + "\n", + "# convert into dataset matrix\n", + "def convertToMatrix(data, step):\n", + " X, Y =[], []\n", + " for i in range(len(data)-step):\n", + " d=i+step \n", + " X.append(data[i:d,])\n", + " Y.append(data[d,])\n", + " return np.array(X), np.array(Y)\n", + "\n", + "step = 4\n", + "N = 1000 \n", + "Tp = 800 \n", + "\n", + "t=np.arange(0,N)\n", + "x=np.sin(0.02*t)+2*np.random.rand(N)\n", + "df = pd.DataFrame(x)\n", + "df.head()\n", + "\n", + "plt.plot(df)\n", + "plt.show()\n", + "\n", + "values=df.values\n", + "train,test = values[0:Tp,:], values[Tp:N,:]\n", + "\n", + "# add step elements into train and test\n", + "test = np.append(test,np.repeat(test[-1,],step))\n", + "train = np.append(train,np.repeat(train[-1,],step))\n", + " \n", + "trainX,trainY =convertToMatrix(train,step)\n", + "testX,testY =convertToMatrix(test,step)\n", + "trainX = np.reshape(trainX, (trainX.shape[0], 1, trainX.shape[1]))\n", + "testX = np.reshape(testX, (testX.shape[0], 1, testX.shape[1]))\n", + "\n", + "model = Sequential()\n", + "model.add(SimpleRNN(units=32, input_shape=(1,step), activation=\"relu\"))\n", + "model.add(Dense(8, activation=\"relu\")) \n", + "model.add(Dense(1))\n", + "model.compile(loss='mean_squared_error', optimizer='rmsprop')\n", + "model.summary()\n", + "\n", + "model.fit(trainX,trainY, epochs=100, batch_size=16, verbose=2)\n", + "trainPredict = model.predict(trainX)\n", + "testPredict= model.predict(testX)\n", + "predicted=np.concatenate((trainPredict,testPredict),axis=0)\n", + "\n", + "trainScore = model.evaluate(trainX, trainY, verbose=0)\n", + "print(trainScore)\n", + "\n", + "index = df.index.values\n", + "plt.plot(index,df)\n", + "plt.plot(index,predicted)\n", + "plt.axvline(df.index[Tp], c=\"r\")\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## An extrapolation example\n", + "\n", + "The following code provides an example of how recurrent neural\n", + "networks can be used to extrapolate to unknown values of physics data\n", + "sets. Specifically, the data sets used in this program come from\n", + "a quantum mechanical many-body calculation of energies as functions of the number of particles." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "\n", + "# For matrices and calculations\n", + "import numpy as np\n", + "# For machine learning (backend for keras)\n", + "import tensorflow as tf\n", + "# User-friendly machine learning library\n", + "# Front end for TensorFlow\n", + "import tensorflow.keras\n", + "# Different methods from Keras needed to create an RNN\n", + "# This is not necessary but it shortened function calls \n", + "# that need to be used in the code.\n", + "from tensorflow.keras import datasets, layers, models\n", + "from tensorflow.keras.layers import Input\n", + "from tensorflow.keras import regularizers\n", + "from tensorflow.keras.models import Model, Sequential\n", + "from tensorflow.keras.layers import Dense, SimpleRNN, LSTM, GRU\n", + "# For timing the code\n", + "from timeit import default_timer as timer\n", + "# For plotting\n", + "import matplotlib.pyplot as plt\n", + "\n", + "\n", + "# The data set\n", + "datatype='VaryDimension'\n", + "X_tot = np.arange(2, 42, 2)\n", + "y_tot = np.array([-0.03077640549, -0.08336233266, -0.1446729567, -0.2116753732, -0.2830637392, -0.3581341341, -0.436462435, -0.5177783846,\n", + "\t-0.6019067271, -0.6887363571, -0.7782028952, -0.8702784034, -0.9649652536, -1.062292565, -1.16231451, \n", + "\t-1.265109911, -1.370782966, -1.479465113, -1.591317992, -1.70653767])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Formatting the Data\n", + "\n", + "The way the recurrent neural networks are trained in this program\n", + "differs from how machine learning algorithms are usually trained.\n", + "Typically a machine learning algorithm is trained by learning the\n", + "relationship between the x data and the y data. In this program, the\n", + "recurrent neural network will be trained to recognize the relationship\n", + "in a sequence of y values. This is type of data formatting is\n", + "typically used time series forcasting, but it can also be used in any\n", + "extrapolation (time series forecasting is just a specific type of\n", + "extrapolation along the time axis). This method of data formatting\n", + "does not use the x data and assumes that the y data are evenly spaced.\n", + "\n", + "For a standard machine learning algorithm, the training data has the\n", + "form of (x,y) so the machine learning algorithm learns to assiciate a\n", + "y value with a given x value. This is useful when the test data has x\n", + "values within the same range as the training data. However, for this\n", + "application, the x values of the test data are outside of the x values\n", + "of the training data and the traditional method of training a machine\n", + "learning algorithm does not work as well. For this reason, the\n", + "recurrent neural network is trained on sequences of y values of the\n", + "form ((y1, y2), y3), so that the network is concerned with learning\n", + "the pattern of the y data and not the relation between the x and y\n", + "data. As long as the pattern of y data outside of the training region\n", + "stays relatively stable compared to what was inside the training\n", + "region, this method of training can produce accurate extrapolations to\n", + "y values far removed from the training data set.\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# FORMAT_DATA\n", + "def format_data(data, length_of_sequence = 2): \n", + " \"\"\"\n", + " Inputs:\n", + " data(a numpy array): the data that will be the inputs to the recurrent neural\n", + " network\n", + " length_of_sequence (an int): the number of elements in one iteration of the\n", + " sequence patter. For a function approximator use length_of_sequence = 2.\n", + " Returns:\n", + " rnn_input (a 3D numpy array): the input data for the recurrent neural network. Its\n", + " dimensions are length of data - length of sequence, length of sequence, \n", + " dimnsion of data\n", + " rnn_output (a numpy array): the training data for the neural network\n", + " Formats data to be used in a recurrent neural network.\n", + " \"\"\"\n", + "\n", + " X, Y = [], []\n", + " for i in range(len(data)-length_of_sequence):\n", + " # Get the next length_of_sequence elements\n", + " a = data[i:i+length_of_sequence]\n", + " # Get the element that immediately follows that\n", + " b = data[i+length_of_sequence]\n", + " # Reshape so that each data point is contained in its own array\n", + " a = np.reshape (a, (len(a), 1))\n", + " X.append(a)\n", + " Y.append(b)\n", + " rnn_input = np.array(X)\n", + " rnn_output = np.array(Y)\n", + "\n", + " return rnn_input, rnn_output\n", + "\n", + "\n", + "# ## Defining the Recurrent Neural Network Using Keras\n", + "# \n", + "# The following method defines a simple recurrent neural network in keras consisting of one input layer, one hidden layer, and one output layer.\n", + "\n", + "def rnn(length_of_sequences, batch_size = None, stateful = False):\n", + " \"\"\"\n", + " Inputs:\n", + " length_of_sequences (an int): the number of y values in \"x data\". This is determined\n", + " when the data is formatted\n", + " batch_size (an int): Default value is None. See Keras documentation of SimpleRNN.\n", + " stateful (a boolean): Default value is False. See Keras documentation of SimpleRNN.\n", + " Returns:\n", + " model (a Keras model): The recurrent neural network that is built and compiled by this\n", + " method\n", + " Builds and compiles a recurrent neural network with one hidden layer and returns the model.\n", + " \"\"\"\n", + " # Number of neurons in the input and output layers\n", + " in_out_neurons = 1\n", + " # Number of neurons in the hidden layer\n", + " hidden_neurons = 200\n", + " # Define the input layer\n", + " inp = Input(batch_shape=(batch_size, \n", + " length_of_sequences, \n", + " in_out_neurons)) \n", + " # Define the hidden layer as a simple RNN layer with a set number of neurons and add it to \n", + " # the network immediately after the input layer\n", + " rnn = SimpleRNN(hidden_neurons, \n", + " return_sequences=False,\n", + " stateful = stateful,\n", + " name=\"RNN\")(inp)\n", + " # Define the output layer as a dense neural network layer (standard neural network layer)\n", + " #and add it to the network immediately after the hidden layer.\n", + " dens = Dense(in_out_neurons,name=\"dense\")(rnn)\n", + " # Create the machine learning model starting with the input layer and ending with the \n", + " # output layer\n", + " model = Model(inputs=[inp],outputs=[dens])\n", + " # Compile the machine learning model using the mean squared error function as the loss \n", + " # function and an Adams optimizer.\n", + " model.compile(loss=\"mean_squared_error\", optimizer=\"adam\") \n", + " return model" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Predicting New Points With A Trained Recurrent Neural Network" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: \"functional_1\"\n", + "_________________________________________________________________\n", + "Layer (type) Output Shape Param # \n", + "=================================================================\n", + "input_1 (InputLayer) [(None, 2, 1)] 0 \n", + "_________________________________________________________________\n", + "RNN (SimpleRNN) (None, 200) 40400 \n", + "_________________________________________________________________\n", + "dense (Dense) (None, 1) 201 \n", + "=================================================================\n", + "Total params: 40,601\n", + "Trainable params: 40,601\n", + "Non-trainable params: 0\n", + "_________________________________________________________________\n", + "Epoch 1/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.1614" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 168ms/step - loss: 0.1614 - val_loss: 0.1927\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 2/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0681" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0681 - val_loss: 0.0356\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 3/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0154" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 0.0154 - val_loss: 0.0018\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 4/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 4.3675e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 4.3675e-04 - val_loss: 0.0539\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 5/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0127" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0127 - val_loss: 0.1238\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 6/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0318" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0318 - val_loss: 0.1571\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 7/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0409" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0409 - val_loss: 0.1457\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 8/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0373" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 0.0373 - val_loss: 0.1070\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 9/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0263" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 0.0263 - val_loss: 0.0618\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 10/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0140" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 0.0140 - val_loss: 0.0252\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 11/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0049" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 0.0049 - val_loss: 0.0047\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 12/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 8.9601e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 8.9601e-04 - val_loss: 1.7706e-04\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 13/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0015" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 0.0015 - val_loss: 0.0066\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 14/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0050" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0050 - val_loss: 0.0169\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 15/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0092" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0092 - val_loss: 0.0252\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 16/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0122" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0122 - val_loss: 0.0280\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 17/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0131" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 0.0131 - val_loss: 0.0249\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 18/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0119" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 0.0119 - val_loss: 0.0178\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 19/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0091" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0091 - val_loss: 0.0095\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 20/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0057" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 0.0057 - val_loss: 0.0029\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 21/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0028" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 0.0028 - val_loss: 5.1024e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 22/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 9.3047e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 9.3047e-04 - val_loss: 0.0015\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 23/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 4.2170e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 4.2170e-04 - val_loss: 0.0064\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 24/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0011" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 0.0011 - val_loss: 0.0127\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 25/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0024" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 0.0024 - val_loss: 0.0182\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 26/150" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0037" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 0.0037 - val_loss: 0.0210\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 27/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0044" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 0.0044 - val_loss: 0.0205\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 28/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0043" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 0.0043 - val_loss: 0.0170\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 29/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0035" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 0.0035 - val_loss: 0.0118\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 30/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0024" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 0.0024 - val_loss: 0.0066\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 31/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0012" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 0.0012 - val_loss: 0.0026\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 32/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 4.1938e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 4.1938e-04 - val_loss: 4.2108e-04\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 33/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.4696e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 1.4696e-04 - val_loss: 4.9351e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 34/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 3.3515e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 3.3515e-04 - val_loss: 8.7654e-04\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 35/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 7.8864e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 7.8864e-04 - val_loss: 0.0021\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 36/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0013" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 0.0013 - val_loss: 0.0030\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 37/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0015" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 0.0015 - val_loss: 0.0031\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 38/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0015" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0015 - val_loss: 0.0026\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 39/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0013" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 0.0013 - val_loss: 0.0016\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 40/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 8.4817e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 8.4817e-04 - val_loss: 5.9712e-04\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 41/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 4.1960e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 4.1960e-04 - val_loss: 5.1834e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 42/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.2261e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 1.2261e-04 - val_loss: 1.0502e-04\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 43/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 2.5307e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 2.5307e-05 - val_loss: 6.7755e-04\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 44/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.1302e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 1.1302e-04 - val_loss: 0.0015\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 45/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 3.0417e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 3.0417e-04 - val_loss: 0.0022\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 46/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 4.9066e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 4.9066e-04 - val_loss: 0.0025\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 47/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 5.8441e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 5.8441e-04 - val_loss: 0.0023\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 48/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 5.5018e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 5.5018e-04 - val_loss: 0.0017\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 49/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 4.1198e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 4.1198e-04 - val_loss: 9.9305e-04\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 50/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 2.3364e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 2.3364e-04 - val_loss: 3.8335e-04\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 51/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 8.5796e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 8.5796e-05 - val_loss: 4.9130e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 52/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.5314e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 1.5314e-05 - val_loss: 2.2907e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 53/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 2.9857e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 2.9857e-05 - val_loss: 2.1308e-04\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 54/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.0133e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 1.0133e-04 - val_loss: 4.6367e-04\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 55/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.8355e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 1.8355e-04 - val_loss: 6.2971e-04\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 56/150" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 2.3446e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 2.3446e-04 - val_loss: 6.3475e-04\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 57/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 2.3285e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 2.3285e-04 - val_loss: 4.9020e-04\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 58/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.8382e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 1.8382e-04 - val_loss: 2.7457e-04\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 59/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.1231e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 1.1231e-04 - val_loss: 8.7585e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 60/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 4.9274e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 4.9274e-05 - val_loss: 2.2688e-06\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 61/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.7310e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 1.7310e-05 - val_loss: 3.5831e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 62/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 2.1970e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 2.1970e-05 - val_loss: 1.4969e-04\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 63/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 5.1827e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 5.1827e-05 - val_loss: 2.7475e-04\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 64/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 8.6183e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 8.6183e-05 - val_loss: 3.4722e-04\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 65/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.0592e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 1.0592e-04 - val_loss: 3.3682e-04\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 66/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.0207e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 1.0207e-04 - val_loss: 2.5532e-04\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 67/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 7.8321e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 7.8321e-05 - val_loss: 1.4419e-04\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 68/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 4.7236e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 4.7236e-05 - val_loss: 5.0422e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 69/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 2.2810e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 2.2810e-05 - val_loss: 3.9370e-06\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 70/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.3631e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 19ms/step - loss: 1.3631e-05 - val_loss: 7.0204e-06\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 71/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.9720e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 1.9720e-05 - val_loss: 3.8779e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 72/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 3.3982e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 3.3982e-05 - val_loss: 6.9903e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 73/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 4.6795e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 19ms/step - loss: 4.6795e-05 - val_loss: 7.8865e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 74/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 5.1028e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 5.1028e-05 - val_loss: 6.1482e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 75/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 4.5036e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 4.5036e-05 - val_loss: 3.0208e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 76/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 3.2523e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 3.2523e-05 - val_loss: 5.0685e-06\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 77/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.9844e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 1.9844e-05 - val_loss: 1.9610e-06\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 78/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.2452e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 1.2452e-05 - val_loss: 2.4494e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 79/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.2335e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 1.2335e-05 - val_loss: 6.3044e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 80/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.7583e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 1.7583e-05 - val_loss: 1.0059e-04\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 81/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 2.3980e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 2.3980e-05 - val_loss: 1.2157e-04\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 82/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 2.7513e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 2.7513e-05 - val_loss: 1.1890e-04\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 83/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 2.6387e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 2.6387e-05 - val_loss: 9.5984e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 84/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 2.1564e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 2.1564e-05 - val_loss: 6.3446e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 85/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.5803e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 1.5803e-05 - val_loss: 3.3027e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 86/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.1910e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 1.1910e-05 - val_loss: 1.2295e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 87/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.1264e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 1.1264e-05 - val_loss: 2.4889e-06\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 88/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.3337e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 1.3337e-05 - val_loss: 4.8689e-08\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 89/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.6291e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 1.6291e-05 - val_loss: 1.6905e-07\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 90/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.8174e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 1.8174e-05 - val_loss: 8.0057e-08\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 91/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.7968e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 19ms/step - loss: 1.7968e-05 - val_loss: 2.7600e-07\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 92/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.5971e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 1.5971e-05 - val_loss: 3.3847e-06\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 93/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.3408e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 1.3408e-05 - val_loss: 1.1733e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 94/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.1615e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 1.1615e-05 - val_loss: 2.5258e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 95/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.1290e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 1.1290e-05 - val_loss: 4.0986e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 96/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.2221e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 1.2221e-05 - val_loss: 5.4292e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 97/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.3550e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 1.3550e-05 - val_loss: 6.1085e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 98/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.4361e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 19ms/step - loss: 1.4361e-05 - val_loss: 5.9625e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 99/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.4195e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 1.4195e-05 - val_loss: 5.1104e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 100/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.3226e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 1.3226e-05 - val_loss: 3.8767e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 101/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.2059e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 1.2059e-05 - val_loss: 2.6280e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 102/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.1312e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 1.1312e-05 - val_loss: 1.6264e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 103/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.1259e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 1.1259e-05 - val_loss: 9.6858e-06\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 104/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.1740e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 1.1740e-05 - val_loss: 6.1976e-06\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 105/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.2320e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 1.2320e-05 - val_loss: 4.9763e-06\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 106/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.2591e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 1.2591e-05 - val_loss: 5.4740e-06\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 107/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.2401e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 1.2401e-05 - val_loss: 7.6209e-06\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 108/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.1895e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 1.1895e-05 - val_loss: 1.1510e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 109/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.1385e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 1.1385e-05 - val_loss: 1.6893e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 110/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.1131e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 1.1131e-05 - val_loss: 2.2888e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 111/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.1203e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 1.1203e-05 - val_loss: 2.8135e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 112/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.1467e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 1.1467e-05 - val_loss: 3.1299e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 113/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.1704e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 1.1704e-05 - val_loss: 3.1629e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 114/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.1751e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 1.1751e-05 - val_loss: 2.9233e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 115/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.1592e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 1.1592e-05 - val_loss: 2.4977e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 116/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.1341e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 1.1341e-05 - val_loss: 2.0057e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 117/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.1148e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 1.1148e-05 - val_loss: 1.5546e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 118/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.1104e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 1.1104e-05 - val_loss: 1.2102e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 119/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.1196e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 1.1196e-05 - val_loss: 9.9551e-06\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 120/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.1329e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 1.1329e-05 - val_loss: 9.0678e-06\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 121/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.1403e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 1.1403e-05 - val_loss: 9.3212e-06\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 122/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.1372e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 1.1372e-05 - val_loss: 1.0588e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 123/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.1265e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 1.1265e-05 - val_loss: 1.2699e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 124/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.1155e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 1.1155e-05 - val_loss: 1.5344e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 125/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.1104e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 1.1104e-05 - val_loss: 1.8049e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 126/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.1126e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 1.1126e-05 - val_loss: 2.0259e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 127/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.1188e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 1.1188e-05 - val_loss: 2.1508e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 128/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.1237e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 1.1237e-05 - val_loss: 2.1579e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 129/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.1239e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 1.1239e-05 - val_loss: 2.0558e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 130/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.1197e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 1.1197e-05 - val_loss: 1.8797e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 131/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.1140e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 1.1140e-05 - val_loss: 1.6756e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 132/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.1104e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 1.1104e-05 - val_loss: 1.4866e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 133/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.1104e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 1.1104e-05 - val_loss: 1.3434e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 134/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.1131e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 1.1131e-05 - val_loss: 1.2624e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 135/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.1157e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 1.1157e-05 - val_loss: 1.2484e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 136/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.1164e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 1.1164e-05 - val_loss: 1.2973e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 137/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.1146e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 1.1146e-05 - val_loss: 1.3983e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 138/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.1119e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 1.1119e-05 - val_loss: 1.5332e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 139/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.1098e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 1.1098e-05 - val_loss: 1.6776e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 140/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.1095e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 1.1095e-05 - val_loss: 1.8043e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 141/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.1106e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 19ms/step - loss: 1.1106e-05 - val_loss: 1.8897e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 142/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.1120e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 19ms/step - loss: 1.1120e-05 - val_loss: 1.9197e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 143/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.1125e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 1.1125e-05 - val_loss: 1.8938e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 144/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.1118e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 1.1118e-05 - val_loss: 1.8237e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 145/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.1104e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 1.1104e-05 - val_loss: 1.7295e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 146/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.1093e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 1.1093e-05 - val_loss: 1.6333e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 147/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.1091e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 1.1091e-05 - val_loss: 1.5537e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 148/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.1096e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 1.1096e-05 - val_loss: 1.5039e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 149/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.1103e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 1.1103e-05 - val_loss: 1.4898e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 150/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.1105e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 1.1105e-05 - val_loss: 1.5105e-05\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "filenames": { + "image/png": "/Users/hjensen/Teaching/FYS-STK4150/doc/src/LectureNotes/_build/jupyter_execute/chapter10_7_411.png" + }, + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "MSE: 9.884935143687282e-05\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "filenames": { + "image/png": "/Users/hjensen/Teaching/FYS-STK4150/doc/src/LectureNotes/_build/jupyter_execute/chapter10_7_413.png" + }, + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Time: 4.521348709999998\n" + ] + } + ], + "source": [ + "def test_rnn (x1, y_test, plot_min, plot_max):\n", + " \"\"\"\n", + " Inputs:\n", + " x1 (a list or numpy array): The complete x component of the data set\n", + " y_test (a list or numpy array): The complete y component of the data set\n", + " plot_min (an int or float): the smallest x value used in the training data\n", + " plot_max (an int or float): the largest x valye used in the training data\n", + " Returns:\n", + " None.\n", + " Uses a trained recurrent neural network model to predict future points in the \n", + " series. Computes the MSE of the predicted data set from the true data set, saves\n", + " the predicted data set to a csv file, and plots the predicted and true data sets w\n", + " while also displaying the data range used for training.\n", + " \"\"\"\n", + " # Add the training data as the first dim points in the predicted data array as these\n", + " # are known values.\n", + " y_pred = y_test[:dim].tolist()\n", + " # Generate the first input to the trained recurrent neural network using the last two \n", + " # points of the training data. Based on how the network was trained this means that it\n", + " # will predict the first point in the data set after the training data. All of the \n", + " # brackets are necessary for Tensorflow.\n", + " next_input = np.array([[[y_test[dim-2]], [y_test[dim-1]]]])\n", + " # Save the very last point in the training data set. This will be used later.\n", + " last = [y_test[dim-1]]\n", + "\n", + " # Iterate until the complete data set is created.\n", + " for i in range (dim, len(y_test)):\n", + " # Predict the next point in the data set using the previous two points.\n", + " next = model.predict(next_input)\n", + " # Append just the number of the predicted data set\n", + " y_pred.append(next[0][0])\n", + " # Create the input that will be used to predict the next data point in the data set.\n", + " next_input = np.array([[last, next[0]]], dtype=np.float64)\n", + " last = next\n", + "\n", + " # Print the mean squared error between the known data set and the predicted data set.\n", + " print('MSE: ', np.square(np.subtract(y_test, y_pred)).mean())\n", + " # Save the predicted data set as a csv file for later use\n", + " name = datatype + 'Predicted'+str(dim)+'.csv'\n", + " np.savetxt(name, y_pred, delimiter=',')\n", + " # Plot the known data set and the predicted data set. The red box represents the region that was used\n", + " # for the training data.\n", + " fig, ax = plt.subplots()\n", + " ax.plot(x1, y_test, label=\"true\", linewidth=3)\n", + " ax.plot(x1, y_pred, 'g-.',label=\"predicted\", linewidth=4)\n", + " ax.legend()\n", + " # Created a red region to represent the points used in the training data.\n", + " ax.axvspan(plot_min, plot_max, alpha=0.25, color='red')\n", + " plt.show()\n", + "\n", + "# Check to make sure the data set is complete\n", + "assert len(X_tot) == len(y_tot)\n", + "\n", + "# This is the number of points that will be used in as the training data\n", + "dim=12\n", + "\n", + "# Separate the training data from the whole data set\n", + "X_train = X_tot[:dim]\n", + "y_train = y_tot[:dim]\n", + "\n", + "\n", + "# Generate the training data for the RNN, using a sequence of 2\n", + "rnn_input, rnn_training = format_data(y_train, 2)\n", + "\n", + "\n", + "# Create a recurrent neural network in Keras and produce a summary of the \n", + "# machine learning model\n", + "model = rnn(length_of_sequences = rnn_input.shape[1])\n", + "model.summary()\n", + "\n", + "# Start the timer. Want to time training+testing\n", + "start = timer()\n", + "# Fit the model using the training data genenerated above using 150 training iterations and a 5%\n", + "# validation split. Setting verbose to True prints information about each training iteration.\n", + "hist = model.fit(rnn_input, rnn_training, batch_size=None, epochs=150, \n", + " verbose=True,validation_split=0.05)\n", + "\n", + "for label in [\"loss\",\"val_loss\"]:\n", + " plt.plot(hist.history[label],label=label)\n", + "\n", + "plt.ylabel(\"loss\")\n", + "plt.xlabel(\"epoch\")\n", + "plt.title(\"The final validation loss: {}\".format(hist.history[\"val_loss\"][-1]))\n", + "plt.legend()\n", + "plt.show()\n", + "\n", + "# Use the trained neural network to predict more points of the data set\n", + "test_rnn(X_tot, y_tot, X_tot[0], X_tot[dim-1])\n", + "# Stop the timer and calculate the total time needed.\n", + "end = timer()\n", + "print('Time: ', end-start)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Other Things to Try\n", + "\n", + "\n", + "Changing the size of the recurrent neural network and its parameters\n", + "can drastically change the results you get from the model. The below\n", + "code takes the simple recurrent neural network from above and adds a\n", + "second hidden layer, changes the number of neurons in the hidden\n", + "layer, and explicitly declares the activation function of the hidden\n", + "layers to be a sigmoid function. The loss function and optimizer can\n", + "also be changed but are kept the same as the above network. These\n", + "parameters can be tuned to provide the optimal result from the\n", + "network. For some ideas on how to improve the performance of a\n", + "[recurrent neural network](https://danijar.com/tips-for-training-recurrent-neural-networks)." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: \"functional_3\"\n", + "_________________________________________________________________\n", + "Layer (type) Output Shape Param # \n", + "=================================================================\n", + "input_2 (InputLayer) [(None, 2, 1)] 0 \n", + "_________________________________________________________________\n", + "RNN1 (SimpleRNN) (None, 2, 500) 251000 \n", + "_________________________________________________________________\n", + "RNN2 (SimpleRNN) (None, 500) 500500 \n", + "_________________________________________________________________\n", + "dense (Dense) (None, 1) 501 \n", + "=================================================================\n", + "Total params: 752,001\n", + "Trainable params: 752,001\n", + "Non-trainable params: 0\n", + "_________________________________________________________________\n", + "Epoch 1/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.4176" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 227ms/step - loss: 1.4176 - val_loss: 3.6488\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 2/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 5.4802" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 5.4802 - val_loss: 0.5738\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 3/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.4330" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 1.4330 - val_loss: 0.8091\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 4/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.2697" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.2697 - val_loss: 3.5191\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 5/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 2.1554" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 2.1554 - val_loss: 3.2451\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 6/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.9444" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 1.9444 - val_loss: 1.2933\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 7/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.5533" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.5533 - val_loss: 0.1028\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 8/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0521" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0521 - val_loss: 0.1031\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 9/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.5942" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.5942 - val_loss: 0.3703\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 10/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.1041" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 1.1041 - val_loss: 0.2869\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 11/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.9592" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.9592 - val_loss: 0.0406\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 12/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.4307" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.4307 - val_loss: 0.0672\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 13/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0683" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0683 - val_loss: 0.5012\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 14/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.1235" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.1235 - val_loss: 1.0556\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 15/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.4083" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 19ms/step - loss: 0.4083 - val_loss: 1.3256\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 16/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.5737" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.5737 - val_loss: 1.1606\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 17/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.4712" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.4712 - val_loss: 0.7278\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 18/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.2276" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.2276 - val_loss: 0.3054\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 19/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0589" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0589 - val_loss: 0.0652\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 20/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0695" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0695 - val_loss: 8.7287e-04\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 21/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.1958" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.1958 - val_loss: 0.0067\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 22/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.2957" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.2957 - val_loss: 0.0046\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 23/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.2815" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 20ms/step - loss: 0.2815 - val_loss: 0.0030\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 24/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.1768" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 20ms/step - loss: 0.1768 - val_loss: 0.0605\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 25/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0727" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0727 - val_loss: 0.2095\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 26/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0430" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0430 - val_loss: 0.4103\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 27/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0896" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 19ms/step - loss: 0.0896 - val_loss: 0.5719\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 28/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.1536" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.1536 - val_loss: 0.6165\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 29/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.1739" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.1739 - val_loss: 0.5322\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 30/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.1365" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 19ms/step - loss: 0.1365 - val_loss: 0.3724\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 31/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0773" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0773 - val_loss: 0.2118\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 32/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0432" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0432 - val_loss: 0.0999\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 33/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0528" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0528 - val_loss: 0.0440\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 34/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0865" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 19ms/step - loss: 0.0865 - val_loss: 0.0261\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 35/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.1092" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.1092 - val_loss: 0.0315\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 36/150" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.1012" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.1012 - val_loss: 0.0612\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 37/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0719" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 19ms/step - loss: 0.0719 - val_loss: 0.1231\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 38/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0466" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0466 - val_loss: 0.2126\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 39/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0432" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0432 - val_loss: 0.3043\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 40/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0587" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0587 - val_loss: 0.3636\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 41/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0747" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0747 - val_loss: 0.3676\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 42/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0759" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0759 - val_loss: 0.3193\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 43/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0623" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0623 - val_loss: 0.2431\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 44/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0468" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0468 - val_loss: 0.1684\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 45/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0417" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0417 - val_loss: 0.1143\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 46/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0485" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0485 - val_loss: 0.0857\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 47/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0580" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0580 - val_loss: 0.0803\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 48/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0605" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 19ms/step - loss: 0.0605 - val_loss: 0.0955\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 49/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0540" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 19ms/step - loss: 0.0540 - val_loss: 0.1299\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 50/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0452" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 19ms/step - loss: 0.0452 - val_loss: 0.1782\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 51/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0415" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0415 - val_loss: 0.2284\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 52/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0448" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0448 - val_loss: 0.2639\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 53/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0502" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0502 - val_loss: 0.2725\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 54/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0518" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0518 - val_loss: 0.2531\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 55/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0483" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0483 - val_loss: 0.2155\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 56/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0434" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 19ms/step - loss: 0.0434 - val_loss: 0.1742\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 57/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0415" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0415 - val_loss: 0.1411\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 58/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0435" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0435 - val_loss: 0.1224\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 59/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0464" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0464 - val_loss: 0.1194\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 60/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0470" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0470 - val_loss: 0.1310\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 61/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0448" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0448 - val_loss: 0.1544\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 62/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0422" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 19ms/step - loss: 0.0422 - val_loss: 0.1836\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 63/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0415" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 19ms/step - loss: 0.0415 - val_loss: 0.2101\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 64/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0429" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0429 - val_loss: 0.2253\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 65/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0444" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0444 - val_loss: 0.2246\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 66/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0443" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0443 - val_loss: 0.2096\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 67/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0428" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0428 - val_loss: 0.1869\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 68/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0415" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0415 - val_loss: 0.1645\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 69/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0415" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0415 - val_loss: 0.1485\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 70/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0425" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 20ms/step - loss: 0.0425 - val_loss: 0.1423\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 71/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0431" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 19ms/step - loss: 0.0431 - val_loss: 0.1461\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 72/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0427" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0427 - val_loss: 0.1584\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 73/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0418" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 19ms/step - loss: 0.0418 - val_loss: 0.1752\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 74/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0413" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 20ms/step - loss: 0.0413 - val_loss: 0.1915\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 75/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0416" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 19ms/step - loss: 0.0416 - val_loss: 0.2018\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 76/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0421" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0421 - val_loss: 0.2030\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 77/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0422" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 19ms/step - loss: 0.0422 - val_loss: 0.1955\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 78/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0418" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0418 - val_loss: 0.1827\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 79/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0413" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 21ms/step - loss: 0.0413 - val_loss: 0.1693\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 80/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0413" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0413 - val_loss: 0.1595\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 81/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0416" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 19ms/step - loss: 0.0416 - val_loss: 0.1557\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 82/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0418" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0418 - val_loss: 0.1584\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 83/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0416" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0416 - val_loss: 0.1662\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 84/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0413" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0413 - val_loss: 0.1764\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 85/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0411" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0411 - val_loss: 0.1856\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 86/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0413" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0413 - val_loss: 0.1906\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 87/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0414" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0414 - val_loss: 0.1899\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 88/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0414" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0414 - val_loss: 0.1844\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 89/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0412" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 20ms/step - loss: 0.0412 - val_loss: 0.1764\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 90/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0411" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0411 - val_loss: 0.1688\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 91/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0411" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0411 - val_loss: 0.1641\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 92/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0412" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0412 - val_loss: 0.1634\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 93/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0412" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0412 - val_loss: 0.1666\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 94/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0411" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0411 - val_loss: 0.1723\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 95/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0410" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0410 - val_loss: 0.1783\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 96/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0410" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0410 - val_loss: 0.1826\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 97/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0411" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0411 - val_loss: 0.1836\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 98/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0411" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0411 - val_loss: 0.1814\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 99/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0410" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0410 - val_loss: 0.1769\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 100/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0409" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 19ms/step - loss: 0.0409 - val_loss: 0.1720\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 101/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0409" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 20ms/step - loss: 0.0409 - val_loss: 0.1684\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 102/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0409" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0409 - val_loss: 0.1673\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 103/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0409" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0409 - val_loss: 0.1687\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 104/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0409" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0409 - val_loss: 0.1719\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 105/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0409" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 19ms/step - loss: 0.0409 - val_loss: 0.1756\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 106/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0408" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0408 - val_loss: 0.1784\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 107/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0408" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 20ms/step - loss: 0.0408 - val_loss: 0.1793\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 108/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0408" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 20ms/step - loss: 0.0408 - val_loss: 0.1781\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 109/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0408" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 19ms/step - loss: 0.0408 - val_loss: 0.1754\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 110/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0408" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0408 - val_loss: 0.1723\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 111/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0408" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 21ms/step - loss: 0.0408 - val_loss: 0.1701\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 112/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0408" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0408 - val_loss: 0.1693\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 113/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0407" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0407 - val_loss: 0.1702\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 114/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0407" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0407 - val_loss: 0.1722\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 115/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0407" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0407 - val_loss: 0.1745\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 116/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0407" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0407 - val_loss: 0.1760\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 117/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0407" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0407 - val_loss: 0.1764\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 118/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0407" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0407 - val_loss: 0.1754\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 119/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0406" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0406 - val_loss: 0.1736\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 120/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0406" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 19ms/step - loss: 0.0406 - val_loss: 0.1718\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 121/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0406" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0406 - val_loss: 0.1705\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 122/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0406" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0406 - val_loss: 0.1703\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 123/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0406" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0406 - val_loss: 0.1711\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 124/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0405" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0405 - val_loss: 0.1724\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 125/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0405" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0405 - val_loss: 0.1737\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 126/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0405" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0405 - val_loss: 0.1744\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 127/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0405" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0405 - val_loss: 0.1742\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 128/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0405" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 20ms/step - loss: 0.0405 - val_loss: 0.1734\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 129/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0405" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0405 - val_loss: 0.1721\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 130/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0404" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0404 - val_loss: 0.1711\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 131/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0404" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0404 - val_loss: 0.1706\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 132/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0404" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0404 - val_loss: 0.1707\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 133/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0404" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 19ms/step - loss: 0.0404 - val_loss: 0.1714\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 134/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0404" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0404 - val_loss: 0.1722\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 135/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0403" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 20ms/step - loss: 0.0403 - val_loss: 0.1728\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 136/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0403" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0403 - val_loss: 0.1729\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 137/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0403" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0403 - val_loss: 0.1725\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 138/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0403" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0403 - val_loss: 0.1717\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 139/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0403" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0403 - val_loss: 0.1710\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 140/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0402" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0402 - val_loss: 0.1705\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 141/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0402" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0402 - val_loss: 0.1704\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 142/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0402" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0402 - val_loss: 0.1707\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 143/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0402" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0402 - val_loss: 0.1712\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 144/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0402" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0402 - val_loss: 0.1716\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 145/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0402" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0402 - val_loss: 0.1717\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 146/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0401" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 19ms/step - loss: 0.0401 - val_loss: 0.1715\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 147/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0401" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0401 - val_loss: 0.1710\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 148/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0401" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0401 - val_loss: 0.1705\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 149/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0401" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0401 - val_loss: 0.1701\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 150/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0401" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 20ms/step - loss: 0.0401 - val_loss: 0.1699\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "filenames": { + "image/png": "/Users/hjensen/Teaching/FYS-STK4150/doc/src/LectureNotes/_build/jupyter_execute/chapter10_9_421.png" + }, + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "MSE: 0.32920351498520983\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "filenames": { + "image/png": "/Users/hjensen/Teaching/FYS-STK4150/doc/src/LectureNotes/_build/jupyter_execute/chapter10_9_423.png" + }, + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Time: 6.260979576\n" + ] + } + ], + "source": [ + "def rnn_2layers(length_of_sequences, batch_size = None, stateful = False):\n", + " \"\"\"\n", + " Inputs:\n", + " length_of_sequences (an int): the number of y values in \"x data\". This is determined\n", + " when the data is formatted\n", + " batch_size (an int): Default value is None. See Keras documentation of SimpleRNN.\n", + " stateful (a boolean): Default value is False. See Keras documentation of SimpleRNN.\n", + " Returns:\n", + " model (a Keras model): The recurrent neural network that is built and compiled by this\n", + " method\n", + " Builds and compiles a recurrent neural network with two hidden layers and returns the model.\n", + " \"\"\"\n", + " # Number of neurons in the input and output layers\n", + " in_out_neurons = 1\n", + " # Number of neurons in the hidden layer, increased from the first network\n", + " hidden_neurons = 500\n", + " # Define the input layer\n", + " inp = Input(batch_shape=(batch_size, \n", + " length_of_sequences, \n", + " in_out_neurons)) \n", + " # Create two hidden layers instead of one hidden layer. Explicitly set the activation\n", + " # function to be the sigmoid function (the default value is hyperbolic tangent)\n", + " rnn1 = SimpleRNN(hidden_neurons, \n", + " return_sequences=True, # This needs to be True if another hidden layer is to follow\n", + " stateful = stateful, activation = 'sigmoid',\n", + " name=\"RNN1\")(inp)\n", + " rnn2 = SimpleRNN(hidden_neurons, \n", + " return_sequences=False, activation = 'sigmoid',\n", + " stateful = stateful,\n", + " name=\"RNN2\")(rnn1)\n", + " # Define the output layer as a dense neural network layer (standard neural network layer)\n", + " #and add it to the network immediately after the hidden layer.\n", + " dens = Dense(in_out_neurons,name=\"dense\")(rnn2)\n", + " # Create the machine learning model starting with the input layer and ending with the \n", + " # output layer\n", + " model = Model(inputs=[inp],outputs=[dens])\n", + " # Compile the machine learning model using the mean squared error function as the loss \n", + " # function and an Adams optimizer.\n", + " model.compile(loss=\"mean_squared_error\", optimizer=\"adam\") \n", + " return model\n", + "\n", + "# Check to make sure the data set is complete\n", + "assert len(X_tot) == len(y_tot)\n", + "\n", + "# This is the number of points that will be used in as the training data\n", + "dim=12\n", + "\n", + "# Separate the training data from the whole data set\n", + "X_train = X_tot[:dim]\n", + "y_train = y_tot[:dim]\n", + "\n", + "\n", + "# Generate the training data for the RNN, using a sequence of 2\n", + "rnn_input, rnn_training = format_data(y_train, 2)\n", + "\n", + "\n", + "# Create a recurrent neural network in Keras and produce a summary of the \n", + "# machine learning model\n", + "model = rnn_2layers(length_of_sequences = 2)\n", + "model.summary()\n", + "\n", + "# Start the timer. Want to time training+testing\n", + "start = timer()\n", + "# Fit the model using the training data genenerated above using 150 training iterations and a 5%\n", + "# validation split. Setting verbose to True prints information about each training iteration.\n", + "hist = model.fit(rnn_input, rnn_training, batch_size=None, epochs=150, \n", + " verbose=True,validation_split=0.05)\n", + "\n", + "\n", + "# This section plots the training loss and the validation loss as a function of training iteration.\n", + "# This is not required for analyzing the couple cluster data but can help determine if the network is\n", + "# being overtrained.\n", + "for label in [\"loss\",\"val_loss\"]:\n", + " plt.plot(hist.history[label],label=label)\n", + "\n", + "plt.ylabel(\"loss\")\n", + "plt.xlabel(\"epoch\")\n", + "plt.title(\"The final validation loss: {}\".format(hist.history[\"val_loss\"][-1]))\n", + "plt.legend()\n", + "plt.show()\n", + "\n", + "# Use the trained neural network to predict more points of the data set\n", + "test_rnn(X_tot, y_tot, X_tot[0], X_tot[dim-1])\n", + "# Stop the timer and calculate the total time needed.\n", + "end = timer()\n", + "print('Time: ', end-start)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Other Types of Recurrent Neural Networks\n", + "\n", + "Besides a simple recurrent neural network layer, there are two other\n", + "commonly used types of recurrent neural network layers: Long Short\n", + "Term Memory (LSTM) and Gated Recurrent Unit (GRU). For a short\n", + "introduction to these layers see \n", + "and .\n", + "\n", + "The first network created below is similar to the previous network,\n", + "but it replaces the SimpleRNN layers with LSTM layers. The second\n", + "network below has two hidden layers made up of GRUs, which are\n", + "preceeded by two dense (feeddorward) neural network layers. These\n", + "dense layers \"preprocess\" the data before it reaches the recurrent\n", + "layers. This architecture has been shown to improve the performance\n", + "of recurrent neural networks (see the link above and also\n", + "." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: \"functional_5\"\n", + "_________________________________________________________________\n", + "Layer (type) Output Shape Param # \n", + "=================================================================\n", + "input_3 (InputLayer) [(None, 2, 1)] 0 \n", + "_________________________________________________________________\n", + "dnn (Dense) (None, 2, 125) 250 \n", + "_________________________________________________________________\n", + "dnn1 (Dense) (None, 2, 125) 15750 \n", + "_________________________________________________________________\n", + "RNN1 (GRU) (None, 2, 250) 282750 \n", + "_________________________________________________________________\n", + "RNN (GRU) (None, 250) 376500 \n", + "_________________________________________________________________\n", + "dense (Dense) (None, 1) 251 \n", + "=================================================================\n", + "Total params: 675,501\n", + "Trainable params: 675,501\n", + "Non-trainable params: 0\n", + "_________________________________________________________________\n", + "Epoch 1/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.2339" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 1s 653ms/step - loss: 0.2339 - val_loss: 0.5383\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 2/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.1652" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 19ms/step - loss: 0.1652 - val_loss: 0.3519\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 3/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.1008" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 19ms/step - loss: 0.1008 - val_loss: 0.1726\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 4/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0430" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0430 - val_loss: 0.0348\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 5/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0070" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 20ms/step - loss: 0.0070 - val_loss: 0.0070\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 6/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0194" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0194 - val_loss: 0.0534\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 7/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0503" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0503 - val_loss: 0.0415\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 8/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0430" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0430 - val_loss: 0.0088\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 9/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0204" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0204 - val_loss: 0.0014\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 10/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0061" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0061 - val_loss: 0.0239\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 11/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0052" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 19ms/step - loss: 0.0052 - val_loss: 0.0584\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 12/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0120" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 19ms/step - loss: 0.0120 - val_loss: 0.0860\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 13/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0191" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0191 - val_loss: 0.0977\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 14/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0225" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0225 - val_loss: 0.0928\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 15/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0213" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0213 - val_loss: 0.0754\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 16/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0166" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0166 - val_loss: 0.0516\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 17/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0106" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 19ms/step - loss: 0.0106 - val_loss: 0.0278\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 18/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0056" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0056 - val_loss: 0.0099\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 19/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0032" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0032 - val_loss: 0.0011\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 20/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0042" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0042 - val_loss: 4.2492e-04\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 21/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0072" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0072 - val_loss: 0.0028\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 22/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0096" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0096 - val_loss: 0.0035\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 23/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0094" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0094 - val_loss: 0.0016\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 24/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0068" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0068 - val_loss: 2.1770e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 25/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0037" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0037 - val_loss: 0.0014\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 26/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0017" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 20ms/step - loss: 0.0017 - val_loss: 0.0061\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 27/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0015" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0015 - val_loss: 0.0121\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 28/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0025" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0025 - val_loss: 0.0166\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 29/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0037" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0037 - val_loss: 0.0177\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 30/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0042" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0042 - val_loss: 0.0151\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 31/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0037" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0037 - val_loss: 0.0101\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 32/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0024" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0024 - val_loss: 0.0046\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 33/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0011" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 19ms/step - loss: 0.0011 - val_loss: 8.8886e-04\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 34/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 2.7391e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 2.7391e-04 - val_loss: 6.9638e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 35/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 3.0805e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 3.0805e-04 - val_loss: 0.0016\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 36/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 9.6065e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 9.6065e-04 - val_loss: 0.0037\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 37/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0016" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0016 - val_loss: 0.0045\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 38/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0016" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0016 - val_loss: 0.0035\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 39/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0011" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0011 - val_loss: 0.0016\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 40/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 3.6501e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 3.6501e-04 - val_loss: 2.5101e-04\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 41/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 5.2387e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 19ms/step - loss: 5.2387e-05 - val_loss: 4.9809e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 42/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 2.7319e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 19ms/step - loss: 2.7319e-04 - val_loss: 5.0112e-04\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 43/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 7.0581e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 7.0581e-04 - val_loss: 7.5034e-04\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 44/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 9.3238e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 19ms/step - loss: 9.3238e-04 - val_loss: 5.0648e-04\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 45/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 8.0866e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 8.0866e-04 - val_loss: 9.4408e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 46/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 4.7288e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 4.7288e-04 - val_loss: 5.9254e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 47/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.8597e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 20ms/step - loss: 1.8597e-04 - val_loss: 6.7079e-04\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 48/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.2584e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 20ms/step - loss: 1.2584e-04 - val_loss: 0.0017\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 49/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 2.6867e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 2.6867e-04 - val_loss: 0.0024\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 50/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 4.3826e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 19ms/step - loss: 4.3826e-04 - val_loss: 0.0025\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 51/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 4.6733e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 4.6733e-04 - val_loss: 0.0018\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 52/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 3.3438e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 3.3438e-04 - val_loss: 9.4701e-04\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 53/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.5339e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 1.5339e-04 - val_loss: 2.6460e-04\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 54/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 5.4331e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 5.4331e-05 - val_loss: 6.5156e-06\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 55/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 7.7712e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 7.7712e-05 - val_loss: 6.1830e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 56/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.6479e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 1.6479e-04 - val_loss: 1.8163e-04\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 57/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 2.2423e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 2.2423e-04 - val_loss: 1.9299e-04\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 58/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 2.0515e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 19ms/step - loss: 2.0515e-04 - val_loss: 9.4929e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 59/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.2535e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 1.2535e-04 - val_loss: 6.2223e-06\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 60/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 4.6826e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 4.6826e-05 - val_loss: 3.4402e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 61/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 2.2165e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 2.2165e-05 - val_loss: 1.7489e-04\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 62/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 5.5691e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 5.5691e-05 - val_loss: 3.1733e-04\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 63/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.0595e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 1.0595e-04 - val_loss: 3.4700e-04\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 64/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.2525e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 1.2525e-04 - val_loss: 2.4500e-04\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 65/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 9.9924e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 9.9924e-05 - val_loss: 9.6135e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 66/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 5.5901e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 5.5901e-05 - val_loss: 6.8225e-06\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 67/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 2.9911e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 2.9911e-05 - val_loss: 1.7879e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 68/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 3.7141e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 3.7141e-05 - val_loss: 8.5801e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 69/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 6.3071e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 6.3071e-05 - val_loss: 1.3386e-04\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 70/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 8.0889e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 8.0889e-05 - val_loss: 1.1862e-04\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 71/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 7.5159e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 20ms/step - loss: 7.5159e-05 - val_loss: 5.8102e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 72/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 5.2129e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 5.2129e-05 - val_loss: 7.2266e-06\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 73/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 3.1149e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 20ms/step - loss: 3.1149e-05 - val_loss: 7.1946e-06\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 74/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 2.6803e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 20ms/step - loss: 2.6803e-05 - val_loss: 5.2427e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 75/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 3.7385e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 24ms/step - loss: 3.7385e-05 - val_loss: 1.0039e-04\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 76/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 4.8700e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 4.8700e-05 - val_loss: 1.1159e-04\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 77/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 4.8312e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 20ms/step - loss: 4.8312e-05 - val_loss: 8.1357e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 78/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 3.6325e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 21ms/step - loss: 3.6325e-05 - val_loss: 3.6670e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 79/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 2.3281e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 19ms/step - loss: 2.3281e-05 - val_loss: 6.9527e-06\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 80/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.9011e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 1.9011e-05 - val_loss: 6.2134e-08\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 81/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 2.4047e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 20ms/step - loss: 2.4047e-05 - val_loss: 3.3985e-06\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 82/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 3.0829e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 25ms/step - loss: 3.0829e-05 - val_loss: 3.1615e-06\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 83/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 3.1812e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 20ms/step - loss: 3.1812e-05 - val_loss: 1.7273e-08\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 84/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 2.6124e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 19ms/step - loss: 2.6124e-05 - val_loss: 6.8793e-06\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 85/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.9199e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 19ms/step - loss: 1.9199e-05 - val_loss: 3.3150e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 86/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.6832e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 1.6832e-05 - val_loss: 7.2050e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 87/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.9787e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 19ms/step - loss: 1.9787e-05 - val_loss: 1.0364e-04\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 88/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 2.3840e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 19ms/step - loss: 2.3840e-05 - val_loss: 1.1049e-04\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 89/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 2.4491e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 24ms/step - loss: 2.4491e-05 - val_loss: 9.1017e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 90/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 2.1253e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 20ms/step - loss: 2.1253e-05 - val_loss: 5.8702e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 91/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.7418e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 20ms/step - loss: 1.7418e-05 - val_loss: 2.9923e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 92/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.6259e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 19ms/step - loss: 1.6259e-05 - val_loss: 1.2810e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 93/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.7905e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 1.7905e-05 - val_loss: 6.0232e-06\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 94/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.9781e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 1.9781e-05 - val_loss: 5.3134e-06\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 95/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.9548e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 19ms/step - loss: 1.9548e-05 - val_loss: 9.3216e-06\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 96/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.7296e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 19ms/step - loss: 1.7296e-05 - val_loss: 1.9159e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 97/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.5052e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 1.5052e-05 - val_loss: 3.3857e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 98/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.4498e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 19ms/step - loss: 1.4498e-05 - val_loss: 4.7879e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 99/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.5386e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 19ms/step - loss: 1.5386e-05 - val_loss: 5.4022e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 100/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.6115e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 1.6115e-05 - val_loss: 4.8949e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 101/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.5549e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 19ms/step - loss: 1.5549e-05 - val_loss: 3.5722e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 102/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.4079e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 1.4079e-05 - val_loss: 2.1059e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 103/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.2963e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 20ms/step - loss: 1.2963e-05 - val_loss: 1.0307e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 104/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.2911e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 19ms/step - loss: 1.2911e-05 - val_loss: 4.7690e-06\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 105/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.3470e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 1.3470e-05 - val_loss: 2.9656e-06\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 106/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.3678e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 20ms/step - loss: 1.3678e-05 - val_loss: 3.4672e-06\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 107/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.3126e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 1.3126e-05 - val_loss: 6.0939e-06\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 108/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.2266e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 20ms/step - loss: 1.2266e-05 - val_loss: 1.0808e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 109/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.1796e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 19ms/step - loss: 1.1796e-05 - val_loss: 1.6232e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 110/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.1902e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 22ms/step - loss: 1.1902e-05 - val_loss: 1.9843e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 111/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.2143e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 1.2143e-05 - val_loss: 1.9755e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 112/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.2022e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 1.2022e-05 - val_loss: 1.6197e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 113/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.1506e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 20ms/step - loss: 1.1506e-05 - val_loss: 1.1183e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 114/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.0982e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 1.0982e-05 - val_loss: 6.8771e-06\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 115/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.0778e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 1.0778e-05 - val_loss: 4.3037e-06\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 116/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.0826e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 19ms/step - loss: 1.0826e-05 - val_loss: 3.4128e-06\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 117/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.0803e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 1.0803e-05 - val_loss: 3.9190e-06\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 118/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.0525e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 19ms/step - loss: 1.0525e-05 - val_loss: 5.7593e-06\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 119/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.0114e-05" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 1.0114e-05 - val_loss: 8.7378e-06\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 120/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 9.8203e-06" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 9.8203e-06 - val_loss: 1.2031e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 121/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 9.7284e-06" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 19ms/step - loss: 9.7284e-06 - val_loss: 1.4340e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 122/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 9.6966e-06" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 19ms/step - loss: 9.6966e-06 - val_loss: 1.4696e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 123/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 9.5506e-06" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 20ms/step - loss: 9.5506e-06 - val_loss: 1.3124e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 124/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 9.2787e-06" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 9.2787e-06 - val_loss: 1.0547e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 125/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 9.0185e-06" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 9.0185e-06 - val_loss: 8.0814e-06\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 126/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 8.8755e-06" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 8.8755e-06 - val_loss: 6.4479e-06\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 127/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 8.8137e-06" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 8.8137e-06 - val_loss: 5.8674e-06\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 128/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 8.7187e-06" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 8.7187e-06 - val_loss: 6.2909e-06\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 129/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 8.5374e-06" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 8.5374e-06 - val_loss: 7.5345e-06\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 130/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 8.3250e-06" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 8.3250e-06 - val_loss: 9.2095e-06\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 131/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 8.1651e-06" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 8.1651e-06 - val_loss: 1.0688e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 132/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 8.0688e-06" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 8.0688e-06 - val_loss: 1.1327e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 133/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 7.9771e-06" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 19ms/step - loss: 7.9771e-06 - val_loss: 1.0835e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 134/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 7.8467e-06" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 7.8467e-06 - val_loss: 9.4450e-06\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 135/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 7.6825e-06" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 19ms/step - loss: 7.6825e-06 - val_loss: 7.7252e-06\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 136/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 7.5362e-06" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 7.5362e-06 - val_loss: 6.2324e-06\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 137/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 7.4299e-06" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 7.4299e-06 - val_loss: 5.2841e-06\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 138/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 7.3370e-06" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 7.3370e-06 - val_loss: 4.9452e-06\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 139/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 7.2211e-06" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 19ms/step - loss: 7.2211e-06 - val_loss: 5.1307e-06\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 140/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 7.0810e-06" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 7.0810e-06 - val_loss: 5.6509e-06\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 141/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 6.9456e-06" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 6.9456e-06 - val_loss: 6.2259e-06\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 142/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 6.8358e-06" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 6.8358e-06 - val_loss: 6.5445e-06\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 143/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 6.7413e-06" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 6.7413e-06 - val_loss: 6.4017e-06\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 144/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 6.6380e-06" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 6.6380e-06 - val_loss: 5.8084e-06\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 145/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 6.5196e-06" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 6.5196e-06 - val_loss: 4.9715e-06\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 146/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 6.4007e-06" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 19ms/step - loss: 6.4007e-06 - val_loss: 4.1612e-06\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 147/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 6.2981e-06" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 6.2981e-06 - val_loss: 3.5793e-06\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 148/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 6.2091e-06" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 6.2091e-06 - val_loss: 3.3095e-06\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 149/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 6.1165e-06" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 6.1165e-06 - val_loss: 3.3423e-06\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 150/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 6.0133e-06" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 6.0133e-06 - val_loss: 3.6012e-06\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "filenames": { + "image/png": "/Users/hjensen/Teaching/FYS-STK4150/doc/src/LectureNotes/_build/jupyter_execute/chapter10_11_326.png" + }, + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "MSE: 1.9124180119966666e-05\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "filenames": { + "image/png": "/Users/hjensen/Teaching/FYS-STK4150/doc/src/LectureNotes/_build/jupyter_execute/chapter10_11_328.png" + }, + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Time: 9.464447478\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: \"functional_7\"\n", + "_________________________________________________________________\n", + "Layer (type) Output Shape Param # \n", + "=================================================================\n", + "input_4 (InputLayer) [(None, 1, 1)] 0 \n", + "_________________________________________________________________\n", + "RNN (SimpleRNN) (None, 200) 40400 \n", + "_________________________________________________________________\n", + "dense (Dense) (None, 1) 201 \n", + "=================================================================\n", + "Total params: 40,601\n", + "Trainable params: 40,601\n", + "Non-trainable params: 0\n", + "_________________________________________________________________\n", + "Epoch 1/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 1.4102" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 154ms/step - loss: 1.4102 - val_loss: 2.1967\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 2/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.9243" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.9243 - val_loss: 1.4521\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 3/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.5465" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.5465 - val_loss: 0.8738\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 4/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.2756" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.2756 - val_loss: 0.4570\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 5/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.1066" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 20ms/step - loss: 0.1066 - val_loss: 0.1890\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 6/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0284" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0284 - val_loss: 0.0477\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 7/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0229" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 0.0229 - val_loss: 0.0012\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 8/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0654" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0654 - val_loss: 0.0122\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 9/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.1283" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.1283 - val_loss: 0.0453\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 10/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.1870" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.1870 - val_loss: 0.0747\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 11/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.2252" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.2252 - val_loss: 0.0870\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 12/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.2363" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.2363 - val_loss: 0.0801\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 13/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.2218" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 0.2218 - val_loss: 0.0593\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 14/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.1884" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 0.1884 - val_loss: 0.0332\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 15/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.1445" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.1445 - val_loss: 0.0111\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 16/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0988" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0988 - val_loss: 3.2715e-04\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 17/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0585" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0585 - val_loss: 0.0055\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 18/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0286" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 0.0286 - val_loss: 0.0275\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 19/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0116" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0116 - val_loss: 0.0639\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 20/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0072" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0072 - val_loss: 0.1091\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 21/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0129" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 0.0129 - val_loss: 0.1561\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 22/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0249" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 0.0249 - val_loss: 0.1975\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 23/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0388" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0388 - val_loss: 0.2272\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 24/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0505" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0505 - val_loss: 0.2413\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 25/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0572" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0572 - val_loss: 0.2389\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 26/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0578" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0578 - val_loss: 0.2215\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 27/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0526" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0526 - val_loss: 0.1927\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 28/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0430" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0430 - val_loss: 0.1571\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 29/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0313" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0313 - val_loss: 0.1197\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 30/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0198" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0198 - val_loss: 0.0845\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 31/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0105" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0105 - val_loss: 0.0548\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 32/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0045" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0045 - val_loss: 0.0320\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 33/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0022" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0022 - val_loss: 0.0165\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 34/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0032" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 22ms/step - loss: 0.0032 - val_loss: 0.0071\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 35/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0065" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0065 - val_loss: 0.0024\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 36/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0105" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 19ms/step - loss: 0.0105 - val_loss: 5.8779e-04\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 37/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0140" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0140 - val_loss: 9.0393e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 38/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0161" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0161 - val_loss: 2.5875e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 39/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0163" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0163 - val_loss: 1.0453e-04\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 40/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0146" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0146 - val_loss: 5.5861e-04\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 41/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0117" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 19ms/step - loss: 0.0117 - val_loss: 0.0019\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 42/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0083" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 0.0083 - val_loss: 0.0047\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 43/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0050" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0050 - val_loss: 0.0091\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 44/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0027" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0027 - val_loss: 0.0151\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 45/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0015" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0015 - val_loss: 0.0221\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 46/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0015" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0015 - val_loss: 0.0294\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 47/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0023" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0023 - val_loss: 0.0358\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 48/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0036" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0036 - val_loss: 0.0407\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 49/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0048" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0048 - val_loss: 0.0432\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 50/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0056" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0056 - val_loss: 0.0432\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 51/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0057" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0057 - val_loss: 0.0409\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 52/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0053" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0053 - val_loss: 0.0368\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 53/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0043" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0043 - val_loss: 0.0315\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 54/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0032" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0032 - val_loss: 0.0258\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 55/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0023" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0023 - val_loss: 0.0203\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 56/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0016" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 19ms/step - loss: 0.0016 - val_loss: 0.0156\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 57/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0013" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0013 - val_loss: 0.0118\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 58/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0014" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0014 - val_loss: 0.0089\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 59/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0017" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0017 - val_loss: 0.0071\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 60/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0022" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0022 - val_loss: 0.0060\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 61/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0025" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0025 - val_loss: 0.0055\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 62/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0026" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0026 - val_loss: 0.0057\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 63/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0026" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0026 - val_loss: 0.0064\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 64/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0023" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 0.0023 - val_loss: 0.0076\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 65/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0019" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0019 - val_loss: 0.0093\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 66/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0016" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 0.0016 - val_loss: 0.0113\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 67/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0013" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0013 - val_loss: 0.0136\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 68/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0012" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0012 - val_loss: 0.0160\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 69/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0012" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0012 - val_loss: 0.0181\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 70/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0013" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 0.0013 - val_loss: 0.0198\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 71/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0014" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0014 - val_loss: 0.0209\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 72/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0015" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0015 - val_loss: 0.0213\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 73/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0016" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 0.0016 - val_loss: 0.0210\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 74/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0015" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0015 - val_loss: 0.0202\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 75/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0014" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 0.0014 - val_loss: 0.0189\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 76/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0013" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0013 - val_loss: 0.0174\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 77/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0011" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0011 - val_loss: 0.0158\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 78/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0011" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0011 - val_loss: 0.0143\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 79/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0010" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0010 - val_loss: 0.0130\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 80/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0010" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0010 - val_loss: 0.0120\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 81/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0011" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0011 - val_loss: 0.0114\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 82/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0011" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0011 - val_loss: 0.0110\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 83/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0011" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0011 - val_loss: 0.0110\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 84/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0011" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0011 - val_loss: 0.0113\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 85/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0011" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0011 - val_loss: 0.0118\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 86/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 0.0011" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 0.0011 - val_loss: 0.0125\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 87/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 9.9906e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 9.9906e-04 - val_loss: 0.0133\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 88/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 9.5899e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 9.5899e-04 - val_loss: 0.0142\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 89/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 9.3780e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 9.3780e-04 - val_loss: 0.0150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 90/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 9.3488e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 9.3488e-04 - val_loss: 0.0156\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 91/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 9.4357e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 9.4357e-04 - val_loss: 0.0161\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 92/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 9.5451e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 9.5451e-04 - val_loss: 0.0163\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 93/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 9.5936e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 9.5936e-04 - val_loss: 0.0163\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 94/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 9.5352e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 9.5352e-04 - val_loss: 0.0161\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 95/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 9.3717e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 9.3717e-04 - val_loss: 0.0156\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 96/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 9.1432e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 9.1432e-04 - val_loss: 0.0150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 97/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 8.9074e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 8.9074e-04 - val_loss: 0.0144\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 98/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 8.7159e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 8.7159e-04 - val_loss: 0.0138\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 99/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 8.5960e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 8.5960e-04 - val_loss: 0.0132\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 100/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 8.5449e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 8.5449e-04 - val_loss: 0.0127\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 101/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 8.5362e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 8.5362e-04 - val_loss: 0.0124\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 102/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 8.5331e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 8.5331e-04 - val_loss: 0.0122\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 103/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 8.5041e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 8.5041e-04 - val_loss: 0.0121\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 104/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 8.4335e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 8.4335e-04 - val_loss: 0.0121\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 105/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 8.3246e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 8.3246e-04 - val_loss: 0.0122\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 106/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 8.1954e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 8.1954e-04 - val_loss: 0.0124\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 107/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 8.0688e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 8.0688e-04 - val_loss: 0.0127\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 108/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 7.9636e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 7.9636e-04 - val_loss: 0.0129\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 109/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 7.8874e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 7.8874e-04 - val_loss: 0.0131\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 110/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 7.8361e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 7.8361e-04 - val_loss: 0.0132\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 111/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 7.7972e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 7.7972e-04 - val_loss: 0.0133\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 112/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 7.7562e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 7.7562e-04 - val_loss: 0.0132\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 113/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 7.7023e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 7.7023e-04 - val_loss: 0.0131\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 114/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 7.6324e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 7.6324e-04 - val_loss: 0.0129\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 115/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 7.5506e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 7.5506e-04 - val_loss: 0.0126\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 116/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 7.4655e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 7.4655e-04 - val_loss: 0.0123\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 117/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 7.3860e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 7.3860e-04 - val_loss: 0.0121\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 118/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 7.3174e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 7.3174e-04 - val_loss: 0.0118\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 119/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 7.2605e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 7.2605e-04 - val_loss: 0.0115\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 120/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 7.2114e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 19ms/step - loss: 7.2114e-04 - val_loss: 0.0114\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 121/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 7.1643e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 7.1643e-04 - val_loss: 0.0112\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 122/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 7.1139e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 7.1139e-04 - val_loss: 0.0111\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 123/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 7.0577e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 7.0577e-04 - val_loss: 0.0111\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 124/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 6.9964e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 19ms/step - loss: 6.9964e-04 - val_loss: 0.0111\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 125/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 6.9330e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 6.9330e-04 - val_loss: 0.0112\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 126/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 6.8710e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 6.8710e-04 - val_loss: 0.0112\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 127/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 6.8134e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 6.8134e-04 - val_loss: 0.0112\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 128/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 6.7611e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 6.7611e-04 - val_loss: 0.0113\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 129/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 6.7125e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 6.7125e-04 - val_loss: 0.0113\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 130/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 6.6659e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 6.6659e-04 - val_loss: 0.0112\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 131/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 6.6186e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 6.6186e-04 - val_loss: 0.0112\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 132/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 6.5694e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 6.5694e-04 - val_loss: 0.0111\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 133/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 6.5184e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 6.5184e-04 - val_loss: 0.0110\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 134/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 6.4666e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 19ms/step - loss: 6.4666e-04 - val_loss: 0.0108\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 135/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 6.4156e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 6.4156e-04 - val_loss: 0.0107\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 136/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 6.3666e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 6.3666e-04 - val_loss: 0.0105\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 137/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 6.3201e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 6.3201e-04 - val_loss: 0.0104\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 138/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 6.2756e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 6.2756e-04 - val_loss: 0.0103\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 139/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 6.2321e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 6.2321e-04 - val_loss: 0.0102\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 140/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 6.1888e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 6.1888e-04 - val_loss: 0.0102\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 141/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 6.1449e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 6.1449e-04 - val_loss: 0.0101\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 142/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 6.1007e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 6.1007e-04 - val_loss: 0.0101\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 143/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 6.0565e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 6.0565e-04 - val_loss: 0.0101\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 144/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 6.0129e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 18ms/step - loss: 6.0129e-04 - val_loss: 0.0101\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 145/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 5.9706e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 5.9706e-04 - val_loss: 0.0100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 146/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 5.9295e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 5.9295e-04 - val_loss: 0.0100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 147/150\n", + "\r", + "1/1 [==============================] - ETA: 0s - loss: 5.8894e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 16ms/step - loss: 5.8894e-04 - val_loss: 0.0100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 148/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 5.8501e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 5.8501e-04 - val_loss: 0.0100\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 149/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 5.8111e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 17ms/step - loss: 5.8111e-04 - val_loss: 0.0099\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 150/150\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\r", + "1/1 [==============================] - ETA: 0s - loss: 5.7722e-04" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", + "1/1 [==============================] - 0s 19ms/step - loss: 5.7722e-04 - val_loss: 0.0098\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "filenames": { + "image/png": "/Users/hjensen/Teaching/FYS-STK4150/doc/src/LectureNotes/_build/jupyter_execute/chapter10_11_687.png" + }, + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "filenames": { + "image/png": "/Users/hjensen/Teaching/FYS-STK4150/doc/src/LectureNotes/_build/jupyter_execute/chapter10_11_688.png" + }, + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Time: 4.337630193999999\n" + ] + } + ], + "source": [ + "def lstm_2layers(length_of_sequences, batch_size = None, stateful = False):\n", + " \"\"\"\n", + " Inputs:\n", + " length_of_sequences (an int): the number of y values in \"x data\". This is determined\n", + " when the data is formatted\n", + " batch_size (an int): Default value is None. See Keras documentation of SimpleRNN.\n", + " stateful (a boolean): Default value is False. See Keras documentation of SimpleRNN.\n", + " Returns:\n", + " model (a Keras model): The recurrent neural network that is built and compiled by this\n", + " method\n", + " Builds and compiles a recurrent neural network with two LSTM hidden layers and returns the model.\n", + " \"\"\"\n", + " # Number of neurons on the input/output layer and the number of neurons in the hidden layer\n", + " in_out_neurons = 1\n", + " hidden_neurons = 250\n", + " # Input Layer\n", + " inp = Input(batch_shape=(batch_size, \n", + " length_of_sequences, \n", + " in_out_neurons)) \n", + " # Hidden layers (in this case they are LSTM layers instead if SimpleRNN layers)\n", + " rnn= LSTM(hidden_neurons, \n", + " return_sequences=True,\n", + " stateful = stateful,\n", + " name=\"RNN\", use_bias=True, activation='tanh')(inp)\n", + " rnn1 = LSTM(hidden_neurons, \n", + " return_sequences=False,\n", + " stateful = stateful,\n", + " name=\"RNN1\", use_bias=True, activation='tanh')(rnn)\n", + " # Output layer\n", + " dens = Dense(in_out_neurons,name=\"dense\")(rnn1)\n", + " # Define the midel\n", + " model = Model(inputs=[inp],outputs=[dens])\n", + " # Compile the model\n", + " model.compile(loss='mean_squared_error', optimizer='adam') \n", + " # Return the model\n", + " return model\n", + "\n", + "def dnn2_gru2(length_of_sequences, batch_size = None, stateful = False):\n", + " \"\"\"\n", + " Inputs:\n", + " length_of_sequences (an int): the number of y values in \"x data\". This is determined\n", + " when the data is formatted\n", + " batch_size (an int): Default value is None. See Keras documentation of SimpleRNN.\n", + " stateful (a boolean): Default value is False. See Keras documentation of SimpleRNN.\n", + " Returns:\n", + " model (a Keras model): The recurrent neural network that is built and compiled by this\n", + " method\n", + " Builds and compiles a recurrent neural network with four hidden layers (two dense followed by\n", + " two GRU layers) and returns the model.\n", + " \"\"\" \n", + " # Number of neurons on the input/output layers and hidden layers\n", + " in_out_neurons = 1\n", + " hidden_neurons = 250\n", + " # Input layer\n", + " inp = Input(batch_shape=(batch_size, \n", + " length_of_sequences, \n", + " in_out_neurons)) \n", + " # Hidden Dense (feedforward) layers\n", + " dnn = Dense(hidden_neurons/2, activation='relu', name='dnn')(inp)\n", + " dnn1 = Dense(hidden_neurons/2, activation='relu', name='dnn1')(dnn)\n", + " # Hidden GRU layers\n", + " rnn1 = GRU(hidden_neurons, \n", + " return_sequences=True,\n", + " stateful = stateful,\n", + " name=\"RNN1\", use_bias=True)(dnn1)\n", + " rnn = GRU(hidden_neurons, \n", + " return_sequences=False,\n", + " stateful = stateful,\n", + " name=\"RNN\", use_bias=True)(rnn1)\n", + " # Output layer\n", + " dens = Dense(in_out_neurons,name=\"dense\")(rnn)\n", + " # Define the model\n", + " model = Model(inputs=[inp],outputs=[dens])\n", + " # Compile the mdoel\n", + " model.compile(loss='mean_squared_error', optimizer='adam') \n", + " # Return the model\n", + " return model\n", + "\n", + "# Check to make sure the data set is complete\n", + "assert len(X_tot) == len(y_tot)\n", + "\n", + "# This is the number of points that will be used in as the training data\n", + "dim=12\n", + "\n", + "# Separate the training data from the whole data set\n", + "X_train = X_tot[:dim]\n", + "y_train = y_tot[:dim]\n", + "\n", + "\n", + "# Generate the training data for the RNN, using a sequence of 2\n", + "rnn_input, rnn_training = format_data(y_train, 2)\n", + "\n", + "\n", + "# Create a recurrent neural network in Keras and produce a summary of the \n", + "# machine learning model\n", + "# Change the method name to reflect which network you want to use\n", + "model = dnn2_gru2(length_of_sequences = 2)\n", + "model.summary()\n", + "\n", + "# Start the timer. Want to time training+testing\n", + "start = timer()\n", + "# Fit the model using the training data genenerated above using 150 training iterations and a 5%\n", + "# validation split. Setting verbose to True prints information about each training iteration.\n", + "hist = model.fit(rnn_input, rnn_training, batch_size=None, epochs=150, \n", + " verbose=True,validation_split=0.05)\n", + "\n", + "\n", + "# This section plots the training loss and the validation loss as a function of training iteration.\n", + "# This is not required for analyzing the couple cluster data but can help determine if the network is\n", + "# being overtrained.\n", + "for label in [\"loss\",\"val_loss\"]:\n", + " plt.plot(hist.history[label],label=label)\n", + "\n", + "plt.ylabel(\"loss\")\n", + "plt.xlabel(\"epoch\")\n", + "plt.title(\"The final validation loss: {}\".format(hist.history[\"val_loss\"][-1]))\n", + "plt.legend()\n", + "plt.show()\n", + "\n", + "# Use the trained neural network to predict more points of the data set\n", + "test_rnn(X_tot, y_tot, X_tot[0], X_tot[dim-1])\n", + "# Stop the timer and calculate the total time needed.\n", + "end = timer()\n", + "print('Time: ', end-start)\n", + "\n", + "\n", + "# ### Training Recurrent Neural Networks in the Standard Way (i.e. learning the relationship between the X and Y data)\n", + "# \n", + "# Finally, comparing the performace of a recurrent neural network using the standard data formatting to the performance of the network with time sequence data formatting shows the benefit of this type of data formatting with extrapolation.\n", + "\n", + "# Check to make sure the data set is complete\n", + "assert len(X_tot) == len(y_tot)\n", + "\n", + "# This is the number of points that will be used in as the training data\n", + "dim=12\n", + "\n", + "# Separate the training data from the whole data set\n", + "X_train = X_tot[:dim]\n", + "y_train = y_tot[:dim]\n", + "\n", + "# Reshape the data for Keras specifications\n", + "X_train = X_train.reshape((dim, 1))\n", + "y_train = y_train.reshape((dim, 1))\n", + "\n", + "\n", + "# Create a recurrent neural network in Keras and produce a summary of the \n", + "# machine learning model\n", + "# Set the sequence length to 1 for regular data formatting \n", + "model = rnn(length_of_sequences = 1)\n", + "model.summary()\n", + "\n", + "# Start the timer. Want to time training+testing\n", + "start = timer()\n", + "# Fit the model using the training data genenerated above using 150 training iterations and a 5%\n", + "# validation split. Setting verbose to True prints information about each training iteration.\n", + "hist = model.fit(X_train, y_train, batch_size=None, epochs=150, \n", + " verbose=True,validation_split=0.05)\n", + "\n", + "\n", + "# This section plots the training loss and the validation loss as a function of training iteration.\n", + "# This is not required for analyzing the couple cluster data but can help determine if the network is\n", + "# being overtrained.\n", + "for label in [\"loss\",\"val_loss\"]:\n", + " plt.plot(hist.history[label],label=label)\n", + "\n", + "plt.ylabel(\"loss\")\n", + "plt.xlabel(\"epoch\")\n", + "plt.title(\"The final validation loss: {}\".format(hist.history[\"val_loss\"][-1]))\n", + "plt.legend()\n", + "plt.show()\n", + "\n", + "# Use the trained neural network to predict the remaining data points\n", + "X_pred = X_tot[dim:]\n", + "X_pred = X_pred.reshape((len(X_pred), 1))\n", + "y_model = model.predict(X_pred)\n", + "y_pred = np.concatenate((y_tot[:dim], y_model.flatten()))\n", + "\n", + "# Plot the known data set and the predicted data set. The red box represents the region that was used\n", + "# for the training data.\n", + "fig, ax = plt.subplots()\n", + "ax.plot(X_tot, y_tot, label=\"true\", linewidth=3)\n", + "ax.plot(X_tot, y_pred, 'g-.',label=\"predicted\", linewidth=4)\n", + "ax.legend()\n", + "# Created a red region to represent the points used in the training data.\n", + "ax.axvspan(X_tot[0], X_tot[dim], alpha=0.25, color='red')\n", + "plt.show()\n", + "\n", + "# Stop the timer and calculate the total time needed.\n", + "end = timer()\n", + "print('Time: ', end-start)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Solving ODEs with Deep Learning\n", + "\n", + "The Universal Approximation Theorem states that a neural network can\n", + "approximate any function at a single hidden layer along with one input\n", + "and output layer to any given precision. \n", + "\n", + "\n", + "\n", + "## Ordinary Differential Equations\n", + "\n", + "An ordinary differential equation (ODE) is an equation involving functions having one variable.\n", + "\n", + "In general, an ordinary differential equation looks like" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation} \\label{ode} \\tag{1}\n", + "f\\left(x, \\, g(x), \\, g'(x), \\, g''(x), \\, \\dots \\, , \\, g^{(n)}(x)\\right) = 0\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $g(x)$ is the function to find, and $g^{(n)}(x)$ is the $n$-th derivative of $g(x)$.\n", + "\n", + "The $f\\left(x, g(x), g'(x), g''(x), \\, \\dots \\, , g^{(n)}(x)\\right)$ is just a way to write that there is an expression involving $x$ and $g(x), \\ g'(x), \\ g''(x), \\, \\dots \\, , \\text{ and } g^{(n)}(x)$ on the left side of the equality sign in ([1](#ode)).\n", + "The highest order of derivative, that is the value of $n$, determines to the order of the equation.\n", + "The equation is referred to as a $n$-th order ODE.\n", + "Along with ([1](#ode)), some additional conditions of the function $g(x)$ are typically given\n", + "for the solution to be unique.\n", + "\n", + "\n", + "## The trial solution\n", + "\n", + "Let the trial solution $g_t(x)$ be" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\tg_t(x) = h_1(x) + h_2(x,N(x,P))\n", + "\\label{_auto1} \\tag{2}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $h_1(x)$ is a function that makes $g_t(x)$ satisfy a given set\n", + "of conditions, $N(x,P)$ a neural network with weights and biases\n", + "described by $P$ and $h_2(x, N(x,P))$ some expression involving the\n", + "neural network. The role of the function $h_2(x, N(x,P))$, is to\n", + "ensure that the output from $N(x,P)$ is zero when $g_t(x)$ is\n", + "evaluated at the values of $x$ where the given conditions must be\n", + "satisfied. The function $h_1(x)$ should alone make $g_t(x)$ satisfy\n", + "the conditions.\n", + "\n", + "But what about the network $N(x,P)$?\n", + "\n", + "\n", + "As described previously, an optimization method could be used to minimize the parameters of a neural network, that being its weights and biases, through backward propagation.\n", + "\n", + "\n", + "\n", + "## Minimization process\n", + "\n", + "For the minimization to be defined, we need to have a cost function at hand to minimize.\n", + "\n", + "It is given that $f\\left(x, \\, g(x), \\, g'(x), \\, g''(x), \\, \\dots \\, , \\, g^{(n)}(x)\\right)$ should be equal to zero in ([1](#ode)).\n", + "We can choose to consider the mean squared error as the cost function for an input $x$.\n", + "Since we are looking at one input, the cost function is just $f$ squared.\n", + "The cost function $c\\left(x, P \\right)$ can therefore be expressed as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "C\\left(x, P\\right) = \\big(f\\left(x, \\, g(x), \\, g'(x), \\, g''(x), \\, \\dots \\, , \\, g^{(n)}(x)\\right)\\big)^2\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If $N$ inputs are given as a vector $\\boldsymbol{x}$ with elements $x_i$ for $i = 1,\\dots,N$,\n", + "the cost function becomes" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation} \\label{cost} \\tag{3}\n", + "\tC\\left(\\boldsymbol{x}, P\\right) = \\frac{1}{N} \\sum_{i=1}^N \\big(f\\left(x_i, \\, g(x_i), \\, g'(x_i), \\, g''(x_i), \\, \\dots \\, , \\, g^{(n)}(x_i)\\right)\\big)^2\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The neural net should then find the parameters $P$ that minimizes the cost function in\n", + "([3](#cost)) for a set of $N$ training samples $x_i$.\n", + "\n", + "\n", + "## Minimizing the cost function using gradient descent and automatic differentiation\n", + "\n", + "To perform the minimization using gradient descent, the gradient of $C\\left(\\boldsymbol{x}, P\\right)$ is needed.\n", + "It might happen so that finding an analytical expression of the gradient of $C(\\boldsymbol{x}, P)$ from ([3](#cost)) gets too messy, depending on which cost function one desires to use.\n", + "\n", + "Luckily, there exists libraries that makes the job for us through automatic differentiation.\n", + "Automatic differentiation is a method of finding the derivatives numerically with very high precision.\n", + "\n", + "\n", + "\n", + "## Example: Exponential decay\n", + "\n", + "An exponential decay of a quantity $g(x)$ is described by the equation" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation} \\label{solve_expdec} \\tag{4}\n", + " g'(x) = -\\gamma g(x)\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "with $g(0) = g_0$ for some chosen initial value $g_0$.\n", + "\n", + "The analytical solution of ([4](#solve_expdec)) is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + " g(x) = g_0 \\exp\\left(-\\gamma x\\right)\n", + "\\label{_auto2} \\tag{5}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Having an analytical solution at hand, it is possible to use it to compare how well a neural network finds a solution of ([4](#solve_expdec)).\n", + "\n", + "\n", + "\n", + "## The function to solve for\n", + "\n", + "The program will use a neural network to solve" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation} \\label{solveode} \\tag{6}\n", + "g'(x) = -\\gamma g(x)\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $g(0) = g_0$ with $\\gamma$ and $g_0$ being some chosen values.\n", + "\n", + "In this example, $\\gamma = 2$ and $g_0 = 10$.\n", + "\n", + "\n", + "## The trial solution\n", + "To begin with, a trial solution $g_t(t)$ must be chosen. A general trial solution for ordinary differential equations could be" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "g_t(x, P) = h_1(x) + h_2(x, N(x, P))\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "with $h_1(x)$ ensuring that $g_t(x)$ satisfies some conditions and $h_2(x,N(x, P))$ an expression involving $x$ and the output from the neural network $N(x,P)$ with $P $ being the collection of the weights and biases for each layer. For now, it is assumed that the network consists of one input layer, one hidden layer, and one output layer.\n", + "\n", + "\n", + "## Setup of Network\n", + "\n", + "In this network, there are no weights and bias at the input layer, so $P = \\{ P_{\\text{hidden}}, P_{\\text{output}} \\}$.\n", + "If there are $N_{\\text{hidden} }$ neurons in the hidden layer, then $P_{\\text{hidden}}$ is a $N_{\\text{hidden} } \\times (1 + N_{\\text{input}})$ matrix, given that there are $N_{\\text{input}}$ neurons in the input layer.\n", + "\n", + "The first column in $P_{\\text{hidden} }$ represents the bias for each neuron in the hidden layer and the second column represents the weights for each neuron in the hidden layer from the input layer.\n", + "If there are $N_{\\text{output} }$ neurons in the output layer, then $P_{\\text{output}} $ is a $N_{\\text{output} } \\times (1 + N_{\\text{hidden} })$ matrix.\n", + "\n", + "Its first column represents the bias of each neuron and the remaining columns represents the weights to each neuron.\n", + "\n", + "It is given that $g(0) = g_0$. The trial solution must fulfill this condition to be a proper solution of ([6](#solveode)). A possible way to ensure that $g_t(0, P) = g_0$, is to let $F(N(x,P)) = x \\cdot N(x,P)$ and $A(x) = g_0$. This gives the following trial solution:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation} \\label{trial} \\tag{7}\n", + "g_t(x, P) = g_0 + x \\cdot N(x, P)\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Reformulating the problem\n", + "\n", + "We wish that our neural network manages to minimize a given cost function.\n", + "\n", + "A reformulation of out equation, ([6](#solveode)), must therefore be done,\n", + "such that it describes the problem a neural network can solve for.\n", + "\n", + "The neural network must find the set of weights and biases $P$ such that the trial solution in ([7](#trial)) satisfies ([6](#solveode)).\n", + "\n", + "The trial solution" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "g_t(x, P) = g_0 + x \\cdot N(x, P)\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "has been chosen such that it already solves the condition $g(0) = g_0$. What remains, is to find $P$ such that" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation} \\label{nnmin} \\tag{8}\n", + "g_t'(x, P) = - \\gamma g_t(x, P)\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "is fulfilled as *best as possible*.\n", + "\n", + "\n", + "## More technicalities\n", + "\n", + "The left hand side and right hand side of ([8](#nnmin)) must be computed separately, and then the neural network must choose weights and biases, contained in $P$, such that the sides are equal as best as possible.\n", + "This means that the absolute or squared difference between the sides must be as close to zero, ideally equal to zero.\n", + "In this case, the difference squared shows to be an appropriate measurement of how erroneous the trial solution is with respect to $P$ of the neural network.\n", + "\n", + "This gives the following cost function our neural network must solve for:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\min_{P}\\Big\\{ \\big(g_t'(x, P) - ( -\\gamma g_t(x, P) \\big)^2 \\Big\\}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "(the notation $\\min_{P}\\{ f(x, P) \\}$ means that we desire to find $P$ that yields the minimum of $f(x, P)$)\n", + "\n", + "or, in terms of weights and biases for the hidden and output layer in our network:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\min_{P_{\\text{hidden} }, \\ P_{\\text{output} }}\\Big\\{ \\big(g_t'(x, \\{ P_{\\text{hidden} }, P_{\\text{output} }\\}) - ( -\\gamma g_t(x, \\{ P_{\\text{hidden} }, P_{\\text{output} }\\}) \\big)^2 \\Big\\}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "for an input value $x$.\n", + "\n", + "\n", + "## More details\n", + "\n", + "If the neural network evaluates $g_t(x, P)$ at more values for $x$, say $N$ values $x_i$ for $i = 1, \\dots, N$, then the *total* error to minimize becomes" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation} \\label{min} \\tag{9}\n", + "\\min_{P}\\Big\\{\\frac{1}{N} \\sum_{i=1}^N \\big(g_t'(x_i, P) - ( -\\gamma g_t(x_i, P) \\big)^2 \\Big\\}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Letting $\\boldsymbol{x}$ be a vector with elements $x_i$ and $C(\\boldsymbol{x}, P) = \\frac{1}{N} \\sum_i \\big(g_t'(x_i, P) - ( -\\gamma g_t(x_i, P) \\big)^2$ denote the cost function, the minimization problem that our network must solve, becomes" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\min_{P} C(\\boldsymbol{x}, P)\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In terms of $P_{\\text{hidden} }$ and $P_{\\text{output} }$, this could also be expressed as\n", + "\n", + "$$\n", + "\\min_{P_{\\text{hidden} }, \\ P_{\\text{output} }} C(\\boldsymbol{x}, \\{P_{\\text{hidden} }, P_{\\text{output} }\\})\n", + "$$\n", + "\n", + "\n", + "## A possible implementation of a neural network\n", + "\n", + "For simplicity, it is assumed that the input is an array $\\boldsymbol{x} = (x_1, \\dots, x_N)$ with $N$ elements. It is at these points the neural network should find $P$ such that it fulfills ([9](#min)).\n", + "\n", + "First, the neural network must feed forward the inputs.\n", + "This means that $\\boldsymbol{x}s$ must be passed through an input layer, a hidden layer and a output layer. The input layer in this case, does not need to process the data any further.\n", + "The input layer will consist of $N_{\\text{input} }$ neurons, passing its element to each neuron in the hidden layer. The number of neurons in the hidden layer will be $N_{\\text{hidden} }$.\n", + "\n", + "\n", + "## Technicalities\n", + "\n", + "For the $i$-th in the hidden layer with weight $w_i^{\\text{hidden} }$ and bias $b_i^{\\text{hidden} }$, the weighting from the $j$-th neuron at the input layer is:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{aligned}\n", + "z_{i,j}^{\\text{hidden}} &= b_i^{\\text{hidden}} + w_i^{\\text{hidden}}x_j \\\\\n", + "&=\n", + "\\begin{pmatrix}\n", + "b_i^{\\text{hidden}} & w_i^{\\text{hidden}}\n", + "\\end{pmatrix}\n", + "\\begin{pmatrix}\n", + "1 \\\\\n", + "x_j\n", + "\\end{pmatrix}\n", + "\\end{aligned}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Final technicalities I\n", + "\n", + "The result after weighting the inputs at the $i$-th hidden neuron can be written as a vector:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{aligned}\n", + "\\boldsymbol{z}_{i}^{\\text{hidden}} &= \\Big( b_i^{\\text{hidden}} + w_i^{\\text{hidden}}x_1 , \\ b_i^{\\text{hidden}} + w_i^{\\text{hidden}} x_2, \\ \\dots \\, , \\ b_i^{\\text{hidden}} + w_i^{\\text{hidden}} x_N\\Big) \\\\\n", + "&=\n", + "\\begin{pmatrix}\n", + " b_i^{\\text{hidden}} & w_i^{\\text{hidden}}\n", + "\\end{pmatrix}\n", + "\\begin{pmatrix}\n", + "1 & 1 & \\dots & 1 \\\\\n", + "x_1 & x_2 & \\dots & x_N\n", + "\\end{pmatrix} \\\\\n", + "&= \\boldsymbol{p}_{i, \\text{hidden}}^T X\n", + "\\end{aligned}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Final technicalities II\n", + "\n", + "The vector $\\boldsymbol{p}_{i, \\text{hidden}}^T$ constitutes each row in $P_{\\text{hidden} }$, which contains the weights for the neural network to minimize according to ([9](#min)).\n", + "\n", + "After having found $\\boldsymbol{z}_{i}^{\\text{hidden}} $ for every $i$-th neuron within the hidden layer, the vector will be sent to an activation function $a_i(\\boldsymbol{z})$.\n", + "\n", + "In this example, the sigmoid function has been chosen to be the activation function for each hidden neuron:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "f(z) = \\frac{1}{1 + \\exp{(-z)}}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "It is possible to use other activations functions for the hidden layer also.\n", + "\n", + "The output $\\boldsymbol{x}_i^{\\text{hidden}}$ from each $i$-th hidden neuron is:\n", + "\n", + "$$\n", + "\\boldsymbol{x}_i^{\\text{hidden} } = f\\big( \\boldsymbol{z}_{i}^{\\text{hidden}} \\big)\n", + "$$\n", + "\n", + "The outputs $\\boldsymbol{x}_i^{\\text{hidden} } $ are then sent to the output layer.\n", + "\n", + "The output layer consists of one neuron in this case, and combines the\n", + "output from each of the neurons in the hidden layers. The output layer\n", + "combines the results from the hidden layer using some weights $w_i^{\\text{output}}$\n", + "and biases $b_i^{\\text{output}}$. In this case,\n", + "it is assumes that the number of neurons in the output layer is one.\n", + "\n", + "\n", + "## Final technicalities III\n", + "\n", + "\n", + "The procedure of weighting the output neuron $j$ in the hidden layer to the $i$-th neuron in the output layer is similar as for the hidden layer described previously." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{aligned}\n", + "z_{1,j}^{\\text{output}} & =\n", + "\\begin{pmatrix}\n", + "b_1^{\\text{output}} & \\boldsymbol{w}_1^{\\text{output}}\n", + "\\end{pmatrix}\n", + "\\begin{pmatrix}\n", + "1 \\\\\n", + "\\boldsymbol{x}_j^{\\text{hidden}}\n", + "\\end{pmatrix}\n", + "\\end{aligned}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Final technicalities IV\n", + "\n", + "Expressing $z_{1,j}^{\\text{output}}$ as a vector gives the following way of weighting the inputs from the hidden layer:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{z}_{1}^{\\text{output}} =\n", + "\\begin{pmatrix}\n", + "b_1^{\\text{output}} & \\boldsymbol{w}_1^{\\text{output}}\n", + "\\end{pmatrix}\n", + "\\begin{pmatrix}\n", + "1 & 1 & \\dots & 1 \\\\\n", + "\\boldsymbol{x}_1^{\\text{hidden}} & \\boldsymbol{x}_2^{\\text{hidden}} & \\dots & \\boldsymbol{x}_N^{\\text{hidden}}\n", + "\\end{pmatrix}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this case we seek a continuous range of values since we are approximating a function. This means that after computing $\\boldsymbol{z}_{1}^{\\text{output}}$ the neural network has finished its feed forward step, and $\\boldsymbol{z}_{1}^{\\text{output}}$ is the final output of the network.\n", + "\n", + "\n", + "## Back propagation\n", + "\n", + "The next step is to decide how the parameters should be changed such that they minimize the cost function.\n", + "\n", + "The chosen cost function for this problem is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "C(\\boldsymbol{x}, P) = \\frac{1}{N} \\sum_i \\big(g_t'(x_i, P) - ( -\\gamma g_t(x_i, P) \\big)^2\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In order to minimize the cost function, an optimization method must be chosen.\n", + "\n", + "Here, gradient descent with a constant step size has been chosen.\n", + "\n", + "\n", + "## Gradient descent\n", + "\n", + "The idea of the gradient descent algorithm is to update parameters in\n", + "a direction where the cost function decreases goes to a minimum.\n", + "\n", + "In general, the update of some parameters $\\boldsymbol{\\omega}$ given a cost\n", + "function defined by some weights $\\boldsymbol{\\omega}$, $C(\\boldsymbol{x},\n", + "\\boldsymbol{\\omega})$, goes as follows:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{\\omega}_{\\text{new} } = \\boldsymbol{\\omega} - \\lambda \\nabla_{\\boldsymbol{\\omega}} C(\\boldsymbol{x}, \\boldsymbol{\\omega})\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "for a number of iterations or until $ \\big|\\big| \\boldsymbol{\\omega}_{\\text{new} } - \\boldsymbol{\\omega} \\big|\\big|$ becomes smaller than some given tolerance.\n", + "\n", + "The value of $\\lambda$ decides how large steps the algorithm must take\n", + "in the direction of $ \\nabla_{\\boldsymbol{\\omega}} C(\\boldsymbol{x}, \\boldsymbol{\\omega})$.\n", + "The notation $\\nabla_{\\boldsymbol{\\omega}}$ express the gradient with respect\n", + "to the elements in $\\boldsymbol{\\omega}$.\n", + "\n", + "In our case, we have to minimize the cost function $C(\\boldsymbol{x}, P)$ with\n", + "respect to the two sets of weights and biases, that is for the hidden\n", + "layer $P_{\\text{hidden} }$ and for the output layer $P_{\\text{output}\n", + "}$ .\n", + "\n", + "This means that $P_{\\text{hidden} }$ and $P_{\\text{output} }$ is updated by" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{aligned}\n", + "P_{\\text{hidden},\\text{new}} &= P_{\\text{hidden}} - \\lambda \\nabla_{P_{\\text{hidden}}} C(\\boldsymbol{x}, P) \\\\\n", + "P_{\\text{output},\\text{new}} &= P_{\\text{output}} - \\lambda \\nabla_{P_{\\text{output}}} C(\\boldsymbol{x}, P)\n", + "\\end{aligned}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## The code for solving the ODE" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Initial cost: 367.01\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Final cost: 0.0666807\n", + "Max absolute difference: 0.0437499\n" + ] + }, + { + "data": { + "image/png": "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gwcP5sYbbyzwPGvWrPnr9759+zJ//vz9vq1x48bRpUuX/b5cblS8REREJCrlLF4DBw7kiCOOCDCRipeIiIiUsG7dutG2bVuaN29O//79AahQoQL33XcfrVq1okOHDqxfvx6AUaNGccwxx3DUUUdx6qmn/nX6Ptu3b6dRo0akp6cDsG3bNho2bMjHH3/M1KlT6dWrF61btyYtLY3OnTv/9ScIv/nmG9q0aUOrVq045ZRTAJgyZQodO3bkqKOOomPHjixatKjI111fJyEiIlIKPTxqHvPXbCvS6zyiTkUePKd5gecbNGgQVatWJS0tjaOPPpru3buzc+dOOnTowOOPP06/fv0YMGAA999/P8cddxyTJk3CzBg4cCDPPPMMzz///F/XlZiYSOfOnfnqq6/o1q0bH330Ed27d6dHjx689tprPPfcc7Rr1+5vt5+SksJVV13FTz/9RKNGjdi8eTMATZs25aeffiI2Npbvv/+ee++9l08++aRIt5GKl4iIiJSol19+mZEjRwKwcuVKlixZQpkyZf46jqpt27aMGTMG8L577KKLLmLt2rXs3bs31+/M6tu3L8888wzdunXjnXfeYcCAAfne/qRJkzjhhBP+uq6qVasCsHXrVi677DKWLFmCmf01i1aUVLxERERKocLMTBWHcePG8f333zNx4kTKlStH586d2b17N3FxcX99PUNMTAwZGRkA3HTTTdx+++2ce+65jBs3joceeugf19mpUyeWL1/O+PHjyczMpEWLFvlmcM7l+lUQDzzwACeddBIjR45k+fLldO7c+aDXNycd4yUiIiIlZuvWrVSpUoVy5cqxcOFCJk2aVOD569atC8C7776b5/n69OlDz549ueKKK/46LTExke3bt//jvMceeyzjx49n2bJlAH+91Zj9tgYPHrxf61VYKl4iIiJSYs444wwyMjJo2bIlDzzwAB06dMj3/A899BA9evTg+OOPp3r16nmer1evXmzZsoWePXv+ddrll1/Otdde+9fB9fskJSXRv39/zj//fFq1asVFF10EQL9+/bjnnnvo1KkTmZmZB7mmuTPnXLFccVFq166d2/cpBBERETkwCxYsoFmzZkHHKBYjRozg888/5/333y/R281tm5rZNOdcu9zOr2O8REREJKLddNNNfP3114wePTroKAVS8RIREZGI9sorrwQdodB0jJeI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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "filenames": { + "image/png": "/Users/hjensen/Teaching/FYS-STK4150/doc/src/LectureNotes/_build/jupyter_execute/chapter10_59_2.png" + }, + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "import autograd.numpy as np\n", + "from autograd import grad, elementwise_grad\n", + "import autograd.numpy.random as npr\n", + "from matplotlib import pyplot as plt\n", + "\n", + "def sigmoid(z):\n", + " return 1/(1 + np.exp(-z))\n", + "\n", + "# Assuming one input, hidden, and output layer\n", + "def neural_network(params, x):\n", + "\n", + " # Find the weights (including and biases) for the hidden and output layer.\n", + " # Assume that params is a list of parameters for each layer.\n", + " # The biases are the first element for each array in params,\n", + " # and the weights are the remaning elements in each array in params.\n", + "\n", + " w_hidden = params[0]\n", + " w_output = params[1]\n", + "\n", + " # Assumes input x being an one-dimensional array\n", + " num_values = np.size(x)\n", + " x = x.reshape(-1, num_values)\n", + "\n", + " # Assume that the input layer does nothing to the input x\n", + " x_input = x\n", + "\n", + " ## Hidden layer:\n", + "\n", + " # Add a row of ones to include bias\n", + " x_input = np.concatenate((np.ones((1,num_values)), x_input ), axis = 0)\n", + "\n", + " z_hidden = np.matmul(w_hidden, x_input)\n", + " x_hidden = sigmoid(z_hidden)\n", + "\n", + " ## Output layer:\n", + "\n", + " # Include bias:\n", + " x_hidden = np.concatenate((np.ones((1,num_values)), x_hidden ), axis = 0)\n", + "\n", + " z_output = np.matmul(w_output, x_hidden)\n", + " x_output = z_output\n", + "\n", + " return x_output\n", + "\n", + "# The trial solution using the deep neural network:\n", + "def g_trial(x,params, g0 = 10):\n", + " return g0 + x*neural_network(params,x)\n", + "\n", + "# The right side of the ODE:\n", + "def g(x, g_trial, gamma = 2):\n", + " return -gamma*g_trial\n", + "\n", + "# The cost function:\n", + "def cost_function(P, x):\n", + "\n", + " # Evaluate the trial function with the current parameters P\n", + " g_t = g_trial(x,P)\n", + "\n", + " # Find the derivative w.r.t x of the neural network\n", + " d_net_out = elementwise_grad(neural_network,1)(P,x)\n", + "\n", + " # Find the derivative w.r.t x of the trial function\n", + " d_g_t = elementwise_grad(g_trial,0)(x,P)\n", + "\n", + " # The right side of the ODE\n", + " func = g(x, g_t)\n", + "\n", + " err_sqr = (d_g_t - func)**2\n", + " cost_sum = np.sum(err_sqr)\n", + "\n", + " return cost_sum / np.size(err_sqr)\n", + "\n", + "# Solve the exponential decay ODE using neural network with one input, hidden, and output layer\n", + "def solve_ode_neural_network(x, num_neurons_hidden, num_iter, lmb):\n", + " ## Set up initial weights and biases\n", + "\n", + " # For the hidden layer\n", + " p0 = npr.randn(num_neurons_hidden, 2 )\n", + "\n", + " # For the output layer\n", + " p1 = npr.randn(1, num_neurons_hidden + 1 ) # +1 since bias is included\n", + "\n", + " P = [p0, p1]\n", + "\n", + " print('Initial cost: %g'%cost_function(P, x))\n", + "\n", + " ## Start finding the optimal weights using gradient descent\n", + "\n", + " # Find the Python function that represents the gradient of the cost function\n", + " # w.r.t the 0-th input argument -- that is the weights and biases in the hidden and output layer\n", + " cost_function_grad = grad(cost_function,0)\n", + "\n", + " # Let the update be done num_iter times\n", + " for i in range(num_iter):\n", + " # Evaluate the gradient at the current weights and biases in P.\n", + " # The cost_grad consist now of two arrays;\n", + " # one for the gradient w.r.t P_hidden and\n", + " # one for the gradient w.r.t P_output\n", + " cost_grad = cost_function_grad(P, x)\n", + "\n", + " P[0] = P[0] - lmb * cost_grad[0]\n", + " P[1] = P[1] - lmb * cost_grad[1]\n", + "\n", + " print('Final cost: %g'%cost_function(P, x))\n", + "\n", + " return P\n", + "\n", + "def g_analytic(x, gamma = 2, g0 = 10):\n", + " return g0*np.exp(-gamma*x)\n", + "\n", + "# Solve the given problem\n", + "if __name__ == '__main__':\n", + " # Set seed such that the weight are initialized\n", + " # with same weights and biases for every run.\n", + " npr.seed(15)\n", + "\n", + " ## Decide the vales of arguments to the function to solve\n", + " N = 10\n", + " x = np.linspace(0, 1, N)\n", + "\n", + " ## Set up the initial parameters\n", + " num_hidden_neurons = 10\n", + " num_iter = 10000\n", + " lmb = 0.001\n", + "\n", + " # Use the network\n", + " P = solve_ode_neural_network(x, num_hidden_neurons, num_iter, lmb)\n", + "\n", + " # Print the deviation from the trial solution and true solution\n", + " res = g_trial(x,P)\n", + " res_analytical = g_analytic(x)\n", + "\n", + " print('Max absolute difference: %g'%np.max(np.abs(res - res_analytical)))\n", + "\n", + " # Plot the results\n", + " plt.figure(figsize=(10,10))\n", + "\n", + " plt.title('Performance of neural network solving an ODE compared to the analytical solution')\n", + " plt.plot(x, res_analytical)\n", + " plt.plot(x, res[0,:])\n", + " plt.legend(['analytical','nn'])\n", + " plt.xlabel('x')\n", + " plt.ylabel('g(x)')\n", + " plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## The network with one input layer, specified number of hidden layers, and one output layer\n", + "\n", + "It is also possible to extend the construction of our network into a more general one, allowing the network to contain more than one hidden layers.\n", + "\n", + "The number of neurons within each hidden layer are given as a list of integers in the program below." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import autograd.numpy as np\n", + "from autograd import grad, elementwise_grad\n", + "import autograd.numpy.random as npr\n", + "from matplotlib import pyplot as plt\n", + "\n", + "def sigmoid(z):\n", + " return 1/(1 + np.exp(-z))\n", + "\n", + "# The neural network with one input layer and one output layer,\n", + "# but with number of hidden layers specified by the user.\n", + "def deep_neural_network(deep_params, x):\n", + " # N_hidden is the number of hidden layers\n", + "\n", + " N_hidden = np.size(deep_params) - 1 # -1 since params consists of\n", + " # parameters to all the hidden\n", + " # layers AND the output layer.\n", + "\n", + " # Assumes input x being an one-dimensional array\n", + " num_values = np.size(x)\n", + " x = x.reshape(-1, num_values)\n", + "\n", + " # Assume that the input layer does nothing to the input x\n", + " x_input = x\n", + "\n", + " # Due to multiple hidden layers, define a variable referencing to the\n", + " # output of the previous layer:\n", + " x_prev = x_input\n", + "\n", + " ## Hidden layers:\n", + "\n", + " for l in range(N_hidden):\n", + " # From the list of parameters P; find the correct weigths and bias for this layer\n", + " w_hidden = deep_params[l]\n", + "\n", + " # Add a row of ones to include bias\n", + " x_prev = np.concatenate((np.ones((1,num_values)), x_prev ), axis = 0)\n", + "\n", + " z_hidden = np.matmul(w_hidden, x_prev)\n", + " x_hidden = sigmoid(z_hidden)\n", + "\n", + " # Update x_prev such that next layer can use the output from this layer\n", + " x_prev = x_hidden\n", + "\n", + " ## Output layer:\n", + "\n", + " # Get the weights and bias for this layer\n", + " w_output = deep_params[-1]\n", + "\n", + " # Include bias:\n", + " x_prev = np.concatenate((np.ones((1,num_values)), x_prev), axis = 0)\n", + "\n", + " z_output = np.matmul(w_output, x_prev)\n", + " x_output = z_output\n", + "\n", + " return x_output\n", + "\n", + "# The trial solution using the deep neural network:\n", + "def g_trial_deep(x,params, g0 = 10):\n", + " return g0 + x*deep_neural_network(params, x)\n", + "\n", + "# The right side of the ODE:\n", + "def g(x, g_trial, gamma = 2):\n", + " return -gamma*g_trial\n", + "\n", + "# The same cost function as before, but calls deep_neural_network instead.\n", + "def cost_function_deep(P, x):\n", + "\n", + " # Evaluate the trial function with the current parameters P\n", + " g_t = g_trial_deep(x,P)\n", + "\n", + " # Find the derivative w.r.t x of the neural network\n", + " d_net_out = elementwise_grad(deep_neural_network,1)(P,x)\n", + "\n", + " # Find the derivative w.r.t x of the trial function\n", + " d_g_t = elementwise_grad(g_trial_deep,0)(x,P)\n", + "\n", + " # The right side of the ODE\n", + " func = g(x, g_t)\n", + "\n", + " err_sqr = (d_g_t - func)**2\n", + " cost_sum = np.sum(err_sqr)\n", + "\n", + " return cost_sum / np.size(err_sqr)\n", + "\n", + "# Solve the exponential decay ODE using neural network with one input and one output layer,\n", + "# but with specified number of hidden layers from the user.\n", + "def solve_ode_deep_neural_network(x, num_neurons, num_iter, lmb):\n", + " # num_hidden_neurons is now a list of number of neurons within each hidden layer\n", + "\n", + " # The number of elements in the list num_hidden_neurons thus represents\n", + " # the number of hidden layers.\n", + "\n", + " # Find the number of hidden layers:\n", + " N_hidden = np.size(num_neurons)\n", + "\n", + " ## Set up initial weights and biases\n", + "\n", + " # Initialize the list of parameters:\n", + " P = [None]*(N_hidden + 1) # + 1 to include the output layer\n", + "\n", + " P[0] = npr.randn(num_neurons[0], 2 )\n", + " for l in range(1,N_hidden):\n", + " P[l] = npr.randn(num_neurons[l], num_neurons[l-1] + 1) # +1 to include bias\n", + "\n", + " # For the output layer\n", + " P[-1] = npr.randn(1, num_neurons[-1] + 1 ) # +1 since bias is included\n", + "\n", + " print('Initial cost: %g'%cost_function_deep(P, x))\n", + "\n", + " ## Start finding the optimal weights using gradient descent\n", + "\n", + " # Find the Python function that represents the gradient of the cost function\n", + " # w.r.t the 0-th input argument -- that is the weights and biases in the hidden and output layer\n", + " cost_function_deep_grad = grad(cost_function_deep,0)\n", + "\n", + " # Let the update be done num_iter times\n", + " for i in range(num_iter):\n", + " # Evaluate the gradient at the current weights and biases in P.\n", + " # The cost_grad consist now of N_hidden + 1 arrays; the gradient w.r.t the weights and biases\n", + " # in the hidden layers and output layers evaluated at x.\n", + " cost_deep_grad = cost_function_deep_grad(P, x)\n", + "\n", + " for l in range(N_hidden+1):\n", + " P[l] = P[l] - lmb * cost_deep_grad[l]\n", + "\n", + " print('Final cost: %g'%cost_function_deep(P, x))\n", + "\n", + " return P\n", + "\n", + "def g_analytic(x, gamma = 2, g0 = 10):\n", + " return g0*np.exp(-gamma*x)\n", + "\n", + "# Solve the given problem\n", + "if __name__ == '__main__':\n", + " npr.seed(15)\n", + "\n", + " ## Decide the vales of arguments to the function to solve\n", + " N = 10\n", + " x = np.linspace(0, 1, N)\n", + "\n", + " ## Set up the initial parameters\n", + " num_hidden_neurons = np.array([10,10])\n", + " num_iter = 10000\n", + " lmb = 0.001\n", + "\n", + " P = solve_ode_deep_neural_network(x, num_hidden_neurons, num_iter, lmb)\n", + "\n", + " res = g_trial_deep(x,P)\n", + " res_analytical = g_analytic(x)\n", + "\n", + " plt.figure(figsize=(10,10))\n", + "\n", + " plt.title('Performance of a deep neural network solving an ODE compared to the analytical solution')\n", + " plt.plot(x, res_analytical)\n", + " plt.plot(x, res[0,:])\n", + " plt.legend(['analytical','dnn'])\n", + " plt.ylabel('g(x)')\n", + " plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example: Population growth\n", + "\n", + "A logistic model of population growth assumes that a population converges toward an equilibrium.\n", + "The population growth can be modeled by" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation} \\label{log} \\tag{10}\n", + "\tg'(t) = \\alpha g(t)(A - g(t))\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $g(t)$ is the population density at time $t$, $\\alpha > 0$ the growth rate and $A > 0$ is the maximum population number in the environment.\n", + "Also, at $t = 0$ the population has the size $g(0) = g_0$, where $g_0$ is some chosen constant.\n", + "\n", + "In this example, similar network as for the exponential decay using Autograd has been used to solve the equation. However, as the implementation might suffer from e.g numerical instability\n", + "and high execution time (this might be more apparent in the examples solving PDEs),\n", + "using a library like TensorFlow is recommended.\n", + "Here, we stay with a more simple approach and implement for comparison, the simple forward Euler method.\n", + "\n", + "\n", + "## Setting up the problem\n", + "\n", + "Here, we will model a population $g(t)$ in an environment having carrying capacity $A$.\n", + "The population follows the model" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation} \\label{solveode_population} \\tag{11}\n", + "g'(t) = \\alpha g(t)(A - g(t))\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $g(0) = g_0$.\n", + "\n", + "In this example, we let $\\alpha = 2$, $A = 1$, and $g_0 = 1.2$.\n", + "\n", + "\n", + "## The trial solution\n", + "\n", + "We will get a slightly different trial solution, as the boundary conditions are different\n", + "compared to the case for exponential decay.\n", + "\n", + "A possible trial solution satisfying the condition $g(0) = g_0$ could be\n", + "\n", + "$$\n", + "h_1(t) = g_0 + t \\cdot N(t,P)\n", + "$$\n", + "\n", + "with $N(t,P)$ being the output from the neural network with weights and biases for each layer collected in the set $P$.\n", + "\n", + "The analytical solution is\n", + "\n", + "$$\n", + "g(t) = \\frac{Ag_0}{g_0 + (A - g_0)\\exp(-\\alpha A t)}\n", + "$$\n", + "\n", + "\n", + "## The program using Autograd\n", + "\n", + "The network will be the similar as for the exponential decay example, but with some small modifications for our problem." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import autograd.numpy as np\n", + "from autograd import grad, elementwise_grad\n", + "import autograd.numpy.random as npr\n", + "from matplotlib import pyplot as plt\n", + "\n", + "def sigmoid(z):\n", + " return 1/(1 + np.exp(-z))\n", + "\n", + "# Function to get the parameters.\n", + "# Done such that one can easily change the paramaters after one's liking.\n", + "def get_parameters():\n", + " alpha = 2\n", + " A = 1\n", + " g0 = 1.2\n", + " return alpha, A, g0\n", + "\n", + "def deep_neural_network(P, x):\n", + " # N_hidden is the number of hidden layers\n", + " N_hidden = np.size(P) - 1 # -1 since params consist of parameters to all the hidden layers AND the output layer\n", + "\n", + " # Assumes input x being an one-dimensional array\n", + " num_values = np.size(x)\n", + " x = x.reshape(-1, num_values)\n", + "\n", + " # Assume that the input layer does nothing to the input x\n", + " x_input = x\n", + "\n", + " # Due to multiple hidden layers, define a variable referencing to the\n", + " # output of the previous layer:\n", + " x_prev = x_input\n", + "\n", + " ## Hidden layers:\n", + "\n", + " for l in range(N_hidden):\n", + " # From the list of parameters P; find the correct weigths and bias for this layer\n", + " w_hidden = P[l]\n", + "\n", + " # Add a row of ones to include bias\n", + " x_prev = np.concatenate((np.ones((1,num_values)), x_prev ), axis = 0)\n", + "\n", + " z_hidden = np.matmul(w_hidden, x_prev)\n", + " x_hidden = sigmoid(z_hidden)\n", + "\n", + " # Update x_prev such that next layer can use the output from this layer\n", + " x_prev = x_hidden\n", + "\n", + " ## Output layer:\n", + "\n", + " # Get the weights and bias for this layer\n", + " w_output = P[-1]\n", + "\n", + " # Include bias:\n", + " x_prev = np.concatenate((np.ones((1,num_values)), x_prev), axis = 0)\n", + "\n", + " z_output = np.matmul(w_output, x_prev)\n", + " x_output = z_output\n", + "\n", + " return x_output\n", + "\n", + "\n", + "def cost_function_deep(P, x):\n", + "\n", + " # Evaluate the trial function with the current parameters P\n", + " g_t = g_trial_deep(x,P)\n", + "\n", + " # Find the derivative w.r.t x of the trial function\n", + " d_g_t = elementwise_grad(g_trial_deep,0)(x,P)\n", + "\n", + " # The right side of the ODE\n", + " func = f(x, g_t)\n", + "\n", + " err_sqr = (d_g_t - func)**2\n", + " cost_sum = np.sum(err_sqr)\n", + "\n", + " return cost_sum / np.size(err_sqr)\n", + "\n", + "# The right side of the ODE:\n", + "def f(x, g_trial):\n", + " alpha,A, g0 = get_parameters()\n", + " return alpha*g_trial*(A - g_trial)\n", + "\n", + "# The trial solution using the deep neural network:\n", + "def g_trial_deep(x, params):\n", + " alpha,A, g0 = get_parameters()\n", + " return g0 + x*deep_neural_network(params,x)\n", + "\n", + "# The analytical solution:\n", + "def g_analytic(t):\n", + " alpha,A, g0 = get_parameters()\n", + " return A*g0/(g0 + (A - g0)*np.exp(-alpha*A*t))\n", + "\n", + "def solve_ode_deep_neural_network(x, num_neurons, num_iter, lmb):\n", + " # num_hidden_neurons is now a list of number of neurons within each hidden layer\n", + "\n", + " # Find the number of hidden layers:\n", + " N_hidden = np.size(num_neurons)\n", + "\n", + " ## Set up initial weigths and biases\n", + "\n", + " # Initialize the list of parameters:\n", + " P = [None]*(N_hidden + 1) # + 1 to include the output layer\n", + "\n", + " P[0] = npr.randn(num_neurons[0], 2 )\n", + " for l in range(1,N_hidden):\n", + " P[l] = npr.randn(num_neurons[l], num_neurons[l-1] + 1) # +1 to include bias\n", + "\n", + " # For the output layer\n", + " P[-1] = npr.randn(1, num_neurons[-1] + 1 ) # +1 since bias is included\n", + "\n", + " print('Initial cost: %g'%cost_function_deep(P, x))\n", + "\n", + " ## Start finding the optimal weigths using gradient descent\n", + "\n", + " # Find the Python function that represents the gradient of the cost function\n", + " # w.r.t the 0-th input argument -- that is the weights and biases in the hidden and output layer\n", + " cost_function_deep_grad = grad(cost_function_deep,0)\n", + "\n", + " # Let the update be done num_iter times\n", + " for i in range(num_iter):\n", + " # Evaluate the gradient at the current weights and biases in P.\n", + " # The cost_grad consist now of N_hidden + 1 arrays; the gradient w.r.t the weights and biases\n", + " # in the hidden layers and output layers evaluated at x.\n", + " cost_deep_grad = cost_function_deep_grad(P, x)\n", + "\n", + " for l in range(N_hidden+1):\n", + " P[l] = P[l] - lmb * cost_deep_grad[l]\n", + "\n", + " print('Final cost: %g'%cost_function_deep(P, x))\n", + "\n", + " return P\n", + "\n", + "if __name__ == '__main__':\n", + " npr.seed(4155)\n", + "\n", + " ## Decide the vales of arguments to the function to solve\n", + " Nt = 10\n", + " T = 1\n", + " t = np.linspace(0,T, Nt)\n", + "\n", + " ## Set up the initial parameters\n", + " num_hidden_neurons = [100, 50, 25]\n", + " num_iter = 1000\n", + " lmb = 1e-3\n", + "\n", + " P = solve_ode_deep_neural_network(t, num_hidden_neurons, num_iter, lmb)\n", + "\n", + " g_dnn_ag = g_trial_deep(t,P)\n", + " g_analytical = g_analytic(t)\n", + "\n", + " # Find the maximum absolute difference between the solutons:\n", + " diff_ag = np.max(np.abs(g_dnn_ag - g_analytical))\n", + " print(\"The max absolute difference between the solutions is: %g\"%diff_ag)\n", + "\n", + " plt.figure(figsize=(10,10))\n", + "\n", + " plt.title('Performance of neural network solving an ODE compared to the analytical solution')\n", + " plt.plot(t, g_analytical)\n", + " plt.plot(t, g_dnn_ag[0,:])\n", + " plt.legend(['analytical','nn'])\n", + " plt.xlabel('t')\n", + " plt.ylabel('g(t)')\n", + "\n", + " plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Using forward Euler to solve the ODE\n", + "\n", + "A straightforward way of solving an ODE numerically, is to use Euler's method.\n", + "\n", + "Euler's method uses Taylor series to approximate the value at a function $f$ at a step $\\Delta x$ from $x$:\n", + "\n", + "$$\n", + "f(x + \\Delta x) \\approx f(x) + \\Delta x f'(x)\n", + "$$\n", + "\n", + "In our case, using Euler's method to approximate the value of $g$ at a step $\\Delta t$ from $t$ yields" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{aligned}\n", + " g(t + \\Delta t) &\\approx g(t) + \\Delta t g'(t) \\\\\n", + " &= g(t) + \\Delta t \\big(\\alpha g(t)(A - g(t))\\big)\n", + "\\end{aligned}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "along with the condition that $g(0) = g_0$.\n", + "\n", + "Let $t_i = i \\cdot \\Delta t$ where $\\Delta t = \\frac{T}{N_t-1}$ where $T$ is the final time our solver must solve for and $N_t$ the number of values for $t \\in [0, T]$ for $i = 0, \\dots, N_t-1$.\n", + "\n", + "For $i \\geq 1$, we have that" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{aligned}\n", + "t_i &= i\\Delta t \\\\\n", + "&= (i - 1)\\Delta t + \\Delta t \\\\\n", + "&= t_{i-1} + \\Delta t\n", + "\\end{aligned}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now, if $g_i = g(t_i)$ then" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + " \\begin{aligned}\n", + " g_i &= g(t_i) \\\\\n", + " &= g(t_{i-1} + \\Delta t) \\\\\n", + " &\\approx g(t_{i-1}) + \\Delta t \\big(\\alpha g(t_{i-1})(A - g(t_{i-1}))\\big) \\\\\n", + " &= g_{i-1} + \\Delta t \\big(\\alpha g_{i-1}(A - g_{i-1})\\big)\n", + " \\end{aligned}\n", + "\\end{equation} \\label{odenum} \\tag{12}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "for $i \\geq 1$ and $g_0 = g(t_0) = g(0) = g_0$.\n", + "\n", + "Equation ([12](#odenum)) could be implemented in the following way,\n", + "extending the program that uses the network using Autograd:" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Assume that all function definitions from the example program using Autograd\n", + "# are located here.\n", + "\n", + "if __name__ == '__main__':\n", + " npr.seed(4155)\n", + "\n", + " ## Decide the vales of arguments to the function to solve\n", + " Nt = 10\n", + " T = 1\n", + " t = np.linspace(0,T, Nt)\n", + "\n", + " ## Set up the initial parameters\n", + " num_hidden_neurons = [100,50,25]\n", + " num_iter = 1000\n", + " lmb = 1e-3\n", + "\n", + " P = solve_ode_deep_neural_network(t, num_hidden_neurons, num_iter, lmb)\n", + "\n", + " g_dnn_ag = g_trial_deep(t,P)\n", + " g_analytical = g_analytic(t)\n", + "\n", + " # Find the maximum absolute difference between the solutons:\n", + " diff_ag = np.max(np.abs(g_dnn_ag - g_analytical))\n", + " print(\"The max absolute difference between the solutions is: %g\"%diff_ag)\n", + "\n", + " plt.figure(figsize=(10,10))\n", + "\n", + " plt.title('Performance of neural network solving an ODE compared to the analytical solution')\n", + " plt.plot(t, g_analytical)\n", + " plt.plot(t, g_dnn_ag[0,:])\n", + " plt.legend(['analytical','nn'])\n", + " plt.xlabel('t')\n", + " plt.ylabel('g(t)')\n", + "\n", + " ## Find an approximation to the funtion using forward Euler\n", + "\n", + " alpha, A, g0 = get_parameters()\n", + " dt = T/(Nt - 1)\n", + "\n", + " # Perform forward Euler to solve the ODE\n", + " g_euler = np.zeros(Nt)\n", + " g_euler[0] = g0\n", + "\n", + " for i in range(1,Nt):\n", + " g_euler[i] = g_euler[i-1] + dt*(alpha*g_euler[i-1]*(A - g_euler[i-1]))\n", + "\n", + " # Print the errors done by each method\n", + " diff1 = np.max(np.abs(g_euler - g_analytical))\n", + " diff2 = np.max(np.abs(g_dnn_ag[0,:] - g_analytical))\n", + "\n", + " print('Max absolute difference between Euler method and analytical: %g'%diff1)\n", + " print('Max absolute difference between deep neural network and analytical: %g'%diff2)\n", + "\n", + " # Plot results\n", + " plt.figure(figsize=(10,10))\n", + "\n", + " plt.plot(t,g_euler)\n", + " plt.plot(t,g_analytical)\n", + " plt.plot(t,g_dnn_ag[0,:])\n", + "\n", + " plt.legend(['euler','analytical','dnn'])\n", + " plt.xlabel('Time t')\n", + " plt.ylabel('g(t)')\n", + "\n", + " plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example: Solving the one dimensional Poisson equation\n", + "\n", + "The Poisson equation for $g(x)$ in one dimension is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation} \\label{poisson} \\tag{13}\n", + " -g''(x) = f(x)\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $f(x)$ is a given function for $x \\in (0,1)$.\n", + "\n", + "The conditions that $g(x)$ is chosen to fulfill, are" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{align*}\n", + " g(0) &= 0 \\\\\n", + " g(1) &= 0\n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This equation can be solved numerically using programs where e.g Autograd and TensorFlow are used.\n", + "The results from the networks can then be compared to the analytical solution.\n", + "In addition, it could be interesting to see how a typical method for numerically solving second order ODEs compares to the neural networks.\n", + "\n", + "\n", + "## The specific equation to solve for\n", + "\n", + "Here, the function $g(x)$ to solve for follows the equation" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "-g''(x) = f(x),\\qquad x \\in (0,1)\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $f(x)$ is a given function, along with the chosen conditions" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{aligned}\n", + "g(0) = g(1) = 0\n", + "\\end{aligned}\\label{cond} \\tag{14}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this example, we consider the case when $f(x) = (3x + x^2)\\exp(x)$.\n", + "\n", + "For this case, a possible trial solution satisfying the conditions could be" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "g_t(x) = x \\cdot (1-x) \\cdot N(P,x)\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The analytical solution for this problem is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "g(x) = x(1 - x)\\exp(x)\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Solving the equation using Autograd" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import autograd.numpy as np\n", + "from autograd import grad, elementwise_grad\n", + "import autograd.numpy.random as npr\n", + "from matplotlib import pyplot as plt\n", + "\n", + "def sigmoid(z):\n", + " return 1/(1 + np.exp(-z))\n", + "\n", + "def deep_neural_network(deep_params, x):\n", + " # N_hidden is the number of hidden layers\n", + " N_hidden = np.size(deep_params) - 1 # -1 since params consist of parameters to all the hidden layers AND the output layer\n", + "\n", + " # Assumes input x being an one-dimensional array\n", + " num_values = np.size(x)\n", + " x = x.reshape(-1, num_values)\n", + "\n", + " # Assume that the input layer does nothing to the input x\n", + " x_input = x\n", + "\n", + " # Due to multiple hidden layers, define a variable referencing to the\n", + " # output of the previous layer:\n", + " x_prev = x_input\n", + "\n", + " ## Hidden layers:\n", + "\n", + " for l in range(N_hidden):\n", + " # From the list of parameters P; find the correct weigths and bias for this layer\n", + " w_hidden = deep_params[l]\n", + "\n", + " # Add a row of ones to include bias\n", + " x_prev = np.concatenate((np.ones((1,num_values)), x_prev ), axis = 0)\n", + "\n", + " z_hidden = np.matmul(w_hidden, x_prev)\n", + " x_hidden = sigmoid(z_hidden)\n", + "\n", + " # Update x_prev such that next layer can use the output from this layer\n", + " x_prev = x_hidden\n", + "\n", + " ## Output layer:\n", + "\n", + " # Get the weights and bias for this layer\n", + " w_output = deep_params[-1]\n", + "\n", + " # Include bias:\n", + " x_prev = np.concatenate((np.ones((1,num_values)), x_prev), axis = 0)\n", + "\n", + " z_output = np.matmul(w_output, x_prev)\n", + " x_output = z_output\n", + "\n", + " return x_output\n", + "\n", + "def solve_ode_deep_neural_network(x, num_neurons, num_iter, lmb):\n", + " # num_hidden_neurons is now a list of number of neurons within each hidden layer\n", + "\n", + " # Find the number of hidden layers:\n", + " N_hidden = np.size(num_neurons)\n", + "\n", + " ## Set up initial weigths and biases\n", + "\n", + " # Initialize the list of parameters:\n", + " P = [None]*(N_hidden + 1) # + 1 to include the output layer\n", + "\n", + " P[0] = npr.randn(num_neurons[0], 2 )\n", + " for l in range(1,N_hidden):\n", + " P[l] = npr.randn(num_neurons[l], num_neurons[l-1] + 1) # +1 to include bias\n", + "\n", + " # For the output layer\n", + " P[-1] = npr.randn(1, num_neurons[-1] + 1 ) # +1 since bias is included\n", + "\n", + " print('Initial cost: %g'%cost_function_deep(P, x))\n", + "\n", + " ## Start finding the optimal weigths using gradient descent\n", + "\n", + " # Find the Python function that represents the gradient of the cost function\n", + " # w.r.t the 0-th input argument -- that is the weights and biases in the hidden and output layer\n", + " cost_function_deep_grad = grad(cost_function_deep,0)\n", + "\n", + " # Let the update be done num_iter times\n", + " for i in range(num_iter):\n", + " # Evaluate the gradient at the current weights and biases in P.\n", + " # The cost_grad consist now of N_hidden + 1 arrays; the gradient w.r.t the weights and biases\n", + " # in the hidden layers and output layers evaluated at x.\n", + " cost_deep_grad = cost_function_deep_grad(P, x)\n", + "\n", + " for l in range(N_hidden+1):\n", + " P[l] = P[l] - lmb * cost_deep_grad[l]\n", + "\n", + " print('Final cost: %g'%cost_function_deep(P, x))\n", + "\n", + " return P\n", + "\n", + "## Set up the cost function specified for this Poisson equation:\n", + "\n", + "# The right side of the ODE\n", + "def f(x):\n", + " return (3*x + x**2)*np.exp(x)\n", + "\n", + "def cost_function_deep(P, x):\n", + "\n", + " # Evaluate the trial function with the current parameters P\n", + " g_t = g_trial_deep(x,P)\n", + "\n", + " # Find the derivative w.r.t x of the trial function\n", + " d2_g_t = elementwise_grad(elementwise_grad(g_trial_deep,0))(x,P)\n", + "\n", + " right_side = f(x)\n", + "\n", + " err_sqr = (-d2_g_t - right_side)**2\n", + " cost_sum = np.sum(err_sqr)\n", + "\n", + " return cost_sum/np.size(err_sqr)\n", + "\n", + "# The trial solution:\n", + "def g_trial_deep(x,P):\n", + " return x*(1-x)*deep_neural_network(P,x)\n", + "\n", + "# The analytic solution;\n", + "def g_analytic(x):\n", + " return x*(1-x)*np.exp(x)\n", + "\n", + "if __name__ == '__main__':\n", + " npr.seed(4155)\n", + "\n", + " ## Decide the vales of arguments to the function to solve\n", + " Nx = 10\n", + " x = np.linspace(0,1, Nx)\n", + "\n", + " ## Set up the initial parameters\n", + " num_hidden_neurons = [200,100]\n", + " num_iter = 1000\n", + " lmb = 1e-3\n", + "\n", + " P = solve_ode_deep_neural_network(x, num_hidden_neurons, num_iter, lmb)\n", + "\n", + " g_dnn_ag = g_trial_deep(x,P)\n", + " g_analytical = g_analytic(x)\n", + "\n", + " # Find the maximum absolute difference between the solutons:\n", + " max_diff = np.max(np.abs(g_dnn_ag - g_analytical))\n", + " print(\"The max absolute difference between the solutions is: %g\"%max_diff)\n", + "\n", + " plt.figure(figsize=(10,10))\n", + "\n", + " plt.title('Performance of neural network solving an ODE compared to the analytical solution')\n", + " plt.plot(x, g_analytical)\n", + " plt.plot(x, g_dnn_ag[0,:])\n", + " plt.legend(['analytical','nn'])\n", + " plt.xlabel('x')\n", + " plt.ylabel('g(x)')\n", + " plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Comparing with a numerical scheme\n", + "\n", + "The Poisson equation is possible to solve using Taylor series to approximate the second derivative.\n", + "\n", + "Using Taylor series, the second derivative can be expressed as\n", + "\n", + "$$\n", + "g''(x) = \\frac{g(x + \\Delta x) - 2g(x) + g(x-\\Delta x)}{\\Delta x^2} + E_{\\Delta x}(x)\n", + "$$\n", + "\n", + "where $\\Delta x$ is a small step size and $E_{\\Delta x}(x)$ being the error term.\n", + "\n", + "Looking away from the error terms gives an approximation to the second derivative:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation} \\label{approx} \\tag{15}\n", + "g''(x) \\approx \\frac{g(x + \\Delta x) - 2g(x) + g(x-\\Delta x)}{\\Delta x^2}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If $x_i = i \\Delta x = x_{i-1} + \\Delta x$ and $g_i = g(x_i)$ for $i = 1,\\dots N_x - 2$ with $N_x$ being the number of values for $x$, ([15](#approx)) becomes" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{aligned}\n", + "g''(x_i) &\\approx \\frac{g(x_i + \\Delta x) - 2g(x_i) + g(x_i -\\Delta x)}{\\Delta x^2} \\\\\n", + "&= \\frac{g_{i+1} - 2g_i + g_{i-1}}{\\Delta x^2}\n", + "\\end{aligned}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Since we know from our problem that" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{aligned}\n", + "-g''(x) &= f(x) \\\\\n", + "&= (3x + x^2)\\exp(x)\n", + "\\end{aligned}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "along with the conditions $g(0) = g(1) = 0$,\n", + "the following scheme can be used to find an approximate solution for $g(x)$ numerically:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + " \\begin{aligned}\n", + " -\\Big( \\frac{g_{i+1} - 2g_i + g_{i-1}}{\\Delta x^2} \\Big) &= f(x_i) \\\\\n", + " -g_{i+1} + 2g_i - g_{i-1} &= \\Delta x^2 f(x_i)\n", + " \\end{aligned}\n", + "\\end{equation} \\label{odesys} \\tag{16}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "for $i = 1, \\dots, N_x - 2$ where $g_0 = g_{N_x - 1} = 0$ and $f(x_i) = (3x_i + x_i^2)\\exp(x_i)$, which is given for our specific problem.\n", + "\n", + "The equation can be rewritten into a matrix equation:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{aligned}\n", + "\\begin{pmatrix}\n", + "2 & -1 & 0 & \\dots & 0 \\\\\n", + "-1 & 2 & -1 & \\dots & 0 \\\\\n", + "\\vdots & & \\ddots & & \\vdots \\\\\n", + "0 & \\dots & -1 & 2 & -1 \\\\\n", + "0 & \\dots & 0 & -1 & 2\\\\\n", + "\\end{pmatrix}\n", + "\\begin{pmatrix}\n", + "g_1 \\\\\n", + "g_2 \\\\\n", + "\\vdots \\\\\n", + "g_{N_x - 3} \\\\\n", + "g_{N_x - 2}\n", + "\\end{pmatrix}\n", + "&=\n", + "\\Delta x^2\n", + "\\begin{pmatrix}\n", + "f(x_1) \\\\\n", + "f(x_2) \\\\\n", + "\\vdots \\\\\n", + "f(x_{N_x - 3}) \\\\\n", + "f(x_{N_x - 2})\n", + "\\end{pmatrix} \\\\\n", + "\\boldsymbol{A}\\boldsymbol{g} &= \\boldsymbol{f},\n", + "\\end{aligned}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "which makes it possible to solve for the vector $\\boldsymbol{g}$.\n", + "\n", + "\n", + "## Setting up the code\n", + "\n", + "We can then compare the result from this numerical scheme with the output from our network using Autograd:" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import autograd.numpy as np\n", + "from autograd import grad, elementwise_grad\n", + "import autograd.numpy.random as npr\n", + "from matplotlib import pyplot as plt\n", + "\n", + "def sigmoid(z):\n", + " return 1/(1 + np.exp(-z))\n", + "\n", + "def deep_neural_network(deep_params, x):\n", + " # N_hidden is the number of hidden layers\n", + " N_hidden = np.size(deep_params) - 1 # -1 since params consist of parameters to all the hidden layers AND the output layer\n", + "\n", + " # Assumes input x being an one-dimensional array\n", + " num_values = np.size(x)\n", + " x = x.reshape(-1, num_values)\n", + "\n", + " # Assume that the input layer does nothing to the input x\n", + " x_input = x\n", + "\n", + " # Due to multiple hidden layers, define a variable referencing to the\n", + " # output of the previous layer:\n", + " x_prev = x_input\n", + "\n", + " ## Hidden layers:\n", + "\n", + " for l in range(N_hidden):\n", + " # From the list of parameters P; find the correct weigths and bias for this layer\n", + " w_hidden = deep_params[l]\n", + "\n", + " # Add a row of ones to include bias\n", + " x_prev = np.concatenate((np.ones((1,num_values)), x_prev ), axis = 0)\n", + "\n", + " z_hidden = np.matmul(w_hidden, x_prev)\n", + " x_hidden = sigmoid(z_hidden)\n", + "\n", + " # Update x_prev such that next layer can use the output from this layer\n", + " x_prev = x_hidden\n", + "\n", + " ## Output layer:\n", + "\n", + " # Get the weights and bias for this layer\n", + " w_output = deep_params[-1]\n", + "\n", + " # Include bias:\n", + " x_prev = np.concatenate((np.ones((1,num_values)), x_prev), axis = 0)\n", + "\n", + " z_output = np.matmul(w_output, x_prev)\n", + " x_output = z_output\n", + "\n", + " return x_output\n", + "\n", + "def solve_ode_deep_neural_network(x, num_neurons, num_iter, lmb):\n", + " # num_hidden_neurons is now a list of number of neurons within each hidden layer\n", + "\n", + " # Find the number of hidden layers:\n", + " N_hidden = np.size(num_neurons)\n", + "\n", + " ## Set up initial weigths and biases\n", + "\n", + " # Initialize the list of parameters:\n", + " P = [None]*(N_hidden + 1) # + 1 to include the output layer\n", + "\n", + " P[0] = npr.randn(num_neurons[0], 2 )\n", + " for l in range(1,N_hidden):\n", + " P[l] = npr.randn(num_neurons[l], num_neurons[l-1] + 1) # +1 to include bias\n", + "\n", + " # For the output layer\n", + " P[-1] = npr.randn(1, num_neurons[-1] + 1 ) # +1 since bias is included\n", + "\n", + " print('Initial cost: %g'%cost_function_deep(P, x))\n", + "\n", + " ## Start finding the optimal weigths using gradient descent\n", + "\n", + " # Find the Python function that represents the gradient of the cost function\n", + " # w.r.t the 0-th input argument -- that is the weights and biases in the hidden and output layer\n", + " cost_function_deep_grad = grad(cost_function_deep,0)\n", + "\n", + " # Let the update be done num_iter times\n", + " for i in range(num_iter):\n", + " # Evaluate the gradient at the current weights and biases in P.\n", + " # The cost_grad consist now of N_hidden + 1 arrays; the gradient w.r.t the weights and biases\n", + " # in the hidden layers and output layers evaluated at x.\n", + " cost_deep_grad = cost_function_deep_grad(P, x)\n", + "\n", + " for l in range(N_hidden+1):\n", + " P[l] = P[l] - lmb * cost_deep_grad[l]\n", + "\n", + " print('Final cost: %g'%cost_function_deep(P, x))\n", + "\n", + " return P\n", + "\n", + "## Set up the cost function specified for this Poisson equation:\n", + "\n", + "# The right side of the ODE\n", + "def f(x):\n", + " return (3*x + x**2)*np.exp(x)\n", + "\n", + "def cost_function_deep(P, x):\n", + "\n", + " # Evaluate the trial function with the current parameters P\n", + " g_t = g_trial_deep(x,P)\n", + "\n", + " # Find the derivative w.r.t x of the trial function\n", + " d2_g_t = elementwise_grad(elementwise_grad(g_trial_deep,0))(x,P)\n", + "\n", + " right_side = f(x)\n", + "\n", + " err_sqr = (-d2_g_t - right_side)**2\n", + " cost_sum = np.sum(err_sqr)\n", + "\n", + " return cost_sum/np.size(err_sqr)\n", + "\n", + "# The trial solution:\n", + "def g_trial_deep(x,P):\n", + " return x*(1-x)*deep_neural_network(P,x)\n", + "\n", + "# The analytic solution;\n", + "def g_analytic(x):\n", + " return x*(1-x)*np.exp(x)\n", + "\n", + "if __name__ == '__main__':\n", + " npr.seed(4155)\n", + "\n", + " ## Decide the vales of arguments to the function to solve\n", + " Nx = 10\n", + " x = np.linspace(0,1, Nx)\n", + "\n", + " ## Set up the initial parameters\n", + " num_hidden_neurons = [200,100]\n", + " num_iter = 1000\n", + " lmb = 1e-3\n", + "\n", + " P = solve_ode_deep_neural_network(x, num_hidden_neurons, num_iter, lmb)\n", + "\n", + " g_dnn_ag = g_trial_deep(x,P)\n", + " g_analytical = g_analytic(x)\n", + "\n", + " # Find the maximum absolute difference between the solutons:\n", + "\n", + " plt.figure(figsize=(10,10))\n", + "\n", + " plt.title('Performance of neural network solving an ODE compared to the analytical solution')\n", + " plt.plot(x, g_analytical)\n", + " plt.plot(x, g_dnn_ag[0,:])\n", + " plt.legend(['analytical','nn'])\n", + " plt.xlabel('x')\n", + " plt.ylabel('g(x)')\n", + "\n", + " ## Perform the computation using the numerical scheme\n", + "\n", + " dx = 1/(Nx - 1)\n", + "\n", + " # Set up the matrix A\n", + " A = np.zeros((Nx-2,Nx-2))\n", + "\n", + " A[0,0] = 2\n", + " A[0,1] = -1\n", + "\n", + " for i in range(1,Nx-3):\n", + " A[i,i-1] = -1\n", + " A[i,i] = 2\n", + " A[i,i+1] = -1\n", + "\n", + " A[Nx - 3, Nx - 4] = -1\n", + " A[Nx - 3, Nx - 3] = 2\n", + "\n", + " # Set up the vector f\n", + " f_vec = dx**2 * f(x[1:-1])\n", + "\n", + " # Solve the equation\n", + " g_res = np.linalg.solve(A,f_vec)\n", + "\n", + " g_vec = np.zeros(Nx)\n", + " g_vec[1:-1] = g_res\n", + "\n", + " # Print the differences between each method\n", + " max_diff1 = np.max(np.abs(g_dnn_ag - g_analytical))\n", + " max_diff2 = np.max(np.abs(g_vec - g_analytical))\n", + " print(\"The max absolute difference between the analytical solution and DNN Autograd: %g\"%max_diff1)\n", + " print(\"The max absolute difference between the analytical solution and numerical scheme: %g\"%max_diff2)\n", + "\n", + " # Plot the results\n", + " plt.figure(figsize=(10,10))\n", + "\n", + " plt.plot(x,g_vec)\n", + " plt.plot(x,g_analytical)\n", + " plt.plot(x,g_dnn_ag[0,:])\n", + "\n", + " plt.legend(['numerical scheme','analytical','dnn'])\n", + " plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Partial Differential Equations\n", + "\n", + "A partial differential equation (PDE) has a solution here the function\n", + "is defined by multiple variables. The equation may involve all kinds\n", + "of combinations of which variables the function is differentiated with\n", + "respect to.\n", + "\n", + "In general, a partial differential equation for a function $g(x_1,\\dots,x_N)$ with $N$ variables may be expressed as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation} \\label{PDE} \\tag{17}\n", + " f\\left(x_1, \\, \\dots \\, , x_N, \\frac{\\partial g(x_1,\\dots,x_N) }{\\partial x_1}, \\dots , \\frac{\\partial g(x_1,\\dots,x_N) }{\\partial x_N}, \\frac{\\partial g(x_1,\\dots,x_N) }{\\partial x_1\\partial x_2}, \\, \\dots \\, , \\frac{\\partial^n g(x_1,\\dots,x_N) }{\\partial x_N^n} \\right) = 0\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $f$ is an expression involving all kinds of possible mixed derivatives of $g(x_1,\\dots,x_N)$ up to an order $n$. In order for the solution to be unique, some additional conditions must also be given.\n", + "\n", + "\n", + "## Type of problem\n", + "\n", + "The problem our network must solve for, is similar to the ODE case.\n", + "We must have a trial solution $g_t$ at hand.\n", + "\n", + "For instance, the trial solution could be expressed as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{align*}\n", + " g_t(x_1,\\dots,x_N) = h_1(x_1,\\dots,x_N) + h_2(x_1,\\dots,x_N,N(x_1,\\dots,x_N,P))\n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $h_1(x_1,\\dots,x_N)$ is a function that ensures $g_t(x_1,\\dots,x_N)$ satisfies some given conditions.\n", + "The neural network $N(x_1,\\dots,x_N,P)$ has weights and biases described by $P$ and $h_2(x_1,\\dots,x_N,N(x_1,\\dots,x_N,P))$ is an expression using the output from the neural network in some way.\n", + "\n", + "The role of the function $h_2(x_1,\\dots,x_N,N(x_1,\\dots,x_N,P))$, is to ensure that the output of $N(x_1,\\dots,x_N,P)$ is zero when $g_t(x_1,\\dots,x_N)$ is evaluated at the values of $x_1,\\dots,x_N$ where the given conditions must be satisfied. The function $h_1(x_1,\\dots,x_N)$ should alone make $g_t(x_1,\\dots,x_N)$ satisfy the conditions.\n", + "\n", + "\n", + "\n", + "## Network requirements\n", + "\n", + "The network tries then the minimize the cost function following the\n", + "same ideas as described for the ODE case, but now with more than one\n", + "variables to consider. The concept still remains the same; find a set\n", + "of parameters $P$ such that the expression $f$ in ([17](#PDE)) is as\n", + "close to zero as possible.\n", + "\n", + "As for the ODE case, the cost function is the mean squared error that\n", + "the network must try to minimize. The cost function for the network to\n", + "minimize is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "C\\left(x_1, \\dots, x_N, P\\right) = \\left( f\\left(x_1, \\, \\dots \\, , x_N, \\frac{\\partial g(x_1,\\dots,x_N) }{\\partial x_1}, \\dots , \\frac{\\partial g(x_1,\\dots,x_N) }{\\partial x_N}, \\frac{\\partial g(x_1,\\dots,x_N) }{\\partial x_1\\partial x_2}, \\, \\dots \\, , \\frac{\\partial^n g(x_1,\\dots,x_N) }{\\partial x_N^n} \\right) \\right)^2\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## More details\n", + "\n", + "If we let $\\boldsymbol{x} = \\big( x_1, \\dots, x_N \\big)$ be an array containing the values for $x_1, \\dots, x_N$ respectively, the cost function can be reformulated into the following:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "C\\left(\\boldsymbol{x}, P\\right) = f\\left( \\left( \\boldsymbol{x}, \\frac{\\partial g(\\boldsymbol{x}) }{\\partial x_1}, \\dots , \\frac{\\partial g(\\boldsymbol{x}) }{\\partial x_N}, \\frac{\\partial g(\\boldsymbol{x}) }{\\partial x_1\\partial x_2}, \\, \\dots \\, , \\frac{\\partial^n g(\\boldsymbol{x}) }{\\partial x_N^n} \\right) \\right)^2\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If we also have $M$ different sets of values for $x_1, \\dots, x_N$, that is $\\boldsymbol{x}_i = \\big(x_1^{(i)}, \\dots, x_N^{(i)}\\big)$ for $i = 1,\\dots,M$ being the rows in matrix $X$, the cost function can be generalized into" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "C\\left(X, P \\right) = \\sum_{i=1}^M f\\left( \\left( \\boldsymbol{x}_i, \\frac{\\partial g(\\boldsymbol{x}_i) }{\\partial x_1}, \\dots , \\frac{\\partial g(\\boldsymbol{x}_i) }{\\partial x_N}, \\frac{\\partial g(\\boldsymbol{x}_i) }{\\partial x_1\\partial x_2}, \\, \\dots \\, , \\frac{\\partial^n g(\\boldsymbol{x}_i) }{\\partial x_N^n} \\right) \\right)^2.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example: The diffusion equation\n", + "\n", + "In one spatial dimension, the equation reads" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{\\partial g(x,t)}{\\partial t} = \\frac{\\partial^2 g(x,t)}{\\partial x^2}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where a possible choice of conditions are" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{align*}\n", + "g(0,t) &= 0 ,\\qquad t \\geq 0 \\\\\n", + "g(1,t) &= 0, \\qquad t \\geq 0 \\\\\n", + "g(x,0) &= u(x),\\qquad x\\in [0,1]\n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "with $u(x)$ being some given function.\n", + "\n", + "\n", + "## Defining the problem\n", + "\n", + "For this case, we want to find $g(x,t)$ such that" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + " \\frac{\\partial g(x,t)}{\\partial t} = \\frac{\\partial^2 g(x,t)}{\\partial x^2}\n", + "\\end{equation} \\label{diffonedim} \\tag{18}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{align*}\n", + "g(0,t) &= 0 ,\\qquad t \\geq 0 \\\\\n", + "g(1,t) &= 0, \\qquad t \\geq 0 \\\\\n", + "g(x,0) &= u(x),\\qquad x\\in [0,1]\n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "with $u(x) = \\sin(\\pi x)$.\n", + "\n", + "First, let us set up the deep neural network.\n", + "The deep neural network will follow the same structure as discussed in the examples solving the ODEs.\n", + "First, we will look into how Autograd could be used in a network tailored to solve for bivariate functions.\n", + "\n", + "\n", + "\n", + "\n", + "## Setting up the network using Autograd\n", + "\n", + "The only change to do here, is to extend our network such that\n", + "functions of multiple parameters are correctly handled. In this case\n", + "we have two variables in our function to solve for, that is time $t$\n", + "and position $x$. The variables will be represented by a\n", + "one-dimensional array in the program. The program will evaluate the\n", + "network at each possible pair $(x,t)$, given an array for the desired\n", + "$x$-values and $t$-values to approximate the solution at." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def sigmoid(z):\n", + " return 1/(1 + np.exp(-z))\n", + "\n", + "def deep_neural_network(deep_params, x):\n", + " # x is now a point and a 1D numpy array; make it a column vector\n", + " num_coordinates = np.size(x,0)\n", + " x = x.reshape(num_coordinates,-1)\n", + "\n", + " num_points = np.size(x,1)\n", + "\n", + " # N_hidden is the number of hidden layers\n", + " N_hidden = np.size(deep_params) - 1 # -1 since params consist of parameters to all the hidden layers AND the output layer\n", + "\n", + " # Assume that the input layer does nothing to the input x\n", + " x_input = x\n", + " x_prev = x_input\n", + "\n", + " ## Hidden layers:\n", + "\n", + " for l in range(N_hidden):\n", + " # From the list of parameters P; find the correct weigths and bias for this layer\n", + " w_hidden = deep_params[l]\n", + "\n", + " # Add a row of ones to include bias\n", + " x_prev = np.concatenate((np.ones((1,num_points)), x_prev ), axis = 0)\n", + "\n", + " z_hidden = np.matmul(w_hidden, x_prev)\n", + " x_hidden = sigmoid(z_hidden)\n", + "\n", + " # Update x_prev such that next layer can use the output from this layer\n", + " x_prev = x_hidden\n", + "\n", + " ## Output layer:\n", + "\n", + " # Get the weights and bias for this layer\n", + " w_output = deep_params[-1]\n", + "\n", + " # Include bias:\n", + " x_prev = np.concatenate((np.ones((1,num_points)), x_prev), axis = 0)\n", + "\n", + " z_output = np.matmul(w_output, x_prev)\n", + " x_output = z_output\n", + "\n", + " return x_output[0][0]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Setting up the network using Autograd; The trial solution\n", + "\n", + "The cost function must then iterate through the given arrays\n", + "containing values for $x$ and $t$, defines a point $(x,t)$ the deep\n", + "neural network and the trial solution is evaluated at, and then finds\n", + "the Jacobian of the trial solution.\n", + "\n", + "A possible trial solution for this PDE is\n", + "\n", + "$$\n", + "g_t(x,t) = h_1(x,t) + x(1-x)tN(x,t,P)\n", + "$$\n", + "\n", + "with $A(x,t)$ being a function ensuring that $g_t(x,t)$ satisfies our given conditions, and $N(x,t,P)$ being the output from the deep neural network using weights and biases for each layer from $P$.\n", + "\n", + "To fulfill the conditions, $A(x,t)$ could be:\n", + "\n", + "$$\n", + "h_1(x,t) = (1-t)\\Big(u(x) - \\big((1-x)u(0) + x u(1)\\big)\\Big) = (1-t)u(x) = (1-t)\\sin(\\pi x)\n", + "$$\n", + "since $(0) = u(1) = 0$ and $u(x) = \\sin(\\pi x)$.\n", + "\n", + "\n", + "## Why the jacobian?\n", + "\n", + "The Jacobian is used because the program must find the derivative of\n", + "the trial solution with respect to $x$ and $t$.\n", + "\n", + "This gives the necessity of computing the Jacobian matrix, as we want\n", + "to evaluate the gradient with respect to $x$ and $t$ (note that the\n", + "Jacobian of a scalar-valued multivariate function is simply its\n", + "gradient).\n", + "\n", + "In Autograd, the differentiation is by default done with respect to\n", + "the first input argument of your Python function. Since the points is\n", + "an array representing $x$ and $t$, the Jacobian is calculated using\n", + "the values of $x$ and $t$.\n", + "\n", + "To find the second derivative with respect to $x$ and $t$, the\n", + "Jacobian can be found for the second time. The result is a Hessian\n", + "matrix, which is the matrix containing all the possible second order\n", + "mixed derivatives of $g(x,t)$." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Set up the trial function:\n", + "def u(x):\n", + " return np.sin(np.pi*x)\n", + "\n", + "def g_trial(point,P):\n", + " x,t = point\n", + " return (1-t)*u(x) + x*(1-x)*t*deep_neural_network(P,point)\n", + "\n", + "# The right side of the ODE:\n", + "def f(point):\n", + " return 0.\n", + "\n", + "# The cost function:\n", + "def cost_function(P, x, t):\n", + " cost_sum = 0\n", + "\n", + " g_t_jacobian_func = jacobian(g_trial)\n", + " g_t_hessian_func = hessian(g_trial)\n", + "\n", + " for x_ in x:\n", + " for t_ in t:\n", + " point = np.array([x_,t_])\n", + "\n", + " g_t = g_trial(point,P)\n", + " g_t_jacobian = g_t_jacobian_func(point,P)\n", + " g_t_hessian = g_t_hessian_func(point,P)\n", + "\n", + " g_t_dt = g_t_jacobian[1]\n", + " g_t_d2x = g_t_hessian[0][0]\n", + "\n", + " func = f(point)\n", + "\n", + " err_sqr = ( (g_t_dt - g_t_d2x) - func)**2\n", + " cost_sum += err_sqr\n", + "\n", + " return cost_sum" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Setting up the network using Autograd; The full program\n", + "\n", + "Having set up the network, along with the trial solution and cost function, we can now see how the deep neural network performs by comparing the results to the analytical solution.\n", + "\n", + "The analytical solution of our problem is\n", + "\n", + "$$\n", + "g(x,t) = \\exp(-\\pi^2 t)\\sin(\\pi x)\n", + "$$\n", + "\n", + "A possible way to implement a neural network solving the PDE, is given below.\n", + "Be aware, though, that it is fairly slow for the parameters used.\n", + "A better result is possible, but requires more iterations, and thus longer time to complete.\n", + "\n", + "\n", + "Indeed, the program below is not optimal in its implementation, but rather serves as an example on how to implement and use a neural network to solve a PDE.\n", + "Using TensorFlow results in a much better execution time. Try it!" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import autograd.numpy as np\n", + "from autograd import jacobian,hessian,grad\n", + "import autograd.numpy.random as npr\n", + "from matplotlib import cm\n", + "from matplotlib import pyplot as plt\n", + "from mpl_toolkits.mplot3d import axes3d\n", + "\n", + "## Set up the network\n", + "\n", + "def sigmoid(z):\n", + " return 1/(1 + np.exp(-z))\n", + "\n", + "def deep_neural_network(deep_params, x):\n", + " # x is now a point and a 1D numpy array; make it a column vector\n", + " num_coordinates = np.size(x,0)\n", + " x = x.reshape(num_coordinates,-1)\n", + "\n", + " num_points = np.size(x,1)\n", + "\n", + " # N_hidden is the number of hidden layers\n", + " N_hidden = np.size(deep_params) - 1 # -1 since params consist of parameters to all the hidden layers AND the output layer\n", + "\n", + " # Assume that the input layer does nothing to the input x\n", + " x_input = x\n", + " x_prev = x_input\n", + "\n", + " ## Hidden layers:\n", + "\n", + " for l in range(N_hidden):\n", + " # From the list of parameters P; find the correct weigths and bias for this layer\n", + " w_hidden = deep_params[l]\n", + "\n", + " # Add a row of ones to include bias\n", + " x_prev = np.concatenate((np.ones((1,num_points)), x_prev ), axis = 0)\n", + "\n", + " z_hidden = np.matmul(w_hidden, x_prev)\n", + " x_hidden = sigmoid(z_hidden)\n", + "\n", + " # Update x_prev such that next layer can use the output from this layer\n", + " x_prev = x_hidden\n", + "\n", + " ## Output layer:\n", + "\n", + " # Get the weights and bias for this layer\n", + " w_output = deep_params[-1]\n", + "\n", + " # Include bias:\n", + " x_prev = np.concatenate((np.ones((1,num_points)), x_prev), axis = 0)\n", + "\n", + " z_output = np.matmul(w_output, x_prev)\n", + " x_output = z_output\n", + "\n", + " return x_output[0][0]\n", + "\n", + "## Define the trial solution and cost function\n", + "def u(x):\n", + " return np.sin(np.pi*x)\n", + "\n", + "def g_trial(point,P):\n", + " x,t = point\n", + " return (1-t)*u(x) + x*(1-x)*t*deep_neural_network(P,point)\n", + "\n", + "# The right side of the ODE:\n", + "def f(point):\n", + " return 0.\n", + "\n", + "# The cost function:\n", + "def cost_function(P, x, t):\n", + " cost_sum = 0\n", + "\n", + " g_t_jacobian_func = jacobian(g_trial)\n", + " g_t_hessian_func = hessian(g_trial)\n", + "\n", + " for x_ in x:\n", + " for t_ in t:\n", + " point = np.array([x_,t_])\n", + "\n", + " g_t = g_trial(point,P)\n", + " g_t_jacobian = g_t_jacobian_func(point,P)\n", + " g_t_hessian = g_t_hessian_func(point,P)\n", + "\n", + " g_t_dt = g_t_jacobian[1]\n", + " g_t_d2x = g_t_hessian[0][0]\n", + "\n", + " func = f(point)\n", + "\n", + " err_sqr = ( (g_t_dt - g_t_d2x) - func)**2\n", + " cost_sum += err_sqr\n", + "\n", + " return cost_sum /( np.size(x)*np.size(t) )\n", + "\n", + "## For comparison, define the analytical solution\n", + "def g_analytic(point):\n", + " x,t = point\n", + " return np.exp(-np.pi**2*t)*np.sin(np.pi*x)\n", + "\n", + "## Set up a function for training the network to solve for the equation\n", + "def solve_pde_deep_neural_network(x,t, num_neurons, num_iter, lmb):\n", + " ## Set up initial weigths and biases\n", + " N_hidden = np.size(num_neurons)\n", + "\n", + " ## Set up initial weigths and biases\n", + "\n", + " # Initialize the list of parameters:\n", + " P = [None]*(N_hidden + 1) # + 1 to include the output layer\n", + "\n", + " P[0] = npr.randn(num_neurons[0], 2 + 1 ) # 2 since we have two points, +1 to include bias\n", + " for l in range(1,N_hidden):\n", + " P[l] = npr.randn(num_neurons[l], num_neurons[l-1] + 1) # +1 to include bias\n", + "\n", + " # For the output layer\n", + " P[-1] = npr.randn(1, num_neurons[-1] + 1 ) # +1 since bias is included\n", + "\n", + " print('Initial cost: ',cost_function(P, x, t))\n", + "\n", + " cost_function_grad = grad(cost_function,0)\n", + "\n", + " # Let the update be done num_iter times\n", + " for i in range(num_iter):\n", + " cost_grad = cost_function_grad(P, x , t)\n", + "\n", + " for l in range(N_hidden+1):\n", + " P[l] = P[l] - lmb * cost_grad[l]\n", + "\n", + " print('Final cost: ',cost_function(P, x, t))\n", + "\n", + " return P\n", + "\n", + "if __name__ == '__main__':\n", + " ### Use the neural network:\n", + " npr.seed(15)\n", + "\n", + " ## Decide the vales of arguments to the function to solve\n", + " Nx = 10; Nt = 10\n", + " x = np.linspace(0, 1, Nx)\n", + " t = np.linspace(0,1,Nt)\n", + "\n", + " ## Set up the parameters for the network\n", + " num_hidden_neurons = [100, 25]\n", + " num_iter = 250\n", + " lmb = 0.01\n", + "\n", + " P = solve_pde_deep_neural_network(x,t, num_hidden_neurons, num_iter, lmb)\n", + "\n", + " ## Store the results\n", + " g_dnn_ag = np.zeros((Nx, Nt))\n", + " G_analytical = np.zeros((Nx, Nt))\n", + " for i,x_ in enumerate(x):\n", + " for j, t_ in enumerate(t):\n", + " point = np.array([x_, t_])\n", + " g_dnn_ag[i,j] = g_trial(point,P)\n", + "\n", + " G_analytical[i,j] = g_analytic(point)\n", + "\n", + " # Find the map difference between the analytical and the computed solution\n", + " diff_ag = np.abs(g_dnn_ag - G_analytical)\n", + " print('Max absolute difference between the analytical solution and the network: %g'%np.max(diff_ag))\n", + "\n", + " ## Plot the solutions in two dimensions, that being in position and time\n", + "\n", + " T,X = np.meshgrid(t,x)\n", + "\n", + " fig = plt.figure(figsize=(10,10))\n", + " ax = fig.gca(projection='3d')\n", + " ax.set_title('Solution from the deep neural network w/ %d layer'%len(num_hidden_neurons))\n", + " s = ax.plot_surface(T,X,g_dnn_ag,linewidth=0,antialiased=False,cmap=cm.viridis)\n", + " ax.set_xlabel('Time $t$')\n", + " ax.set_ylabel('Position $x$');\n", + "\n", + "\n", + " fig = plt.figure(figsize=(10,10))\n", + " ax = fig.gca(projection='3d')\n", + " ax.set_title('Analytical solution')\n", + " s = ax.plot_surface(T,X,G_analytical,linewidth=0,antialiased=False,cmap=cm.viridis)\n", + " ax.set_xlabel('Time $t$')\n", + " ax.set_ylabel('Position $x$');\n", + "\n", + " fig = plt.figure(figsize=(10,10))\n", + " ax = fig.gca(projection='3d')\n", + " ax.set_title('Difference')\n", + " s = ax.plot_surface(T,X,diff_ag,linewidth=0,antialiased=False,cmap=cm.viridis)\n", + " ax.set_xlabel('Time $t$')\n", + " ax.set_ylabel('Position $x$');\n", + "\n", + " ## Take some slices of the 3D plots just to see the solutions at particular times\n", + " indx1 = 0\n", + " indx2 = int(Nt/2)\n", + " indx3 = Nt-1\n", + "\n", + " t1 = t[indx1]\n", + " t2 = t[indx2]\n", + " t3 = t[indx3]\n", + "\n", + " # Slice the results from the DNN\n", + " res1 = g_dnn_ag[:,indx1]\n", + " res2 = g_dnn_ag[:,indx2]\n", + " res3 = g_dnn_ag[:,indx3]\n", + "\n", + " # Slice the analytical results\n", + " res_analytical1 = G_analytical[:,indx1]\n", + " res_analytical2 = G_analytical[:,indx2]\n", + " res_analytical3 = G_analytical[:,indx3]\n", + "\n", + " # Plot the slices\n", + " plt.figure(figsize=(10,10))\n", + " plt.title(\"Computed solutions at time = %g\"%t1)\n", + " plt.plot(x, res1)\n", + " plt.plot(x,res_analytical1)\n", + " plt.legend(['dnn','analytical'])\n", + "\n", + " plt.figure(figsize=(10,10))\n", + " plt.title(\"Computed solutions at time = %g\"%t2)\n", + " plt.plot(x, res2)\n", + " plt.plot(x,res_analytical2)\n", + " plt.legend(['dnn','analytical'])\n", + "\n", + " plt.figure(figsize=(10,10))\n", + " plt.title(\"Computed solutions at time = %g\"%t3)\n", + " plt.plot(x, res3)\n", + " plt.plot(x,res_analytical3)\n", + " plt.legend(['dnn','analytical'])\n", + "\n", + " plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example: Solving the wave equation with Neural Networks\n", + "\n", + "The wave equation is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{\\partial^2 g(x,t)}{\\partial t^2} = c^2\\frac{\\partial^2 g(x,t)}{\\partial x^2}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "with $c$ being the specified wave speed.\n", + "\n", + "Here, the chosen conditions are" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{align*}\n", + "\tg(0,t) &= 0 \\\\\n", + "\tg(1,t) &= 0 \\\\\n", + "\tg(x,0) &= u(x) \\\\\n", + "\t\\frac{\\partial g(x,t)}{\\partial t} \\Big |_{t = 0} &= v(x)\n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $\\frac{\\partial g(x,t)}{\\partial t} \\Big |_{t = 0}$ means the derivative of $g(x,t)$ with respect to $t$ is evaluated at $t = 0$, and $u(x)$ and $v(x)$ being given functions.\n", + "\n", + "\n", + "## The problem to solve for\n", + "\n", + "The wave equation to solve for, is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation} \\label{wave} \\tag{19}\n", + "\\frac{\\partial^2 g(x,t)}{\\partial t^2} = c^2 \\frac{\\partial^2 g(x,t)}{\\partial x^2}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $c$ is the given wave speed.\n", + "The chosen conditions for this equation are" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{aligned}\n", + "g(0,t) &= 0, &t \\geq 0 \\\\\n", + "g(1,t) &= 0, &t \\geq 0 \\\\\n", + "g(x,0) &= u(x), &x\\in[0,1] \\\\\n", + "\\frac{\\partial g(x,t)}{\\partial t}\\Big |_{t = 0} &= v(x), &x \\in [0,1]\n", + "\\end{aligned} \\label{condwave} \\tag{20}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this example, let $c = 1$ and $u(x) = \\sin(\\pi x)$ and $v(x) = -\\pi\\sin(\\pi x)$.\n", + "\n", + "\n", + "\n", + "## The trial solution\n", + "Setting up the network is done in similar matter as for the example of solving the diffusion equation.\n", + "The only things we have to change, is the trial solution such that it satisfies the conditions from ([20](#condwave)) and the cost function.\n", + "\n", + "The trial solution becomes slightly different since we have other conditions than in the example of solving the diffusion equation. Here, a possible trial solution $g_t(x,t)$ is\n", + "\n", + "$$\n", + "g_t(x,t) = h_1(x,t) + x(1-x)t^2N(x,t,P)\n", + "$$\n", + "\n", + "where\n", + "\n", + "$$\n", + "h_1(x,t) = (1-t^2)u(x) + tv(x)\n", + "$$\n", + "\n", + "Note that this trial solution satisfies the conditions only if $u(0) = v(0) = u(1) = v(1) = 0$, which is the case in this example.\n", + "\n", + "\n", + "## The analytical solution\n", + "\n", + "The analytical solution for our specific problem, is\n", + "\n", + "$$\n", + "g(x,t) = \\sin(\\pi x)\\cos(\\pi t) - \\sin(\\pi x)\\sin(\\pi t)\n", + "$$\n", + "\n", + "\n", + "## Solving the wave equation - the full program using Autograd" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import autograd.numpy as np\n", + "from autograd import hessian,grad\n", + "import autograd.numpy.random as npr\n", + "from matplotlib import cm\n", + "from matplotlib import pyplot as plt\n", + "from mpl_toolkits.mplot3d import axes3d\n", + "\n", + "## Set up the trial function:\n", + "def u(x):\n", + " return np.sin(np.pi*x)\n", + "\n", + "def v(x):\n", + " return -np.pi*np.sin(np.pi*x)\n", + "\n", + "def h1(point):\n", + " x,t = point\n", + " return (1 - t**2)*u(x) + t*v(x)\n", + "\n", + "def g_trial(point,P):\n", + " x,t = point\n", + " return h1(point) + x*(1-x)*t**2*deep_neural_network(P,point)\n", + "\n", + "## Define the cost function\n", + "def cost_function(P, x, t):\n", + " cost_sum = 0\n", + "\n", + " g_t_hessian_func = hessian(g_trial)\n", + "\n", + " for x_ in x:\n", + " for t_ in t:\n", + " point = np.array([x_,t_])\n", + "\n", + " g_t_hessian = g_t_hessian_func(point,P)\n", + "\n", + " g_t_d2x = g_t_hessian[0][0]\n", + " g_t_d2t = g_t_hessian[1][1]\n", + "\n", + " err_sqr = ( (g_t_d2t - g_t_d2x) )**2\n", + " cost_sum += err_sqr\n", + "\n", + " return cost_sum / (np.size(t) * np.size(x))\n", + "\n", + "## The neural network\n", + "def sigmoid(z):\n", + " return 1/(1 + np.exp(-z))\n", + "\n", + "def deep_neural_network(deep_params, x):\n", + " # x is now a point and a 1D numpy array; make it a column vector\n", + " num_coordinates = np.size(x,0)\n", + " x = x.reshape(num_coordinates,-1)\n", + "\n", + " num_points = np.size(x,1)\n", + "\n", + " # N_hidden is the number of hidden layers\n", + " N_hidden = np.size(deep_params) - 1 # -1 since params consist of parameters to all the hidden layers AND the output layer\n", + "\n", + " # Assume that the input layer does nothing to the input x\n", + " x_input = x\n", + " x_prev = x_input\n", + "\n", + " ## Hidden layers:\n", + "\n", + " for l in range(N_hidden):\n", + " # From the list of parameters P; find the correct weigths and bias for this layer\n", + " w_hidden = deep_params[l]\n", + "\n", + " # Add a row of ones to include bias\n", + " x_prev = np.concatenate((np.ones((1,num_points)), x_prev ), axis = 0)\n", + "\n", + " z_hidden = np.matmul(w_hidden, x_prev)\n", + " x_hidden = sigmoid(z_hidden)\n", + "\n", + " # Update x_prev such that next layer can use the output from this layer\n", + " x_prev = x_hidden\n", + "\n", + " ## Output layer:\n", + "\n", + " # Get the weights and bias for this layer\n", + " w_output = deep_params[-1]\n", + "\n", + " # Include bias:\n", + " x_prev = np.concatenate((np.ones((1,num_points)), x_prev), axis = 0)\n", + "\n", + " z_output = np.matmul(w_output, x_prev)\n", + " x_output = z_output\n", + "\n", + " return x_output[0][0]\n", + "\n", + "## The analytical solution\n", + "def g_analytic(point):\n", + " x,t = point\n", + " return np.sin(np.pi*x)*np.cos(np.pi*t) - np.sin(np.pi*x)*np.sin(np.pi*t)\n", + "\n", + "def solve_pde_deep_neural_network(x,t, num_neurons, num_iter, lmb):\n", + " ## Set up initial weigths and biases\n", + " N_hidden = np.size(num_neurons)\n", + "\n", + " ## Set up initial weigths and biases\n", + "\n", + " # Initialize the list of parameters:\n", + " P = [None]*(N_hidden + 1) # + 1 to include the output layer\n", + "\n", + " P[0] = npr.randn(num_neurons[0], 2 + 1 ) # 2 since we have two points, +1 to include bias\n", + " for l in range(1,N_hidden):\n", + " P[l] = npr.randn(num_neurons[l], num_neurons[l-1] + 1) # +1 to include bias\n", + "\n", + " # For the output layer\n", + " P[-1] = npr.randn(1, num_neurons[-1] + 1 ) # +1 since bias is included\n", + "\n", + " print('Initial cost: ',cost_function(P, x, t))\n", + "\n", + " cost_function_grad = grad(cost_function,0)\n", + "\n", + " # Let the update be done num_iter times\n", + " for i in range(num_iter):\n", + " cost_grad = cost_function_grad(P, x , t)\n", + "\n", + " for l in range(N_hidden+1):\n", + " P[l] = P[l] - lmb * cost_grad[l]\n", + "\n", + "\n", + " print('Final cost: ',cost_function(P, x, t))\n", + "\n", + " return P\n", + "\n", + "if __name__ == '__main__':\n", + " ### Use the neural network:\n", + " npr.seed(15)\n", + "\n", + " ## Decide the vales of arguments to the function to solve\n", + " Nx = 10; Nt = 10\n", + " x = np.linspace(0, 1, Nx)\n", + " t = np.linspace(0,1,Nt)\n", + "\n", + " ## Set up the parameters for the network\n", + " num_hidden_neurons = [50,20]\n", + " num_iter = 1000\n", + " lmb = 0.01\n", + "\n", + " P = solve_pde_deep_neural_network(x,t, num_hidden_neurons, num_iter, lmb)\n", + "\n", + " ## Store the results\n", + " res = np.zeros((Nx, Nt))\n", + " res_analytical = np.zeros((Nx, Nt))\n", + " for i,x_ in enumerate(x):\n", + " for j, t_ in enumerate(t):\n", + " point = np.array([x_, t_])\n", + " res[i,j] = g_trial(point,P)\n", + "\n", + " res_analytical[i,j] = g_analytic(point)\n", + "\n", + " diff = np.abs(res - res_analytical)\n", + " print(\"Max difference between analytical and solution from nn: %g\"%np.max(diff))\n", + "\n", + " ## Plot the solutions in two dimensions, that being in position and time\n", + "\n", + " T,X = np.meshgrid(t,x)\n", + "\n", + " fig = plt.figure(figsize=(10,10))\n", + " ax = fig.gca(projection='3d')\n", + " ax.set_title('Solution from the deep neural network w/ %d layer'%len(num_hidden_neurons))\n", + " s = ax.plot_surface(T,X,res,linewidth=0,antialiased=False,cmap=cm.viridis)\n", + " ax.set_xlabel('Time $t$')\n", + " ax.set_ylabel('Position $x$');\n", + "\n", + "\n", + " fig = plt.figure(figsize=(10,10))\n", + " ax = fig.gca(projection='3d')\n", + " ax.set_title('Analytical solution')\n", + " s = ax.plot_surface(T,X,res_analytical,linewidth=0,antialiased=False,cmap=cm.viridis)\n", + " ax.set_xlabel('Time $t$')\n", + " ax.set_ylabel('Position $x$');\n", + "\n", + "\n", + " fig = plt.figure(figsize=(10,10))\n", + " ax = fig.gca(projection='3d')\n", + " ax.set_title('Difference')\n", + " s = ax.plot_surface(T,X,diff,linewidth=0,antialiased=False,cmap=cm.viridis)\n", + " ax.set_xlabel('Time $t$')\n", + " ax.set_ylabel('Position $x$');\n", + "\n", + " ## Take some slices of the 3D plots just to see the solutions at particular times\n", + " indx1 = 0\n", + " indx2 = int(Nt/2)\n", + " indx3 = Nt-1\n", + "\n", + " t1 = t[indx1]\n", + " t2 = t[indx2]\n", + " t3 = t[indx3]\n", + "\n", + " # Slice the results from the DNN\n", + " res1 = res[:,indx1]\n", + " res2 = res[:,indx2]\n", + " res3 = res[:,indx3]\n", + "\n", + " # Slice the analytical results\n", + " res_analytical1 = res_analytical[:,indx1]\n", + " res_analytical2 = res_analytical[:,indx2]\n", + " res_analytical3 = res_analytical[:,indx3]\n", + "\n", + " # Plot the slices\n", + " plt.figure(figsize=(10,10))\n", + " plt.title(\"Computed solutions at time = %g\"%t1)\n", + " plt.plot(x, res1)\n", + " plt.plot(x,res_analytical1)\n", + " plt.legend(['dnn','analytical'])\n", + "\n", + " plt.figure(figsize=(10,10))\n", + " plt.title(\"Computed solutions at time = %g\"%t2)\n", + " plt.plot(x, res2)\n", + " plt.plot(x,res_analytical2)\n", + " plt.legend(['dnn','analytical'])\n", + "\n", + " plt.figure(figsize=(10,10))\n", + " plt.title(\"Computed solutions at time = %g\"%t3)\n", + " plt.plot(x, res3)\n", + " plt.plot(x,res_analytical3)\n", + " plt.legend(['dnn','analytical'])\n", + "\n", + " plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Resources on differential equations and deep learning\n", + "\n", + "1. [Artificial neural networks for solving ordinary and partial differential equations by I.E. Lagaris et al](https://pdfs.semanticscholar.org/d061/df393e0e8fbfd0ea24976458b7d42419040d.pdf)\n", + "\n", + "2. [Neural networks for solving differential equations by A. Honchar](https://becominghuman.ai/neural-networks-for-solving-differential-equations-fa230ac5e04c)\n", + "\n", + "3. [Solving differential equations using neural networks by M.M Chiaramonte and M. Kiener](http://cs229.stanford.edu/proj2013/ChiaramonteKiener-SolvingDifferentialEquationsUsingNeuralNetworks.pdf)\n", + "\n", + "4. [Introduction to Partial Differential Equations by A. Tveito, R. Winther](https://www.springer.com/us/book/9783540225515)" + ] + } + ], + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.3" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} \ No newline at end of file diff --git a/doc/src/LectureNotes/_build/jupyter_execute/chapter10.py b/doc/src/LectureNotes/_build/jupyter_execute/chapter10.py new file mode 100644 index 000000000..dd645ae7a --- /dev/null +++ b/doc/src/LectureNotes/_build/jupyter_execute/chapter10.py @@ -0,0 +1,3058 @@ +# Recurrent Neural Networks + +[Overview video](https://www.youtube.com/watch?v=SEnXr6v2ifU&ab_channel=AlexanderAmini). +See also lecture on Thursday October 22 and examples from [week 42](https://compphysics.github.io/MachineLearning/doc/pub/week42/html/week42.html). + +[IN5400 at UiO Lecture](https://www.uio.no/studier/emner/matnat/ifi/IN5400/v20/material/week10/in5400_2020_week10_recurrent_neural_network.pdf) + +[CS231 at Stanford Lecture](https://www.youtube.com/watch?v=6niqTuYFZLQ&list=PLzUTmXVwsnXod6WNdg57Yc3zFx_f-RYsq&index=10&ab_channel=StanfordUniversitySchoolofEngineering) + +## Recurrent neural networks: Overarching view + +Till now our focus has been, including convolutional neural networks +as well, on feedforward neural networks. The output or the activations +flow only in one direction, from the input layer to the output layer. + +A recurrent neural network (RNN) looks very much like a feedforward +neural network, except that it also has connections pointing +backward. + +RNNs are used to analyze time series data such as stock prices, and +tell you when to buy or sell. In autonomous driving systems, they can +anticipate car trajectories and help avoid accidents. More generally, +they can work on sequences of arbitrary lengths, rather than on +fixed-sized inputs like all the nets we have discussed so far. For +example, they can take sentences, documents, or audio samples as +input, making them extremely useful for natural language processing +systems such as automatic translation and speech-to-text. + + + + +## Set up of an RNN + + +Text to come. + + +## A simple example + +%matplotlib inline + +# Start importing packages +import pandas as pd +import numpy as np +import matplotlib.pyplot as plt +import tensorflow as tf +from tensorflow.keras import datasets, layers, models +from tensorflow.keras.layers import Input +from tensorflow.keras.models import Model, Sequential +from tensorflow.keras.layers import Dense, SimpleRNN, LSTM, GRU +from tensorflow.keras import optimizers +from tensorflow.keras import regularizers +from tensorflow.keras.utils import to_categorical + + + +# convert into dataset matrix +def convertToMatrix(data, step): + X, Y =[], [] + for i in range(len(data)-step): + d=i+step + X.append(data[i:d,]) + Y.append(data[d,]) + return np.array(X), np.array(Y) + +step = 4 +N = 1000 +Tp = 800 + +t=np.arange(0,N) +x=np.sin(0.02*t)+2*np.random.rand(N) +df = pd.DataFrame(x) +df.head() + +plt.plot(df) +plt.show() + +values=df.values +train,test = values[0:Tp,:], values[Tp:N,:] + +# add step elements into train and test +test = np.append(test,np.repeat(test[-1,],step)) +train = np.append(train,np.repeat(train[-1,],step)) + +trainX,trainY =convertToMatrix(train,step) +testX,testY =convertToMatrix(test,step) +trainX = np.reshape(trainX, (trainX.shape[0], 1, trainX.shape[1])) +testX = np.reshape(testX, (testX.shape[0], 1, testX.shape[1])) + +model = Sequential() +model.add(SimpleRNN(units=32, input_shape=(1,step), activation="relu")) +model.add(Dense(8, activation="relu")) +model.add(Dense(1)) +model.compile(loss='mean_squared_error', optimizer='rmsprop') +model.summary() + +model.fit(trainX,trainY, epochs=100, batch_size=16, verbose=2) +trainPredict = model.predict(trainX) +testPredict= model.predict(testX) +predicted=np.concatenate((trainPredict,testPredict),axis=0) + +trainScore = model.evaluate(trainX, trainY, verbose=0) +print(trainScore) + +index = df.index.values +plt.plot(index,df) +plt.plot(index,predicted) +plt.axvline(df.index[Tp], c="r") +plt.show() + +## An extrapolation example + +The following code provides an example of how recurrent neural +networks can be used to extrapolate to unknown values of physics data +sets. Specifically, the data sets used in this program come from +a quantum mechanical many-body calculation of energies as functions of the number of particles. + + +# For matrices and calculations +import numpy as np +# For machine learning (backend for keras) +import tensorflow as tf +# User-friendly machine learning library +# Front end for TensorFlow +import tensorflow.keras +# Different methods from Keras needed to create an RNN +# This is not necessary but it shortened function calls +# that need to be used in the code. +from tensorflow.keras import datasets, layers, models +from tensorflow.keras.layers import Input +from tensorflow.keras import regularizers +from tensorflow.keras.models import Model, Sequential +from tensorflow.keras.layers import Dense, SimpleRNN, LSTM, GRU +# For timing the code +from timeit import default_timer as timer +# For plotting +import matplotlib.pyplot as plt + + +# The data set +datatype='VaryDimension' +X_tot = np.arange(2, 42, 2) +y_tot = np.array([-0.03077640549, -0.08336233266, -0.1446729567, -0.2116753732, -0.2830637392, -0.3581341341, -0.436462435, -0.5177783846, + -0.6019067271, -0.6887363571, -0.7782028952, -0.8702784034, -0.9649652536, -1.062292565, -1.16231451, + -1.265109911, -1.370782966, -1.479465113, -1.591317992, -1.70653767]) + +## Formatting the Data + +The way the recurrent neural networks are trained in this program +differs from how machine learning algorithms are usually trained. +Typically a machine learning algorithm is trained by learning the +relationship between the x data and the y data. In this program, the +recurrent neural network will be trained to recognize the relationship +in a sequence of y values. This is type of data formatting is +typically used time series forcasting, but it can also be used in any +extrapolation (time series forecasting is just a specific type of +extrapolation along the time axis). This method of data formatting +does not use the x data and assumes that the y data are evenly spaced. + +For a standard machine learning algorithm, the training data has the +form of (x,y) so the machine learning algorithm learns to assiciate a +y value with a given x value. This is useful when the test data has x +values within the same range as the training data. However, for this +application, the x values of the test data are outside of the x values +of the training data and the traditional method of training a machine +learning algorithm does not work as well. For this reason, the +recurrent neural network is trained on sequences of y values of the +form ((y1, y2), y3), so that the network is concerned with learning +the pattern of the y data and not the relation between the x and y +data. As long as the pattern of y data outside of the training region +stays relatively stable compared to what was inside the training +region, this method of training can produce accurate extrapolations to +y values far removed from the training data set. + + + + + + + + + +# FORMAT_DATA +def format_data(data, length_of_sequence = 2): + """ + Inputs: + data(a numpy array): the data that will be the inputs to the recurrent neural + network + length_of_sequence (an int): the number of elements in one iteration of the + sequence patter. For a function approximator use length_of_sequence = 2. + Returns: + rnn_input (a 3D numpy array): the input data for the recurrent neural network. Its + dimensions are length of data - length of sequence, length of sequence, + dimnsion of data + rnn_output (a numpy array): the training data for the neural network + Formats data to be used in a recurrent neural network. + """ + + X, Y = [], [] + for i in range(len(data)-length_of_sequence): + # Get the next length_of_sequence elements + a = data[i:i+length_of_sequence] + # Get the element that immediately follows that + b = data[i+length_of_sequence] + # Reshape so that each data point is contained in its own array + a = np.reshape (a, (len(a), 1)) + X.append(a) + Y.append(b) + rnn_input = np.array(X) + rnn_output = np.array(Y) + + return rnn_input, rnn_output + + +# ## Defining the Recurrent Neural Network Using Keras +# +# The following method defines a simple recurrent neural network in keras consisting of one input layer, one hidden layer, and one output layer. + +def rnn(length_of_sequences, batch_size = None, stateful = False): + """ + Inputs: + length_of_sequences (an int): the number of y values in "x data". This is determined + when the data is formatted + batch_size (an int): Default value is None. See Keras documentation of SimpleRNN. + stateful (a boolean): Default value is False. See Keras documentation of SimpleRNN. + Returns: + model (a Keras model): The recurrent neural network that is built and compiled by this + method + Builds and compiles a recurrent neural network with one hidden layer and returns the model. + """ + # Number of neurons in the input and output layers + in_out_neurons = 1 + # Number of neurons in the hidden layer + hidden_neurons = 200 + # Define the input layer + inp = Input(batch_shape=(batch_size, + length_of_sequences, + in_out_neurons)) + # Define the hidden layer as a simple RNN layer with a set number of neurons and add it to + # the network immediately after the input layer + rnn = SimpleRNN(hidden_neurons, + return_sequences=False, + stateful = stateful, + name="RNN")(inp) + # Define the output layer as a dense neural network layer (standard neural network layer) + #and add it to the network immediately after the hidden layer. + dens = Dense(in_out_neurons,name="dense")(rnn) + # Create the machine learning model starting with the input layer and ending with the + # output layer + model = Model(inputs=[inp],outputs=[dens]) + # Compile the machine learning model using the mean squared error function as the loss + # function and an Adams optimizer. + model.compile(loss="mean_squared_error", optimizer="adam") + return model + +## Predicting New Points With A Trained Recurrent Neural Network + +def test_rnn (x1, y_test, plot_min, plot_max): + """ + Inputs: + x1 (a list or numpy array): The complete x component of the data set + y_test (a list or numpy array): The complete y component of the data set + plot_min (an int or float): the smallest x value used in the training data + plot_max (an int or float): the largest x valye used in the training data + Returns: + None. + Uses a trained recurrent neural network model to predict future points in the + series. Computes the MSE of the predicted data set from the true data set, saves + the predicted data set to a csv file, and plots the predicted and true data sets w + while also displaying the data range used for training. + """ + # Add the training data as the first dim points in the predicted data array as these + # are known values. + y_pred = y_test[:dim].tolist() + # Generate the first input to the trained recurrent neural network using the last two + # points of the training data. Based on how the network was trained this means that it + # will predict the first point in the data set after the training data. All of the + # brackets are necessary for Tensorflow. + next_input = np.array([[[y_test[dim-2]], [y_test[dim-1]]]]) + # Save the very last point in the training data set. This will be used later. + last = [y_test[dim-1]] + + # Iterate until the complete data set is created. + for i in range (dim, len(y_test)): + # Predict the next point in the data set using the previous two points. + next = model.predict(next_input) + # Append just the number of the predicted data set + y_pred.append(next[0][0]) + # Create the input that will be used to predict the next data point in the data set. + next_input = np.array([[last, next[0]]], dtype=np.float64) + last = next + + # Print the mean squared error between the known data set and the predicted data set. + print('MSE: ', np.square(np.subtract(y_test, y_pred)).mean()) + # Save the predicted data set as a csv file for later use + name = datatype + 'Predicted'+str(dim)+'.csv' + np.savetxt(name, y_pred, delimiter=',') + # Plot the known data set and the predicted data set. The red box represents the region that was used + # for the training data. + fig, ax = plt.subplots() + ax.plot(x1, y_test, label="true", linewidth=3) + ax.plot(x1, y_pred, 'g-.',label="predicted", linewidth=4) + ax.legend() + # Created a red region to represent the points used in the training data. + ax.axvspan(plot_min, plot_max, alpha=0.25, color='red') + plt.show() + +# Check to make sure the data set is complete +assert len(X_tot) == len(y_tot) + +# This is the number of points that will be used in as the training data +dim=12 + +# Separate the training data from the whole data set +X_train = X_tot[:dim] +y_train = y_tot[:dim] + + +# Generate the training data for the RNN, using a sequence of 2 +rnn_input, rnn_training = format_data(y_train, 2) + + +# Create a recurrent neural network in Keras and produce a summary of the +# machine learning model +model = rnn(length_of_sequences = rnn_input.shape[1]) +model.summary() + +# Start the timer. Want to time training+testing +start = timer() +# Fit the model using the training data genenerated above using 150 training iterations and a 5% +# validation split. Setting verbose to True prints information about each training iteration. +hist = model.fit(rnn_input, rnn_training, batch_size=None, epochs=150, + verbose=True,validation_split=0.05) + +for label in ["loss","val_loss"]: + plt.plot(hist.history[label],label=label) + +plt.ylabel("loss") +plt.xlabel("epoch") +plt.title("The final validation loss: {}".format(hist.history["val_loss"][-1])) +plt.legend() +plt.show() + +# Use the trained neural network to predict more points of the data set +test_rnn(X_tot, y_tot, X_tot[0], X_tot[dim-1]) +# Stop the timer and calculate the total time needed. +end = timer() +print('Time: ', end-start) + +## Other Things to Try + + +Changing the size of the recurrent neural network and its parameters +can drastically change the results you get from the model. The below +code takes the simple recurrent neural network from above and adds a +second hidden layer, changes the number of neurons in the hidden +layer, and explicitly declares the activation function of the hidden +layers to be a sigmoid function. The loss function and optimizer can +also be changed but are kept the same as the above network. These +parameters can be tuned to provide the optimal result from the +network. For some ideas on how to improve the performance of a +[recurrent neural network](https://danijar.com/tips-for-training-recurrent-neural-networks). + +def rnn_2layers(length_of_sequences, batch_size = None, stateful = False): + """ + Inputs: + length_of_sequences (an int): the number of y values in "x data". This is determined + when the data is formatted + batch_size (an int): Default value is None. See Keras documentation of SimpleRNN. + stateful (a boolean): Default value is False. See Keras documentation of SimpleRNN. + Returns: + model (a Keras model): The recurrent neural network that is built and compiled by this + method + Builds and compiles a recurrent neural network with two hidden layers and returns the model. + """ + # Number of neurons in the input and output layers + in_out_neurons = 1 + # Number of neurons in the hidden layer, increased from the first network + hidden_neurons = 500 + # Define the input layer + inp = Input(batch_shape=(batch_size, + length_of_sequences, + in_out_neurons)) + # Create two hidden layers instead of one hidden layer. Explicitly set the activation + # function to be the sigmoid function (the default value is hyperbolic tangent) + rnn1 = SimpleRNN(hidden_neurons, + return_sequences=True, # This needs to be True if another hidden layer is to follow + stateful = stateful, activation = 'sigmoid', + name="RNN1")(inp) + rnn2 = SimpleRNN(hidden_neurons, + return_sequences=False, activation = 'sigmoid', + stateful = stateful, + name="RNN2")(rnn1) + # Define the output layer as a dense neural network layer (standard neural network layer) + #and add it to the network immediately after the hidden layer. + dens = Dense(in_out_neurons,name="dense")(rnn2) + # Create the machine learning model starting with the input layer and ending with the + # output layer + model = Model(inputs=[inp],outputs=[dens]) + # Compile the machine learning model using the mean squared error function as the loss + # function and an Adams optimizer. + model.compile(loss="mean_squared_error", optimizer="adam") + return model + +# Check to make sure the data set is complete +assert len(X_tot) == len(y_tot) + +# This is the number of points that will be used in as the training data +dim=12 + +# Separate the training data from the whole data set +X_train = X_tot[:dim] +y_train = y_tot[:dim] + + +# Generate the training data for the RNN, using a sequence of 2 +rnn_input, rnn_training = format_data(y_train, 2) + + +# Create a recurrent neural network in Keras and produce a summary of the +# machine learning model +model = rnn_2layers(length_of_sequences = 2) +model.summary() + +# Start the timer. Want to time training+testing +start = timer() +# Fit the model using the training data genenerated above using 150 training iterations and a 5% +# validation split. Setting verbose to True prints information about each training iteration. +hist = model.fit(rnn_input, rnn_training, batch_size=None, epochs=150, + verbose=True,validation_split=0.05) + + +# This section plots the training loss and the validation loss as a function of training iteration. +# This is not required for analyzing the couple cluster data but can help determine if the network is +# being overtrained. +for label in ["loss","val_loss"]: + plt.plot(hist.history[label],label=label) + +plt.ylabel("loss") +plt.xlabel("epoch") +plt.title("The final validation loss: {}".format(hist.history["val_loss"][-1])) +plt.legend() +plt.show() + +# Use the trained neural network to predict more points of the data set +test_rnn(X_tot, y_tot, X_tot[0], X_tot[dim-1]) +# Stop the timer and calculate the total time needed. +end = timer() +print('Time: ', end-start) + +## Other Types of Recurrent Neural Networks + +Besides a simple recurrent neural network layer, there are two other +commonly used types of recurrent neural network layers: Long Short +Term Memory (LSTM) and Gated Recurrent Unit (GRU). For a short +introduction to these layers see +and . + +The first network created below is similar to the previous network, +but it replaces the SimpleRNN layers with LSTM layers. The second +network below has two hidden layers made up of GRUs, which are +preceeded by two dense (feeddorward) neural network layers. These +dense layers "preprocess" the data before it reaches the recurrent +layers. This architecture has been shown to improve the performance +of recurrent neural networks (see the link above and also +. + +def lstm_2layers(length_of_sequences, batch_size = None, stateful = False): + """ + Inputs: + length_of_sequences (an int): the number of y values in "x data". This is determined + when the data is formatted + batch_size (an int): Default value is None. See Keras documentation of SimpleRNN. + stateful (a boolean): Default value is False. See Keras documentation of SimpleRNN. + Returns: + model (a Keras model): The recurrent neural network that is built and compiled by this + method + Builds and compiles a recurrent neural network with two LSTM hidden layers and returns the model. + """ + # Number of neurons on the input/output layer and the number of neurons in the hidden layer + in_out_neurons = 1 + hidden_neurons = 250 + # Input Layer + inp = Input(batch_shape=(batch_size, + length_of_sequences, + in_out_neurons)) + # Hidden layers (in this case they are LSTM layers instead if SimpleRNN layers) + rnn= LSTM(hidden_neurons, + return_sequences=True, + stateful = stateful, + name="RNN", use_bias=True, activation='tanh')(inp) + rnn1 = LSTM(hidden_neurons, + return_sequences=False, + stateful = stateful, + name="RNN1", use_bias=True, activation='tanh')(rnn) + # Output layer + dens = Dense(in_out_neurons,name="dense")(rnn1) + # Define the midel + model = Model(inputs=[inp],outputs=[dens]) + # Compile the model + model.compile(loss='mean_squared_error', optimizer='adam') + # Return the model + return model + +def dnn2_gru2(length_of_sequences, batch_size = None, stateful = False): + """ + Inputs: + length_of_sequences (an int): the number of y values in "x data". This is determined + when the data is formatted + batch_size (an int): Default value is None. See Keras documentation of SimpleRNN. + stateful (a boolean): Default value is False. See Keras documentation of SimpleRNN. + Returns: + model (a Keras model): The recurrent neural network that is built and compiled by this + method + Builds and compiles a recurrent neural network with four hidden layers (two dense followed by + two GRU layers) and returns the model. + """ + # Number of neurons on the input/output layers and hidden layers + in_out_neurons = 1 + hidden_neurons = 250 + # Input layer + inp = Input(batch_shape=(batch_size, + length_of_sequences, + in_out_neurons)) + # Hidden Dense (feedforward) layers + dnn = Dense(hidden_neurons/2, activation='relu', name='dnn')(inp) + dnn1 = Dense(hidden_neurons/2, activation='relu', name='dnn1')(dnn) + # Hidden GRU layers + rnn1 = GRU(hidden_neurons, + return_sequences=True, + stateful = stateful, + name="RNN1", use_bias=True)(dnn1) + rnn = GRU(hidden_neurons, + return_sequences=False, + stateful = stateful, + name="RNN", use_bias=True)(rnn1) + # Output layer + dens = Dense(in_out_neurons,name="dense")(rnn) + # Define the model + model = Model(inputs=[inp],outputs=[dens]) + # Compile the mdoel + model.compile(loss='mean_squared_error', optimizer='adam') + # Return the model + return model + +# Check to make sure the data set is complete +assert len(X_tot) == len(y_tot) + +# This is the number of points that will be used in as the training data +dim=12 + +# Separate the training data from the whole data set +X_train = X_tot[:dim] +y_train = y_tot[:dim] + + +# Generate the training data for the RNN, using a sequence of 2 +rnn_input, rnn_training = format_data(y_train, 2) + + +# Create a recurrent neural network in Keras and produce a summary of the +# machine learning model +# Change the method name to reflect which network you want to use +model = dnn2_gru2(length_of_sequences = 2) +model.summary() + +# Start the timer. Want to time training+testing +start = timer() +# Fit the model using the training data genenerated above using 150 training iterations and a 5% +# validation split. Setting verbose to True prints information about each training iteration. +hist = model.fit(rnn_input, rnn_training, batch_size=None, epochs=150, + verbose=True,validation_split=0.05) + + +# This section plots the training loss and the validation loss as a function of training iteration. +# This is not required for analyzing the couple cluster data but can help determine if the network is +# being overtrained. +for label in ["loss","val_loss"]: + plt.plot(hist.history[label],label=label) + +plt.ylabel("loss") +plt.xlabel("epoch") +plt.title("The final validation loss: {}".format(hist.history["val_loss"][-1])) +plt.legend() +plt.show() + +# Use the trained neural network to predict more points of the data set +test_rnn(X_tot, y_tot, X_tot[0], X_tot[dim-1]) +# Stop the timer and calculate the total time needed. +end = timer() +print('Time: ', end-start) + + +# ### Training Recurrent Neural Networks in the Standard Way (i.e. learning the relationship between the X and Y data) +# +# Finally, comparing the performace of a recurrent neural network using the standard data formatting to the performance of the network with time sequence data formatting shows the benefit of this type of data formatting with extrapolation. + +# Check to make sure the data set is complete +assert len(X_tot) == len(y_tot) + +# This is the number of points that will be used in as the training data +dim=12 + +# Separate the training data from the whole data set +X_train = X_tot[:dim] +y_train = y_tot[:dim] + +# Reshape the data for Keras specifications +X_train = X_train.reshape((dim, 1)) +y_train = y_train.reshape((dim, 1)) + + +# Create a recurrent neural network in Keras and produce a summary of the +# machine learning model +# Set the sequence length to 1 for regular data formatting +model = rnn(length_of_sequences = 1) +model.summary() + +# Start the timer. Want to time training+testing +start = timer() +# Fit the model using the training data genenerated above using 150 training iterations and a 5% +# validation split. Setting verbose to True prints information about each training iteration. +hist = model.fit(X_train, y_train, batch_size=None, epochs=150, + verbose=True,validation_split=0.05) + + +# This section plots the training loss and the validation loss as a function of training iteration. +# This is not required for analyzing the couple cluster data but can help determine if the network is +# being overtrained. +for label in ["loss","val_loss"]: + plt.plot(hist.history[label],label=label) + +plt.ylabel("loss") +plt.xlabel("epoch") +plt.title("The final validation loss: {}".format(hist.history["val_loss"][-1])) +plt.legend() +plt.show() + +# Use the trained neural network to predict the remaining data points +X_pred = X_tot[dim:] +X_pred = X_pred.reshape((len(X_pred), 1)) +y_model = model.predict(X_pred) +y_pred = np.concatenate((y_tot[:dim], y_model.flatten())) + +# Plot the known data set and the predicted data set. The red box represents the region that was used +# for the training data. +fig, ax = plt.subplots() +ax.plot(X_tot, y_tot, label="true", linewidth=3) +ax.plot(X_tot, y_pred, 'g-.',label="predicted", linewidth=4) +ax.legend() +# Created a red region to represent the points used in the training data. +ax.axvspan(X_tot[0], X_tot[dim], alpha=0.25, color='red') +plt.show() + +# Stop the timer and calculate the total time needed. +end = timer() +print('Time: ', end-start) + +# Solving ODEs with Deep Learning + +The Universal Approximation Theorem states that a neural network can +approximate any function at a single hidden layer along with one input +and output layer to any given precision. + + + +## Ordinary Differential Equations + +An ordinary differential equation (ODE) is an equation involving functions having one variable. + +In general, an ordinary differential equation looks like + + +
    + +$$ +\begin{equation} \label{ode} \tag{1} +f\left(x, \, g(x), \, g'(x), \, g''(x), \, \dots \, , \, g^{(n)}(x)\right) = 0 +\end{equation} +$$ + +where $g(x)$ is the function to find, and $g^{(n)}(x)$ is the $n$-th derivative of $g(x)$. + +The $f\left(x, g(x), g'(x), g''(x), \, \dots \, , g^{(n)}(x)\right)$ is just a way to write that there is an expression involving $x$ and $g(x), \ g'(x), \ g''(x), \, \dots \, , \text{ and } g^{(n)}(x)$ on the left side of the equality sign in ([1](#ode)). +The highest order of derivative, that is the value of $n$, determines to the order of the equation. +The equation is referred to as a $n$-th order ODE. +Along with ([1](#ode)), some additional conditions of the function $g(x)$ are typically given +for the solution to be unique. + + +## The trial solution + +Let the trial solution $g_t(x)$ be + + +
    + +$$ +\begin{equation} + g_t(x) = h_1(x) + h_2(x,N(x,P)) +\label{_auto1} \tag{2} +\end{equation} +$$ + +where $h_1(x)$ is a function that makes $g_t(x)$ satisfy a given set +of conditions, $N(x,P)$ a neural network with weights and biases +described by $P$ and $h_2(x, N(x,P))$ some expression involving the +neural network. The role of the function $h_2(x, N(x,P))$, is to +ensure that the output from $N(x,P)$ is zero when $g_t(x)$ is +evaluated at the values of $x$ where the given conditions must be +satisfied. The function $h_1(x)$ should alone make $g_t(x)$ satisfy +the conditions. + +But what about the network $N(x,P)$? + + +As described previously, an optimization method could be used to minimize the parameters of a neural network, that being its weights and biases, through backward propagation. + + + +## Minimization process + +For the minimization to be defined, we need to have a cost function at hand to minimize. + +It is given that $f\left(x, \, g(x), \, g'(x), \, g''(x), \, \dots \, , \, g^{(n)}(x)\right)$ should be equal to zero in ([1](#ode)). +We can choose to consider the mean squared error as the cost function for an input $x$. +Since we are looking at one input, the cost function is just $f$ squared. +The cost function $c\left(x, P \right)$ can therefore be expressed as + +$$ +C\left(x, P\right) = \big(f\left(x, \, g(x), \, g'(x), \, g''(x), \, \dots \, , \, g^{(n)}(x)\right)\big)^2 +$$ + +If $N$ inputs are given as a vector $\boldsymbol{x}$ with elements $x_i$ for $i = 1,\dots,N$, +the cost function becomes + + +
    + +$$ +\begin{equation} \label{cost} \tag{3} + C\left(\boldsymbol{x}, P\right) = \frac{1}{N} \sum_{i=1}^N \big(f\left(x_i, \, g(x_i), \, g'(x_i), \, g''(x_i), \, \dots \, , \, g^{(n)}(x_i)\right)\big)^2 +\end{equation} +$$ + +The neural net should then find the parameters $P$ that minimizes the cost function in +([3](#cost)) for a set of $N$ training samples $x_i$. + + +## Minimizing the cost function using gradient descent and automatic differentiation + +To perform the minimization using gradient descent, the gradient of $C\left(\boldsymbol{x}, P\right)$ is needed. +It might happen so that finding an analytical expression of the gradient of $C(\boldsymbol{x}, P)$ from ([3](#cost)) gets too messy, depending on which cost function one desires to use. + +Luckily, there exists libraries that makes the job for us through automatic differentiation. +Automatic differentiation is a method of finding the derivatives numerically with very high precision. + + + +## Example: Exponential decay + +An exponential decay of a quantity $g(x)$ is described by the equation + + +
    + +$$ +\begin{equation} \label{solve_expdec} \tag{4} + g'(x) = -\gamma g(x) +\end{equation} +$$ + +with $g(0) = g_0$ for some chosen initial value $g_0$. + +The analytical solution of ([4](#solve_expdec)) is + + +
    + +$$ +\begin{equation} + g(x) = g_0 \exp\left(-\gamma x\right) +\label{_auto2} \tag{5} +\end{equation} +$$ + +Having an analytical solution at hand, it is possible to use it to compare how well a neural network finds a solution of ([4](#solve_expdec)). + + + +## The function to solve for + +The program will use a neural network to solve + + +
    + +$$ +\begin{equation} \label{solveode} \tag{6} +g'(x) = -\gamma g(x) +\end{equation} +$$ + +where $g(0) = g_0$ with $\gamma$ and $g_0$ being some chosen values. + +In this example, $\gamma = 2$ and $g_0 = 10$. + + +## The trial solution +To begin with, a trial solution $g_t(t)$ must be chosen. A general trial solution for ordinary differential equations could be + +$$ +g_t(x, P) = h_1(x) + h_2(x, N(x, P)) +$$ + +with $h_1(x)$ ensuring that $g_t(x)$ satisfies some conditions and $h_2(x,N(x, P))$ an expression involving $x$ and the output from the neural network $N(x,P)$ with $P $ being the collection of the weights and biases for each layer. For now, it is assumed that the network consists of one input layer, one hidden layer, and one output layer. + + +## Setup of Network + +In this network, there are no weights and bias at the input layer, so $P = \{ P_{\text{hidden}}, P_{\text{output}} \}$. +If there are $N_{\text{hidden} }$ neurons in the hidden layer, then $P_{\text{hidden}}$ is a $N_{\text{hidden} } \times (1 + N_{\text{input}})$ matrix, given that there are $N_{\text{input}}$ neurons in the input layer. + +The first column in $P_{\text{hidden} }$ represents the bias for each neuron in the hidden layer and the second column represents the weights for each neuron in the hidden layer from the input layer. +If there are $N_{\text{output} }$ neurons in the output layer, then $P_{\text{output}} $ is a $N_{\text{output} } \times (1 + N_{\text{hidden} })$ matrix. + +Its first column represents the bias of each neuron and the remaining columns represents the weights to each neuron. + +It is given that $g(0) = g_0$. The trial solution must fulfill this condition to be a proper solution of ([6](#solveode)). A possible way to ensure that $g_t(0, P) = g_0$, is to let $F(N(x,P)) = x \cdot N(x,P)$ and $A(x) = g_0$. This gives the following trial solution: + + +
    + +$$ +\begin{equation} \label{trial} \tag{7} +g_t(x, P) = g_0 + x \cdot N(x, P) +\end{equation} +$$ + +## Reformulating the problem + +We wish that our neural network manages to minimize a given cost function. + +A reformulation of out equation, ([6](#solveode)), must therefore be done, +such that it describes the problem a neural network can solve for. + +The neural network must find the set of weights and biases $P$ such that the trial solution in ([7](#trial)) satisfies ([6](#solveode)). + +The trial solution + +$$ +g_t(x, P) = g_0 + x \cdot N(x, P) +$$ + +has been chosen such that it already solves the condition $g(0) = g_0$. What remains, is to find $P$ such that + + +
    + +$$ +\begin{equation} \label{nnmin} \tag{8} +g_t'(x, P) = - \gamma g_t(x, P) +\end{equation} +$$ + +is fulfilled as *best as possible*. + + +## More technicalities + +The left hand side and right hand side of ([8](#nnmin)) must be computed separately, and then the neural network must choose weights and biases, contained in $P$, such that the sides are equal as best as possible. +This means that the absolute or squared difference between the sides must be as close to zero, ideally equal to zero. +In this case, the difference squared shows to be an appropriate measurement of how erroneous the trial solution is with respect to $P$ of the neural network. + +This gives the following cost function our neural network must solve for: + +$$ +\min_{P}\Big\{ \big(g_t'(x, P) - ( -\gamma g_t(x, P) \big)^2 \Big\} +$$ + +(the notation $\min_{P}\{ f(x, P) \}$ means that we desire to find $P$ that yields the minimum of $f(x, P)$) + +or, in terms of weights and biases for the hidden and output layer in our network: + +$$ +\min_{P_{\text{hidden} }, \ P_{\text{output} }}\Big\{ \big(g_t'(x, \{ P_{\text{hidden} }, P_{\text{output} }\}) - ( -\gamma g_t(x, \{ P_{\text{hidden} }, P_{\text{output} }\}) \big)^2 \Big\} +$$ + +for an input value $x$. + + +## More details + +If the neural network evaluates $g_t(x, P)$ at more values for $x$, say $N$ values $x_i$ for $i = 1, \dots, N$, then the *total* error to minimize becomes + + +
    + +$$ +\begin{equation} \label{min} \tag{9} +\min_{P}\Big\{\frac{1}{N} \sum_{i=1}^N \big(g_t'(x_i, P) - ( -\gamma g_t(x_i, P) \big)^2 \Big\} +\end{equation} +$$ + +Letting $\boldsymbol{x}$ be a vector with elements $x_i$ and $C(\boldsymbol{x}, P) = \frac{1}{N} \sum_i \big(g_t'(x_i, P) - ( -\gamma g_t(x_i, P) \big)^2$ denote the cost function, the minimization problem that our network must solve, becomes + +$$ +\min_{P} C(\boldsymbol{x}, P) +$$ + +In terms of $P_{\text{hidden} }$ and $P_{\text{output} }$, this could also be expressed as + +$$ +\min_{P_{\text{hidden} }, \ P_{\text{output} }} C(\boldsymbol{x}, \{P_{\text{hidden} }, P_{\text{output} }\}) +$$ + + +## A possible implementation of a neural network + +For simplicity, it is assumed that the input is an array $\boldsymbol{x} = (x_1, \dots, x_N)$ with $N$ elements. It is at these points the neural network should find $P$ such that it fulfills ([9](#min)). + +First, the neural network must feed forward the inputs. +This means that $\boldsymbol{x}s$ must be passed through an input layer, a hidden layer and a output layer. The input layer in this case, does not need to process the data any further. +The input layer will consist of $N_{\text{input} }$ neurons, passing its element to each neuron in the hidden layer. The number of neurons in the hidden layer will be $N_{\text{hidden} }$. + + +## Technicalities + +For the $i$-th in the hidden layer with weight $w_i^{\text{hidden} }$ and bias $b_i^{\text{hidden} }$, the weighting from the $j$-th neuron at the input layer is: + +$$ +\begin{aligned} +z_{i,j}^{\text{hidden}} &= b_i^{\text{hidden}} + w_i^{\text{hidden}}x_j \\ +&= +\begin{pmatrix} +b_i^{\text{hidden}} & w_i^{\text{hidden}} +\end{pmatrix} +\begin{pmatrix} +1 \\ +x_j +\end{pmatrix} +\end{aligned} +$$ + +## Final technicalities I + +The result after weighting the inputs at the $i$-th hidden neuron can be written as a vector: + +$$ +\begin{aligned} +\boldsymbol{z}_{i}^{\text{hidden}} &= \Big( b_i^{\text{hidden}} + w_i^{\text{hidden}}x_1 , \ b_i^{\text{hidden}} + w_i^{\text{hidden}} x_2, \ \dots \, , \ b_i^{\text{hidden}} + w_i^{\text{hidden}} x_N\Big) \\ +&= +\begin{pmatrix} + b_i^{\text{hidden}} & w_i^{\text{hidden}} +\end{pmatrix} +\begin{pmatrix} +1 & 1 & \dots & 1 \\ +x_1 & x_2 & \dots & x_N +\end{pmatrix} \\ +&= \boldsymbol{p}_{i, \text{hidden}}^T X +\end{aligned} +$$ + +## Final technicalities II + +The vector $\boldsymbol{p}_{i, \text{hidden}}^T$ constitutes each row in $P_{\text{hidden} }$, which contains the weights for the neural network to minimize according to ([9](#min)). + +After having found $\boldsymbol{z}_{i}^{\text{hidden}} $ for every $i$-th neuron within the hidden layer, the vector will be sent to an activation function $a_i(\boldsymbol{z})$. + +In this example, the sigmoid function has been chosen to be the activation function for each hidden neuron: + +$$ +f(z) = \frac{1}{1 + \exp{(-z)}} +$$ + +It is possible to use other activations functions for the hidden layer also. + +The output $\boldsymbol{x}_i^{\text{hidden}}$ from each $i$-th hidden neuron is: + +$$ +\boldsymbol{x}_i^{\text{hidden} } = f\big( \boldsymbol{z}_{i}^{\text{hidden}} \big) +$$ + +The outputs $\boldsymbol{x}_i^{\text{hidden} } $ are then sent to the output layer. + +The output layer consists of one neuron in this case, and combines the +output from each of the neurons in the hidden layers. The output layer +combines the results from the hidden layer using some weights $w_i^{\text{output}}$ +and biases $b_i^{\text{output}}$. In this case, +it is assumes that the number of neurons in the output layer is one. + + +## Final technicalities III + + +The procedure of weighting the output neuron $j$ in the hidden layer to the $i$-th neuron in the output layer is similar as for the hidden layer described previously. + +$$ +\begin{aligned} +z_{1,j}^{\text{output}} & = +\begin{pmatrix} +b_1^{\text{output}} & \boldsymbol{w}_1^{\text{output}} +\end{pmatrix} +\begin{pmatrix} +1 \\ +\boldsymbol{x}_j^{\text{hidden}} +\end{pmatrix} +\end{aligned} +$$ + +## Final technicalities IV + +Expressing $z_{1,j}^{\text{output}}$ as a vector gives the following way of weighting the inputs from the hidden layer: + +$$ +\boldsymbol{z}_{1}^{\text{output}} = +\begin{pmatrix} +b_1^{\text{output}} & \boldsymbol{w}_1^{\text{output}} +\end{pmatrix} +\begin{pmatrix} +1 & 1 & \dots & 1 \\ +\boldsymbol{x}_1^{\text{hidden}} & \boldsymbol{x}_2^{\text{hidden}} & \dots & \boldsymbol{x}_N^{\text{hidden}} +\end{pmatrix} +$$ + +In this case we seek a continuous range of values since we are approximating a function. This means that after computing $\boldsymbol{z}_{1}^{\text{output}}$ the neural network has finished its feed forward step, and $\boldsymbol{z}_{1}^{\text{output}}$ is the final output of the network. + + +## Back propagation + +The next step is to decide how the parameters should be changed such that they minimize the cost function. + +The chosen cost function for this problem is + +$$ +C(\boldsymbol{x}, P) = \frac{1}{N} \sum_i \big(g_t'(x_i, P) - ( -\gamma g_t(x_i, P) \big)^2 +$$ + +In order to minimize the cost function, an optimization method must be chosen. + +Here, gradient descent with a constant step size has been chosen. + + +## Gradient descent + +The idea of the gradient descent algorithm is to update parameters in +a direction where the cost function decreases goes to a minimum. + +In general, the update of some parameters $\boldsymbol{\omega}$ given a cost +function defined by some weights $\boldsymbol{\omega}$, $C(\boldsymbol{x}, +\boldsymbol{\omega})$, goes as follows: + +$$ +\boldsymbol{\omega}_{\text{new} } = \boldsymbol{\omega} - \lambda \nabla_{\boldsymbol{\omega}} C(\boldsymbol{x}, \boldsymbol{\omega}) +$$ + +for a number of iterations or until $ \big|\big| \boldsymbol{\omega}_{\text{new} } - \boldsymbol{\omega} \big|\big|$ becomes smaller than some given tolerance. + +The value of $\lambda$ decides how large steps the algorithm must take +in the direction of $ \nabla_{\boldsymbol{\omega}} C(\boldsymbol{x}, \boldsymbol{\omega})$. +The notation $\nabla_{\boldsymbol{\omega}}$ express the gradient with respect +to the elements in $\boldsymbol{\omega}$. + +In our case, we have to minimize the cost function $C(\boldsymbol{x}, P)$ with +respect to the two sets of weights and biases, that is for the hidden +layer $P_{\text{hidden} }$ and for the output layer $P_{\text{output} +}$ . + +This means that $P_{\text{hidden} }$ and $P_{\text{output} }$ is updated by + +$$ +\begin{aligned} +P_{\text{hidden},\text{new}} &= P_{\text{hidden}} - \lambda \nabla_{P_{\text{hidden}}} C(\boldsymbol{x}, P) \\ +P_{\text{output},\text{new}} &= P_{\text{output}} - \lambda \nabla_{P_{\text{output}}} C(\boldsymbol{x}, P) +\end{aligned} +$$ + +## The code for solving the ODE + +import autograd.numpy as np +from autograd import grad, elementwise_grad +import autograd.numpy.random as npr +from matplotlib import pyplot as plt + +def sigmoid(z): + return 1/(1 + np.exp(-z)) + +# Assuming one input, hidden, and output layer +def neural_network(params, x): + + # Find the weights (including and biases) for the hidden and output layer. + # Assume that params is a list of parameters for each layer. + # The biases are the first element for each array in params, + # and the weights are the remaning elements in each array in params. + + w_hidden = params[0] + w_output = params[1] + + # Assumes input x being an one-dimensional array + num_values = np.size(x) + x = x.reshape(-1, num_values) + + # Assume that the input layer does nothing to the input x + x_input = x + + ## Hidden layer: + + # Add a row of ones to include bias + x_input = np.concatenate((np.ones((1,num_values)), x_input ), axis = 0) + + z_hidden = np.matmul(w_hidden, x_input) + x_hidden = sigmoid(z_hidden) + + ## Output layer: + + # Include bias: + x_hidden = np.concatenate((np.ones((1,num_values)), x_hidden ), axis = 0) + + z_output = np.matmul(w_output, x_hidden) + x_output = z_output + + return x_output + +# The trial solution using the deep neural network: +def g_trial(x,params, g0 = 10): + return g0 + x*neural_network(params,x) + +# The right side of the ODE: +def g(x, g_trial, gamma = 2): + return -gamma*g_trial + +# The cost function: +def cost_function(P, x): + + # Evaluate the trial function with the current parameters P + g_t = g_trial(x,P) + + # Find the derivative w.r.t x of the neural network + d_net_out = elementwise_grad(neural_network,1)(P,x) + + # Find the derivative w.r.t x of the trial function + d_g_t = elementwise_grad(g_trial,0)(x,P) + + # The right side of the ODE + func = g(x, g_t) + + err_sqr = (d_g_t - func)**2 + cost_sum = np.sum(err_sqr) + + return cost_sum / np.size(err_sqr) + +# Solve the exponential decay ODE using neural network with one input, hidden, and output layer +def solve_ode_neural_network(x, num_neurons_hidden, num_iter, lmb): + ## Set up initial weights and biases + + # For the hidden layer + p0 = npr.randn(num_neurons_hidden, 2 ) + + # For the output layer + p1 = npr.randn(1, num_neurons_hidden + 1 ) # +1 since bias is included + + P = [p0, p1] + + print('Initial cost: %g'%cost_function(P, x)) + + ## Start finding the optimal weights using gradient descent + + # Find the Python function that represents the gradient of the cost function + # w.r.t the 0-th input argument -- that is the weights and biases in the hidden and output layer + cost_function_grad = grad(cost_function,0) + + # Let the update be done num_iter times + for i in range(num_iter): + # Evaluate the gradient at the current weights and biases in P. + # The cost_grad consist now of two arrays; + # one for the gradient w.r.t P_hidden and + # one for the gradient w.r.t P_output + cost_grad = cost_function_grad(P, x) + + P[0] = P[0] - lmb * cost_grad[0] + P[1] = P[1] - lmb * cost_grad[1] + + print('Final cost: %g'%cost_function(P, x)) + + return P + +def g_analytic(x, gamma = 2, g0 = 10): + return g0*np.exp(-gamma*x) + +# Solve the given problem +if __name__ == '__main__': + # Set seed such that the weight are initialized + # with same weights and biases for every run. + npr.seed(15) + + ## Decide the vales of arguments to the function to solve + N = 10 + x = np.linspace(0, 1, N) + + ## Set up the initial parameters + num_hidden_neurons = 10 + num_iter = 10000 + lmb = 0.001 + + # Use the network + P = solve_ode_neural_network(x, num_hidden_neurons, num_iter, lmb) + + # Print the deviation from the trial solution and true solution + res = g_trial(x,P) + res_analytical = g_analytic(x) + + print('Max absolute difference: %g'%np.max(np.abs(res - res_analytical))) + + # Plot the results + plt.figure(figsize=(10,10)) + + plt.title('Performance of neural network solving an ODE compared to the analytical solution') + plt.plot(x, res_analytical) + plt.plot(x, res[0,:]) + plt.legend(['analytical','nn']) + plt.xlabel('x') + plt.ylabel('g(x)') + plt.show() + +## The network with one input layer, specified number of hidden layers, and one output layer + +It is also possible to extend the construction of our network into a more general one, allowing the network to contain more than one hidden layers. + +The number of neurons within each hidden layer are given as a list of integers in the program below. + +import autograd.numpy as np +from autograd import grad, elementwise_grad +import autograd.numpy.random as npr +from matplotlib import pyplot as plt + +def sigmoid(z): + return 1/(1 + np.exp(-z)) + +# The neural network with one input layer and one output layer, +# but with number of hidden layers specified by the user. +def deep_neural_network(deep_params, x): + # N_hidden is the number of hidden layers + + N_hidden = np.size(deep_params) - 1 # -1 since params consists of + # parameters to all the hidden + # layers AND the output layer. + + # Assumes input x being an one-dimensional array + num_values = np.size(x) + x = x.reshape(-1, num_values) + + # Assume that the input layer does nothing to the input x + x_input = x + + # Due to multiple hidden layers, define a variable referencing to the + # output of the previous layer: + x_prev = x_input + + ## Hidden layers: + + for l in range(N_hidden): + # From the list of parameters P; find the correct weigths and bias for this layer + w_hidden = deep_params[l] + + # Add a row of ones to include bias + x_prev = np.concatenate((np.ones((1,num_values)), x_prev ), axis = 0) + + z_hidden = np.matmul(w_hidden, x_prev) + x_hidden = sigmoid(z_hidden) + + # Update x_prev such that next layer can use the output from this layer + x_prev = x_hidden + + ## Output layer: + + # Get the weights and bias for this layer + w_output = deep_params[-1] + + # Include bias: + x_prev = np.concatenate((np.ones((1,num_values)), x_prev), axis = 0) + + z_output = np.matmul(w_output, x_prev) + x_output = z_output + + return x_output + +# The trial solution using the deep neural network: +def g_trial_deep(x,params, g0 = 10): + return g0 + x*deep_neural_network(params, x) + +# The right side of the ODE: +def g(x, g_trial, gamma = 2): + return -gamma*g_trial + +# The same cost function as before, but calls deep_neural_network instead. +def cost_function_deep(P, x): + + # Evaluate the trial function with the current parameters P + g_t = g_trial_deep(x,P) + + # Find the derivative w.r.t x of the neural network + d_net_out = elementwise_grad(deep_neural_network,1)(P,x) + + # Find the derivative w.r.t x of the trial function + d_g_t = elementwise_grad(g_trial_deep,0)(x,P) + + # The right side of the ODE + func = g(x, g_t) + + err_sqr = (d_g_t - func)**2 + cost_sum = np.sum(err_sqr) + + return cost_sum / np.size(err_sqr) + +# Solve the exponential decay ODE using neural network with one input and one output layer, +# but with specified number of hidden layers from the user. +def solve_ode_deep_neural_network(x, num_neurons, num_iter, lmb): + # num_hidden_neurons is now a list of number of neurons within each hidden layer + + # The number of elements in the list num_hidden_neurons thus represents + # the number of hidden layers. + + # Find the number of hidden layers: + N_hidden = np.size(num_neurons) + + ## Set up initial weights and biases + + # Initialize the list of parameters: + P = [None]*(N_hidden + 1) # + 1 to include the output layer + + P[0] = npr.randn(num_neurons[0], 2 ) + for l in range(1,N_hidden): + P[l] = npr.randn(num_neurons[l], num_neurons[l-1] + 1) # +1 to include bias + + # For the output layer + P[-1] = npr.randn(1, num_neurons[-1] + 1 ) # +1 since bias is included + + print('Initial cost: %g'%cost_function_deep(P, x)) + + ## Start finding the optimal weights using gradient descent + + # Find the Python function that represents the gradient of the cost function + # w.r.t the 0-th input argument -- that is the weights and biases in the hidden and output layer + cost_function_deep_grad = grad(cost_function_deep,0) + + # Let the update be done num_iter times + for i in range(num_iter): + # Evaluate the gradient at the current weights and biases in P. + # The cost_grad consist now of N_hidden + 1 arrays; the gradient w.r.t the weights and biases + # in the hidden layers and output layers evaluated at x. + cost_deep_grad = cost_function_deep_grad(P, x) + + for l in range(N_hidden+1): + P[l] = P[l] - lmb * cost_deep_grad[l] + + print('Final cost: %g'%cost_function_deep(P, x)) + + return P + +def g_analytic(x, gamma = 2, g0 = 10): + return g0*np.exp(-gamma*x) + +# Solve the given problem +if __name__ == '__main__': + npr.seed(15) + + ## Decide the vales of arguments to the function to solve + N = 10 + x = np.linspace(0, 1, N) + + ## Set up the initial parameters + num_hidden_neurons = np.array([10,10]) + num_iter = 10000 + lmb = 0.001 + + P = solve_ode_deep_neural_network(x, num_hidden_neurons, num_iter, lmb) + + res = g_trial_deep(x,P) + res_analytical = g_analytic(x) + + plt.figure(figsize=(10,10)) + + plt.title('Performance of a deep neural network solving an ODE compared to the analytical solution') + plt.plot(x, res_analytical) + plt.plot(x, res[0,:]) + plt.legend(['analytical','dnn']) + plt.ylabel('g(x)') + plt.show() + +## Example: Population growth + +A logistic model of population growth assumes that a population converges toward an equilibrium. +The population growth can be modeled by + + +
    + +$$ +\begin{equation} \label{log} \tag{10} + g'(t) = \alpha g(t)(A - g(t)) +\end{equation} +$$ + +where $g(t)$ is the population density at time $t$, $\alpha > 0$ the growth rate and $A > 0$ is the maximum population number in the environment. +Also, at $t = 0$ the population has the size $g(0) = g_0$, where $g_0$ is some chosen constant. + +In this example, similar network as for the exponential decay using Autograd has been used to solve the equation. However, as the implementation might suffer from e.g numerical instability +and high execution time (this might be more apparent in the examples solving PDEs), +using a library like TensorFlow is recommended. +Here, we stay with a more simple approach and implement for comparison, the simple forward Euler method. + + +## Setting up the problem + +Here, we will model a population $g(t)$ in an environment having carrying capacity $A$. +The population follows the model + + +
    + +$$ +\begin{equation} \label{solveode_population} \tag{11} +g'(t) = \alpha g(t)(A - g(t)) +\end{equation} +$$ + +where $g(0) = g_0$. + +In this example, we let $\alpha = 2$, $A = 1$, and $g_0 = 1.2$. + + +## The trial solution + +We will get a slightly different trial solution, as the boundary conditions are different +compared to the case for exponential decay. + +A possible trial solution satisfying the condition $g(0) = g_0$ could be + +$$ +h_1(t) = g_0 + t \cdot N(t,P) +$$ + +with $N(t,P)$ being the output from the neural network with weights and biases for each layer collected in the set $P$. + +The analytical solution is + +$$ +g(t) = \frac{Ag_0}{g_0 + (A - g_0)\exp(-\alpha A t)} +$$ + + +## The program using Autograd + +The network will be the similar as for the exponential decay example, but with some small modifications for our problem. + +import autograd.numpy as np +from autograd import grad, elementwise_grad +import autograd.numpy.random as npr +from matplotlib import pyplot as plt + +def sigmoid(z): + return 1/(1 + np.exp(-z)) + +# Function to get the parameters. +# Done such that one can easily change the paramaters after one's liking. +def get_parameters(): + alpha = 2 + A = 1 + g0 = 1.2 + return alpha, A, g0 + +def deep_neural_network(P, x): + # N_hidden is the number of hidden layers + N_hidden = np.size(P) - 1 # -1 since params consist of parameters to all the hidden layers AND the output layer + + # Assumes input x being an one-dimensional array + num_values = np.size(x) + x = x.reshape(-1, num_values) + + # Assume that the input layer does nothing to the input x + x_input = x + + # Due to multiple hidden layers, define a variable referencing to the + # output of the previous layer: + x_prev = x_input + + ## Hidden layers: + + for l in range(N_hidden): + # From the list of parameters P; find the correct weigths and bias for this layer + w_hidden = P[l] + + # Add a row of ones to include bias + x_prev = np.concatenate((np.ones((1,num_values)), x_prev ), axis = 0) + + z_hidden = np.matmul(w_hidden, x_prev) + x_hidden = sigmoid(z_hidden) + + # Update x_prev such that next layer can use the output from this layer + x_prev = x_hidden + + ## Output layer: + + # Get the weights and bias for this layer + w_output = P[-1] + + # Include bias: + x_prev = np.concatenate((np.ones((1,num_values)), x_prev), axis = 0) + + z_output = np.matmul(w_output, x_prev) + x_output = z_output + + return x_output + + +def cost_function_deep(P, x): + + # Evaluate the trial function with the current parameters P + g_t = g_trial_deep(x,P) + + # Find the derivative w.r.t x of the trial function + d_g_t = elementwise_grad(g_trial_deep,0)(x,P) + + # The right side of the ODE + func = f(x, g_t) + + err_sqr = (d_g_t - func)**2 + cost_sum = np.sum(err_sqr) + + return cost_sum / np.size(err_sqr) + +# The right side of the ODE: +def f(x, g_trial): + alpha,A, g0 = get_parameters() + return alpha*g_trial*(A - g_trial) + +# The trial solution using the deep neural network: +def g_trial_deep(x, params): + alpha,A, g0 = get_parameters() + return g0 + x*deep_neural_network(params,x) + +# The analytical solution: +def g_analytic(t): + alpha,A, g0 = get_parameters() + return A*g0/(g0 + (A - g0)*np.exp(-alpha*A*t)) + +def solve_ode_deep_neural_network(x, num_neurons, num_iter, lmb): + # num_hidden_neurons is now a list of number of neurons within each hidden layer + + # Find the number of hidden layers: + N_hidden = np.size(num_neurons) + + ## Set up initial weigths and biases + + # Initialize the list of parameters: + P = [None]*(N_hidden + 1) # + 1 to include the output layer + + P[0] = npr.randn(num_neurons[0], 2 ) + for l in range(1,N_hidden): + P[l] = npr.randn(num_neurons[l], num_neurons[l-1] + 1) # +1 to include bias + + # For the output layer + P[-1] = npr.randn(1, num_neurons[-1] + 1 ) # +1 since bias is included + + print('Initial cost: %g'%cost_function_deep(P, x)) + + ## Start finding the optimal weigths using gradient descent + + # Find the Python function that represents the gradient of the cost function + # w.r.t the 0-th input argument -- that is the weights and biases in the hidden and output layer + cost_function_deep_grad = grad(cost_function_deep,0) + + # Let the update be done num_iter times + for i in range(num_iter): + # Evaluate the gradient at the current weights and biases in P. + # The cost_grad consist now of N_hidden + 1 arrays; the gradient w.r.t the weights and biases + # in the hidden layers and output layers evaluated at x. + cost_deep_grad = cost_function_deep_grad(P, x) + + for l in range(N_hidden+1): + P[l] = P[l] - lmb * cost_deep_grad[l] + + print('Final cost: %g'%cost_function_deep(P, x)) + + return P + +if __name__ == '__main__': + npr.seed(4155) + + ## Decide the vales of arguments to the function to solve + Nt = 10 + T = 1 + t = np.linspace(0,T, Nt) + + ## Set up the initial parameters + num_hidden_neurons = [100, 50, 25] + num_iter = 1000 + lmb = 1e-3 + + P = solve_ode_deep_neural_network(t, num_hidden_neurons, num_iter, lmb) + + g_dnn_ag = g_trial_deep(t,P) + g_analytical = g_analytic(t) + + # Find the maximum absolute difference between the solutons: + diff_ag = np.max(np.abs(g_dnn_ag - g_analytical)) + print("The max absolute difference between the solutions is: %g"%diff_ag) + + plt.figure(figsize=(10,10)) + + plt.title('Performance of neural network solving an ODE compared to the analytical solution') + plt.plot(t, g_analytical) + plt.plot(t, g_dnn_ag[0,:]) + plt.legend(['analytical','nn']) + plt.xlabel('t') + plt.ylabel('g(t)') + + plt.show() + +## Using forward Euler to solve the ODE + +A straightforward way of solving an ODE numerically, is to use Euler's method. + +Euler's method uses Taylor series to approximate the value at a function $f$ at a step $\Delta x$ from $x$: + +$$ +f(x + \Delta x) \approx f(x) + \Delta x f'(x) +$$ + +In our case, using Euler's method to approximate the value of $g$ at a step $\Delta t$ from $t$ yields + +$$ +\begin{aligned} + g(t + \Delta t) &\approx g(t) + \Delta t g'(t) \\ + &= g(t) + \Delta t \big(\alpha g(t)(A - g(t))\big) +\end{aligned} +$$ + +along with the condition that $g(0) = g_0$. + +Let $t_i = i \cdot \Delta t$ where $\Delta t = \frac{T}{N_t-1}$ where $T$ is the final time our solver must solve for and $N_t$ the number of values for $t \in [0, T]$ for $i = 0, \dots, N_t-1$. + +For $i \geq 1$, we have that + +$$ +\begin{aligned} +t_i &= i\Delta t \\ +&= (i - 1)\Delta t + \Delta t \\ +&= t_{i-1} + \Delta t +\end{aligned} +$$ + +Now, if $g_i = g(t_i)$ then + + +
    + +$$ +\begin{equation} + \begin{aligned} + g_i &= g(t_i) \\ + &= g(t_{i-1} + \Delta t) \\ + &\approx g(t_{i-1}) + \Delta t \big(\alpha g(t_{i-1})(A - g(t_{i-1}))\big) \\ + &= g_{i-1} + \Delta t \big(\alpha g_{i-1}(A - g_{i-1})\big) + \end{aligned} +\end{equation} \label{odenum} \tag{12} +$$ + +for $i \geq 1$ and $g_0 = g(t_0) = g(0) = g_0$. + +Equation ([12](#odenum)) could be implemented in the following way, +extending the program that uses the network using Autograd: + +# Assume that all function definitions from the example program using Autograd +# are located here. + +if __name__ == '__main__': + npr.seed(4155) + + ## Decide the vales of arguments to the function to solve + Nt = 10 + T = 1 + t = np.linspace(0,T, Nt) + + ## Set up the initial parameters + num_hidden_neurons = [100,50,25] + num_iter = 1000 + lmb = 1e-3 + + P = solve_ode_deep_neural_network(t, num_hidden_neurons, num_iter, lmb) + + g_dnn_ag = g_trial_deep(t,P) + g_analytical = g_analytic(t) + + # Find the maximum absolute difference between the solutons: + diff_ag = np.max(np.abs(g_dnn_ag - g_analytical)) + print("The max absolute difference between the solutions is: %g"%diff_ag) + + plt.figure(figsize=(10,10)) + + plt.title('Performance of neural network solving an ODE compared to the analytical solution') + plt.plot(t, g_analytical) + plt.plot(t, g_dnn_ag[0,:]) + plt.legend(['analytical','nn']) + plt.xlabel('t') + plt.ylabel('g(t)') + + ## Find an approximation to the funtion using forward Euler + + alpha, A, g0 = get_parameters() + dt = T/(Nt - 1) + + # Perform forward Euler to solve the ODE + g_euler = np.zeros(Nt) + g_euler[0] = g0 + + for i in range(1,Nt): + g_euler[i] = g_euler[i-1] + dt*(alpha*g_euler[i-1]*(A - g_euler[i-1])) + + # Print the errors done by each method + diff1 = np.max(np.abs(g_euler - g_analytical)) + diff2 = np.max(np.abs(g_dnn_ag[0,:] - g_analytical)) + + print('Max absolute difference between Euler method and analytical: %g'%diff1) + print('Max absolute difference between deep neural network and analytical: %g'%diff2) + + # Plot results + plt.figure(figsize=(10,10)) + + plt.plot(t,g_euler) + plt.plot(t,g_analytical) + plt.plot(t,g_dnn_ag[0,:]) + + plt.legend(['euler','analytical','dnn']) + plt.xlabel('Time t') + plt.ylabel('g(t)') + + plt.show() + +## Example: Solving the one dimensional Poisson equation + +The Poisson equation for $g(x)$ in one dimension is + + +
    + +$$ +\begin{equation} \label{poisson} \tag{13} + -g''(x) = f(x) +\end{equation} +$$ + +where $f(x)$ is a given function for $x \in (0,1)$. + +The conditions that $g(x)$ is chosen to fulfill, are + +$$ +\begin{align*} + g(0) &= 0 \\ + g(1) &= 0 +\end{align*} +$$ + +This equation can be solved numerically using programs where e.g Autograd and TensorFlow are used. +The results from the networks can then be compared to the analytical solution. +In addition, it could be interesting to see how a typical method for numerically solving second order ODEs compares to the neural networks. + + +## The specific equation to solve for + +Here, the function $g(x)$ to solve for follows the equation + +$$ +-g''(x) = f(x),\qquad x \in (0,1) +$$ + +where $f(x)$ is a given function, along with the chosen conditions + + +
    + +$$ +\begin{aligned} +g(0) = g(1) = 0 +\end{aligned}\label{cond} \tag{14} +$$ + +In this example, we consider the case when $f(x) = (3x + x^2)\exp(x)$. + +For this case, a possible trial solution satisfying the conditions could be + +$$ +g_t(x) = x \cdot (1-x) \cdot N(P,x) +$$ + +The analytical solution for this problem is + +$$ +g(x) = x(1 - x)\exp(x) +$$ + +## Solving the equation using Autograd + +import autograd.numpy as np +from autograd import grad, elementwise_grad +import autograd.numpy.random as npr +from matplotlib import pyplot as plt + +def sigmoid(z): + return 1/(1 + np.exp(-z)) + +def deep_neural_network(deep_params, x): + # N_hidden is the number of hidden layers + N_hidden = np.size(deep_params) - 1 # -1 since params consist of parameters to all the hidden layers AND the output layer + + # Assumes input x being an one-dimensional array + num_values = np.size(x) + x = x.reshape(-1, num_values) + + # Assume that the input layer does nothing to the input x + x_input = x + + # Due to multiple hidden layers, define a variable referencing to the + # output of the previous layer: + x_prev = x_input + + ## Hidden layers: + + for l in range(N_hidden): + # From the list of parameters P; find the correct weigths and bias for this layer + w_hidden = deep_params[l] + + # Add a row of ones to include bias + x_prev = np.concatenate((np.ones((1,num_values)), x_prev ), axis = 0) + + z_hidden = np.matmul(w_hidden, x_prev) + x_hidden = sigmoid(z_hidden) + + # Update x_prev such that next layer can use the output from this layer + x_prev = x_hidden + + ## Output layer: + + # Get the weights and bias for this layer + w_output = deep_params[-1] + + # Include bias: + x_prev = np.concatenate((np.ones((1,num_values)), x_prev), axis = 0) + + z_output = np.matmul(w_output, x_prev) + x_output = z_output + + return x_output + +def solve_ode_deep_neural_network(x, num_neurons, num_iter, lmb): + # num_hidden_neurons is now a list of number of neurons within each hidden layer + + # Find the number of hidden layers: + N_hidden = np.size(num_neurons) + + ## Set up initial weigths and biases + + # Initialize the list of parameters: + P = [None]*(N_hidden + 1) # + 1 to include the output layer + + P[0] = npr.randn(num_neurons[0], 2 ) + for l in range(1,N_hidden): + P[l] = npr.randn(num_neurons[l], num_neurons[l-1] + 1) # +1 to include bias + + # For the output layer + P[-1] = npr.randn(1, num_neurons[-1] + 1 ) # +1 since bias is included + + print('Initial cost: %g'%cost_function_deep(P, x)) + + ## Start finding the optimal weigths using gradient descent + + # Find the Python function that represents the gradient of the cost function + # w.r.t the 0-th input argument -- that is the weights and biases in the hidden and output layer + cost_function_deep_grad = grad(cost_function_deep,0) + + # Let the update be done num_iter times + for i in range(num_iter): + # Evaluate the gradient at the current weights and biases in P. + # The cost_grad consist now of N_hidden + 1 arrays; the gradient w.r.t the weights and biases + # in the hidden layers and output layers evaluated at x. + cost_deep_grad = cost_function_deep_grad(P, x) + + for l in range(N_hidden+1): + P[l] = P[l] - lmb * cost_deep_grad[l] + + print('Final cost: %g'%cost_function_deep(P, x)) + + return P + +## Set up the cost function specified for this Poisson equation: + +# The right side of the ODE +def f(x): + return (3*x + x**2)*np.exp(x) + +def cost_function_deep(P, x): + + # Evaluate the trial function with the current parameters P + g_t = g_trial_deep(x,P) + + # Find the derivative w.r.t x of the trial function + d2_g_t = elementwise_grad(elementwise_grad(g_trial_deep,0))(x,P) + + right_side = f(x) + + err_sqr = (-d2_g_t - right_side)**2 + cost_sum = np.sum(err_sqr) + + return cost_sum/np.size(err_sqr) + +# The trial solution: +def g_trial_deep(x,P): + return x*(1-x)*deep_neural_network(P,x) + +# The analytic solution; +def g_analytic(x): + return x*(1-x)*np.exp(x) + +if __name__ == '__main__': + npr.seed(4155) + + ## Decide the vales of arguments to the function to solve + Nx = 10 + x = np.linspace(0,1, Nx) + + ## Set up the initial parameters + num_hidden_neurons = [200,100] + num_iter = 1000 + lmb = 1e-3 + + P = solve_ode_deep_neural_network(x, num_hidden_neurons, num_iter, lmb) + + g_dnn_ag = g_trial_deep(x,P) + g_analytical = g_analytic(x) + + # Find the maximum absolute difference between the solutons: + max_diff = np.max(np.abs(g_dnn_ag - g_analytical)) + print("The max absolute difference between the solutions is: %g"%max_diff) + + plt.figure(figsize=(10,10)) + + plt.title('Performance of neural network solving an ODE compared to the analytical solution') + plt.plot(x, g_analytical) + plt.plot(x, g_dnn_ag[0,:]) + plt.legend(['analytical','nn']) + plt.xlabel('x') + plt.ylabel('g(x)') + plt.show() + +## Comparing with a numerical scheme + +The Poisson equation is possible to solve using Taylor series to approximate the second derivative. + +Using Taylor series, the second derivative can be expressed as + +$$ +g''(x) = \frac{g(x + \Delta x) - 2g(x) + g(x-\Delta x)}{\Delta x^2} + E_{\Delta x}(x) +$$ + +where $\Delta x$ is a small step size and $E_{\Delta x}(x)$ being the error term. + +Looking away from the error terms gives an approximation to the second derivative: + + +
    + +$$ +\begin{equation} \label{approx} \tag{15} +g''(x) \approx \frac{g(x + \Delta x) - 2g(x) + g(x-\Delta x)}{\Delta x^2} +\end{equation} +$$ + +If $x_i = i \Delta x = x_{i-1} + \Delta x$ and $g_i = g(x_i)$ for $i = 1,\dots N_x - 2$ with $N_x$ being the number of values for $x$, ([15](#approx)) becomes + +$$ +\begin{aligned} +g''(x_i) &\approx \frac{g(x_i + \Delta x) - 2g(x_i) + g(x_i -\Delta x)}{\Delta x^2} \\ +&= \frac{g_{i+1} - 2g_i + g_{i-1}}{\Delta x^2} +\end{aligned} +$$ + +Since we know from our problem that + +$$ +\begin{aligned} +-g''(x) &= f(x) \\ +&= (3x + x^2)\exp(x) +\end{aligned} +$$ + +along with the conditions $g(0) = g(1) = 0$, +the following scheme can be used to find an approximate solution for $g(x)$ numerically: + + +
    + +$$ +\begin{equation} + \begin{aligned} + -\Big( \frac{g_{i+1} - 2g_i + g_{i-1}}{\Delta x^2} \Big) &= f(x_i) \\ + -g_{i+1} + 2g_i - g_{i-1} &= \Delta x^2 f(x_i) + \end{aligned} +\end{equation} \label{odesys} \tag{16} +$$ + +for $i = 1, \dots, N_x - 2$ where $g_0 = g_{N_x - 1} = 0$ and $f(x_i) = (3x_i + x_i^2)\exp(x_i)$, which is given for our specific problem. + +The equation can be rewritten into a matrix equation: + +$$ +\begin{aligned} +\begin{pmatrix} +2 & -1 & 0 & \dots & 0 \\ +-1 & 2 & -1 & \dots & 0 \\ +\vdots & & \ddots & & \vdots \\ +0 & \dots & -1 & 2 & -1 \\ +0 & \dots & 0 & -1 & 2\\ +\end{pmatrix} +\begin{pmatrix} +g_1 \\ +g_2 \\ +\vdots \\ +g_{N_x - 3} \\ +g_{N_x - 2} +\end{pmatrix} +&= +\Delta x^2 +\begin{pmatrix} +f(x_1) \\ +f(x_2) \\ +\vdots \\ +f(x_{N_x - 3}) \\ +f(x_{N_x - 2}) +\end{pmatrix} \\ +\boldsymbol{A}\boldsymbol{g} &= \boldsymbol{f}, +\end{aligned} +$$ + +which makes it possible to solve for the vector $\boldsymbol{g}$. + + +## Setting up the code + +We can then compare the result from this numerical scheme with the output from our network using Autograd: + +import autograd.numpy as np +from autograd import grad, elementwise_grad +import autograd.numpy.random as npr +from matplotlib import pyplot as plt + +def sigmoid(z): + return 1/(1 + np.exp(-z)) + +def deep_neural_network(deep_params, x): + # N_hidden is the number of hidden layers + N_hidden = np.size(deep_params) - 1 # -1 since params consist of parameters to all the hidden layers AND the output layer + + # Assumes input x being an one-dimensional array + num_values = np.size(x) + x = x.reshape(-1, num_values) + + # Assume that the input layer does nothing to the input x + x_input = x + + # Due to multiple hidden layers, define a variable referencing to the + # output of the previous layer: + x_prev = x_input + + ## Hidden layers: + + for l in range(N_hidden): + # From the list of parameters P; find the correct weigths and bias for this layer + w_hidden = deep_params[l] + + # Add a row of ones to include bias + x_prev = np.concatenate((np.ones((1,num_values)), x_prev ), axis = 0) + + z_hidden = np.matmul(w_hidden, x_prev) + x_hidden = sigmoid(z_hidden) + + # Update x_prev such that next layer can use the output from this layer + x_prev = x_hidden + + ## Output layer: + + # Get the weights and bias for this layer + w_output = deep_params[-1] + + # Include bias: + x_prev = np.concatenate((np.ones((1,num_values)), x_prev), axis = 0) + + z_output = np.matmul(w_output, x_prev) + x_output = z_output + + return x_output + +def solve_ode_deep_neural_network(x, num_neurons, num_iter, lmb): + # num_hidden_neurons is now a list of number of neurons within each hidden layer + + # Find the number of hidden layers: + N_hidden = np.size(num_neurons) + + ## Set up initial weigths and biases + + # Initialize the list of parameters: + P = [None]*(N_hidden + 1) # + 1 to include the output layer + + P[0] = npr.randn(num_neurons[0], 2 ) + for l in range(1,N_hidden): + P[l] = npr.randn(num_neurons[l], num_neurons[l-1] + 1) # +1 to include bias + + # For the output layer + P[-1] = npr.randn(1, num_neurons[-1] + 1 ) # +1 since bias is included + + print('Initial cost: %g'%cost_function_deep(P, x)) + + ## Start finding the optimal weigths using gradient descent + + # Find the Python function that represents the gradient of the cost function + # w.r.t the 0-th input argument -- that is the weights and biases in the hidden and output layer + cost_function_deep_grad = grad(cost_function_deep,0) + + # Let the update be done num_iter times + for i in range(num_iter): + # Evaluate the gradient at the current weights and biases in P. + # The cost_grad consist now of N_hidden + 1 arrays; the gradient w.r.t the weights and biases + # in the hidden layers and output layers evaluated at x. + cost_deep_grad = cost_function_deep_grad(P, x) + + for l in range(N_hidden+1): + P[l] = P[l] - lmb * cost_deep_grad[l] + + print('Final cost: %g'%cost_function_deep(P, x)) + + return P + +## Set up the cost function specified for this Poisson equation: + +# The right side of the ODE +def f(x): + return (3*x + x**2)*np.exp(x) + +def cost_function_deep(P, x): + + # Evaluate the trial function with the current parameters P + g_t = g_trial_deep(x,P) + + # Find the derivative w.r.t x of the trial function + d2_g_t = elementwise_grad(elementwise_grad(g_trial_deep,0))(x,P) + + right_side = f(x) + + err_sqr = (-d2_g_t - right_side)**2 + cost_sum = np.sum(err_sqr) + + return cost_sum/np.size(err_sqr) + +# The trial solution: +def g_trial_deep(x,P): + return x*(1-x)*deep_neural_network(P,x) + +# The analytic solution; +def g_analytic(x): + return x*(1-x)*np.exp(x) + +if __name__ == '__main__': + npr.seed(4155) + + ## Decide the vales of arguments to the function to solve + Nx = 10 + x = np.linspace(0,1, Nx) + + ## Set up the initial parameters + num_hidden_neurons = [200,100] + num_iter = 1000 + lmb = 1e-3 + + P = solve_ode_deep_neural_network(x, num_hidden_neurons, num_iter, lmb) + + g_dnn_ag = g_trial_deep(x,P) + g_analytical = g_analytic(x) + + # Find the maximum absolute difference between the solutons: + + plt.figure(figsize=(10,10)) + + plt.title('Performance of neural network solving an ODE compared to the analytical solution') + plt.plot(x, g_analytical) + plt.plot(x, g_dnn_ag[0,:]) + plt.legend(['analytical','nn']) + plt.xlabel('x') + plt.ylabel('g(x)') + + ## Perform the computation using the numerical scheme + + dx = 1/(Nx - 1) + + # Set up the matrix A + A = np.zeros((Nx-2,Nx-2)) + + A[0,0] = 2 + A[0,1] = -1 + + for i in range(1,Nx-3): + A[i,i-1] = -1 + A[i,i] = 2 + A[i,i+1] = -1 + + A[Nx - 3, Nx - 4] = -1 + A[Nx - 3, Nx - 3] = 2 + + # Set up the vector f + f_vec = dx**2 * f(x[1:-1]) + + # Solve the equation + g_res = np.linalg.solve(A,f_vec) + + g_vec = np.zeros(Nx) + g_vec[1:-1] = g_res + + # Print the differences between each method + max_diff1 = np.max(np.abs(g_dnn_ag - g_analytical)) + max_diff2 = np.max(np.abs(g_vec - g_analytical)) + print("The max absolute difference between the analytical solution and DNN Autograd: %g"%max_diff1) + print("The max absolute difference between the analytical solution and numerical scheme: %g"%max_diff2) + + # Plot the results + plt.figure(figsize=(10,10)) + + plt.plot(x,g_vec) + plt.plot(x,g_analytical) + plt.plot(x,g_dnn_ag[0,:]) + + plt.legend(['numerical scheme','analytical','dnn']) + plt.show() + +## Partial Differential Equations + +A partial differential equation (PDE) has a solution here the function +is defined by multiple variables. The equation may involve all kinds +of combinations of which variables the function is differentiated with +respect to. + +In general, a partial differential equation for a function $g(x_1,\dots,x_N)$ with $N$ variables may be expressed as + + +
    + +$$ +\begin{equation} \label{PDE} \tag{17} + f\left(x_1, \, \dots \, , x_N, \frac{\partial g(x_1,\dots,x_N) }{\partial x_1}, \dots , \frac{\partial g(x_1,\dots,x_N) }{\partial x_N}, \frac{\partial g(x_1,\dots,x_N) }{\partial x_1\partial x_2}, \, \dots \, , \frac{\partial^n g(x_1,\dots,x_N) }{\partial x_N^n} \right) = 0 +\end{equation} +$$ + +where $f$ is an expression involving all kinds of possible mixed derivatives of $g(x_1,\dots,x_N)$ up to an order $n$. In order for the solution to be unique, some additional conditions must also be given. + + +## Type of problem + +The problem our network must solve for, is similar to the ODE case. +We must have a trial solution $g_t$ at hand. + +For instance, the trial solution could be expressed as + +$$ +\begin{align*} + g_t(x_1,\dots,x_N) = h_1(x_1,\dots,x_N) + h_2(x_1,\dots,x_N,N(x_1,\dots,x_N,P)) +\end{align*} +$$ + +where $h_1(x_1,\dots,x_N)$ is a function that ensures $g_t(x_1,\dots,x_N)$ satisfies some given conditions. +The neural network $N(x_1,\dots,x_N,P)$ has weights and biases described by $P$ and $h_2(x_1,\dots,x_N,N(x_1,\dots,x_N,P))$ is an expression using the output from the neural network in some way. + +The role of the function $h_2(x_1,\dots,x_N,N(x_1,\dots,x_N,P))$, is to ensure that the output of $N(x_1,\dots,x_N,P)$ is zero when $g_t(x_1,\dots,x_N)$ is evaluated at the values of $x_1,\dots,x_N$ where the given conditions must be satisfied. The function $h_1(x_1,\dots,x_N)$ should alone make $g_t(x_1,\dots,x_N)$ satisfy the conditions. + + + +## Network requirements + +The network tries then the minimize the cost function following the +same ideas as described for the ODE case, but now with more than one +variables to consider. The concept still remains the same; find a set +of parameters $P$ such that the expression $f$ in ([17](#PDE)) is as +close to zero as possible. + +As for the ODE case, the cost function is the mean squared error that +the network must try to minimize. The cost function for the network to +minimize is + +$$ +C\left(x_1, \dots, x_N, P\right) = \left( f\left(x_1, \, \dots \, , x_N, \frac{\partial g(x_1,\dots,x_N) }{\partial x_1}, \dots , \frac{\partial g(x_1,\dots,x_N) }{\partial x_N}, \frac{\partial g(x_1,\dots,x_N) }{\partial x_1\partial x_2}, \, \dots \, , \frac{\partial^n g(x_1,\dots,x_N) }{\partial x_N^n} \right) \right)^2 +$$ + +## More details + +If we let $\boldsymbol{x} = \big( x_1, \dots, x_N \big)$ be an array containing the values for $x_1, \dots, x_N$ respectively, the cost function can be reformulated into the following: + +$$ +C\left(\boldsymbol{x}, P\right) = f\left( \left( \boldsymbol{x}, \frac{\partial g(\boldsymbol{x}) }{\partial x_1}, \dots , \frac{\partial g(\boldsymbol{x}) }{\partial x_N}, \frac{\partial g(\boldsymbol{x}) }{\partial x_1\partial x_2}, \, \dots \, , \frac{\partial^n g(\boldsymbol{x}) }{\partial x_N^n} \right) \right)^2 +$$ + +If we also have $M$ different sets of values for $x_1, \dots, x_N$, that is $\boldsymbol{x}_i = \big(x_1^{(i)}, \dots, x_N^{(i)}\big)$ for $i = 1,\dots,M$ being the rows in matrix $X$, the cost function can be generalized into + +$$ +C\left(X, P \right) = \sum_{i=1}^M f\left( \left( \boldsymbol{x}_i, \frac{\partial g(\boldsymbol{x}_i) }{\partial x_1}, \dots , \frac{\partial g(\boldsymbol{x}_i) }{\partial x_N}, \frac{\partial g(\boldsymbol{x}_i) }{\partial x_1\partial x_2}, \, \dots \, , \frac{\partial^n g(\boldsymbol{x}_i) }{\partial x_N^n} \right) \right)^2. +$$ + +## Example: The diffusion equation + +In one spatial dimension, the equation reads + +$$ +\frac{\partial g(x,t)}{\partial t} = \frac{\partial^2 g(x,t)}{\partial x^2} +$$ + +where a possible choice of conditions are + +$$ +\begin{align*} +g(0,t) &= 0 ,\qquad t \geq 0 \\ +g(1,t) &= 0, \qquad t \geq 0 \\ +g(x,0) &= u(x),\qquad x\in [0,1] +\end{align*} +$$ + +with $u(x)$ being some given function. + + +## Defining the problem + +For this case, we want to find $g(x,t)$ such that + + +
    + +$$ +\begin{equation} + \frac{\partial g(x,t)}{\partial t} = \frac{\partial^2 g(x,t)}{\partial x^2} +\end{equation} \label{diffonedim} \tag{18} +$$ + +and + +$$ +\begin{align*} +g(0,t) &= 0 ,\qquad t \geq 0 \\ +g(1,t) &= 0, \qquad t \geq 0 \\ +g(x,0) &= u(x),\qquad x\in [0,1] +\end{align*} +$$ + +with $u(x) = \sin(\pi x)$. + +First, let us set up the deep neural network. +The deep neural network will follow the same structure as discussed in the examples solving the ODEs. +First, we will look into how Autograd could be used in a network tailored to solve for bivariate functions. + + + + +## Setting up the network using Autograd + +The only change to do here, is to extend our network such that +functions of multiple parameters are correctly handled. In this case +we have two variables in our function to solve for, that is time $t$ +and position $x$. The variables will be represented by a +one-dimensional array in the program. The program will evaluate the +network at each possible pair $(x,t)$, given an array for the desired +$x$-values and $t$-values to approximate the solution at. + +def sigmoid(z): + return 1/(1 + np.exp(-z)) + +def deep_neural_network(deep_params, x): + # x is now a point and a 1D numpy array; make it a column vector + num_coordinates = np.size(x,0) + x = x.reshape(num_coordinates,-1) + + num_points = np.size(x,1) + + # N_hidden is the number of hidden layers + N_hidden = np.size(deep_params) - 1 # -1 since params consist of parameters to all the hidden layers AND the output layer + + # Assume that the input layer does nothing to the input x + x_input = x + x_prev = x_input + + ## Hidden layers: + + for l in range(N_hidden): + # From the list of parameters P; find the correct weigths and bias for this layer + w_hidden = deep_params[l] + + # Add a row of ones to include bias + x_prev = np.concatenate((np.ones((1,num_points)), x_prev ), axis = 0) + + z_hidden = np.matmul(w_hidden, x_prev) + x_hidden = sigmoid(z_hidden) + + # Update x_prev such that next layer can use the output from this layer + x_prev = x_hidden + + ## Output layer: + + # Get the weights and bias for this layer + w_output = deep_params[-1] + + # Include bias: + x_prev = np.concatenate((np.ones((1,num_points)), x_prev), axis = 0) + + z_output = np.matmul(w_output, x_prev) + x_output = z_output + + return x_output[0][0] + +## Setting up the network using Autograd; The trial solution + +The cost function must then iterate through the given arrays +containing values for $x$ and $t$, defines a point $(x,t)$ the deep +neural network and the trial solution is evaluated at, and then finds +the Jacobian of the trial solution. + +A possible trial solution for this PDE is + +$$ +g_t(x,t) = h_1(x,t) + x(1-x)tN(x,t,P) +$$ + +with $A(x,t)$ being a function ensuring that $g_t(x,t)$ satisfies our given conditions, and $N(x,t,P)$ being the output from the deep neural network using weights and biases for each layer from $P$. + +To fulfill the conditions, $A(x,t)$ could be: + +$$ +h_1(x,t) = (1-t)\Big(u(x) - \big((1-x)u(0) + x u(1)\big)\Big) = (1-t)u(x) = (1-t)\sin(\pi x) +$$ +since $(0) = u(1) = 0$ and $u(x) = \sin(\pi x)$. + + +## Why the jacobian? + +The Jacobian is used because the program must find the derivative of +the trial solution with respect to $x$ and $t$. + +This gives the necessity of computing the Jacobian matrix, as we want +to evaluate the gradient with respect to $x$ and $t$ (note that the +Jacobian of a scalar-valued multivariate function is simply its +gradient). + +In Autograd, the differentiation is by default done with respect to +the first input argument of your Python function. Since the points is +an array representing $x$ and $t$, the Jacobian is calculated using +the values of $x$ and $t$. + +To find the second derivative with respect to $x$ and $t$, the +Jacobian can be found for the second time. The result is a Hessian +matrix, which is the matrix containing all the possible second order +mixed derivatives of $g(x,t)$. + +# Set up the trial function: +def u(x): + return np.sin(np.pi*x) + +def g_trial(point,P): + x,t = point + return (1-t)*u(x) + x*(1-x)*t*deep_neural_network(P,point) + +# The right side of the ODE: +def f(point): + return 0. + +# The cost function: +def cost_function(P, x, t): + cost_sum = 0 + + g_t_jacobian_func = jacobian(g_trial) + g_t_hessian_func = hessian(g_trial) + + for x_ in x: + for t_ in t: + point = np.array([x_,t_]) + + g_t = g_trial(point,P) + g_t_jacobian = g_t_jacobian_func(point,P) + g_t_hessian = g_t_hessian_func(point,P) + + g_t_dt = g_t_jacobian[1] + g_t_d2x = g_t_hessian[0][0] + + func = f(point) + + err_sqr = ( (g_t_dt - g_t_d2x) - func)**2 + cost_sum += err_sqr + + return cost_sum + +## Setting up the network using Autograd; The full program + +Having set up the network, along with the trial solution and cost function, we can now see how the deep neural network performs by comparing the results to the analytical solution. + +The analytical solution of our problem is + +$$ +g(x,t) = \exp(-\pi^2 t)\sin(\pi x) +$$ + +A possible way to implement a neural network solving the PDE, is given below. +Be aware, though, that it is fairly slow for the parameters used. +A better result is possible, but requires more iterations, and thus longer time to complete. + + +Indeed, the program below is not optimal in its implementation, but rather serves as an example on how to implement and use a neural network to solve a PDE. +Using TensorFlow results in a much better execution time. Try it! + +import autograd.numpy as np +from autograd import jacobian,hessian,grad +import autograd.numpy.random as npr +from matplotlib import cm +from matplotlib import pyplot as plt +from mpl_toolkits.mplot3d import axes3d + +## Set up the network + +def sigmoid(z): + return 1/(1 + np.exp(-z)) + +def deep_neural_network(deep_params, x): + # x is now a point and a 1D numpy array; make it a column vector + num_coordinates = np.size(x,0) + x = x.reshape(num_coordinates,-1) + + num_points = np.size(x,1) + + # N_hidden is the number of hidden layers + N_hidden = np.size(deep_params) - 1 # -1 since params consist of parameters to all the hidden layers AND the output layer + + # Assume that the input layer does nothing to the input x + x_input = x + x_prev = x_input + + ## Hidden layers: + + for l in range(N_hidden): + # From the list of parameters P; find the correct weigths and bias for this layer + w_hidden = deep_params[l] + + # Add a row of ones to include bias + x_prev = np.concatenate((np.ones((1,num_points)), x_prev ), axis = 0) + + z_hidden = np.matmul(w_hidden, x_prev) + x_hidden = sigmoid(z_hidden) + + # Update x_prev such that next layer can use the output from this layer + x_prev = x_hidden + + ## Output layer: + + # Get the weights and bias for this layer + w_output = deep_params[-1] + + # Include bias: + x_prev = np.concatenate((np.ones((1,num_points)), x_prev), axis = 0) + + z_output = np.matmul(w_output, x_prev) + x_output = z_output + + return x_output[0][0] + +## Define the trial solution and cost function +def u(x): + return np.sin(np.pi*x) + +def g_trial(point,P): + x,t = point + return (1-t)*u(x) + x*(1-x)*t*deep_neural_network(P,point) + +# The right side of the ODE: +def f(point): + return 0. + +# The cost function: +def cost_function(P, x, t): + cost_sum = 0 + + g_t_jacobian_func = jacobian(g_trial) + g_t_hessian_func = hessian(g_trial) + + for x_ in x: + for t_ in t: + point = np.array([x_,t_]) + + g_t = g_trial(point,P) + g_t_jacobian = g_t_jacobian_func(point,P) + g_t_hessian = g_t_hessian_func(point,P) + + g_t_dt = g_t_jacobian[1] + g_t_d2x = g_t_hessian[0][0] + + func = f(point) + + err_sqr = ( (g_t_dt - g_t_d2x) - func)**2 + cost_sum += err_sqr + + return cost_sum /( np.size(x)*np.size(t) ) + +## For comparison, define the analytical solution +def g_analytic(point): + x,t = point + return np.exp(-np.pi**2*t)*np.sin(np.pi*x) + +## Set up a function for training the network to solve for the equation +def solve_pde_deep_neural_network(x,t, num_neurons, num_iter, lmb): + ## Set up initial weigths and biases + N_hidden = np.size(num_neurons) + + ## Set up initial weigths and biases + + # Initialize the list of parameters: + P = [None]*(N_hidden + 1) # + 1 to include the output layer + + P[0] = npr.randn(num_neurons[0], 2 + 1 ) # 2 since we have two points, +1 to include bias + for l in range(1,N_hidden): + P[l] = npr.randn(num_neurons[l], num_neurons[l-1] + 1) # +1 to include bias + + # For the output layer + P[-1] = npr.randn(1, num_neurons[-1] + 1 ) # +1 since bias is included + + print('Initial cost: ',cost_function(P, x, t)) + + cost_function_grad = grad(cost_function,0) + + # Let the update be done num_iter times + for i in range(num_iter): + cost_grad = cost_function_grad(P, x , t) + + for l in range(N_hidden+1): + P[l] = P[l] - lmb * cost_grad[l] + + print('Final cost: ',cost_function(P, x, t)) + + return P + +if __name__ == '__main__': + ### Use the neural network: + npr.seed(15) + + ## Decide the vales of arguments to the function to solve + Nx = 10; Nt = 10 + x = np.linspace(0, 1, Nx) + t = np.linspace(0,1,Nt) + + ## Set up the parameters for the network + num_hidden_neurons = [100, 25] + num_iter = 250 + lmb = 0.01 + + P = solve_pde_deep_neural_network(x,t, num_hidden_neurons, num_iter, lmb) + + ## Store the results + g_dnn_ag = np.zeros((Nx, Nt)) + G_analytical = np.zeros((Nx, Nt)) + for i,x_ in enumerate(x): + for j, t_ in enumerate(t): + point = np.array([x_, t_]) + g_dnn_ag[i,j] = g_trial(point,P) + + G_analytical[i,j] = g_analytic(point) + + # Find the map difference between the analytical and the computed solution + diff_ag = np.abs(g_dnn_ag - G_analytical) + print('Max absolute difference between the analytical solution and the network: %g'%np.max(diff_ag)) + + ## Plot the solutions in two dimensions, that being in position and time + + T,X = np.meshgrid(t,x) + + fig = plt.figure(figsize=(10,10)) + ax = fig.gca(projection='3d') + ax.set_title('Solution from the deep neural network w/ %d layer'%len(num_hidden_neurons)) + s = ax.plot_surface(T,X,g_dnn_ag,linewidth=0,antialiased=False,cmap=cm.viridis) + ax.set_xlabel('Time $t$') + ax.set_ylabel('Position $x$'); + + + fig = plt.figure(figsize=(10,10)) + ax = fig.gca(projection='3d') + ax.set_title('Analytical solution') + s = ax.plot_surface(T,X,G_analytical,linewidth=0,antialiased=False,cmap=cm.viridis) + ax.set_xlabel('Time $t$') + ax.set_ylabel('Position $x$'); + + fig = plt.figure(figsize=(10,10)) + ax = fig.gca(projection='3d') + ax.set_title('Difference') + s = ax.plot_surface(T,X,diff_ag,linewidth=0,antialiased=False,cmap=cm.viridis) + ax.set_xlabel('Time $t$') + ax.set_ylabel('Position $x$'); + + ## Take some slices of the 3D plots just to see the solutions at particular times + indx1 = 0 + indx2 = int(Nt/2) + indx3 = Nt-1 + + t1 = t[indx1] + t2 = t[indx2] + t3 = t[indx3] + + # Slice the results from the DNN + res1 = g_dnn_ag[:,indx1] + res2 = g_dnn_ag[:,indx2] + res3 = g_dnn_ag[:,indx3] + + # Slice the analytical results + res_analytical1 = G_analytical[:,indx1] + res_analytical2 = G_analytical[:,indx2] + res_analytical3 = G_analytical[:,indx3] + + # Plot the slices + plt.figure(figsize=(10,10)) + plt.title("Computed solutions at time = %g"%t1) + plt.plot(x, res1) + plt.plot(x,res_analytical1) + plt.legend(['dnn','analytical']) + + plt.figure(figsize=(10,10)) + plt.title("Computed solutions at time = %g"%t2) + plt.plot(x, res2) + plt.plot(x,res_analytical2) + plt.legend(['dnn','analytical']) + + plt.figure(figsize=(10,10)) + plt.title("Computed solutions at time = %g"%t3) + plt.plot(x, res3) + plt.plot(x,res_analytical3) + plt.legend(['dnn','analytical']) + + plt.show() + +## Example: Solving the wave equation with Neural Networks + +The wave equation is + +$$ +\frac{\partial^2 g(x,t)}{\partial t^2} = c^2\frac{\partial^2 g(x,t)}{\partial x^2} +$$ + +with $c$ being the specified wave speed. + +Here, the chosen conditions are + +$$ +\begin{align*} + g(0,t) &= 0 \\ + g(1,t) &= 0 \\ + g(x,0) &= u(x) \\ + \frac{\partial g(x,t)}{\partial t} \Big |_{t = 0} &= v(x) +\end{align*} +$$ + +where $\frac{\partial g(x,t)}{\partial t} \Big |_{t = 0}$ means the derivative of $g(x,t)$ with respect to $t$ is evaluated at $t = 0$, and $u(x)$ and $v(x)$ being given functions. + + +## The problem to solve for + +The wave equation to solve for, is + + +
    + +$$ +\begin{equation} \label{wave} \tag{19} +\frac{\partial^2 g(x,t)}{\partial t^2} = c^2 \frac{\partial^2 g(x,t)}{\partial x^2} +\end{equation} +$$ + +where $c$ is the given wave speed. +The chosen conditions for this equation are + + +
    + +$$ +\begin{aligned} +g(0,t) &= 0, &t \geq 0 \\ +g(1,t) &= 0, &t \geq 0 \\ +g(x,0) &= u(x), &x\in[0,1] \\ +\frac{\partial g(x,t)}{\partial t}\Big |_{t = 0} &= v(x), &x \in [0,1] +\end{aligned} \label{condwave} \tag{20} +$$ + +In this example, let $c = 1$ and $u(x) = \sin(\pi x)$ and $v(x) = -\pi\sin(\pi x)$. + + + +## The trial solution +Setting up the network is done in similar matter as for the example of solving the diffusion equation. +The only things we have to change, is the trial solution such that it satisfies the conditions from ([20](#condwave)) and the cost function. + +The trial solution becomes slightly different since we have other conditions than in the example of solving the diffusion equation. Here, a possible trial solution $g_t(x,t)$ is + +$$ +g_t(x,t) = h_1(x,t) + x(1-x)t^2N(x,t,P) +$$ + +where + +$$ +h_1(x,t) = (1-t^2)u(x) + tv(x) +$$ + +Note that this trial solution satisfies the conditions only if $u(0) = v(0) = u(1) = v(1) = 0$, which is the case in this example. + + +## The analytical solution + +The analytical solution for our specific problem, is + +$$ +g(x,t) = \sin(\pi x)\cos(\pi t) - \sin(\pi x)\sin(\pi t) +$$ + + +## Solving the wave equation - the full program using Autograd + +import autograd.numpy as np +from autograd import hessian,grad +import autograd.numpy.random as npr +from matplotlib import cm +from matplotlib import pyplot as plt +from mpl_toolkits.mplot3d import axes3d + +## Set up the trial function: +def u(x): + return np.sin(np.pi*x) + +def v(x): + return -np.pi*np.sin(np.pi*x) + +def h1(point): + x,t = point + return (1 - t**2)*u(x) + t*v(x) + +def g_trial(point,P): + x,t = point + return h1(point) + x*(1-x)*t**2*deep_neural_network(P,point) + +## Define the cost function +def cost_function(P, x, t): + cost_sum = 0 + + g_t_hessian_func = hessian(g_trial) + + for x_ in x: + for t_ in t: + point = np.array([x_,t_]) + + g_t_hessian = g_t_hessian_func(point,P) + + g_t_d2x = g_t_hessian[0][0] + g_t_d2t = g_t_hessian[1][1] + + err_sqr = ( (g_t_d2t - g_t_d2x) )**2 + cost_sum += err_sqr + + return cost_sum / (np.size(t) * np.size(x)) + +## The neural network +def sigmoid(z): + return 1/(1 + np.exp(-z)) + +def deep_neural_network(deep_params, x): + # x is now a point and a 1D numpy array; make it a column vector + num_coordinates = np.size(x,0) + x = x.reshape(num_coordinates,-1) + + num_points = np.size(x,1) + + # N_hidden is the number of hidden layers + N_hidden = np.size(deep_params) - 1 # -1 since params consist of parameters to all the hidden layers AND the output layer + + # Assume that the input layer does nothing to the input x + x_input = x + x_prev = x_input + + ## Hidden layers: + + for l in range(N_hidden): + # From the list of parameters P; find the correct weigths and bias for this layer + w_hidden = deep_params[l] + + # Add a row of ones to include bias + x_prev = np.concatenate((np.ones((1,num_points)), x_prev ), axis = 0) + + z_hidden = np.matmul(w_hidden, x_prev) + x_hidden = sigmoid(z_hidden) + + # Update x_prev such that next layer can use the output from this layer + x_prev = x_hidden + + ## Output layer: + + # Get the weights and bias for this layer + w_output = deep_params[-1] + + # Include bias: + x_prev = np.concatenate((np.ones((1,num_points)), x_prev), axis = 0) + + z_output = np.matmul(w_output, x_prev) + x_output = z_output + + return x_output[0][0] + +## The analytical solution +def g_analytic(point): + x,t = point + return np.sin(np.pi*x)*np.cos(np.pi*t) - np.sin(np.pi*x)*np.sin(np.pi*t) + +def solve_pde_deep_neural_network(x,t, num_neurons, num_iter, lmb): + ## Set up initial weigths and biases + N_hidden = np.size(num_neurons) + + ## Set up initial weigths and biases + + # Initialize the list of parameters: + P = [None]*(N_hidden + 1) # + 1 to include the output layer + + P[0] = npr.randn(num_neurons[0], 2 + 1 ) # 2 since we have two points, +1 to include bias + for l in range(1,N_hidden): + P[l] = npr.randn(num_neurons[l], num_neurons[l-1] + 1) # +1 to include bias + + # For the output layer + P[-1] = npr.randn(1, num_neurons[-1] + 1 ) # +1 since bias is included + + print('Initial cost: ',cost_function(P, x, t)) + + cost_function_grad = grad(cost_function,0) + + # Let the update be done num_iter times + for i in range(num_iter): + cost_grad = cost_function_grad(P, x , t) + + for l in range(N_hidden+1): + P[l] = P[l] - lmb * cost_grad[l] + + + print('Final cost: ',cost_function(P, x, t)) + + return P + +if __name__ == '__main__': + ### Use the neural network: + npr.seed(15) + + ## Decide the vales of arguments to the function to solve + Nx = 10; Nt = 10 + x = np.linspace(0, 1, Nx) + t = np.linspace(0,1,Nt) + + ## Set up the parameters for the network + num_hidden_neurons = [50,20] + num_iter = 1000 + lmb = 0.01 + + P = solve_pde_deep_neural_network(x,t, num_hidden_neurons, num_iter, lmb) + + ## Store the results + res = np.zeros((Nx, Nt)) + res_analytical = np.zeros((Nx, Nt)) + for i,x_ in enumerate(x): + for j, t_ in enumerate(t): + point = np.array([x_, t_]) + res[i,j] = g_trial(point,P) + + res_analytical[i,j] = g_analytic(point) + + diff = np.abs(res - res_analytical) + print("Max difference between analytical and solution from nn: %g"%np.max(diff)) + + ## Plot the solutions in two dimensions, that being in position and time + + T,X = np.meshgrid(t,x) + + fig = plt.figure(figsize=(10,10)) + ax = fig.gca(projection='3d') + ax.set_title('Solution from the deep neural network w/ %d layer'%len(num_hidden_neurons)) + s = ax.plot_surface(T,X,res,linewidth=0,antialiased=False,cmap=cm.viridis) + ax.set_xlabel('Time $t$') + ax.set_ylabel('Position $x$'); + + + fig = plt.figure(figsize=(10,10)) + ax = fig.gca(projection='3d') + ax.set_title('Analytical solution') + s = ax.plot_surface(T,X,res_analytical,linewidth=0,antialiased=False,cmap=cm.viridis) + ax.set_xlabel('Time $t$') + ax.set_ylabel('Position $x$'); + + + fig = plt.figure(figsize=(10,10)) + ax = fig.gca(projection='3d') + ax.set_title('Difference') + s = ax.plot_surface(T,X,diff,linewidth=0,antialiased=False,cmap=cm.viridis) + ax.set_xlabel('Time $t$') + ax.set_ylabel('Position $x$'); + + ## Take some slices of the 3D plots just to see the solutions at particular times + indx1 = 0 + indx2 = int(Nt/2) + indx3 = Nt-1 + + t1 = t[indx1] + t2 = t[indx2] + t3 = t[indx3] + + # Slice the results from the DNN + res1 = res[:,indx1] + res2 = res[:,indx2] + res3 = res[:,indx3] + + # Slice the analytical results + res_analytical1 = res_analytical[:,indx1] + res_analytical2 = res_analytical[:,indx2] + res_analytical3 = res_analytical[:,indx3] + + # Plot the slices + plt.figure(figsize=(10,10)) + plt.title("Computed solutions at time = %g"%t1) + plt.plot(x, res1) + plt.plot(x,res_analytical1) + plt.legend(['dnn','analytical']) + + plt.figure(figsize=(10,10)) + plt.title("Computed solutions at time = %g"%t2) + plt.plot(x, res2) + plt.plot(x,res_analytical2) + plt.legend(['dnn','analytical']) + + plt.figure(figsize=(10,10)) + plt.title("Computed solutions at time = %g"%t3) + plt.plot(x, res3) + plt.plot(x,res_analytical3) + plt.legend(['dnn','analytical']) + + plt.show() + +## Resources on differential equations and deep learning + +1. [Artificial neural networks for solving ordinary and partial differential equations by I.E. Lagaris et al](https://pdfs.semanticscholar.org/d061/df393e0e8fbfd0ea24976458b7d42419040d.pdf) + +2. [Neural networks for solving differential equations by A. Honchar](https://becominghuman.ai/neural-networks-for-solving-differential-equations-fa230ac5e04c) + +3. [Solving differential equations using neural networks by M.M Chiaramonte and M. Kiener](http://cs229.stanford.edu/proj2013/ChiaramonteKiener-SolvingDifferentialEquationsUsingNeuralNetworks.pdf) + +4. [Introduction to Partial Differential Equations by A. Tveito, R. Winther](https://www.springer.com/us/book/9783540225515) \ No newline at end of file diff --git a/doc/src/LectureNotes/_build/jupyter_execute/chapter10_11_326.png b/doc/src/LectureNotes/_build/jupyter_execute/chapter10_11_326.png new file mode 100644 index 0000000000000000000000000000000000000000..805fe41b26df2d2c4feff05898eb17068b83f300 GIT binary patch literal 13138 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 literal 0 HcmV?d00001 diff --git a/doc/src/LectureNotes/_build/jupyter_execute/chapter10_11_328.png b/doc/src/LectureNotes/_build/jupyter_execute/chapter10_11_328.png new file mode 100644 index 0000000000000000000000000000000000000000..15cd8bd4a1f0ad7ccb14bbc440884955134a3070 GIT binary patch literal 12990 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 OfFwobU`6lseE$zj1Q&V$ literal 0 HcmV?d00001 diff --git a/doc/src/LectureNotes/_build/jupyter_execute/chapter10_11_687.png b/doc/src/LectureNotes/_build/jupyter_execute/chapter10_11_687.png new file mode 100644 index 0000000000000000000000000000000000000000..69b7bde496bd740360c070ae6bd92a3926d3f0d8 GIT binary patch literal 13512 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 literal 0 HcmV?d00001 diff --git a/doc/src/LectureNotes/_build/jupyter_execute/chapter10_11_688.png b/doc/src/LectureNotes/_build/jupyter_execute/chapter10_11_688.png new file mode 100644 index 0000000000000000000000000000000000000000..a6433f182c7fc5d8c9a6b84c635c377eff04044a GIT binary patch literal 14023 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 HanSz(eT-Ih literal 0 HcmV?d00001 diff --git a/doc/src/LectureNotes/_build/jupyter_execute/chapter10_1_0.png b/doc/src/LectureNotes/_build/jupyter_execute/chapter10_1_0.png new file mode 100644 index 0000000000000000000000000000000000000000..1d4c167046e7763474c37abd23b5ab6a82d162f2 GIT binary patch literal 19858 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 H?8E*A_%o<) literal 0 HcmV?d00001 diff --git a/doc/src/LectureNotes/_build/jupyter_execute/chapter10_1_197.png b/doc/src/LectureNotes/_build/jupyter_execute/chapter10_1_197.png new file mode 100644 index 0000000000000000000000000000000000000000..35d7d55c450be8ebbea85433e7f8fdb87f9cf51b GIT binary patch literal 31357 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 literal 0 HcmV?d00001 diff --git a/doc/src/LectureNotes/_build/jupyter_execute/chapter10_59_2.png b/doc/src/LectureNotes/_build/jupyter_execute/chapter10_59_2.png new file mode 100644 index 0000000000000000000000000000000000000000..bb70c1d74b08172e6aba7091ed4e9a2fb15f71a9 GIT binary patch literal 23442 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 literal 0 HcmV?d00001 diff --git a/doc/src/LectureNotes/_build/jupyter_execute/chapter10_7_413.png b/doc/src/LectureNotes/_build/jupyter_execute/chapter10_7_413.png new file mode 100644 index 0000000000000000000000000000000000000000..93e7d1fc9135e2064a9217bd1ec82b4fc338eefc GIT binary patch literal 13154 zcmZvD1z40(x9-p)0s>OfLrH@mUCPki4dT!(At|9CLrD$N-6bI1NDSRdcXxN*5AXTU zInRAA&k!Hqp1s%J-+tfquC><$t0+lhKYjTW1Oj2p%0SdWAfzwA-P?d|4UOcF2oD)Fv-zPL41HuIw2N<5{x{BsH`6wy8@gV1I%qXEo*>E-bWc8>1Fc-q8IWRsgnAX{n7?0G!VSyPua8h5aCRgxf&5`Cgp4+1O zB6~W`urlPO(ceAx^zV0XNaEuo%wpB#2&pZSX)Q53NTBB^ux{IQ#xh#q!l4|9ZxcH z^dY|wOE3+?b{S|jGl=h*w{Hi0zs5#?6MUIf14S6tXVQ(|+T^Uk7 zE%=RO2i7K5e?#Gr@S@4hUx^ZbEJXZ@hru}02c^!V`(+VfqK0I~^Y66oXP-|Ojwp*b zAXyS0S#soF2VwbhF%XjAu%doKb`Im3ku-(Do|U`lgLW}K`1Q07+pz6e<|g+Chjm82 zYwS`3MJs?8lJCP|`FWUzH&38AL+cvH#%Sf%IU0B$?{7UsZ+5whpf3dTW~JYU>Anvu zun8-$3%jcMJimd6AKDv3kZ||U&rgyNc$Ao7wTURQ5Ewmxc;>n&pv&tr+0MkrSf5))n21B4R?QUAare?epuvHmniS3j=K;2 zT$XW0TiRz2kB1lMjH~Xw@0c{7g_8?Jf4(^%Dc0rItF(L@ghR2p&>|L2#<#xs`zw$2 zpI2E2wI5eV-dMi?-JI`b*-ZQl2n-zgX(;q*Z`y1`*%2DDsw2TyC?$@K&~T4@;GrCB zbKW7PYVcbaD*Y{WZtcsy_YC^I|3iP2Zsn`7FpEN$mFC5n!;c(hZ=G`Fehf#QVC^>G ze&0{Enb{o43jY3`ftfjEtuJn@$;&M>E2}`af&l}Uvfs7t_g9RQtBo}EJSB?p68)~> z3<=$O7b~P}4ifsp=LSnO`!2ZF5*O*b$qJ%frv#ywr<=&%>8N_jAHH3_qMWAajPdFk zEeGtI=rX?KB3@nEX7PIae-@ zJ%wv;X~}=UyzkO`P4IKlfRwm6NL5ueFm*^*&YPz89i;Ye3tr7NADI2j$~;Z4_i_>q z!noUC{&0-7qton4an`tVSUQa1PF*XKYF{r9>-5crqM1p?tnUXsJ3D(;bo1@q^%?iH`9Nalp8|EO=}IQP1#fQWjX}2EO`NDq zcWzC0_gbc1j4`?ywacSZxp{$8iWvf@7VskFL(o;>2rc|Y|R(I`7MQK(tPkqahlaXTZr!@Yc~gJQP+_VvS5 zY=1eb{-AL#T#X%q^;R_aiQOGpMgEr1u07XR>391G0uGQ|o@+-6Xj#o<^!E#U{is$L zTQI~}VMS+@)K&`Xt6J~b=9D7FpR*D~<@FF(?l`rmfFQB2z7P>P!MUNF*z6DM#f=rK zTNmNjljb4yL3#HQPb$j7$v`!GBceQQxdNAZ=|$AvMo5jC&eTH_KRcJJMHTFfLbTTI z=PQHl$?7a|oL_A{SKg(N{`&@nKaSkNj@ zI}1TPLDIVrBGeqXWaaZ0oE&`0KK8d9=QW9)F|nRw{TsZ!4HJWwV#)8_nFJGXSO`ce z9B>~5PO*=yFo_tnjTi!&5^qErjeym>F}4G0QBwoR|xfh z2=O+$u;Q&E=`5W2?2+-E5h)>+g(B&_`^lpA?a3k?bIE?+Opy83fR$WbIvHv7b*k6C z$!d30UA6ulIck%2eq`_ypH$AqYT}4Lho;$6uTu+@pLf|;Ojr-!q4E)NKcogWdX8q1mhF6FLcQzGYv*-^m%O&! z>2JU4R9fP-2jMbuaz^sayMN8jrn8>-IZ$ae_UaKLcjsiZQeo+U6XtQ47hdtoQ%+Md zHKik9P*_~;iFro)I^gc+0)_MAG6WGpmBw}J8pm!(BJ_zB+V$ORFj;_(o_?fAn`7Sl zL=kj6H7J@t+{=9%VA||-3RF=)6kWH_OblR zdX9%#vG5i(CrT7arZwRPw*<#oquv3B|-(!h8$7yu2!`|1t}@?e_~EG`1hKJPZQB zeS(X-@fBB;nu{xnG1dKxvCmatEQ_|&az`+E%R_=i>eBg)gGJvDHrwgS;3S9Ugpn+1 z^@dM&nVFf7mWL9teK?qJDmHFO&Ch?uYd_l^LdY^%`;iv##pb|+zP((Du$?UX%_LSq zgiNe5Epb`3YmFkUa2V_f2>lsJ zYoX?r*EX)`B{c}}31(g2DIgHYFyKYZ`{RFSNCZt**$}_68P5iI3ibpA{aN?X4X~uW z>dGQ$ehm#m_xDp>T>8Kx1I%3hp>Lnzak9QUT@~8ob@9t-P0sUdJFv8r!^g*G)_F)o z=_;Y>c`Zy_S!}-K4Gdc2)7Mfc_N7$+T;gr;`s;&EAIZOO?nqqU=ca0C6@m;zif?0w zw7+HZB8GG1iGk&Sg@k+n3{*%FeA8v-0O$IqZR9}@rQqV?5pd}0@RKH; zFBFJ`+BKVKgujJ7i( zS_IZU!)~TpcUr&3ejv^FURFWj87Pj!*nB8e{s&Ae84m`{u#2YIB8N(kVjLX;XZ{ABzg8V0wezJ)8h&{V3KSsZ?^ZnA7 zP$C0|Caq@@c2$>^sG{HRg57Y3)}z@rVi13u3b}rsQ}1InWAlx?G-lo6{DZa)ND_da zzHV+>$~*H*nBYi=;Ol${D?ni__iff=K5XR5MH+rd!T`qRuJW}EvoiNJta$?0Fq{2+ zX%T+kQGJydSA^3l-&k=bknA0R@u^w1{Y*l~-CjiUNS8papl!pFW)ri&OnC^j-&FsV zYrU4sJm#|?&LpPBN5>|5EntI4P56YhmsoIRt2xXb^^aS)EgRL_dnFJhNgZwk+7V@I z6k0yT#%3e(Lb+PAqP7yKfs z8+a-k<0TzWj-Hx+n9G}*ux7aX(f}5?&6_1@iLF*08s@U5(_ew+KViFwCKQQepG&Vh$92iFIm?eJZo*hRuJ$yFD634AcgXKowLr*PvKH+tk+8@kU#}D z#u>njlG)L~qQEqemDWawVot%FeIzkl3>94Krn#aq{>CTC24<=YHG(HejXj9kxiDBl zZ(*qK!pBYXTYm3-d%&!vf@dJ6EW=2bL0>)Kb9+bwu%~IQw^9ek5*712 zCl5Dbt_IAFHH?8cEGw8Zhp*KmIH(m5-l`OKIBkj|7r{Gjo{*b`nT!*bEhqi?!<63RwNLaMh!VYLv&`Q(yX;mZxV2&0r3@lo2_l6AOwMKk_ zgDW#BFNI~FZ@bAu^X?)U#Tv3%f$0H9E(DZ?`#m#?IN)fj7wRi-)ovwb>zMtuGh_H; zv(erbM8Cs&i}^Rpn}n;xd{ii(0OV6}v1kH>KMNhXqdttG|_=sAoJ!&731}TS2)x!9Zcj>QT zPxiiw=saI)_X=-(!fwWYa3v{qld;-9OL50sWABq{cXY$1PzZNoU_)glbHk%7-tGxl zXXM;3pPHUP*yU~^7~O3rq?2Xq-oJg91Lp?9>N@K+Ujhuh&$2CxKgGv|BC&a!`32%$ z+F%?mMN!F==jairF|Bd3p>8J@!k@11eB&S>{l$VHzOBYxaEx%VX?3ggL}vSoH5E(|HHCd=iLD`EFjAX6kkh#4Oe*U zpVy=!e64X1`rZ|1x}GL%*nH2Hx0=#E(!81f0+%be9etO6TmnxbF4Z{b@*g)I6}x2r zDe4<3#Z2)1v-H^;l*@y1V;6Cu9D`&cWY>0PPqf!XOY#ujv~IQ>hrw~5kx%|KUSjD> z*NnO!eL~SNW7Rw|0>uSbi)}@CzkP1wJA07yh}cz*n2D*4n5hX{+_%f(hr72u8fgQp zc=9{QCZL-oN-U0two#7YYE##@p8L4=dVG=E7s@M6dYNcUv1$U3Eqf>ClH9CC+nRrH z*YTA>tIsu}JubQxtV_J$R~8dGkt$5CZ`e=^#WhZTwkn4|boQFBSS_ma>EHCg2^yyBagps?69CpcTBrUk6Z)8wSu zBb^+3a%+*8Jm$F|vVBx~vA{*85dUBdwarRq|0_l{S5x&I*7QJe!k4}guf4V0_@(uR z%s(cX2cX^FwJaP#+RO6kuI>1h4>sMVyaaCEy8+pbB^8?IQQ~;ItYELbgEgluHx)>A zunZgqS$Ff$Y}8=aOij9*z4{r;xAM{pZ}rS==7HU3K-q$LVu(6RD{Z=GU6iTtLOHjopzPH7&z2AP_kPoNZ;GCynS%K6Y zB+lfm_eL~vKIl4hU@}S5Lu}SkIlrE>wAG^PhwNl8YS5Y*Wji+2y|7KzP8w!ogHVEd zQ@spRUc-L-j^wIa`Uf1vhyE^4a2Qt?BpbO*2l9y&sAGSz4!uWI?l%2)ift0aEAyPs<1IT z4Oz{GX}m^|6GzFl78o?I#NXY)VYjH2s9GQoz4_){y7&0vK$Lf1QATod@@nAZ?^p!B zsLlXlM<{yoQ2RO~BS!X{bmoThppCE_dZn3DQ(nP(iBPnhK--9f#EGB(`Idj{Y>^O5 z#tM(g%j{(>3T$xaxX{!_WjtJft?8;vmg$Q;rj@~B;|33iDAiapHw`bU7yPSro)J}t9<1+o*6I!IcbL#KD(Hs<7{!X{jE)DT`)y6q zv1hUM&>fE62hTR%%Z?k*TA9e@g#6s0d|6Kf?bl6L$2o~Wn%f<_@z1@|H7ZEH^mxks zQlwQvD57ld_$RBK7yiYF^$8~>c3l##z2_HD#A~7)jl#_lp-|1JNBV#S`t}ASNiEXm zlv=-05E6(;w81zY=%M#~@K^K52DY<+{W7AASwvvilcDL$uLG4-Wg+PY!vjbCKk^-P zbRn8i$@6z=V?ad63tK$Wbt8@72WLd0=(#$KAsggP7PO5^o zM|!htjY_!ePApkT)B)gBgE(N=;y))PgNf@@oLTcMmvvVbHV^y#AFO|R#cweZZTFbw z>{dR{{~!%o)ncw`etH&AGqIq6(Rs6=fo!TX^ zj(s{Xes3`=we3LC;T6>KS13j^I2TwAFCYW*LA$S~k>VPa(%sBTo=Y}N_)tKR_nDdV ztWhXFvl$y;KIG8lWU=by-PF`^D7iAjfx@K3!X^i7%;cvgCa|WlulTMsOcYOW;|(q( zz31*Jzr72?jbq2j?dwJL5sUQt3|foUPq6`{H(c(V(Tym#6Zowr~DgOCy)PM4bl0r~H>uRsK=d0}c2fNS@47UuR4PIplP+Eoh6 zxI)l0*89HfseTa}!yM~|Lx_xr`68+l{A=Rgh&@R33_`~|wv!19E2{~|kIG7zt`~@w zE@)F5m5pdPAK(k6tfQslcYe9`I)il5~PW+C#U+GLS|;FTaD= z1F28`peG`A`CmBe&y#TXkPz61VdCQ83=S2>GQaRo_3`#PDY~8B6hrlZw-o+8oH{xv zsMzPyN?!ONE1KivJooN>*p_XW6};Vs-BAs~j5N7W`i6PJu$2L-fDpMs#K$1wd7xp~ z@y{wh--b6#u%3 z&6$WI94td7@TVq_NMvCM+N1ZLT9hPuLn)6I5m}^%O%U-Q-gKs1w!e%cf6Nq{@c(jn z^hdNv*yZ$$Z=>}U7xxd-1b_+vd^>+9PcBzpUv6!EY) zk5#p-c3^JK)cD~SE-OKJUqahTQ%l{5STtn>;SGV0N-cfVf@JH6wUFG~_AZV#5t_cQU+>7jnRt3)e%dWbR8#b9-IWPbY-Rxuw-R6cXO&`lk1|R!--D%;m#3LsSm?*X);nT+k z#cqdo9hHenHBNgVM{YAr1)oHbxW)OZVDA?(3L%fpsBw!>UgeB-v0hglC3%0g#*%*gfVffaAO@y~=MkPemiLTgI!LO&(14n}B| zxoDr8u)up+fQ|_9&b*5%=ug=YuJ@5kOB`nXVgzaZ>042a*JHfw^jn87m>*7$RdYfj z)$CJ+sko5+2CPQ0Yld$ZuNs+xG2UO>mHdpnx% zmtZrSp3c{n_1}0h*_#GV?WjJENt@V;RrM_g6y^`VOV_|7(wPnoMoHxUsjQCQxDmOU zdY_&&DL-Q+ST3-lr8LSC`o|S``h_q8y!tno9bLYzKd!9k4wpw6t%T}o=AF}jKC)=1 zUuhnPe(H3`XYBo<@#^c#Aq}q38H39g? zf)Dv7juO1W<*6A<5*1Yxjg^V$1TVQw&d9N%nY33QMYAaQmm$O!9KGk?op9~?pYufS z0o?y^@?ey(TtUl~`}LvKh4R&rKNaTT;B`@Kn@6hAEj2~%vsE>xFOrzCMUE~J)Gs%& zi@Qs{!fH{{klm25{e8fr!}G%bt*L?dQMDAkX;RP>Yp<}TZ@l_;Q=u@-uK)Os41k6~ zphRFRNyQjR#f{*c9x@jq{tgju`kr@qY<~Q|NO?zwGDl;u@Jbsx)oRu_w`4clDIz}; z_~*0B?XlLkA&Qaw(a1Y1=ib915Ax4JsMcI^-80*q;ALpM@EcdZ_n#Ml(c*sGw4S>d0w zMEO6qoHZBYKVJiK8o8_`tzPOokOy;wD!4m3I#Ozvz>b&S{m8^70}{Fp`mKMnCLvD;(sDv z>1o*~RK0zMg{z#|J851lP&tt3SUAk@d1c9g7mPLyI*~NZ`0Qhbrwe)?CX4nB1}KAaT3me&61~jjkI8h8 zeU$ydVPTEsffhsGLI_jHWD44xmQhdl^xqq|+%7ty-}3uqeUwIWDSSbum3tzD%0tQzt3_2oWm7JP^~>)b zn>uhnJ3%1)%Ewv&GQ144*dK6~z0M7kHuoAgsP}GAK(xA@u$Tk-n}wE?JBtYYWDS9@ zM94XR-UL6n)6?3B%bQVa`Jk&N&`w%i#nh|R#W7K;5)A(-hD3AEEloz=*AwjlQR zDdsgvQg#}n%sNlR&_U0pWKsE4$b29pbIQL~^f{gCBCmEN9B$Qbj;}^r+)c012RnAK zEhVG=-AB7ZFZW(_GHN`N1Tni;cW_kUf>_Rz*MCN6A6xX3vd|Wi0a}hJmLqjPHEiqk zx2wC23XeI&=lYuG+u`S;euUkdQ~JEg%~$QQ~913FJKfdEHO`C;Hf| z5yXius#~3epb|!WC+PZl!q!V@2^1y>>{i$RW_7Qoz~e(ha-3gb`DB=?RPn%TaVytU z*!>rvF*yOrz+dw~FCq49N{%BZLLfE%o(lQ>j2(CsU2e8svdWqiu-Ls;vvUCwvSQ{b zOa-jM*OVDhpJ_@p^04M;qy4q~jlSs;kutd`F$+NLGIAe8nsQ#5$8^x||36 z!@C+x?}-heTe&MB;D{P)tZn2=VF;(Dq3;CZCBU9SmDzA_svjK6;z=M8!LGF|9{0AV~L?(n|z&2={N5E=9(sKnm{Jj$tl z6NHF2KaZPt%GbbLSz7oiZiK|Fn1iTZG zrUqxUvbEMLR0M@~YvEnJgY+6gr+$O+nZQxNDIEJ^wj2{n0336v2C3!9KF{qV@kI++ z7#S0B{ixk7v(~{FW4geME0#a(mK{7I(CE2tAqiGPzeFN239GYA6T!>J=0W+6ah`FcO5>ymU0i(oVad*>BjFOjjc!-R+6^Z{ zC%N+Su+|7j^jJu1gTblU#QwU7_%JT(a4tsfvxH~2+ne=pwN44h*^|s~5H6ED)M;(c z=#6#TH3je2yeJ2E)u97H4YAB%tp_q&nkv^?a4KX0oyo~~t@ zu`cAN0n!U3VN{p?rPm|>OA$v)GiiDUUV5AiERH`5$;b4g30FMIBB?LqxbS%s0Oz47 z+LV%26&@s_q_hXq(mL2KO;u!k=-jzb?~i68pYbJmW@sQh3d4 z)*iV~pi|u#*kh0cv*kgUHf+cruxiN>3Mg7NuEgn0KU`gG#Z=BDfxz`l!Vj$*TcMxd$k|b*1KYHh@ z6F>OoUmGECo3vY#V!GS7*VAP+rID*XrN&>EiXs~D;71ZK|C95HxEgz|tweLiJi$Q* zdb+JTE0{yjwenpbK3MgSz4T-IwALe}#nrEQ(JmyP)PSybg zZVqN8EclAv=Y089X{aD7F`;YdVKO35?^*m9G8Euv=%?7*Qq>3YYTEaWpWi2zS0+sV z__~2hB1$-srddlQ1CLKfMzJ9 z%TJf+QQZSgtwNQXyYCj}hK8>sWEI#1hNQ;<&Ss99p0FL7x5%oiI;NPKW{^_KUR%}L z6|Cs{Vj8IYxVRn62l}a+5f6wRy9J4#FFoyM3QBk$97x8pa*1z#?>rX6$?@PV4JdJx zFGs~*dT0%d{)qHUklqmOZ5I<$Fi=aD#KcMkEP^9Xk6R8bZDd-hF74ae8Qa~3l*yXd ziZ)MuF-3bEN^a`P>!!lK+rY^B3h!M3kcJ!D%Q^cq?p?ja9XbjWc>$$%vB9vzdBdS! z`44IEk3|VNYyxZv1Rs5M;l+#m8c!hE5ina~yd;>Z7qwHa4~C>^5)2Y7W14&A5B{YC zIiFtWTRW!!3ijd!CooqQo%Jm@-HZ{!2bJrr24m57<;1KC>)zk@@gOKo{)8TzGrvj3 z`blEy-iM(AHGtb7`CS0sz4WND?DD6u1NX)ycVRnC00rcXE74mg3x98at;PR6N=9S= zvG5-es;skXQ##=bW=7S%*2~|Z_d3!w2v_7&d$zx zu@$9&wL|WYL=@aDg-4ofahi0Lr3B+z&6zezjFIusRVl??GIrB=DuQR zKz6v2FXcs)9O(SQfa;a?|2~2oS7ge03U7&EG=BDMoB0J3#Js#s(r7|w+v4H_xt(Tb+K#%nb`kE4Z8Jy$I(5$w^X^-GAqcW7P^} zHfO-_zzAO%k&BPDGrcQm(-EY7pWUJMJOx&~MJsCwFFJq2+uGX|O-)zNgw{>}lT%=3 zWmFPhXa>qQwFNvy{iSo+phGK`vJ_uGh}M6H+T-X4lGbGn5?uufNEGM z6xbmqn#kVqLc2Kid_SYP4u;|@W^cCAI+81)S1f!Z8kab#y_1MpIIULQRq zuB;^Zz+Un0$ycZ7#*J7Eo(u5YH8S<#ve&#a`}D7I&%U)m@IjijL@bC(Si!8rRD{oQ zbs0}^aI;%J)ELb4rY95bI|i_T8rtG|?|nZ7<=dOW3st5qT4B4YUzKFfpxP0S0NfRB z8q0)l{i}OLVlvKsQITrd`4Cu@t2TObnRALxt9uPefn{E0uY1?utM@6<*#I*uK-TDO zPr2B)X=|zHqv5oBPSf*%n9~xKPwV&t`S#$zKi9H97<@?(n5z1SeL_wkZTqPz{@9V< zpRz`U$qKo-VDH!2jdA~jrEodd$)_QfKi-eCDvWfoe%^K=VV_gz>(QIn2vIq9h8^{c zZuGBlpC-@6F#38#%lE`Rr3W(IIdEnOHp>l{n+~dC5xNRP32kf)g9>wrNwrT5ui~S@ z5Xy$%sxOX#Bs*Zjuctoq-a@t5Zf^=1GjeEO zUpI~&QP>x_gpN&={A&jpIL^7U+AOL3N%+K1Xss-Tw1>?sEl+)uLU>{Q3R$=G(Lg5} zq-LYXAVAba6X|(?bDm(N)3F&&isGwC*MEDJcx7z~5r6Y<7NjRQDe~zP7Dc*E2Vr9q z|Ei%4B4LLbH`Cst=>qeqTfT)HblHc8f6i`+_GXV@kGltswKJWM@0@BY5%?mTf{(CLUf4!K?Gh zBU@CV;Y92Pcn9vF?s6l@olKkL0HV$-8^Sw9Yp%1Ncf^}w1{=d<>VV_h=TZNoW+&l* z8~I}J|CDDKwTiU5C71)X88JSaoBW49_I+ef22yBSIM>qe-@mVPtAKiKo7(*h8bF6K zmh7;dR6Sa+zWVb= ztUHJOdnMD7+K@nhrI@ls2e!rr%VcvgbS3Q=`2Xj=!CTWmGzC&x0CUhMKZ>;fRSvI22gcar>y`vM#aab|0Ht6Vmt2qk_+Mv=&7n+h z_LH!ucm)jLK8R`FT^-rb^hQGmZ=;lG+~ha#G8=eD(lk_LA?f_;=dU}bz76~t4s|6r zyeU?2%e0u#=bJ47WJdg`ui~{_2zq-Nyr>yJ_xHJ6xly0zNfwj2%qwAGsJ*06qfZ&$ zS$^)??oxrDpTOl1@rqzIqRA(-Si)bhY};*Cy+Fj1-=alDKU+Z+8e#6pMSd2tzTbjb zY+GiJT|3dL7YM<}f1#32EIbQ`;D~nP2Zy63`dPOy9A^VdCs3H!5pyOipG&0g%v+49Q=B6 zo3rk}N{8sg(LzsF>6C}^Unzj`pUxr|x1-f8Xn61TPM=*vnjEroSLSpssqV>c8J2+M&dlOEv(%~lh$V| z0aZxk$|Y4Hv}6K@7xzZT7#!DioD)P*wlYEc5nqe|x?}{7fGb+kz;|{1Y$b~DteA6X zpZ0gIv|s$nM8JW;xv>%%CuwL+#@*x*ZYwLaKX$~~(41@?KJ>RbLuAb3y}(x2f}#11 zVU$1`mR-w}MarAHt|@V8ysHr8Ngur@$qbR^k? zhLx`d*s)(t$27~^`+aSV(f%H!7g@?yhChi|=(04XzvFLQn>l=Wb-jcd+m4=BONMoHgY^XJSsh1=zTmq{6OGh zA|(c%xH}{z0Y8L38hWOrz+Wh-BLeuJ%uCnO2M>>e4tL>?%!OY759NKeEPNlpoqYrB zpE==q*!z09!+qUdAM^M-J@avedrFB)ib{&`Jn{AQQWO*W|K5wjpSg%-a3{s%;ql<< zLDfwIbGP$?-g3a2uGQdTwT{j;#>Xiy1$fEaCQUorZjcK1zCzqk`;*Yg2!#?3m)|(q zIGRrsc`ic7L;9ijmAk!A;#4H9u5PDep1V|G-r2Ekck z!S@W%R9)hbyA8~N;HG;}uC>Ci30f=Mkoy9V2yp6w*2*b0G9(_su>kh_Gg=O*DZ37B zMp!Ro_yrW^Q7bVi9C6)-Fml>d*+ZjxDOwQjD+J)F88K#XlMyr{UbhaRECNx{oS|Y&ZBOhC27jbYg~$CkOYCKb)EGf!6MC&6 z`%}68I*Gk$ko$ZPH?0-9cQqtX$M^7ncZg6amus2T2>-ATEx(kg%UeCJX;a_5+aE&o zHn+_+LH3(Wrfx#^zcvKDL0sH}{?Panrsari2>66B=u;5%2A{?tDlkXa`q1FGSF2)B z$EIr)TX5>0g5UMnHMPFhN{d-|75l{%H}^yTI>gTtk8lXYyy45Xs5-29fWiXAQBb?3 zjgF#5UJG%;%&pva3xgRaYxyRKw9owLo6&MAY#%0Jt0olN?L-$$H;4!EWI=yERfOE| z;`O@uxg=&E4)Tc#!^iK&3k#dlLV+I1n~+~{Hi~`O?ngxs=sk*fq~et%b_;aeq2LP& z?aLGj4Z{CSiVZ0IR@H9zVQ25oyK7}83nGr$j0H9=1NCb|GteMS&K0^kQL`>`tnf5`_hR(y_-i z`CG>6W8OzdwebQ1WaOU0xh(P9)lCIemjW6P-BqI)(cpUeL2d07OWvW2wMIYan$%0p zgrJ4Qfcy;&J{N&-lyT&4-TjlH$Y35KcaSK48+8lUL!Br%0rx5Wso5P3p?-aoV#J6s zelWb>zx~4NIxaCTBaHR!rW$tw{kxZ_yXfo4=Nvi5hXuPt;b7tBX?QINt3CL&4DT9* zj53a5*POY1u<5y9#rII2sQ|z9Ty4-7E%mO(JhFfQj$K#@DvY?*bNNIAM3Zzd13zs4 zbF_Xaj^v`9K(538V)I_8O`(RmXlwzUCmn|9e%*@nI;4?xlp|%20PhHJG zF=|Yqr;14^{QXs6X55cm!mC*g6$x}=_$7Y$)O(bh#|6#y@=$#3#Yw8W6&g+uPJb3o zj(K+-DvYrmJfn!xfB13p7OLgfiA!X^#=R?NHZv*E1Q*Gs9KAaZjduT~S?k;Apa3QV2u>%`H#kc*Bds zD+ZC9ZWV=`$Gf0=i$uOh1_#{o$Rp=?eo!+As_`QmOk{aZ|8cP~aY**wSVPnRs`}mc zReYMWAy)L=TmslSXyxOdEHRS@P6R!4lK zp_=1^Tx$03606>VXhKU!yi|=?tftGDwy7mp1BM5m-SR>r4#BCajY=Qf=jfxPy-I0z zMHo^eC_K)^KbIl4wuf>OBVEF#=I?03m}AG``^^cx=25}00TpV)0BvX_pU>93(_561 zt@&6POeVVd{_buj_w$1U&--J+FdNDXu)K@V^jAxm9CAZ)*5e2t4|!INY%4_iAs@!m zw-!%ZtZJf~@Km)=iP|Y)c^{GR@~01BnRo$Ts^@DXLrneJke-68kBgC2A2yU>RHlBF z@TyP8`Jm7eWW=$*$_x5eVzJ{*IxuGBhS@CVIKIb+6R%vkklO23+s>fBt7rQRpQ{ju zrejn{#amxO#lQ9?gHy4Uo#P6w)>Cc{V4xn8N#a%DPF;lDr~*> z@zXJN->0DnZnm@eCGV$+14yUYR~as4)Nj@NV6 zQXx^oQQP{nlZ8N%M`SyXFNoSNj2jczZpp(jPVLG$>b|N*y{g}1v`Sz6U^5we7@>Zd zig4u2`Xn#3$_o2Laz!8DA|vWDlZ0%0ML)EQb;>dIi)}ZlB5tF|W!czjp<)i%jiU%t zesxj<^W*eV6g_TdV}@V5RL()3$?tHeN%fRpQS5;3$13e4dR^yW_FD8{4Z%Vyi@)|- z@B{4GcDB!1F|XVEC+Bz1q^z-e4=@X2X8t}v)5EqogWr7I zV6Ja=IzMF;75Q9%JpSe<|7X6f9)WC2rmq?LEv-zjLsO48**|f$11m~l@G{3^Ct>JH4!^oRth z$QHo7w+ne@%|0DM!@@bZg_^tE?%l@5H8#Q%dj=P7&J`m0V194m4na>AGLRb|kq;}8 zaf^gUa~@wZzxjzj-<wEgZNV|krtl%O5}dir#hgk8d8W%X zE!-7E&Hnv;YMor&hB`W=QT~tJvyD&0vhlqZEvsY1T=;FGkn`ZGzp+ePHdV+v$g>+e zov+{1kv?HavCbzxW=cJP^7BGmmai;~>xb*d14$<2Fq#ql5zPzUBg(AX(*)n7 zPqjxiV0xg|)AKCeTZt5lbLp*C;8gGMW)Qduk9p(tlbDhe;nYvwpkE2pfo%FD0;}PqkGY4`cnT z0h>76ra5ef8PDcv#vp+&3Zj>mGRrsA9?F;e_O>s748Gaz$27Fp;{z5Y^vP>99q>j? zN#{HKj;c!Ny#qgwxe7R)jN|7f@uW+o^S=4MY`L=mO&AUmbq~ZFtj0z(s^WipZ+A^6 z-x24hlvO1muWus!vP$iD8MI?3_U zXa_U152-K}9GqMISx{pZ4k5xiyY)!8T)!GrFj|f>4{O~eusiOj@OoU0FSPW#)??{$ zmA)5q969>TB&>n{?tt67%hdV#Px4~QxuOC5pKtb<4Ft8)3Gc>J@QtE(xFYU4WQ@(X zUERKFybgKAX^vfPWo5Rbae2-eL*K?`o$;$2wUWEt{+!|g?EI2-H#776NbamA2-To5 zlb6^pI+N7A+04ztAPiUu=1+TmEz}%r!V$gKX0S$z*+`Qql}4Z72Wv;RA3_-_AB5#C zRJnKuAgA`zw#!$-5Fmf?#KDk&c5vO8SS83c_nr^b)dAr?V(EC z{^^f=WgxQ9{`Q&nCGZ24h?1l1LfjC<01v_6{}XQT*SG(uERMLoQhc`3J1E;FPU+BK z|MzE>8?3J7eT}F9hEL~}V|Nm3o(IsW+cO%mqRKcQ8S{h^2uKphTK?B(ZG?&8EZQf0 zZ|>f^cTe5J!^0(Kp?ctXOvkg&*UsZPP{tJI_VbSpV+eUZ+r-F7W9d<$$={WWE z_CK<;GkNZVBL0jj%w7hszN&(=bnoc6x>`BEn7u@#qbACvMqQq7S3O~g9i{^QcL53H zRg)P|c1=o{zA3M2%O;~26!%_&mKx=eqkg=(m8BdcNy6cUM=xlAuA8vsOY6fNRYkPg z&n;Z;1mwAg`9R(XX5ABTkTPZM_Us?J+T+@-`mpm$@q}|EjlE62&2Uro3cLI>UnNJu z=kI6#?T6F~E3|^f`9Gs+RD1P=^1k^^*ysqR+4pDM#x?rWpD7h_6^bY8IXn5zKY%dx z04)`TW2{p5W>x!O(`vrHGM5V)6~*B#fK?zQ1! z%a%ZiOuKM}A=Pscm5}2t_k$epO&V3s8?HbkIqBhAUX~~JFsC?pf2GeLNA_h|esBVX zSW60S{#9YyZa=f6;#TuRURl9g-{^1!y->ScH*TI>@}Os>Q6*)7op`duR`VI;D`$Ot zQ1-gd@k2$06Oa zHgMzspJES@qnQ^^;{4NZcO?mLJz_fFZC8VI!ov^PiK*DWg`Ldx+-{iFkjyIi@+BR3 zR{(IwXYV^RJ)x-2u6g?zOvq{>ca5}#+5Z3tiJyq&$a;Wge-|~(KBE9G{j~i=(XR;L z`Y`2hGwen~pG9kEh8~Cp#NG?4gAPLoewNk)M4aa?XqVfoh9nP=VvbZW*8NHMJ}$)m z?|r_b4A5akCQ%!jfhTi^ShswmB(&~Ly^$FZlM8MoNcTCI`gydmlZhCPh*K7mrIHQ5 zB>|+a@{yH8kCiYG13n9xDu+!DX|QU9Px^3~2U!sSj zD`dB|=R32VL0FiIIxS|>Az8w)mv&HbQ$$!;xYtqAI^yyuH|%&ysct64CCYq^@ha>k z;(}40;cZ6kU>+(DFHO*J+TPD7WM~dB8%f7rg9@u&-x*h5uF#&PBl_g8oKt?6}w&GaG)s9eRDfuzGPYRMys( zZy?wO&_0mDs~NcQu?+7661kBQ)}Mn))Fq>RFvfO$3PqQO)@8o@X^~xGzt!#D^?Q(+ zge#E8ZM?$%djg}Wnb}C0F*h*{*H3_kzAvu75#Jw+*tO-3m77aF`Bf-8aelU0<#YNc zlR(^m%R)PerK2;3LSYHPhfTi5(f|y={xEOrv<=z*{woVjFXzl3uczyZccz1@{Zp%U7QoPU&QPIC8X+}%$Gi@L5ww^cxw$>n5KGm(N zH6zD!gT+oB&eehxB|aW9zigU}Hj1_1y0Mz;L%nb|-e3XnwyNz+I9Yk0lz^C$C(B@e zzhA7@cYVZvLLq41vD6@|v$}_?ADEtHy*umqRxM2;vzYVY+HmM@$b!S(()XWvN}1IT zJtGZpJJCio=&rtg)5&~@l4CnW%G%4Hk}a_Vu(Gz@$=t?#HG+^JH6)zXLfv zG0e7;j+XZJya1Ptge*rT0j)*>qUvvDT4$s1H*Ww~+AP2>ihB6ybgutbVVi}tw6p;C z;~7U-(Ome?5fv2``Fk)c(99FFOC`-E+IPj`oSBo8)Bkd2+tY%QAa15(9+St_bF2PC z;$NkJ`Q9tm_N!-2<(K5m#yHOW{f^7x>7u*RJV==Or2x143gz+>XNaC?_!6q}Z)E5> z0GU1BDB~PlzE7GL_+q}hlE?33R-m5_I;T|6zlaxbxi&9)Nn3(&9@{WJ36%qwnb_g< zUeeItBzXplxU3)_W|1UMB(WRF9cq9I$bzhe z1++7fmb&OB!ZHKP(h1TPI zI6#2SVn+lwmS^GRzX7BLsz73puE+zaRtvvkD} zt+itM=p}M+b}%?Ip_dYzbM2E7xmf*k^t#rM*o?a>zCAf5mL zSnC6r(8rCE{r!DTPZ7==MBWWbtn4`2_#!}6$O+_zIE<4lm!PEt$-GkDYEa0)Ujr(r zG6QV8KR4tJ$-)gxDUN^fHp4(b1ZsIbBr9pCA${uJ2Vk8Op8H&(@BZjvhyFzp|U^SedZa(rh1N+6)?9d1^0wIM}I zU{N%nnrJ)h&A734O$e7JA&3GuH7FGAptqDQ2&Si#kifA!`U7dGvU-xVH~2BcP!KIk z*|k;)bac>rtRCC=Uy`6``fsCTp~`|UgD~&~;sfqY>lt8Tit#p*lNR&wLb@rQqL|;i zv7PtddTFmty8w$r2K^RoO!vD2)x)MKtxj$>5a(<2KW}iK>y3T#WXo}&B(JwBf1wE{ zZ@!>mT5RC+7tW#Cj=j-Cqs=Fb*Bi?J8RrRU%TRRkDNATqw2}IcRxun;iqFARQOQE_ z%gWe5c|*xG|J_^8e)%|nmLoT55CGfiWtuARx zHyuB}p)wPn=sW2?9wLICXyVV$j8@rP0fdnVh`3N6Z8G3axgB#q)2RLY^kueF8lX_D zh!^vk$EZ69V;MDsr5?}MEL=6|FOi@up25)~pu6H<<1F=LiO2{oXYOB_`rpAq(VEf{ zYLga)yfmsAFQE1gMmWSO$4dvQ8hI8po?B66T-+^N7=K?CFzoe(k7;*YtyKv zu@}YTRCD+e@d8yY{j$TwlwDJjikA(SnE%S0N{dBNgf2%LO=B6{lwEn*fQJG>^ntka zOMsT+D@2PBM6KW4%92KP{xPB(=QMZpRD~`+5WIqo8A4tY+A^oQm>zAv^1Q+4&0G}U ztYDc(!c9JGK?$_<)SV}^g)vU9vd(v8;Q7lqVD z$)G5ZXGRp8*1`}esH3*ipI0hL>0mi0I|$Q0+KPPmgJHJ^fXR8Q07YSiso=2?a|lD| zA6l#$!SYIwX+Qe=13u(YdM_1ygX%dJI1UUH@usumG@NQuz)~9d6&y$;ufTmoBEjtX zLv>(U8oGRd?)bMLx2E|qko_?5`ps9(T8Iag9Z(k*Ls5NzEcoGOu-+3Jw zC^EhuZS)8iE;JNtCmK_co|*5&ED(;*nLk#7#toTBm^MS2rE z_;U7(stT@YFf>>qOu$7rYsX*4qSZiH6PR2=FA>T(5_yp|raE$^$T$%R zwbmt3|4sW6ht%g%>d7xWP)y({ZY=L-hDJ5GSzVfeCguD~9eTnSgsQHtuK^L(pBBcr zsvV-%QM<6ClRK7IKc8~Daz`hp35w1~50&b5X6fZk118>RXICD(z!9cAo<`366ne%&b+g8$HK<}rm5Ll%BIas-0K3jM@1IteCFY*! zHZtqv&9(sXJO4*Y27GFe8xAOkpf65wdak|EC(+hV1?O0bz#_7+1<8U4^ud3m9Kr_L)s!au7+d}1A?5JDSobAh zcP7qhsj{Rc#4sa3TrBZFhR5{RWcBn~N7-$_=_h#_@)N2Ss~XUk0Lc`A4{*}qmc6}) z;}h}!1Tz6a+VYy0I?EKW-h}J1v;**b8`Kt~)oomu-2jYQaBqbFnKHJUq1q zt)?0$_^N;(g7wix7kX=#SqKtI2x0uzBZFU;Z2o6yah}|<5z!(7;YRd^K=vd0Blv#&@op-}1jn9o3Bdb`2OXece(#Zk`vq>1G?DL4pWLE%RI+5(l%|tb?R%K{ zgC`zB=ZFo2!Bh>z0dk*hy=G}aBoR^*&bz+bx)09cg-8J~JmABXFKr5Vp)dO-j{jMa z_J3OO1AP_~IG^J3907d00Bm{Rm{nM5GPW`M?0*A|r+oBxVxa)nBtV2Qf%sW>^qkUd z-wWXVwEhz8;@^YIk^n|k45F9YXnb$1=U~i8kd*XW%#$SvUcG6?Z*-$&1SbmjDDNDV z8lFl5gB9zi4vDbg?+~k+j4k{v=kzkJ`D!%I0eDe%z+w7wR%VTkhh{$pEU!~<8OgOJ zS_42oS=)AYy*ip%u`Hp&I%tXy`Yw1WP+q(!l`Th{69be8d8X+3Y^P;;gg=a{g_JD! z1HHb<1iFJ6pSHw($pbKlB*THPWlTnCWHSKs=S-xU?~Xw`08VmD87EC-fE)8IbbLG| zt*3ie9=fa&xX_1Oe`s1)YXC&RlTJ_#bo3pvP=p{jv5uukkKrpz=xg6DU_MDV=*gmt z<20lz(_|Qm^b{nL&uI;Lk48%+^PG@Co=B9B4#1-6sJJK3YM*RK%}1Z)RS=a--G}3} z^)UVw3TSRXs?orJlRsAN=7J}62vOvrm~|6A z{nH*QL@bIV;VwvW&_^u6$pJ$|Wn3dj4hY7-x14~^lu5mm2#nO|a~|erSH?c?x z{`X}jU^WCtT%jqT!aJS3Y(jsDVx~mcHi1~bIE0o=KW4%e50Cpkt`;E5m?WWliHbM7 z)8c?6k32C{sJ!H#arRUPl#P_(r2xBzG*KXp>bQKiqdMeOH^q(5A~*!_kDn>@MXqa( ze!SU%2D;xIXvIoW(*HRV-1s?x7$ie%PmvxGgW!dyAo)#{1`gfOKzK1!0M$H(_96^L zeS{1z2-{3X+&>xzyn2U2GAX*G7g`0ZeZSgN<}!HZ9=q0$&pdJf z;AH{OC|Ol4qm}r?+fMRhDX3u36==r9-?Sd2PB$N`>pw(lW7C%R)Oh}8B{CiL)Pa101r zQgw>>Fx4d?LnSv7h#V2>B1SffA{Z?Oz01KeJ<)>o`Bk-gpCbVBuB5J!hR#xirWD=a zO6mSSw>gs4O>3xrQ{}_lsdV3;>u0+Z1uO6HjWD$B=(NDi1RX|311@5xNxocaEm z?0aaUAyKEqjH3{l(J@~TH_9Zm53s~0WsNK}rId#$r8CAQ`^6LTyEjIr^C*Tz3jWL| zW94qJQyy?HC^Q3Dd>;zLTMR`v(P6&3}U8JAOq!y2!NA zaq}1(oWVh#4j}vj*7qhkzorVA?8N(z#v}~i*a1;{sPA!UR3ax@K=x<3u#oUrnOgGb z^V6&U>7|RV` z1zE|Venron*ml`8{sWbwIH(A{;)l3F9Vfnt0mhdfF!P2sSiN!3YDcDSf0lGP@+p3x zV|Ur@hU(5T9cLA6AYCw(6b{Dgzc!}1vPG{bk1wQKI0(5tuOKP#%n&5|Rs6=Zj}c~t zkL^z)AIV}O=Iz39dyI&$O7z=RHh|)GY?upqM^|*R# z0?SxC$;YG`&j&WYWs&9@Qz@nWXGza?+5dUPhk)E@T1wNEkUrKM2ke_Vg#>mMzsJne z7o=7a044}w!vBo?TJIgh6KOcJkIwX+tOQiVm+;geEtE8nVp0bx3|)C0T1O;JHk_gt z&9BK7`dhk>YgC3}xB@wS*PyWFOG-y;LX>tDSLE%@*^+qxx^RWrxG&&9h^RKijkc9)zLDHK`-5QgfN;ok(_I*VB!j7ejgVa9|yygPVRCT)) zS(EDgH?R(%UO6P~u8gMUpGzMR=7h17@)FaSm}s~ra$T6kVt*Nk2vTlYrt@Jw1!8`! zb+{cY(%>T4M8Gu25?}YZ;fdUwYk&7aoF8-l?Gc*2z;r-$CH)B9;q+U2-Eklo^PV85 zVa|oW#LfQqM&1Gq;C!ed8aTMr@1oI?BI9%}%Mha}ecwdm<7lpE|lNQN)~2buXbK-@l>C!i!Or2x@O+Yo#DD6#j@>{7j0?q@$FKe&LcHl$1^ zf{ojqwfZ?L@LJ;ta1~qHnGi(~%}e`iu#U<7$+!5^252AcG)lFVbf-e*^H|e9k04CE z#+rh(8mQ`NUIUQBq8+9K)RLdNi~4=Z=i%rfs^P=lpw}`NDGxH-mBXE2pF+Hz{>~m( z3G6jSu4EHo;`q?16oxB63S188X#tAmz>9gWz!h3N`M^Y@+S7xnh}GmT7eHb!jrr%V z$nlp<@v;Z#hS9R1wK=B}$tdGDTd2J!Ov*$N%HuZDs#ubX&8S!9GXR`a|3Vl($^X_% z5KjPr30gd?ncaTmcW)NGn*Q1y-(U`#kbU7;L%Fuza{2~V_l^Tw%5{<6kmeDHSv z_`VPzR6MYLqqNHC_ArvOU9!xfNN_>)YB(jkRhH`yz}gWN31FC&iFK@re*rkY2TH>kSu!4*}@5qD>z|Z8>Z3b{?m5CNt7lU zOH&YgyV>)#2#`#I7u~|lM~fMB=P+Tx0u+)~77b1LpHvy2-O&dv)FNPGekMmZzflxA z-qD;&^Rb!y8z+?f=N1X|pZX@%yk{;%ZI#5Tp~T%0P2PAik(YzdiY?o&8}iB*0IqAk zAZlZzQI+01{_(Postf$(Z%0*SrC(lI>xoy>ael;4%Z?7dGx0A05}8~w*>Bb*NA{NT zn6X60&Gs~c;W9mMFAJ|##ZSbP%-exzE|!#{CAp&kf)N<4DSGOrnSWkrJ3th!yZd+? zUMW<2MK5=PTwRut5wU=EeLQbU8JH*dv1Xa>=e=dA>$AcvV+%HvzFi~Ti=>gR6cZq?k-&*{ zwnVZt?PI5VrPqUGp*B<^;Y7zOt$lME1oSqsvv+wiY92aVEijLk=aq^a0SA7EO*F2Ev zW*9(y2YcCu2EAbHW$e-87_3MRRl%1h$;kbNh}*00iON4#8vbGG>=8qK=<{^X8E3h6 zlH=%V$=h8B`mM8$=1q0t{Ki?EEzygd9C;4w z*=sEOqY*ju%Z0AaRsV`BYhmWj=7<+Al~I`yQxXB(vG(qnx)c{KJ%_7ka9Fme0mB^; zy#>cs_M*bzHY?Q&6ZtiW+^yf!$!uoaY1aC6$2<=v*&~A(VRw9@NLXZ?MQ(lJ&Juu2 z-zqmIx!7N)VX?98j9ySq0#Y4^AoSoV5=4=3SafFHMT3j!GG+tmoecNjW>~*5&DJ}!R zN$nD%tG`mm%St-QuC{=i+l3|=6ed;Lp<+Aj2NMUn+tk9E?Z}PX0di%YIZF5#ZuH>tst*L?>BkrNIfumUkk7}#M zKI`@u7hFNM5T zhcSPzQBkX1j0fnR{zVe*&OW)W=@_q`RLpe5c3?}yCUM}ZQ6R>>(a9KlbOT%EEq(+F z0M87!rHJ2DGyUFeY!eb&&7L}WB@8YpOwX6dq-%_D2XCHp+~tl84^j8#US;Jzl)*b2 zt$Oq-k+9H?1?%jL6*wGwd!GTa z{CD({*k{7608>X0{NSojnwiZt2G~Q9Sa7yyO;Td~YY^j5=|)-oCB~)7+xT1lzMW`8 zn+zb%zr%rg&G!XeWZQ^7^PgTt<*e9g`j?ubc0miE5wIb=+tNHLbKbf5(vnJYcG5>%BE4jw)B_dCjr1_A>>bPL4 zxO~morp8af(Uk6%s~gi_h-J;cHka}&@0e1AD25~ktKWkMCA(xDloh$vmT`T75S%xgv92+AGS8<&!y}fF}ToghcYJc6Tn4#SCn=A%`lGoBPwp#czAJU&us`bP`G~k$%9^cZ@V3 zf}$d@b55onhTa2x4ms8=m8!1X`5|yd_|+w~(a>nem5W@tPY3ep)y4Sz{OpF;Z309W zXGxdxj*fN{tctt$gnWB!7V0l;F<Buq)&6RKbB`av_Zq*%%r96UkL2let(4D(*Gcc*zH@XpaMgb`ZvyT=M8R=Nz|vy( z`^eOOfJA&V{Ov*Eru?oF@v+K442pPbCh%Ux9BKJNwDE#pXWQ280DO^+?VYvmd~y{M zC2-{@f6le?g*eNT4yA@B#e{SDYHsmCCw_qhp1P?yb<^;*7p=iT#bI>OT$k)b$~K$F zx6=+dG>Rt4!loVxeW3G^1(wy;N)B&(I}UtfXS=3uw&NK*D_yDd-JaOWZ6oISdT{IM1JORy46n+f&P9Ns+4C>T~B+l4#U{t`le{$bn2J zX=lQ{8GLzH{`xaGDR+;4<44aud2FQMpMy+u?_*9l_y&iZC!UY6?6YxB_+DOdx7U&0 za>}0Fv*!U=CzBEQ%(-;~S$^Ae{0w-(%?lzp z@e8BuSwQd5ULCmv9z-l2Ej0N7J2Abr`E01jJxo^r+#Kq&CQsYTb{#>gH{9}K5vK+p z-md36kS6*9O3?iBg5z+3{l`hve)Y~08M3KPBIeE=!hoSoCPsS8>73a+mVIC8h4`S>X^K$ftd6a zf&HT)2#}O$TIb$9h%=v!S&!4X>jnGs`@*qDH=Qrgbb}U$ z^h;y?i{&TM%$XjkBF_)FV?M5S(J#a#tQ%Q}>@NO@MjcrypEwA8TQ-WWnkDO7@|a*R zE#b}$YM|d~xS|0PKP|yNzx@)-#_OPhs$-L{zF%xU%tlb@8qc42zLQ+pyFNY z>rO(s0*TZ>Yi!r8M3Zi>v2V4A_ER-+FJ(9F{O*Av5j4Cuv$#>nd*RZN^W1TVCqFQL z-J!~PsW7^)u1%Fw+-IHG`SuJdBY0v_!TX6AHTPWdyb5_?VcbD4u+{q$OaC+cS5T?S zSx5Fso{ohg=^zHuTI~I!+Rm#gdu-?NJ@e%aww88^>Mzovnjtqf$j)sV~b&$z<58Ld1egvbE(s*!`D&qfK@&wGRW{@HN zB)K&uh})+>>)hvWM_0X7*y#%g`)QktKgaBWVqt;}xlMKsB(86d677!}e5=xK+RCO- z?1abBpK$iFb5|ALU|qe^r*^1{ax#t=^-)@w~&=R4OmR>NEz|C8CP0Z2@#ldBw zdGAD3^1u4tu@Tmsn~wB#1{1}zX!Wtg#0PeTs6(^`O(dgUQ-embwp;|bq60;=A%fo= zG$cj8U3?cZIYDQEqJ*Pp-gFZ_h9K0&CEn?^$4j5yet0#@^uiyWGBjpoz_!+VX2ZU1 z-JbX9OZ%1oYn^iny3P*1=~R(nGj?g?TIhTuv^Dny{k@>e?V2nkA5Z5RF^Z11u(9d?tg13?3J(+RDpDG9vHl|^ zqO=jP<^5C6+Q9Vj%f(bG{l)nQ)|3ZJE|V6Du`_lyKU?A9o%sZJPnRbIB^oE{RXQ@6 zD*kp0&ASYoQO#N%Dp9+Ls<$8}QQnpGp37x}ZYul2hlt(%V zg@_03UKz}n=kj$Q7FXQR6Q&n$c+3Y6Z+Ruh{K?^O4b^BFyTjPtTk+2oDY%^1Z1dYF zCoOkFCkxBEH!xUT#bo1~jp@H1llR`@7Q*Eo9r(jX!w0Q0T8h0x3Qt&?DK7OXvi8!p zl~*RoA(BAxMx8~5PLvv`@gB^0f1!%VWX!IvexQ;GYo<5R^rd#bE1>9A@Y|(Y6LNhU z9p*-(chJ;Lv_4apmT{vJv9X~?!jfZ4A0c`M@`h~EG^f42c*7mKg*e@2IdA-vA47(Qo|5_gkl|``CQ~>}4qn@-NNnCx1uu z#59sd$p#;+8{C-=IYYPl?tbdgn1Uk*n`ulhU8ttmYH~6%8)A;HmZ#6TJt8i*XA9?U zZzVX4&L1_8OBi;~A-*VSxR70Bq56<#hS!%GXmQx3Cr}Fm$^>lzg%Vgp#6+bJCMwN_{a)WFvJq7FKSy`9*>+SnO{1!yeSFHR;pEi-6uY%Dp9!N=S)NrT`CC8fsR+M2P#GEU-Vib zv|+y?`!;9=>+F>R)1%hVI@}AOpeG1}Jd?)wssh`dz_5ZNT|_{clCR5uP9px_!r!2f z*M2&*sdpdga64_&_@X#Gg1)=Y27Ub+_DI&B!P#Mkzo}vYzc$!f!7zZWIdDT9-=S5%{PDwNREjH8B@cQCWP_+ZG3Wg$z$O2 zmE8DZ$PHUm;#G*tK^Qvv*GZ-G@@|w1%unRA+TggTeKCTPsEx$n{uo)Kef7{f^#~=Ozn*bVboeI=yqsb6S?2`b5Mf z&w#anF_%A8!H9bW3(dShR+^4kUinZNrN=J0HxE_$b7S5QR{!GtPr;T(Vsp|<$O!#g z%2}#Hpl z#sM<>*lwYF05owE;70Lk0E)&{k;t`dvQfo9Ac~tjl?noA25%8|n+8!89u}Q{ekH-`kj;3{+NP z)y{}9N!PPZTlA^FBmW>3g~~qkPqH`%Fk@v6x8^Jnx;HT_UNK0sfO-{s=zprrw%o1i z)j{&4jfOB9LfPM^yv4+!l;^&W7{m#0fKw?HCy<;)`j^Sj6-Dc}K6m}^QIu~#JI9?p zVNU*XPUw`$2$_8TygABSD_cm<-dSw5|@cPzwQd9+sv@4`H08 zNIvhLZJ;a;7;;${{Qx-9A*M(jSWxM(EQ$64uP;U%EPGwv1~_N^uy&IS%>lm2ka`bg zi)wD3mIo`aHWJGl!Wv#Ae0>3|tTBw_!-np4`$s(L{Z-e@&(*BRuU74mV(8#mX8Z}i zdX@Rop+(Q3zo6R7O^Q2e*2kSXSFLcDnT>4~w!o2yo%^yN5I?Q?Ww)kCFDNbW zev({KGWZjnN5*+wf^O#0+SJ@`_Iekmg^EM1D)qG`dwXwfMf^P;tf`V=_xX{Dcd7Kd zd%M;B0|LUJgG0cdd>s>4 zq@oWjp5cKkN7hCSAvf^v5X*Dlz<2(*p^hp?QH7_SN4br@G*%V+5=!n>j@(IR4{?5P z7tZ5F=v4l4;R~qh_yjgs}T*9#ZCt3mpd=;PCjnb88RhU7u3$zckfP` zO}-aBREWN8PcrJ(kk$@Z(n1@6S@EcR(qEx2X$B8Bfm42!NEnJ3tS}#JWV1_#x524~$cNKY{w&%$4!BY`;9xqgkR3Qtf~#Zv|2wn( c^#3X=RWs|g}hUg!NVrU27y3$Z)9OAAP~xD;PnL-2JpPZv-A!4hwdQp zMhy%2^TaX^2HrommDP3tfp7>P9w@_e-Z#L9{Ekvuj;b~v9bF9VO+Z$Lj<%LIj+W*| z&z()|9n5X4x!JhbxLBT>IXc=3va|p1IGc^VDSHA- zHwRtgn0WQ{-sQ(s{CsDkW^BA_4wsjmKjKQpl8}@P2@bBQO(S9PCFiB2_^OhP?08K2 zs&7g;k4p{~`Bbe~S5gj&T%(M^f@PHi?+`_kg30v78-u%zKiuMjH?>B+;#K70S?Y=W zf?ZKn{k+BB8q@^;?i=|wq?b?D5J5K{pxC~ zwn1HClQ}Q1Q4PYA4Z|OEBLcnztk&aI$%Y_r?xKR$fe#Fi1l#9=tw~VLJWWydVGPsKBZK zD!k7gF0Trgr-k>4S(;>!!$m8-ULlgos;+?N;O*THgnJg6VWn$9WxZcKo$NO48tgB` zMrSz!nr0S^FOwsTlYhlvOF@x8u-~F)U^jh_E z{N;G}_KUZ3L6f$2BpH++5I;tmW37)C{5__=_4UQRO>(n;T#f0x^!JLu&I5Vo{wGBR zsn!|#%t6${&CRg#y+c*WY_3h^`+S{RE@frqZ0d}kHC~V!30MtpDQ`7K6$A8GfSB&C zcl81Z%iV#N-tLpUI=qfl;5jyL)0Yh5;#qZOp>`LHw-4BMT8PW?^##Sm#9;p_)N2$B z2?Od{i( zNTW1H-qPPc5{!TS*^W2p$s$s2Mq)FyW8=afYb5XU-(*I@^6cYNR6WRWyU=*!}xP- zD#SE7*f==c*^L|ub-eykx#I`@(O-7tpf{1e*Qhj0h2v3#i`jEh1?X`rU(C;TrX<6N zSyQQ`Yn2BtpGM2V<+bLk+@;>Z=BbGT)th6}s^#Gd*F7isl#28DF&(ZIryaVpSJx)< zb1D6YPc2&YbK+FkU_`GuL$K!1W=hNFgm&sp@S`-ENpR*tYJGJ?N=&hFkGYMwH);jH zkW}XqdU1xWnCF&}E8xmOCw~4+aW>o1Ow|5+-;oso09>@RZox zS?hBCX8%SAmk#;wN1A*!XZ7$umCHYpB6|J!6U9bP^R&CYi>$h^ecDzpSv$Yy)WLAS zIe`#{&xC8chD+D4e30)F-Gp_Iy{E6wvIX?wpQAl~(=TUd)FB6zd9XJ!4g(PAZ6ce=a!1IQs>Z3!5=Qx?7EBsX+YwH^%#iPK zqv!dpxe6KZZB`;Jj}#hqzOr`$6LrIf(7nm9j7NJ#hEG$5Vi7_8tHlA_X};aHMpWesjWSI{A?b@kDgDtNAtnO)*EX| z+-m#%Z_4&=(cLeF1njfr5*v0WgSh^F;M?<#h=|CxS!iTQeF8W`m(bbHa41jla_~H&}Rjxc0mEd5OQ? zG*Iz{ecKK?yvo#0{qxcl|7mvI%Fax6)X-0v3V0VjlX^kiabjIm6oJJ=akk6;e8X|S z(69HEp#b<25)&hWXuM@VePU7)IejX2bAV#?M2xfKVpI^q~rowsKlA*dcL9a$%+(l;m<9QVmI_ynF&d~HD2`A z)s-JaD;;jIJH5kv8bs}mqraoc=%#XKN5*#dp%be}a{Q)MdRq+uI@JWb) zfhf6nCc6c%bAeUUao8f{GfVu1X?vG|_x8k1<^0bJx7B@YIo?D!_B-Y+OVa*;b_b_- z+WCZEUEW_Z&uHdky+RD;D$xM`BsetG=zMRkFIAwT#mgpvGf-3Ci+7!rlao{Uu!9I+ zMB4frmX5p$yU*RY!PBn#zortmUHKc}uO$khwS6;o6?u)`{4~_J2|N~cL=g1?7}Xis!b%58U;MR z&4xY;IIIm;S$*hF7fBh3aFCLf#i}qJ_;_)!^xJACp;))R++|BL}4}kdkNqKbWmtW zB$d$7pd`T%Kp&`G7g5|#HkQ6-Ock5wNzq|lkYhbE^2o4*>bMtOj|=e|REG+e$}%awiVEl4 zwJM=tKyg9tZ~oanrD15A@o~%U$7<+g)K957`H4Gs{EC$?%CK|lZ(L_3L!3(Xz&woO zNfP{87?U)v+K-c=m9%2)OyKb(+Gy2rjdfvpq8Jf{$ZMSmxA1&7v2?AY%Be(m-zFjb zrGz5(^1U`iMp(Yu)KhZu_iV)&p?~IK@8(EjK~v2KexD{RSRk3=mAVG$3y2hCN-lQSS5_o} zccHWM^RC|frqU#sddjh=jRY{ z8n6K9q|AyIQVCn_r4nCikzG^-hm<$&m5nJ7MyEl_(Q42xex@D1OqpS-W@NI&{`3Am zc7J+7>AI!xK0lUgsqvO$2R-&6EgJd*#zAIFn^eksEh$S9G97>!qvt{ zFv!w^iP58YIsCjC#cXHftGPmYrqa8n58?65(5?Y+UW}#+@XQ5p!TLH9<~FZOkGD1j zuDSN}M<$A1@>?$uJK6|8W2$!=y>n&|TW(?kLt_yf9~+7=*=NnR z=%k#-uc0oPAuS4cdD9_DY!0}%+~GFJ2TMO8)X3`WEl4S=S zqp;s$_<&|Jr#ZzgBx5((G7D)XgUnm%XZoUB0a)=Wd=D3Lfej7D z_9(Xm!(1rB5i&PNm6xY&((kR^QrGe2S0p}`6a7$=dj_Ne)GeP0H@H>K+v2<2#so=T zMZ4TQ50lTK)R%3-7Z%G9 z`PpNE4Yf{%1csg1N+u}2NHMKi9Is5>|2)i5Zg4guPOMN#dy=hE@LX`>tNlwcC7OBj zgO^GZ4MFP!H$nRYckT*a44XH{8#+z=WiiQr({p`n`52`NC_6v>GB!5(nh-DTt|7Ro zy$Kq{?)GsZ6Yn_0>emsCt)S9i4mW6C^xP$kAq*A-J1Hc$9*(3q7SAOYc&pg(`eDByTUTmuyOiegv$p5b`zdYdakmqr8GZb% z3ujb6-99i!+?=-k=Amk|jpK%z$|@=`Kv_ewPO?(ZEqX1HJ)1oO8SExH5LWJMlDl~Q zn@6{(mdcfn>bv&X4lY(SBi0k!n^!IGg^x_#`TCl9uD;dq3ZLvsMqan#C{G?vAc{;j zswEw&Xe=+E;{>s=90*ZgoxSMKO=mA7wQ=NJEkZL7F)jkY;Nuw1xpUiD-fcDKE-6s*dJMcE+>#N+XPd{3@6p5I=!Q*%$v!#YeS+PADjC7Kj%`MQLx-X*z82pZ8&>C| zSLf<=X}}vO)x~|e-sIRndFLy<&YKdJU~|~fma&CvBC&yWBkYw*k;iP;vV6*3;+gym zQ}f9pmALp95NZS3!TDM9N1^W$cU(R;J~xfGhlfW!mtXW-3sH#)a3Iq~n#515TpJrh z3&^2 zFiPjCU4FEIQ?@F`mZH5VdD}f&QJ4a_pCR?8s9iO2%1I2OU@eida~; z9=vbMXeWx*FB~HeAcuC&>Lvlf2SHnnwR|-c8C3VlS*t=x6p3G+b@Lo#w3B)I2*>h$ z^8hbaq|6llc5&`zv)M|>_iWgNf4Z7j^&=+WV6en3DnMqC$kkR;=z&S$?iBF%BnR(N zQ=dkE167@ONHnd~?23T3a2>1EpPBp2G;xP>8X}TPzkavlFhpNg&H$ea|eTigT-v*wv1Rw{h{o5tpz>RjraY+}~_ejFhW| zc+@|5aLWuCl($E(o-v- zRRNlXl(A4Lnbybf%T4!d=J=Fgj+z9LX2)~-nj_0!F>$JiA5|{?WN!YRzTrt>-?KA{ zEAARt?m8H6KRiFfG!P#_xzIjhXUK}vt&S25n-|?`s$%ToupelibgTW&hQCy{b$(>H zlAE`K)ZZ$L4^64@;-RPg0_g6$_GS#-ZAaG37B%g6D%DXy2seGn$G~LCq)Of#T%y*e zYLVn*55;>GX>`}4?^uUTp&!QX|BYan?mKpNhLwv)B4Y*kM^wGONeMyOujInA~ndb z$3Fr)a`|gB zV{=iM7W%rs_a!idt39~qejtWTueaG6u@vVE{pu;^6tc17Q=djKSpYXQQSJP2@m=9j z6ZUataftzad_{s1=mOb>@y*gZ?mqoytVek*cTS>L52$PO{`62+(r`Yf|GhO~?4H^O zRjSB2>hWWO>Dv~W;yb6#zV4e!O0@!<&Yp#H#=~|+05uWp#cinP^fLAIWn~`}r<)u= z3{?zkdF1WwW|p=teD?YNSc`7N9%PX5{)GJB;j4Tx)8>pTGR)wp9l{wcAI)_imj#vM z%8SIc`kq29h4yC)(RPVdBEN@-=Wic8AxJOe4z980z7!Bn>IVQTR^Y3ps{x#eU4~}K zrc6KDko9(*z?oss_&)hoV1}3=%o!)&Xax3M4eT1qnE6aZYj7&4x%vb#z+Eql!>mdu zwpv8XZC-&S1K>dCK8%uOe^$ba{4}#%38@nCI^GM|2__5zu=IFEDP%Trua%n4;|}(1 z9UpX-jTq##$1S1yCRJCtI)OT9{Q~*YnI0AVm@qm+YSnkQQ4YoGTZpV$@q`rEZAgRf zH7pWYP~Vjf)Ph)@ZiSP^dOjyEEL-#z86OV(bTBV-;{m_9mg5Q3&2=u@?;C?_3A5l@ zzAA-9<@YjrlwcwLfB0Ks7(QhhZf+B9PT+{jhE{uj>gkw0Pg*hC|4?QER2(2Kh?eg{ zM`KiSVcEyyrkARHKC-Ntr!mLQIH%T=DNIe5cf_h&fjbK5Xnq1!0}j5g`OFq@_|3uv zjMnYq?H@m6IGg^auzb4YWAebzRW&U=8Y+9lGjl?>%?=Z~nRKiFLT!2Zy*(;(*1s|2 zdmSeOO3RtvF2-&U%JFer1W_~<D7&MeN_DUr|+8ndgzxJ&xYUUZ`T__fSC6c;y2r3B|1M8!i!?L zKamn&NK-mS8hhN=#JQHm$?%61{zw!}aOQmFCDQYu>QMTJMOy8T&wl%1_{wb6ZIp1m z4>nZWoX;z~!Gd4|upsI)XFS$N(o>>Qs0li`yS7J;IJ$2jul!NET(X#u=ze;4o>R*M zzbubM#~KRO^Lgc!E+RjsWEhQf&UN1HiR7M@ZjTnHS}7flTE8$M@gQo2eUA#J1YJ#5 zfur9;VjM8P2475VkszmhVuE*`MpLy=wb1N_%Rm!{8DEAcvFRTepWcY%%Zx+~Tg^B$ zcph*MhuWDc8%xmXQETS@*&8b*Y4vW!57De;v^#yohYjQ&KSCf7YwPt#INzo5x-hcT zz&Fm;6z$H-=mZ|!HFZCo`zsKHDTiu)W zpcnN%1BdV+0+6f|jA8Li^e$?f;_`{?q!0d}&ObkB^Qk}}AHe|YaH`bnrq{ybOPmS! zhP4bRCVUF$a`8Vv>|$$GuF1$EM#5D$E0@T4mOE;`urn}x$_qL!fWlOr1=Ls>H%Ml` zB(YVvmin&aJLm4?>UNk_(Noz=823^E)V=pjfflOPE9JCN93HVY%w)@spWHJ zy_OYJv^p6xi)hh2W` z<=@Uv(G>h>Y+*&?o(yXq^lR2DrvAS1oBsJ)MwLYV4`7ef$d=YO+a=?-%Wl5RxMqF0 zO+6av*%THP`aD6rzp64Fk(>LDiTyzwXVZN8jg^7LM=@ud7bwr{d++O^k$15ZrM!Eo zL_bwcqJhcx=FOz2!#l%7HfOfBb_dH$*|=9n@H{V$y}8PNDTXV?(?7s$`)4M1ZZDXO zDCsc%J@(W<&_`{&SRa8F|B(rY1GVy4S~U~D2Vwl+rB+3!iv=8!4a#4ie;!a4?_W6+TD-WCy z64f-yOnaa}6UQVYEE2$3&1=*%xyMtqm!W!h-K08uyFYgGG;OhCBd+kDtkH4}`h>{s z{@6K+)ws0!)Yhbus-vT}UAk?n943;7{ZJJpR+=XrjJX$``tr?BQ~yoBCnzm z*$2chmobBbyPtr8y0QkihwrCuv9p(yaYk@QaQB4{@-^hBBABwYQL~JZI$O=V`c-kS z68qU|lXInguhD?cn&0Mj@|g#&wg#1~GmvKk!_dyr3UMr+L(*H+zS9g6lCnWqt;SaT z^usw7eDy771CzTv-u9%|k8(UU6$r|lh8E2f!#|m^hvUc_Xy~#UrK)D-8yLs`M zjgtj)A}F~KS!g)EepPjTEtE6s0xi!ymX+mn7Z&lIwC+3!1V;-~RjZZ;$*%4^BJkg{>#$d}$+!AV{9sGlv%n1HUi&Wtf}#Oe9e z+$;yM3rye;wng3p>1(~qP}JVgIVccuNzqBbAc|>%>a%n4Dz#d|A{QgNf3-O3C@Sso z=mr)jyL^?#3B7hc1FDt18yM0;Ix<5#Qs+An1EHp+&P%bV$G4q5yUYSIm!*x2dW?}| zh$If6!YC^%3nnOvt4r_4`~09en+sJR6{j*)6G?@ws4|K~1Jp5N<|ND=@vKn311B!-dZ`m^;51I`04wDfh0T5AN@)@iK_uEmfA8bqnZ&!rXA?Rve2HVopKst%xAE_ z`_o^Fj(P)wg(&)2)zN!MIb{oJ?Bj4W4UmVgO*m)0r9LNkgBF76D_Uihtp+6m2L_Ir zOdX4uePHCs_5ABMa&qg6SLnRm#)nLf>+H#EYipB-!8-o#HW;9c=Gm<{%hmoMVl8?5>a83(4;36VTR=ub3nJrvCh5A6GR@9q>-jEJqA=?4PDpW zZw_=^zD;0tL+|xZ9`9XhO~|ql0NgV>G|P_Hr-_E5Ke+hRzBe*W$#5f=;^O2Ue~TN_ zBndEVwdhMNVK>uv6gl^qv?!vQj3p@-&5go>9yqzNBdL^`bz~27?Hn&r`0E)vQ8e!p z>P=H(sM}}GD4k;+2nZNe$ft-Cahpq;AxFlg$;rVx`V>4%jcAg!fe=48RFcR~Wh+Np zScG(;M8JV&UtZnE1{CfGZSLf-L`X+wOgQ29J|HBt{?wAZ?TEzv$vi)QF3WPaz?D}+ zV0^tIKPQ*^(}y|WE3>u))ke824Y=^Nk5mn|eu=}C_95#D$gY?D(`RoVP{8r;vX#vj z;f+5z^`rLO{|aJOOmx}b|30M@_38;3%5O6Rx`qUFw9KCT(cfs*Wi3%uD%-x0!jRW% zKc9&d0B-dJm`gsP^3*`eefUnt%z0(o4EMF>-|Q0>y&J($O_E(YUdj4U9Uw}{Rto`x zrRT_dm&>Y$OFwm{9$lua)c8!h8&wu|(?8rOzDA=GRr^ZEWzR~JIoHyqO$x)aJOL?0 zluDZXu;zS~W&PH$p7!bE{_o=gx>7yn$-+W5h4bpG#t$pWmWGiIRf>kCH^#fa_7*?_ zOW`^h!J`!MmikRp^T2oOm8%4dy9qKJ($&#rqP3`DIf0Td}Jq^x? zjN|HG6xPFX5npFc-q_qV>4Uu^5#tRVscay&Rp~W{1$5Q(Ev9hJ<>^lG<$5BvBym&9 zq62UQHI>av{||6JX3kR31z#$_&L*duz7|@44yGiEemS#E{Qy?+3RK(bOI_=A4yMPS z1Wcl3`t1g~EH1qCe-P0+5d0T4OGX%oTzg1IP&cr{pG7CsZixXUrRv6n8L}vqg75;B zp_Bod$8gW)H35fb4?qvEsNVQJPTyAyGYFpo`hr~iUp+=76;%zqX`%jJCDNrX7q3K3 z-3I7hnSrBbfo1_nCvDsv&_Fspc_;e-q-uU7I9T@OAj)K1p=)aJ&XZ_%SXQso85Ju8 z3?a1J8qFt+RD&Yrs{=5~b}p$;%v5-DEmtxtX1U#1w+Xhe%_5!KVb39jFggJ3T9zqg zVK;vJz9bQxBvzdxe$wI|&rvQk4X-KSA4%bDK$_>pix-^&zf}rw3%2zArlOqIl)Sz{ zrbMJt6&2wf>nTZh*RR7l`|(OC59^fC;PN&e1P};ud2EX?yzht3f)|%&%78D;u1JDP z!Og+Rll1+u0L9b7gSO9BfPk(~i;Wp)<*a*@G`LnW^fX}=?JUP~4HmL6^rXi-oCwdP z+~SYLe_M?SM1l4P-Zl!&2cW|$^r<{|MefDorj|!GGP3EJDycs`n->+-f-U=5w{U^A z4Vg>mA)0$2Y)olX7h>C#4La}?6e8p+@r3SvxoZwHYSi)-mXgQc0ZS(oT#F9s| z+(B;fSVNk_{&- zkQM+$E5KX}OeG&sxZrL|iS`4Y{LO+M!t+^A=O`|t%*NFNLiToqRD?}4>B7#SB!0VY|XgHu`*ar3EpZE}wTx!TDScxy_F^QudLkDuh1xREpBFGh%SHz;gstZ;hS3Sma;tSJuCiT z?M0(_NARJFYOe3QW7-FEUjO-Y_rlHNu;&2(Q6zFgkVO~>(tr3}`;AGNc?5ChG;%Vyw2>0r7=@do z-Wbhj$Uzeq*LOSPmZ(TGEM^xwI@JPiOhv>j#r9?wDZBrRDyChUxaez>q5~)xQ-H?H z349CYSgVrmbN|JSBB}=hsH>ax-78V8GJ?X&osuw}_i%I!Ehr=!!X>Eb<^-2V1@aE> zp`AYgKWYDAq{&`D za30Rt7{OVDNfz1?vPHjV4YrQw224K9+3X;_`7MDY)`L`)bbH08mpK)({5n!X05x21HyVc)zri zg9r?^TM2xmT?+a%T4M*)@Pn5%3DsKv z#GX@|{h_%1@Vtsleq|v0pyl`J&4Twt5*tv31SD{PmwKr2E^neaZWrqg}r_YHgRsIU3oq`Ric~YS2&Gg@g~_TBT^9IQ7e^ zOqiGNvoWKBY0<+T$!S;0iF%6EQQW@Q_aeNUXbchN_Y&#q&y8~ze!$<}$DWNM$yc^A z>9vi@|D#mpk-IVjiJw^hjlU5V4$!=MWjgF{Rp$C}LB&x}AR_3arNL!?z;M{l(a0>o zq{RV+I6@NX=IxlGluy9Co#!=jfHWD?h{^+jf|3kY8ghhX;N`w9=8ay^FN;bf*?TTh zVLb8b-#M}Ucs&-%;(ex3_X@WcdTnhXO#9J#c{clmP^kC;1?^wN-!>#)yOIPt)(Nt9 zuC<$z0g*?LB7I^v=f6`7J3Kow0OseGZF8JjKFOU3jEig&q&r_6J|JKm4j~v=9XKO$ zBRGowTJsd3oYcv+$r(SC_)oO{E%M8$m2Rv}`kr*9FE$AM+GC{HdJ*r8iTdFLkjvBK z`F-c`_D!{B>f)-8I?}l1#TYRuB04{|28}kWRX_2&)Uo#fy#G#oa3j)-^ z!`|dI8fFDEP?b6pFZ;axh>{1v?}KWc9j79`83o2gTU&=xFhYc2t2p3%l|e-igzG&F z0;5|Vg-&RV$w0Gv{V5nw!P@kYp+^lE#OvaaWxQETmOgc1Dl?e#gfi+uN!uA8qK^X+ zKn8DLS%7gVwQstT?L8x`bP!$# zD|`lz18pdvedXt8L#+@(0!OrjkZ$Y`ZmeMK^ujcnK}@Z30m)kx zxn~)12%U*Y21qVQv++2OY4M^*oKj|`A_`$j6EWa@)}ggP8f){lQl0@-lK}!oB%#t2 zJ3J!K@Zu4@HuF4V4k2|4ef)oaJz(2F){no4@t@(Li=FiYQm1f0?PpW<9!@^xpAB0B zB^I<0*SJfT@ zr^-H&KWHLkfWAL7_#(LbBY4U>Y~SibZDDG2+pWSzh8GFhsAALT(M{1(z=m*7B`v!7(l|T*h86DZRK_MqS^>2450A!BFEu z;Jys;X$N|LBgxyVi}D@z^A3zuNgG1V}dW{1GMcj z&ytQr??9`&rt3u24xhS3gbqXg+kzF=AIVsPy6lkbU>4p31P_>7pfsth$_gW>?2E(N zj!U9w6!9ON4CPr-*&!`{|8b7SC4Xk8YQfJovWjdjxQrQ+ z9~KT>9yoaXl!NXXCGpdY!ZgVb^6P#JJ$pVb$;U2IdlxzzH($`srx4U6AeYc?&A67! z5!m8$h|16_gP>qF^u0FT2~92R@NzHeM=W+mESJGJMaqU0@~Qt}=7qiV{f35zwY>sQ zqo08DEw6WQPB6}v1=mYjfCSVH8C;JSG0KSuh-vKGFF_=MAH>%OQUX7zi1B&`nqqFg zogh6XUfIj}F_uv?b-4PRP=0w~mz&_hW9BXQM>H{jm&Ihig za-DLX_}V^@@ee;8rg;IBey{=+xmtmLn6~y082{Hi{&(PxhC8|a1g3GH1pL?t^hQb% KRxDxg`Tqgm9wiU} literal 0 HcmV?d00001 diff --git a/doc/src/LectureNotes/_build/jupyter_execute/chapter11.ipynb b/doc/src/LectureNotes/_build/jupyter_execute/chapter11.ipynb new file mode 100644 index 000000000..bbc30b5cd --- /dev/null +++ b/doc/src/LectureNotes/_build/jupyter_execute/chapter11.ipynb @@ -0,0 +1,1055 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "# Data Analysis and Machine Learning: \n", + "\n", + " \n", + "**Christian Forssén**, Department of Physics, Chalmers University of Technology, Sweden \n", + "\n", + " **Morten Hjorth-Jensen**, Department of Physics, University of Oslo and Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University\n", + "\n", + "Date: **Dec 23, 2020**\n", + "\n", + "Copyright 1999-2020, Morten Hjorth-Jensen. Released under CC Attribution-NonCommercial 4.0 license\n", + "\n", + "\n", + "\n", + "\n", + "# Elements of Bayesian theory and Bayesian Neural Networks\n", + "\n", + "\n", + "## Why Bayesian Statistics?\n", + "\n", + "We have already made ourselves familiar with elements of a statistical\n", + "data analysis via quantities like the bias-variance tradeoff as well\n", + "as some central distribution functions such as the Normal\n", + "distribution, the binomial distribution and other probability\n", + "distribution functions. \n", + "\n", + "In essentially all the Machine Learning algorithms we have studied,\n", + "our focus has been on a so-called **frequentist approach**, where\n", + "knowledge of an underlying likelihood function has not been\n", + "emphasized. Our data, whether we had a classification or a regression\n", + "problem, have been our central points of departure.\n", + "\n", + "Here we wish to merge this approach with the derivation of a\n", + "likelihood function which can be used to make prediction on how our\n", + "system under study evolves. We will venture into the realm of what is\n", + "called Bayesian Neural Networks. To get an overarching view on what\n", + "this entails, the following figure conveys the essential differences\n", + "between a standard Neural network that we have met earlier and a\n", + "Bayesian Neural Network. In order to get there, we need to present\n", + "some of the basic elements of Bayesian statistics, starting with the\n", + "product rule and Bayes' theorem.\n", + "\n", + "\n", + "\n", + "\n", + "## Inference\n", + "Inference:\n", + " : \n", + " \"the act of passing from one proposition, statement or judgment considered as true to another whose truth is believed to follow from that of the former\" (Webster) \n", + " Do premises $A, B, \\ldots \\to$ hypothesis, $H$? \n", + "\n", + "Deductive inference:\n", + " : \n", + " Premises allow definite determination of truth/falsity of H (syllogisms, symbolic logic, Boolean algebra) \n", + " $B(H|A,B,...) = 0$ or $1$\n", + "\n", + "Inductive inference:\n", + " : \n", + " Premises bear on truth/falsity of H, but don’t allow its definite determination (weak syllogisms, analogies)\n", + " $A, B, C, D$ share properties $x, y, z$; $E$ has properties $x, y$\n", + " $\\to$ $E$ probably has property $z$.\n", + "\n", + "\n", + "\n", + "\n", + "## Statistical Inference\n", + "* Quantify the strength of inductive inferences from facts, in the form of data ($D$), and other premises, e.g. models, to hypotheses about the phenomena producing the data.\n", + "\n", + "* Quantify via probabilities, or averages calculated using probabilities. Frequentists ($\\mathcal{F}$) and Bayesians ($\\mathcal{B}$) use probabilities very differently for this.\n", + "\n", + "* To the pioneers such as Bernoulli, Bayes and Laplace, a probability represented a *degree-of-belief* or plausability: how much they thought that something as true based on the evidence at hand. This is the Bayesian approach.\n", + "\n", + "* To the 19th century scholars, this seemed too vague and subjective. They redefined probability as the *long run relative frequency* with which an event occurred, given (infinitely) many repeated (experimental) trials.\n", + "\n", + "\n", + "\n", + "\n", + "## Some history\n", + "Adapted from D.S. Sivia[^Sivia]:\n", + "\n", + "[^Sivia]: Sivia, Devinderjit, and John Skilling. Data Analysis : A Bayesian Tutorial, OUP Oxford, 2006\n", + "\n", + "> Although the frequency definition appears to be more objective, its range of validity is also far more limited. For example, Laplace used (his) probability theory to estimate the mass of Saturn, given orbital data that were available to him from various astronomical observatories. In essence, he computed the posterior pdf for the mass M , given the data and all the relevant background information I (such as a knowledge of the laws of classical mechanics): prob(M|{data},I); this is shown schematically in the figure [Fig. 1.2].\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "

    \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "> To Laplace, the (shaded) area under the posterior pdf curve between $m_1$ and $m_2$ was a measure of how much he believed that the mass of Saturn lay in the range $m_1 \\le M \\le m_2$. As such, the position of the maximum of the posterior pdf represents a best estimate of the mass; its width, or spread, about this optimal value gives an indication of the uncertainty in the estimate. Laplace stated that: ‘ . . . it is a bet of 11,000 to 1 that the error of this result is not 1/100th of its value.’ He would have won the bet, as another 150 years’ accumulation of data has changed the estimate by only 0.63%!\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "> According to the frequency definition, however, we are not permitted to use probability theory to tackle this problem. This is because the mass of Saturn is a constant and not a random variable; therefore, it has no frequency distribution and so probability theory cannot be used.\n", + "> \n", + "> If the pdf [of Fig. 1.2] had to be interpreted in terms of the frequency definition, we would have to imagine a large ensemble of universes in which everything remains constant apart from the mass of Saturn.\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "> As this scenario appears quite far-fetched, we might be inclined to think of [Fig. 1.2] in terms of the distribution of the measurements of the mass in many repetitions of the experiment. Although we are at liberty to think about a problem in any way that facilitates its solution, or our understanding of it, having to seek a frequency interpretation for every data analysis problem seems rather perverse.\n", + "> For example, what do we mean by the ‘measurement of the mass’ when the data consist of orbital periods? Besides, why should we have to think about many repetitions of an experiment that never happened? What we really want to do is to make the best inference of the mass given the (few) data that we actually have; this is precisely the Bayes and Laplace view of probability.\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "> Faced with the realization that the frequency definition of probability theory did not permit most real-life scientific problems to be addressed, a new subject was invented — statistics! To estimate the mass of Saturn, for example, one has to relate the mass to the data through some function called the statistic; since the data are subject to ‘random’ noise, the statistic becomes the random variable to which the rules of probability the- ory can be applied. But now the question arises: How should we choose the statistic? The frequentist approach does not yield a natural way of doing this and has, therefore, led to the development of several alternative schools of orthodox or conventional statis- tics. The masters, such as Fisher, Neyman and Pearson, provided a variety of different principles, which has merely resulted in a plethora of tests and procedures without any clear underlying rationale. This lack of unifying principles is, perhaps, at the heart of the shortcomings of the cook-book approach to statistics that students are often taught even today.\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "## The Bayesian recipe\n", + "Assess hypotheses by calculating their probabilities $p(H_i | \\ldots)$ conditional on known and/or presumed information using the rules of probability theory.\n", + "\n", + "\n", + "Probability Theory Axioms:\n", + "Product (AND) rule :\n", + " : \n", + " $p(A, B | I) = p(A|I) p(B|A, I) = p(B|I)p(A|B,I)$\n", + " Should read $p(A,B|I)$ as the probability for propositions $A$ AND $B$ being true given that $I$ is true.\n", + "\n", + "Sum (OR) rule:\n", + " : \n", + " $p(A + B | I) = p(A | I) + p(B | I) - p(A, B | I)$\n", + " $p(A+B|I)$ is the probability that proposition $A$ OR $B$ is true given that $I$ is true.\n", + "\n", + "Normalization:\n", + " : \n", + " $p(A|I) + p(\\bar{A}|I) = 1$\n", + " $\\bar{A}$ denotes the proposition that $A$ is false.\n", + "\n", + "\n", + "\n", + "\n", + "## Bayes' theorem\n", + "Bayes' theorem follows directly from the product rule" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "$$\n", + "p(A|B,I) = \\frac{p(B|A,I) p(A|I)}{p(B|I)}.\n", + "$$\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The importance of this property to data analysis becomes apparent if we replace $A$ and $B$ by hypothesis($H$) and data($D$):" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "p(H|D,I) = \\frac{p(D|H,I) p(H|I)}{p(D|I)}.\n", + "\\label{eq:bayes} \\tag{1}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The power of Bayes’ theorem lies in the fact that it relates the quantity of interest, the probability that the hypothesis is true given the data, to the term we have a better chance of being able to assign, the probability that we would have observed the measured data if the hypothesis was true.\n", + "\n", + "\n", + "\n", + "\n", + "The various terms in Bayes’ theorem have formal names. \n", + "* The quantity on the far right, $p(H|I)$, is called the *prior* probability; it represents our state of knowledge (or ignorance) about the truth of the hypothesis before we have analysed the current data. \n", + "\n", + "* This is modified by the experimental measurements through $p(D|H,I)$, the *likelihood* function, \n", + "\n", + "* The denominator $p(D|I)$ is called the *evidence*. It does not depend on the hypothesis and can be regarded as a normalization constant.\n", + "\n", + "* Together, these yield the *posterior* probability, $p(H|D, I )$, representing our state of knowledge about the truth of the hypothesis in the light of the data. \n", + "\n", + "In a sense, Bayes’ theorem encapsulates the process of learning.\n", + "\n", + "\n", + "\n", + "\n", + "## The friends of Bayes' theorem\n", + "Normalization:\n", + " : \n", + " $\\sum_i p(H_i|\\ldots) = 1$.\n", + "\n", + "Marginalization:\n", + " : \n", + " $\\sum_i p(A,H_i|I) = \\sum_i p(H_i|A,I) p(A|I) = p(A|I)$.\n", + "\n", + "Marginalization (continuum limit):\n", + " : \n", + " $\\int dx p(A,H(x)|I) = p(A|I)$.\n", + "\n", + "In the above, $H_i$ is an exclusive and exhaustive list of hypotheses. For example,let’s imagine that there are five candidates in a presidential election; then $H_1$ could be the proposition that the first candidate will win, and so on. The probability that $A$ is true, for example that unemployment will be lower in a year’s time (given all relevant information $I$, but irrespective of whoever becomes president) is then given by $\\sum_i p(A,H_i|I)$.\n", + "\n", + "In the continuum limit of propositions we must understand $p(\\ldots)$ as a pdf (probability density function).\n", + "\n", + "Marginalization is a very powerful device in data analysis because it enables us to deal with nuisance parameters; that is, quantities which necessarily enter the analysis but are of no intrinsic interest. The unwanted background signal present in many experimental measurements are examples of nuisance parameters.\n", + "\n", + "\n", + "\n", + "\n", + "## Inference With Parametric Models\n", + "Inductive inference with parametric models is a very important tool in the natural sciences.\n", + "* Consider $N$ different models $M_i$ ($i = 1, \\ldots, N$), each with parameters $\\boldsymbol{\\alpha}_i$. Each of them implies a sampling distribution (conditional predictive distribution for possible data)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "$$\n", + "p(D|\\boldsymbol{\\alpha}_i, M_i)\n", + "$$\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "* The $\\boldsymbol{\\alpha}_i$ dependence when we fix attention on the actual, observed data ($D_\\mathrm{obs}$) is the likelihood function:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "$$\n", + "\\mathcal{L}_i (\\boldsymbol{\\alpha}_i) \\equiv p(D_\\mathrm{obs}|\\boldsymbol{\\alpha}_i, M_i)\n", + "$$\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "* We may be uncertain about $i$ (model uncertainty),\n", + "\n", + "* or uncertain about $\\boldsymbol{\\alpha}_i$ (parameter uncertainty).\n", + "\n", + "\n", + "\n", + "\n", + "Parameter Estimation:\n", + " : \n", + " Premise = choice of model (pick specific $i$)\n", + " $\\Rightarrow$ What can we say about $\\boldsymbol{\\alpha}_i$?\n", + "\n", + "Model comparison:\n", + " : \n", + " Premise = $\\{M_i\\}$\n", + " $\\Rightarrow$ What can we say about $i$?\n", + "\n", + "Model adequacy:\n", + " : \n", + " Premise = $M_1$\n", + " $\\Rightarrow$ Is $M_1$ adequate?\n", + "\n", + "Hybrid Uncertainty:\n", + " : \n", + " Models share some common params: $\\boldsymbol{\\alpha}_1 = \\{ \\boldsymbol{\\varphi}, \\boldsymbol{\\eta}_i\\}$\n", + " $\\Rightarrow$ What can we say about $\\boldsymbol{\\varphi}$? (Systematic error is an example)\n", + "\n", + "\n", + "\n", + "\n", + "## Illustrative examples with python code\n", + "* Is this a fair coin? (analytical)\n", + "\n", + "* Flux from a star (single parameter, MCMC)\n", + "\n", + "* The lighthouse problem (two parameters, MCMC)\n", + "\n", + "* Linear fit with outliers (nuisance parameters)\n", + "\n", + "* ...\n", + "\n", + "\n", + "\n", + "\n", + "## Example: Is this a fair coin?\n", + "Let us begin with the analysis of data from a simple coin-tossing experiment. \n", + "Given that we had observed 6 heads in 8 flips, would you think it was a fair coin? By fair, we mean that we would be prepared to lay an even 1 : 1 bet on the outcome of a flip being a head or a tail. If we decide that the coin was fair, the question which follows naturally is how sure are we that this was so; if it was not fair, how unfair do we think it was? Furthermore, if we were to continue collecting data for this particular coin, observing the outcomes of additional flips, how would we update our belief on the fairness of the coin?\n", + "\n", + "A sensible way of formulating this problem is to consider a large number of hypotheses about the range in which the bias-weighting of the coin might lie. If we denote the bias-weighting by $H$, then $H = 0$ and $H = 1$ can represent a coin which produces a tail or a head on every flip, respectively. There is a continuum of possibilities for the value of H between these limits, with $H = 0.5$ indicating a fair coin. Our state of knowledge about the fairness, or the degree of unfairness, of the coin is then completely summarized by specifying how much we believe these various propositions to be true. \n", + "\n", + "Let us perform a computer simulation of a coin-tossing experiment. This provides the data that we will be analysing." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "0\n", + " \n", + "<\n", + "<\n", + "<\n", + "!\n", + "!\n", + "C\n", + "O\n", + "D\n", + "E\n", + "_\n", + "B\n", + "L\n", + "O\n", + "C\n", + "K\n", + " \n", + " \n", + "p\n", + "y\n", + "c\n", + "o\n", + "d" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'np' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrandom\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mseed\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m999\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m# for reproducibility\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0ma\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m0.6\u001b[0m \u001b[0;31m# biased coin\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0mflips\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrandom\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrand\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m**\u001b[0m\u001b[0;36m12\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m# simulates 4096 coin flips\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0mheads\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mflips\u001b[0m\u001b[0;34m<\u001b[0m\u001b[0ma\u001b[0m \u001b[0;31m# boolean array, heads[i]=True if flip i is heads\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mNameError\u001b[0m: name 'np' is not defined" + ] + } + ], + "source": [ + "np.random.seed(999) # for reproducibility\n", + "a=0.6 # biased coin\n", + "flips=np.random.rand(2**12) # simulates 4096 coin flips\n", + "heads=flips
    \n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\int_0^1 p(H|D,I) dH = 1.\n", + "\\label{eq:coin_posterior_norm} \\tag{2}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The prior pdf, $p(H|I)$, represents what we know about the coin given only the information $I$ that we are dealing with a ‘strange coin’. We could keep a very open mind about the nature of the coin; a simple probability assignment which reflects this is a uniform, or flat, prior" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "p(H|I) = \\left\\{ \\begin{array}{ll}\n", + "1 & 0 \\le H \\le 1, \\\\\n", + "0 & \\mathrm{otherwise}.\n", + "\\end{array} \\right.\n", + "\\label{eq:coin_prior_uniform} \\tag{3}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We will get back later to the choice of prior and its effect on the analysis.\n", + "\n", + "This prior state of knowledge, or ignorance, is modified by the data through the likelihood function $p(D|H,I)$. It is a measure of the chance that we would have obtained the data that we actually observed, if the value of the bias-weighting was given (as known). If, in the conditioning information $I$, we assume that the flips of the coin were independent events, so that the outcome of one did not influence that of another, then the probability of obtaining the data `R heads in N tosses' is given by the binomial distribution (we leave a formal definition of this to a statistics textbook)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "p(D|H,I) \\propto H^R (1-H)^{N-R}.\n", + "\\label{_auto1} \\tag{4}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "It seems reasonable because $H$ is the chance of obtaining a head on any flip, and there were $R$ of them, and $1-H$ is the corresponding probability for a tail, of which there were $N-R$. We note that this binomial distribution also contains a normalization factor, but we will ignore it since it does not depend explicitly on $H$, the quantity of interest. It will be absorbed by the normalization condition ([2](#eq:coin_posterior_norm)).\n", + "\n", + "We perform the setup of this Bayesian framework on the computer." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def prior(H):\n", + " p=np.zeros_like(H)\n", + " p[(0<=x)&(x<=1)]=1 # allowed range: 0<=H<=1\n", + " return p # uniform prior\n", + "def likelihood(H,data):\n", + " N = len(data)\n", + " no_of_heads = sum(data)\n", + " no_of_tails = N - no_of_heads\n", + " return H**no_of_heads * (1-H)**no_of_tails\n", + "def posterior(H,data):\n", + " p=prior(H)*likelihood(H,data)\n", + " norm=np.trapz(p,H)\n", + " return p/norm" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The next step is to confront this setup with the simulated data. To get a feel for the result, it is instructive to see how the posterior pdf evolves as we obtain more and more data pertaining to the coin. The results of such an analyses is shown in Fig. [fig:coinflipping](#fig:coinflipping)." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "x=np.linspace(0,1,100)\n", + "fig, axs = plt.subplots(nrows=4,ncols=3,sharex=True,sharey='row')\n", + "axs_vec=np.reshape(axs,-1)\n", + "axs_vec[0].plot(x,prior(x))\n", + "for ndouble in range(11):\n", + " ax=axs_vec[1+ndouble]\n", + " ax.plot(x,posterior(x,heads[:2**ndouble]))\n", + " ax.text(0.1, 0.8, '$N={0}$'.format(2**ndouble), transform=ax.transAxes)\n", + "for row in range(4): axs[row,0].set_ylabel('$p(H|D_\\mathrm{obs},I)$')\n", + "for col in range(3): axs[-1,col].set_xlabel('$H$')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "
    \n", + "\n", + "

    The evolution of the posterior pdf for the bias-weighting of a coin, as the number of data available increases. The figure on the top left-hand corner of each panel shows the number of data included in the analysis.

    \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "The panel in the top left-hand corner shows the posterior pdf for $H$ given no data, i.e., it is the same as the prior pdf of Eq. ([3](#eq:coin_prior_uniform)). It indicates that we have no more reason to believe that the coin is fair than we have to think that it is double-headed, double-tailed, or of any other intermediate bias-weighting.\n", + "\n", + "The first flip is obviously tails. At this point we have no evidence that the coin has a side with heads, as indicated by the pdf going to zero as $H \\to 1$. The second flip is obviously heads and we have now excluded both extreme options $H=0$ (double-tailed) and $H=1$ (double-headed). We can note that the posterior at this point has the simple form $p(H|D,I) = H(1-H)$ for $0 \\le H \\le 1$.\n", + "\n", + "The remainder of Fig. [fig:coinflipping](#fig:coinflipping) shows how the posterior pdf evolves as the number of data analysed becomes larger and larger. We see that the position of the maximum moves around, but that the amount by which it does so decreases with the increasing number of observations. The width of the posterior pdf also becomes narrower with more data, indicating that we are becoming increasingly confident in our estimate of the bias-weighting. For the coin in this example, the best estimate of $H$ eventually converges to 0.6, which, of course, was the value chosen to simulate the flips.\n", + "\n", + "\n", + "## A few words on different priors\n", + "* uniform\n", + "\n", + "* Gaussian\n", + "\n", + "* Jeffrey's prior\n", + "\n", + "Repeat the coin flipping experiment with other priors.\n", + "\n", + "\n", + "## Bayesian parameter estimation (single parameter)\n", + "We will now consider the very important task of model parameter estimation using statistical inference. \n", + "[CF 1: maybe stress that model parameters are not random variables, and the meaning of parameter estimation is therefore very different between frequentist and bayesian approaches.]\n", + "\n", + "Throughout this section we will consider a specific example that involves a model with a single parameter: \"Measured flux from a star\".\n", + "\n", + "\n", + "\n", + "\n", + "### Example: Measured flux from a star\n", + "\n", + "Adapted from the blog [Pythonic Perambulations](http://jakevdp.github.io) by Jake VanderPlas.\n", + "\n", + "Imagine that we point our telescope to the sky, and observe the light coming from a single star. For the time being, we'll assume that the star's true flux is constant with time, i.e. that is it has a fixed value $F_\\mathrm{true}$ (we'll also ignore effects like sky noise and other sources of systematic error). We'll assume that we perform a series of $N$ measurements with our telescope, where the ith measurement reports the observed photon flux $F_i$ and error $e_i$[^errors].\n", + "The question is, given this set of measurements $D = \\{F_i, e_i\\}$, what is our best estimate of the true flux $F_\\mathrm{true}$?\n", + "\n", + "[^errors]: We'll make the reasonable assumption that errors are Gaussian. In a Frequentist perspective, $e_i$ is the standard deviation of the results of a single measurement event in the limit of repetitions of *that event*. In the Bayesian perspective, $e_i$ is the standard deviation of the (Gaussian) probability distribution describing our knowledge of that particular measurement given its observed value.\n", + "\n", + "Because the measurements are number counts, a Poisson distribution is a good approximation to the measurement process:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "np.random.seed(1) # for repeatability\n", + "F_true = 1000 # true flux, say number of photons measured in 1 second\n", + "N = 50 # number of measurements\n", + "F = stats.poisson(F_true).rvs(N)\n", + " # N measurements of the flux\n", + "e = np.sqrt(F) # errors on Poisson counts estimated via square root" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now let's make a simple visualization of the \"observed\" data, see Fig. [fig:flux](#fig:flux)." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "fig, ax = plt.subplots()\n", + "ax.errorbar(F, np.arange(N), xerr=e, fmt='ok', ecolor='gray', alpha=0.5)\n", + "ax.vlines([F_true], 0, N, linewidth=5, alpha=0.2)\n", + "ax.set_xlabel(\"Flux\");ax.set_ylabel(\"measurement number\");" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "
    \n", + "\n", + "

    Single photon counts (flux measurements).

    \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "These measurements each have a different error $e_i$ which is estimated from Poisson statistics using the standard square-root rule. In this toy example we already know the true flux $F_\\mathrm{true}$, but the question is this: given our measurements and errors, what is our best estimate of the true flux?\n", + "\n", + "Let's take a look at the frequentist and Bayesian approaches to solving this.\n", + "\n", + "### Simple Photon Counts: Frequentist Approach\n", + "\n", + "We'll start with the classical frequentist maximum likelihood approach. Given a single observation $D_i = (F_i, e_i)$, we can compute the probability distribution of the measurement given the true flux Ftrue given our assumption of Gaussian errors" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "p(D_i | F_\\mathrm{true}, I) = \\frac{1}{\\sqrt{2\\pi e_i^2}} \\exp \\left( \\frac{-(F_i-F_\\mathrm{true})^2}{2e_i^2} \\right).\n", + "\\label{_auto2} \\tag{5}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This should be read \"the probability of $D_i$ given $F_\\mathrm{true}$\n", + "equals ...\". You should recognize this as a normal distribution with mean $F_\\mathrm{true}$ and standard deviation $e_i$.\n", + "\n", + "We construct the *likelihood function* by computing the product of the probabilities for each data point" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\mathcal{L}(D | F_\\mathrm{true}, I) = \\prod_{i=1}^N p(D_i | F_\\mathrm{true}, I),\n", + "\\label{_auto3} \\tag{6}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "here $D = \\{D_i\\}$ represents the entire set of measurements. Because the value of the likelihood can become very small, it is often more convenient to instead compute the log-likelihood. Combining the previous two equations and computing the log, we have" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\log\\mathcal{L} = -\\frac{1}{2} \\sum_{i=1}^N \\left[ \\log(2\\pi e_i^2) + \\frac{(F_i-F_\\mathrm{true})^2}{e_i^2} \\right].\n", + "\\label{_auto4} \\tag{7}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "What we'd like to do is determine $F_\\mathrm{true}$ such that the likelihood is maximized. For this simple problem, the maximization can be computed analytically (i.e. by setting $d\\log\\mathcal{L}/d F_\\mathrm{true} = 0$). This results in the following observed estimate of $F_\\mathrm{true}$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "F_\\mathrm{est} = \\sum_{i=1}^N w_i F_i; \\quad w_i = 1/e_i^2.\n", + "\\label{_auto5} \\tag{8}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Notice that in the special case of all errors $e_i$ being equal, this reduces to" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "F_\\mathrm{est} = \\frac{1}{N} \\sum_{i=1} F_i.\n", + "\\label{_auto6} \\tag{9}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "That is, in agreement with intuition, $F_\\mathrm{est}$ is simply the mean of the observed data when errors are equal.\n", + "\n", + "We can go further and ask what the error of our estimate is. In the frequentist approach, this can be accomplished by fitting a Gaussian approximation to the likelihood curve at maximum; in this simple case this can also be solved analytically (the sum of Gaussians is also a Gaussian). It can be shown that the standard deviation of this Gaussian approximation is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\sigma_\\mathrm{est} = \\sum_{i=1}^N w_i.\n", + "\\label{_auto7} \\tag{10}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "These results are fairly simple calculations; let's evaluate them for our toy dataset:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "w=1./e**2\n", + "print(\"\"\"\n", + "F_true = {0}\n", + "F_est = {1:.0f} +/- {2:.0f} (based on {3} measurements) \"\"\"\\\n", + " .format(F_true, (w * F).sum() / w.sum(), w.sum() ** -0.5, N))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`F_true = 1000` \n", + "`F_est = 998 +/- 4 (based on 50 measurements)` \n", + "\n", + "We find that for 50 measurements of the flux, our estimate has an error of about 0.4% and is consistent with the input value.\n", + "\n", + "\n", + "### Simple Photon Counts: Bayesian Approach\n", + "\n", + "The Bayesian approach, as you might expect, begins and ends with probabilities. Our hypothesis is that the star has a constant flux $F_\\mathrm{true}$. It recognizes that what we fundamentally want to compute is our knowledge of the parameters in question given the data and other information (such as our knowledge of uncertainties for the observed values), i.e. in this case, $p(F_\\mathrm{true} | D,I)$.\n", + "Note that this formulation of the problem is fundamentally contrary to the frequentist philosophy, which says that probabilities have no meaning for model parameters like $F_\\mathrm{true}$. Nevertheless, within the Bayesian philosophy this is perfectly acceptable.\n", + "\n", + "To compute this result, Bayesians next apply Bayes' Theorem ([1](#eq:bayes)).\n", + "If we set the prior $p(F_\\mathrm{true}|I) \\propto 1$ (a flat prior), we find\n", + "$p(F_\\mathrm{true}|D,I) \\propto p(D | F_\\mathrm{true},I) \\equiv \\mathcal{L}(D | F_\\mathrm{true},I)$\n", + "and the Bayesian probability is maximized at precisely the same value as the frequentist result! So despite the philosophical differences, we see that (for this simple problem at least) the Bayesian and frequentist point estimates are equivalent.\n", + "\n", + "### A note about priors\n", + "\n", + "The prior allows inclusion of other information into the computation, which becomes very useful in cases where multiple measurement strategies are being combined to constrain a single model. The necessity to specify a prior, however, is one of the more controversial pieces of Bayesian analysis.\n", + "A frequentist will point out that the prior is problematic when no true prior information is available. Though it might seem straightforward to use a noninformative prior like the flat prior mentioned above, there are some [surprisingly subtleties](http://normaldeviate.wordpress.com/2013/07/13/lost-causes-in-statistics-ii-noninformative- priors/comment-page-1/) involved. It turns out that in many situations, a truly noninformative prior does not exist! Frequentists point out that the subjective choice of a prior which necessarily biases your result has no place in statistical data analysis.\n", + "A Bayesian would counter that frequentism doesn't solve this problem, but simply skirts the question. Frequentism can often be viewed as simply a special case of the Bayesian approach for some (implicit) choice of the prior: a Bayesian would say that it's better to make this implicit choice explicit, even if the choice might include some subjectivity.\n", + "\n", + "### Simple Photon Counts: Bayesian approach in practice\n", + "\n", + "Leaving these philosophical debates aside for the time being, let's address how Bayesian results are generally computed in practice. For a one parameter problem like the one considered here, it's as simple as computing the posterior probability $p(F_\\mathrm{true} | D,I)$ as a function of $F_\\mathrm{true}$: this is the distribution reflecting our knowledge of the parameter $F_\\mathrm{true}$.\n", + "But as the dimension of the model grows, this direct approach becomes increasingly intractable. For this reason, Bayesian calculations often depend on sampling methods such as Markov Chain Monte Carlo (MCMC). For this practical example, let us apply an MCMC approach using Dan Foreman-Mackey's [emcee](http://dan.iel.fm/emcee/current/) package. Keep in mind here that the goal is to generate a set of points drawn from the posterior probability distribution, and to use those points to determine the answer we seek.\n", + "To perform this MCMC, we start by defining Python functions for the prior $p(F_\\mathrm{true} | I)$, the likelihood $p(D | F_\\mathrm{true},I)$, and the posterior $p(F_\\mathrm{true} | D,I)$, noting that none of these need be properly normalized. Our model here is one-dimensional, but to handle multi-dimensional models we'll define the model in terms of an array of parameters $\\boldsymbol{\\alpha}$, which in this case is $\\boldsymbol{\\alpha} = [F_\\mathrm{true}]$" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def log_prior(alpha):\n", + " return 0 # flat prior\n", + "\n", + "def log_likelihood(alpha, F, e):\n", + " return -0.5 * np.sum(np.log(2 * np.pi * e ** 2) \\\n", + " + (F - alpha[0]) ** 2 / e ** 2)\n", + " \n", + "def log_posterior(alpha, F, e):\n", + " return log_prior(alpha) + log_likelihood(alpha, F, e)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we set up the problem, including generating some random starting guesses for the multiple chains of points." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "ndim = 1 # number of parameters in the model\n", + "nwalkers = 50 # number of MCMC walkers\n", + "nburn = 1000 # \"burn-in\" period to let chains stabilize\n", + "nsteps = 2000 # number of MCMC steps to take\n", + "# we'll start at random locations between 0 and 2000\n", + "starting_guesses = 2000 * np.random.rand(nwalkers, ndim)\n", + "sampler = emcee.EnsembleSampler(nwalkers, ndim, log_posterior, args=[F,e])\n", + "sampler.run_mcmc(starting_guesses, nsteps)\n", + "# Shape of sampler.chain = (nwalkers, nsteps, ndim)\n", + "# Flatten the sampler chain and discard burn-in points:\n", + "samples = sampler.chain[:, nburn:, :].reshape((-1, ndim))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If this all worked correctly, the array sample should contain a series of 50,000 points drawn from the posterior. Let's plot them and check. See results in Fig. [fig:flux-bayesian](#fig:flux-bayesian)." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "fig, ax = plt.subplots()\n", + "ax.hist(samples, bins=50, histtype=\"stepfilled\", alpha=0.3, normed=True)\n", + "ax.set_xlabel(r'$F_\\mathrm{est}$')\n", + "ax.set_ylabel(r'$p(F_\\mathrm{est}|D,I)$')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "
    \n", + "\n", + "

    Bayesian posterior pdf (represented by a histogram of MCMC samples) from flux measurements.

    \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "### Best estimates and confidence intervals\n", + "\n", + "The posterior distribution from our Bayesian data analysis is the key quantity that encodes our inference about the values of the model parameters, given the data and the relevant background information. Often, however, we wish to summarize this result with just a few numbers: the best estimate and a measure of its reliability. \n", + "\n", + "There are a few different options for this. The choice of the most appropriate one depends mainly on the shape of the posterior distribution:\n", + "\n", + "*Symmetric posterior pdfs*: Since the probability (density) associated with any particular value of the parameter is a measure of how much we believe that it lies in the neighbourhood of that point, our best estimate is given by the maximum of the posterior pdf. If we denote the quantity of interest by $X$, with a posterior pdf $P =p(X|D,I)$, then the best estimate of its value $X_0$ is given by the condition $dP/dX|_{X=X_0}=0$. Strictly speaking, we should also check the sign of the second derivative to ensure that $X_0$ represents a maximum.\n", + "\n", + "To obtain a measure of the reliability of this best estimate, we need to look at the width or spread of the posterior pdf about $X_0$. When considering the behaviour of any function in the neighbourhood of a particular point, it is often helpful to carry out a Taylor series expansion; this is simply a standard tool for (locally) approximating a complicated function by a low-order polynomial. The linear term is zero at the maximum and the quadratic term is often the dominating one determining the width of the posterior pdf. Ignoring all the higher-order terms we arrive at the Gaussian approximation" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "p(X|D,I) \\approx \\frac{1}{\\sigma\\sqrt{2\\pi}} \\exp \\left[ -\\frac{(x-\\mu)^2}{2\\sigma^2} \\right],\n", + "\\label{_auto8} \\tag{11}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where the mean $\\mu = X_0$ and the variance $\\sigma = \\left( - \\left. \\frac{d^2L}{dX^2} \\right|_{X_0} \\right)^{-1/2}$, where $L$ is the logarithm of the posterior $P$. Our inference about the quantity of interest is conveyed very concisely, therefore, by the statement $X = X_0 \\pm \\sigma$, and" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "$$\n", + "p(X_0-\\sigma < X < X_0+\\sigma | D,I) = \\int_{X_0-\\sigma}^{X_0+\\sigma} p(X|D,I) dX \\approx 0.67.\n", + "$$\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "*Asymmetric posterior pdfs*: While the maximum of the posterior ($X_0$) can still be regarded as giving the best estimate, the true value is now more likely to be on one side of this rather than the other. Alternatively one can compute the mean value, $\\langle X \\rangle = \\int X p(X|D,I) dX$, although this tends to overemphasise very long tails. The best option is probably a compromise that can be employed when having access to a large sample from the posterior (as provided by an MCMC), namely to give the median of this ensamble.\n", + "\n", + "Furthermore, the concept of an error-bar does not seem appropriate in this case, as it implicitly entails the idea of symmetry. A good way of expressing the reliability with which a parameter can be inferred, for an asymmetric posterior pdf, is rather through a *confidence interval*. Since the area under the posterior pdf between $X_1$ and $X_2$ is proportional to how much we believe that $X$ lies in that range, the shortest interval that encloses 67% of the area represents a sensible measure of the uncertainty of the estimate. Obviously we can choose to provide some other degree-of-belief that we think is relevant for the case at hand. Assuming that the posterior pdf has been normalized, to have unit area, we need to find $X_1$ and $X_2$ such that:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "$$\n", + "p(X_1 < X < X_2 | D,I) = \\int_{X_1}^{X_2} p(X|D,I) dX \\approx 0.67, \n", + "$$\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where the difference $X_2 - X_1$ is as small as possible. The region $X_1 < X < X_2$ is then called the shortest 67% confidence interval. \n", + "\n", + "*Multimodal posterior pdfs*: We can sometimes obtain posteriors which are multimodal; i.e. contains several disconnected regions with large probabilities. There is no difficulty when one of the maxima is very much larger than the others: we can simply ignore the subsidiary solutions, to a good approximation, and concentrate on the global maximum. The problem arises when there are several maxima of comparable magnitude. What do we now mean by a best estimate, and how should we quantify its reliability? The idea of a best estimate and an error-bar, or even a confidence interval, is merely an attempt to summarize the posterior with just two or three numbers; sometimes this just can’t be done, and so these concepts are not valid. For the bimodal case we might be able to characterize the posterior in terms of a few numbers: two best estimates and their associated error-bars, or disjoint confidence intervals. For a general multimodal pdf, the most honest thing we can do is just display the posterior itself.\n", + "\n", + "### Simple Photon Counts: Best estimates and confidence intervals\n", + "\n", + "To compute these numbers for our example, you would run:" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "sampper=np.percentile(samples, [2.5, 16.5, 50, 83.5, 97.5],axis=0).flatten()\n", + "print(\"\"\"\n", + "F_true = {0}\n", + "Based on {1} measurements the posterior point estimates are:\n", + "...F_est = {2:.0f} +/- {3:.0f}\n", + "or using credible intervals:\n", + "...F_est = {4:.0f} (posterior median) \n", + "...F_est in [{5:.0f}, {6:.0f}] (67% credible interval) \n", + "...F_est in [{7:.0f}, {8:.0f}] (95% credible interval) \"\"\"\\\n", + " .format(F_true, N, np.mean(samples), np.std(samples), \\\n", + " sampper[2], sampper[1], sampper[3], sampper[0], sampper[4]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`F_true = 1000` \n", + "`Based on 50 measurements the posterior point estimates are:` \n", + "`...F_est = 998 +/- 4` \n", + "`or using credible intervals:` \n", + "`...F_est = 998 (posterior median)` \n", + "`...F_est in [993, 1002] (67% credible interval)` \n", + "`...F_est in [989, 1006] (95% credible interval)` \n", + "\n", + "In this particular example, the posterior pdf is actually a Gaussian (since it is constructed as a product of Gaussians), and the mean and variance from the quadratic approximation will agree exactly with the frequentist approach.\n", + "\n", + "From this final result you might come away with the impression that the Bayesian method is unnecessarily complicated, and in this case it certainly is. Using an MCMC sampler to characterize a one-dimensional normal distribution is a bit like using the Death Star to destroy a beach ball, but we did this here because it demonstrates an approach that can scale to complicated posteriors in many, many dimensions, and can provide nice results in more complicated situations where an analytic likelihood approach is not possible.\n", + "\n", + "Furthermore, as data and models grow in complexity, the two approaches can diverge greatly. \n", + "\n", + "\n", + "## Bayesian parameter estimation (multiple parameters, covariance)\n", + "* multidimensional posterior pdf:s\n", + "\n", + "* nuisance parameters (e.g. background subtraction?)\n", + "\n", + "* corner plots, covariance, correlations\n", + "\n", + "* best example?\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "## Bayesian model selection\n", + "* Bayesian evidence\n", + "\n", + "* Occam's razor\n", + "\n", + "* Best example? How many spectral lines are there?" + ] + } + ], + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.3" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} \ No newline at end of file diff --git a/doc/src/LectureNotes/_build/jupyter_execute/chapter11.py b/doc/src/LectureNotes/_build/jupyter_execute/chapter11.py new file mode 100644 index 000000000..80b97fed9 --- /dev/null +++ b/doc/src/LectureNotes/_build/jupyter_execute/chapter11.py @@ -0,0 +1,712 @@ + +# Data Analysis and Machine Learning: + + +**Christian Forssén**, Department of Physics, Chalmers University of Technology, Sweden + + **Morten Hjorth-Jensen**, Department of Physics, University of Oslo and Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University + +Date: **Dec 23, 2020** + +Copyright 1999-2020, Morten Hjorth-Jensen. Released under CC Attribution-NonCommercial 4.0 license + + + + +# Elements of Bayesian theory and Bayesian Neural Networks + + +## Why Bayesian Statistics? + +We have already made ourselves familiar with elements of a statistical +data analysis via quantities like the bias-variance tradeoff as well +as some central distribution functions such as the Normal +distribution, the binomial distribution and other probability +distribution functions. + +In essentially all the Machine Learning algorithms we have studied, +our focus has been on a so-called **frequentist approach**, where +knowledge of an underlying likelihood function has not been +emphasized. Our data, whether we had a classification or a regression +problem, have been our central points of departure. + +Here we wish to merge this approach with the derivation of a +likelihood function which can be used to make prediction on how our +system under study evolves. We will venture into the realm of what is +called Bayesian Neural Networks. To get an overarching view on what +this entails, the following figure conveys the essential differences +between a standard Neural network that we have met earlier and a +Bayesian Neural Network. In order to get there, we need to present +some of the basic elements of Bayesian statistics, starting with the +product rule and Bayes' theorem. + + + + +## Inference +Inference: + : + "the act of passing from one proposition, statement or judgment considered as true to another whose truth is believed to follow from that of the former" (Webster) + Do premises $A, B, \ldots \to$ hypothesis, $H$? + +Deductive inference: + : + Premises allow definite determination of truth/falsity of H (syllogisms, symbolic logic, Boolean algebra) + $B(H|A,B,...) = 0$ or $1$ + +Inductive inference: + : + Premises bear on truth/falsity of H, but don’t allow its definite determination (weak syllogisms, analogies) + $A, B, C, D$ share properties $x, y, z$; $E$ has properties $x, y$ + $\to$ $E$ probably has property $z$. + + + + +## Statistical Inference +* Quantify the strength of inductive inferences from facts, in the form of data ($D$), and other premises, e.g. models, to hypotheses about the phenomena producing the data. + +* Quantify via probabilities, or averages calculated using probabilities. Frequentists ($\mathcal{F}$) and Bayesians ($\mathcal{B}$) use probabilities very differently for this. + +* To the pioneers such as Bernoulli, Bayes and Laplace, a probability represented a *degree-of-belief* or plausability: how much they thought that something as true based on the evidence at hand. This is the Bayesian approach. + +* To the 19th century scholars, this seemed too vague and subjective. They redefined probability as the *long run relative frequency* with which an event occurred, given (infinitely) many repeated (experimental) trials. + + + + +## Some history +Adapted from D.S. Sivia[^Sivia]: + +[^Sivia]: Sivia, Devinderjit, and John Skilling. Data Analysis : A Bayesian Tutorial, OUP Oxford, 2006 + +> Although the frequency definition appears to be more objective, its range of validity is also far more limited. For example, Laplace used (his) probability theory to estimate the mass of Saturn, given orbital data that were available to him from various astronomical observatories. In essence, he computed the posterior pdf for the mass M , given the data and all the relevant background information I (such as a knowledge of the laws of classical mechanics): prob(M|{data},I); this is shown schematically in the figure [Fig. 1.2]. + + + + + + + + + +

    + + + + + + +> To Laplace, the (shaded) area under the posterior pdf curve between $m_1$ and $m_2$ was a measure of how much he believed that the mass of Saturn lay in the range $m_1 \le M \le m_2$. As such, the position of the maximum of the posterior pdf represents a best estimate of the mass; its width, or spread, about this optimal value gives an indication of the uncertainty in the estimate. Laplace stated that: ‘ . . . it is a bet of 11,000 to 1 that the error of this result is not 1/100th of its value.’ He would have won the bet, as another 150 years’ accumulation of data has changed the estimate by only 0.63%! + + + + + + +> According to the frequency definition, however, we are not permitted to use probability theory to tackle this problem. This is because the mass of Saturn is a constant and not a random variable; therefore, it has no frequency distribution and so probability theory cannot be used. +> +> If the pdf [of Fig. 1.2] had to be interpreted in terms of the frequency definition, we would have to imagine a large ensemble of universes in which everything remains constant apart from the mass of Saturn. + + + + + + +> As this scenario appears quite far-fetched, we might be inclined to think of [Fig. 1.2] in terms of the distribution of the measurements of the mass in many repetitions of the experiment. Although we are at liberty to think about a problem in any way that facilitates its solution, or our understanding of it, having to seek a frequency interpretation for every data analysis problem seems rather perverse. +> For example, what do we mean by the ‘measurement of the mass’ when the data consist of orbital periods? Besides, why should we have to think about many repetitions of an experiment that never happened? What we really want to do is to make the best inference of the mass given the (few) data that we actually have; this is precisely the Bayes and Laplace view of probability. + + + + + + +> Faced with the realization that the frequency definition of probability theory did not permit most real-life scientific problems to be addressed, a new subject was invented — statistics! To estimate the mass of Saturn, for example, one has to relate the mass to the data through some function called the statistic; since the data are subject to ‘random’ noise, the statistic becomes the random variable to which the rules of probability the- ory can be applied. But now the question arises: How should we choose the statistic? The frequentist approach does not yield a natural way of doing this and has, therefore, led to the development of several alternative schools of orthodox or conventional statis- tics. The masters, such as Fisher, Neyman and Pearson, provided a variety of different principles, which has merely resulted in a plethora of tests and procedures without any clear underlying rationale. This lack of unifying principles is, perhaps, at the heart of the shortcomings of the cook-book approach to statistics that students are often taught even today. + + + + + + +## The Bayesian recipe +Assess hypotheses by calculating their probabilities $p(H_i | \ldots)$ conditional on known and/or presumed information using the rules of probability theory. + + +Probability Theory Axioms: +Product (AND) rule : + : + $p(A, B | I) = p(A|I) p(B|A, I) = p(B|I)p(A|B,I)$ + Should read $p(A,B|I)$ as the probability for propositions $A$ AND $B$ being true given that $I$ is true. + +Sum (OR) rule: + : + $p(A + B | I) = p(A | I) + p(B | I) - p(A, B | I)$ + $p(A+B|I)$ is the probability that proposition $A$ OR $B$ is true given that $I$ is true. + +Normalization: + : + $p(A|I) + p(\bar{A}|I) = 1$ + $\bar{A}$ denotes the proposition that $A$ is false. + + + + +## Bayes' theorem +Bayes' theorem follows directly from the product rule + +$$ +$$ +p(A|B,I) = \frac{p(B|A,I) p(A|I)}{p(B|I)}. +$$ +$$ + +The importance of this property to data analysis becomes apparent if we replace $A$ and $B$ by hypothesis($H$) and data($D$): + + +
    + +$$ +\begin{equation} +p(H|D,I) = \frac{p(D|H,I) p(H|I)}{p(D|I)}. +\label{eq:bayes} \tag{1} +\end{equation} +$$ + +The power of Bayes’ theorem lies in the fact that it relates the quantity of interest, the probability that the hypothesis is true given the data, to the term we have a better chance of being able to assign, the probability that we would have observed the measured data if the hypothesis was true. + + + + +The various terms in Bayes’ theorem have formal names. +* The quantity on the far right, $p(H|I)$, is called the *prior* probability; it represents our state of knowledge (or ignorance) about the truth of the hypothesis before we have analysed the current data. + +* This is modified by the experimental measurements through $p(D|H,I)$, the *likelihood* function, + +* The denominator $p(D|I)$ is called the *evidence*. It does not depend on the hypothesis and can be regarded as a normalization constant. + +* Together, these yield the *posterior* probability, $p(H|D, I )$, representing our state of knowledge about the truth of the hypothesis in the light of the data. + +In a sense, Bayes’ theorem encapsulates the process of learning. + + + + +## The friends of Bayes' theorem +Normalization: + : + $\sum_i p(H_i|\ldots) = 1$. + +Marginalization: + : + $\sum_i p(A,H_i|I) = \sum_i p(H_i|A,I) p(A|I) = p(A|I)$. + +Marginalization (continuum limit): + : + $\int dx p(A,H(x)|I) = p(A|I)$. + +In the above, $H_i$ is an exclusive and exhaustive list of hypotheses. For example,let’s imagine that there are five candidates in a presidential election; then $H_1$ could be the proposition that the first candidate will win, and so on. The probability that $A$ is true, for example that unemployment will be lower in a year’s time (given all relevant information $I$, but irrespective of whoever becomes president) is then given by $\sum_i p(A,H_i|I)$. + +In the continuum limit of propositions we must understand $p(\ldots)$ as a pdf (probability density function). + +Marginalization is a very powerful device in data analysis because it enables us to deal with nuisance parameters; that is, quantities which necessarily enter the analysis but are of no intrinsic interest. The unwanted background signal present in many experimental measurements are examples of nuisance parameters. + + + + +## Inference With Parametric Models +Inductive inference with parametric models is a very important tool in the natural sciences. +* Consider $N$ different models $M_i$ ($i = 1, \ldots, N$), each with parameters $\boldsymbol{\alpha}_i$. Each of them implies a sampling distribution (conditional predictive distribution for possible data) + +$$ +$$ +p(D|\boldsymbol{\alpha}_i, M_i) +$$ +$$ + +* The $\boldsymbol{\alpha}_i$ dependence when we fix attention on the actual, observed data ($D_\mathrm{obs}$) is the likelihood function: + +$$ +$$ +\mathcal{L}_i (\boldsymbol{\alpha}_i) \equiv p(D_\mathrm{obs}|\boldsymbol{\alpha}_i, M_i) +$$ +$$ + +* We may be uncertain about $i$ (model uncertainty), + +* or uncertain about $\boldsymbol{\alpha}_i$ (parameter uncertainty). + + + + +Parameter Estimation: + : + Premise = choice of model (pick specific $i$) + $\Rightarrow$ What can we say about $\boldsymbol{\alpha}_i$? + +Model comparison: + : + Premise = $\{M_i\}$ + $\Rightarrow$ What can we say about $i$? + +Model adequacy: + : + Premise = $M_1$ + $\Rightarrow$ Is $M_1$ adequate? + +Hybrid Uncertainty: + : + Models share some common params: $\boldsymbol{\alpha}_1 = \{ \boldsymbol{\varphi}, \boldsymbol{\eta}_i\}$ + $\Rightarrow$ What can we say about $\boldsymbol{\varphi}$? (Systematic error is an example) + + + + +## Illustrative examples with python code +* Is this a fair coin? (analytical) + +* Flux from a star (single parameter, MCMC) + +* The lighthouse problem (two parameters, MCMC) + +* Linear fit with outliers (nuisance parameters) + +* ... + + + + +## Example: Is this a fair coin? +Let us begin with the analysis of data from a simple coin-tossing experiment. +Given that we had observed 6 heads in 8 flips, would you think it was a fair coin? By fair, we mean that we would be prepared to lay an even 1 : 1 bet on the outcome of a flip being a head or a tail. If we decide that the coin was fair, the question which follows naturally is how sure are we that this was so; if it was not fair, how unfair do we think it was? Furthermore, if we were to continue collecting data for this particular coin, observing the outcomes of additional flips, how would we update our belief on the fairness of the coin? + +A sensible way of formulating this problem is to consider a large number of hypotheses about the range in which the bias-weighting of the coin might lie. If we denote the bias-weighting by $H$, then $H = 0$ and $H = 1$ can represent a coin which produces a tail or a head on every flip, respectively. There is a continuum of possibilities for the value of H between these limits, with $H = 0.5$ indicating a fair coin. Our state of knowledge about the fairness, or the degree of unfairness, of the coin is then completely summarized by specifying how much we believe these various propositions to be true. + +Let us perform a computer simulation of a coin-tossing experiment. This provides the data that we will be analysing. + +0 + +< +< +< +! +! +C +O +D +E +_ +B +L +O +C +K + + +p +y +c +o +d + +np.random.seed(999) # for reproducibility +a=0.6 # biased coin +flips=np.random.rand(2**12) # simulates 4096 coin flips +heads=flips
    +
    + +$$ +\begin{equation} +\int_0^1 p(H|D,I) dH = 1. +\label{eq:coin_posterior_norm} \tag{2} +\end{equation} +$$ + +The prior pdf, $p(H|I)$, represents what we know about the coin given only the information $I$ that we are dealing with a ‘strange coin’. We could keep a very open mind about the nature of the coin; a simple probability assignment which reflects this is a uniform, or flat, prior + + +
    + +$$ +\begin{equation} +p(H|I) = \left\{ \begin{array}{ll} +1 & 0 \le H \le 1, \\ +0 & \mathrm{otherwise}. +\end{array} \right. +\label{eq:coin_prior_uniform} \tag{3} +\end{equation} +$$ + +We will get back later to the choice of prior and its effect on the analysis. + +This prior state of knowledge, or ignorance, is modified by the data through the likelihood function $p(D|H,I)$. It is a measure of the chance that we would have obtained the data that we actually observed, if the value of the bias-weighting was given (as known). If, in the conditioning information $I$, we assume that the flips of the coin were independent events, so that the outcome of one did not influence that of another, then the probability of obtaining the data `R heads in N tosses' is given by the binomial distribution (we leave a formal definition of this to a statistics textbook) + + +
    + +$$ +\begin{equation} +p(D|H,I) \propto H^R (1-H)^{N-R}. +\label{_auto1} \tag{4} +\end{equation} +$$ + +It seems reasonable because $H$ is the chance of obtaining a head on any flip, and there were $R$ of them, and $1-H$ is the corresponding probability for a tail, of which there were $N-R$. We note that this binomial distribution also contains a normalization factor, but we will ignore it since it does not depend explicitly on $H$, the quantity of interest. It will be absorbed by the normalization condition ([2](#eq:coin_posterior_norm)). + +We perform the setup of this Bayesian framework on the computer. + +def prior(H): + p=np.zeros_like(H) + p[(0<=x)&(x<=1)]=1 # allowed range: 0<=H<=1 + return p # uniform prior +def likelihood(H,data): + N = len(data) + no_of_heads = sum(data) + no_of_tails = N - no_of_heads + return H**no_of_heads * (1-H)**no_of_tails +def posterior(H,data): + p=prior(H)*likelihood(H,data) + norm=np.trapz(p,H) + return p/norm + +The next step is to confront this setup with the simulated data. To get a feel for the result, it is instructive to see how the posterior pdf evolves as we obtain more and more data pertaining to the coin. The results of such an analyses is shown in Fig. [fig:coinflipping](#fig:coinflipping). + +x=np.linspace(0,1,100) +fig, axs = plt.subplots(nrows=4,ncols=3,sharex=True,sharey='row') +axs_vec=np.reshape(axs,-1) +axs_vec[0].plot(x,prior(x)) +for ndouble in range(11): + ax=axs_vec[1+ndouble] + ax.plot(x,posterior(x,heads[:2**ndouble])) + ax.text(0.1, 0.8, '$N={0}$'.format(2**ndouble), transform=ax.transAxes) +for row in range(4): axs[row,0].set_ylabel('$p(H|D_\mathrm{obs},I)$') +for col in range(3): axs[-1,col].set_xlabel('$H$') + + + +
    + +

    The evolution of the posterior pdf for the bias-weighting of a coin, as the number of data available increases. The figure on the top left-hand corner of each panel shows the number of data included in the analysis.

    + + + + + +The panel in the top left-hand corner shows the posterior pdf for $H$ given no data, i.e., it is the same as the prior pdf of Eq. ([3](#eq:coin_prior_uniform)). It indicates that we have no more reason to believe that the coin is fair than we have to think that it is double-headed, double-tailed, or of any other intermediate bias-weighting. + +The first flip is obviously tails. At this point we have no evidence that the coin has a side with heads, as indicated by the pdf going to zero as $H \to 1$. The second flip is obviously heads and we have now excluded both extreme options $H=0$ (double-tailed) and $H=1$ (double-headed). We can note that the posterior at this point has the simple form $p(H|D,I) = H(1-H)$ for $0 \le H \le 1$. + +The remainder of Fig. [fig:coinflipping](#fig:coinflipping) shows how the posterior pdf evolves as the number of data analysed becomes larger and larger. We see that the position of the maximum moves around, but that the amount by which it does so decreases with the increasing number of observations. The width of the posterior pdf also becomes narrower with more data, indicating that we are becoming increasingly confident in our estimate of the bias-weighting. For the coin in this example, the best estimate of $H$ eventually converges to 0.6, which, of course, was the value chosen to simulate the flips. + + +## A few words on different priors +* uniform + +* Gaussian + +* Jeffrey's prior + +Repeat the coin flipping experiment with other priors. + + +## Bayesian parameter estimation (single parameter) +We will now consider the very important task of model parameter estimation using statistical inference. +[CF 1: maybe stress that model parameters are not random variables, and the meaning of parameter estimation is therefore very different between frequentist and bayesian approaches.] + +Throughout this section we will consider a specific example that involves a model with a single parameter: "Measured flux from a star". + + + + +### Example: Measured flux from a star + +Adapted from the blog [Pythonic Perambulations](http://jakevdp.github.io) by Jake VanderPlas. + +Imagine that we point our telescope to the sky, and observe the light coming from a single star. For the time being, we'll assume that the star's true flux is constant with time, i.e. that is it has a fixed value $F_\mathrm{true}$ (we'll also ignore effects like sky noise and other sources of systematic error). We'll assume that we perform a series of $N$ measurements with our telescope, where the ith measurement reports the observed photon flux $F_i$ and error $e_i$[^errors]. +The question is, given this set of measurements $D = \{F_i, e_i\}$, what is our best estimate of the true flux $F_\mathrm{true}$? + +[^errors]: We'll make the reasonable assumption that errors are Gaussian. In a Frequentist perspective, $e_i$ is the standard deviation of the results of a single measurement event in the limit of repetitions of *that event*. In the Bayesian perspective, $e_i$ is the standard deviation of the (Gaussian) probability distribution describing our knowledge of that particular measurement given its observed value. + +Because the measurements are number counts, a Poisson distribution is a good approximation to the measurement process: + +np.random.seed(1) # for repeatability +F_true = 1000 # true flux, say number of photons measured in 1 second +N = 50 # number of measurements +F = stats.poisson(F_true).rvs(N) + # N measurements of the flux +e = np.sqrt(F) # errors on Poisson counts estimated via square root + +Now let's make a simple visualization of the "observed" data, see Fig. [fig:flux](#fig:flux). + +fig, ax = plt.subplots() +ax.errorbar(F, np.arange(N), xerr=e, fmt='ok', ecolor='gray', alpha=0.5) +ax.vlines([F_true], 0, N, linewidth=5, alpha=0.2) +ax.set_xlabel("Flux");ax.set_ylabel("measurement number"); + + + +
    + +

    Single photon counts (flux measurements).

    + + + + + +These measurements each have a different error $e_i$ which is estimated from Poisson statistics using the standard square-root rule. In this toy example we already know the true flux $F_\mathrm{true}$, but the question is this: given our measurements and errors, what is our best estimate of the true flux? + +Let's take a look at the frequentist and Bayesian approaches to solving this. + +### Simple Photon Counts: Frequentist Approach + +We'll start with the classical frequentist maximum likelihood approach. Given a single observation $D_i = (F_i, e_i)$, we can compute the probability distribution of the measurement given the true flux Ftrue given our assumption of Gaussian errors + + +
    + +$$ +\begin{equation} +p(D_i | F_\mathrm{true}, I) = \frac{1}{\sqrt{2\pi e_i^2}} \exp \left( \frac{-(F_i-F_\mathrm{true})^2}{2e_i^2} \right). +\label{_auto2} \tag{5} +\end{equation} +$$ + +This should be read "the probability of $D_i$ given $F_\mathrm{true}$ +equals ...". You should recognize this as a normal distribution with mean $F_\mathrm{true}$ and standard deviation $e_i$. + +We construct the *likelihood function* by computing the product of the probabilities for each data point + + +
    + +$$ +\begin{equation} +\mathcal{L}(D | F_\mathrm{true}, I) = \prod_{i=1}^N p(D_i | F_\mathrm{true}, I), +\label{_auto3} \tag{6} +\end{equation} +$$ + +here $D = \{D_i\}$ represents the entire set of measurements. Because the value of the likelihood can become very small, it is often more convenient to instead compute the log-likelihood. Combining the previous two equations and computing the log, we have + + +
    + +$$ +\begin{equation} +\log\mathcal{L} = -\frac{1}{2} \sum_{i=1}^N \left[ \log(2\pi e_i^2) + \frac{(F_i-F_\mathrm{true})^2}{e_i^2} \right]. +\label{_auto4} \tag{7} +\end{equation} +$$ + +What we'd like to do is determine $F_\mathrm{true}$ such that the likelihood is maximized. For this simple problem, the maximization can be computed analytically (i.e. by setting $d\log\mathcal{L}/d F_\mathrm{true} = 0$). This results in the following observed estimate of $F_\mathrm{true}$ + + +
    + +$$ +\begin{equation} +F_\mathrm{est} = \sum_{i=1}^N w_i F_i; \quad w_i = 1/e_i^2. +\label{_auto5} \tag{8} +\end{equation} +$$ + +Notice that in the special case of all errors $e_i$ being equal, this reduces to + + +
    + +$$ +\begin{equation} +F_\mathrm{est} = \frac{1}{N} \sum_{i=1} F_i. +\label{_auto6} \tag{9} +\end{equation} +$$ + +That is, in agreement with intuition, $F_\mathrm{est}$ is simply the mean of the observed data when errors are equal. + +We can go further and ask what the error of our estimate is. In the frequentist approach, this can be accomplished by fitting a Gaussian approximation to the likelihood curve at maximum; in this simple case this can also be solved analytically (the sum of Gaussians is also a Gaussian). It can be shown that the standard deviation of this Gaussian approximation is + + +
    + +$$ +\begin{equation} +\sigma_\mathrm{est} = \sum_{i=1}^N w_i. +\label{_auto7} \tag{10} +\end{equation} +$$ + +These results are fairly simple calculations; let's evaluate them for our toy dataset: + +w=1./e**2 +print(""" +F_true = {0} +F_est = {1:.0f} +/- {2:.0f} (based on {3} measurements) """\ + .format(F_true, (w * F).sum() / w.sum(), w.sum() ** -0.5, N)) + +`F_true = 1000` +`F_est = 998 +/- 4 (based on 50 measurements)` + +We find that for 50 measurements of the flux, our estimate has an error of about 0.4% and is consistent with the input value. + + +### Simple Photon Counts: Bayesian Approach + +The Bayesian approach, as you might expect, begins and ends with probabilities. Our hypothesis is that the star has a constant flux $F_\mathrm{true}$. It recognizes that what we fundamentally want to compute is our knowledge of the parameters in question given the data and other information (such as our knowledge of uncertainties for the observed values), i.e. in this case, $p(F_\mathrm{true} | D,I)$. +Note that this formulation of the problem is fundamentally contrary to the frequentist philosophy, which says that probabilities have no meaning for model parameters like $F_\mathrm{true}$. Nevertheless, within the Bayesian philosophy this is perfectly acceptable. + +To compute this result, Bayesians next apply Bayes' Theorem ([1](#eq:bayes)). +If we set the prior $p(F_\mathrm{true}|I) \propto 1$ (a flat prior), we find +$p(F_\mathrm{true}|D,I) \propto p(D | F_\mathrm{true},I) \equiv \mathcal{L}(D | F_\mathrm{true},I)$ +and the Bayesian probability is maximized at precisely the same value as the frequentist result! So despite the philosophical differences, we see that (for this simple problem at least) the Bayesian and frequentist point estimates are equivalent. + +### A note about priors + +The prior allows inclusion of other information into the computation, which becomes very useful in cases where multiple measurement strategies are being combined to constrain a single model. The necessity to specify a prior, however, is one of the more controversial pieces of Bayesian analysis. +A frequentist will point out that the prior is problematic when no true prior information is available. Though it might seem straightforward to use a noninformative prior like the flat prior mentioned above, there are some [surprisingly subtleties](http://normaldeviate.wordpress.com/2013/07/13/lost-causes-in-statistics-ii-noninformative- priors/comment-page-1/) involved. It turns out that in many situations, a truly noninformative prior does not exist! Frequentists point out that the subjective choice of a prior which necessarily biases your result has no place in statistical data analysis. +A Bayesian would counter that frequentism doesn't solve this problem, but simply skirts the question. Frequentism can often be viewed as simply a special case of the Bayesian approach for some (implicit) choice of the prior: a Bayesian would say that it's better to make this implicit choice explicit, even if the choice might include some subjectivity. + +### Simple Photon Counts: Bayesian approach in practice + +Leaving these philosophical debates aside for the time being, let's address how Bayesian results are generally computed in practice. For a one parameter problem like the one considered here, it's as simple as computing the posterior probability $p(F_\mathrm{true} | D,I)$ as a function of $F_\mathrm{true}$: this is the distribution reflecting our knowledge of the parameter $F_\mathrm{true}$. +But as the dimension of the model grows, this direct approach becomes increasingly intractable. For this reason, Bayesian calculations often depend on sampling methods such as Markov Chain Monte Carlo (MCMC). For this practical example, let us apply an MCMC approach using Dan Foreman-Mackey's [emcee](http://dan.iel.fm/emcee/current/) package. Keep in mind here that the goal is to generate a set of points drawn from the posterior probability distribution, and to use those points to determine the answer we seek. +To perform this MCMC, we start by defining Python functions for the prior $p(F_\mathrm{true} | I)$, the likelihood $p(D | F_\mathrm{true},I)$, and the posterior $p(F_\mathrm{true} | D,I)$, noting that none of these need be properly normalized. Our model here is one-dimensional, but to handle multi-dimensional models we'll define the model in terms of an array of parameters $\boldsymbol{\alpha}$, which in this case is $\boldsymbol{\alpha} = [F_\mathrm{true}]$ + +def log_prior(alpha): + return 0 # flat prior + +def log_likelihood(alpha, F, e): + return -0.5 * np.sum(np.log(2 * np.pi * e ** 2) \ + + (F - alpha[0]) ** 2 / e ** 2) + +def log_posterior(alpha, F, e): + return log_prior(alpha) + log_likelihood(alpha, F, e) + +Now we set up the problem, including generating some random starting guesses for the multiple chains of points. + +ndim = 1 # number of parameters in the model +nwalkers = 50 # number of MCMC walkers +nburn = 1000 # "burn-in" period to let chains stabilize +nsteps = 2000 # number of MCMC steps to take +# we'll start at random locations between 0 and 2000 +starting_guesses = 2000 * np.random.rand(nwalkers, ndim) +sampler = emcee.EnsembleSampler(nwalkers, ndim, log_posterior, args=[F,e]) +sampler.run_mcmc(starting_guesses, nsteps) +# Shape of sampler.chain = (nwalkers, nsteps, ndim) +# Flatten the sampler chain and discard burn-in points: +samples = sampler.chain[:, nburn:, :].reshape((-1, ndim)) + +If this all worked correctly, the array sample should contain a series of 50,000 points drawn from the posterior. Let's plot them and check. See results in Fig. [fig:flux-bayesian](#fig:flux-bayesian). + +fig, ax = plt.subplots() +ax.hist(samples, bins=50, histtype="stepfilled", alpha=0.3, normed=True) +ax.set_xlabel(r'$F_\mathrm{est}$') +ax.set_ylabel(r'$p(F_\mathrm{est}|D,I)$') + + + +
    + +

    Bayesian posterior pdf (represented by a histogram of MCMC samples) from flux measurements.

    + + + + + +### Best estimates and confidence intervals + +The posterior distribution from our Bayesian data analysis is the key quantity that encodes our inference about the values of the model parameters, given the data and the relevant background information. Often, however, we wish to summarize this result with just a few numbers: the best estimate and a measure of its reliability. + +There are a few different options for this. The choice of the most appropriate one depends mainly on the shape of the posterior distribution: + +*Symmetric posterior pdfs*: Since the probability (density) associated with any particular value of the parameter is a measure of how much we believe that it lies in the neighbourhood of that point, our best estimate is given by the maximum of the posterior pdf. If we denote the quantity of interest by $X$, with a posterior pdf $P =p(X|D,I)$, then the best estimate of its value $X_0$ is given by the condition $dP/dX|_{X=X_0}=0$. Strictly speaking, we should also check the sign of the second derivative to ensure that $X_0$ represents a maximum. + +To obtain a measure of the reliability of this best estimate, we need to look at the width or spread of the posterior pdf about $X_0$. When considering the behaviour of any function in the neighbourhood of a particular point, it is often helpful to carry out a Taylor series expansion; this is simply a standard tool for (locally) approximating a complicated function by a low-order polynomial. The linear term is zero at the maximum and the quadratic term is often the dominating one determining the width of the posterior pdf. Ignoring all the higher-order terms we arrive at the Gaussian approximation + + +
    + +$$ +\begin{equation} +p(X|D,I) \approx \frac{1}{\sigma\sqrt{2\pi}} \exp \left[ -\frac{(x-\mu)^2}{2\sigma^2} \right], +\label{_auto8} \tag{11} +\end{equation} +$$ + +where the mean $\mu = X_0$ and the variance $\sigma = \left( - \left. \frac{d^2L}{dX^2} \right|_{X_0} \right)^{-1/2}$, where $L$ is the logarithm of the posterior $P$. Our inference about the quantity of interest is conveyed very concisely, therefore, by the statement $X = X_0 \pm \sigma$, and + +$$ +$$ +p(X_0-\sigma < X < X_0+\sigma | D,I) = \int_{X_0-\sigma}^{X_0+\sigma} p(X|D,I) dX \approx 0.67. +$$ +$$ + +*Asymmetric posterior pdfs*: While the maximum of the posterior ($X_0$) can still be regarded as giving the best estimate, the true value is now more likely to be on one side of this rather than the other. Alternatively one can compute the mean value, $\langle X \rangle = \int X p(X|D,I) dX$, although this tends to overemphasise very long tails. The best option is probably a compromise that can be employed when having access to a large sample from the posterior (as provided by an MCMC), namely to give the median of this ensamble. + +Furthermore, the concept of an error-bar does not seem appropriate in this case, as it implicitly entails the idea of symmetry. A good way of expressing the reliability with which a parameter can be inferred, for an asymmetric posterior pdf, is rather through a *confidence interval*. Since the area under the posterior pdf between $X_1$ and $X_2$ is proportional to how much we believe that $X$ lies in that range, the shortest interval that encloses 67% of the area represents a sensible measure of the uncertainty of the estimate. Obviously we can choose to provide some other degree-of-belief that we think is relevant for the case at hand. Assuming that the posterior pdf has been normalized, to have unit area, we need to find $X_1$ and $X_2$ such that: + +$$ +$$ +p(X_1 < X < X_2 | D,I) = \int_{X_1}^{X_2} p(X|D,I) dX \approx 0.67, +$$ +$$ + +where the difference $X_2 - X_1$ is as small as possible. The region $X_1 < X < X_2$ is then called the shortest 67% confidence interval. + +*Multimodal posterior pdfs*: We can sometimes obtain posteriors which are multimodal; i.e. contains several disconnected regions with large probabilities. There is no difficulty when one of the maxima is very much larger than the others: we can simply ignore the subsidiary solutions, to a good approximation, and concentrate on the global maximum. The problem arises when there are several maxima of comparable magnitude. What do we now mean by a best estimate, and how should we quantify its reliability? The idea of a best estimate and an error-bar, or even a confidence interval, is merely an attempt to summarize the posterior with just two or three numbers; sometimes this just can’t be done, and so these concepts are not valid. For the bimodal case we might be able to characterize the posterior in terms of a few numbers: two best estimates and their associated error-bars, or disjoint confidence intervals. For a general multimodal pdf, the most honest thing we can do is just display the posterior itself. + +### Simple Photon Counts: Best estimates and confidence intervals + +To compute these numbers for our example, you would run: + +sampper=np.percentile(samples, [2.5, 16.5, 50, 83.5, 97.5],axis=0).flatten() +print(""" +F_true = {0} +Based on {1} measurements the posterior point estimates are: +...F_est = {2:.0f} +/- {3:.0f} +or using credible intervals: +...F_est = {4:.0f} (posterior median) +...F_est in [{5:.0f}, {6:.0f}] (67% credible interval) +...F_est in [{7:.0f}, {8:.0f}] (95% credible interval) """\ + .format(F_true, N, np.mean(samples), np.std(samples), \ + sampper[2], sampper[1], sampper[3], sampper[0], sampper[4])) + +`F_true = 1000` +`Based on 50 measurements the posterior point estimates are:` +`...F_est = 998 +/- 4` +`or using credible intervals:` +`...F_est = 998 (posterior median)` +`...F_est in [993, 1002] (67% credible interval)` +`...F_est in [989, 1006] (95% credible interval)` + +In this particular example, the posterior pdf is actually a Gaussian (since it is constructed as a product of Gaussians), and the mean and variance from the quadratic approximation will agree exactly with the frequentist approach. + +From this final result you might come away with the impression that the Bayesian method is unnecessarily complicated, and in this case it certainly is. Using an MCMC sampler to characterize a one-dimensional normal distribution is a bit like using the Death Star to destroy a beach ball, but we did this here because it demonstrates an approach that can scale to complicated posteriors in many, many dimensions, and can provide nice results in more complicated situations where an analytic likelihood approach is not possible. + +Furthermore, as data and models grow in complexity, the two approaches can diverge greatly. + + +## Bayesian parameter estimation (multiple parameters, covariance) +* multidimensional posterior pdf:s + +* nuisance parameters (e.g. background subtraction?) + +* corner plots, covariance, correlations + +* best example? + + + + + +## Bayesian model selection +* Bayesian evidence + +* Occam's razor + +* Best example? How many spectral lines are there? \ No newline at end of file diff --git a/doc/src/LectureNotes/_build/jupyter_execute/chapter2.ipynb b/doc/src/LectureNotes/_build/jupyter_execute/chapter2.ipynb index 74b415d93..caec56691 100644 --- a/doc/src/LectureNotes/_build/jupyter_execute/chapter2.ipynb +++ b/doc/src/LectureNotes/_build/jupyter_execute/chapter2.ipynb @@ -1094,27 +1094,27 @@ "name": "stdout", "output_type": "stream", "text": [ - "2.1453055662574343\n", - "[[12.86665228 10.42534378 14.91184964 7.05197852 10.73905189 9.78942024\n", - " 2.99691286 8.42384711 18.16377739 12.166796 ]\n", - " [10.42534378 8.44724724 12.082487 5.71394166 8.70143262 7.93198333\n", - " 2.42828097 6.82551297 14.71739653 9.85827768]\n", - " [14.91184964 12.082487 17.28213796 8.17291407 12.44606006 11.34548129\n", - " 3.47328217 9.76284574 21.05097048 14.10074886]\n", - " [ 7.05197852 5.71394166 8.17291407 3.8650614 5.88587937 5.36540351\n", - " 1.64255353 4.61695766 9.95523663 6.6684 ]\n", - " [10.73905189 8.70143262 12.44606006 5.88587937 8.96326666 8.17066394\n", - " 2.50135015 7.03089888 15.16025642 10.15492225]\n", - " [ 9.78942024 7.93198333 11.34548129 5.36540351 8.17066394 7.44814941\n", - " 2.28016105 6.40917136 13.819667 9.25694395]\n", - " [ 2.99691286 2.42828097 3.47328217 1.64255353 2.50135015 2.28016105\n", - " 0.69804379 1.96209046 4.23072426 2.83390167]\n", - " [ 8.42384711 6.82551297 9.76284574 4.61695766 7.03089888 6.40917136\n", - " 1.96209046 5.51512534 11.89189544 7.96564848]\n", - " [18.16377739 14.71739653 21.05097048 9.95523663 15.16025642 13.819667\n", - " 4.23072426 11.89189544 25.64169777 17.17579438]\n", - " [12.166796 9.85827768 14.10074886 6.6684 10.15492225 9.25694395\n", - " 2.83390167 7.96564848 17.17579438 11.50500702]]\n" + "2.599907486910053\n", + "[[ 0.2319431 1.78702425 2.33555576 1.01612686 0.80805005 1.10075065\n", + " 1.70915039 0.60318841 0.62019593 1.49305147]\n", + " [ 1.78702425 13.76827179 17.99447691 7.82883097 6.22568649 8.48082175\n", + " 13.16828638 4.64731357 4.77834938 11.5033349 ]\n", + " [ 2.33555576 17.99447691 23.51792615 10.23191002 8.13667637 11.08403099\n", + " 17.21032448 6.07381797 6.24507555 15.03431202]\n", + " [ 1.01612686 7.82883097 10.23191002 4.45158225 3.54001199 4.82231328\n", + " 7.48767091 2.64252717 2.71703596 6.54095632]\n", + " [ 0.80805005 6.22568649 8.13667637 3.54001199 2.81510801 3.83482678\n", + " 5.95438729 2.10140515 2.16065644 5.20153566]\n", + " [ 1.10075065 8.48082175 11.08403099 4.82231328 3.83482678 5.22391907\n", + " 8.11124963 2.86259878 2.94331271 7.08569196]\n", + " [ 1.70915039 13.16828638 17.21032448 7.48767091 5.95438729 8.11124963\n", + " 12.59444676 4.44479575 4.57012136 11.00204953]\n", + " [ 0.60318841 4.64731357 6.07381797 2.64252717 2.10140515 2.86259878\n", + " 4.44479575 1.56864447 1.61287402 3.88281152]\n", + " [ 0.62019593 4.77834938 6.24507555 2.71703596 2.16065644 2.94331271\n", + " 4.57012136 1.61287402 1.65835067 3.9922914 ]\n", + " [ 1.49305147 11.5033349 15.03431202 6.54095632 5.20153566 7.08569196\n", + " 11.00204953 3.88281152 3.9922914 9.61098936]]\n" ] } ], @@ -1673,15 +1673,15 @@ "name": "stdout", "output_type": "stream", "text": [ - "0.021442867969978376\n", - "4.117524456004779\n", - "0.06378292739195897\n", - "0.9888063524440697 9.919191379006188 17.823611314267136\n", - "2.969136019500522 3.214525177223236 9.842379203904565\n", - "[[ 0.98880635 2.96913602 3.21452518]\n", - " [ 2.96913602 9.91919138 9.8423792 ]\n", - " [ 3.21452518 9.8423792 17.82361131]]\n", - "[25.24964689 0.08489291 3.39706925]\n" + "0.09525604390305954\n", + "4.231031843972674\n", + "0.04124568972977915\n", + "0.831883346005529 8.296268771337688 5.337726521457732\n", + "2.4701318674515136 1.7159602029423742 5.229477584776403\n", + "[[0.83188335 2.47013187 1.7159602 ]\n", + " [2.47013187 8.29626877 5.22947758]\n", + " [1.7159602 5.22947758 5.33772652]]\n", + "[12.99430696 0.07864499 1.39292669]\n" ] } ], @@ -2296,7 +2296,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYsAAAESCAYAAAAMifkAAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAATkUlEQVR4nO3dwW8bZ37G8edXBPAhaJaVFORiA1sm61x62NDyebMN3b0WWSX+BxomRa9axznuySut9txa/gMKx0rvjZXE58qiLz0FMJ2eFgusFCZI9lKgvx7mHc2Y5ugdUiRnOPx+gCCcl+TMy9cSH73vO/OOubsAADjPX1VdAQBA/REWAIAowgIAEEVYAACiCAsAQBRhAQCIIiwwNTPrmdldM9sysx0zexoe98zs4YLq0AnHezDDfT6d5/5LHL9tZg/NrDOuThfY79Pw/+4s9pffJ5qPsMBFnLr7h+5+IOmhpIG7H7j7vqS7ZXdiZr0L1OETSZ9K+uAC+3iOu78+z/2XOP5AUl/SWkGdXlCmDdN9uPuhpOE0dRs9TqxeaA7CAhfRn/K5M2bWkvThBerQcvehu0/15TemPm0z25rX/mdUp9Hno20Y20fJejx3nFnsE8uDsMDUwl/Ahc+Z2a0w5NELXyydMEzVMbOd8NK2pFZaXrS/sI9u+G8rlHUkrYX3tkde3w3DYq3csE535Ll0f3fDF6EknUraCe97Yf8F9cjv74GZ/eOY/XfSz130OfP7Du2Seq5OZdpwtE6S/i/dx0gbdcO/U3vkfS+025jjnOb3WaJtRtsaS+SlqiuAZkqHK8KQh8IX1kDSkbv3zUzh+b6ZDcNQVtG+tkb2tWNmg/DeU0mHo3/5u/uhmQ3C40GYQ2mNPDcIz3Ukbab7yb3vuf2fU490f6fu/l547l9G9+/u++Fz39RIzyt8Ibdy+76R+yxndQrvjbZhQZ2eC/f0WJIOzexY0rVIu71wnPS1JdrmhbYe80+NGqNngXm5JmmY/kWt5AvuY0nt8MU0ydDTDSVBkzpR8oVzUae5x2X+2j2vHmvuPjr0dlrweNyxRvc91oRtOK5ORdrxl5wr9m80aVujZggLzMtDKflrNHxh7ZtZz9133T0NkvQL6lQ6++t6nGM9/2X2uqTHE9ZnFhOxs6hHkSNJ13PbY79QL9CGMUVBNdpuRceZZ9ugBggLXFj44nhPyV+8W2bWSocqwnY6Bt/KbT/NzXk8sHPO5glnV7VyY+HHYUikE/Zb9N67knq5OYIPc3MRbUnvh/HzG5JujHnuuf3H6pF+hvP2r2QYadNG5lhCe52Efafvf6G+ZdvwvDqFlxymxwqveS/WbqPHye+zxL/RuLbAEjGWKAcAxNCzAABEERYAgCjCAgAQRVgAAKIICwBA1FJfwd1qtfyNN96ouhq18OOPP+rll1+uuhq1QFtkaIsMbZE5Pj7+s7u/Osl7ljosXnvtNT1+zHU/kvTo0SO9/fbbVVejFmiLDG2RoS0yZvY/k76HYSgAQBRhAQCIIiwAAFGEBQAgirAAAEQRFgCAKMICABBFWAAAoggLAEAUYQEAiCIsAABRS702VB3Yb63qKkiSvvrFV1VXAUCDERaYGYIzQ1ugaeY2DGVmnZHtLTPrmtmtScsAANWaS8/CzLqS7kp6PWx3JMndD82snQ+SWJm79+dRRwBYtLr0OKcxl7AIX/aDXNFNSQ/D44GkrqT1kmWEBYALO/7jsX75219WXY2ltaizoVqSTnPb6xOUAQAqtnQT3GbWk9STpFdffVWPHj2qtD57V/cqPX7qT6d/0h/+/Q+V1qEubfHDDz/wcxHUoS2O/3hc6fFTly9drs2/S9W2tT3xexYVFkNJa+FxS9JJeFy27Iy770val6Q333zTq75NYl26tXtX97T99eQ/AE301S++qvz2mXX5uaAtMvyOXMyiwuK+pM3wuC3pMDwuWwYAqNC8zobakrRpZlvufuDufTPbDGdJDdMznMqWFfnL//5lqc8uAIBlMa+zoQ4kHYyU7Y95XakyAEC1WBsKABBFWAAAoggLAEAUYQEAiFq6i/KAGJZ1AGaPngUAIIqwAABEERYAgCjmLIAGY/4Gs0LPAgAQRVgAAKIICwBAFGEBAIgiLAAAUYQFACCKsAAARBEWAIAowgIAEEVYAACiCAsAQBRhAQCIIiwAAFGEBQAgirAAAEQRFgCAKMICABBFWAAAoggLAEAUYQEAiCIsAABRhAUAIOqlRR3IzLYkDSW13X1/pKzj7rtFZQCAai2kZ2FmHUkDdz+UNDCzTihTKBsWlS2ifgCA8y1yGGon/L/t7n1JN5X0ICRpIKlbUAYAqNhCwiKEw8DMvpV0GopbuceStF5QBgCo2ELmLMyspaTHcEfSPTPrX2BfPUk9SdrY2NDe1b3ZVHLJXb50mbYIaIsMbZGhLTLb2p74PYua4O5JuuPuQzMbSEonsdfC8y1JJ+HxuLIzYXJ8X5KutK/49teTf+gm2ru6J9oiQVtkaIsMbXExCz911t0PlATFfUntUNyWdFhQBgCo2EJ6Fu6+a2a3Qq9iLXfq7KaZdSUNw7zG2DIAQLUWdp3FuGsm0tCIlQEAqsUV3ACAKMICABBFWAAAoggLAEAUYQEAiCIsAABR0VNnzezvlSzq11KysN+Bu38z53oBAGqk1HUW7v6NmR25+3Uz+7Wkb+ZbLQBAnZQZhrLQu/gibPsc6wMAqKEyYXEq6R8k3Qm9iuvzrRIAoG6iw1Du/kTSE0kKazuxuB8ArJhoz8LM3k0fh+B4Z641AgDUTmHPIgw53ZC0aWYfSjJJ3yo5M+o/FlM9AEAdFIaFu39mZoeSNt09ndyWmb2ykJoBAGrj3DkLd//OzE7N7E4oMklvSfrV3GsGAKiNMtdZdBVuYxpszakuAICaKhMWx+7+LN0ws4dzrA8AoIbKhMVtM9tRcr2FSfpbST+ba60AALVSJix2Ria4OXUWAFZM9DqLfFAET+dUFwBATZVZdfZOflPJRXks+QEAK6TMMJRJuhsetyUdza86AIA6KrM21O3c5rOwAi0AYIWUGYb6XMmy5OlyH0eSvpxzvQAANTLx2VAAgNVT6mwoM/uNmd03s+1FVAoAUC9llij/J0l9SbclPSEwAGD1lBmGepYbhnpmZvOsDwCghsqERdvMXMl9LNpKVp1lDgMAVkiZOYt7kq5J2pV0w9335l4rAECtlDl19gNJcvf3zewnZvauu3OnPABYIWWGoZ66+5fS2c2QpjqQmXWUDGPJ3Q9C2ZakoaSOu+8WlQEAqhUdhpJ0zczeNbOfm9m7mn5dqE9CSLTNrBPCQ+5+KGlYVDblsQAAM1RmzuL3ktYlfSSp7e6fTHqQ0Fs4Cvvbdfe+pJtKehBSMnneLSgDAFSszDBUOsl97wLHuS6dDUV1w/BSS8kNlVLrBWXPMbOepJ4kbWxsaO8q8+2SdPnSZdoioC0ytEWGtshsa/LL5UqFxYycuHvfzLqhpzEVd99XuCf4lfYV3/6aawQlae/qnmiLBG2RoS0ytMXFLCosTpQMK0nJMNP18P+1UNYKr1FBGQCgQmPnLMKE9iszPM6BwplQSkLgSNL9XFlb0mFBGQCgYkUT3Ovu/r2UBEf+iWnuZ+HuAyVnN22FfR+ESW6ZWVfS0N3748omPRYAYPaKhqFOzezT8LhtZjeV3M9CSpb7+NmkBwpzDVLSyxgtG/c6AEBNjA0Ld/9M0meSZGZvufuT9Dkze2tBdQMA1ESZ26o+MbPfSNqUdMTaUACwesrcz+IDcT8LAFhpZU6dHXA/CwBYbdzPAgAQxf0sAABRZdeG+v28KwIAqK8yS5QDAFYcYQEAiCpz6uz2jNeJAgAsmTI9i0G6TpQkmdnP51gfAEANlZng/sjMdpRcmGeacm0oAMDyKhMWd8NaUZIkM3tnjvUBANRQmbBYM7M7Sm5EtC/J51slAEDdlAmLp+5+L6w++z3LfQDA6ikTFtdCQLTCsh/XJH0511oBAGqlTFjsS/pEybpQ/8XV3ACwesrcz+I7SbfN7Kfu/s38qwQAqJsyF+W9Y2aPJe2Y2X9Ocw9uAMByKzMM1XL3zXTDzH49x/oAAGqozBXc30a2AQANN7ZnYWafKrmewpTc/OhE0neSWpKeirOhAGClFA1D3c9ftQ0AWG1jw2JkeY9XJG0q6VVIyd3y/nkBdQMA1ESZCe5dSce57fU51QUAUFNlwuKBu3+RbpjZwznWBwBQQ6VOnTWz+5IGSia835F0fa61AgDUSpmwaEu6nds+mVNdAAA1VSYsjt39WbrBMBQArJ4yF+XdNrOjsNTH55IeXOSAZnYr93jLzLqxMgBAtcr0LHZGJrinvlOemXUl3ZC0a2YdSXL3QzNrp9ujZe7en/Z4AIDZiPYs8kERPJ3RsW9KGobHA0ndgjIAQMWiPYtwS9WzTU15NlToJRya2cehqCXpNPeS9YIyAEDFygxDmaS74XFb0tGUx1qb8n0AgIqVuflR/rTZZ9PczyLtVYwUD5UFSEvZKbnjyvL76knqSdLGxob2ru5NWp1GunzpMm0R0BYZ2iJDW2S2tT3xe8oMQ32uZAVaKfmCP9Lkq862zaytJAjWwmT2fSVrTklJjyUNk3FlZ9x9X8mtXnWlfcW3v578QzfR3tU90RYJ2iJDW2Roi4uZ+Gyoabj7gXTWK2iFsr6ZbYYzpIbpWU/jygAA1Sq6n8W/Skonoo/CyrNn3P37aQ6W7xXktse9BgBQI0Wnzq4rGTJK/7+mZPXZZ5LeX0zVAAB1UTQM9YG7fydJZvaWpHtK5iraaTkAYHUU3fzoOzP7qZLexE8kvZdfHwoAsFrGDkOZ2e8kPZT0b+7+q5GFBCc+dRYAsNyKhqG6kj6SZCEcTMnpsybpd+J+FgCwUs6bs3gy7gkzuz2uHADQXGOHoYqCIjx3oWsuAADLp8z9LAAAK46wAABEERYAgCjCAgAQRVgAAKIICwBAFGEBAIgiLAAAUYQFACCKsAAARBEWAIAowgIAEEVYAACiCAsAQBRhAQCIIiwAAFGEBQAgirAAAEQRFgCAKMICABBFWAAAoggLAEAUYQEAiCIsAABRhAUAIOqlRR3IzHrh4evu/nEo25I0lNRx992iMgBAtRYSFmbWlXTo7gMzexC2TyXJ3Q/NrG1mnfT1+TJ37y+ijgCAYosahmpL6obHg7B9U0kPIi3rFpQBACq2kJ6Fu+/nNjuS7ku6ptC7CNYltcaUAQAqtrA5C0kKQ019d++b2bT76EnqSdLGxob2ru7NsIbL6/Kly7RFQFtkaIsMbZHZ1vbE71loWEjqppPbSoab1sLjlqST8Hhc2ZnQS9mXpCvtK7799eQfuon2ru6JtkjQFhnaIkNbXMxCz4bKnfHUVTIUtRmebks6DI/HlQEAKrSQCe4QDjtm9tTMvpWk9Cyn8NzQ3fvjyhZRPwDA+RY1wX0o6W/GlO+XKQMAVIsruAEAUYQFACCKsAAARBEWAIAowgIAEEVYAACiCAsAQBRhAQCIIiwAAFGEBQAgirAAAEQRFgCAKMICABBFWAAAoggLAEAUYQEAiCIsAABRhAUAIIqwAABEERYAgCjCAgAQRVgAAKIICwBAFGEBAIgiLAAAUYQFACCKsAAARBEWAIAowgIAEEVYAACiXqq6AqPMbEvSUFLH3Xerrg8AoGY9CzPrSJK7H0oaptsAgGrVKiwk3VTSq5CkgaRuhXUBAAR1C4uWpNPc9npVFQEAZMzdq67DGTO7K+muu/fNrCvphrt/PPKanqRe2Pw7Sf+94GrW1YakP1ddiZqgLTK0RYa2yLzp7n89yRvqNsE9lLQWHrcknYy+wN33Je1Lkpk9dvfNxVWvvmiLDG2RoS0ytEXGzB5P+p66DUPdl9QOj9uSDiusCwAgqFVYuHtfksIQ1DDdBgBUq27DUOkwU1mTvLbpaIsMbZGhLTK0RWbitqjVBDcAoJ5qNQwFTMrMtsysa2a3Iq8793mgqc67uLns74+0RGER+1CTfOhlV6IteuG/nUXXbZHKXvGfnoa9yLotWomfiU54zdai67ZoE3xX9MY93yThZ/9BwXMTrZixFGER+1CrtExIibboSjoMcz/tsN1UXPGv0j//n7j7gZKfiVX+/ehIGoTnB01uC+msHQYFT0/0+7MUYaH4h1qlL43YZ23nygbKTkVuougV/2bWCb8wTXbuz0ToTRxJkrvvNvwswzLfBWmPu93wtoiZaMWMZQmL2IdapWVCzv2s7r6fO6OsI2nii28aZi3+kqUX+/m/Lmk9DEU1fZg29vvRV9Kj+HbkdYhYlrDAhEL3ut/wv5zOveJ/RXoVZZ3krmNq/LxFETNrKfm5uSPpnpk1uecdE10xI29ZwiL2oSb60Euu7Gftjq6r1UBjr/gPXwhSMj6/FSYy1xo8Ph37mThRNm49VNLTaKpYW/Qk3Qn3yvlA0soFZ+73Y6IVM5YlLGJfCqu0TEisLWRmvfTGUU2e4D7niv8vwvMHYVJXSr44mir2M3GQe76lMH/RUNHfj1T42RiOljdJ6EVujvQm09+PiVbMWJqL8sJfhwMlk1LpQoLH7n6t6PmmOq8tcqfKnSr5C+s9hmKar+Tvx6mk603vcZZoi1vh+bWmf1fM0tKEBQCgOssyDAUAqBBhAQCIIiwAAFGEBQAgirAAAEQRFgCAKMICABBVu9uqAssuXC3bVnLh13Uly0s0+kphNB89C2CGzKw9sozEfYICTUBYADPk7umCfdeU3ISqyav+YoUQFsAM5Va2bbt7o+/aiNXCnAUwW91wj4SHYVFHbrCDRmAhQQBAFMNQAIAowgIAEEVYAACiCAsAQBRhAQCIIiwAAFGEBQAg6v8BnA4uazqvtooAAAAASUVORK5CYII=\n", + "image/png": "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\n", "text/plain": [ "
    " ] @@ -2402,12 +2402,12 @@ "name": "stdout", "output_type": "stream", "text": [ - "-0.04067115014325762 0.9243683507629109\n" + "0.054334900100894076 1.0092227336467725\n" ] }, { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
    " ] diff --git a/doc/src/LectureNotes/_build/jupyter_execute/chapter2_178_0.png b/doc/src/LectureNotes/_build/jupyter_execute/chapter2_178_0.png index 80d8fd1120888e4b16309b60290b1dbd6e3fd02f..e1fe92955b1372f4d38aea8abb355b44046a13c6 100644 GIT binary patch literal 5163 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 ZQ6>fYelLH*Jpv+sv^5N%Wsj^Q{|lkKBoqJu literal 10572 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 diff --git a/doc/src/LectureNotes/_build/jupyter_execute/chapter3.ipynb b/doc/src/LectureNotes/_build/jupyter_execute/chapter3.ipynb index 713a567dc..b64d4a556 100644 --- a/doc/src/LectureNotes/_build/jupyter_execute/chapter3.ipynb +++ b/doc/src/LectureNotes/_build/jupyter_execute/chapter3.ipynb @@ -440,8 +440,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "[-0.36370241 0.57281693 0.31446735 -1.74797657 -1.47723222 -1.24113195\n", - " -0.714415 -1.26679543 -0.27301697 0.6793838 ]\n" + "[-2.57325284 -1.11383985 0.52678895 -0.47530983 -0.1807752 0.52810513\n", + " -1.50448048 0.33629261 -1.41402417 -0.39264297]\n" ] } ], diff --git a/doc/src/LectureNotes/_build/jupyter_execute/chapter4.ipynb b/doc/src/LectureNotes/_build/jupyter_execute/chapter4.ipynb index 90089505d..ade2177c1 100644 --- a/doc/src/LectureNotes/_build/jupyter_execute/chapter4.ipynb +++ b/doc/src/LectureNotes/_build/jupyter_execute/chapter4.ipynb @@ -1750,13 +1750,13 @@ "output_type": "stream", "text": [ "Training R2\n", - "0.9999854211447763\n", + "0.9999863998248437\n", "Training MSE\n", - "6.298065171189058\n", + "6.805697972778246\n", "Test R2\n", - "0.9999855160996954\n", + "0.9999773431421539\n", "Test MSE\n", - "7.1872710004915445\n" + "4.962804899252701\n" ] } ], @@ -2041,7 +2041,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 16, @@ -2353,27 +2353,27 @@ "MSE before scaling: 0.00\n", "R2 score before scaling 0.99\n", "Feature min values before scaling:\n", - " [1.00000000e+00 1.00405815e-03 3.33637629e-03 1.00813277e-06\n", - " 3.34991581e-06 1.11314068e-05 1.01222393e-09 3.36351028e-09\n", - " 1.11765797e-08 3.71385616e-08 1.01633169e-12 3.37715992e-12\n", - " 1.12219360e-11 3.72892756e-11 1.23908217e-10 1.02045611e-15\n", - " 3.39086494e-15 1.12674763e-14 3.74406011e-14 1.24411055e-13\n", - " 4.13404436e-13]\n", + " [1.00000000e+00 4.73875395e-04 1.62035199e-03 2.24557890e-07\n", + " 7.67844938e-07 2.62554056e-06 1.06412459e-10 3.63862824e-10\n", + " 1.24417907e-09 4.25429987e-09 5.04262460e-14 1.72425639e-13\n", + " 5.89585850e-13 2.01600803e-12 6.89346326e-12 2.38957572e-17\n", + " 8.17082679e-17 2.79390227e-16 9.55336603e-16 3.26664263e-15\n", + " 1.11698369e-14]\n", "Feature max values before scaling:\n", - " [1. 0.99985941 0.99746704 0.99971883 0.99732681 0.99494051\n", - " 0.99957828 0.99718659 0.99480062 0.99242037 0.99943775 0.99704639\n", - " 0.99466076 0.99228084 0.98990661 0.99929723 0.99690622 0.99452092\n", - " 0.99214133 0.98976744 0.98739922]\n", + " [1. 0.99909628 0.99839582 0.99819339 0.99749355 0.99679421\n", + " 0.9972913 0.9965921 0.9958934 0.99519518 0.99639003 0.99569147\n", + " 0.99499339 0.9942958 0.99359871 0.99548958 0.99479165 0.9940942\n", + " 0.99339724 0.99270078 0.9920048 ]\n", "Feature min values after scaling:\n", - " [ 0. -1.79147165 -1.7862625 -1.1584177 -1.16385875 -1.16903529\n", - " -0.9111456 -0.91736698 -0.92355665 -0.92969742 -0.77335697 -0.77892437\n", - " -0.78453895 -0.79019355 -0.79588019 -0.6835654 -0.68819847 -0.69289982\n", - " -0.69766733 -0.70249839 -0.70738995]\n", + " [ 0. -1.71950803 -1.74066137 -1.12098766 -1.13008641 -1.13882035\n", + " -0.88585974 -0.89326197 -0.90038244 -0.90721064 -0.75127414 -0.7579701\n", + " -0.76446674 -0.77075409 -0.77682281 -0.6609642 -0.66708788 -0.67306513\n", + " -0.67888673 -0.68454393 -0.69002844]\n", "Feature max values after scaling:\n", - " [0. 1.702894 1.66035996 2.19865243 2.16709986 2.13442274\n", - " 2.59980117 2.57660557 2.55254863 2.52759568 2.94821185 2.93060502\n", - " 2.91238065 2.89350743 2.8739528 3.26264844 3.24876534 3.23444979\n", - " 3.21967888 3.20442837 3.18867266]\n", + " [0. 1.75646602 1.64607128 2.30045841 2.19871569 2.09765001\n", + " 2.75230652 2.65433203 2.55670018 2.45952257 3.14599634 3.05079367\n", + " 2.95561862 2.86057207 2.76575615 3.49778287 3.40509201 3.31215604\n", + " 3.21906542 3.12591311 3.03279417]\n", "MSE after scaling: 0.00\n", "R2 score for scaled data: 0.99\n" ] @@ -3623,10 +3623,10 @@ "name": "stdout", "output_type": "stream", "text": [ - "0.012893004091480358\n", - "4.036145788156587\n", - "[[0.84855665 2.43974599]\n", - " [2.43974599 8.11534493]]\n" + "0.13175867934658783\n", + "4.345411944186196\n", + "[[ 0.99370801 2.9978939 ]\n", + " [ 2.9978939 10.13547884]]\n" ] } ], @@ -3667,10 +3667,10 @@ "name": "stdout", "output_type": "stream", "text": [ - "0.08534074521320528\n", - "1.494502745126961\n", - "[[1. 0.54933577]\n", - " [0.54933577 1. ]]\n" + "0.07991186451576213\n", + "1.435691712612069\n", + "[[1. 0.69854547]\n", + " [0.69854547 1. ]]\n" ] } ], @@ -3724,30 +3724,30 @@ "name": "stdout", "output_type": "stream", "text": [ - "[[ 0.01162555 -0.25149407]\n", - " [ 0.32741231 1.04530907]\n", - " [-0.5034199 -1.57100552]\n", - " [ 1.67655824 6.4270278 ]\n", - " [-2.84730394 -8.72396496]\n", - " [ 0.71213034 4.19282793]\n", - " [ 0.6767474 0.58026128]\n", - " [ 0.05853864 -0.83340221]\n", - " [-0.2484568 -1.90992384]\n", - " [ 0.13616818 1.04436453]]\n", + "[[-0.35269644 -0.0359786 ]\n", + " [ 0.91157022 2.38965729]\n", + " [-0.68652791 -1.88459927]\n", + " [ 0.73533968 3.47606953]\n", + " [-0.59301581 -2.13696995]\n", + " [-0.37142517 -1.24766758]\n", + " [-0.12619024 -0.45164224]\n", + " [-1.74004988 -5.63952222]\n", + " [ 1.7194963 3.93948143]\n", + " [ 0.50349923 1.59117161]]\n", " 0 1\n", - "0 0.011626 -0.251494\n", - "1 0.327412 1.045309\n", - "2 -0.503420 -1.571006\n", - "3 1.676558 6.427028\n", - "4 -2.847304 -8.723965\n", - "5 0.712130 4.192828\n", - "6 0.676747 0.580261\n", - "7 0.058539 -0.833402\n", - "8 -0.248457 -1.909924\n", - "9 0.136168 1.044365\n", - " 0 1\n", - "0 1.0000 0.9645\n", - "1 0.9645 1.0000\n" + "0 -0.352696 -0.035979\n", + "1 0.911570 2.389657\n", + "2 -0.686528 -1.884599\n", + "3 0.735340 3.476070\n", + "4 -0.593016 -2.136970\n", + "5 -0.371425 -1.247668\n", + "6 -0.126190 -0.451642\n", + "7 -1.740050 -5.639522\n", + "8 1.719496 3.939481\n", + "9 0.503499 1.591172\n", + " 0 1\n", + "0 1.000000 0.970341\n", + "1 0.970341 1.000000\n" ] } ], @@ -3789,37 +3789,37 @@ "text": [ " 0 1 2 3 4 5 6 7 \\\n", "0 0.0 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 \n", - "1 0.0 0.067129 0.071920 0.066488 0.067965 0.069289 0.058136 0.058890 \n", - "2 0.0 0.071920 0.077903 0.072255 0.074320 0.076177 0.063662 0.064746 \n", - "3 0.0 0.066488 0.072255 0.070120 0.072252 0.074165 0.064037 0.065174 \n", - "4 0.0 0.067965 0.074320 0.072252 0.074718 0.076940 0.066275 0.067613 \n", - "5 0.0 0.069289 0.076177 0.074165 0.076940 0.079448 0.068289 0.069815 \n", - "6 0.0 0.058136 0.063662 0.064037 0.066275 0.068289 0.060371 0.061607 \n", - "7 0.0 0.058890 0.064746 0.065174 0.067613 0.069815 0.061607 0.062970 \n", - "8 0.0 0.059633 0.065798 0.066265 0.068894 0.071275 0.062784 0.064269 \n", - "9 0.0 0.060376 0.066836 0.067327 0.070137 0.072691 0.063919 0.065523 \n", - "10 0.0 0.049985 0.054935 0.056831 0.058951 0.060864 0.054874 0.056079 \n", - "11 0.0 0.050516 0.055671 0.057601 0.059851 0.061888 0.055712 0.057004 \n", - "12 0.0 0.051063 0.056417 0.058372 0.060747 0.062904 0.056542 0.057918 \n", - "13 0.0 0.051629 0.057177 0.059149 0.061648 0.063923 0.057370 0.058831 \n", - "14 0.0 0.052218 0.057957 0.059939 0.062558 0.064951 0.058203 0.059747 \n", + "1 0.0 0.080229 0.080679 0.087554 0.086417 0.085175 0.083141 0.081602 \n", + "2 0.0 0.080679 0.082259 0.089654 0.089067 0.088307 0.086044 0.084862 \n", + "3 0.0 0.087554 0.089654 0.100625 0.100093 0.099390 0.098651 0.097358 \n", + "4 0.0 0.086417 0.089067 0.100093 0.099970 0.099642 0.098705 0.097743 \n", + "5 0.0 0.085175 0.088307 0.099390 0.099642 0.099662 0.098566 0.097913 \n", + "6 0.0 0.083141 0.086044 0.098651 0.098705 0.098566 0.098847 0.098003 \n", + "7 0.0 0.081602 0.084862 0.097358 0.097743 0.097913 0.098003 0.097449 \n", + "8 0.0 0.080151 0.083732 0.096133 0.096822 0.097279 0.097201 0.096917 \n", + "9 0.0 0.078794 0.082667 0.094987 0.095957 0.096680 0.096453 0.096419 \n", + "10 0.0 0.076701 0.079987 0.093012 0.093523 0.093835 0.094703 0.094277 \n", + "11 0.0 0.075255 0.078808 0.091666 0.092450 0.093019 0.093698 0.093521 \n", + "12 0.0 0.073932 0.077731 0.090440 0.091477 0.092285 0.092793 0.092846 \n", + "13 0.0 0.072727 0.076752 0.089333 0.090604 0.091633 0.091986 0.092253 \n", + "14 0.0 0.071634 0.075869 0.088337 0.089826 0.091062 0.091273 0.091739 \n", "\n", " 8 9 10 11 12 13 14 \n", "0 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 \n", - "1 0.059633 0.060376 0.049985 0.050516 0.051063 0.051629 0.052218 \n", - "2 0.065798 0.066836 0.054935 0.055671 0.056417 0.057177 0.057957 \n", - "3 0.066265 0.067327 0.056831 0.057601 0.058372 0.059149 0.059939 \n", - "4 0.068894 0.070137 0.058951 0.059851 0.060747 0.061648 0.062558 \n", - "5 0.071275 0.072691 0.060864 0.061888 0.062904 0.063923 0.064951 \n", - "6 0.062784 0.063919 0.054874 0.055712 0.056542 0.057370 0.058203 \n", - "7 0.064269 0.065523 0.056079 0.057004 0.057918 0.058831 0.059747 \n", - "8 0.065687 0.067056 0.057224 0.058233 0.059231 0.060226 0.061224 \n", - "9 0.067056 0.068537 0.058326 0.059418 0.060497 0.061573 0.062652 \n", - "10 0.057224 0.058326 0.050807 0.051634 0.052448 0.053259 0.054070 \n", - "11 0.058233 0.059418 0.051634 0.052522 0.053398 0.054270 0.055142 \n", - "12 0.059231 0.060497 0.052448 0.053398 0.054336 0.055268 0.056202 \n", - "13 0.060226 0.061573 0.053259 0.054270 0.055268 0.056262 0.057257 \n", - "14 0.061224 0.062652 0.054070 0.055142 0.056202 0.057257 0.058313 \n" + "1 0.080151 0.078794 0.076701 0.075255 0.073932 0.072727 0.071634 \n", + "2 0.083732 0.082667 0.079987 0.078808 0.077731 0.076752 0.075869 \n", + "3 0.096133 0.094987 0.093012 0.091666 0.090440 0.089333 0.088337 \n", + "4 0.096822 0.095957 0.093523 0.092450 0.091477 0.090604 0.089826 \n", + "5 0.097279 0.096680 0.093835 0.093019 0.092285 0.091633 0.091062 \n", + "6 0.097201 0.096453 0.094703 0.093698 0.092793 0.091986 0.091273 \n", + "7 0.096917 0.096419 0.094277 0.093521 0.092846 0.092253 0.091739 \n", + "8 0.096634 0.096370 0.093871 0.093345 0.092885 0.092491 0.092163 \n", + "9 0.096370 0.096324 0.093496 0.093186 0.092926 0.092718 0.092564 \n", + "10 0.093871 0.093496 0.091863 0.091208 0.090630 0.090128 0.089699 \n", + "11 0.093345 0.093186 0.091208 0.090769 0.090391 0.090075 0.089820 \n", + "12 0.092885 0.092926 0.090630 0.090391 0.090200 0.090057 0.089963 \n", + "13 0.092491 0.092718 0.090128 0.090075 0.090057 0.090076 0.090133 \n", + "14 0.092163 0.092564 0.089699 0.089820 0.089963 0.090133 0.090330 \n" ] } ], @@ -4405,10 +4405,10 @@ "name": "stdout", "output_type": "stream", "text": [ - "Runtime: 0.410282 sec\n", + "Runtime: 0.396214 sec\n", "Jackknife Statistics :\n", "original bias std. error\n", - " 100.139 100.129 0.148994\n" + " 99.9535 99.9435 0.150002\n" ] } ], @@ -4559,10 +4559,10 @@ "name": "stdout", "output_type": "stream", "text": [ - "Runtime: 2.02233 sec\n", + "Runtime: 2.03201 sec\n", "Bootstrap Statistics :\n", "original bias std. error\n", - " 100.067 14.9691 100.07 0.150582\n" + " 100.07 15.041 100.069 0.149551\n" ] }, { @@ -4584,7 +4584,7 @@ }, { "data": { - "image/png": "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nve8J6+++uqJO5lCDfcaJclf/dVf5YILLsjpp59+ws6jZMO5RrVaLd/5zndy/fXXJ0mam5vzF3/xFyf2hE4QcTvKZs2alaeffjo///nP09PTkyeffDKzZ8/O888/n1dffTV9fX1pb2/Pnj17Drvdyy+/nN/4jd/ImjVr8uEPfzi33HJLJk6cOEpnUa63uz5J8slPfjJ/8zd/k4suuigPPPBAPv7xj4/CGZTrnnvuyfnnnz/w9e7du1OpVAa+rlar6ejoOOJ4pVJJR0fHEX/eL49raGjIqaeemtdee20Ez6Bsw70+ra2tqa+vT5J86dHJP1cAAAQySURBVEtfygc/+MERnP34MNxr9MILL+T73/9+/vAP/3BkJz6ODOca7d27N5MmTcrDDz+cj370o1m6dGn6+vpG/iRGgbgdZXPmzElra2uuvvrqXHfddTnvvPMyZcqULF++PDfddFOuuuqqvOc97zkiXHt7e/OjH/0o73//+/Otb30rH/jAB3LHHXeM0lmU6+2uT5L86Z/+aT796U/ne9/7XlavXp1PfOITqblmyojp7+9PXV3dwNe1Wi11dXVvefxYarVaJkzwEDlchmN9arVaPve5z+X555/PihUrRnzO483xrNGBAweyevXq3H333e43I+h41qivry979uxJU1NT/u7v/i433HBDbr755hM29xPJb+Ao6+rqyrx587Jp06Y89NBDmTRpUs4888y8973vzbe//e387d/+bc4888xMnz79sNtVKpWccsopufjii5P84p9Rt2/fPhqnULS3uz6vvfZafvrTnw68ujR//vx0dnbmZz/72WicxrgwderUw94E1tnZmWq1esTxPXv2DPwT3y+rVqsDr8D39vbm9ddfzzve8Y6Rn/g4cbzr09vbm0996lP593//9zz44INpamo6IfMeT45njZ577rns3bs3N910UxYvXjzwhuef/vSnJ2z+48HxrNHpp5+ehoaGLFq0KEly4YUX5o033sjevXtPzORPIHE7yl555ZX80R/9UXp7e7N///5s2LAhixcvzsc+9rF0dXXl4MGD+cY3vpFLL730sNv95m/+ZqZOnZotW7YkSZ566qnMmjVrNE6haG93fU4//fQ0NjbmueeeS5Js27Ytp5xySt75zneOxmmMC+ecc05efPHF7Ny5M319fdm8eXOam5szbdq0NDY2Ztu2bUmStra2NDc3H3H7uXPn5tvf/naS5PHHH8/5559vq88wOt71+dznPpeurq488MADwnaEHM8aXXTRRXnyySfT1taWtra2VKvVfO1rX8u73vWu0TiVYh3PGk2aNCkXXHBB/v7v/z5J8oMf/CBTpkwpcn90w2hPYLybOXNm5s2blw996EPp6+vLxz72sZx33nm5+eab89GPfjS9vb1ZtGjRwBtdVq5cmT/4gz/IBz7wgXz5y1/OXXfdlS984Qs59dRTs2bNmlE+m/Icz/rcd999+cxnPpPu7u6ccsop+fKXvzzKZ1O2xsbGrFmzJsuWLUtPT0/mzp2bBQsWJEnWrl2bVatWpaurK7NmzcrSpUuTJF/84hdTrVZzxRVX5JOf/GTuuOOOLFy4ME1NTVm7du1onk5xjmd95s+fn29+85s5++yz85GPfGTgz2xraxuVcynV8d6HGHnHu0b33HNP7rzzzjz88MNpaGjIunXritxGUlezCRAAgEKUl+sAAIxb4hYAgGKIWwAAiiFuAQAohrgFAKAY4hYAgGKIWwAAiiFuAQAoxv8HDT/LCJkO33EAAAAASUVORK5CYII=\n", + "image/png": "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b2/fiMePhhO1YlOtVquN5g/80pe+lF/+8pe58cYbkyTf/OY3s2vXrnzqU58azR8DAADHGfWrJQwNDaWp6f8v6lqtdszXAADQKKMet9OnT09PT8/w1z09PalWq6P9YwAA4DijHrdve9vb8r3vfS/PP/98Dh8+nG9/+9tpa2sb7R8DAADHGfU3lJ1//vm58cYbs2LFihw9ejRXXnll3vzmN4/2jwEAgOOM+hvKAABgrPj4XQAAiiFuAQAohrgFAKAY4hYAgGKI20J8+ctfzsKFC9Pe3p4vfvGLSZL7778/l112Wdrb23PbbbdlYGDguNvt27cv1113XS6//PIsW7Yszz777KmeetFe7bo8++yzufrqq7N06dJcc8012bt376meepF6e3uzZMmS4d/zHTt2pL29PQsWLMjGjRuHx+3evTsdHR1ZuHBh1qxZ87JrdPDgwVx33XV517velauvvvqY63szcqO5Jj/96U+H7zdXXXVVdu/efcrOozSjuS7/57//+7/zlre8xfPMSRjNdent7c2qVaty+eWX5/LLL8+PfvSjU3YeDVfjtPcv//IvtSVLltQOHTpUGxgYqF1//fW1L33pS7VLLrmk1t3dXavVarVbbrmldvfddx932/e97321++67r1ar1Wr33Xdf7WMf+9gpnXvJTmZdPvGJT9S+/vWv12q1Wu2ee+6prVq16pTOvUQ//OEPa0uWLKnNmTOn9swzz9QOHz5cmz9/fu0///M/a0ePHq1de+21te985zu1Wq1WW7x4ce3f/u3farVarfbnf/7nw2vxYrfeemvtS1/6Uq1Wq9UeeOAB951XYbTXZNmyZbVHH320VqvVajt27Ki1t7efsnMpyWivS61Wqw0ODtauvfba2ty5c2vPPPPMKTuXkoz2uqxevbr2uc99rlar1Wrbt2+vXXnllafuZBrMK7cF+PGPf5zf+73fy7Rp0zJx4sRccsklufPOOzN37tzhT4e79NJL84//+I/H3O7555/PT37ykyxbtixJcsUVV+TjH//4KZ9/qV7tuiS/+hjr3t7eJMnhw4czZcqUUzr3Em3atCm33HLL8L/9rl27MmvWrMycOTPNzc1pb29PV1dX9u7dm76+vsydOzdJ0tHRka6uruP+vu985ztpb29PkixZsiT//M//nKNHj566EyrAaK/Je97znlxyySVJkje96U157rnnTt3JFGS01yVJ/vqv/zpve9vbcs4555yy8yjNaK5LrVbLt7/97Vx33XVJkra2tvzFX/zFqT2hBhK3BZgzZ04ee+yx/OIXv0h/f38eeeSRzJ07N0888USee+65DA4OpqurK/v37z/mds8880x+67d+K+vXr88VV1yRj370o5k0adIYnUV5Xu26JMnHPvaxfPWrX80ll1ySu+++Ox/84AfH4AzK8ulPfzoXX3zx8Nf79u1LpVIZ/rparaa7u/u445VKJd3d3cf9fS8e19zcnGnTpuX5559v4BmUZ7TXpKOjIxMnTkyS3HHHHXnnO000o9kAAAQpSURBVN/ZwNmXa7TX5cknn8z3v//9/NEf/VFjJ1640VyXAwcOZPLkybnvvvty1VVXZcWKFRkcHGz8SZwi4rYA8+bNS0dHR6655pp84AMfyEUXXZSpU6dm1apVueGGG3L11VfnTW9603HhOjAwkB//+Md561vfmm9961t5xzvekZtvvnmMzqI8r3ZdkuTP/uzP8slPfjLf/e53c+utt+YjH/lIaj5vZVQNDQ2lqalp+OtarZampqZfe/xEarVaJkzwkHoyRmNNarVaPvOZz+SJJ57I6tWrGz7nM8HJrMvhw4dz66235rbbbnP/GGUnsy6Dg4PZv39/Wltb87d/+7e5/vrr8+EPf/iUzb3R/KYVoLe3NwsWLMjWrVtz7733ZvLkyTn//PPz5je/OQ8++GC+8Y1v5Pzzz8/MmTOPuV2lUslZZ52VSy+9NMmv/tfqrl27xuIUivRq1+X555/Pz372s+FXnRYuXJienp78/Oc/H4vTKNb06dOPeRNYT09PqtXqccf3798//L8BX6xarQ6/6j4wMJAXXnghr3nNaxo/8YKd7JoMDAzkE5/4RP793/8999xzT1pbW0/JvEt3Muvy+OOP58CBA7nhhhuydOnS4Tcx/+xnPztl8y/VyazLOeeck+bm5ixZsiRJ8va3vz2//OUvc+DAgVMz+QYTtwV49tln88d//McZGBjIoUOHsnnz5ixdujTvf//709vbmyNHjuRrX/taLrvssmNu99u//duZPn16tm/fniR59NFHM2fOnLE4hSK92nU555xz0tLSkscffzxJsnPnzpx11lk599xzx+I0inXBBRfkqaeeyp49ezI4OJht27alra0tM2bMSEtLS3bu3Jkk6ezsTFtb23G3nz9/fh588MEkyUMPPZSLL77Ytp6TdLJr8pnPfCa9vb25++67he0oOpl1ueSSS/LII4+ks7MznZ2dqVar+fKXv5zXv/71Y3EqRTmZdZk8eXLe9ra35e/+7u+SJD/84Q8zderUYvZEN4/1BDh5s2fPzoIFC/Lud787g4ODef/735+LLrooH/7wh3PVVVdlYGAgS5YsGX7zy5o1a/IHf/AHecc73pEvfOELueWWW/K5z30u06ZNy/r168f4bMpxMuty55135lOf+lT6+vpy1lln5Qtf+MIYn015Wlpasn79+qxcuTL9/f2ZP39+Fi1alCTZsGFD1q5dm97e3syZMycrVqxIknz+859PtVrNe9/73nzsYx/LzTffnMWLF6e1tTUbNmwYy9MpwsmsycKFC/P1r389r3vd6/Ke97xn+O/s7Owck3MpycneV2iMk12XT3/601m3bl3uu+++NDc3Z+PGjcVsHWmq2cgHAEAhykh0AACIuAUAoCDiFgCAYohbAACKIW4BACiGuAUAoBjiFgCAYohbAACK8f8B30e+LYviLEgAAAAASUVORK5CYII=\n", "text/plain": [ "
    " ] diff --git a/doc/src/LectureNotes/_build/jupyter_execute/chapter4_278_2.png b/doc/src/LectureNotes/_build/jupyter_execute/chapter4_278_2.png index a56a44f786d799ad109574c1df0134ff3837804f..2abb9e89de9a668ec7cf1eea78dc2350403ce1fc 100644 GIT binary patch literal 9431 zcmb_i2Ut^Q+dfFuS_S?}6_jN^5L^(JvccAYk!1xzw#pLOgcSk=YZV8IG6h1YrGSVK zWreVUB4Aii0z?Q?Mue~T~dk_}uk6`2QyV6SgP_+PoG1 z5o+&?;(~+PLC4MpS^BvLg`N*|gM7{h`Fr~Xd3#>i72+0%^7Ql7P*GP=Kd|d!P>{ba z0`cqjDt>_;h-A6g8xXV$LLU9bDhxN(7x1_<^t?bozq(n%+Si4VVJWS?HTT{RFWO52 zeqy<0YItlhysmvozqk58}ymmrp^9XvW@D zw=<^OeQcX6ny*d_T2Eia%q;VULa^B#ffl3~44NILU{;>FYS_CNvuME7N39rU(ya13 zF9|`>>r5qCn;@w6;+G&KUmfXP2c6myuo*h6_Cgtg>i_4LgRx^z@wFyAE)(H;@nv?X z)MynuXSDWm|5N-1#09ekC6>COZOR;_BGw|iu=$5gW;#q-G?I^J`zBzv*DBi-Axy&5_k@sgdnA zB9iof2jW`zsbJgP{D~3;BB=uHpJy z&OKvUq_MGa|3YEtXc@!TB!2SEQ~9Z>DcdLKzB%OEtF0fhINdk??%m7hS2q{Cx2A2` zvPIK<41#92D#bE9@MuM1Z=lI^1*_1zyJ)u&e=e>#a+UMgsaiL*FW5#l{M`fn<&lK$ znn+CiNKU$MQ$;Xqezs05*E-*gmSZMj1TyAC{Fu1NQVez}#v!EJE!8kGJl=J<;dXbi zhXuG_QmTfBBC?0Upmla8X;lr0jI&tHy(CnEf{cs|Y50y_QN;562K>6i-F8%b+FoU) zh;sAz_X}bpub$P3;J>V03Vv?fY=Ggow*QP=eidVw$i!n*$bwaJrdG||?L4b}buN!O zFI7}l7W)mi)hkH^vypSNmRV9iQK2$IeHc!BWQyPkWkK#L?BKI4qM~D!13cgD%65sl z`0#xg&Lm}U@LZV>Be|@stmVF%yt1-#Hwont|8sG%hL4X=R_GzH`(KzZHBGITaJVZL zF(_4TcX2VAJ@z_P27)@CDJ2R) zr(*9pYJVC19ctv=;ErWc_h`#+de`ADBq*6l&jouWI6GFBeK)Zjef>quQD```e7*LS zPPWjOH^gp04Mvz>!Juq6RCN^8asn<@&VG}Bg*XvH%w6Iu8V*M$M{pmp% z+aM^5`SSHMt9=D71|rdF^1eb}sH59oln^GQ=aveH2%kZ3$lTyB0@iE&E^+8$Nmp^M z`^j4|deIt}jWIulS=y!1Y966p3={inN-h@*{dmvY1p1GVSpJnHBp)*J?%cklt}o+e zSaL5PT#1p=mXCJ1VGkYmp8xqqu(QSz3}~~bLD>Ecr2lCwet$3vt#GA~G?u0>;Ich^ z`JJ;CQS%Atp{o+}DcI$d@tGNFB>}#VIAUF3_Dbrx-*JK6jZko|7KP@FBWQ z_mXU@!-Eg`^dycpr)Y7HLeSt3jIB|e;>_L1!fH-W)oR~N8@+~8I@wdYAAnp_OR5H~ zw-?9ZaDsw^-Ddi$e+xR}6BCyvcYsbO&^_NPs~@Jy9&2rO=5;!c<~#E)0Z{Q9A@f<} z(|K0c8bNOaaN;pg6WJ(Du-Z31J?-1lA_NWYHZNBmdcGOaa#g}fo4b%??qXfX~ab&JQ+w2fFPRkb_g4~YD#O;JG;0&{)h-p?3CfBgTc@dX-HD*`1}ob z1i!{YQ`qTb?>bfArK1{yuHC;v*ArzSNmPM{MQh@AF=Gg)PgShFpWfc?uxMxkh3Wjo zI{x>}?)Me{`!gj2dZWfPGAXTE12~25r!K~zs~4Yp_Puv+c|cgpbYCUy_3L|p#DcDW zaEGL%ByWc>R7+6%shropSd#+h8?v2FPwC9JVHQ?SHysf(NL0#x+5q3D#0hOeWYxo;)9%L7~t-#-u=RWe#ehD`M&*%rIIfuusl zf2i_N5x=k_D=RDNq0_wzFe92SAHH+Ixu)u=2NbKf7R+RE!z!ruq25q270{T#;oDkc zBqkm(CI%6abkc2Uwe!-!zP`RjnGcm-i20V8p;a)=IFxZzWOr*5M zPujfYF@s!X8gexP9G%pB$;+*NW2J;hA2^>^XUIlKbxqAgKqrROO6`=*%*@D~uxe51 zcdf5Zfvc*iC!O>P4;Q_?pc!^=D}BT?Le*_DF+`vvleDC5{rzdW+w&iCY$DX&ZyV-3 zh><;MVPTQ1;+Q5_&J<7(*yZNQzDlkCz%Y!5zJj20uJE$vlL%V`%ly?Ds#w(QmELex z0Za}-sU^^>r-Qr8eC!L$-`@NURZyvT_ft?vNKQdP!H^PAJA&Nl(1?&u)AVJWqk)@qn|4J3TgY8;WgFPHZ%%sDC*&5won7! z2Qb?Ipng8-#=kF|wRNwp1}FQ0<;to!LlD{0-ZfQlRKgWw{Tcz=)Zq;1U*ktf^~)h#Z0R&F__ggIus*k zUSQpvW0t-%3TVN*vAcW+=97sdc+4~sg+hr+Yu|nL?3py^)}Pehmym!5sy~k#$k6mW z4I@Es(#9|Z&b-~)DBx-~s)LaUv6hS~8{QPq&-cL#^f zp9AtV<;!}X_=xvea;+PUmYzktJ0jOavoOklD|@E%QmN*_gKifuzH^JC5C5(+H|A!? zDdje&;ckfC_1EpyYP>=l4VW~woTxCp|LXls#5KIX{c{WK3T+ZZ6saCO(Q)AHlU;%p zf*=i##}BC)7#M(#4a_}r1!iI+FNGm^<4 z&nyBWPJf}p64qWDHf}8TVU(4Wmbw8p;pyo~Y0J<{P{_#0@bvQX`VgS+eKxU~RBEAP zW#IB?ipSd*H(+FdHy%Yb(AsZPXo|&R$EcZ^$8K%kjXdQ2=5DDMJ%>otLXEXhZf@KE zaj*QTQ%y-WgXWNz9iSWCJ+e_u%m28) zJMbn{zW`L@KIcq^yexTvldaQHyIh;vRQB0l@<(F#_|8(y}BM#YHJU>xC2^-2zXxJ2b#YuX7Z{2Y^^YQ z_Sr^umK<*nqs*syqB9>wcMKf`4XY`^!Y~z3c_pN8#dywRd!mY%5!e4xsU6_)9sg90 z_IXx;>{cz0`4LJgsMIKCXq1wL5ijVYagakI=>RVSF!rYYY77mK2NDVhY+YU5_Rh}E zwTmct0)hZr0d?4@mGNBmB37`tTxZ0sv)Y$5H2k5XcN6^v)Ef6Eodh<4F}kU?+0y`X zDW?QCt0Dp&lbX{Q!g3q2BP%Qd6)qxoPzGplsTi_NerJ0}N8*DA4?u~_gjUJIe4ucy zgK*kYhP8KgYgXy6e870rV;#W>8P~Ww!vxv(B6!Dly+F5U$noA87l$uQz@Y}%A=XZ# zX>fU-e*jQ$pXw<^tX9J;KGgdoi>FYx02V*;=`23rxmW-M9Uu5(!~Ss#aLyWPN08#b z2xQHeo!WAHuKvya8b*iOX0NsUD8IGtuz^16x%R=2OLxygmeEp;JiCMS4s=W(H+`POh4q)q)hCM z2fbUNyVT3(lThMKH&7wBa3Ig&M%x%s4SYfv8wkMm26zys=agsF-q&Yv({eo&ZDYMC z)dWN>D0@wAaDlZ6Fa-$)P6U`7Ec!f*3mp@l4KyEHeuipZ3Q{aI=?l<{TzL;ZTd;j= zMqhaE9B*||%+Kv%<41!pQtx=qn!)FI#%0JfB3j5CLEx-i!0Hzo(8c>&RKmgk8+`ag z9MjkjF!N@%Wgz3*+S))nuU<(Nh7M;;M2(hZXYXdw2~^O0X#)e9 zAdVide>#SYhtUAk9br%my1WQp1d=~P&8~Ae6q|4!-jhG5q^bw8YNHby!Mx`5w%EMz!l=9D z>()WDO@R2T7IvV_dS3(w=p>iBS#`TZwUkH9v~uKp!Gg&P)jF%svziVGL*}L7E^lIv zCYpgskH=RG*(M-~qBU;Xgg1}r{xa;@!q^&itS}0KaOOKtE87!&TP4U#^n;i&(!Q-GL~!JG zm^P2x5Rt+H8~A$TI%vV!@xg2A=t3;P%8pu|Zx9>aI}L^yevvGDb{f4(5eXv=F!Dy_ z<(6Mw_ca1W_(cm(Q;dt~bVA6ED30 zJo^0GV`AL)l$u0m{(K5)u0bk6VSqcPRSXQRhzZNgovm`h5Y)J1A%8a*7i8y+3lI}_ z1tBeT2zs>#go2g}6uSj=mi~dnXYpJ>ztsj`_+c1~`RbWS1l33oAu4Bx^TVz(04JB4 z`glRD#0)Hd8NOpNC|zlTa81}=?+5peK&H(HT0oaIQ1{0kX_^z1f~-XV2XsMSN136 z6KYoOvoIQgStLax-nd1~jFydK@R^XA{>Y}bEX^#Eihv1Eb=b+os(N+{QnED|hOb9w z@?mAdoNq=@9ilS2R#K9Z4;`_*g;GT1xJjvr3hC#r zzCK3)@1^#>r0kHzzEHVP#v+J#>FRVP!5Vx44mnS`$gRHFn}MO2yE_`r-LUAW;V%&A zfS*nQ&6!tVS2~f{R(;fnJ0#|1l6)YqHB}>*)1pD`06XT8ZiJ1RG7_+jyo}>y3mh?1 zrKK|wOg%v3tnI790;UG|Qv={i1so=p&#d#ByFly@_nIP-rp3=6ng= z6_Bk`W4Xu@cu}CuJ}e~?GmB7rDHjPQ;7k!w(Jt8E?g8^MFRDJfWv^aJd@QE|jOQvi zBx+3s|T7(JZb6yZ(leBQg)NrZF(BO85^>Q zseIpV!j2Ox#WnU$FEcZ#u#FFIJ~FU=o6QJp$nMR==7AJYAg@TW`uqD8C_{BI8g5OA zmb!~ueR@jvf{9`CESU#XqdE`uMpo?dyzoF^t18s8j+Y}i(Bu^tGxf|gv%0}M2Ycan z0S3BjyHmVM=%W;+%$7y6fX96;$NSDj$*KIcLyGW5QCFanNHaC7ft_b;-0E*`+aWFO z%|+t=@wN;C{oDk2p74AI%=6@49+PlP%(KjO?|gKIG;~cWaG}$NY33JB3mDQ>RlN)L zxDgG!nKT$;(T#fj_tO1p(6Mbl=@UX6<436cN$NbsB1(OLHyw&%6%fY&@SeD2=;vl7 z0wZ0X=Mw9~jKdkjJqq$%(RB81xcYGyGw^Rib}Dt`h7$fIkb+W%OpRxh$IT#r)-D6) z(UR*BINbVMGPuKf#S{z#ZECA_8of84DzhcBC3pqcwD-b157=kcK zIE8&pK(~7BG@AQ9V-lX6kBDb39p&=|1O`BOS%B4BP^wHq)migP!*R^o%ffK1ivVH{ zX{iY&J&g3+*oaQ>{2+G|#>U3rKsBW9l|P+*__7NX`&89pJX$ZI~88lebgz$AdB zSEu&qrUsKn;!WmX%E!U;W#BFW!)kdxg^Yt|$SwiMgMC;Pc`y8s67h+;RV z9rT*th@IWImbHk8q0OYxWczu5g(~26gyxk6R^yU)Q-C@vkeLxWW|_HS1x5maUA7*h zo1K@QOJ`|^{Wce46C6`uC@7!jhPATv;wtON*~gkZ6#m7zgEAdpfN zq$~xQVTytbiR_gC%90T_2`k|}k9s@2-urLwzwhhkqlRaM^PF>j-`{sUH_sXB34XTc zGYEnNQK!GX06`lIA!x(kwk_a@nlpkQ{I>~z5_NGK_(RxccLV&q-TkyF9)kG)0sr05 z!VFpi2UWdJUG_4---&I_Rd)@ui|%f* zbBaFV5zAi?lEL8T^v!cqdM)pK#;Gr3G^}b%pmt4dvDLyI;;KZ*QyuvwvJmtP*0JGr>PS$)eyXbgrK z<@w?|ub@Lx9_iX9EQ+pXHg`FO*A&d=YVSJKHoVY^_HUSuEG}YA=iKZq9GJGB%=`Uy zDigNm8zE@(POubT=rA@y=L9_Xp|6iW1EYHW`QLCb#YQ0{i7;2k@a-q6xet6TS32`F z(=7j}c_H?tBXYHSVPRp2tS?vRR>+Kz>V9miXPj*j*NGu%jZ#TL#yM7rp`qV!MS`O) zv^p6n7JJM@;+a}y-4)Z7+nTmnuc?ou%r?kZP-s&nGLf2dr<+sra(T zWNR+G(ovhp%=4@kMA$XN$i`{-VzCumHiO7v#%Trm7-wF-vpCT?S}&8MxpQ=*!qGzr zmHYPoy+76BN_;)okpl#%CeIeDzf?1<8u z%6P^yw||{my2_k3d~iWj#3;+SwYm8YljbYwQ+gr&eoBh1ox=_Y!g)3pu_h)O@N})% z>k?5LrY6$Xx1WCrzo}JY(goujDv3QPliLHTvVEmIt;X z@3GnJw$Al_J~u~4$6wl=Qw#PpQh18+(ds}9Gf*Gf{#MFJYN3WYHQkEEcLvB};- zc_NXx+{Y=8-ORsx=(#Yau_;lbwX-w!Wdb6txLB<<)j;3Y*0#W{H%7|I#YG>FpPxw- zgrL38k7J6pMk#ntrg!HsSir_)o$H>je-Iw|Q6~EZt#2{=n0di5EiEm0&37NWd|S$t z=Hq6ZWfq;Co!uCJLPkGUPJA{Bf`aXCQ}Kbz!?B}t4f4pzE{YmH*JH5eKn<7=B{3CO zk)-YoQ03=ECq@5VNr<$i9fTADLOoCAC4~^3D9TG2ao(H-hxKwkoUb!v8&R}bWDq`U zz>$-fYp2&&B<)m4>WYE>QlVKS3mmorRY10T75m5=WfmM2TeSH{MDb&r)3Nut9r33^ zcGy5QyFK`4-cA0IPz00ax5<&O@?01GZ!PJMVd9DiYdd)S9TMaE4_cJp&i+=Q14}o| zgFReZo~=ANh7(&@0?*&X+es0soXwTp@K2z#G2iIk;-v0&<`5!aY2(1@B=O*=rlFe9 z{nNWPTN57rcHt)x@$WdOTW!6?lDOFJ&&uy?c{OwEHI=uJHor2FGYX*AH6S3sv+iK* zP(d$NpFG+1_<)Q_cH=}&MbbPSiOev`kth;}ps@S4#*SIW4f^tBchiyrocCRz(P(+r zRp0*w1ll{h3rq@(He+Z~yi_r}$7McQh+Q{`9Yq9WUdZ%AJ z%4Z8IT3uZ|H;^+`9bs}b+RMvJ!0DtT#bf+-O{8@6nbs@ltG17H!?qq+4xG|fW`nwZ zxgzitmafHNPy(ll`7oHE<>BR)*z&vcO&Yj?%UQqcN?@P9yhBL!c*Vr5k79e5W8tL8>;am%GXtou{r7 zz#_G@w@24X1ReuOO`-sNIj-S5bryrcsNni2BO@bc6I5iw!^67^+|0@Mv$AAgzI=Hg z2=I#A0^gZG1+YT_4M#iH(#I4$1b#T$WCRT6W&8=3T-WYg(4_397{#WKtiK`Kv3l}N z^PMjN#8q_Z$UJ6Q;`Iy-S}6IOpe9yUVPCvCu59syNxlhy_hw zFbw7>X6EKfB;H!4MX_R8Sy?sG7J~fvLw@XaO!7Yzsl~obz7MKW#yIl@m(x$Jl_Y7( zm(H9laP1~b6?56W_|Zh)k(<& zqS}38uS;d3Z(m$5mL{81zT!-_<4iH(>hI4n&KP_9R`reFg9|7V|qZ9asTF`lWCvI+u4LEOG@38o^5<>F~ESm2e6Xh@jZ5i8%lJwM2vt(8Orrm2_h&^CiYO9lZdEhf)samq>iBoG!SJyqa-h$!M`6hjHbMyFw z1idvt&IU;0cseWLgo=s-D0$NYS5tr|ioR2fW0xQ8L*;@=hbb!nxVRH8#xZi1>XW;+ zK*5EIZ;RXj#dC3SA=?46&|Ty)xYO35i4rF$rXtWk2|?D|K-2zbpZhyH)yI0^FMg+P z^%XRvs-~Q%axh9v%T6Kp6A+==?U%Z7i@m3*02=Awqas`a!d_ z0vItU1Xq3N58C7}j^+KM2*SF@kM@aih`0f$it6~oKI9%ym9$>y{`bU*V74*L$RN$2 zZb(;X19bPfl318gl$coP+RihOLdSo&@gq$79T19KWCYFL!ZbdJwTl0NUwC8!vmQXU zo9M^_6NI^Y5}71y<+tCwz!gPi1g)})K~tT7whMh9v_bC5;)g!<6}F#K z&Ka)SDtQ)A0QM9!p}f2tCeTU_jV~6)T3cVex*Zb}^Q5rQu`}CpY-*}$vO6zIDl03? z35S#XKy`cn0m~P8;+Vc^k-H7d4}joEyO1tGs4&Y)O-UKNF&KU3pt!hrHPQuwmcHDx zMPnw$99vh5iWSF+t3f{b$v&$(Fi0Hap8fycZbgpt-2Mntlou^BNUV zM~qVK`bz!5sL(_rxAGp)6&Eww&nBv$NK8!RtL02~M>*%K-`~z+_D1t~J-4w+5*Lpe zj7>6-J*@+W4GT`pK`;Eg6`APT_$ZbKwp3JpLdoVN^E^gCYoy?siIxAs4CAc&s*tVt znSrXcdE`1i=9nq@Pf>zuUlj;)|Du*K>;oEpcR4Xojy9Rw*4gO@1`N+w-*S_$1CWT|aU))S(odS7?Bdm8^*??7z9@X1pc(}I z+PNEb;esJS!hUnNe81=W+Uaj83Q8Cu{yc_xb{Dv*H1ptRXZF>Ay!1CK@{^r{Sj$)^2)8)r3iWK;T&sGg9a-kBEiGiY>o7~a`D}eByY6&!bTm?tNT3$Z;&9V18uvm_-_Sh|8ekEc+=W*E z$;Y*GEF4J#x%OHJ?opYSAAiN^Cy^vbYqP*4;fFm8@({ZhM~9oZbduj!z$=>Q%=u8s zpL>|6U-YaM_qA)ekAhu=pozjD8Tqn>3l5FizO^ZSZSbDmlQ+0z9Clzn==o@qq}T=c0}j z_4~7fC?E@aj0Qw9cZT5xUmv&Dqzu+It_Ub%3xTLN#}*%isnXLQ_~$3{=&5;m_<>b` z17HBaY#F!tf5CxnV7TT_Rc~du9sy4zM^#JS8(-p!&tCy0<+s>wf}ekhaD+)as9y3A z1>aP6OTPSGqK0p3PL6y60%wTF<5LY1Vrpt?Tzd;-Q7s)EF+eZasDBBp#uD3d&(%&6 zw-c^+pa!-?$eQL#0p4GiYv0h)+8R}iA9bkuelv=k@6zee{>!DY@$vdh(>z#g-AT}b zpf$2>4eOUn8My!-Fw14(Vh9NjR{*=+k8G-E=>iZG`r^xa=wF?_k9V!W_#CbBW~W!r z-LqIP;myIxGmYDA+ki~|RawIPZdM5~shup6vJ z{-ue4&gaCU}v4(!1*c^jaAc<|$TKb|(|rrUNP%f9{p^FLE;o=5{ENMCR9WMnyKw#%l4bW(`T=5W@;nVAeB8zMI*bUc5`*RmN@x0|x z$Hnn>rz@}MkbCJNgG_Y8T){Vy{a({=CMBzuD=&LDx^1T;*9qB0Z+jSEC~--`SY2JhJH8Qm%YI03?u*}w8w z9g0HlSmXTa95(*bIgG2?-tn$v7m6E!gq=UTW8K!%w)!@5pEx999$GrO8-i+%{(Hxr z@P!EU1>8sXTOKO?t@Lh!GWh9h*kWDIqj7*sJ@D=0|3)3Zo}*DN#v3M(>%v1;^Su+j zAQ93tS?Oq)9h4iFOx)+ITzZ!e{5}c@#2)E*zr|s-Ub$Tg{0xhOpn21|TZo@FK+=d_ z;H&&TyMPTyffa+Ib&Z-!`$RK9q0bcbU7I+1JM7da8O!gyjCaI*My(L4yy5cBBitdU zVX^P~K`;ZsJ7M$lmGDjXtJ@;3zpLPCnZmGNlGl{Jglubn9i#iEOH~i|)FX`!RxG6* zg>?JDXeBB{qdsOmHgwtQda-9vaP$3>BF26Dwm@Nre)lBsNNwxS$$#GbE1gk|1NdWo z)?Y*TMi*c)uZO;LT=>?|>-E&t&z6dtO6f-t4z? z4dBV#FXZXPVn$Lb|8=^;Wcq@QRlv>&lhGma^_)ZQHWG-G^9Ur1jh_;Qf|F;R1f*kk zrvGe^pfW6jSw0gG7zlEY&Y@p2viIDS)CmnbzlEy958ZX`8Z1ajIRNxZLrSD}JSyst zeI5DWGP9q{Tw~+b+3xEPqn@6_n6lKmVrx)~6?1{vUu=Qgy{aV&;fQ9nf1Ou4C_a6f z409P4i?#erTKo9JUi7_l2!@e*su4PoQj@&t3K|Dm{?-#dKsNIFnf;;*RBmU+h@d}V zap6da1l7(WTv8t|iW{tLv8d@?daN89MO?ca-{2>Pj2W5psS$eM7|PhML)hJ$n-HM58cs|fPInqI6A>Wl?1A9uT2+nw4kB_>FvF4 z(w1+=dX%#Pvc4}6_%VX);6ws*^#C|w(-qP+t9F4{(69D|jmw zz`rgY|0QF`YALoa>9qxwx;7-u$4QF}T1WwQR_%6;NV4GQ9xj{$t=F&iakS~EYCF}= zhZz|%4YBfc`&i4E207X>n5m+>{3+*7=(bnzCMr61%bH#6tss%I3JVK;K*ZKozS5r4 zAy@MDXEQxLJ+Ol9a0u7KC#32A%q^#QB)+Fw2x$QtME-Tjpdxl1P=(i;h?=TNi_2|k z+Lu;G5EZ8I*{za*9?F_Md8h(dR}TpLEHprj=mykT{`wkyJyTrW z>!A-Y?mNmskk$bxsN3tOKjf2E3rX-d^-#IpRKd&!dGoRWZ&n6|>kN-dB5?9JCv8xf zF_C9iNA58~Yh8jb&N46T0M5E$SMgovqRxll!j+X3=T56YH#hcVcYZAJysstdr-ufH zgWT}^>QmwJbMS4l<^^qX6>D?5d=;f{n_%_2;dx!_o90>>YAv<_?Kt}LExCG-IK~13 zE@aWodUH#@3CV3miu=&Om&*cW9SM&^s_r_NVMf42mNbF)Adof@wf5#h8*rUaWWKFC z?B<5*q`jsdm{$Z5;aR=v-38R?pW*sJ&!`;0@)1A`pvb3g?H@d*(2 z!HOhFD{u#m2}ig6OX2-5K);=PEksf+WO(WWe?s+)dXLk9I=4^!YJ20GsfY!F?ZlnSRfiimJOS7$>~1-=row(zoU+q}Ce8WAQcl_Q%fbpSYmL> zZ`1pPC*awvRv=qoZCAg1hH(a8P9=xU9$DYdL*f@%) zaSG!Hk+q=}VfOhXqgV-4LwBh^9u$$1Th9}4k3(+(5CH`R1r4?1@*qgWyYv>Ea(K9GnIT#eXi}L@3Hi1KIK1GC*2CvE4Ur_X#|!FrUA~u zn^mK~6Q}Pnh*v%$Y~lV557_IVvO*-+_8Fy~J>p6700`OkQ9BCA5_o$o&&5_~);k&%0Idx~@*(g>hCWa~BTb13ApDm? zb!1y6T*@$h0QwI2mim?l`cYDtwKu}x)d>9aFHMG`sB3mpMS~Hr`C?#T00Mp1l_W!t z2uC8^YjHvI39zu5zY|HY8=$+oxQIpLkF?MBT^I4MrRj1Qc=Qx7{x#QTs+|BVlz314 x$k4rDlDGYHDEQ>v*a?v0n*SNwsAheuAhKaw+>U+^khManQ-:4: RuntimeWarning: overflow encountered in exp\n", + " return 1/(1 + np.exp(-x))\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkIAAAJgCAYAAABmwww9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOzdd3gU1dvG8e/upkNCKCn0ojSF0AQB6UiLtCgoFkBQFGmKoqCCYkVBRQRFUBBQ+qtUEREQVIp0QaQL0kNCC6Rnd98/kt/CkEBQyC7J3J/r2gtm9uzOefKcJCfPnJm1OJ1OJyIiIiImZPV0B0REREQ8RRMhERERMS1NhERERMS0NBESERER09JESERERExLEyERERExLS9Pd0DEbN5++202btwIwIEDByhevDh+fn4AzJ492/X/7PTq1YvBgwdz++23X7XNmDFjKF26NB07drzxjmfo378/GzZsYNWqVfj7+9+09xUR8QSL7iMk4jnNmjVjzJgxVK1a1dNduS7R0dF06NCBatWq0aRJEx5++GFPd0lE5Ibo1JjILWTs2LE88cQTtGvXjkGDBhEbG0ufPn146KGHaNasGV27duX06dNA+iRqx44d/P7773Tp0oUXX3yRjh070rZtWzZv3gzAkCFDmDRpEgBVq1Zl7NixdOnShWbNmjFjxgwA7HY7I0aMoEWLFtx///0MHz6crl27Ztm/OXPmUK9ePaKiopg2bRqX/x31xx9/0LlzZ9q2bUtUVBTr1q275v6KFSty5swZ1+v/t/3777/Tvn17unTpQrt27UhJSeHtt9+mc+fOREZG0qZNG1d88fHxvPzyy7Rq1YrIyEg++ugjEhISqF27NgcPHnS99+OPP87y5ctvSo5EJG/RREjkFnPs2DHmzZvHBx98wPfff0/16tWZPXs2K1aswM/PjwULFmR6zfbt2+nZsyfz58/n/vvvZ/To0ZnapKSkULBgQWbNmsUnn3zCiBEjSE5OZu7cuezcuZPFixcza9Ysjhw5kmW/0tLSmDNnDu3bt6dZs2acPn2aX375BYDU1FT69u1L3759Wbx4MW+99RbvvvsuKSkpWe53OBzX/Brs27ePDz/8kEWLFrFz505OnTrF7NmzWbJkCVFRUXzxxRcAfPLJJyQnJ7NkyRLmz5/Pli1b2LFjBx07dmTu3LkAHD58mEOHDtG0adN/lQcRMQetERK5xVSvXh0vr/Rvze7du7Np0ya++uorDh06xL59+6hWrVqm1xQrVozKlSsDcMcddzBv3rws37t58+YA3HnnnaSkpJCQkMDq1avp0KEDvr6+ADz00EN8/fXXmV67YsUKHA4HDRs2xMvLi8jISKZNm0bjxo3Zu3cvVquVJk2aAFClShXXJCar/dkpWrQoxYsXB6BGjRoUKFDANUn7/fffyZcvHwBr167l5ZdfxmazYbPZ+OabbwAIDQ3lscceY+DAgcyePZtOnTphs9myPa6ImI8mQiK3mICAANf/R40axfbt23nggQe4++67SUtLI6tlfZcvsLZYLFm2AVyTHYvFAoDT6XRNuv7Has26UDxjxgySkpJo2bIlkF5hiomJYd++fdhsNtd7/s/evXuvur9cuXKGfSkpKYbty78Gq1at4p133qFHjx40b96ccuXKsXDhQgC8vLwM73/ixAn8/PwoW7YsFStWZMWKFSxevJg5c+ZkGZOIiE6NidzCfvvtN7p3707Hjh0pXLgwa9euxW6339RjNG7cmIULF5KSkkJaWlqW1aSDBw+yceNGvvvuO1auXMnKlSv57bffqF27NtOmTaNcuXJYLBbWrFkDwM6dO+nevftV9zscDgoVKsSOHTsAWLx48VX7t2bNGpo2bcojjzxClSpVWL58uetrUK9ePebNm4fD4SAlJYUBAwa4rsh75JFHGDlyJBEREYSFhd3Ur5mI5B2aCIncwvr27cvIkSNp164dzzzzDDVr1uTw4cM39Rj3338/ERERdOzYkS5duuDt7Z3psviZM2dy7733Urp06Uz9W7BgARcvXmTs2LGMGzeODh068PrrrzN27Fh8fHyuun/o0KG8+eabREVFceDAAUJCQrLsX5cuXdiwYQPt2rUjKiqKkiVLcvToURwOB/369cPb25sOHTrQsWNHGjdu7KpYNW3alISEBLp06XJTv14ikrfo8nkRk/vtt984ffo0HTp0ANLvc+Tr68uLL77o4Z7dmK1btzJ06FAWL16c6fSciMj/aCIkYnLR0dEMGTKE2NhYHA4HlSpVYvjw4QQGBnq6a//Z4MGD2bBhA6NHj6Z69eqe7o6I3MI0ERIRERHT0hohERERMS1NhERERMS0NBESERER08qVN1RsHdTD013wGEtQ7l3AejM4L1z0dBc8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CQkMHDgQgLlz57J9+3beeustV5tt27bRs2dPAgIC8Pf3Z86cORQsWPCaxzf3TxYRERHJxOF031Vj3bt3JyoqKtP+K9f2OBwOLJetbnc6nYbtpKQkXn31VaZMmUJERARfffUVgwcPZuLEidc8viZCIiIi4jFXngK7mvDwcDZt2uTajomJITT00pqsvXv34uvrS0REBAAPPfQQY8aMyfZ9zXOjABEREbkudixue1yv+vXrs27dOs6cOUNiYiLLli2jUaNGrudLly7NyZMn+fvv9Jt/rlixgqpVq17t7VxUERIREZFbXlhYGAMHDqRbt26kpqbSqVMnIiIi6NWrFwMGDKBq1aqMGDGC5557DqfTSeHChXn33XezfV9NhERERMTgVvgMsKy0a9eOdu3aGfZ98cUXrv83btyYxo0bX/mya9KpMRERETEtTYRERETEtHRqTERERAzcefm8p5knUhEREZErqCIkIiIiBo5/cVl7bqeKkIiIiJiWKkIiIiJiYL9FL5/PCaoIiYiIiGmpIiQiIiIGumpMRERExARUERIRERGDW/UjNnKCKkIiIiJiWqoIiYiIiIHuIyQiIiJiAqoIiYiIiIHWCImIiIiYgCpCIiIiYqD7CImIiIiYgCZCIiIiYlo6NSYiIiIGWiwtIiIiYgKqCImIiIiBbqgoIiIiYgKqCImIiIiB1giJiIiImIAqQiIiImKgipCIiIiICagiJCIiIgaqCImIiIiYQK6sCK1q9rGnuyDiEckm+ivtSt4Wp6e74FFhNh9Pd8GjjqaleroLpqKKkIiIiIgJ5MqKkIiIiOQc3VlaRERExARUERIREREDrRESERERMQFNhERERMS0dGpMREREDHRqTERERMQEVBESERERA1WERERERExAFSERERExUEVIRERExARUERIREREDpypCIiIiInmfKkIiIiJioA9dFRERETEBVYRERETEQFeNiYiIiJiAKkIiIiJioKvGRERERExAFSERERExMNMaIU2EREREJFdYtGgR48ePJy0tje7du/Poo4+6ntu1axdDhgxxbZ85c4YCBQqwePHia76nJkIiIiJyy4uOjmb06NF89913+Pj40KVLF+6++25uv/12ACpXrsyCBQsASExMpHPnzgwfPjzb99UaIRERETFwOi1ue1yvtWvXUrduXYKDgwkICKBVq1YsXbo0y7YT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ERExAVWERERExMCpxdIiIiIieZ8qQiIiImKgNUIiIiIiJqCKkIiIiBipIiQiIiKS96kiJCIiIga6akxERETEBFQREhERESNVhERERETyPlWERERExED3ERIRERExAVWERERExEhrhERERETyPk2ERERExLR0akxEREQMtFhaRERExARyZUWolFegp7sgIuJWh9IueLoLHhU5+0VPd8GjDgxy8wG1WFpEREQk78uVFSERERHJSVojJCIiIpLnqSIkIiIiRlojJCIiInJrWbRoEZGRkbRs2ZLp06dnev7vv/+ma9eutG/fnieeeILz589n+56aCImIiIiR042P6xQdHc3o0aOZMWMG8+fPZ/bs2ezfv/9Sl51OnnnmGXr16sXChQupXLkyEydOzPZ9NRESERGRW97atWupW7cuwcHBBAQE0KpVK5YuXep6fufOnQQEBNCoUSMAevfuzaOPPprt+2qNkIiIiBi58c7ScXFxxMXFZdofFBREUFCQa/vUqVOEhIS4tkNDQ9m+fbtr+/DhwxQpUoRXXnmFXbt2Ua5cOYYNG5bt8VUREhEREY+ZOnUqzZs3z/SYOnWqoZ3D4cBiuTRBczqdhu20tDQ2bNjAww8/zLx58yhZsiTvvfdetsdXRUhEREQMnG68aqx79+5ERUVl2n95NQggPDycTZs2ubZjYmIIDQ11bYeEhFC6dGmqVq0KQNu2bRkwYEC2x1dFSERERDwmKCiIEiVKZHpcORGqX78+69at48yZMyQmJrJs2TLXeiCAGjVqcObMGXbv3g3AypUrufPOO7M9vipCIiIiYnQL3kcoLCyMgQMH0q1bN1JTU+nUqRMRERH06tWLAQMGULVqVT799FOGDh1KYmIi4eHhjBw5Mtv3tTid7iyA3RyOkxU83QUREbcy+4eutphl9g9dfd6txys9KfsJxM3yzxMvue1YWdGpMRERETEtnRoTERERIzdePu9pqgiJiIiIaakiJCIiIgaWXLd6+L9TRUhERERMSxUhERERMVJFSERERCTvU0VIREREjHTVmIiIiEjep4qQiIiIGGmNkIiIiEjep4qQiIiIGKkiJCIiIpL3qSIkIiIiRqoIiYiIiOR9qgiJiIiIke4jJCIiIpL3aSIkIiIipqVTYyIiImJg0WJpERERkbxPFSERERExMlFFSBOhf8nphJdHQIVy0LOLp3vjXmaOHRS/4s+b8W9Y78VXX/qSmgplyzl4blAi+fIZ2yyY582i+T74+kLJUg76DkgkMCj9uYei8lMk5NJvzQceTKbZvWlujODGNClXlhcbNsDHZmN3TCwv/7iMiykphjYvN2lEZIUKnEtKAuDgmbMMWPw9+X18eK91S24rVAiLxcJ3O/9i4oaNnghDboAmQv/CgUPw1sewfVf6D0MzMXPsoPgVf96M/9w5Cx+N8uPDMQkUL+Fg0kRfvvrSj37PJrna/LHVxtxZvoweF09IiJMVP3kz5iN/hg5P5OgRK4GBTj6dGO/BKP67Qv7+jGzdigdnzOLQuXO81KghLzZqwOvLVxra1SxWjGcXf8+W4ycM+59vcA8nL1yk38LF+Ht7sfTx7mw8cpStJ4zt5NbmtonQoUOH8Pf3JywsjLlz57Jnzx5q1qxJZGSku7pww2bMh073QdEwT/fE/cwcOyh+xZ8349+yyUaFinaKl3AA0LZ9Cn2eyk/fAUlYMm4js2+fjRo10wjJqPrc0yCVjz/0IzUV/tppw2qDQc8GEB9voUGjVLo8moLN5qmI/p0GZUqz/eRJDp07B8D0bX/wffeuhomQj83GnaGhPFW7NqWCgzl49ixv/7yKExcu8ObKn7FlfKFC8+XHx2bjQkqyR2KR/y7bidDkyZMZN24cdrud4sWLU6FCBSpWrEjFihWpUKECJUqUyPYgU6ZM4euvv8bhcFC3bl1OnDhBixYt+Pbbbzl48CB9+/a9KcHktGHPpf+7ZpNn++EJZo4dFL/iT/83r8UfG2N1TXAAioQ4SYi3kJCA6/RYpUp2Fs7zITraQliYk2U/epOWauFCnAW7HarXtNPzySTS7PD6KwEE5IOoB1KucsRbS9HAQE7EXXBtn7xwgUBfX/L7+LhOj4Xmz8e6w0f4aM0a9saeplftu5jQsQPtv/4GALvTyYeRbWhToTzL9u3n7zNnPRLLzWamq8aynQhNmDCBkSNHEhERwZEjR9i7dy979uzhl19+Yd++fQCUL1+emTNnXvU9vv32W5YsWUJsbCxt27Zl/fr1+Pr60rlzZzp16pRrJkIiInmJwwFkcQNh22XXE1eJsPNo12Teei0AqxVatk4hMNCBlxe0uS8VSHW1jeqUwoJ5PrlmImS1WLJcE2x3Olz/P3o+jie+m+fa/mLjJvrWvZsSBYI4ej4OgBeW/MCwn5bzaft29K9XlzFr1+V01+UmynYilD9/fpo0aYKXlxehoaHUqlXL8PzRo0ddE6KrcTgc+Pj4ULx4cXr27Imvr6/rObvd/h+7LiIiNyI01Mme3ZdmQrGxFvIHOvHzv9QmIQGqVkujVWT6hCc2xsK0r3wJDEpfL1SunJ2yt6VPHJxO8MpFK0+Px12gWtFw13ZYYH7OJSaRmHppsXfFIkWoHBrC/L92ufZZLBbS7A4alinNnphYTsXHk5CayuLdu2lVobxbY8gx+oiNS5566inmzp171edLlChB06ZNr/keLVu25LHHHsNut9O/f38Adu/ezSOPPEKbNm3+ZZdFRORmqHlXGrv/snHsaPqvgiWLfKhXP9XQ5sxpKy89n4/4jPXQs2b40qRZGhYLHDpo5espvtjtkJwMixb40KhJ6pWHuWX99s8hahQtSpngYAAeqVaN5Qf2G9o4cfJas6aUKJB+mdyj1auxJyaGkxcvElmxIgPq1wPS1xJFVqzIusNH3BuE3LBs5+7vvfceqamp/PrrrzRs2JDKlStTsWJF/P39s3upy7PPPsvGjRuxXbaCzsfHh/79+9O4ceP/1nMREbkhwQWdDHwpiXfe8CctDYoWdTBoSCJ791gZ86E/n06Mp0RJBw8+nMzAfvlwOODOKnb6DEi/quzRbsl8NtaPZ57Mh90ODRul0Toy90yETickMnjpMsa1b4e3zcrhc+cZ9MNSqoaF8W6rFrSb9g17Y0/zxoqf+SKqI1aLhZMXLvLs4iUAvLtqNW+3aM4Pj3cDYNm+/UzZvMWTId08JlojZHE6ndcM9/Dhw+zZs8f12L17N8ePH6dEiRL8+OOP7uqngeNkBY8cV0TEUw6lXci+UR7WYtaLnu6CRx0Y9Lxbj1fu44/cdqy/n3NvbFfKtiJUqlQpSpUqRYsWLVz7EhIS2Lt3b452TERERDzERBWh//RZYwEBAVSvXv1m90VERETErXLR+n4RERFxBzPdR0ifPi8iIiKmpYqQiIiIGKkiJCIiIpL3aSIkIiIipqVTYyIiImKkU2MiIiIieZ8qQiIiImKgy+dFRERETEAVIRERETFyWjzdA7dRRUhERERMSxUhERERMdIaIREREZG8TxUhERERMdBVYyIiIiImoIqQiIiIGKkiJCIiIpL3qSIkIiIiBlojJCIiImICqgiJiIiIkSpCIiIiIreWRYsWERkZScuWLZk+fXqm58eNG0fTpk3p0KEDHTp0yLLNlVQREhERkVtedHQ0o0eP5rvvvsPHx4cuXbpw9913c/vtt7va/Pnnn3z00UfUqFHjut9XEyERERExcuOpsbi4OOLi4jLtDwoKIigoyLW9du1a6tatS3BwMACtWrVi6dKl9OvXz9Xmzz//ZMKECRw7dozatWszePBgfH19r3l8nRoTERERj5k6dSrNmzfP9Jg6daqh3alTpwgJCXFth4aGEh0d7dqOj4+ncuXKvPjii8ybN4+4uDg+++yzbI+vipCIiIgYuPPy+e7duxMVFZVp/+XVIACHw4HFYnFtO51Ow3a+fPn44osvXNs9e/bklVdeYeDAgdc8viZCIiIi4jFXngK7mvDwcDZt2uTajomJITQ01LV9/Phx1q5dS6dOnYD0iZKXV/bTHJ0aExERkVte/fr1WbduHWfOnCExMZFly5bRqFEj1/N+fn6MGjWKI0eO4HQ6mT59Oi1atMj2fTUREhERkVteWFgYAwcOpFu3bnTs2JG2bdsSERFBr1692LFjB4UKFeLNN9/kmWeeoXXr1jidTnr06JHt++rUmIiIiBjdojdUbNeuHe3atTPsu3xdUKtWrWjVqtW/ek9VhERERMS0VBESERERA33oqoiIiIgJ5MqKUKti1TzdBfEUi+bupuV0eLoHnmXysV/Ouc7TXfCsQW4+nipCIiIiInlfrqwIiYiISA5SRUhEREQk71NFSERERAx01ZiIiIiICWgiJCIiIqalU2MiIiJipFNjIiIiInmfKkIiIiJioMXSIiIiIiagipCIiIgYqSIkIiIikvepIiQiIiJGqgiJiIiI5H2qCImIiIiBrhoTERERMQFVhERERMRIFSERERGRvE8VIRERETFSRUhEREQk71NFSERERAx01ZiIiIiICWgiJCIiIqalU2MiIiJipFNjIiIiInmfKkIiIiJioMXSIiIiIiagipCIiIgYqSIkIiIikvepIiQiIiJGqgiJiIiI5H2qCImIiIiBxdMdcCNVhERERMS0VBESERERI60RkjqRNZmw7QMm7xrDsNnPExDof9W2L37Vl04vtHNj73KemeOvE1mDCVtHMvmv0QybPTCb2PvQ6fm2buxdzlP85h37YO78mz33ZqWJUBYKFAli0OQ+vNnpA3pWfpYTB6N54r1HM7UrVak4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iyRp0KBBSkpK0kcffeRwVfZ566239O6772rmzJl68cUXtW/fPq1bt87psmxTV1en2tra4HEgEDBqrdCwYcM0btw4DR06VFdeeaWmTJli1N0AEzAIdVFvbfaGvq+hoUFLlizRxo0blZqa6nQ5tjtx4oRWrFihixcv6uLFi3r77bc1ZswYp8uyTXFxsd544w39/ve/V25uriZNmqTly5c7XZZtvvzyS+Xn56ulpUVnz55VWVmZMT8UkKTExEQdPHhQPp9PbW1tOnDggG6//Xany0IPMmes/w99e7O31tZWpaenKy4uzumyYIOXX35ZLS0tWr9+ffC9OXPm6KGHHnKwKvtMnDhR9fX1mjVrlgYMGKCkpCQjB0JTJSYm6vDhw5o1a5b8fr8yMjI0evRop8uyzciRI7VgwQJlZGSotbVVd999t2bPnu10WehBbLoKAACMxa0xAABgLAYhAABgLAYhAABgLAYhAABgLAYhAABgLAYhAABgLAYhAABgLAYhAF0ybdo0TZgwQZ988onTpQBAj2EQAtAlb7zxhq6//nrt3bvX6VIAoMcwCAHokgEDBmjMmDFGbbgKIPSx1xiALrlw4YLeeustsSsPgFBCIgSgSwoKCuR2u/WPf/xDX331ldPlAECPYBAC0Kn3339fe/bsUWFhoQYPHsyCaQAhg0EIwPdqaWnR8uXL9cwzzygqKkojRozQX//6V6fLAoAewSAE4Hu98MILGjVqlBITEyVJI0aMYME0gJDBIATgkurr61VZWanly5cH37v11ltJhACEDFeAn4AAAABDkQgBAABjMQgBAABjMQgBAABjMQgBAABjMQgBAABjMQgBAABjMQgBAABjMQgBAABj/T+RnfBv2RzQbwAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "filenames": { + "image/png": "/Users/hjensen/Teaching/FYS-STK4150/doc/src/LectureNotes/_build/jupyter_execute/chapter6_134_1.png" + } + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkIAAAJgCAYAAABmwww9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOzdeZxO5f/H8de5ZzNjzAizkH0J2Zds2ZU1W+UbKaKvbyWEQmVJkRSiXySSrdBmz1oIZcpaJEuyZRnGMmZllvv8/rinexwzRZb7drvfz8fjfnDOfd3nXJ/7OufMdT7nOuc2TNM0EREREfFCNndXQERERMRd1BESERERr6WOkIiIiHgtdYRERETEa6kjJCIiIl5LHSERERHxWuoIidymRo4cSdu2bWnbti3ly5enWbNmzumLFy/+q2Xt3LmTYcOG/e37+/bto3Tp0kydOvVGqy0i4lEMPUdI5PbXuHFj3nvvPSpUqHBdn1+wYAGrVq1iypQp2b7/2muvkZiYyJYtW1izZg2+vr43Ul0REY+ho52IB/ryyy+ZN28edrud3LlzM3ToUEqUKMHWrVsZPXo0drsdgGeeeYaKFSvyf//3f8THx/PKK6/w1ltvWZaVkJDA0qVL+fLLL9m7dy+rVq2iVatWAKSlpTFmzBi+++47fHx8qFKlCq+99ho2my3b+VOmTOH8+fPO7NP777/vnH7yyScJDQ3l4MGDdOrUiQoVKjBmzBhSUlKIiYmhTp06jBo1CoB169YxYcIE7HY7QUFBvP7666xbt44DBw4wbtw4ALZu3crIkSNZtGiRq752EbkDqSMk4mE2b97MokWLmDNnDoGBgXz//ff06tWLFStW8P7779OtWzdatWrF3r17+fzzz2nWrBl9+vRh1apVWTpBAIsXL6Zo0aKUKFGCdu3aMXPmTGdHaO7cuezevZvFixfj7+9P//79Wb58OXFxcdnOv5qQkBBnuf79+9OnTx9q1qxJYmIiTZo04ddffyUyMpIBAwYwe/Zs7r33XlavXs3YsWN5++23adq0KbGxseTOnZsvvviCjh073twvV0S8jjpCIh7mu+++48iRI5ZOQFxcHLGxsbRo0YI33niDtWvXUqdOHfr373/V5X322Wf85z//AaBNmza8++677NixgypVqrBp0ybatm1Ljhw5AJgwYQIAzz77bLbz33///X9cV/Xq1Z3/Hz16NBs2bODDDz/k4MGDXLp0iaSkJLZv306pUqW49957AWjatClNmzYFoGHDhixevJh27drx/fff89prr13TdyYi8nfUERLxMHa7nbZt2zJgwADn9OnTpwkNDaVjx440atSIH374gY0bNzJx4kRWrlz5t8vaunUrv//+O9OmTWPGjBkA+Pn5MXPmTKpUqZJlrNCZM2ew2+1/O98wDC4fdpiammopFxQU5Pz/E088QenSpalXrx4tWrTgl19+wTRNfHx8MAzDWc40Tfbt20eZMmXo3Lkzw4cPx9fXl6ZNm5IzZ85/+e2JiFjprjERD1O3bl2WLVvG6dOnAZg3bx5du3YFoGPHjuzZs4eHH36YESNGEBcXR0xMDD4+PqSlpWVZ1rx582jbti3r169n7dq1rF27lg8//JBvvvmGEydOULt2bb7++mtSUlKw2+0MHz6cZcuW/e38u+66i927d2OaJgkJCaxbty7bGOLi4ti1axcvvfQSTZs2JTo6mqNHj2K326lUqRJ//PEHv//+OwBr1qxxdvqqVq2KzWbj448/1mUxEbkplBES8TB169alR48edO/eHcMwCA4OZuLEiRiGwUsvvcSoUaOYMGEChmHQq1cvChYsSHp6OpMmTaJXr15MnDgRgHPnzrF69Wrmz59vWX7t2rWpXLkyn3zyCS+99BLHjx/n4YcfxjRNatSowZNPPolhGNnOT05OZuPGjTRt2pSIiAhq1KhBdjemhoSE8L///Y/27dsTFBREREQEVatW5ciRI9SuXZuxY8cyaNAg0tPTCQ4OZvz48c7PPvzwwyxfvpwyZcrc2i9aRLyCbp8XEY+RlpZGr169aNOmDS1btnR3dUTkDqBLYyLiEQ4cOEDt2rW56667aN68uburIyJ3CGWERERExGspIyQiIiJeSx0hERER8VrqCImIiIjX8sjb55vn6eHuKriNWaKgu6vgVsah4+6uglsZlz2Q0OsEe3HsACmpVy9zB7OHenf7r9r2ukvXZ4++x2XrskXud9m6sl2/W9cuIiIi4kYemRESERGRW8eO3WXrcndGxt3rFxEREXEbZYRERETEIt10XUbI3R0RZYRERETEa6kjJCIiIl7L3RkpERERuc3Y8Z5f31JGSERERLyWMkIiIiJi4crb591NGSERERHxWsoIiYiIiEW6qTFCIiIiInc8ZYRERETEQneNiYiIiHgBZYRERETEIl0ZIREREZE7nzJCIiIiYqExQiIiIiJeQBkhERERsdBzhERERES8gDJCIiIiYuE9vzSmjJCIiIh4MXWERERExGvp0piIiIhY6IGKIiIiIl5AGSERERGxSPeehJAyQiIiIuK9lBESERERC90+LyIiIuIFlBESERERi3QMd1fBZZQREhEREY+wdOlSWrZsSdOmTZkzZ06W99evX0/r1q1p3bo1L774IomJiVddpjpCIiIiYmE3Xfe6VqdOnWL8+PHMnTuXRYsW8fnnn3PgwAHn+3Fxcbz88suMHz+epUuXUqZMGcaPH3/V5aojJCIiIm4TFxfHsWPHsrzi4uIs5TZt2kStWrXInTs3QUFBNGvWjJUrVzrfP3z4MAUKFKBkyZIANGrUiG+//faq69cYoQw1HqxAt2EP4+fvy6HfjjG+zyyS4i9mW/bFSd04vOc48yeuBsA/hx/Pj3mc0lWLYRgGe7cdZNKAuaRcTHVlCDekxv2l6PZ8E/z8fTj0+ynGj1xCUmKKpUzjFhXo8EQdTODSxVQ+GLuC3/ecdL4fFhHChOlP89zjHxJ3IdnFEdyYGg9WoNuQ9vgF+HJo93HGvzCLpIS/af+JTznaf9I3QEb7v/04pasWzWj/Q0wa5Fntf1/je+k26CHH9r/3BBMGzCMp4VK2ZV9893EO7z3J/KnrnPM++3kkZ05ecE7Pn7KWdYu23fJ63yz31S9Nt35NHfHvj2bCkAUkJf5N/KMe5fDv0cyf8T0ANptBzyFtqHBfMQC2bNjHtDErXFb3G3VfwzJ0e6mlY9/fd5IJr3z5923/zmMc3hfN/I/XO+e16lyb5v+pgX+AHwd2H2fCK1+QmpLuqurfVDXqlqJbrwfw8/Pl0IFTjH9jcZbtoHGLinTocj+maTqOg2NW8PueE26q8a3jyjFCs2bNYuLEiVnm9+rVi969ezunT58+TVhYmHM6PDycnTt3OqeLFi1KdHQ0e/fupUyZMqxYsYIzZ85cdf3KCAGheYPpP/EpRnSdzH9rDuXk4TN0G/ZwlnKF7olk9KIXqdemmmV+p/6t8PHx4bm6r/Nc3eEE5PDnsX4tXFX9GxaaO4gXh7VlxKAv+O+jk4g+Hkv3Xg9YyhQskpf/9nmQwX3m0LPzFOZ+vIFh7zzmfP+BlhUZO+Up8oWHuLr6Nyw0bzD9/68rI7p9yH9rDePkkZjs279UJKMX9qde6yvav19LfHxtPFf/DZ6r/zoBgX481teD2j9PTvqP7cTIZ6bTo9Eooo+epdvLrbOUK1Qygrfm9aRuy0qW+XcXDyc+NoleLcY4X57UCQq9Kyf933yEkX3n0qPVeKL/PEe3/s2ylCtUPIy3pj9N3ablLfMbt6nC3UXz8Vzb9+jZ/v+oUL0YdZuVz/L521Fonpz0f/sxRj4/mx5NxxB99BzdBrTMUq5QiXDe+uQZ6javaJlfp2l52jx5P690mcqzLcbhH+BHu271XVX9myo0dxAvvtaOEQM+57+PvE/0sfN0753NcbBvUwb3/oSej3/oOA6OfexvlijXqmvXrqxZsybLq2vXrpZydrsdw8jsoJmmaZkOCQnh7bffZujQoTzyyCOEh4fj5+d31fW7rCP0xx9/8MEHHzBs2DCGDx/OBx98wK5du1y1+n9UtVE59u84zImDpwFYNv07GneomaVc66cbsfKTjWxcbD3I74raz7xxyzBNE7vd5MDOo4QXzOuSut8MVWuVYN9vxznx5zkAvp6/hcbNK1jKpKakMWHkUs6dTQBg/54T3JU3GF9fG3nyBVO7YRle7fOpy+t+M1RtdC/7fz6S2f4z1tP40b9p/0+/Z+OSK9v/d+a9e1n77/qT8IJ5XFL3m6Fq/TLs/+UoJw47zpy+/uQHGrWrlqXcQ13qsuqzH9m47BfL/HurFcWebjLmq958sGogj7/QDJvNc+44qXp/Sfb/eowTR84C8PVnP9HoocpZyj3UqRar5m9l4yrrcctmM8gR5I+fvy9+/r74+vmQeinNJXW/UVXr3sP+nX9y4khG28+NolGbKlnKPfREHVZ98RMbV+y0zG/SvhoLpm8g4UIypmkycdh81npQJ/hyVWuXYN9vJzKPg19toXELa8cvNSWdCSMWc+5MxnHwt7+Ogz4ur++tlo7hsldISAgFCxbM8goJsZ5YR0ZGEhMT45yOiYkhPDw8s87p6URGRvLll18yf/58ypYtS6FCha4aq0s6QnPmzKF///4AVKhQgXLlygEwdOhQpk+f7ooq/KOwu+8i5vh553TMifPkDAkiKFcOS7kPBs3ju/mbs3x++7rfOP7HKQDCC+ah/bMPZOks3c7CIkI4cyrzWmzM6ThyBucgKKe/c96pkxfY/MPvzuln+jXjxw37SEuzc+5MAiMGfsHxo+dcWu+bJaxAHmKOZ9bd0f6BBAVf0f4v/037f/cbx/9wdKLCC+ah/TNNsnSWbmf5CuQm5mSsc/rMydiM+AMs5SYPm893i7dn+byPr42fv9/HkCenMKDD+1RtUJo2HpQVyBcZSkx05mW9M6fiyJkrB0E5r4j/zaV8d0UnEODbRdtJuJDMJ+teZs76Vzhx9Cw/fbf3ltf7ZsiX/4q2j75AzlzZtP3ri/hu6c9ZPl+wWBi58wYzYvp/+eDr/nTu05SEOM+6LP6XsIhQzly2HWQeBzO/i1MnY9n8/WXHwf7N+HH9PtLSPPNSoKepU6cOUVFRnDt3juTkZFavXk39+pnHGsMw6N69O6dOncI0TWbOnEnLllkznFdyyRih2bNns2jRIgIDAy3zu3XrRvv27enevbsrqvG3DJsN08w6dD09/d89W7NkpcIM+6QnS6atY/PqnVf/wG3CZhhkEz7p2fzYTEAOP156rS1hEaEM9tAM0JUMm5F9+9uvo/1n/dX+t0e281rYDIPsfmg6u/bPzsp5Pzr/fykZFn70HW271WfRZeNIbmc229/Ef43t37lnEy6cT+Tx+qPwD/Bl2PtP8vBTdVkw8/ubXNOb729jv8Zjn4+vjSr3l+KNZ2eScimNF995jKf6t2DKm0tuck1vPZthZPt769l9FwE5/Hjp9faERYQwuNedcRy8kt28/bK6ERER9OvXjy5dupCamsqjjz5KxYoV6dGjB3369KFChQq88cYb/Pe//yUlJYXatWvz9NNPX3W5LukI+fr6kpaWNVV88eLFa7p+d6vFHDtLmWrFnNP58ucm/nwil5JS/uFTVg0evo9eYzozaeDcbLMGt7PTpy5Qpvzdzul8YSHEX0jm0hWDfcMiQnjj3U4cPXyGgc/NIsVD0v9XE3P83I23f/v76PXO40z6m6zR7ez0ifOUrlLEOZ0vMpT42EQuJV9b/I0frs7B345zeK9j4LxhGB51hnz65AVKV8xMn+eLCCH+QhKXkq9tsHudB8sx+c2lpKWmk5aazreLt1O3aXmP6AidPhFL6UqFndP5IkKIj7322M+djmPTql+dg6vXLt7O470evCV1vdVOR1+gTPmCzul8Ybkc28GVx8HIUN4Y/zhHD8Uw8JmZd8xx0FP89Yygy3300UfO/zds2JCGDRv+q2W65NLYs88+S7t27RgyZAjvvfce//d//8eQIUPo0KEDzz77rCuq8I+2rfuNMtWLU6C441pjq24NiFqRNQ38d2o2q8hzb3Xk1UfGe9wfQYBtP/5BmfIFKVDIMa6l1SPVidpgTe0HBvkzZspTfL9uL28Nnn9H7fzb1v1GmWqXtf9T19H+ox7j1Q4TPLL9t2/YR5kqRSlQNB8ALZ+4n6jVv17z54uWzs+TL7bEZjPwD/Cjddd6bFi641ZV96bb/sPvlKlYmAJFHOP6Wj5Wg6i1e6758wd+O079jDF1Pr42ajUqy95f/rwldb3Ztm/cR5nKhSlQJKPtH69N1Le7r/nz36/YRb2WFfEPcJxT136wPPt3eUbsV9r24x+UqXDZcfDR+4hav89SxnkcXLuHt1796o46Dnozl2SEWrduTY0aNYiKiuL06dPY7XaqV69O7969iYiIcEUV/tGFM/G822sGQ2Y+i6+/LycPxTDmuY8pVbkIfd/ryvMN3vjHz/d4owMYBn3fyxzh/ttPB5g0cO6trvpNceF8EuPeWMzQ0R3w9fPh5LHzjBm+kFJl89NvSBt6dp5Cm//UIDwylPsbleH+RmWcnx3UczbxHnar/JUunInn3T4zGTL9GUf7H45hTM/pjvYf34XnG434x8/3eP1RR/uP7+Kc99vmA0waNO9WV/2muHA2gfEvzWXwh93w9fPl5NEzjO07h1IVC/HC2x3p1WLMP35+zviV9BzxKJO/GYSPrw8bl/1suVx2u7twLpHxQ75i8PjHHdv/n+cY+8qXlCp3Ny+MaE+vh7Pe1nu5qaOX0XNIG6Z+3Q+73c7PP/7BV9M3uKj2N+bCuUTGD/qCwROfdMR+9CxjB3xGqfIFeWFUB3q1+eeH0X09ZxPBuYN4f3FfbDaDA7uPM+2tpS6q/c114Xwi415fxNB3Hss4Dp5jzLCFlCpbgH5D29Dz8Q9p81hNwvPnznocfG6Wxx8Hr+RNP7FhmNkNjrjNNc/Tw91VcBuzRMGrF7qDGYeOu7sKbmUEBbm7Cu4T7MWxA6R4znOpbgV7qHe3/6ptr7t0fduPFr56oZukauGjLltXdvRARREREbFI96LHDHpPpCIiIiJXUEZIRERELG7H2+dvFWWERERExGspIyQiIiIW3nTXmDJCIiIi4rWUERIRERGLdNN78iTeE6mIiIjIFZQREhEREQu7F+VJvCdSERERkSsoIyQiIiIWumtMRERExAsoIyQiIiIWumtMRERExAuoIyQiIiJeS5fGRERExMKuwdIiIiIidz5lhERERMQi3YvyJN4TqYiIiMgVlBESERERC90+LyIiIuIFlBESERERC/3oqoiIiIgXUEZIRERELNJNPUdIRERE5I6njJCIiIhY6DlCIiIiIl5AGSERERGxsOs5QiIiIiJ3PmWERERExEJjhERERES8gDpCIiIi4rV0aUxEREQs9EBFERERES/gkRmhvSPKuLsKbmO765K7q+BWplnM3VVwK1//dHdXwW3SogPdXQW3sgfa3V0Ft+p7/zfuroJX0Y+uioiIiHgBj8wIiYiIyK2TrgcqioiIiNz5lBESERERCzu6a0xERETkjqeMkIiIiFhojJCIiIiIF1BGSERERCz0o6siIiIiXkAZIREREbGw67fGRERERO58ygiJiIiIhcYIiYiIiHgBdYRERETEa+nSmIiIiFjY9UBFERERkdvL0qVLadmyJU2bNmXOnDlZ3t+9ezePPPIIbdq04ZlnniEuLu6qy1RHSERERCzSMVz2ulanTp1i/PjxzJ07l0WLFvH5559z4MABS5k333yTPn36sGTJEooVK8bHH3981eXq0piIiIi4TVxcXLaZm5CQEEJCQpzTmzZtolatWuTOnRuAZs2asXLlSnr16uUsY7fbSUxMBCA5OZnQ0NCrrl8dIREREbFw5RihWbNmMXHixCzze/XqRe/evZ3Tp0+fJiwszDkdHh7Ozp07LZ95+eWX6d69O6NGjSIwMJAvvvjiqutXR0hERETcpmvXrrRv3z7L/MuzQeDI9hhG5qU00zQt0xcvXmTw4MHMnDmTihUrMmPGDAYNGsTUqVP/cf3qCImIiIjFvxm7c6OuvAT2dyIjI9m6datzOiYmhvDwcOf0/v37CQgIoGLFigA89thjvPfee1ddrgZLi4iIyG2vTp06REVFce7cOZKTk1m9ejX169d3vl+kSBGio6M5ePAgAGvWrKFChQpXXa4yQiIiImJxOz5HKCIign79+tGlSxdSU1N59NFHqVixIj169KBPnz5UqFCBt956i759+2KaJnnz5mXUqFFXXa46QiIiIuIRWrduTevWrS3zPvroI+f/GzRoQIMGDf7VMtUREhEREYv02zAjdKt4T6QiIiIiV1BGSERERCzsLrxr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5+5pmero0aOKjY3VoEGD3D0V0+3atUuS1LdvX913331699133Twjc61du1aRkZEKCQmRt7e3YmNjVbduXXdPC4XIeuX9NUpPT1flypWd20FBQUpJSXHjjMw1efJkd0/BbWrWrOn87z179mj16tV677333Dgj83l7e+uVV17RwoUL1aFDBwUHB7t7SqYaP368YmJilJaW5u6pmC4rK0tNmzbVuHHjlJ2drV69eumWW27R3Xff7e6pmWLv3r3y9vbWoEGDlJaWplatWmnEiBHunhYKER0hF9ntdtlsNue2w+EwbKP02759u/r27atRo0bp5ptvdvd0TDd8+HAlJycrLS1NS5Yscfd0TLN06VJVqVJFTZs2dfdU3KJ+/fqaPn26/P39VbFiRUVHR2vDhg3unpZpcnJylJycrClTpuiDDz5QSkqKli9f7u5poRBRCLkoJCREGRkZzu2MjAxLniayqk2bNunf//63nnrqKXXr1s3d0zHVzp07tW3bNkmSr6+vIiIi9Ntvv7l5Vub59NNP9fXXX6tLly565ZVXtG7dOk2ZMsXd0zLNxo0blZyc7Nx2OByWWitUqVIlNW3aVBUrVlTZsmV17733WupsgBVQCLmoWbNmSk5OVmZmpk6fPq3ExES1aNHC3dOCCdLS0jRkyBDNnDlTUVFR7p6O6VJTUzV27FidO3dO586d0+eff66GDRu6e1qmWbRokT7++GN99NFHGj58uNq0aaMxY8a4e1qmOX78uKZPn66zZ8/qxIkTWr58uWUuFJCk1q1b66uvvlJWVpZycnL05Zdf6vbbb3f3tFCIrFPW/0PBwcGKiYlRr169lJ2drejoaIWFhbl7WjDBm2++qbNnz2rq1KnO53r06KGHHnrIjbMyT8uWLZWSkqKuXbvK09NTERERliwIrap169bavHmzunbtKrvdrp49e6p+/frunpZp6tatq/79+6tnz57Kzs7W3Xffre7du7t7WihENofD4XD3JAAAANyBU2MAAMCyKIQAAIBlUQgBAADLohACAACWRSEEAAAsi0IIAABYFoUQAACwLAohAC7p2LGjWrRooe3bt7t7KgBQaCiEALjk448/1s0336w1a9a4eyoAUGgohAC4xNPTUw0bNrTUDVcBlH7cawyAS86cOaNPP/1U3JUHQGlCRwiAS2JjYxUUFKQ//vhDJ0+edPd0AKBQUAgBKNCPP/6o1atXa/bs2fL392fBNIBSg0IIwBWdPXtWY8aM0fPPP6/AwEDVqlVLv/76q7unBQCFgkIIwBW9/PLLqlevnlq3bi1JqlWrFgumAZQaFEIALislJUUJCQkaM2aM87natWvTEQJQatgcXAICAAAsio4QAACwLAohAABgWRRCAADAsiiEAACAZVEIAQAAy6IQAgAAlkUhBAAALItCCAAAWNb/B72xHrZgB/RnAAAAAElFTkSuQmCC\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "filenames": { + "image/png": "/Users/hjensen/Teaching/FYS-STK4150/doc/src/LectureNotes/_build/jupyter_execute/chapter6_134_2.png" + } + }, + "output_type": "display_data" + } + ], "source": [ "# visual representation of grid search\n", "# uses seaborn heatmap, you can also do this with matplotlib imshow\n", @@ -3178,7 +3215,632 @@ "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:582: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Learning rate = 1e-05\n", + "Lambda = 1e-05\n", + "Accuracy score on test set: 0.18333333333333332\n", + "\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:582: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Learning rate = 1e-05\n", + "Lambda = 0.0001\n", + "Accuracy score on test set: 0.18611111111111112\n", + "\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:582: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Learning rate = 1e-05\n", + "Lambda = 0.001\n", + "Accuracy score on test set: 0.13055555555555556\n", + "\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:582: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Learning rate = 1e-05\n", + "Lambda = 0.01\n", + "Accuracy score on test set: 0.24444444444444444\n", + "\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:582: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Learning rate = 1e-05\n", + "Lambda = 0.1\n", + "Accuracy score on test set: 0.23333333333333334\n", + "\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:582: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Learning rate = 1e-05\n", + "Lambda = 1.0\n", + "Accuracy score on test set: 0.12777777777777777\n", + "\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:582: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Learning rate = 1e-05\n", + "Lambda = 10.0\n", + "Accuracy score on test set: 0.1527777777777778\n", + "\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:582: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Learning rate = 0.0001\n", + "Lambda = 1e-05\n", + "Accuracy score on test set: 0.9111111111111111\n", + "\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:582: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Learning rate = 0.0001\n", + "Lambda = 0.0001\n", + "Accuracy score on test set: 0.8888888888888888\n", + "\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:582: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Learning rate = 0.0001\n", + "Lambda = 0.001\n", + "Accuracy score on test set: 0.8722222222222222\n", + "\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:582: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Learning rate = 0.0001\n", + "Lambda = 0.01\n", + "Accuracy score on test set: 0.8305555555555556\n", + "\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:582: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Learning rate = 0.0001\n", + "Lambda = 0.1\n", + "Accuracy score on test set: 0.8888888888888888\n", + "\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:582: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Learning rate = 0.0001\n", + "Lambda = 1.0\n", + "Accuracy score on test set: 0.8805555555555555\n", + "\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:582: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Learning rate = 0.0001\n", + "Lambda = 10.0\n", + "Accuracy score on test set: 0.8944444444444445\n", + "\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:582: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Learning rate = 0.001\n", + "Lambda = 1e-05\n", + "Accuracy score on test set: 0.975\n", + "\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:582: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Learning rate = 0.001\n", + "Lambda = 0.0001\n", + "Accuracy score on test set: 0.9777777777777777\n", + "\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:582: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Learning rate = 0.001\n", + "Lambda = 0.001\n", + "Accuracy score on test set: 0.9805555555555555\n", + "\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:582: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Learning rate = 0.001\n", + "Lambda = 0.01\n", + "Accuracy score on test set: 0.9861111111111112\n", + "\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:582: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Learning rate = 0.001\n", + "Lambda = 0.1\n", + "Accuracy score on test set: 0.9805555555555555\n", + "\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:582: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Learning rate = 0.001\n", + "Lambda = 1.0\n", + "Accuracy score on test set: 0.9777777777777777\n", + "\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:582: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Learning rate = 0.001\n", + "Lambda = 10.0\n", + "Accuracy score on test set: 0.9444444444444444\n", + "\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/hjensen/opt/anaconda3/lib/python3.8/site-packages/sklearn/neural_network/_multilayer_perceptron.py:582: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Learning rate = 0.01\n", + "Lambda = 1e-05\n", + "Accuracy score on test set: 0.9861111111111112\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Learning rate = 0.01\n", + "Lambda = 0.0001\n", + "Accuracy score on test set: 0.9888888888888889\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Learning rate = 0.01\n", + "Lambda = 0.001\n", + "Accuracy score on test set: 0.9888888888888889\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Learning rate = 0.01\n", + "Lambda = 0.01\n", + "Accuracy score on test set: 0.9861111111111112\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Learning rate = 0.01\n", + "Lambda = 0.1\n", + "Accuracy score on test set: 0.9888888888888889\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Learning rate = 0.01\n", + "Lambda = 1.0\n", + "Accuracy score on test set: 0.9722222222222222\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Learning rate = 0.01\n", + "Lambda = 10.0\n", + "Accuracy score on test set: 0.9527777777777777\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Learning rate = 0.1\n", + "Lambda = 1e-05\n", + "Accuracy score on test set: 0.8777777777777778\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Learning rate = 0.1\n", + "Lambda = 0.0001\n", + "Accuracy score on test set: 0.8388888888888889\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Learning rate = 0.1\n", + "Lambda = 0.001\n", + "Accuracy score on test set: 0.8916666666666667\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Learning rate = 0.1\n", + "Lambda = 0.01\n", + "Accuracy score on test set: 0.9111111111111111\n", + "\n", + "Learning rate = 0.1\n", + "Lambda = 0.1\n", + "Accuracy score on test set: 0.9166666666666666\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Learning rate = 0.1\n", + "Lambda = 1.0\n", + "Accuracy score on test set: 0.9083333333333333\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Learning rate = 0.1\n", + "Lambda = 10.0\n", + "Accuracy score on test set: 0.7944444444444444\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Learning rate = 1.0\n", + "Lambda = 1e-05\n", + "Accuracy score on test set: 0.09166666666666666\n", + "\n", + "Learning rate = 1.0\n", + "Lambda = 0.0001\n", + "Accuracy score on test set: 0.11388888888888889\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Learning rate = 1.0\n", + "Lambda = 0.001\n", + "Accuracy score on test set: 0.07777777777777778\n", + "\n", + "Learning rate = 1.0\n", + "Lambda = 0.01\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Accuracy score on test set: 0.14444444444444443\n", + "\n", + "Learning rate = 1.0\n", + "Lambda = 0.1\n", + "Accuracy score on test set: 0.11944444444444445\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Learning rate = 1.0\n", + "Lambda = 1.0\n", + "Accuracy score on test set: 0.1361111111111111\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Learning rate = 1.0\n", + "Lambda = 10.0\n", + "Accuracy score on test set: 0.13055555555555556\n", + "\n", + "Learning rate = 10.0\n", + "Lambda = 1e-05\n", + "Accuracy score on test set: 0.07777777777777778\n", + "\n", + "Learning rate = 10.0\n", + "Lambda = 0.0001\n", + "Accuracy score on test set: 0.21388888888888888\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Learning rate = 10.0\n", + "Lambda = 0.001\n", + "Accuracy score on test set: 0.10555555555555556\n", + "\n", + "Learning rate = 10.0\n", + "Lambda = 0.01\n", + "Accuracy score on test set: 0.07777777777777778\n", + "\n", + "Learning rate = 10.0\n", + "Lambda = 0.1\n", + "Accuracy score on test set: 0.125\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Learning rate = 10.0\n", + "Lambda = 1.0\n", + "Accuracy score on test set: 0.1527777777777778\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Learning rate = 10.0\n", + "Lambda = 10.0\n", + "Accuracy score on test set: 0.17777777777777778\n", + "\n" + ] + } + ], "source": [ "from sklearn.neural_network import MLPClassifier\n", "# store models for later use\n", @@ -3211,7 +3873,36 @@ "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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iKEPjqVizfI8Of5xutfof84yAO8++RG9xzzMhF9GYXpNfli5hdlDF2GaJq+0+Q89336YBwbejekxeaPjSFKOnAxwxOd24sgpRvafyYvjHvK93/9NZvhTM6iQWJonhtxDr+Zv/eXzl0xdTf4CMYxZ3A+H08GvP+/jwzfyxpCJy2EQs78YVm4d4pe5O6u/HOgqBIyRGjwp+EviVGqgaxBQmZWCs8vpYgg/EtrvvXfrzvMXysPCypUJdBUC6tPdI/y6v017y/ptXzXK7vXbvnKjGyqKiIiIjTeEbjMYOpGKiIiInEUZIREREbG5HKa1+4syQiIiIhKylBESERERm1CaNaaMkIiIiIQsZYRERETExmuFTp4kdCIVEREROYsyQiIiImJjhlCeJHQiFRERETmLMkIiIiJio1ljIiIiIiFAGSERERGx0awxERERkRCghpCIiIiELHWNiYiIiI2pwdIiIiIieZ8yQiIiImLjDaE8SehEKiIiInIWZYRERETERtPnRUREREKAMkIiIiJiox9dFREREQkBygiJiIiIjdfSfYRERERE8jxlhERERMRG9xESERERCQHKCImIiIiNqfsIiYiIiOR9ygiJiIiIjcYIiYiIiIQANYREREQkZKlrTERERGx0Q0URERGREBCUGaHnF8wMdBUCJt0Kyrfsokm3IgJdhYBKN8MDXYWAKRN+JNBVCKiTZlSgqxBQXrYFugohRT+6KiIiIhICQju9ICIiIjl4dUNFERERkbxPGSERERGxMdGsMREREZE8TxkhERERsdEYIREREZEQoIyQiIiI2OhHV0VERERCgDJCIiIiYmPqt8ZERERE8j5lhERERMRGY4REREREQoAaQiIiIhKy1DUmIiIiNqZuqCgiIiKS9ykjJCIiIjZe/eiqiIiISN6njJCIiIjYaIyQiIiISAhQRkhERERsNEZIREREJAQoIyQiIiI2GiMkIiIiEgKUERIREREbrzJCIiIiInmfMkIiIiJiY2rWmIiIiEjep4yQiIiI2GiMkIiIiEgIUEZIREREbExLY4RERERE8jw1hERERCRkqWtMREREbLwhlCdRQ+i0zeth/iTwuKHUlfBgP4jOZy+zciH83yIIj4ASZaFTT8gXd+bxo4dhSF946V2ILeDf+l9sW9dbLJ5k4nFDySvh3n4OovPZ+4xXLTT5ZpFFeCQUK2PQ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onfv3lnL7777LhkZGfTt2xeA2bNn8/PPP/Paa68BkJ6ezl133cXgwYOpVq0akyZNYu3atXzwwQd/uX+/NYQupkvREAoW/moIXa4uVUMoWFyqhlAwuJQNoWDgr4bQ5SqUbvCXm7zcEBp01fu5DmqOi4sjLu7Mzfrmz5/P999/zxtvvAHAO++8g2VZWV1jmzdvZuDAgcybNw8Al8tFnTp1+PHHH/9y/6F9VRUREZEcTMt/Dc+zGzznUqdOHcaMGcPRo0eJjo5m+fLltl6mcuXKcfDgQX7//XfKly/PihUrSExMPO921RASERGRy16xYsXo168fDzzwAG63m/bt21OtWjW6detGnz59SExMZPDgwfTt2xfLsihSpAhvvnn+G/ypayzIqGtMXWOhSl1j6hoLZf7uGuux6X6/7WtcjWl+21duQvuTJSIiIiEttNMLIiIiksPl8Btg/qKMkIiIiIQsNYREREQkZKlrTERERGz8OX0+0EInUhEREZGzKCMkIiIiNiYaLC0iIiKS5ykjJCIiIjZeTZ8XERERyfuUERIREREbzRoTERERCQHKCImIiIiNfmJDREREJAQoIyQiIiI2uo+QiIiISAhQRkhERERsNEZIREREJAQoIyQiIiI2uo+QiIiISAhQQ0hERERClrrGRERExEaDpUVERERCgDJCIiIiYqMbKoqIiIiEAGWERERExEZjhERERERCgDJCIiIiYqOMkIiIiEgIUEZIREREbJQREhEREQkBQZkRuiXKDHQVAigz0BUIKAeeQFdBAiYoT1cXjdtKD3QVAuqYGdrx+5syQiIiIiIhILS/YomIiEgOurO0iIiISAhQRkhERERsNEZIREREJASoISQiIiIhS11jIiIiYqOuMREREZEQoIyQiIiI2CgjJCIiIhIClBESERERG2WEREREREKAMkIiIiJiYykjJCIiIpL3KSMkIiIiNvrRVREREZEQoIyQiIiI2GjWmIiIiEgIUEZIREREbDRrTERERCQEKCMkIiIiNhojJCIiIhIC1BASERGRkKWuMREREbHRYGkRERGREKCMkIiIiNhosLSIiIhICFBGSERERGwsK9A18B9lhERERCRkKSMkIiIiNiYaIyQiIiKS5ykjJCIiIja6j5CIiIhICFBG6B+yLHhhsEHF8tClYwgNqye0Ywdf/M8PhorloWvHQNfG/xR/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0qQJn332Gb169QJg69atxMTEUL9+fQC6d++e63bPpoaQiIiIBMzkyZMZO3ZsjvW9evWid+/eWcuHDx8mPj4+azkhIYHNmzdnLe/du5eiRYvywgsvsG3bNsqXL89LL7103v2rISQiIiJ2fswIPfjgg7Rt2zbH+uzZIADTNDGMM2OKLMuyLXs8HjZs2MC0adNITExk1KhRDBkyhCFDhvzl/tUQEhERkYA5uwvsXIoXL87333+ftZyUlERCQkLWcnx8POXKlSMxMRGAFi1a0KdPn/NuV4OlRURExM4y/Pf3N9WpU4e1a9dy9OhR0tLSWL58edZ4IIDrr7+eo0ePsn37dgBWrlzJNddcc97tKiMkIiIil71ixYrRr18/HnjgAdxuN+3bt6datWp069aNPn36kJiYyDvvvMOAAQNIS0ujePHiDB069LzbNSzLCrr7R5oHKwa6CiIifmViBroKAXXAmxroKgRUmVIH/Lq/chPP34C4WP7b9Rm/7Ss36hoTERGRkKWuMREREbELur6iC6eMkIiIiIQsNYREREQkZKlrTEREROz+wbT2YKeMkIiIiIQsZYRERETExtBgaREREZG8TxkhERERsVNGSERERCTvU0ZIRERE7DRrTERERCTvU0ZIRERE7DRGSERERCTvU0ZIRERE7JQREhEREcn7lBESERERO2WERERERPI+ZYRERETETvcREhEREcn71BASERGRkKWuMREREbExNFhaREREJO9TRkhERETsQigjpIbQP2RZ8PxgqFgeunYMdG38K5RjB8Wv+PNm/KvWwqgPHGS6fbENetYkfz57mY/nGkyfbxAZCeXLWgzoZ1EwDo6nwKARBtt/NYiOgrZNLe67K7iuoOvWhTHhw0jcmVC+vMlT/dPId1b88+eFs3BBBJGRULasSe8n0oiL8z22cGE4ny6NIDMTKlT08tTT6URE+D8OuXDqGvsHftsDXfrB8lWBron/hXLsoPgVf96M/+hxGDDEwahBJkunmZQuaTHiffu06fWbYMIMgwkjTOZNMKlfGwYO9106/jPWICYaFk02mf6uyTfrDb5aE4hILszx4wbDh0bxysA0PpqSSomSJh+Oj7KV+fEHJ7NmRjLsLRfvj0/lxps8jBwRDcA3X4excH4EQ4en8uHEVDIyDOZ+olZQsPFbQ2jPnj0cOnQIgDlz5vD666+zbNkyf+3+opi+ANo3hya3Bbom/hfKsYPiV/x5M/413xlcWxnKlfYtd2xtsfRLAytbUueXnQa1a1oUT/At31Hf4qs1kOn2PdaysYXTCRHhUP9mi+Wrguf+Mxu/d1KxkpfSpU0AWrbKZMWKcFv8O3c6qVHTQ3y8b2Xdem7WrQ3D7YYvvginfYdM4uLA4YC+/dJp1MgdiFDkXzhv19jEiRMZO3YsXq+XUqVKUbFiRSpVqkSlSpWoWLEipUuXPu9OPvroI6ZOnYppmtSuXZsDBw7QqFEj5s6dy+7du+nZs+dFCeZSe6mv79/V3we2HoEQyrGD4lf8vn/zWvwHDkPxhDNX/WLxcCrVINVFVvdYtSoW0+Y62H/QomRxmP+pgdttcCLF99ji5QbXJ1pkZsIXqwzCwiBYBpgcPuwgIVv88fEWrlQDl4us7rEqVbzMnx/BoYMGxYpbfP5ZOG63QUqKwb59Do4fN3ju2RiOHDFITPTS7dH0AEVzcYXSrLHzNoTef/99hg4dSrVq1fjjjz/YuXMnO3bs4Ouvv2bXrl0AVKhQgRkzZpxzG3PnzmXZsmUkJyfTokUL1q1bR2RkJB06dKB9+/ZB0xASEclLLBNyy984svUV1LwOejxk0WeAA4fDNw6oQJxFeBj072Ex/F2D9o84KFoY6txg8cPPwZMRss5xsc8ef2I1Lw88kMErL8fgcECTppnExpmEhYHXAxs3hvHaIBcRETB0SDSTJkTSo1eGfwKQi+K8DaH8+fNz2223ERYWRkJCAjVr1rQ9vm/fvqwG0bmYpklERASlSpWia9euREZGZj3m9XovsOoiIvJvlCgGm7cZ/C+DczgZ4mItYqLPlEl1wQ3XWdzV3FfmUBKMmWhQIM6XUXqyu0XBON9jH0w1KFs6eFIJCQkW27adabglJxnExlpEZ4vf5YJq13lo2sydVeajSZHExVkUKWJRt647K3t0eyM306ZEAnmgIaSf2Djj0UcfZc6cOed8vHTp0jRo0OAvt9G4cWPuv/9+vF4vvXv3BmD79u106tSJpk2b/sMqi4jIxVCnlsXmX+C/+3zLsxYZNLzF3pA5nAxd+jo4lepbfn+qQbPbLQwDZi80GDvRd8FMPgpzlxo0vz14GkI1b/CwbZuTfft8l8LFiyOoU8c+xudIsoOn+uUj9XT8H38cScMGHgwD6tV3s2pVOBkZvuzS6m/DqFRJX+6DzXkzQkOGDMHtdvPNN99Qr149qlSpQqVKlYjO3mQ+jyeeeILvvvsOp9OZtS4iIoLevXtz6623XljNRUTkXylSCF5/zqTvyw48bihTCt58weTn7fDyMAfzJphcWRYe7mRxb3cHpgU1Ei1e7Otr7HS73+K5Nxy0fsg3wLpXV4vEKgEO6h8oVMiif/90XhsYjccDJUqaPPtcGjt2OBgxPJr3x6dSpqxJx3sz6N0zH6YJ1yZ66d3HNw6oVWs3J08aPN49H6YXKlQw6f54WoCjukiCpz37rxmWda5eUp+9e/eyY8eOrL/t27ezf/9+Spcuzeeff+6vetqYBysGZL8iIoFiYga6CgF1wJsa6CoEVJlSB/y6v/KjRvhtX7/3fdJv+8rNeTNCZcuWpWzZsjRq1ChrncvlYufOnZe0YiIiIhIgIZQRuqD7CMXExFC9evWLXRcRERERv9JPbIiIiIhNKN1HSD+xISIiIiFLGSERERGxU0ZIREREJO9TQ0hERERClrrGRERExE5dYyIiIiJ5nzJCIiIiYqPp8yIiIiIhQBkhERERsbOMQNfAb5QREhERkZCljJCIiIjYaYyQiIiISN6njJCIiIjYaNaYiIiISAhQRkhERETslBESERERyfuUERIREREbjRESERERCQHKCImIiIidMkIiIiIieZ8aQiIiIhKy1DUmIiIiduoaExEREcn7lBESERERG02fFxEREQkBagiJiIhIyFJDSEREREKWxgiJiIiIncYIiYiIiOR9ygiJiIiIjWaNiYiIiISAoMwIrU43A12FgNmRWSLQVQioetG/BboKAeXFCHQVAiY8lL6iSg4zjtcKdBUC6uVSft5hCB1uygiJiIhIyArKjJCIiIhcQsoIiYiIiOR9ygiJiIiITSgNyVNGSEREREKWGkIiIiISstQ1JiIiInbqGhMRERHJ+5QREhERERsNlhYREREJAcoIiYiIiJ0yQiIiIiJ5nzJCIiIiYqeMkIiIiEjep4yQiIiI2GjWmIiIiEgIUEZIRERE7JQREhEREcn7lBESERERO2WERERERPI+ZYRERETERrPGREREREKAGkIiIiISstQ1JiIiInbqGhMRERHJ+5QREhERERsNlhYREREJAcoIiYiIiJ0yQiIiIiJ5nzJCIiIiYqeMkIiIiEjep4yQiIiI2BiBroAfKSMkIiIi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0dHRFkZkrtdee83qECxTuXLlrH8fOXJEGzZs0JIlSyyMyHyenp6aNm2a5s2bp7Zt2yo4ONjqkEw1duxYDRs2THFxcVaHYrqkpCTVr19fL774otLS0tSzZ0/deuutatiwodWhmeK3336Tp6enBg4cqLi4ODVr1kxPP/201WEhD1ERyqXMzEw5HI6sbafTadhG0ffzzz+rT58+GjlypCpWrGh1OKYbOnSooqKiFBcXp6VLl1odjmmWLVumsmXLqn79+laHYomaNWtq8uTJ8vHxkb+/v7p27aovvvjC6rBMk5GRoaioKE2YMEGffPKJoqOjtXLlSqvDQh4iEcqlkJAQJSQkZG0nJCTYcprIrnbv3q3evXtrxIgRuv/++60Ox1S//vqrfvrpJ0lSiRIl1Lp1ax04cMDiqMyzfv167dixQ507d9a0adO0detWTZgwweqwTLNr1y5FRUVlbTudTlutFQoICFD9+vXl7++v4sWLq2XLlraaDbADEqFcatCggaKionT69GldvHhRmzZtUpMmTawOCyaIi4vT4MGDNWXKFIWFhVkdjuliYmI0ZswYXb58WZcvX9Znn32m2rVrWx2WaT744AOtXbtWq1ev1tChQ9WiRQuNHj3a6rBMc/78eU2ePFmpqalKTk7WypUrbXOjgCQ1b95cX375pZKSkpSRkaHt27frrrvusjos5CH7pPU3KDg4WMOGDVPPnj2Vlpamrl27qlq1alaHBRO8//77Sk1N1cSJE7P2devWTY888oiFUZmnadOmio6OVpcuXeTu7q7WrVvbMiG0q+bNm2vPnj3q0qWLMjMz1b17d9WsWdPqsExTvXp19evXT927d1daWpoaNmyoBx980OqwkIccTqfTaXUQAAAAVmBqDAAA2BaJEAAAsC0SIQAAYFskQgAAwLZIhAAAgG2RCAEAANsiEQIAALZFIgQgV9q1a6cmTZro559/tjoUAMgzJEIAcmXt2rWqWLGiNm7caHUoAJBnSIQA5Iq7u7tq165tqy9cBVD08V1jAHLl0qVLWr9+vfhWHgBFCRUhALkSERGhoKAgHT16VBcuXLA6HADIEyRCAP7Sd999pw0bNmj69Ony8fFhwTSAIoNECMB1paamavTo0Xr55Zfl5+en0NBQ7d+/3+qwACBPkAgBuK63335bNWrUUPPmzSVJoaGhLJgGUGSQCAG4pujoaEVGRmr06NFZ++644w4qQgCKDIeTW0AAAIBNURECAAC2RSIEAABsi0QIAADYFokQAACwLRIhAABgWyRCAADAtkiEAACAbZEIAQAA2/p/BXoYN16axtQAAAAASUVORK5CYII=\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "filenames": { + "image/png": "/Users/hjensen/Teaching/FYS-STK4150/doc/src/LectureNotes/_build/jupyter_execute/chapter6_138_0.png" + } + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkIAAAJgCAYAAABmwww9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOzdd3gUVdvH8e9sSQNCTSCAVJUmKFVAAQUFEQTrY8eGihoREV4r2BBQkCIoHWz0B+mgKChFilQLUkVEeiIlkoRkd2fePzZPkpEgCmSXzf4+17UXzOzZ2XPvzG7uvc+ZWcOyLAsRERGRMOQIdgdEREREgkWJkIiIiIQtJUIiIiIStpQIiYiISNhSIiQiIiJhS4mQiIiIhC0lQiIXqD59+tCxY0c6duzIZZddRps2bbKXT548+a+29cMPP9C7d+/T3r9t2zaqVavG6NGjz7XbIiIhxdB1hEQufC1btmTo0KHUrl37rB7/2Wef8cUXXzBq1Kg873/11VdJTU1l7dq1LF68GJfLdS7dFREJGfq0EwlB06dPZ/LkyZimSbFixejVqxdVq1Zl3bp19O/fH9M0AXj88cepU6cO7733Hn/++Scvvvgi/fr1s23rxIkTzJ07l+nTp7N161a++OIL2rVrB4DX62XAgAF88803OJ1O6taty6uvvorD4chz/ahRozh69Gh29WnYsGHZy/fffz9FixZl165d3H333dSuXZsBAwaQmZlJUlISTZs2pW/fvgB8/fXXDBkyBNM0iYmJ4fXXX+frr79m586dvPvuuwCsW7eOPn36MGvWrEC97CJSACkREgkx3333HbNmzWLixIlER0ezYsUKEhMTWbhwIcOGDeOhhx6iXbt2bN26lalTp9KmTRu6du3KF198cUoSBDB79mwqVapE1apVufnmm/nwww+zE6FJkyaxefNmZs+eTUREBN27d2fBggWkpKTkuf5MYmNjs9t1796drl27cuWVV5KamkqrVq346aefKFOmDD179uTjjz+mZs2aLFq0iIEDB/L222/TunVrjh07RrFixZg2bRp33XXX+X1xRSTsKBESCTHffPMNv/32my0JSElJ4dixY7Rt25Y33niDJUuW0LRpU7p3737G7U2ZMoX//Oc/AHTo0IFBgwaxceNG6taty8qVK+nYsSNRUVEADBkyBIAuXbrkuX7YsGF/+1wNGjTI/n///v1ZtmwZI0eOZNeuXWRkZJCWlsaGDRu45JJLqFmzJgCtW7emdevWAFxzzTXMnj2bm2++mRUrVvDqq6/+o9dMROR0lAiJhBjTNOnYsSM9e/bMXj58+DBFixblrrvu4tprr+Xbb79l+fLlDB8+nM8///y021q3bh07duxg7NixTJgwAQC3282HH35I3bp1T5krlJycjGmap11vGAa5px16PB5bu5iYmOz/33fffVSrVo1mzZrRtm1bvv/+eyzLwul0YhhGdjvLsti2bRvVq1fn3nvv5bXXXsPlctG6dWsKFSr0L189ERE7nTUmEmKuvvpq5s+fz+HDhwGYPHkyDzzwAAB33XUXW7Zs4dZbb+XNN98kJSWFpKQknE4nXq/3lG1NnjyZjh07snTpUpYsWcKSJUsYOXIkX375Jfv376dJkybMmzePzMxMTNPktddeY/78+addX7x4cTZv3oxlWZw4cYKvv/46zxhSUlL48ccf6dGjB61bt+bgwYPs2bMH0zS5/PLL+eWXX9ixYwcAixcvzk766tWrh8PhYNy4cRoWE5HzQhUhkRBz9dVX8+ijj/Lwww9jGAaFCxdm+PDhGIZBjx496Nu3L0OGDMEwDBITEylfvjw+n4/333+fxMREhg8fDsCRI0dYtGgRM2bMsG2/SZMmXHHFFXzyySf06NGDffv2ceutt2JZFo0aNeL+++/HMIw816enp7N8+XJat25N6dKladSoEXmdmBobG8tjjz3GLbfcQkxMDKVLl6ZevXr89ttvNGnShIEDB/L888/j8/koXLgwgwcPzn7srbfeyoIFC6hevXr+vtAiEhZ0+ryIhAyv10tiYiIdOnTgxhtvDHZ3RKQA0NCYiISEnTt30qRJE4oXL84NN9wQ7O6ISAGhipCIiIiELVWEREREJGwpERIREZGwpURIREREwlZInj7ftuZLwe5C0Fi5LjQXjozkI8HuQlB5ql8U7C4EjeE1g92FoHLt3BfsLgRXdFSwexBUC3cPPnOj88g8eGnAnstRZnvAnivP5w/qs4uIiIgEUUhWhERERCT/mASuAhvsikywn19EREQkaFQREhERERufFbiKULATEVWEREREJGwpERIREZGwFeyKlIiIiFxgTMLn17dUERIREZGwpYqQiIiI2ATy9PlgU0VIREREwpYqQiIi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dZs9/ufeuo3dO3JOn4+OiaBn/zsoW6EkhgFTxyxlybz8SYSM5CP5st2GrWrx4Ms3+/f/b8kMTPyQhIqleGbQfSS26mtr231oJ37buj/7FOJCsdE8PeAeKlYvC8DKBZv49J15eQ43nitP9fz5tt3oyqo88tg1/vj3HeXtvnNJKFuM7j3b0aXzOO6+twkPPtKCX3cl2R73f90nkZJrcmynB5sRWzQ6X06fN/Jx3lmjJlV5+PGWuN1O9u87yjtvziahXHG6v9COLg+O5a77m/Lgo9ewe9dh2+N6dp2IaZo80/NGKlXxJxPfLtvGx2OX5jncdi5cO/ed3w1mCZVjn+io879NoOE1NXjw+Xa43C5//N0nkVChJM+8fSeJNw60te0+8G5+23Yg+/T5yCg3T75xG9XrVsTpcrJ8wSY+yqcvAQt3D86X7Z7Ohj0VAvZc9SrsCdhz5SVgidD5lB+JUKjIr0QoVORXIhQq8isRCgX5mQiFgvxKhEJGPiVCoUKJUP7RBRVFRETExhdGlxkMn0hFRERE/kIVIREREbG5EE5rDxRVhERERCRsqSIkIiIiNhfCT18EiipCIiIiErZUERIREREbnxU+dZLwiVRERETkL1QREhERERszjOok4ROpiIiIyF+oIiQiIiI2OmtMREREJAyoIiQiIiI2OmtMREREJAwoERIREZGwpaExERERsTE1WVpERESk4FNFSERERGx8YVQnCZ9IRURERP5CFSERERGx0enzIiIiImFAFSERERGx0Y+uioiIiIQBVYRERETExmfpOkIiIiIiBZ4qQiIiImKj6wiJiIiIhAFVhERERMTG1HWERERERAo+VYRERETERnOERERERMKAEiEREREJWxoaExERERtdUFFEREQkDIRkRei1hZOD3YWg+cMsFOwuBFWqGRnsLgTVb5m7gt2FoKkZtS/YXQgqjxWSH9fnTYyREewuBNnggD6bfnRVREREJAyE91cMEREROYVPF1QUERERKfhUERIREREbE501JiIiIlLgqSIkIiIiNpojJCIiIhIGVBESERERG/3oqoiIiEgYUEVIREREbEz91piIiIhIwaeKkIiIiNhojpCIiIhIGFAiJCIiImFLQ2MiIiJiY+qCiiIiIiIFnypCIiIiYuPTj66KiIiIFHyqCImIiIiN5giJiIiIhAFVhERERMRGc4RERERE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QrjQYaCoIiQiIiJhSxUhERERsVFFSERERCQMqCIkIiIiNmF00pgqQiIiIhK+VBESERERG80REhEREQkDqgiJiIiIXRhNElJFSERERMKWEiEREREJWxoaExERERtNlhYREREJA6oIiYiIiI2lydIiIiIiBZ8qQiIiImKjOUIiIiIiYUAVIREREbFTRUhERESk4FNFSERERGx01piIiIhIGFBFSEREROxUERIREREp+FQREhERERtdR0hEREQkDKgiJCIiInaaIyQiIiJyYZk7dy433ngjrVu3ZuLEiafcv2vXLu6//346dOjAI488wvHjx8+4TSVCIiIicsE7dOgQgwcPZtKkScyaNYupU6eyc+fO7Psty+KJJ57g0UcfZc6cOdSoUYPRo0efcbsaGhMRERGbC3Gy9MqVK2ncuDHFihUDoE2bNnz++eckJiYCsHnzZmJiYmjevDkAXbp0ISUl5YzbVSIkIiIiQZOSkpJnwhIbG0tsbGz28uHDh4mLi8tejo+P54cffshe3rNnD6VKleKll15iy5YtVKlShV69ep3x+UMyEYo03MHugogEmNsIyY+r8ybdygh2F4IqwrjwKhQFWgAnS3/00UcMHz78lPWJiYk8/fTT2cumaWLkOg4sy7Ite71evvvuOz799FNq167NkCFD6N+/P/379//b5w/vTxYREREJqgceeIBbbrnllPW5q0EAZcqUYd26ddnLSUlJxMfHZy/HxcVRsWJFateuDUD79u3p2rXrGZ9fk6VFRETkL4yA3WJjYylfvvwpt78mQk2bNmXVqlUcOXKE9PR0Fi1alD0fCKBu3bocOXKErVu3ArBkyRJq1ap1xkhVERIREZELXunSpXn22Wfp1KkTHo+H22+/nTp16vDoo4/StWtXateuzfvvv88rr7xCeno6ZcqU4Z133jnjdg3LskLusknmwUuD3QURkYAK9zlCx01PsLsQVGXL7Q/o81X66O2APdfuB54P2HPlRUNjIiIiErY0NCYiIiJ2ITdWdPZUERIREZGwpYqQiIiI2F2AV5bOL6oIiYiISNhSRUhERERsQu988rOnipCIiIiELVWERERExE4VIREREZGCT4mQiIiIhC0NjYmIiIidTp8XERERKfhUERIREREbQ5OlRURERAo+VYRERETEThUhERERkYJPFSERERGx01ljIiIiIgWfKkIi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GDAwirFj/JOFZs50M2u2G8s0uKy2l2e6ZhAZCSdPwtD3otiyxYHXa9CihYfOj2TmS1JYttz+87/Rv1FlyKCAPdeubt0D9lx5OWMitGfPHrZt25Z927p1K/v376d8+fJ88cUXgeqnTX4kQiIiF7L8SoRCRX4lQqFCiVD+OeNoZoUKFahQoQLXX3999rq0tDS2b9+erx0TERGRILkAzuYKlLO6jlBMTAxXXHHF+e6LiIiISEAVlPntIiIicp5cCNf3CRT9xIaIiIiELVWERERExE4VIREREZGCT4mQiIiIhC0NjYmIiIidhsZERERECj5VhERERMRGp8+LiIiIhAFVhERERMTOyodfjr1AqSIkIiIiYUsVIREREbHTHCERERGRgk8VIREREbHRWWMiIiIiYUAVIREREbFTRUhERESk4FNFSERERGw0R0hEREQkDKgiJCIiInaqCImIiIgUfEqEREREJGxpaExERETsNDQmIiIiUvCpIiQiIiI2On1eREREJAwoERIREZGwpURIREREwpbmCImIiIid5giJiIiIFHyqCImIiIiNzhoTERERCQMhWRGalVoo2F0Imt89JYPdhaCqHrk/2F0IqmKO9GB3IWgc4fQVNQ8eyxnsLgTVZ8caB7sLQTWwXICfMIzebqoIiYiISNgKyYqQiIiI5CNVhEREREQKPlWERERExCacpuSpIiQiIiJhS4mQiIiIhC0NjYmIiIidhsZERERECj5VhERERMRGk6VFREREwoAqQiIiImKnipCIiIhIwaeKkIiIiNipIiQiIiJS8KkiJCIiIjY6a0xEREQkDKgiJCIiInaqCImIiIgUfKoIiYiIiJ0qQiIiIiIFnypCIiIiYqOzxkRERETCgBIhERERCVsaGhMRERE7DY2JiIiIFHyqCImIiIiNJkuLiIiIhAFVhERERMROFSERERGRgk8VIREREbFTRUhERESk4FNFSERERGyMYHcggFQREhERkbClipCIiIjYhdEcISVCWbZ+5+OLDzPxeqBMZQe3dYsgKsZeHNy80stXn3owHBBd2ODWZyIomeDA9FnMGeHh1x99AFRr6KTtI24MI3SKi7vXpbP64+OYHouSldxc+3QJImLsBcNdq9L4bnIKhgOiCju45qkSFE2wH0IL+yVTqIST5o8XD2T3z9nmNRZzJ5h4PVC2Mtz9rIPoQvb9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kjxOjREREZHRYkWIiIiIxFgRIiIiIjJ8rAgRERGRCNcIERERERkBVoSIiIhIjBUhIiIiIsPHihARERGJsSJEREREZPiYCBEREZHR4tQYERERifDyeSIiIiIjwIoQERERibEiRERERGT4WBEiIiIiEZlgPCUhVoSIiIjIaLEiRERERGLGUxBiRYiIiIiMFytCREREJMLvESIiIiIyAqwIERERkRgrQkRERESGjxUhIiIiEuEaISIiIiIjwIoQERERibEiRERERGT4mAgRERGR0eLUGBEREYlwsTQRERGRESiUFaHvq1aVOgTJyM3NpA5BUkcSi0kdgqSUJUtIHYKkhJRUqUOQjMxELXUI0tJopI5AWtF6fjxWhIiIChZjToKIKP8UyooQERER5R+uESIiIiIyAqwIERERkZhgPCUhVoSIiIjIaLEiRERERCJcI0RERERkBFgRIiIiIjFWhIiIiIgMHytCREREJCIzoi/yZkWIiIiIjBYrQkRERCTGNUJEREREho+JEBERERktTo0RERGRCL9QkYiIiMgIsCJEREREYvzRVSIiIiLDx4oQERERiXCNEBEREZERYEWIiIiIxFgRIiIiIjJ8rAgRERGRCNcIERERERkBVoSIiIhIjN8jRERERGT4WBEiIiIiEa4RIiIiIjICrAgRERGRGCtCRERERIaPiRAREREZLU6NERERkQgXSxMREREZAVaEiIiISExjPCUho06E6rWrjYGze0FlokTozSdYMnQtUl6k5qqNRTFzfLtiICrW+gSvXqYhcMt5HFwVCACo7FYBwxb3ham5CeQKOXb7HcbPOy5J0cX3Uq9NTXhO6w6VWonQv8Lh77MZKS9e5dh2zKqBCLsVjr0rAnX7zC2LwO/YBCzx3oR7fz7SV9gfrJ6HKwbN7Q2ViQqhwY+wePDq7OP/ljZTd49BqUqOunaO5e0RfP4WpnVZgLJVS8N3zTcoUtQUgiBgw3+240rgDX13773UbVENnv/pqB37kAgEjP0RKclvGXv/Pgi7HYm9a85ku23KukGIj07E6ik/5XfIeape65rwnNZN2/9b4fD32fL2c3+lJ8JCnurOfbWpCiMW9UYV1/KQyWS4ffUhVo7bgdev0vXZhQ9Wt2V1eE7q/PfYP0XA6O1vH/ulfREWEoG93/+c7bYpG4YgPioRqyfvzu+Q81TdVjXgObkz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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "filenames": { + "image/png": "/Users/hjensen/Teaching/FYS-STK4150/doc/src/LectureNotes/_build/jupyter_execute/chapter6_138_1.png" + } + }, + "output_type": "display_data" + } + ], "source": [ "# optional\n", "# visual representation of grid search\n", @@ -3297,7 +3988,16 @@ "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "ename": "SyntaxError", + "evalue": "invalid syntax (, line 1)", + "output_type": "error", + "traceback": [ + "\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m1\u001b[0m\n\u001b[0;31m pip3 install tensorflow\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n" + ] + } + ], "source": [ "pip3 install tensorflow" ] diff --git a/doc/src/LectureNotes/_build/jupyter_execute/chapter6_134_1.png b/doc/src/LectureNotes/_build/jupyter_execute/chapter6_134_1.png new file mode 100644 index 0000000000000000000000000000000000000000..eccdd272b80a70fff655fee6c75ac7bcac018c07 GIT binary patch literal 22270 zcmcG$bzD^67B)VL3W}nDfV2XFNK3b303spXC@DFVGz=)6B2rQ!-3`(x-6hi9-3&0p z%x@3q_g?RNfA{_CozI6koH^(0I%}`Jp0%E}{p4iCuU#R#0)arTNlHAChd|DYfxlNc zm%uNE^;d<#;ew5rq#_RZxZvpfg7eFk5^6RO2rdEU?_A%w8xs7;XZuvuRsm{gYyaBX z0Al{y*3t}WYi6u_+s?q+#u#eB$@+lx0rTxQwzif6Y;6C!&I+|QVvC>-^n*ZdLnNO( zQgn!28@G43IWXF^y}6P4SnM9--d8TKo(t!eB?5}?-6MV|chlJa>z8-BPai$K@Ko-G z+;Ns7KK>0wf7?gNxP6bsaFdPfCq+L_{`l}vu7$OAEMav7*YIGi%W)@`j-fj?x`Z!I zhJglr==Jw)v7dmC&{M)Y`1tr7EYhCftf80-p8%Zp_dSsSr!S;_Uu2WDf7oC);f65h zu^7Xt^T5Ksr(MP8=H>?Jh!-B+N3ZRz3Uh>JD_tMX(78d=rp#q`p2Et;~!Qe;lFX5AuOC^Z7IxHpny!n+)s#R$> zzqj1~@R-h|IhYcOLTuVD_j!@%xP%5%3ig$nYw$oPuGW3H^Eisjm;j=brECC-!`x!n z`I$qn=_+K+PLTFl;FqTX#A7h@$yI8R*j%kj!{J(fn+3T%ZQ-w9zee$xlSQH__nWC< zJ>@n=Bc33fpC|O1pIlNy+K;vdL7N z#jYpMp7o_lldHIFZ*Ny2ciM|h2K-xEBt(vvXbA`i(zPmiu&-0uR>NmQM7wt8+o8{c zpU^>jpGeFR+pG<7EOf>+V^h1-!6#v|`zr&{!p=NQ%Gq_@-60ooiS?a257tMQhl?0? z7rPfh?~V4BdZR~@lauB0Up)eSY-C7q`QeLCDhKYuD7AFNAF*0`!wIdDL$_lY-a5Uh-hjA|S9 zd=!I7vbE8&kn5tz4`AF1Y!+o?;shGkhKtk+^)J7C`O;;(kp$wh)5<`{z)+;$O0dwK z&>g{|F;t+34P-+fv;#sR;u7`P2d}r-xE~gdjn9FdgHKT2sFCh*eWl0}g23 zpCNK7&xr=<=(A3S8P$vLfic4V@+^q#<~_MOZb`%me6lr?jT&M)m^(iosncXw^tx#H za3KZ?!MS#AzMz>(Z>r7%OoJ_BX^v zrKFS;ZI*#+BwK!|DzjSYIn6N2fX4Ig{mZt}6{u#D&I&mpAekROeta`rc=v<$Ykxn# z*WgVInehxdqq--mo%1ScHOsBNUBUbCUT?3xl%C>}z^1)Yeso^LC#oEC#r zRaITxgv~TuMk0~-G)kF?n3VM!{fU^htD=B(>yw80`pN|Pjs0*#tn*gbZ_0oP#Hjg= z9dxqMqHOY~9+$;flou`uXo#4)x_ZPw@_X#-g;ulAY7iTO%DI}Y;6)q(5yuE{f2wp6 zXp$;3@vm$(th%l^!R3i+gc4kk0`CgZ{RS`>A*xjl+e(Ns!%ni#Jmzh*Awpu|_mxy@ zT*_BXF%u1lxljG{?Ynoq&S72pmfPYy7b<>>- z4duVaS|2H)y?@{T<6SB1y``5xm`;xO>qkdpKp8y+dg5ff7HgTR+~y;nJUuUfx~vsy zwP`+(~^MJZql>D#oKTU~7rV5?c0jvtT8(I|UhyCg@d9xzI}hg;JZE?sh}FhvhfeSbd;nv*0RlIpa-62B4bJNDy` z@+SLlD!nb7SJ8~}XMMlc)-5Ty4XrvSPChoxJzEl?wwcA%Wmey`!_R{7;2#%-#xI5( zTdk5?2*=OrUo4|+C#xAWZ*JQ;q!O<11t0ABHvbRcI7fj!h zPnQp@%6?a(JF>D*&QAZVChh%1jNrYLH}bJ}r$IAl=)gjhnsQp!t#7+KjJUn~4$MvsM_HKrt zvl{7B{V=VMiU2YXjvf~2_dq*z&u8MCo{kG$ymMAy)$h(|iLm|q4U_?Cl~X)tcN?D- zc?nO8n;zWr5uQQwDN!a1$Ej-KGE|2R59Ro&_k=#o@(yErDVqz5&c}{wezZX991hNo z(bPApPuX%e0|tKVkeWs#wh8R*(B1YyxFD;RhqC-)oM5wkyOW&4XnTV>m_yo&^}b!S?gFxw z?CDxT(Oxc`4C`}^HfhNd9Ne66KhJavCinX^ptpm06^ku0;Yw_V52T>T@Bw@A7g`}2+}bHy#9FSwV_vdP_}?uKo#Lq&z7wWTMe(G%3x;hQJXu5WIr zb>^evCKQ$i4R4-|1kQwgFZy;XvL)>?y8EnSm$rV8Q#!6T4hxZTM}&!Y_u14{d-L3V zPO{LtsJ>$|nYY|OZ)50kgq!EObpvu;v==8PGJN8Ca2ou5!u0H-bY%QBVSN8FNSU-J z9tB^WQG#oeX(q6tyEl(mv3Jh=@MqIfpQS63kcX(!M6(<>j8 zm?9h=yTz6V>ySV>*Py6}lr=GjoFv_Mfl!e0>fHB6%}9CUSgO=V2>sT&`baQtiy0xfYt2O%LBr6W5~zO(N@G z+q0W|$8|Z_%@W#ip;I>9I5O?)*d8?dv|SCmN9^9Hlb2}RtPVP|{>z=(C}(kS6Wy}o zT2*CU#eV#fzJ?=Yh;Y%mxSLm@v!blPXwfQ|S_G?ZrkvdP7yXYOdhW)qW+>~_i?yea zgAE~>?=(l-JB0;$?V=rrGbFJx40t|aSe3Fj)VYS%t>!KW5|;@Jb+V*2rOGCB#q!&{ z8OS68hUvxI^z`1Z>%Dt{4e4~Swj6AssU)#2)<7XVI}*%q7vXa8JPyttXDro`Sr0Gd zr-_|WD%^62vTCnUfosW<#FPZOuvA0HKe-)~EK%@EH(2NXYI8iFc+G9t`5gqQ%=N(T zL#aH&r03p)k@ra2Cd|=Wzj(Xl_?Ue~VdxmiO=e5kMd-T^1YW-Uc9cgjD*?+Or0iOF zD4M058GSM6NYpJHS^H6BIBWP@;q*Qa8`G%Uc;{T%;_SS^Y|yf+q#sl3wGIkc zsP6X$O&+WAz3NR?Lh6agRUc zRD!s-?KidYb}QuouWXSwhfcF)jv5)g=>)V+utxWm>o`~OrnbMEL#^3tWSmf(o9MwK z*a|KcGp~EyyCVmEOGM1i%2=Zk^`frY+2a|V<4&@s+6O*!o;PP^38LXgS60e0B2I9j z_=dsg70~UCkBPyuJcbJlqT|Wh!ZpS??sVnd9=RXA3VvyP`I^7SL$7ZmlCxCvUOo z$obkg>?B=HI`+s;fq}#h%0{hGV%+4E`FQfZ7=F~==E?2BgW8h`>~HH`GecF`YpS)P z3>8sHGI2t((;prV+J*K!WQ~=*&CfW{!%9~Lp_X+e@TvbUB`bXgRrvh%tg?~=)Pj`-vrHSlO8#_Up&;Qt?6 zdSu}%1-$)(1x_2JhTHJt6f%Q*%BeVz(2()^3IiA_3!bhHw?nBGu`yIc&hq35K1|8H zdrvv@1_b^#v$I0U`Kmb*%jMR7<1DgNmxR_EnK132UrDa?rCZ9}p}cz#S;b`^NBl`@ ztne8y#qEA(DEPcx{bjZClMz^t_Tz6!P7rVgX66n`t#7Hj1tf>*-TK}#tM4O2NEqA(g!WZ-u(8?gS_4$gi4QjU+9IJ{_6nQOu@oe{ zvAwy;?>$H0N?a&fmMRTeKRxJj(x7703$x`F(Sg%Lfc`Q-8AK{iu5>kPzuGJ6cX->U z5VrmbK*!C#)Kx>1(_zgRpE2}}clQk!l47sQ1bj|D{F)o%)rR{x} z#Zp?A;|X{?&SGi>5iv()Kx6d4Oq7P^>KCf`jd#te@6H!NKl$+gS4+DPTsir+f31uP z+CD9BA*kFbA20m=3;BJ2jA1(dq>PkHHW}EJG%9kZmhn{!ulAAgr)LH(%bAs0_d?~j zVf)9F9*SGY2#aEn2c~u?({EcDk8nV;gD?XW+d}lmtUWbZ|FL^>$p}wvb7u8oUjU5N zOU+t=KZR4c)@k2lq{LJlxH253y-0jRLb?xxxiMybsD`$!Ef)YFhE0K_9SNcd!$n3# zFtpp?u9cM)2DkJki5I=;rMa(^*|5}`ROG62=3}b!XfzL5EwNiyU-^|IWogNN?%X+y zDAxy4{cZ`e;FWR>)`>G)=$tBdGZlmNe9D z6j!X{-@N(6kKpbD;oMl9fjpfA%=83aBLYG~wNf+EATn-iVQ7Ks67b>xi3rtQCPgzxdKKms+3W+j{@ui^xTJzD;yEHWKw5y#8^qTRqm6@P5NA$8HM|1#9 z(%-x1%MkBCGYZG}{L;veVG1R9E7QxY4uN;?^#BZbZ_z6N2&lLk(nWau;`U7)o5hKj z-`oMVc`0h)TA$Obv1R|Zj56zSxj7I_}1pnv8C|#8Uv$a=)Cxyf;A@?B#nIz+3QGYKnp$=IP%OAN4Rd8)uzL zr4<8F6I>WE%}dc_-T;kOO#Fb0nNDK8@f_!VPpic4 z(+Sav_&r^KU+VPoZ$GK6$qP`)Rf>wlub@8?6KQAt8~QUYzbpO1Erw|W{eN`-_pDT> z#f-u~Q&8)4Vux1Ao=tGerA!V`n_)CpKS)_c8>g*beXSy za^9(p?c4I5O^2%HYa-0E3eFV+)qUj)PKej`0uJWw z@HHWO0{6+$n!45oK9x~6c&=V=sOUIZeURn+WJD;sM5Pry&VsXd(70i{)mFj01Jh9% zVeW7}g5Hq#KoM!on3oi6ig7_VqQqU)3llrnJziJYifimRAI;RY3JMbEGi~ranm|=q z8#&*<;1%{p)?m7qr2}PD?L%_}CG!ejEN_F)=oJ;fUAXE?SvqdQj_TyJ{e0Nu9E6zp z8@2Nq<);ZSs*d9Ea2A6wKUpX%^e=j^+{)% zPq0qz16aK5t|O^ltunD*?fhexnpyh|4KA+&m?p;ov@(p}oa&B{&IUO`a&bMI)Y(6k z&C3d%mV$E?Zn!&`cFnx+BPH^9oAEOqURwRq$4}XDA=komubJC*2ukhcj&Yys2(CA_ z8m;f=!aq+&%+!9+&%kdx%?z1b8-DInXiql6bzeCG#u~3TP*8jBaJj|pI9D6;FdgQm z9>FYIHg7XF3NX|oRerlz;Vw~0tKN&3^=}|~Zpf9q+w=Rv` z%rbnVz&mFL#_+Xthc-kxVWjgzP7x$s^UJMC>QQej24fk)+QzjM$8X!K_DosSPUNt7 z;il=sy=~FeDf$hjmjgrebgoFWlL<9MG-0eBH)ers#6iQXN`uoMj?!#vP3E(H@7>s5 zD9jU6pd%DeP`lz^fL7R`Ks1-$l}oOoe$?m!NgopMt%a5Q0>^WSl|bFH=cfzU5MxO^ zvx!Kznz%#GP(2NT^r1|5XF)dJAeo?ZjXM{uX;6LFa|th#;OuPQtt|`5dZNjbew)K@ zyGkeTS~#xvjmXa(zMWYRzHo=oiL6EEudBRIU!rfzXxgc->g!T?Ot{VM?pVc9F@@FM z;E>#|QYc~xe^>wQ!{>$;N+!rwp{knm3RL9K=B~Cf6XB|8M`N*m>c-?$r~@ho7LGn9 zJ(4Y_L1$S*QT50xH{xt3N?h+R!;au@fFOeuJ*l7%st#2CX{p-CxnG)}TWVd#xMBwqv+|pve4z3hg5Zdr;MV zl45FkfB8I<%$l7k8v3Nb#UobYo7q~k5$6G}LEwpWmV00U+Gc|iv0Y$%;bzUADZ9>V zHhDsdWO{+^%MuA|4hW5mK|#;EkAr8(-_$R=x8OIPli&+$@|G+pzNP$0xZS#W4(`PN zLXp8rD!Dm?x^|(ypIOz?uwc?{Sm&a)GP!g>q~1b}d9luepo~gh&J;%mmuw#RTP`0} z7UEbnmx~mU&Cr5gKBS!?_1F(ACWh^ORFI2RcfEs#c?W-Scp2(2^ojF*68W$rlSwD_ zn^|*RH!OS`t>cc^UIs@ym-V6$fyl`ipPkJPBvHN~WiHxT&1{TN-D49EI#<9w8~yeT zWx~%5@3Mg=@k+NkzcA8k$2%``#MNLpAf) zd$q8|-HMPIS2a}SxN^v4XE!UU1Sl~saiPS?Kr?E__{DfhG$YGS(@^u}2xkAmh;}#5 z_!EX`(S_K=S%wscH`b&y0vC68Tf+GIVzW`~p9O@k5Xwn#dyRFl3_Bk$r||QR96ST)u)xduDU6cHCCF zLTmspe{;|fcfQZ&bIkqo&9k%VFX>{C42GfTV@Fyv17Y{eyWc!b1%LAT?lNAc(~3Yx z&EZm1+^SDl3^~7?)}&4APk{20C{ANHgoiYwq~?V#Icn$)8kdeuJ(+Q&xuQ*mPIU8# z?bb!2T{*ldjY7_WhbFQo;y<3dc!bbp4!`25SEM@ZaQvaN681P3VKiCJ)Kqg98hGOJ zw90olW^P1=FV0)mjcLLy(on3ql%7DnwY!9`LO$la8FGb-!#V8Rjkq@NJQ=JsNg<== zWlLSzx7MfTag#jJ%U?kNb{x)jJu;`!e-@xz zH~#Vjf}?lkoO~4SmHwZ8EPK*!8!=MfY%8+o`R;#FCyOLx+>S&l7&(8yhsx3kq5kUB zVsMlf^%NDN9g5Dc3PZmwKxB|zupAE9Nd`%FTE&|`mK;tW+QBbbVf~61c=+TyK`v7*)qNWhCRwssG>eny z-Sbzh#XY`4e%{w4W3c49BaAM=jhu!Ly|-A0cYc^35{+%_uBkh($mr5IR2zk8b}Lvx zHLOX~Z#Wzq*9nU@z08ymc^va&-i5E6)33qC7(y{|Llz~+_G4pf@jF|4561@O-dpacH-hR?0AJj9%15)Cy1cgeGu|{UFUv|S@YY6 zLWA}P#(l|VlY=ZoiO8efU4WxF?Kd<*NPRx|F^VZIjKINaouG+#!xzkGu&C`Ip_2+F zmVBForqXjWj16>+yFa@pw-3fyw&6SUjjz+-D~@!FUlkxKHuU@+k-TiWYvXZSr6YV4 zFz-kn)-TU3UruBUMBp*i+~(nr7g=3kuX;v@D&0Fo*LQu>%5uzcA}20$AY;o4 zPZ780SnN@j^?5rk!*F+N=JVY^=*LhrE^sNinbMGeNmCIy4^x_GK@Wd&@P?v;UvgJY znU`2`O<%1?9Y(ZW^xp=0oeH(CAd{v!=hex1OFo4X#X~JmX?%6$LD)@kvasvf3ppln zQT_R%#8bP~OoyvT4or1j$qk>LH^>Pi_OHDn8S_(-z@4MyeUen^lG}O$cLLLQ&*~ z9N8nThodeMR>|9A-owd!eK7urE*;<5%jHmAO94g?5}3x1!_>&26CKVblyHupCZAVS zgG0Q!;~(8u+1*ct-cx%UeUM>NF0DRhO7eJsYi+nbx%sRz7P|7REE zQuNrRe5jgN%)j&2h8wbx?As37#0usu_y+{gva;@yWqtW_`!Tl>h&KMr(TJRydIeE0 zF=^~eky;+iOUMcW5mFHmD))wlCs%H^xZzh~oDS|9n$gCa&K0;+vtev^5zib|+n!Qm zP|_7I%`Fh-qvszOTV-pso5MNRE7w)a(8>u`vrPsglX*I# z$MDU~k$Cpk=PzHre3gRlhI_fqVxcR-Zo+AmMI{Dc&)y;<+4JYmZ^7Y4z@Aspa1`qfs@R%cWEbIm1yw{VH>9k$9MXZO?w1O63|+?i&BxSovmRE zM~Kb67+9`q!MjYQEbaAm%~N;>Tp6mWx3IABk~PXKl2cRrG88a0nWcd&60A#Czkt~j zc#GrRV!Sh6TEFD<4=+dfxcxu=j49>AtNGa&T8iEJ2sL-_U z443_3*!)J0V~$5vY0-asX@X%^YR(pCP%5efjTrW5p@@Y`AcSP2X$m z)ACsVM&0Va(JkQD{5!V%53q~)jeSo?TUTA+)E9I~otfp|pZSl-=zkP(3V8ns#-7!B zir{lh4hqsLZ_nVj(jPOeKc65@!#EXQ^PI|JaB7NE1#ars-%ro|2_=uKsRKOyr$<=- z9c`Zt-9I;-BK0SK0={Rk_@9eur^ELT`u`7j|JxVv5BSe&0=55B6nj6}ol~4or=t3Q zEQ%HJqa~&!kG-#2nJ4huc%Q#`CEsCt#DM0r|!Sh{)mLVNZ$_$wm#r z!lL%X4su^5x8vPKT!_Sr7s-GR1V~2z__jDK1z0fBTVgsWUuL28?*04AI5=NGIEWb# zsoF~k>0f*S(lz#WP;0m*@3d<(9Kg-i(Aa1&LJizXa&jL`5x}$M>FN2c^zq}z!ytN; zI;i!{(gRRD^567+T@^T+TEJD)*r$*tV=(s3D*6DvIv9dFLFlZ6ow~quWYYTcPegG^ zSm!33H&ZO9e+<5LIrDhvVVEI`ii)Wxkt**Yz|A#WY#e4P2x3(|Jv}e-G-_PP3-r|JbeXK^)E~-rO<{^N(!C8N|;ci#Vse=+5W*!nTE=H9Ax8 zL-N81QYiK|5}v$zh76fV=>C9C$5wdLCj_5^)e{}THtrwka7|+C=-i7AMWY+hJw&r; z4^1uU}lhyD0>F^^!APSk1kl0z8 z!?Vz_Ghcn3;Fc&y{D^%T#{w-3;)WOqxVYxSpA zzJzTP&T55>?MOjBp?4RVU3NUE*=plk4jGrXWl#DX8XFJHd1~U;>ot-HZgJl6s9Z_j zUS8VE>+Pi_K9BXf!}G!*E$;~ppMBR4@g(Fe0ijSf&K>js(GglNE2zB4g>?JT`2=9< zC6Uge`~9{-%$yW$)ct)6UVSvxskq=8C$_CC(t;3TNc3Iz-mrG?acm9baKL zfvO{S-;5mQvu*eh+q&Fsj;e3l87N;I^dD}nNwyjF)dG^N13TgNxlYZqmLTk0T3KPK zq`@o} zO4YibmFJ7D(`Fhl8PS3r{WAT~pDngxBf@I3V&NJkvasv9 z$$dVG51;h!+$EA%xXm4;sdSkeF;q*O*6(^<)~5Z*67YIY#XxJOdlDZDA-C#tWqmG2 zahpb9qHG)-%8!jX=^7-(s=PcsrOfXu6&9Jtko5L0&;Ou??a^}&h-t=p>51pW3K~s^ z-ytRR$f%j?hT-bN1;*bX?F4_O8!wK-2@a=b9eAM6^FGWG8+OCi7@3}mQGzJu9T@@w zW;$(Rm{%KKDYV4uJ}qiq)F~{&WLhltV&%A437MUDh=hK_(uGp99o=mgsJ+j2LSvJv z79mB8uV?@gZKZ~aB%SeD;a;yg(LSFf5^U5?&qloPahuw;O>D@Zz{i`f{1z0%8HcjQ zreDn}Gd0VmLfH<#KQqbnva#yPEs3i`%Bb7#q|9U0d}7{6wsOTT_c|4fcCy5QEEP`Z zgb;|sE{&8h2|FJ&G&lPI1I3bQtf^)CcDv0;X?v=l678DMFYahw9o#xyFXbEsoU67| z>lcmfh6;xRrlEJIX0fQNHoH~ATpd%Pg@||G&he7L=3F!CQm(X|#L26&cl#iyC0dWV zCNHFRqm^nd=0rBajFbemDpIyKR#B=sme4H4^H^~Xj{L@N6AF$8wmohVcfwQavC5O~ zFIYl`=W3sO#)((b@BT79r<&9AfEKN--Lv4oO&!jGO0xcbXwO$fjo_w@6&er@dQ|U{ zulnV2a@_exGF8>DW)#`3T&mx3Y^A$fkNdd#$f-0a_xgNrp)b%AB~ilUbzJti*WMO7!&BTEn$%mUmm0d!@-dzl($!gleuXY$3Gp=j z_?hQ&`Kq=2xBRe6*A%n@m}16b+V=8XJ;t^JfZEVOh4Id}4KvznH0dbIi*- zfMvDsh_cY4nI1I3h6A@ZZQrS|lA@;*Wl&>pm&;HYsyJ6{XJBe;+n42vKEDr!r^s5! zG}axqYTv|p7hbFCxID~NRsDUGe5BMm-=&0m@P%iG$idw>4Vj=4i}BBZ6O6HeA#IUt z-GJrnuu;DFAcu6vQ{6tL0KrDy9GnW{uhE%%Tz%X`da~TFtnDO1y}i9W%4u}im#lU? zfPalVrO+vyx3zUy^ul27_E)jSvF-N|3nA2F?3@=dGXdjxt*!Z%9@m3n=HhF8JL1t~ zC2MQL2D68~d#!cX1FFg^YplL6M)wnIyWVm43_M(X0Z)8gq{vKsxcDKQRKZ2_2<=wG zd+qaF{KX{hycYCF;BsH^M|M}}B4Mt>hhWX}c~-8E9L!pO)vTk8XEcWz_0s05Y38%j z(`6CbkG)R9shhADM3VD)xIp!b{6z-QlUUSSDe3nEra4c>LY-xTqFvXd1j<|+nkwF| zVpy-GqZT&nf>tvZ!Wd*122{}FIaM|@v^+e>jm9}PS4pY&U!PJ|@zI5bF=Pj#dJ?t? z`)jd?JK%=B=c!}yz7_e$)nI+x+Lx~Nv|X^JRz|M{)t@Viv}b?yYM~tpHQ*(H$rHE; z{0bR|4NDX~u775{=Rm`+q9qoiv6G-cT~M$L50vulzg?9c=JCFNmKq*Ptw*2C7NsgQ z8FLr6+Dd>~G52Fr|4G>PzSkVxp-VQkv%Q*Rk;b>Qm-n@tQ^)p@i*w>;W{2Yei~xD| ze0U-goBv?pF-)Yh1^we_f?0d&JuNNTm6aTwU=Rp%ZaUnI$C?#Q6VaV5+mB>TV0+oo zs*#s$z4pzESKN`)RQ`CmT5WPTic{1T|LuMz-X+l(?*z73!RwnL+lJjDxXR=|GnQXX zaV`^mjbQ<$(DDYlTB60x6txa3MuSU|PRKFAwmmgHnsQ$e(~c_eUwKkngaQ|S8-MxS zi&7A4`WEoFUH%Ao%y%dMW>ZEjd;9;57=GL5zk^+`z6La%VTWD$v&eGsDb@0i^-N31 zLU4BBpA>+&({LCTO9Ter{Szh2XzT-s;a^tv-{G#aMqyZy7%Xz>Z`4A2X1@PJ--Q1T zu${%=Q9 zZnHi7G?>;Zc@}H?xOmoNRp_B0-e)5UNafNu;&KD0k5Wc4N`WhaPcM|0?1!dyF88(y2NMaxIV$;3M@kOC@h;}0*~49)Tf zgbXqr2d=*(41Ugm1@dtW1uSl?DU9nO$wfw%WNV|csw zq6FS%CdSoI*XfpXJ+i@|@Zw@F9;S3VlApnvj1ne z+sD&WuEN$hQ#t3#!_iW6QubF5|2!>(i9ZwEeXj4M$&a6@Q!4_}BxXCJIqB%>3(bZf z3_9I*C*wA;1i^2+&53JufI(iq+a*{eTyq9`ZE+{W?=dq6f<%+P91UK11%>6G85n*7 zCeH-$!sSX#ltfPU6fhJZ0P?4&rvoYYADqUzH<;bWDT2d@0E-zPzw80RC$}`p;NZHJ z>qJg7lQ1LVazp1%Hz8a3x~f|5Z(x2V+O)jdBAdp4&zcC$GN;4ZziG*5^MY>k?AO3E zQu03mVB^zw_s{9yGvL`->2t1U$Ivs3{t<5cS2X-p?`e?zpSbUXmro@K6Jf2(o{{1Y zy{vnR0@9pkwGD$QZ`RIq$81AYHyc%Sjz50BV$ja-U?E3yv_m?|9JSc_^+@FKSgchZ z?-);lj{V+AxzE=f1-iLDXeTz+i`3z2V~fD4CN4&m2oiFhx@JQ?`xne?=x>1mAen%N zjo0{zzSoslspsdXrlO0ksv?DtTwNUU-bz_8DdGS|uDu{ycg8y?9_O)zJG~hChsWcs zU(NZhD#zC!b8^_MeK{n8O$4IH_;IO&c4q52F5hIEe%1Fx2LP)Ow{H6K5oEzY)0kRK zAQg$Mgl`y;s3Rx972bHVb4&P49v(6xaknvO*rO8tN# z>jV5$fc+GR@nRWuQ||l|14 z@llduh0y1BoeLShsJKf8&x=mxB=O<|vFrBCVOy^7TyMV*A)QTeiHSl=l{_i$-t#*g zFhkK*{)8l~TMKOo1qLpOV!QLr&4#mL&kMzML(#0Gem!%oVSu$lVOJS9(-@$TD0cC_ za<&9u%4EnTp1=G2Q_I0^h13_*t9i9e)0T3;gCG;j_b7mvH?NVJT<@*4CB)y8Ptv#S!w2`(J=K)wcEnw~cLYYnRHMQS z{$+$yW)2qj@3zwQt!*7Mox3piJ{?;=*SbMNs<-Z;OoNuCc|w(?$3q>R9mL@`nGmmq z?&gYm@xwQrWCu<0sVeK0Q9T7%>$Rv$kjnm6pHTBR3W-AP2kVQQoJPU~?VX0HSxtp; zIMPw<9w4p&7#H8cVF+aBI3KJ{N9wp?@?RjI*mUASI*0bYaLvhqMg+5(n3)+fa7Y>e zPs8EyaUV#|5_r4v$rR&|arCP{r*DPzdemT$P{l8Q_syXGgcA!Si%7jx<_>$0MC)@Ob6#}2j}VA>}WoT!rVS{8NZ8+BmwcMpP5SSTS!2J(jxqt zWyMDUJVJ6+4pxBI>z9|8x5{5Rj-sw)rJ>=a!C0^3AaYYsK)i!3u)SORlm5=ROl7Gg zCH-Sh24FxJV+`o$I&6x$v2lfEDY6u?GFxp=nPfwnwZ5qLS`ON&zH;ljOCK8LWL#k1 zNb@wEg6s#f)~@_OjhVP_4Ua5>u`@nORi?2y?8E1_nej?vrNk-?y%vsR-yo@YrxnJ9 zt~lp`MX68s9)TpDydx?WjnX-g(Nu3y)?W*QL4cm_#3bv)@R$R7-qR;@hUtzfWR>Vb ztF<@BdGGE9xTLFy4)iQ^7&Ea6CxjdZ?)MZKVvJrgVq6M=H}k8EHACwkVy^}eANHh6 zu7vxP8=M?;-!Zw#@;n-Nx2ZCegXXah$Vd3BcGQbfKi&J_7Cn|UkX67y?;S?MMxa(e zgS9e<)i+4+R5`l^h}0Ol=UBek;s#i=s6ccI3G#Qi%!WRIl|-RH_bKw^q{um=y{KEH z9e802v`XJ~0jvf*UH#vzX3@WFfV=q4_lt2?T^RlBC$<<^uK5$cWq%_<;|y0N-Axot zkO@qCB8h!nB(|f@?Z}dEs_VYp@l}c1%(Y&NRu`UMAx7~XKI3@6nC}&M0Ds{r!$9}I zVfjH*3Dl>ovu)aDk#w(KKGWN4+aim&IOgD*v!3j3lYhbyO(rcM8;6mw?ySw+g;Z6V za6`-9bX^az$9gqfbMj)isxj=&xDdTMt-h5&+~8F>SlmH2UGx4>wKFdW4yOV381is7 zWMd`G1El7JP^dgfi^-K5HDW8k-)?O8Gc5TdtjM-(^CfGpDRN6{u6f+eW zpNHQES$Zs*2#{T4ntuQYIs7Fhz52hVBvwZyAwk=hOgC-W8Hh~1{Pc^Y|e3U ziGm_G!=Ka1Mm%U1F!m+N1qVEZDbpg-POYjvS~17Xc1SZ)Wzl?a&aKPnAAUzX4O*I8UDw? zf5uf@sNAfn2ciHH!z_V^7L%}AIf6V|OmNxj75|z3a<*bp<%}z6J)2SRpM1mWe~}g; zIqD_4%Y7+(tApJG3*Dk<{U4r}DFp2Tfu+aku=NV#rgU^UGcEqZ3LDQ*NW-~&*~;9< z+na!ra(yH?BqR+a>s1}j1a!pkhJac{5NkzdA$ez{GLRc}1R}D8L`31n==p)$5DZ^Y z*UDTlPNv?j#^ne+#-=$6{1J2ED%!6>2IBt;qj3E!aYY_l{mRvnN|T9m-}CzzsdCUy zaoSK21_3Hmt;~WFIBV~4aD)P9Z7;A*2X{fLZy*`BKdpE$$jAUAEx@8)-13ig`)|P$ z3`e`vd=zNzM|s-Sm`qQvD?~G$ypwa$M)8S&@Ce+#z;6(`j#&AL$>zE>{uQL9ffPOv z>Ec|gbkULnNsJ&9VxZPZ_6!LWp8*vt*QHEwzwc!bGLXyC9RT*-_RWBWjnsKthYIX? zgPj7MuJSIx9L#=XA#%n_q;b>%ghF7sOW^%&wEdGw_BRdjKPC7K+x+3~{Vk9GVaj=& z(P#hQB8k75eE-jDZ|tYEJi}9f^KfeT)8^oR6bR*x&R@r(-z2NgAMPf+u>>0^Wpf*d zlwm8j(c83+kDkpVRC|9}L;S%}UhmZyVfL6IM9=b3sl}RBmjZHu67gyS86ylgO!1Q= zzH;-jZqJ-Z)$lTwld@X`A$F4EOtm;?36oL=A8llx8p5@&h!nRqQTr2OMBToPMO)6N{6GU&KMPVW!S_xnf zj{E-VAPBg`#ft2~3`^844LNWq?0gV{v*!$hMTHMKzQ^3LlS3L({Tc3v*|erh*QxRy z>yIH2;wPAW0XoE~T^m5k={@D_TOh9*WFxz$r{4oP>DI?v=+=z-f}5=BJtbPn4tHj{ zH0c=c48O0orsiyhtw=C?1w?cHRs2E(w;0GD*8}Pbq~5;=$+Fay;~T;CD5IFjlSlIv z^NeoJd=PWzGX3#)K~x*zh$wzkXM3r_(MG#2tm5J-vBi#M-kA7yjQ!gC@?Ge`n9+>w zY<>M$sj2`UAMlAa$pH)sNZDg=htPAHFDR(@kb$plbYAs!^?u5c_rLr;^<|Pw)0S!&WMRRDFH#9Z~CtkR?Ih=Ua^PINGLWy|19&Zw&j zg820eBk}n5_u^Q3ovhaf1<)NNdhQT?upyeBDS)0mTuo({q)lv{Kj_?)DN$4=H|e5N z&zia}QAd4OqbXYsbxZB3;qstBu%U598{fO)^DXTT z3d7wst5g=hie|%wK%xR!cpwmWrP@jr+an22@NdEC_fwsr;~%VaV6%xYI_c@@a?hXp zgXC&Od3o#B&6DjA*w19iunJolf;$k%s{w4n#HOZaL^p4~8O+tXa{c;XEWZsG$W(4@ zYErL(4;v*I*L&xRZg@Pwfk5^gxw*OhLqb#(6+eNc^iynXc3WGU-K0i=u9vm7b%l%e zX_>DV$?ha{GbD5mZk)8Vv`kT@eEj+Ir@rIuqS19_SJ&$KO|#Kb>9TRVm}kLj$En}0 zf|k~CfY7)S5WY&djkR?#*g9dVU~)6Eef|m+_W5(|+hA9O?99yj)jMrW!1z{-%&c`|DJfzDBgYGB~Rc~dZNkg05xQYbe&`_tg+0I+ceMn*DIQ|S%# z_1_>406o<866pL?)aJzb%1_&~%~|>Ra-E%>WL$4PWM*a-gAEO)7R$@a+d4bL>EigT z#G<34U2gSkVtWGyC7MsWt7g%qsj* zje9{1(uRkrF->Ub>jUN)Cd?!5J>oQARG3w1 z!S^f3X(>-JzuY*!g{i9G8#mZ{gjtpO8o2C^ipD9AnuN@5O;!&d!plhfZa^RpmsS%n z$0hD;{PPe9I|Or*e29db_hOgB`v0P#Q)w#8q6;^uBWo3diwo?D1UQ+ zl8A`txuoPvdHIjepFbaQ)z;F=0iHM}Zf+%D)b)c67zBkGFwI-qB_k(Sl9T%a_NXw0 zZ;an(VHp76@LfWJpuJ3%N}jTnRl$VIu5?Lpae8)kcK>dnDj9fTN9!6a>$^vDyGJ9{ z)TE>t7&OnA&Fje$ z!Nzma9O=zP({`VW>S~|Ue80bEJsM~5Ct*72pGP@S-3iZ9uI?)EtDmPDFHN0)h)6SsordoX%Ufn#0lHSnz3OnX4gM~S7 z%GK4VC@V*R?OE3C^0Kp;r6k>Ibyy=;C+}W5A2ADk5zF@ycHE!vDJm*GEy1m#U)h}0 zb7gh)JuEjTX8_P;O2A$Ylp-!e!R_{=QOTjl-!>FZc3T)F8pYiM=9ZQTw#q&t>B z32=KZg`~+Q4`wHyA*4gbhU|$8Nm5j8#5!1Zkmttj4uGc=B zm`!`%JVBWDc3=R1UAOP+m~Qp%aiv}4;OdKw$+?NU$7wJd1aCP!c&||>D2Q5AyQHMV z#KPj&(e9#>l2XcLLi!7$*DsuRn(-Iwx$rk zVOcTbUsLuXWBJgCjDv^AL1?Waafdr$z{`dOPuYMv4D`+354Aiw2Hte_W6G;uuHQjA z7PsrMZM!pD^`87zH*oj#eqvOpcq^lk`TK9vhr%~OA0vcz1dPb2O0_VtCE=5 zJIcGZ?WB3Kj{Sjvp#F}&F=nCLr1{uB z2v@$31%V8Cp6btU$CH`S?awfJC9v`K>30qXxYeKst3=Whqc6|&4@T`ne(Rr(%buq{ zmY;tA(Ql_((lVM5=Ttx1oPIN%YRNykTsIGt{98X~pX%ou$EQVv^LyODJkCz?Z%WcD zps^1q&cu-aV^L@%CjZxktt?RJe^~&sF(m`Fd)llSez1W2DeCu%j;@q6RlCtt8QK-2&*yJheCLtlMWW{`h#!o;ET6R>!EOyyu$bqQt#jx&0Q@9&& zywcFpzHgS6mi7-0#-pknw-^{4#18SfO8OOG>wI-r98pV$W<51X`DcvM*XHJe7vC)&Acti)=HOFJJpl<@RiDDAjG+UM#(XS$msK zS72qN2@tA3;^fBdT`B*}v>$Oavh&(QIbwlPck7Fk8{BWE@i~mEvuVXC;V)%x@!(P- zo~E!_J{9c9Nc|*ik!!P5h?~OvCsN0-7%_4EnPwVtCH#1MtpHDP*!geeiFfh*K{bWp z=xtlDr_Pa!h-4pdYLtNV(vuDQ|F4m&4~H^e!?;>?DXCMZ<8o?pYLy0K6DuDP9i7FJ zVwz+b>PS8Yo6krbxty~~)7sEZ%`h=$kqONZ`Dk*rPEDdXtk1Cr%lKHbhLw*w_dDu3 z$LWuA{&}ytysvqG@9%x)dG6tt|FTFxgy#~8 zneStj328l@$Kw&u8^oCJgu=QQraaBy3ysJr=0Mni0af?a;a?Wwm?Ef|c4FHs-FNIB zcr(&d6_Jq-GYjs2TsPMsDj3L-u@pMLu_i_Ly3MniN1s$}TU%VtT)okjUg})fvp%8| z#M4?(2{Z$b8F=_t(-=(j!@;*QR6Pvl=j_@PF|)|(NNSz+6Uo7y;tXf z|0YzW35Ycq{fGeDAjQgxiUqF`|DzO3bKQu$ciy}eez|;KbfGaXZeGD@)r?uJ{Pa+r zi#fCEc)f*CESrvF|JNdExp}wmCiJwaYFT>2#3~9y4Mg&|R)P1KZqcmi;`55&sFY!) zFO%11J_k}f7E{HES{VhyFgPP(xI z($!X7XST9T!WU^@C61@oEUI?<^dckT-n_Y0PfxEfKYuVo8V|WMkT?Yt_BX^;GZ)j- z)5-e!EztcE#m|LiW@U{+v}&U68#cQH1%l}L8pAAL{*#|lvS#NmP0wGN=wn{H=7F)_ zsfPsxM}0ZTTZ3BmHIXb34ORrH3=1v&W^->**WuSh}Wv_V<@T z%`13rxw2K)ar!?TYuy)0|F&OR`%&~h67x?{QBmTv%Is}vCq0JT4!A?6f>mtAar(H(M!&uVzjN1@ja292tk&c4}m&fK>^v;Rw}y? zGWTS?vA&+31Ns4E3MIOFdt=BCrFKXoBC0oZH?gf~IKi@rD1bOfVZ&dwth_Ty@LKo~ z?4zS*+=_0&Sfs^>pS4@r)w<4c#s~Sfr8moH<4&7<5KzPX^;y^KGmls-ogLP(ZU`}m zMW;)B|58+3Y=-=o@BH9tj$$zY1+93pv2jNSJ+TC4;sPvg-WQwK%Ihqus6gW3@ATPc z;niEcK2lQ!DE)l0=9la08%-w_Cf9e`3PAr21VfE+3#v| zkoJuebnSq?^1r)VFWep(Igj4W=YVgpg;uS^Uyrb@FTR$QheULE#{?3v z_h5LgYmQ9`f)Pse2fedOK$g!-PFC{|2(a=_o48IoM0RAEhjGrmxW(=8iEsKbZJdg< z4C_Y%kC<4Pn|m0g;K*vj8QovLUy!tAHuc$eqVUb8i1(ZKM!HWmLqo2Wb0~fWz}M>3 z*GovLW>BRL!n>%(j{J7ZmVrpe3Ig;KS$b-!I^VgB-8@WmXM`9g5>-@?VK3%A;a3Rq zG_jdd#c~X8z0b;nIyyQ+%*gX4Wla!>iJA~~1cCqTn*Gnep*Lq>YfDFx(vB{1CWj-yHd}dT zF}k|CJiNS$k)jj|g&uOboNQnaK|HZKmogn|Jsnpo9^eqSZ9sE*W~xDJ4BfJ^@a#di zSs6cP)Hree>c@dCxpr{5uTj1m45!Xs94o1u`T5ag5D-}$#soxRQX6>mmv}esG#Vdw z?EezKhMUbDqHnr|Pmuu&oW%vrstxOhc z6b}jpRto0exL1E?Jc9Cg&J~!LSVPPa@ds#8#UG+*4>J#6PHPZ$HW7 z^9?8ztljqtu$L!-@9Fx>2~)M;n?sY6bfJ{IKxCfSI2O30>Kn9kG4`>0t-ZV6o;{-o zXT)C@FV~xxn3y8pz&e}Y7e&5eHPnE<6N#uX(uB%$&76ry&k?(jYKXL6d#VKghD2q^ z_kSO~O&DFKXe8U^T$=u>m8Wu;>9K^;X6q2X(idM@h!QFt z{psU=eq7XTUnB>r{Nak-y2o=tfq}1}<0*e}pjn?xc7nWU3tjP+#+Rrik;J-d`r~V- zo~#EA<|YIn^c->8S8SSegE*6c^c-)a5U**i^pU*X3vn@J11%{h3E}a`3ijKt46Fao bamn^;_EcEs_LeaGw~C{K>mLR7zRCXrYJWPP literal 0 HcmV?d00001 diff --git a/doc/src/LectureNotes/_build/jupyter_execute/chapter6_134_2.png b/doc/src/LectureNotes/_build/jupyter_execute/chapter6_134_2.png new file mode 100644 index 0000000000000000000000000000000000000000..e3bbd68049d827106ee5a162ef13f69dcbe2ce24 GIT binary patch literal 28089 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 literal 0 HcmV?d00001 diff --git a/doc/src/LectureNotes/_build/jupyter_execute/chapter6_138_0.png b/doc/src/LectureNotes/_build/jupyter_execute/chapter6_138_0.png new file mode 100644 index 0000000000000000000000000000000000000000..cae5147e98060873de8b6baf4ec8efe9f3fd7fd7 GIT binary patch literal 26198 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 Z{0`5C{^vtq>I-c{TCLE;^Y7T literal 0 HcmV?d00001 diff --git a/doc/src/LectureNotes/_build/jupyter_execute/chapter6_138_1.png b/doc/src/LectureNotes/_build/jupyter_execute/chapter6_138_1.png new file mode 100644 index 0000000000000000000000000000000000000000..f889a46a4e9eefb41bb4a7865307d52c6ed3a5ad GIT binary patch literal 27885 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 z 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 literal 0 HcmV?d00001 diff --git a/doc/src/LectureNotes/_build/jupyter_execute/chapter8.ipynb b/doc/src/LectureNotes/_build/jupyter_execute/chapter8.ipynb index 1f63eb927..f91d8f826 100644 --- a/doc/src/LectureNotes/_build/jupyter_execute/chapter8.ipynb +++ b/doc/src/LectureNotes/_build/jupyter_execute/chapter8.ipynb @@ -94,27 +94,27 @@ "MSE before scaling: 0.01\n", "R2 score before scaling 0.94\n", "Feature min values before scaling:\n", - " [1.00000000e+00 2.52277631e-04 1.58998839e-03 6.36440033e-08\n", - " 4.01118504e-07 2.52806307e-06 1.60559584e-11 1.01193226e-10\n", - " 6.37773764e-10 4.01959093e-09 4.05055916e-15 2.55287874e-14\n", - " 1.60896055e-13 1.01405288e-12 6.39110289e-12 1.02186547e-18\n", - " 6.44034203e-18 4.05904756e-17 2.55822858e-16 1.61233230e-15\n", - " 1.01617794e-14]\n", + " [1.00000000e+00 3.86972479e-03 3.66528972e-03 1.49747700e-05\n", + " 1.41836625e-05 1.34343487e-05 5.79482386e-08 5.48868704e-08\n", + " 5.19872323e-08 4.92407803e-08 2.24243736e-10 2.12397083e-10\n", + " 2.01176282e-10 1.90548268e-10 1.80481726e-10 8.67761543e-13\n", + " 8.21918258e-13 7.78496845e-13 7.37369358e-13 6.98414609e-13\n", + " 6.61517814e-13]\n", "Feature max values before scaling:\n", - " [1. 0.99869632 0.999475 0.99739435 0.998172 0.99895027\n", - " 0.99609407 0.99687071 0.99764796 0.99842581 0.99479548 0.99557111\n", - " 0.99634735 0.99712419 0.99790164 0.99349859 0.99427321 0.99504844\n", - " 0.99582426 0.99660069 0.99737773]\n", + " [1. 0.99791107 0.99418827 0.99582651 0.99211148 0.98841032\n", + " 0.9937463 0.99003903 0.9863456 0.98266595 0.99167043 0.98797091\n", + " 0.9842852 0.98061323 0.97695496 0.9895989 0.98590711 0.98222909\n", + " 0.9785648 0.97491417 0.97127716]\n", "Feature min values after scaling:\n", - " [ 0. -1.70327945 -1.70487638 -1.10269333 -1.11031464 -1.11779074\n", - " -0.8675412 -0.87387845 -0.88025384 -0.88666051 -0.73621263 -0.74081963\n", - " -0.74548023 -0.75019465 -0.75496285 -0.65064103 -0.65385832 -0.65711132\n", - " -0.66040159 -0.66373067 -0.66710007]\n", + " [ 0. -1.66745992 -1.72823447 -1.09228638 -1.1114811 -1.1313648\n", + " -0.86506245 -0.87590574 -0.88698187 -0.89829265 -0.73687981 -0.74440021\n", + " -0.75205856 -0.75985475 -0.76778823 -0.65190491 -0.65755533 -0.66330693\n", + " -0.66916042 -0.67511627 -0.68117476]\n", "Feature max values after scaling:\n", - " [0. 1.7648157 1.69590827 2.29614193 2.24159129 2.18630067\n", - " 2.72674862 2.67767959 2.62822832 2.57838874 3.10180456 3.05384136\n", - " 3.0057178 2.95743601 2.90899738 3.44157349 3.39262419 3.3436382\n", - " 3.2946235 3.24558749 3.196537 ]\n", + " [0. 1.76330702 1.70952132 2.29506297 2.25330559 2.21033632\n", + " 2.73427311 2.69911557 2.66307432 2.6261167 3.11835914 3.08796041\n", + " 3.05688927 3.02512212 2.99263434 3.46490261 3.4379033 3.41038453\n", + " 3.38232999 3.35372259 3.32454443]\n", "MSE after scaling: 0.00\n", "R2 score for scaled data: 0.97\n" ] @@ -326,13 +326,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Test set accuracy: 0.95\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ + "Test set accuracy: 0.95\n", "Test set accuracy scaled data: 0.96\n" ] }, @@ -829,10 +823,10 @@ "name": "stdout", "output_type": "stream", "text": [ - "0.07206099142503472\n", - "4.125937788943556\n", - "[[ 1.03889255 3.1254397 ]\n", - " [ 3.1254397 10.77395298]]\n" + "0.11455861677725063\n", + "4.414311328416008\n", + "[[1.04460586 2.98508511]\n", + " [2.98508511 9.60711152]]\n" ] } ], @@ -873,10 +867,10 @@ "name": "stdout", "output_type": "stream", "text": [ - "0.07865526085644693\n", - "1.4346285243728323\n", - "[[1. 0.63566281]\n", - " [0.63566281 1. ]]\n" + "0.07650519724946082\n", + "1.5077307406836722\n", + "[[1. 0.63582252]\n", + " [0.63582252 1. ]]\n" ] } ], @@ -931,30 +925,30 @@ "name": "stdout", "output_type": "stream", "text": [ - "[[ 0.53680052 2.50858953]\n", - " [-0.62753667 -1.74895806]\n", - " [ 0.16570918 0.64706639]\n", - " [-0.27228985 -0.08345099]\n", - " [ 0.85643181 1.55737697]\n", - " [-0.329196 -2.18391809]\n", - " [ 0.92272798 2.91370357]\n", - " [-0.37864859 -0.25719203]\n", - " [-0.55226917 -1.4496257 ]\n", - " [-0.32172921 -1.9035916 ]]\n", + "[[-0.21054401 -1.67179046]\n", + " [-0.27924545 -1.98111498]\n", + " [-1.24089109 -3.51965915]\n", + " [ 2.17042981 6.77708985]\n", + " [-0.36489938 -0.63821317]\n", + " [-1.61222872 -5.67668711]\n", + " [-0.67184873 -0.62798419]\n", + " [ 1.21860807 4.36876959]\n", + " [ 0.0351748 -0.93789716]\n", + " [ 0.95544469 3.90748678]]\n", " 0 1\n", - "0 0.536801 2.508590\n", - "1 -0.627537 -1.748958\n", - "2 0.165709 0.647066\n", - "3 -0.272290 -0.083451\n", - "4 0.856432 1.557377\n", - "5 -0.329196 -2.183918\n", - "6 0.922728 2.913704\n", - "7 -0.378649 -0.257192\n", - "8 -0.552269 -1.449626\n", - "9 -0.321729 -1.903592\n", + "0 -0.210544 -1.671790\n", + "1 -0.279245 -1.981115\n", + "2 -1.240891 -3.519659\n", + "3 2.170430 6.777090\n", + "4 -0.364899 -0.638213\n", + "5 -1.612229 -5.676687\n", + "6 -0.671849 -0.627984\n", + "7 1.218608 4.368770\n", + "8 0.035175 -0.937897\n", + "9 0.955445 3.907487\n", " 0 1\n", - "0 1.000000 0.907143\n", - "1 0.907143 1.000000\n" + "0 1.000000 0.972249\n", + "1 0.972249 1.000000\n" ] } ], @@ -997,37 +991,37 @@ "text": [ " 0 1 2 3 4 5 6 7 \\\n", "0 0.0 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 \n", - "1 0.0 0.076168 0.080935 0.078268 0.081921 0.085682 0.070727 0.073798 \n", - "2 0.0 0.080935 0.086925 0.081766 0.086005 0.090410 0.072900 0.076302 \n", - "3 0.0 0.078268 0.081766 0.085075 0.088305 0.091557 0.079623 0.082640 \n", - "4 0.0 0.081921 0.086005 0.088305 0.091884 0.095514 0.082116 0.085368 \n", - "5 0.0 0.085682 0.090410 0.091557 0.095514 0.099557 0.084565 0.088068 \n", - "6 0.0 0.070727 0.072900 0.079623 0.082116 0.084565 0.076371 0.078937 \n", - "7 0.0 0.073798 0.076302 0.082640 0.085368 0.088068 0.078937 0.081684 \n", - "8 0.0 0.077019 0.079892 0.085767 0.088751 0.091725 0.081567 0.084509 \n", - "9 0.0 0.080401 0.083686 0.089005 0.092271 0.095547 0.084258 0.087409 \n", - "10 0.0 0.062426 0.063699 0.072024 0.073913 0.075721 0.070361 0.072486 \n", - "11 0.0 0.065031 0.066507 0.074745 0.076802 0.078786 0.072797 0.075066 \n", - "12 0.0 0.067773 0.069474 0.077585 0.079825 0.082002 0.075324 0.077748 \n", - "13 0.0 0.070658 0.072612 0.080551 0.082990 0.085376 0.077944 0.080532 \n", - "14 0.0 0.073697 0.075932 0.083645 0.086302 0.088919 0.080656 0.083422 \n", + "1 0.0 0.062851 0.073533 0.065769 0.068538 0.069947 0.059538 0.060320 \n", + "2 0.0 0.073533 0.087625 0.078561 0.082559 0.084744 0.071705 0.072983 \n", + "3 0.0 0.065769 0.078561 0.072769 0.076696 0.079022 0.068407 0.069803 \n", + "4 0.0 0.068538 0.082559 0.076696 0.081211 0.083977 0.072511 0.074206 \n", + "5 0.0 0.069947 0.084744 0.079022 0.083977 0.087102 0.075127 0.077070 \n", + "6 0.0 0.059538 0.071705 0.068407 0.072511 0.075127 0.066156 0.067782 \n", + "7 0.0 0.060320 0.072983 0.069803 0.074206 0.077070 0.067782 0.069583 \n", + "8 0.0 0.060735 0.073737 0.070715 0.075353 0.078424 0.068928 0.070878 \n", + "9 0.0 0.060967 0.074217 0.071359 0.076188 0.079434 0.069792 0.071870 \n", + "10 0.0 0.052371 0.063245 0.061909 0.065807 0.068404 0.061247 0.062897 \n", + "11 0.0 0.052613 0.063714 0.062491 0.066554 0.069297 0.062003 0.063759 \n", + "12 0.0 0.052756 0.064027 0.062920 0.067118 0.069987 0.062592 0.064441 \n", + "13 0.0 0.052853 0.064260 0.063261 0.067574 0.070552 0.063079 0.065009 \n", + "14 0.0 0.052933 0.064453 0.063553 0.067966 0.071040 0.063502 0.065504 \n", "\n", " 8 9 10 11 12 13 14 \n", "0 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 \n", - "1 0.077019 0.080401 0.062426 0.065031 0.067773 0.070658 0.073697 \n", - "2 0.079892 0.083686 0.063699 0.066507 0.069474 0.072612 0.075932 \n", - "3 0.085767 0.089005 0.072024 0.074745 0.077585 0.080551 0.083645 \n", - "4 0.088751 0.092271 0.073913 0.076802 0.079825 0.082990 0.086302 \n", - "5 0.091725 0.095547 0.075721 0.078786 0.082002 0.085376 0.088919 \n", - "6 0.081567 0.084258 0.070361 0.072797 0.075324 0.077944 0.080656 \n", - "7 0.084509 0.087409 0.072486 0.075066 0.077748 0.080532 0.083422 \n", - "8 0.087542 0.090669 0.074644 0.077376 0.080221 0.083181 0.086261 \n", - "9 0.090669 0.094040 0.076827 0.079721 0.082739 0.085887 0.089170 \n", - "10 0.074644 0.076827 0.065759 0.067867 0.070042 0.072284 0.074590 \n", - "11 0.077376 0.079721 0.067867 0.070098 0.072403 0.074782 0.077234 \n", - "12 0.080221 0.082739 0.070042 0.072403 0.074845 0.077371 0.079979 \n", - "13 0.083181 0.085887 0.072284 0.074782 0.077371 0.080053 0.082828 \n", - "14 0.086261 0.089170 0.074590 0.077234 0.079979 0.082828 0.085781 \n" + "1 0.060735 0.060967 0.052371 0.052613 0.052756 0.052853 0.052933 \n", + "2 0.073737 0.074217 0.063245 0.063714 0.064027 0.064260 0.064453 \n", + "3 0.070715 0.071359 0.061909 0.062491 0.062920 0.063261 0.063553 \n", + "4 0.075353 0.076188 0.065807 0.066554 0.067118 0.067574 0.067966 \n", + "5 0.078424 0.079434 0.068404 0.069297 0.069987 0.070552 0.071040 \n", + "6 0.068928 0.069792 0.061247 0.062003 0.062592 0.063079 0.063502 \n", + "7 0.070878 0.071870 0.062897 0.063759 0.064441 0.065009 0.065504 \n", + "8 0.072303 0.073408 0.064109 0.065065 0.065830 0.066473 0.067035 \n", + "9 0.073408 0.074615 0.065054 0.066094 0.066934 0.067645 0.068268 \n", + "10 0.064109 0.065054 0.057780 0.058594 0.059248 0.059799 0.060281 \n", + "11 0.065065 0.066094 0.058594 0.059478 0.060193 0.060800 0.061333 \n", + "12 0.065830 0.066934 0.059248 0.060193 0.060965 0.061622 0.062202 \n", + "13 0.066473 0.067645 0.059799 0.060800 0.061622 0.062326 0.062949 \n", + "14 0.067035 0.068268 0.060281 0.061333 0.062202 0.062949 0.063612 \n" ] } ], @@ -1454,10 +1448,10 @@ "output_type": "stream", "text": [ " 0 1\n", - "0 3.884269 1.937050\n", - "1 1.937050 1.951359\n", - "[[3.88426936 1.93705016]\n", - " [1.93705016 1.95135877]]\n" + "0 3.963873 1.979586\n", + "1 1.979586 1.976796\n", + "[[3.96387325 1.97958566]\n", + " [1.97958566 1.97679551]]\n" ] } ], @@ -1486,13 +1480,13 @@ "output_type": "stream", "text": [ "Centered covariance using own code\n", - "[[3.88426936 1.93705016]\n", - " [1.93705016 1.95135877]]\n" + "[[3.96387325 1.97958566]\n", + " [1.97958566 1.97679551]]\n" ] }, { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
    " ] @@ -1581,20 +1575,14 @@ "output_type": "stream", "text": [ "Eigenvalues of Covariance matrix\n", - "5.082577137078103\n", - "0.7530509884519185\n", + "5.185256249406441\n", + "0.7554125101643117\n", "First eigenvector\n", - "[0.85042593 0.5260948 ]\n", + "[0.85104821 0.52508756]\n", "Second eigenvector\n", - "[-0.5260948 0.85042593]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ + "[-0.52508756 0.85104821]\n", "Eigenvector of largest eigenvalue\n", - "[-0.85042593 -0.5260948 ]\n" + "[-0.85104821 -0.52508756]\n" ] } ], diff --git a/doc/src/LectureNotes/_build/jupyter_execute/chapter8_77_1.png b/doc/src/LectureNotes/_build/jupyter_execute/chapter8_77_1.png index 50f345c7fb1e04a9736e726513119ab088ecc749..1bc84b6021bb3060d14bc00cd0ada337412c83b3 100644 GIT binary patch literal 27981 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 G?|%T?3u^EH literal 24893 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 diff --git a/doc/src/LectureNotes/_build/jupyter_execute/chapter9.ipynb b/doc/src/LectureNotes/_build/jupyter_execute/chapter9.ipynb index 0d3781755..50f4bc92b 100644 --- a/doc/src/LectureNotes/_build/jupyter_execute/chapter9.ipynb +++ b/doc/src/LectureNotes/_build/jupyter_execute/chapter9.ipynb @@ -478,7 +478,7 @@ "output_type": "stream", "text": [ "\r", - " 1/12 [=>............................] - ETA: 0s - loss: 2.5817 - accuracy: 0.2500" + " 1/12 [=>............................] - ETA: 0s - loss: 3.0150 - accuracy: 0.1250" ] }, { @@ -486,7 +486,7 @@ "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", - "12/12 [==============================] - 0s 917us/step - loss: 2.8078 - accuracy: 0.1139\n" + "12/12 [==============================] - 0s 958us/step - loss: 2.9441 - accuracy: 0.0722\n" ] }, { @@ -495,7 +495,7 @@ "text": [ "Learning rate = 1e-05\n", "Lambda = 1e-05\n", - "Test accuracy: 0.114\n", + "Test accuracy: 0.072\n", "\n" ] }, @@ -504,7 +504,7 @@ "output_type": "stream", "text": [ "\r", - " 1/12 [=>............................] - ETA: 0s - loss: 3.0782 - accuracy: 0.1875" + " 1/12 [=>............................] - ETA: 0s - loss: 3.3024 - accuracy: 0.0312" ] }, { @@ -512,7 +512,7 @@ "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", - "12/12 [==============================] - 0s 932us/step - loss: 3.3640 - accuracy: 0.1500\n" + "12/12 [==============================] - 0s 957us/step - loss: 3.0967 - accuracy: 0.1389\n" ] }, { @@ -521,7 +521,7 @@ "text": [ "Learning rate = 1e-05\n", "Lambda = 0.0001\n", - "Test accuracy: 0.150\n", + "Test accuracy: 0.139\n", "\n" ] }, @@ -530,7 +530,7 @@ "output_type": "stream", "text": [ "\r", - " 1/12 [=>............................] - ETA: 0s - loss: 2.7005 - accuracy: 0.0312" + " 1/12 [=>............................] - ETA: 0s - loss: 2.9008 - accuracy: 0.2188" ] }, { @@ -538,7 +538,7 @@ "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", - "12/12 [==============================] - 0s 933us/step - loss: 2.7588 - accuracy: 0.0944\n" + "12/12 [==============================] - 0s 1ms/step - loss: 3.4843 - accuracy: 0.1028\n" ] }, { @@ -547,7 +547,7 @@ "text": [ "Learning rate = 1e-05\n", "Lambda = 0.001\n", - "Test accuracy: 0.094\n", + "Test accuracy: 0.103\n", "\n" ] }, @@ -556,7 +556,7 @@ "output_type": "stream", "text": [ "\r", - " 1/12 [=>............................] - ETA: 0s - loss: 3.9994 - accuracy: 0.1250" + " 1/12 [=>............................] - ETA: 0s - loss: 3.7695 - accuracy: 0.1250" ] }, { @@ -564,7 +564,7 @@ "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", - "12/12 [==============================] - 0s 1ms/step - loss: 4.2041 - accuracy: 0.1028\n" + "12/12 [==============================] - 0s 968us/step - loss: 3.6647 - accuracy: 0.1417\n" ] }, { @@ -573,7 +573,7 @@ "text": [ "Learning rate = 1e-05\n", "Lambda = 0.01\n", - "Test accuracy: 0.103\n", + "Test accuracy: 0.142\n", "\n" ] }, @@ -582,7 +582,7 @@ "output_type": "stream", "text": [ "\r", - " 1/12 [=>............................] - ETA: 0s - loss: 12.9177 - accuracy: 0.1250" + " 1/12 [=>............................] - ETA: 0s - loss: 12.4141 - accuracy: 0.0938" ] }, { @@ -590,7 +590,7 @@ "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", - "12/12 [==============================] - 0s 939us/step - loss: 12.8693 - accuracy: 0.1056\n" + "12/12 [==============================] - 0s 960us/step - loss: 12.3084 - accuracy: 0.1028\n" ] }, { @@ -599,7 +599,7 @@ "text": [ "Learning rate = 1e-05\n", "Lambda = 0.1\n", - "Test accuracy: 0.106\n", + "Test accuracy: 0.103\n", "\n" ] }, @@ -608,7 +608,7 @@ "output_type": "stream", "text": [ "\r", - " 1/12 [=>............................] - ETA: 0s - loss: 92.4325 - accuracy: 0.1250" + " 1/12 [=>............................] - ETA: 0s - loss: 92.7441 - accuracy: 0.0938" ] }, { @@ -616,7 +616,7 @@ "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", - "12/12 [==============================] - 0s 2ms/step - loss: 92.4491 - accuracy: 0.1111\n" + "12/12 [==============================] - 0s 959us/step - loss: 91.7224 - accuracy: 0.1306\n" ] }, { @@ -625,7 +625,7 @@ "text": [ "Learning rate = 1e-05\n", "Lambda = 1.0\n", - "Test accuracy: 0.111\n", + "Test accuracy: 0.131\n", "\n" ] }, @@ -634,7 +634,7 @@ "output_type": "stream", "text": [ "\r", - " 1/12 [=>............................] - ETA: 0s - loss: 514.5186 - accuracy: 0.0312" + " 1/12 [=>............................] - ETA: 0s - loss: 514.1083 - accuracy: 0.0625" ] }, { @@ -642,7 +642,7 @@ "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", - "12/12 [==============================] - 0s 939us/step - loss: 514.2589 - accuracy: 0.1028\n" + "12/12 [==============================] - 0s 958us/step - loss: 513.9800 - accuracy: 0.1111\n" ] }, { @@ -651,7 +651,7 @@ "text": [ "Learning rate = 1e-05\n", "Lambda = 10.0\n", - "Test accuracy: 0.103\n", + "Test accuracy: 0.111\n", "\n" ] } diff --git a/doc/src/LectureNotes/_build/jupyter_execute/testbook/_build/jupyter_execute/chapter2.ipynb b/doc/src/LectureNotes/_build/jupyter_execute/testbook/_build/jupyter_execute/chapter2.ipynb index 95900d0c8..8e5d4fc24 100644 --- a/doc/src/LectureNotes/_build/jupyter_execute/testbook/_build/jupyter_execute/chapter2.ipynb +++ b/doc/src/LectureNotes/_build/jupyter_execute/testbook/_build/jupyter_execute/chapter2.ipynb @@ -2152,8 +2152,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "[-1.17029256 1.16440383 -0.52324284 0.91883189 -0.05688344 -0.80125589\n", - " 1.85759035 -1.11063616 0.67761635 0.09188807]\n" + "[ 1.8413241 -1.44931127 0.91189378 1.82553587 0.69940044 -0.65726179\n", + " 1.72526513 1.82825747 -1.34003257 -0.5817835 ]\n" ] } ], diff --git a/doc/src/LectureNotes/_build/jupyter_execute/testbook/chapter2.ipynb b/doc/src/LectureNotes/_build/jupyter_execute/testbook/chapter2.ipynb index f033fa132..ba853211e 100644 --- a/doc/src/LectureNotes/_build/jupyter_execute/testbook/chapter2.ipynb +++ b/doc/src/LectureNotes/_build/jupyter_execute/testbook/chapter2.ipynb @@ -2152,8 +2152,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "[-0.15903306 -1.03373868 0.31582494 -0.65395262 0.96308377 -0.89760255\n", - " 1.62466988 1.27946914 -0.71331923 -0.2179017 ]\n" + "[-1.04569783 1.68833083 1.59472197 -0.22027464 -1.12477388 0.78480985\n", + " 0.8799874 -0.43301111 -0.53140431 0.2976373 ]\n" ] } ], diff --git a/doc/src/LectureNotes/_toc.yml b/doc/src/LectureNotes/_toc.yml index 5ad15dc40..abf629534 100644 --- a/doc/src/LectureNotes/_toc.yml +++ b/doc/src/LectureNotes/_toc.yml @@ -9,5 +9,7 @@ - file: chapter6.ipynb - file: chapter7.ipynb - file: chapter8.ipynb - - file: chapter9.ipynb + - file: chapter9.ipynb + - file: chapter10.ipynb + - file: chapter11.ipynb diff --git a/doc/src/LectureNotes/chapter10.ipynb b/doc/src/LectureNotes/chapter10.ipynb new file mode 100644 index 000000000..be47c97e1 --- /dev/null +++ b/doc/src/LectureNotes/chapter10.ipynb @@ -0,0 +1,3815 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Recurrent Neural Networks\n", + "\n", + "[Overview video](https://www.youtube.com/watch?v=SEnXr6v2ifU&ab_channel=AlexanderAmini).\n", + "See also lecture on Thursday October 22 and examples from [week 42](https://compphysics.github.io/MachineLearning/doc/pub/week42/html/week42.html).\n", + "\n", + "[IN5400 at UiO Lecture](https://www.uio.no/studier/emner/matnat/ifi/IN5400/v20/material/week10/in5400_2020_week10_recurrent_neural_network.pdf)\n", + "\n", + "[CS231 at Stanford Lecture](https://www.youtube.com/watch?v=6niqTuYFZLQ&list=PLzUTmXVwsnXod6WNdg57Yc3zFx_f-RYsq&index=10&ab_channel=StanfordUniversitySchoolofEngineering)\n", + "\n", + "## Recurrent neural networks: Overarching view\n", + "\n", + "Till now our focus has been, including convolutional neural networks\n", + "as well, on feedforward neural networks. The output or the activations\n", + "flow only in one direction, from the input layer to the output layer.\n", + "\n", + "A recurrent neural network (RNN) looks very much like a feedforward\n", + "neural network, except that it also has connections pointing\n", + "backward. \n", + "\n", + "RNNs are used to analyze time series data such as stock prices, and\n", + "tell you when to buy or sell. In autonomous driving systems, they can\n", + "anticipate car trajectories and help avoid accidents. More generally,\n", + "they can work on sequences of arbitrary lengths, rather than on\n", + "fixed-sized inputs like all the nets we have discussed so far. For\n", + "example, they can take sentences, documents, or audio samples as\n", + "input, making them extremely useful for natural language processing\n", + "systems such as automatic translation and speech-to-text.\n", + "\n", + "\n", + "\n", + "\n", + "## Set up of an RNN\n", + "\n", + "\n", + "Text to come.\n", + "\n", + "\n", + "## A simple example" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "\n", + "# Start importing packages\n", + "import pandas as pd\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import tensorflow as tf\n", + "from tensorflow.keras import datasets, layers, models\n", + "from tensorflow.keras.layers import Input\n", + "from tensorflow.keras.models import Model, Sequential \n", + "from tensorflow.keras.layers import Dense, SimpleRNN, LSTM, GRU\n", + "from tensorflow.keras import optimizers \n", + "from tensorflow.keras import regularizers \n", + "from tensorflow.keras.utils import to_categorical \n", + "\n", + "\n", + "\n", + "# convert into dataset matrix\n", + "def convertToMatrix(data, step):\n", + " X, Y =[], []\n", + " for i in range(len(data)-step):\n", + " d=i+step \n", + " X.append(data[i:d,])\n", + " Y.append(data[d,])\n", + " return np.array(X), np.array(Y)\n", + "\n", + "step = 4\n", + "N = 1000 \n", + "Tp = 800 \n", + "\n", + "t=np.arange(0,N)\n", + "x=np.sin(0.02*t)+2*np.random.rand(N)\n", + "df = pd.DataFrame(x)\n", + "df.head()\n", + "\n", + "plt.plot(df)\n", + "plt.show()\n", + "\n", + "values=df.values\n", + "train,test = values[0:Tp,:], values[Tp:N,:]\n", + "\n", + "# add step elements into train and test\n", + "test = np.append(test,np.repeat(test[-1,],step))\n", + "train = np.append(train,np.repeat(train[-1,],step))\n", + " \n", + "trainX,trainY =convertToMatrix(train,step)\n", + "testX,testY =convertToMatrix(test,step)\n", + "trainX = np.reshape(trainX, (trainX.shape[0], 1, trainX.shape[1]))\n", + "testX = np.reshape(testX, (testX.shape[0], 1, testX.shape[1]))\n", + "\n", + "model = Sequential()\n", + "model.add(SimpleRNN(units=32, input_shape=(1,step), activation=\"relu\"))\n", + "model.add(Dense(8, activation=\"relu\")) \n", + "model.add(Dense(1))\n", + "model.compile(loss='mean_squared_error', optimizer='rmsprop')\n", + "model.summary()\n", + "\n", + "model.fit(trainX,trainY, epochs=100, batch_size=16, verbose=2)\n", + "trainPredict = model.predict(trainX)\n", + "testPredict= model.predict(testX)\n", + "predicted=np.concatenate((trainPredict,testPredict),axis=0)\n", + "\n", + "trainScore = model.evaluate(trainX, trainY, verbose=0)\n", + "print(trainScore)\n", + "\n", + "index = df.index.values\n", + "plt.plot(index,df)\n", + "plt.plot(index,predicted)\n", + "plt.axvline(df.index[Tp], c=\"r\")\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## An extrapolation example\n", + "\n", + "The following code provides an example of how recurrent neural\n", + "networks can be used to extrapolate to unknown values of physics data\n", + "sets. Specifically, the data sets used in this program come from\n", + "a quantum mechanical many-body calculation of energies as functions of the number of particles." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "\n", + "# For matrices and calculations\n", + "import numpy as np\n", + "# For machine learning (backend for keras)\n", + "import tensorflow as tf\n", + "# User-friendly machine learning library\n", + "# Front end for TensorFlow\n", + "import tensorflow.keras\n", + "# Different methods from Keras needed to create an RNN\n", + "# This is not necessary but it shortened function calls \n", + "# that need to be used in the code.\n", + "from tensorflow.keras import datasets, layers, models\n", + "from tensorflow.keras.layers import Input\n", + "from tensorflow.keras import regularizers\n", + "from tensorflow.keras.models import Model, Sequential\n", + "from tensorflow.keras.layers import Dense, SimpleRNN, LSTM, GRU\n", + "# For timing the code\n", + "from timeit import default_timer as timer\n", + "# For plotting\n", + "import matplotlib.pyplot as plt\n", + "\n", + "\n", + "# The data set\n", + "datatype='VaryDimension'\n", + "X_tot = np.arange(2, 42, 2)\n", + "y_tot = np.array([-0.03077640549, -0.08336233266, -0.1446729567, -0.2116753732, -0.2830637392, -0.3581341341, -0.436462435, -0.5177783846,\n", + "\t-0.6019067271, -0.6887363571, -0.7782028952, -0.8702784034, -0.9649652536, -1.062292565, -1.16231451, \n", + "\t-1.265109911, -1.370782966, -1.479465113, -1.591317992, -1.70653767])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Formatting the Data\n", + "\n", + "The way the recurrent neural networks are trained in this program\n", + "differs from how machine learning algorithms are usually trained.\n", + "Typically a machine learning algorithm is trained by learning the\n", + "relationship between the x data and the y data. In this program, the\n", + "recurrent neural network will be trained to recognize the relationship\n", + "in a sequence of y values. This is type of data formatting is\n", + "typically used time series forcasting, but it can also be used in any\n", + "extrapolation (time series forecasting is just a specific type of\n", + "extrapolation along the time axis). This method of data formatting\n", + "does not use the x data and assumes that the y data are evenly spaced.\n", + "\n", + "For a standard machine learning algorithm, the training data has the\n", + "form of (x,y) so the machine learning algorithm learns to assiciate a\n", + "y value with a given x value. This is useful when the test data has x\n", + "values within the same range as the training data. However, for this\n", + "application, the x values of the test data are outside of the x values\n", + "of the training data and the traditional method of training a machine\n", + "learning algorithm does not work as well. For this reason, the\n", + "recurrent neural network is trained on sequences of y values of the\n", + "form ((y1, y2), y3), so that the network is concerned with learning\n", + "the pattern of the y data and not the relation between the x and y\n", + "data. As long as the pattern of y data outside of the training region\n", + "stays relatively stable compared to what was inside the training\n", + "region, this method of training can produce accurate extrapolations to\n", + "y values far removed from the training data set.\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# FORMAT_DATA\n", + "def format_data(data, length_of_sequence = 2): \n", + " \"\"\"\n", + " Inputs:\n", + " data(a numpy array): the data that will be the inputs to the recurrent neural\n", + " network\n", + " length_of_sequence (an int): the number of elements in one iteration of the\n", + " sequence patter. For a function approximator use length_of_sequence = 2.\n", + " Returns:\n", + " rnn_input (a 3D numpy array): the input data for the recurrent neural network. Its\n", + " dimensions are length of data - length of sequence, length of sequence, \n", + " dimnsion of data\n", + " rnn_output (a numpy array): the training data for the neural network\n", + " Formats data to be used in a recurrent neural network.\n", + " \"\"\"\n", + "\n", + " X, Y = [], []\n", + " for i in range(len(data)-length_of_sequence):\n", + " # Get the next length_of_sequence elements\n", + " a = data[i:i+length_of_sequence]\n", + " # Get the element that immediately follows that\n", + " b = data[i+length_of_sequence]\n", + " # Reshape so that each data point is contained in its own array\n", + " a = np.reshape (a, (len(a), 1))\n", + " X.append(a)\n", + " Y.append(b)\n", + " rnn_input = np.array(X)\n", + " rnn_output = np.array(Y)\n", + "\n", + " return rnn_input, rnn_output\n", + "\n", + "\n", + "# ## Defining the Recurrent Neural Network Using Keras\n", + "# \n", + "# The following method defines a simple recurrent neural network in keras consisting of one input layer, one hidden layer, and one output layer.\n", + "\n", + "def rnn(length_of_sequences, batch_size = None, stateful = False):\n", + " \"\"\"\n", + " Inputs:\n", + " length_of_sequences (an int): the number of y values in \"x data\". This is determined\n", + " when the data is formatted\n", + " batch_size (an int): Default value is None. See Keras documentation of SimpleRNN.\n", + " stateful (a boolean): Default value is False. See Keras documentation of SimpleRNN.\n", + " Returns:\n", + " model (a Keras model): The recurrent neural network that is built and compiled by this\n", + " method\n", + " Builds and compiles a recurrent neural network with one hidden layer and returns the model.\n", + " \"\"\"\n", + " # Number of neurons in the input and output layers\n", + " in_out_neurons = 1\n", + " # Number of neurons in the hidden layer\n", + " hidden_neurons = 200\n", + " # Define the input layer\n", + " inp = Input(batch_shape=(batch_size, \n", + " length_of_sequences, \n", + " in_out_neurons)) \n", + " # Define the hidden layer as a simple RNN layer with a set number of neurons and add it to \n", + " # the network immediately after the input layer\n", + " rnn = SimpleRNN(hidden_neurons, \n", + " return_sequences=False,\n", + " stateful = stateful,\n", + " name=\"RNN\")(inp)\n", + " # Define the output layer as a dense neural network layer (standard neural network layer)\n", + " #and add it to the network immediately after the hidden layer.\n", + " dens = Dense(in_out_neurons,name=\"dense\")(rnn)\n", + " # Create the machine learning model starting with the input layer and ending with the \n", + " # output layer\n", + " model = Model(inputs=[inp],outputs=[dens])\n", + " # Compile the machine learning model using the mean squared error function as the loss \n", + " # function and an Adams optimizer.\n", + " model.compile(loss=\"mean_squared_error\", optimizer=\"adam\") \n", + " return model" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Predicting New Points With A Trained Recurrent Neural Network" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def test_rnn (x1, y_test, plot_min, plot_max):\n", + " \"\"\"\n", + " Inputs:\n", + " x1 (a list or numpy array): The complete x component of the data set\n", + " y_test (a list or numpy array): The complete y component of the data set\n", + " plot_min (an int or float): the smallest x value used in the training data\n", + " plot_max (an int or float): the largest x valye used in the training data\n", + " Returns:\n", + " None.\n", + " Uses a trained recurrent neural network model to predict future points in the \n", + " series. Computes the MSE of the predicted data set from the true data set, saves\n", + " the predicted data set to a csv file, and plots the predicted and true data sets w\n", + " while also displaying the data range used for training.\n", + " \"\"\"\n", + " # Add the training data as the first dim points in the predicted data array as these\n", + " # are known values.\n", + " y_pred = y_test[:dim].tolist()\n", + " # Generate the first input to the trained recurrent neural network using the last two \n", + " # points of the training data. Based on how the network was trained this means that it\n", + " # will predict the first point in the data set after the training data. All of the \n", + " # brackets are necessary for Tensorflow.\n", + " next_input = np.array([[[y_test[dim-2]], [y_test[dim-1]]]])\n", + " # Save the very last point in the training data set. This will be used later.\n", + " last = [y_test[dim-1]]\n", + "\n", + " # Iterate until the complete data set is created.\n", + " for i in range (dim, len(y_test)):\n", + " # Predict the next point in the data set using the previous two points.\n", + " next = model.predict(next_input)\n", + " # Append just the number of the predicted data set\n", + " y_pred.append(next[0][0])\n", + " # Create the input that will be used to predict the next data point in the data set.\n", + " next_input = np.array([[last, next[0]]], dtype=np.float64)\n", + " last = next\n", + "\n", + " # Print the mean squared error between the known data set and the predicted data set.\n", + " print('MSE: ', np.square(np.subtract(y_test, y_pred)).mean())\n", + " # Save the predicted data set as a csv file for later use\n", + " name = datatype + 'Predicted'+str(dim)+'.csv'\n", + " np.savetxt(name, y_pred, delimiter=',')\n", + " # Plot the known data set and the predicted data set. The red box represents the region that was used\n", + " # for the training data.\n", + " fig, ax = plt.subplots()\n", + " ax.plot(x1, y_test, label=\"true\", linewidth=3)\n", + " ax.plot(x1, y_pred, 'g-.',label=\"predicted\", linewidth=4)\n", + " ax.legend()\n", + " # Created a red region to represent the points used in the training data.\n", + " ax.axvspan(plot_min, plot_max, alpha=0.25, color='red')\n", + " plt.show()\n", + "\n", + "# Check to make sure the data set is complete\n", + "assert len(X_tot) == len(y_tot)\n", + "\n", + "# This is the number of points that will be used in as the training data\n", + "dim=12\n", + "\n", + "# Separate the training data from the whole data set\n", + "X_train = X_tot[:dim]\n", + "y_train = y_tot[:dim]\n", + "\n", + "\n", + "# Generate the training data for the RNN, using a sequence of 2\n", + "rnn_input, rnn_training = format_data(y_train, 2)\n", + "\n", + "\n", + "# Create a recurrent neural network in Keras and produce a summary of the \n", + "# machine learning model\n", + "model = rnn(length_of_sequences = rnn_input.shape[1])\n", + "model.summary()\n", + "\n", + "# Start the timer. Want to time training+testing\n", + "start = timer()\n", + "# Fit the model using the training data genenerated above using 150 training iterations and a 5%\n", + "# validation split. Setting verbose to True prints information about each training iteration.\n", + "hist = model.fit(rnn_input, rnn_training, batch_size=None, epochs=150, \n", + " verbose=True,validation_split=0.05)\n", + "\n", + "for label in [\"loss\",\"val_loss\"]:\n", + " plt.plot(hist.history[label],label=label)\n", + "\n", + "plt.ylabel(\"loss\")\n", + "plt.xlabel(\"epoch\")\n", + "plt.title(\"The final validation loss: {}\".format(hist.history[\"val_loss\"][-1]))\n", + "plt.legend()\n", + "plt.show()\n", + "\n", + "# Use the trained neural network to predict more points of the data set\n", + "test_rnn(X_tot, y_tot, X_tot[0], X_tot[dim-1])\n", + "# Stop the timer and calculate the total time needed.\n", + "end = timer()\n", + "print('Time: ', end-start)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Other Things to Try\n", + "\n", + "\n", + "Changing the size of the recurrent neural network and its parameters\n", + "can drastically change the results you get from the model. The below\n", + "code takes the simple recurrent neural network from above and adds a\n", + "second hidden layer, changes the number of neurons in the hidden\n", + "layer, and explicitly declares the activation function of the hidden\n", + "layers to be a sigmoid function. The loss function and optimizer can\n", + "also be changed but are kept the same as the above network. These\n", + "parameters can be tuned to provide the optimal result from the\n", + "network. For some ideas on how to improve the performance of a\n", + "[recurrent neural network](https://danijar.com/tips-for-training-recurrent-neural-networks)." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def rnn_2layers(length_of_sequences, batch_size = None, stateful = False):\n", + " \"\"\"\n", + " Inputs:\n", + " length_of_sequences (an int): the number of y values in \"x data\". This is determined\n", + " when the data is formatted\n", + " batch_size (an int): Default value is None. See Keras documentation of SimpleRNN.\n", + " stateful (a boolean): Default value is False. See Keras documentation of SimpleRNN.\n", + " Returns:\n", + " model (a Keras model): The recurrent neural network that is built and compiled by this\n", + " method\n", + " Builds and compiles a recurrent neural network with two hidden layers and returns the model.\n", + " \"\"\"\n", + " # Number of neurons in the input and output layers\n", + " in_out_neurons = 1\n", + " # Number of neurons in the hidden layer, increased from the first network\n", + " hidden_neurons = 500\n", + " # Define the input layer\n", + " inp = Input(batch_shape=(batch_size, \n", + " length_of_sequences, \n", + " in_out_neurons)) \n", + " # Create two hidden layers instead of one hidden layer. Explicitly set the activation\n", + " # function to be the sigmoid function (the default value is hyperbolic tangent)\n", + " rnn1 = SimpleRNN(hidden_neurons, \n", + " return_sequences=True, # This needs to be True if another hidden layer is to follow\n", + " stateful = stateful, activation = 'sigmoid',\n", + " name=\"RNN1\")(inp)\n", + " rnn2 = SimpleRNN(hidden_neurons, \n", + " return_sequences=False, activation = 'sigmoid',\n", + " stateful = stateful,\n", + " name=\"RNN2\")(rnn1)\n", + " # Define the output layer as a dense neural network layer (standard neural network layer)\n", + " #and add it to the network immediately after the hidden layer.\n", + " dens = Dense(in_out_neurons,name=\"dense\")(rnn2)\n", + " # Create the machine learning model starting with the input layer and ending with the \n", + " # output layer\n", + " model = Model(inputs=[inp],outputs=[dens])\n", + " # Compile the machine learning model using the mean squared error function as the loss \n", + " # function and an Adams optimizer.\n", + " model.compile(loss=\"mean_squared_error\", optimizer=\"adam\") \n", + " return model\n", + "\n", + "# Check to make sure the data set is complete\n", + "assert len(X_tot) == len(y_tot)\n", + "\n", + "# This is the number of points that will be used in as the training data\n", + "dim=12\n", + "\n", + "# Separate the training data from the whole data set\n", + "X_train = X_tot[:dim]\n", + "y_train = y_tot[:dim]\n", + "\n", + "\n", + "# Generate the training data for the RNN, using a sequence of 2\n", + "rnn_input, rnn_training = format_data(y_train, 2)\n", + "\n", + "\n", + "# Create a recurrent neural network in Keras and produce a summary of the \n", + "# machine learning model\n", + "model = rnn_2layers(length_of_sequences = 2)\n", + "model.summary()\n", + "\n", + "# Start the timer. Want to time training+testing\n", + "start = timer()\n", + "# Fit the model using the training data genenerated above using 150 training iterations and a 5%\n", + "# validation split. Setting verbose to True prints information about each training iteration.\n", + "hist = model.fit(rnn_input, rnn_training, batch_size=None, epochs=150, \n", + " verbose=True,validation_split=0.05)\n", + "\n", + "\n", + "# This section plots the training loss and the validation loss as a function of training iteration.\n", + "# This is not required for analyzing the couple cluster data but can help determine if the network is\n", + "# being overtrained.\n", + "for label in [\"loss\",\"val_loss\"]:\n", + " plt.plot(hist.history[label],label=label)\n", + "\n", + "plt.ylabel(\"loss\")\n", + "plt.xlabel(\"epoch\")\n", + "plt.title(\"The final validation loss: {}\".format(hist.history[\"val_loss\"][-1]))\n", + "plt.legend()\n", + "plt.show()\n", + "\n", + "# Use the trained neural network to predict more points of the data set\n", + "test_rnn(X_tot, y_tot, X_tot[0], X_tot[dim-1])\n", + "# Stop the timer and calculate the total time needed.\n", + "end = timer()\n", + "print('Time: ', end-start)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Other Types of Recurrent Neural Networks\n", + "\n", + "Besides a simple recurrent neural network layer, there are two other\n", + "commonly used types of recurrent neural network layers: Long Short\n", + "Term Memory (LSTM) and Gated Recurrent Unit (GRU). For a short\n", + "introduction to these layers see \n", + "and .\n", + "\n", + "The first network created below is similar to the previous network,\n", + "but it replaces the SimpleRNN layers with LSTM layers. The second\n", + "network below has two hidden layers made up of GRUs, which are\n", + "preceeded by two dense (feeddorward) neural network layers. These\n", + "dense layers \"preprocess\" the data before it reaches the recurrent\n", + "layers. This architecture has been shown to improve the performance\n", + "of recurrent neural networks (see the link above and also\n", + "." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def lstm_2layers(length_of_sequences, batch_size = None, stateful = False):\n", + " \"\"\"\n", + " Inputs:\n", + " length_of_sequences (an int): the number of y values in \"x data\". This is determined\n", + " when the data is formatted\n", + " batch_size (an int): Default value is None. See Keras documentation of SimpleRNN.\n", + " stateful (a boolean): Default value is False. See Keras documentation of SimpleRNN.\n", + " Returns:\n", + " model (a Keras model): The recurrent neural network that is built and compiled by this\n", + " method\n", + " Builds and compiles a recurrent neural network with two LSTM hidden layers and returns the model.\n", + " \"\"\"\n", + " # Number of neurons on the input/output layer and the number of neurons in the hidden layer\n", + " in_out_neurons = 1\n", + " hidden_neurons = 250\n", + " # Input Layer\n", + " inp = Input(batch_shape=(batch_size, \n", + " length_of_sequences, \n", + " in_out_neurons)) \n", + " # Hidden layers (in this case they are LSTM layers instead if SimpleRNN layers)\n", + " rnn= LSTM(hidden_neurons, \n", + " return_sequences=True,\n", + " stateful = stateful,\n", + " name=\"RNN\", use_bias=True, activation='tanh')(inp)\n", + " rnn1 = LSTM(hidden_neurons, \n", + " return_sequences=False,\n", + " stateful = stateful,\n", + " name=\"RNN1\", use_bias=True, activation='tanh')(rnn)\n", + " # Output layer\n", + " dens = Dense(in_out_neurons,name=\"dense\")(rnn1)\n", + " # Define the midel\n", + " model = Model(inputs=[inp],outputs=[dens])\n", + " # Compile the model\n", + " model.compile(loss='mean_squared_error', optimizer='adam') \n", + " # Return the model\n", + " return model\n", + "\n", + "def dnn2_gru2(length_of_sequences, batch_size = None, stateful = False):\n", + " \"\"\"\n", + " Inputs:\n", + " length_of_sequences (an int): the number of y values in \"x data\". This is determined\n", + " when the data is formatted\n", + " batch_size (an int): Default value is None. See Keras documentation of SimpleRNN.\n", + " stateful (a boolean): Default value is False. See Keras documentation of SimpleRNN.\n", + " Returns:\n", + " model (a Keras model): The recurrent neural network that is built and compiled by this\n", + " method\n", + " Builds and compiles a recurrent neural network with four hidden layers (two dense followed by\n", + " two GRU layers) and returns the model.\n", + " \"\"\" \n", + " # Number of neurons on the input/output layers and hidden layers\n", + " in_out_neurons = 1\n", + " hidden_neurons = 250\n", + " # Input layer\n", + " inp = Input(batch_shape=(batch_size, \n", + " length_of_sequences, \n", + " in_out_neurons)) \n", + " # Hidden Dense (feedforward) layers\n", + " dnn = Dense(hidden_neurons/2, activation='relu', name='dnn')(inp)\n", + " dnn1 = Dense(hidden_neurons/2, activation='relu', name='dnn1')(dnn)\n", + " # Hidden GRU layers\n", + " rnn1 = GRU(hidden_neurons, \n", + " return_sequences=True,\n", + " stateful = stateful,\n", + " name=\"RNN1\", use_bias=True)(dnn1)\n", + " rnn = GRU(hidden_neurons, \n", + " return_sequences=False,\n", + " stateful = stateful,\n", + " name=\"RNN\", use_bias=True)(rnn1)\n", + " # Output layer\n", + " dens = Dense(in_out_neurons,name=\"dense\")(rnn)\n", + " # Define the model\n", + " model = Model(inputs=[inp],outputs=[dens])\n", + " # Compile the mdoel\n", + " model.compile(loss='mean_squared_error', optimizer='adam') \n", + " # Return the model\n", + " return model\n", + "\n", + "# Check to make sure the data set is complete\n", + "assert len(X_tot) == len(y_tot)\n", + "\n", + "# This is the number of points that will be used in as the training data\n", + "dim=12\n", + "\n", + "# Separate the training data from the whole data set\n", + "X_train = X_tot[:dim]\n", + "y_train = y_tot[:dim]\n", + "\n", + "\n", + "# Generate the training data for the RNN, using a sequence of 2\n", + "rnn_input, rnn_training = format_data(y_train, 2)\n", + "\n", + "\n", + "# Create a recurrent neural network in Keras and produce a summary of the \n", + "# machine learning model\n", + "# Change the method name to reflect which network you want to use\n", + "model = dnn2_gru2(length_of_sequences = 2)\n", + "model.summary()\n", + "\n", + "# Start the timer. Want to time training+testing\n", + "start = timer()\n", + "# Fit the model using the training data genenerated above using 150 training iterations and a 5%\n", + "# validation split. Setting verbose to True prints information about each training iteration.\n", + "hist = model.fit(rnn_input, rnn_training, batch_size=None, epochs=150, \n", + " verbose=True,validation_split=0.05)\n", + "\n", + "\n", + "# This section plots the training loss and the validation loss as a function of training iteration.\n", + "# This is not required for analyzing the couple cluster data but can help determine if the network is\n", + "# being overtrained.\n", + "for label in [\"loss\",\"val_loss\"]:\n", + " plt.plot(hist.history[label],label=label)\n", + "\n", + "plt.ylabel(\"loss\")\n", + "plt.xlabel(\"epoch\")\n", + "plt.title(\"The final validation loss: {}\".format(hist.history[\"val_loss\"][-1]))\n", + "plt.legend()\n", + "plt.show()\n", + "\n", + "# Use the trained neural network to predict more points of the data set\n", + "test_rnn(X_tot, y_tot, X_tot[0], X_tot[dim-1])\n", + "# Stop the timer and calculate the total time needed.\n", + "end = timer()\n", + "print('Time: ', end-start)\n", + "\n", + "\n", + "# ### Training Recurrent Neural Networks in the Standard Way (i.e. learning the relationship between the X and Y data)\n", + "# \n", + "# Finally, comparing the performace of a recurrent neural network using the standard data formatting to the performance of the network with time sequence data formatting shows the benefit of this type of data formatting with extrapolation.\n", + "\n", + "# Check to make sure the data set is complete\n", + "assert len(X_tot) == len(y_tot)\n", + "\n", + "# This is the number of points that will be used in as the training data\n", + "dim=12\n", + "\n", + "# Separate the training data from the whole data set\n", + "X_train = X_tot[:dim]\n", + "y_train = y_tot[:dim]\n", + "\n", + "# Reshape the data for Keras specifications\n", + "X_train = X_train.reshape((dim, 1))\n", + "y_train = y_train.reshape((dim, 1))\n", + "\n", + "\n", + "# Create a recurrent neural network in Keras and produce a summary of the \n", + "# machine learning model\n", + "# Set the sequence length to 1 for regular data formatting \n", + "model = rnn(length_of_sequences = 1)\n", + "model.summary()\n", + "\n", + "# Start the timer. Want to time training+testing\n", + "start = timer()\n", + "# Fit the model using the training data genenerated above using 150 training iterations and a 5%\n", + "# validation split. Setting verbose to True prints information about each training iteration.\n", + "hist = model.fit(X_train, y_train, batch_size=None, epochs=150, \n", + " verbose=True,validation_split=0.05)\n", + "\n", + "\n", + "# This section plots the training loss and the validation loss as a function of training iteration.\n", + "# This is not required for analyzing the couple cluster data but can help determine if the network is\n", + "# being overtrained.\n", + "for label in [\"loss\",\"val_loss\"]:\n", + " plt.plot(hist.history[label],label=label)\n", + "\n", + "plt.ylabel(\"loss\")\n", + "plt.xlabel(\"epoch\")\n", + "plt.title(\"The final validation loss: {}\".format(hist.history[\"val_loss\"][-1]))\n", + "plt.legend()\n", + "plt.show()\n", + "\n", + "# Use the trained neural network to predict the remaining data points\n", + "X_pred = X_tot[dim:]\n", + "X_pred = X_pred.reshape((len(X_pred), 1))\n", + "y_model = model.predict(X_pred)\n", + "y_pred = np.concatenate((y_tot[:dim], y_model.flatten()))\n", + "\n", + "# Plot the known data set and the predicted data set. The red box represents the region that was used\n", + "# for the training data.\n", + "fig, ax = plt.subplots()\n", + "ax.plot(X_tot, y_tot, label=\"true\", linewidth=3)\n", + "ax.plot(X_tot, y_pred, 'g-.',label=\"predicted\", linewidth=4)\n", + "ax.legend()\n", + "# Created a red region to represent the points used in the training data.\n", + "ax.axvspan(X_tot[0], X_tot[dim], alpha=0.25, color='red')\n", + "plt.show()\n", + "\n", + "# Stop the timer and calculate the total time needed.\n", + "end = timer()\n", + "print('Time: ', end-start)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Solving ODEs with Deep Learning\n", + "\n", + "The Universal Approximation Theorem states that a neural network can\n", + "approximate any function at a single hidden layer along with one input\n", + "and output layer to any given precision. \n", + "\n", + "\n", + "\n", + "## Ordinary Differential Equations\n", + "\n", + "An ordinary differential equation (ODE) is an equation involving functions having one variable.\n", + "\n", + "In general, an ordinary differential equation looks like" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation} \\label{ode} \\tag{1}\n", + "f\\left(x, \\, g(x), \\, g'(x), \\, g''(x), \\, \\dots \\, , \\, g^{(n)}(x)\\right) = 0\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $g(x)$ is the function to find, and $g^{(n)}(x)$ is the $n$-th derivative of $g(x)$.\n", + "\n", + "The $f\\left(x, g(x), g'(x), g''(x), \\, \\dots \\, , g^{(n)}(x)\\right)$ is just a way to write that there is an expression involving $x$ and $g(x), \\ g'(x), \\ g''(x), \\, \\dots \\, , \\text{ and } g^{(n)}(x)$ on the left side of the equality sign in ([1](#ode)).\n", + "The highest order of derivative, that is the value of $n$, determines to the order of the equation.\n", + "The equation is referred to as a $n$-th order ODE.\n", + "Along with ([1](#ode)), some additional conditions of the function $g(x)$ are typically given\n", + "for the solution to be unique.\n", + "\n", + "\n", + "## The trial solution\n", + "\n", + "Let the trial solution $g_t(x)$ be" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\tg_t(x) = h_1(x) + h_2(x,N(x,P))\n", + "\\label{_auto1} \\tag{2}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $h_1(x)$ is a function that makes $g_t(x)$ satisfy a given set\n", + "of conditions, $N(x,P)$ a neural network with weights and biases\n", + "described by $P$ and $h_2(x, N(x,P))$ some expression involving the\n", + "neural network. The role of the function $h_2(x, N(x,P))$, is to\n", + "ensure that the output from $N(x,P)$ is zero when $g_t(x)$ is\n", + "evaluated at the values of $x$ where the given conditions must be\n", + "satisfied. The function $h_1(x)$ should alone make $g_t(x)$ satisfy\n", + "the conditions.\n", + "\n", + "But what about the network $N(x,P)$?\n", + "\n", + "\n", + "As described previously, an optimization method could be used to minimize the parameters of a neural network, that being its weights and biases, through backward propagation.\n", + "\n", + "\n", + "\n", + "## Minimization process\n", + "\n", + "For the minimization to be defined, we need to have a cost function at hand to minimize.\n", + "\n", + "It is given that $f\\left(x, \\, g(x), \\, g'(x), \\, g''(x), \\, \\dots \\, , \\, g^{(n)}(x)\\right)$ should be equal to zero in ([1](#ode)).\n", + "We can choose to consider the mean squared error as the cost function for an input $x$.\n", + "Since we are looking at one input, the cost function is just $f$ squared.\n", + "The cost function $c\\left(x, P \\right)$ can therefore be expressed as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "C\\left(x, P\\right) = \\big(f\\left(x, \\, g(x), \\, g'(x), \\, g''(x), \\, \\dots \\, , \\, g^{(n)}(x)\\right)\\big)^2\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If $N$ inputs are given as a vector $\\boldsymbol{x}$ with elements $x_i$ for $i = 1,\\dots,N$,\n", + "the cost function becomes" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation} \\label{cost} \\tag{3}\n", + "\tC\\left(\\boldsymbol{x}, P\\right) = \\frac{1}{N} \\sum_{i=1}^N \\big(f\\left(x_i, \\, g(x_i), \\, g'(x_i), \\, g''(x_i), \\, \\dots \\, , \\, g^{(n)}(x_i)\\right)\\big)^2\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The neural net should then find the parameters $P$ that minimizes the cost function in\n", + "([3](#cost)) for a set of $N$ training samples $x_i$.\n", + "\n", + "\n", + "## Minimizing the cost function using gradient descent and automatic differentiation\n", + "\n", + "To perform the minimization using gradient descent, the gradient of $C\\left(\\boldsymbol{x}, P\\right)$ is needed.\n", + "It might happen so that finding an analytical expression of the gradient of $C(\\boldsymbol{x}, P)$ from ([3](#cost)) gets too messy, depending on which cost function one desires to use.\n", + "\n", + "Luckily, there exists libraries that makes the job for us through automatic differentiation.\n", + "Automatic differentiation is a method of finding the derivatives numerically with very high precision.\n", + "\n", + "\n", + "\n", + "## Example: Exponential decay\n", + "\n", + "An exponential decay of a quantity $g(x)$ is described by the equation" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation} \\label{solve_expdec} \\tag{4}\n", + " g'(x) = -\\gamma g(x)\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "with $g(0) = g_0$ for some chosen initial value $g_0$.\n", + "\n", + "The analytical solution of ([4](#solve_expdec)) is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + " g(x) = g_0 \\exp\\left(-\\gamma x\\right)\n", + "\\label{_auto2} \\tag{5}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Having an analytical solution at hand, it is possible to use it to compare how well a neural network finds a solution of ([4](#solve_expdec)).\n", + "\n", + "\n", + "\n", + "## The function to solve for\n", + "\n", + "The program will use a neural network to solve" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation} \\label{solveode} \\tag{6}\n", + "g'(x) = -\\gamma g(x)\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $g(0) = g_0$ with $\\gamma$ and $g_0$ being some chosen values.\n", + "\n", + "In this example, $\\gamma = 2$ and $g_0 = 10$.\n", + "\n", + "\n", + "## The trial solution\n", + "To begin with, a trial solution $g_t(t)$ must be chosen. A general trial solution for ordinary differential equations could be" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "g_t(x, P) = h_1(x) + h_2(x, N(x, P))\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "with $h_1(x)$ ensuring that $g_t(x)$ satisfies some conditions and $h_2(x,N(x, P))$ an expression involving $x$ and the output from the neural network $N(x,P)$ with $P $ being the collection of the weights and biases for each layer. For now, it is assumed that the network consists of one input layer, one hidden layer, and one output layer.\n", + "\n", + "\n", + "## Setup of Network\n", + "\n", + "In this network, there are no weights and bias at the input layer, so $P = \\{ P_{\\text{hidden}}, P_{\\text{output}} \\}$.\n", + "If there are $N_{\\text{hidden} }$ neurons in the hidden layer, then $P_{\\text{hidden}}$ is a $N_{\\text{hidden} } \\times (1 + N_{\\text{input}})$ matrix, given that there are $N_{\\text{input}}$ neurons in the input layer.\n", + "\n", + "The first column in $P_{\\text{hidden} }$ represents the bias for each neuron in the hidden layer and the second column represents the weights for each neuron in the hidden layer from the input layer.\n", + "If there are $N_{\\text{output} }$ neurons in the output layer, then $P_{\\text{output}} $ is a $N_{\\text{output} } \\times (1 + N_{\\text{hidden} })$ matrix.\n", + "\n", + "Its first column represents the bias of each neuron and the remaining columns represents the weights to each neuron.\n", + "\n", + "It is given that $g(0) = g_0$. The trial solution must fulfill this condition to be a proper solution of ([6](#solveode)). A possible way to ensure that $g_t(0, P) = g_0$, is to let $F(N(x,P)) = x \\cdot N(x,P)$ and $A(x) = g_0$. This gives the following trial solution:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation} \\label{trial} \\tag{7}\n", + "g_t(x, P) = g_0 + x \\cdot N(x, P)\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Reformulating the problem\n", + "\n", + "We wish that our neural network manages to minimize a given cost function.\n", + "\n", + "A reformulation of out equation, ([6](#solveode)), must therefore be done,\n", + "such that it describes the problem a neural network can solve for.\n", + "\n", + "The neural network must find the set of weights and biases $P$ such that the trial solution in ([7](#trial)) satisfies ([6](#solveode)).\n", + "\n", + "The trial solution" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "g_t(x, P) = g_0 + x \\cdot N(x, P)\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "has been chosen such that it already solves the condition $g(0) = g_0$. What remains, is to find $P$ such that" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation} \\label{nnmin} \\tag{8}\n", + "g_t'(x, P) = - \\gamma g_t(x, P)\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "is fulfilled as *best as possible*.\n", + "\n", + "\n", + "## More technicalities\n", + "\n", + "The left hand side and right hand side of ([8](#nnmin)) must be computed separately, and then the neural network must choose weights and biases, contained in $P$, such that the sides are equal as best as possible.\n", + "This means that the absolute or squared difference between the sides must be as close to zero, ideally equal to zero.\n", + "In this case, the difference squared shows to be an appropriate measurement of how erroneous the trial solution is with respect to $P$ of the neural network.\n", + "\n", + "This gives the following cost function our neural network must solve for:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\min_{P}\\Big\\{ \\big(g_t'(x, P) - ( -\\gamma g_t(x, P) \\big)^2 \\Big\\}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "(the notation $\\min_{P}\\{ f(x, P) \\}$ means that we desire to find $P$ that yields the minimum of $f(x, P)$)\n", + "\n", + "or, in terms of weights and biases for the hidden and output layer in our network:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\min_{P_{\\text{hidden} }, \\ P_{\\text{output} }}\\Big\\{ \\big(g_t'(x, \\{ P_{\\text{hidden} }, P_{\\text{output} }\\}) - ( -\\gamma g_t(x, \\{ P_{\\text{hidden} }, P_{\\text{output} }\\}) \\big)^2 \\Big\\}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "for an input value $x$.\n", + "\n", + "\n", + "## More details\n", + "\n", + "If the neural network evaluates $g_t(x, P)$ at more values for $x$, say $N$ values $x_i$ for $i = 1, \\dots, N$, then the *total* error to minimize becomes" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation} \\label{min} \\tag{9}\n", + "\\min_{P}\\Big\\{\\frac{1}{N} \\sum_{i=1}^N \\big(g_t'(x_i, P) - ( -\\gamma g_t(x_i, P) \\big)^2 \\Big\\}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Letting $\\boldsymbol{x}$ be a vector with elements $x_i$ and $C(\\boldsymbol{x}, P) = \\frac{1}{N} \\sum_i \\big(g_t'(x_i, P) - ( -\\gamma g_t(x_i, P) \\big)^2$ denote the cost function, the minimization problem that our network must solve, becomes" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\min_{P} C(\\boldsymbol{x}, P)\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In terms of $P_{\\text{hidden} }$ and $P_{\\text{output} }$, this could also be expressed as\n", + "\n", + "$$\n", + "\\min_{P_{\\text{hidden} }, \\ P_{\\text{output} }} C(\\boldsymbol{x}, \\{P_{\\text{hidden} }, P_{\\text{output} }\\})\n", + "$$\n", + "\n", + "\n", + "## A possible implementation of a neural network\n", + "\n", + "For simplicity, it is assumed that the input is an array $\\boldsymbol{x} = (x_1, \\dots, x_N)$ with $N$ elements. It is at these points the neural network should find $P$ such that it fulfills ([9](#min)).\n", + "\n", + "First, the neural network must feed forward the inputs.\n", + "This means that $\\boldsymbol{x}s$ must be passed through an input layer, a hidden layer and a output layer. The input layer in this case, does not need to process the data any further.\n", + "The input layer will consist of $N_{\\text{input} }$ neurons, passing its element to each neuron in the hidden layer. The number of neurons in the hidden layer will be $N_{\\text{hidden} }$.\n", + "\n", + "\n", + "## Technicalities\n", + "\n", + "For the $i$-th in the hidden layer with weight $w_i^{\\text{hidden} }$ and bias $b_i^{\\text{hidden} }$, the weighting from the $j$-th neuron at the input layer is:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{aligned}\n", + "z_{i,j}^{\\text{hidden}} &= b_i^{\\text{hidden}} + w_i^{\\text{hidden}}x_j \\\\\n", + "&=\n", + "\\begin{pmatrix}\n", + "b_i^{\\text{hidden}} & w_i^{\\text{hidden}}\n", + "\\end{pmatrix}\n", + "\\begin{pmatrix}\n", + "1 \\\\\n", + "x_j\n", + "\\end{pmatrix}\n", + "\\end{aligned}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Final technicalities I\n", + "\n", + "The result after weighting the inputs at the $i$-th hidden neuron can be written as a vector:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{aligned}\n", + "\\boldsymbol{z}_{i}^{\\text{hidden}} &= \\Big( b_i^{\\text{hidden}} + w_i^{\\text{hidden}}x_1 , \\ b_i^{\\text{hidden}} + w_i^{\\text{hidden}} x_2, \\ \\dots \\, , \\ b_i^{\\text{hidden}} + w_i^{\\text{hidden}} x_N\\Big) \\\\\n", + "&=\n", + "\\begin{pmatrix}\n", + " b_i^{\\text{hidden}} & w_i^{\\text{hidden}}\n", + "\\end{pmatrix}\n", + "\\begin{pmatrix}\n", + "1 & 1 & \\dots & 1 \\\\\n", + "x_1 & x_2 & \\dots & x_N\n", + "\\end{pmatrix} \\\\\n", + "&= \\boldsymbol{p}_{i, \\text{hidden}}^T X\n", + "\\end{aligned}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Final technicalities II\n", + "\n", + "The vector $\\boldsymbol{p}_{i, \\text{hidden}}^T$ constitutes each row in $P_{\\text{hidden} }$, which contains the weights for the neural network to minimize according to ([9](#min)).\n", + "\n", + "After having found $\\boldsymbol{z}_{i}^{\\text{hidden}} $ for every $i$-th neuron within the hidden layer, the vector will be sent to an activation function $a_i(\\boldsymbol{z})$.\n", + "\n", + "In this example, the sigmoid function has been chosen to be the activation function for each hidden neuron:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "f(z) = \\frac{1}{1 + \\exp{(-z)}}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "It is possible to use other activations functions for the hidden layer also.\n", + "\n", + "The output $\\boldsymbol{x}_i^{\\text{hidden}}$ from each $i$-th hidden neuron is:\n", + "\n", + "$$\n", + "\\boldsymbol{x}_i^{\\text{hidden} } = f\\big( \\boldsymbol{z}_{i}^{\\text{hidden}} \\big)\n", + "$$\n", + "\n", + "The outputs $\\boldsymbol{x}_i^{\\text{hidden} } $ are then sent to the output layer.\n", + "\n", + "The output layer consists of one neuron in this case, and combines the\n", + "output from each of the neurons in the hidden layers. The output layer\n", + "combines the results from the hidden layer using some weights $w_i^{\\text{output}}$\n", + "and biases $b_i^{\\text{output}}$. In this case,\n", + "it is assumes that the number of neurons in the output layer is one.\n", + "\n", + "\n", + "## Final technicalities III\n", + "\n", + "\n", + "The procedure of weighting the output neuron $j$ in the hidden layer to the $i$-th neuron in the output layer is similar as for the hidden layer described previously." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{aligned}\n", + "z_{1,j}^{\\text{output}} & =\n", + "\\begin{pmatrix}\n", + "b_1^{\\text{output}} & \\boldsymbol{w}_1^{\\text{output}}\n", + "\\end{pmatrix}\n", + "\\begin{pmatrix}\n", + "1 \\\\\n", + "\\boldsymbol{x}_j^{\\text{hidden}}\n", + "\\end{pmatrix}\n", + "\\end{aligned}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Final technicalities IV\n", + "\n", + "Expressing $z_{1,j}^{\\text{output}}$ as a vector gives the following way of weighting the inputs from the hidden layer:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{z}_{1}^{\\text{output}} =\n", + "\\begin{pmatrix}\n", + "b_1^{\\text{output}} & \\boldsymbol{w}_1^{\\text{output}}\n", + "\\end{pmatrix}\n", + "\\begin{pmatrix}\n", + "1 & 1 & \\dots & 1 \\\\\n", + "\\boldsymbol{x}_1^{\\text{hidden}} & \\boldsymbol{x}_2^{\\text{hidden}} & \\dots & \\boldsymbol{x}_N^{\\text{hidden}}\n", + "\\end{pmatrix}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this case we seek a continuous range of values since we are approximating a function. This means that after computing $\\boldsymbol{z}_{1}^{\\text{output}}$ the neural network has finished its feed forward step, and $\\boldsymbol{z}_{1}^{\\text{output}}$ is the final output of the network.\n", + "\n", + "\n", + "## Back propagation\n", + "\n", + "The next step is to decide how the parameters should be changed such that they minimize the cost function.\n", + "\n", + "The chosen cost function for this problem is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "C(\\boldsymbol{x}, P) = \\frac{1}{N} \\sum_i \\big(g_t'(x_i, P) - ( -\\gamma g_t(x_i, P) \\big)^2\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In order to minimize the cost function, an optimization method must be chosen.\n", + "\n", + "Here, gradient descent with a constant step size has been chosen.\n", + "\n", + "\n", + "## Gradient descent\n", + "\n", + "The idea of the gradient descent algorithm is to update parameters in\n", + "a direction where the cost function decreases goes to a minimum.\n", + "\n", + "In general, the update of some parameters $\\boldsymbol{\\omega}$ given a cost\n", + "function defined by some weights $\\boldsymbol{\\omega}$, $C(\\boldsymbol{x},\n", + "\\boldsymbol{\\omega})$, goes as follows:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\boldsymbol{\\omega}_{\\text{new} } = \\boldsymbol{\\omega} - \\lambda \\nabla_{\\boldsymbol{\\omega}} C(\\boldsymbol{x}, \\boldsymbol{\\omega})\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "for a number of iterations or until $ \\big|\\big| \\boldsymbol{\\omega}_{\\text{new} } - \\boldsymbol{\\omega} \\big|\\big|$ becomes smaller than some given tolerance.\n", + "\n", + "The value of $\\lambda$ decides how large steps the algorithm must take\n", + "in the direction of $ \\nabla_{\\boldsymbol{\\omega}} C(\\boldsymbol{x}, \\boldsymbol{\\omega})$.\n", + "The notation $\\nabla_{\\boldsymbol{\\omega}}$ express the gradient with respect\n", + "to the elements in $\\boldsymbol{\\omega}$.\n", + "\n", + "In our case, we have to minimize the cost function $C(\\boldsymbol{x}, P)$ with\n", + "respect to the two sets of weights and biases, that is for the hidden\n", + "layer $P_{\\text{hidden} }$ and for the output layer $P_{\\text{output}\n", + "}$ .\n", + "\n", + "This means that $P_{\\text{hidden} }$ and $P_{\\text{output} }$ is updated by" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{aligned}\n", + "P_{\\text{hidden},\\text{new}} &= P_{\\text{hidden}} - \\lambda \\nabla_{P_{\\text{hidden}}} C(\\boldsymbol{x}, P) \\\\\n", + "P_{\\text{output},\\text{new}} &= P_{\\text{output}} - \\lambda \\nabla_{P_{\\text{output}}} C(\\boldsymbol{x}, P)\n", + "\\end{aligned}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## The code for solving the ODE" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import autograd.numpy as np\n", + "from autograd import grad, elementwise_grad\n", + "import autograd.numpy.random as npr\n", + "from matplotlib import pyplot as plt\n", + "\n", + "def sigmoid(z):\n", + " return 1/(1 + np.exp(-z))\n", + "\n", + "# Assuming one input, hidden, and output layer\n", + "def neural_network(params, x):\n", + "\n", + " # Find the weights (including and biases) for the hidden and output layer.\n", + " # Assume that params is a list of parameters for each layer.\n", + " # The biases are the first element for each array in params,\n", + " # and the weights are the remaning elements in each array in params.\n", + "\n", + " w_hidden = params[0]\n", + " w_output = params[1]\n", + "\n", + " # Assumes input x being an one-dimensional array\n", + " num_values = np.size(x)\n", + " x = x.reshape(-1, num_values)\n", + "\n", + " # Assume that the input layer does nothing to the input x\n", + " x_input = x\n", + "\n", + " ## Hidden layer:\n", + "\n", + " # Add a row of ones to include bias\n", + " x_input = np.concatenate((np.ones((1,num_values)), x_input ), axis = 0)\n", + "\n", + " z_hidden = np.matmul(w_hidden, x_input)\n", + " x_hidden = sigmoid(z_hidden)\n", + "\n", + " ## Output layer:\n", + "\n", + " # Include bias:\n", + " x_hidden = np.concatenate((np.ones((1,num_values)), x_hidden ), axis = 0)\n", + "\n", + " z_output = np.matmul(w_output, x_hidden)\n", + " x_output = z_output\n", + "\n", + " return x_output\n", + "\n", + "# The trial solution using the deep neural network:\n", + "def g_trial(x,params, g0 = 10):\n", + " return g0 + x*neural_network(params,x)\n", + "\n", + "# The right side of the ODE:\n", + "def g(x, g_trial, gamma = 2):\n", + " return -gamma*g_trial\n", + "\n", + "# The cost function:\n", + "def cost_function(P, x):\n", + "\n", + " # Evaluate the trial function with the current parameters P\n", + " g_t = g_trial(x,P)\n", + "\n", + " # Find the derivative w.r.t x of the neural network\n", + " d_net_out = elementwise_grad(neural_network,1)(P,x)\n", + "\n", + " # Find the derivative w.r.t x of the trial function\n", + " d_g_t = elementwise_grad(g_trial,0)(x,P)\n", + "\n", + " # The right side of the ODE\n", + " func = g(x, g_t)\n", + "\n", + " err_sqr = (d_g_t - func)**2\n", + " cost_sum = np.sum(err_sqr)\n", + "\n", + " return cost_sum / np.size(err_sqr)\n", + "\n", + "# Solve the exponential decay ODE using neural network with one input, hidden, and output layer\n", + "def solve_ode_neural_network(x, num_neurons_hidden, num_iter, lmb):\n", + " ## Set up initial weights and biases\n", + "\n", + " # For the hidden layer\n", + " p0 = npr.randn(num_neurons_hidden, 2 )\n", + "\n", + " # For the output layer\n", + " p1 = npr.randn(1, num_neurons_hidden + 1 ) # +1 since bias is included\n", + "\n", + " P = [p0, p1]\n", + "\n", + " print('Initial cost: %g'%cost_function(P, x))\n", + "\n", + " ## Start finding the optimal weights using gradient descent\n", + "\n", + " # Find the Python function that represents the gradient of the cost function\n", + " # w.r.t the 0-th input argument -- that is the weights and biases in the hidden and output layer\n", + " cost_function_grad = grad(cost_function,0)\n", + "\n", + " # Let the update be done num_iter times\n", + " for i in range(num_iter):\n", + " # Evaluate the gradient at the current weights and biases in P.\n", + " # The cost_grad consist now of two arrays;\n", + " # one for the gradient w.r.t P_hidden and\n", + " # one for the gradient w.r.t P_output\n", + " cost_grad = cost_function_grad(P, x)\n", + "\n", + " P[0] = P[0] - lmb * cost_grad[0]\n", + " P[1] = P[1] - lmb * cost_grad[1]\n", + "\n", + " print('Final cost: %g'%cost_function(P, x))\n", + "\n", + " return P\n", + "\n", + "def g_analytic(x, gamma = 2, g0 = 10):\n", + " return g0*np.exp(-gamma*x)\n", + "\n", + "# Solve the given problem\n", + "if __name__ == '__main__':\n", + " # Set seed such that the weight are initialized\n", + " # with same weights and biases for every run.\n", + " npr.seed(15)\n", + "\n", + " ## Decide the vales of arguments to the function to solve\n", + " N = 10\n", + " x = np.linspace(0, 1, N)\n", + "\n", + " ## Set up the initial parameters\n", + " num_hidden_neurons = 10\n", + " num_iter = 10000\n", + " lmb = 0.001\n", + "\n", + " # Use the network\n", + " P = solve_ode_neural_network(x, num_hidden_neurons, num_iter, lmb)\n", + "\n", + " # Print the deviation from the trial solution and true solution\n", + " res = g_trial(x,P)\n", + " res_analytical = g_analytic(x)\n", + "\n", + " print('Max absolute difference: %g'%np.max(np.abs(res - res_analytical)))\n", + "\n", + " # Plot the results\n", + " plt.figure(figsize=(10,10))\n", + "\n", + " plt.title('Performance of neural network solving an ODE compared to the analytical solution')\n", + " plt.plot(x, res_analytical)\n", + " plt.plot(x, res[0,:])\n", + " plt.legend(['analytical','nn'])\n", + " plt.xlabel('x')\n", + " plt.ylabel('g(x)')\n", + " plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## The network with one input layer, specified number of hidden layers, and one output layer\n", + "\n", + "It is also possible to extend the construction of our network into a more general one, allowing the network to contain more than one hidden layers.\n", + "\n", + "The number of neurons within each hidden layer are given as a list of integers in the program below." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import autograd.numpy as np\n", + "from autograd import grad, elementwise_grad\n", + "import autograd.numpy.random as npr\n", + "from matplotlib import pyplot as plt\n", + "\n", + "def sigmoid(z):\n", + " return 1/(1 + np.exp(-z))\n", + "\n", + "# The neural network with one input layer and one output layer,\n", + "# but with number of hidden layers specified by the user.\n", + "def deep_neural_network(deep_params, x):\n", + " # N_hidden is the number of hidden layers\n", + "\n", + " N_hidden = np.size(deep_params) - 1 # -1 since params consists of\n", + " # parameters to all the hidden\n", + " # layers AND the output layer.\n", + "\n", + " # Assumes input x being an one-dimensional array\n", + " num_values = np.size(x)\n", + " x = x.reshape(-1, num_values)\n", + "\n", + " # Assume that the input layer does nothing to the input x\n", + " x_input = x\n", + "\n", + " # Due to multiple hidden layers, define a variable referencing to the\n", + " # output of the previous layer:\n", + " x_prev = x_input\n", + "\n", + " ## Hidden layers:\n", + "\n", + " for l in range(N_hidden):\n", + " # From the list of parameters P; find the correct weigths and bias for this layer\n", + " w_hidden = deep_params[l]\n", + "\n", + " # Add a row of ones to include bias\n", + " x_prev = np.concatenate((np.ones((1,num_values)), x_prev ), axis = 0)\n", + "\n", + " z_hidden = np.matmul(w_hidden, x_prev)\n", + " x_hidden = sigmoid(z_hidden)\n", + "\n", + " # Update x_prev such that next layer can use the output from this layer\n", + " x_prev = x_hidden\n", + "\n", + " ## Output layer:\n", + "\n", + " # Get the weights and bias for this layer\n", + " w_output = deep_params[-1]\n", + "\n", + " # Include bias:\n", + " x_prev = np.concatenate((np.ones((1,num_values)), x_prev), axis = 0)\n", + "\n", + " z_output = np.matmul(w_output, x_prev)\n", + " x_output = z_output\n", + "\n", + " return x_output\n", + "\n", + "# The trial solution using the deep neural network:\n", + "def g_trial_deep(x,params, g0 = 10):\n", + " return g0 + x*deep_neural_network(params, x)\n", + "\n", + "# The right side of the ODE:\n", + "def g(x, g_trial, gamma = 2):\n", + " return -gamma*g_trial\n", + "\n", + "# The same cost function as before, but calls deep_neural_network instead.\n", + "def cost_function_deep(P, x):\n", + "\n", + " # Evaluate the trial function with the current parameters P\n", + " g_t = g_trial_deep(x,P)\n", + "\n", + " # Find the derivative w.r.t x of the neural network\n", + " d_net_out = elementwise_grad(deep_neural_network,1)(P,x)\n", + "\n", + " # Find the derivative w.r.t x of the trial function\n", + " d_g_t = elementwise_grad(g_trial_deep,0)(x,P)\n", + "\n", + " # The right side of the ODE\n", + " func = g(x, g_t)\n", + "\n", + " err_sqr = (d_g_t - func)**2\n", + " cost_sum = np.sum(err_sqr)\n", + "\n", + " return cost_sum / np.size(err_sqr)\n", + "\n", + "# Solve the exponential decay ODE using neural network with one input and one output layer,\n", + "# but with specified number of hidden layers from the user.\n", + "def solve_ode_deep_neural_network(x, num_neurons, num_iter, lmb):\n", + " # num_hidden_neurons is now a list of number of neurons within each hidden layer\n", + "\n", + " # The number of elements in the list num_hidden_neurons thus represents\n", + " # the number of hidden layers.\n", + "\n", + " # Find the number of hidden layers:\n", + " N_hidden = np.size(num_neurons)\n", + "\n", + " ## Set up initial weights and biases\n", + "\n", + " # Initialize the list of parameters:\n", + " P = [None]*(N_hidden + 1) # + 1 to include the output layer\n", + "\n", + " P[0] = npr.randn(num_neurons[0], 2 )\n", + " for l in range(1,N_hidden):\n", + " P[l] = npr.randn(num_neurons[l], num_neurons[l-1] + 1) # +1 to include bias\n", + "\n", + " # For the output layer\n", + " P[-1] = npr.randn(1, num_neurons[-1] + 1 ) # +1 since bias is included\n", + "\n", + " print('Initial cost: %g'%cost_function_deep(P, x))\n", + "\n", + " ## Start finding the optimal weights using gradient descent\n", + "\n", + " # Find the Python function that represents the gradient of the cost function\n", + " # w.r.t the 0-th input argument -- that is the weights and biases in the hidden and output layer\n", + " cost_function_deep_grad = grad(cost_function_deep,0)\n", + "\n", + " # Let the update be done num_iter times\n", + " for i in range(num_iter):\n", + " # Evaluate the gradient at the current weights and biases in P.\n", + " # The cost_grad consist now of N_hidden + 1 arrays; the gradient w.r.t the weights and biases\n", + " # in the hidden layers and output layers evaluated at x.\n", + " cost_deep_grad = cost_function_deep_grad(P, x)\n", + "\n", + " for l in range(N_hidden+1):\n", + " P[l] = P[l] - lmb * cost_deep_grad[l]\n", + "\n", + " print('Final cost: %g'%cost_function_deep(P, x))\n", + "\n", + " return P\n", + "\n", + "def g_analytic(x, gamma = 2, g0 = 10):\n", + " return g0*np.exp(-gamma*x)\n", + "\n", + "# Solve the given problem\n", + "if __name__ == '__main__':\n", + " npr.seed(15)\n", + "\n", + " ## Decide the vales of arguments to the function to solve\n", + " N = 10\n", + " x = np.linspace(0, 1, N)\n", + "\n", + " ## Set up the initial parameters\n", + " num_hidden_neurons = np.array([10,10])\n", + " num_iter = 10000\n", + " lmb = 0.001\n", + "\n", + " P = solve_ode_deep_neural_network(x, num_hidden_neurons, num_iter, lmb)\n", + "\n", + " res = g_trial_deep(x,P)\n", + " res_analytical = g_analytic(x)\n", + "\n", + " plt.figure(figsize=(10,10))\n", + "\n", + " plt.title('Performance of a deep neural network solving an ODE compared to the analytical solution')\n", + " plt.plot(x, res_analytical)\n", + " plt.plot(x, res[0,:])\n", + " plt.legend(['analytical','dnn'])\n", + " plt.ylabel('g(x)')\n", + " plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example: Population growth\n", + "\n", + "A logistic model of population growth assumes that a population converges toward an equilibrium.\n", + "The population growth can be modeled by" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation} \\label{log} \\tag{10}\n", + "\tg'(t) = \\alpha g(t)(A - g(t))\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $g(t)$ is the population density at time $t$, $\\alpha > 0$ the growth rate and $A > 0$ is the maximum population number in the environment.\n", + "Also, at $t = 0$ the population has the size $g(0) = g_0$, where $g_0$ is some chosen constant.\n", + "\n", + "In this example, similar network as for the exponential decay using Autograd has been used to solve the equation. However, as the implementation might suffer from e.g numerical instability\n", + "and high execution time (this might be more apparent in the examples solving PDEs),\n", + "using a library like TensorFlow is recommended.\n", + "Here, we stay with a more simple approach and implement for comparison, the simple forward Euler method.\n", + "\n", + "\n", + "## Setting up the problem\n", + "\n", + "Here, we will model a population $g(t)$ in an environment having carrying capacity $A$.\n", + "The population follows the model" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation} \\label{solveode_population} \\tag{11}\n", + "g'(t) = \\alpha g(t)(A - g(t))\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $g(0) = g_0$.\n", + "\n", + "In this example, we let $\\alpha = 2$, $A = 1$, and $g_0 = 1.2$.\n", + "\n", + "\n", + "## The trial solution\n", + "\n", + "We will get a slightly different trial solution, as the boundary conditions are different\n", + "compared to the case for exponential decay.\n", + "\n", + "A possible trial solution satisfying the condition $g(0) = g_0$ could be\n", + "\n", + "$$\n", + "h_1(t) = g_0 + t \\cdot N(t,P)\n", + "$$\n", + "\n", + "with $N(t,P)$ being the output from the neural network with weights and biases for each layer collected in the set $P$.\n", + "\n", + "The analytical solution is\n", + "\n", + "$$\n", + "g(t) = \\frac{Ag_0}{g_0 + (A - g_0)\\exp(-\\alpha A t)}\n", + "$$\n", + "\n", + "\n", + "## The program using Autograd\n", + "\n", + "The network will be the similar as for the exponential decay example, but with some small modifications for our problem." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import autograd.numpy as np\n", + "from autograd import grad, elementwise_grad\n", + "import autograd.numpy.random as npr\n", + "from matplotlib import pyplot as plt\n", + "\n", + "def sigmoid(z):\n", + " return 1/(1 + np.exp(-z))\n", + "\n", + "# Function to get the parameters.\n", + "# Done such that one can easily change the paramaters after one's liking.\n", + "def get_parameters():\n", + " alpha = 2\n", + " A = 1\n", + " g0 = 1.2\n", + " return alpha, A, g0\n", + "\n", + "def deep_neural_network(P, x):\n", + " # N_hidden is the number of hidden layers\n", + " N_hidden = np.size(P) - 1 # -1 since params consist of parameters to all the hidden layers AND the output layer\n", + "\n", + " # Assumes input x being an one-dimensional array\n", + " num_values = np.size(x)\n", + " x = x.reshape(-1, num_values)\n", + "\n", + " # Assume that the input layer does nothing to the input x\n", + " x_input = x\n", + "\n", + " # Due to multiple hidden layers, define a variable referencing to the\n", + " # output of the previous layer:\n", + " x_prev = x_input\n", + "\n", + " ## Hidden layers:\n", + "\n", + " for l in range(N_hidden):\n", + " # From the list of parameters P; find the correct weigths and bias for this layer\n", + " w_hidden = P[l]\n", + "\n", + " # Add a row of ones to include bias\n", + " x_prev = np.concatenate((np.ones((1,num_values)), x_prev ), axis = 0)\n", + "\n", + " z_hidden = np.matmul(w_hidden, x_prev)\n", + " x_hidden = sigmoid(z_hidden)\n", + "\n", + " # Update x_prev such that next layer can use the output from this layer\n", + " x_prev = x_hidden\n", + "\n", + " ## Output layer:\n", + "\n", + " # Get the weights and bias for this layer\n", + " w_output = P[-1]\n", + "\n", + " # Include bias:\n", + " x_prev = np.concatenate((np.ones((1,num_values)), x_prev), axis = 0)\n", + "\n", + " z_output = np.matmul(w_output, x_prev)\n", + " x_output = z_output\n", + "\n", + " return x_output\n", + "\n", + "\n", + "def cost_function_deep(P, x):\n", + "\n", + " # Evaluate the trial function with the current parameters P\n", + " g_t = g_trial_deep(x,P)\n", + "\n", + " # Find the derivative w.r.t x of the trial function\n", + " d_g_t = elementwise_grad(g_trial_deep,0)(x,P)\n", + "\n", + " # The right side of the ODE\n", + " func = f(x, g_t)\n", + "\n", + " err_sqr = (d_g_t - func)**2\n", + " cost_sum = np.sum(err_sqr)\n", + "\n", + " return cost_sum / np.size(err_sqr)\n", + "\n", + "# The right side of the ODE:\n", + "def f(x, g_trial):\n", + " alpha,A, g0 = get_parameters()\n", + " return alpha*g_trial*(A - g_trial)\n", + "\n", + "# The trial solution using the deep neural network:\n", + "def g_trial_deep(x, params):\n", + " alpha,A, g0 = get_parameters()\n", + " return g0 + x*deep_neural_network(params,x)\n", + "\n", + "# The analytical solution:\n", + "def g_analytic(t):\n", + " alpha,A, g0 = get_parameters()\n", + " return A*g0/(g0 + (A - g0)*np.exp(-alpha*A*t))\n", + "\n", + "def solve_ode_deep_neural_network(x, num_neurons, num_iter, lmb):\n", + " # num_hidden_neurons is now a list of number of neurons within each hidden layer\n", + "\n", + " # Find the number of hidden layers:\n", + " N_hidden = np.size(num_neurons)\n", + "\n", + " ## Set up initial weigths and biases\n", + "\n", + " # Initialize the list of parameters:\n", + " P = [None]*(N_hidden + 1) # + 1 to include the output layer\n", + "\n", + " P[0] = npr.randn(num_neurons[0], 2 )\n", + " for l in range(1,N_hidden):\n", + " P[l] = npr.randn(num_neurons[l], num_neurons[l-1] + 1) # +1 to include bias\n", + "\n", + " # For the output layer\n", + " P[-1] = npr.randn(1, num_neurons[-1] + 1 ) # +1 since bias is included\n", + "\n", + " print('Initial cost: %g'%cost_function_deep(P, x))\n", + "\n", + " ## Start finding the optimal weigths using gradient descent\n", + "\n", + " # Find the Python function that represents the gradient of the cost function\n", + " # w.r.t the 0-th input argument -- that is the weights and biases in the hidden and output layer\n", + " cost_function_deep_grad = grad(cost_function_deep,0)\n", + "\n", + " # Let the update be done num_iter times\n", + " for i in range(num_iter):\n", + " # Evaluate the gradient at the current weights and biases in P.\n", + " # The cost_grad consist now of N_hidden + 1 arrays; the gradient w.r.t the weights and biases\n", + " # in the hidden layers and output layers evaluated at x.\n", + " cost_deep_grad = cost_function_deep_grad(P, x)\n", + "\n", + " for l in range(N_hidden+1):\n", + " P[l] = P[l] - lmb * cost_deep_grad[l]\n", + "\n", + " print('Final cost: %g'%cost_function_deep(P, x))\n", + "\n", + " return P\n", + "\n", + "if __name__ == '__main__':\n", + " npr.seed(4155)\n", + "\n", + " ## Decide the vales of arguments to the function to solve\n", + " Nt = 10\n", + " T = 1\n", + " t = np.linspace(0,T, Nt)\n", + "\n", + " ## Set up the initial parameters\n", + " num_hidden_neurons = [100, 50, 25]\n", + " num_iter = 1000\n", + " lmb = 1e-3\n", + "\n", + " P = solve_ode_deep_neural_network(t, num_hidden_neurons, num_iter, lmb)\n", + "\n", + " g_dnn_ag = g_trial_deep(t,P)\n", + " g_analytical = g_analytic(t)\n", + "\n", + " # Find the maximum absolute difference between the solutons:\n", + " diff_ag = np.max(np.abs(g_dnn_ag - g_analytical))\n", + " print(\"The max absolute difference between the solutions is: %g\"%diff_ag)\n", + "\n", + " plt.figure(figsize=(10,10))\n", + "\n", + " plt.title('Performance of neural network solving an ODE compared to the analytical solution')\n", + " plt.plot(t, g_analytical)\n", + " plt.plot(t, g_dnn_ag[0,:])\n", + " plt.legend(['analytical','nn'])\n", + " plt.xlabel('t')\n", + " plt.ylabel('g(t)')\n", + "\n", + " plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Using forward Euler to solve the ODE\n", + "\n", + "A straightforward way of solving an ODE numerically, is to use Euler's method.\n", + "\n", + "Euler's method uses Taylor series to approximate the value at a function $f$ at a step $\\Delta x$ from $x$:\n", + "\n", + "$$\n", + "f(x + \\Delta x) \\approx f(x) + \\Delta x f'(x)\n", + "$$\n", + "\n", + "In our case, using Euler's method to approximate the value of $g$ at a step $\\Delta t$ from $t$ yields" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{aligned}\n", + " g(t + \\Delta t) &\\approx g(t) + \\Delta t g'(t) \\\\\n", + " &= g(t) + \\Delta t \\big(\\alpha g(t)(A - g(t))\\big)\n", + "\\end{aligned}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "along with the condition that $g(0) = g_0$.\n", + "\n", + "Let $t_i = i \\cdot \\Delta t$ where $\\Delta t = \\frac{T}{N_t-1}$ where $T$ is the final time our solver must solve for and $N_t$ the number of values for $t \\in [0, T]$ for $i = 0, \\dots, N_t-1$.\n", + "\n", + "For $i \\geq 1$, we have that" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{aligned}\n", + "t_i &= i\\Delta t \\\\\n", + "&= (i - 1)\\Delta t + \\Delta t \\\\\n", + "&= t_{i-1} + \\Delta t\n", + "\\end{aligned}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now, if $g_i = g(t_i)$ then" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + " \\begin{aligned}\n", + " g_i &= g(t_i) \\\\\n", + " &= g(t_{i-1} + \\Delta t) \\\\\n", + " &\\approx g(t_{i-1}) + \\Delta t \\big(\\alpha g(t_{i-1})(A - g(t_{i-1}))\\big) \\\\\n", + " &= g_{i-1} + \\Delta t \\big(\\alpha g_{i-1}(A - g_{i-1})\\big)\n", + " \\end{aligned}\n", + "\\end{equation} \\label{odenum} \\tag{12}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "for $i \\geq 1$ and $g_0 = g(t_0) = g(0) = g_0$.\n", + "\n", + "Equation ([12](#odenum)) could be implemented in the following way,\n", + "extending the program that uses the network using Autograd:" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Assume that all function definitions from the example program using Autograd\n", + "# are located here.\n", + "\n", + "if __name__ == '__main__':\n", + " npr.seed(4155)\n", + "\n", + " ## Decide the vales of arguments to the function to solve\n", + " Nt = 10\n", + " T = 1\n", + " t = np.linspace(0,T, Nt)\n", + "\n", + " ## Set up the initial parameters\n", + " num_hidden_neurons = [100,50,25]\n", + " num_iter = 1000\n", + " lmb = 1e-3\n", + "\n", + " P = solve_ode_deep_neural_network(t, num_hidden_neurons, num_iter, lmb)\n", + "\n", + " g_dnn_ag = g_trial_deep(t,P)\n", + " g_analytical = g_analytic(t)\n", + "\n", + " # Find the maximum absolute difference between the solutons:\n", + " diff_ag = np.max(np.abs(g_dnn_ag - g_analytical))\n", + " print(\"The max absolute difference between the solutions is: %g\"%diff_ag)\n", + "\n", + " plt.figure(figsize=(10,10))\n", + "\n", + " plt.title('Performance of neural network solving an ODE compared to the analytical solution')\n", + " plt.plot(t, g_analytical)\n", + " plt.plot(t, g_dnn_ag[0,:])\n", + " plt.legend(['analytical','nn'])\n", + " plt.xlabel('t')\n", + " plt.ylabel('g(t)')\n", + "\n", + " ## Find an approximation to the funtion using forward Euler\n", + "\n", + " alpha, A, g0 = get_parameters()\n", + " dt = T/(Nt - 1)\n", + "\n", + " # Perform forward Euler to solve the ODE\n", + " g_euler = np.zeros(Nt)\n", + " g_euler[0] = g0\n", + "\n", + " for i in range(1,Nt):\n", + " g_euler[i] = g_euler[i-1] + dt*(alpha*g_euler[i-1]*(A - g_euler[i-1]))\n", + "\n", + " # Print the errors done by each method\n", + " diff1 = np.max(np.abs(g_euler - g_analytical))\n", + " diff2 = np.max(np.abs(g_dnn_ag[0,:] - g_analytical))\n", + "\n", + " print('Max absolute difference between Euler method and analytical: %g'%diff1)\n", + " print('Max absolute difference between deep neural network and analytical: %g'%diff2)\n", + "\n", + " # Plot results\n", + " plt.figure(figsize=(10,10))\n", + "\n", + " plt.plot(t,g_euler)\n", + " plt.plot(t,g_analytical)\n", + " plt.plot(t,g_dnn_ag[0,:])\n", + "\n", + " plt.legend(['euler','analytical','dnn'])\n", + " plt.xlabel('Time t')\n", + " plt.ylabel('g(t)')\n", + "\n", + " plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example: Solving the one dimensional Poisson equation\n", + "\n", + "The Poisson equation for $g(x)$ in one dimension is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation} \\label{poisson} \\tag{13}\n", + " -g''(x) = f(x)\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $f(x)$ is a given function for $x \\in (0,1)$.\n", + "\n", + "The conditions that $g(x)$ is chosen to fulfill, are" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{align*}\n", + " g(0) &= 0 \\\\\n", + " g(1) &= 0\n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This equation can be solved numerically using programs where e.g Autograd and TensorFlow are used.\n", + "The results from the networks can then be compared to the analytical solution.\n", + "In addition, it could be interesting to see how a typical method for numerically solving second order ODEs compares to the neural networks.\n", + "\n", + "\n", + "## The specific equation to solve for\n", + "\n", + "Here, the function $g(x)$ to solve for follows the equation" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "-g''(x) = f(x),\\qquad x \\in (0,1)\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $f(x)$ is a given function, along with the chosen conditions" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{aligned}\n", + "g(0) = g(1) = 0\n", + "\\end{aligned}\\label{cond} \\tag{14}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this example, we consider the case when $f(x) = (3x + x^2)\\exp(x)$.\n", + "\n", + "For this case, a possible trial solution satisfying the conditions could be" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "g_t(x) = x \\cdot (1-x) \\cdot N(P,x)\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The analytical solution for this problem is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "g(x) = x(1 - x)\\exp(x)\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Solving the equation using Autograd" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import autograd.numpy as np\n", + "from autograd import grad, elementwise_grad\n", + "import autograd.numpy.random as npr\n", + "from matplotlib import pyplot as plt\n", + "\n", + "def sigmoid(z):\n", + " return 1/(1 + np.exp(-z))\n", + "\n", + "def deep_neural_network(deep_params, x):\n", + " # N_hidden is the number of hidden layers\n", + " N_hidden = np.size(deep_params) - 1 # -1 since params consist of parameters to all the hidden layers AND the output layer\n", + "\n", + " # Assumes input x being an one-dimensional array\n", + " num_values = np.size(x)\n", + " x = x.reshape(-1, num_values)\n", + "\n", + " # Assume that the input layer does nothing to the input x\n", + " x_input = x\n", + "\n", + " # Due to multiple hidden layers, define a variable referencing to the\n", + " # output of the previous layer:\n", + " x_prev = x_input\n", + "\n", + " ## Hidden layers:\n", + "\n", + " for l in range(N_hidden):\n", + " # From the list of parameters P; find the correct weigths and bias for this layer\n", + " w_hidden = deep_params[l]\n", + "\n", + " # Add a row of ones to include bias\n", + " x_prev = np.concatenate((np.ones((1,num_values)), x_prev ), axis = 0)\n", + "\n", + " z_hidden = np.matmul(w_hidden, x_prev)\n", + " x_hidden = sigmoid(z_hidden)\n", + "\n", + " # Update x_prev such that next layer can use the output from this layer\n", + " x_prev = x_hidden\n", + "\n", + " ## Output layer:\n", + "\n", + " # Get the weights and bias for this layer\n", + " w_output = deep_params[-1]\n", + "\n", + " # Include bias:\n", + " x_prev = np.concatenate((np.ones((1,num_values)), x_prev), axis = 0)\n", + "\n", + " z_output = np.matmul(w_output, x_prev)\n", + " x_output = z_output\n", + "\n", + " return x_output\n", + "\n", + "def solve_ode_deep_neural_network(x, num_neurons, num_iter, lmb):\n", + " # num_hidden_neurons is now a list of number of neurons within each hidden layer\n", + "\n", + " # Find the number of hidden layers:\n", + " N_hidden = np.size(num_neurons)\n", + "\n", + " ## Set up initial weigths and biases\n", + "\n", + " # Initialize the list of parameters:\n", + " P = [None]*(N_hidden + 1) # + 1 to include the output layer\n", + "\n", + " P[0] = npr.randn(num_neurons[0], 2 )\n", + " for l in range(1,N_hidden):\n", + " P[l] = npr.randn(num_neurons[l], num_neurons[l-1] + 1) # +1 to include bias\n", + "\n", + " # For the output layer\n", + " P[-1] = npr.randn(1, num_neurons[-1] + 1 ) # +1 since bias is included\n", + "\n", + " print('Initial cost: %g'%cost_function_deep(P, x))\n", + "\n", + " ## Start finding the optimal weigths using gradient descent\n", + "\n", + " # Find the Python function that represents the gradient of the cost function\n", + " # w.r.t the 0-th input argument -- that is the weights and biases in the hidden and output layer\n", + " cost_function_deep_grad = grad(cost_function_deep,0)\n", + "\n", + " # Let the update be done num_iter times\n", + " for i in range(num_iter):\n", + " # Evaluate the gradient at the current weights and biases in P.\n", + " # The cost_grad consist now of N_hidden + 1 arrays; the gradient w.r.t the weights and biases\n", + " # in the hidden layers and output layers evaluated at x.\n", + " cost_deep_grad = cost_function_deep_grad(P, x)\n", + "\n", + " for l in range(N_hidden+1):\n", + " P[l] = P[l] - lmb * cost_deep_grad[l]\n", + "\n", + " print('Final cost: %g'%cost_function_deep(P, x))\n", + "\n", + " return P\n", + "\n", + "## Set up the cost function specified for this Poisson equation:\n", + "\n", + "# The right side of the ODE\n", + "def f(x):\n", + " return (3*x + x**2)*np.exp(x)\n", + "\n", + "def cost_function_deep(P, x):\n", + "\n", + " # Evaluate the trial function with the current parameters P\n", + " g_t = g_trial_deep(x,P)\n", + "\n", + " # Find the derivative w.r.t x of the trial function\n", + " d2_g_t = elementwise_grad(elementwise_grad(g_trial_deep,0))(x,P)\n", + "\n", + " right_side = f(x)\n", + "\n", + " err_sqr = (-d2_g_t - right_side)**2\n", + " cost_sum = np.sum(err_sqr)\n", + "\n", + " return cost_sum/np.size(err_sqr)\n", + "\n", + "# The trial solution:\n", + "def g_trial_deep(x,P):\n", + " return x*(1-x)*deep_neural_network(P,x)\n", + "\n", + "# The analytic solution;\n", + "def g_analytic(x):\n", + " return x*(1-x)*np.exp(x)\n", + "\n", + "if __name__ == '__main__':\n", + " npr.seed(4155)\n", + "\n", + " ## Decide the vales of arguments to the function to solve\n", + " Nx = 10\n", + " x = np.linspace(0,1, Nx)\n", + "\n", + " ## Set up the initial parameters\n", + " num_hidden_neurons = [200,100]\n", + " num_iter = 1000\n", + " lmb = 1e-3\n", + "\n", + " P = solve_ode_deep_neural_network(x, num_hidden_neurons, num_iter, lmb)\n", + "\n", + " g_dnn_ag = g_trial_deep(x,P)\n", + " g_analytical = g_analytic(x)\n", + "\n", + " # Find the maximum absolute difference between the solutons:\n", + " max_diff = np.max(np.abs(g_dnn_ag - g_analytical))\n", + " print(\"The max absolute difference between the solutions is: %g\"%max_diff)\n", + "\n", + " plt.figure(figsize=(10,10))\n", + "\n", + " plt.title('Performance of neural network solving an ODE compared to the analytical solution')\n", + " plt.plot(x, g_analytical)\n", + " plt.plot(x, g_dnn_ag[0,:])\n", + " plt.legend(['analytical','nn'])\n", + " plt.xlabel('x')\n", + " plt.ylabel('g(x)')\n", + " plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Comparing with a numerical scheme\n", + "\n", + "The Poisson equation is possible to solve using Taylor series to approximate the second derivative.\n", + "\n", + "Using Taylor series, the second derivative can be expressed as\n", + "\n", + "$$\n", + "g''(x) = \\frac{g(x + \\Delta x) - 2g(x) + g(x-\\Delta x)}{\\Delta x^2} + E_{\\Delta x}(x)\n", + "$$\n", + "\n", + "where $\\Delta x$ is a small step size and $E_{\\Delta x}(x)$ being the error term.\n", + "\n", + "Looking away from the error terms gives an approximation to the second derivative:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation} \\label{approx} \\tag{15}\n", + "g''(x) \\approx \\frac{g(x + \\Delta x) - 2g(x) + g(x-\\Delta x)}{\\Delta x^2}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If $x_i = i \\Delta x = x_{i-1} + \\Delta x$ and $g_i = g(x_i)$ for $i = 1,\\dots N_x - 2$ with $N_x$ being the number of values for $x$, ([15](#approx)) becomes" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{aligned}\n", + "g''(x_i) &\\approx \\frac{g(x_i + \\Delta x) - 2g(x_i) + g(x_i -\\Delta x)}{\\Delta x^2} \\\\\n", + "&= \\frac{g_{i+1} - 2g_i + g_{i-1}}{\\Delta x^2}\n", + "\\end{aligned}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Since we know from our problem that" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{aligned}\n", + "-g''(x) &= f(x) \\\\\n", + "&= (3x + x^2)\\exp(x)\n", + "\\end{aligned}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "along with the conditions $g(0) = g(1) = 0$,\n", + "the following scheme can be used to find an approximate solution for $g(x)$ numerically:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + " \\begin{aligned}\n", + " -\\Big( \\frac{g_{i+1} - 2g_i + g_{i-1}}{\\Delta x^2} \\Big) &= f(x_i) \\\\\n", + " -g_{i+1} + 2g_i - g_{i-1} &= \\Delta x^2 f(x_i)\n", + " \\end{aligned}\n", + "\\end{equation} \\label{odesys} \\tag{16}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "for $i = 1, \\dots, N_x - 2$ where $g_0 = g_{N_x - 1} = 0$ and $f(x_i) = (3x_i + x_i^2)\\exp(x_i)$, which is given for our specific problem.\n", + "\n", + "The equation can be rewritten into a matrix equation:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{aligned}\n", + "\\begin{pmatrix}\n", + "2 & -1 & 0 & \\dots & 0 \\\\\n", + "-1 & 2 & -1 & \\dots & 0 \\\\\n", + "\\vdots & & \\ddots & & \\vdots \\\\\n", + "0 & \\dots & -1 & 2 & -1 \\\\\n", + "0 & \\dots & 0 & -1 & 2\\\\\n", + "\\end{pmatrix}\n", + "\\begin{pmatrix}\n", + "g_1 \\\\\n", + "g_2 \\\\\n", + "\\vdots \\\\\n", + "g_{N_x - 3} \\\\\n", + "g_{N_x - 2}\n", + "\\end{pmatrix}\n", + "&=\n", + "\\Delta x^2\n", + "\\begin{pmatrix}\n", + "f(x_1) \\\\\n", + "f(x_2) \\\\\n", + "\\vdots \\\\\n", + "f(x_{N_x - 3}) \\\\\n", + "f(x_{N_x - 2})\n", + "\\end{pmatrix} \\\\\n", + "\\boldsymbol{A}\\boldsymbol{g} &= \\boldsymbol{f},\n", + "\\end{aligned}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "which makes it possible to solve for the vector $\\boldsymbol{g}$.\n", + "\n", + "\n", + "## Setting up the code\n", + "\n", + "We can then compare the result from this numerical scheme with the output from our network using Autograd:" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import autograd.numpy as np\n", + "from autograd import grad, elementwise_grad\n", + "import autograd.numpy.random as npr\n", + "from matplotlib import pyplot as plt\n", + "\n", + "def sigmoid(z):\n", + " return 1/(1 + np.exp(-z))\n", + "\n", + "def deep_neural_network(deep_params, x):\n", + " # N_hidden is the number of hidden layers\n", + " N_hidden = np.size(deep_params) - 1 # -1 since params consist of parameters to all the hidden layers AND the output layer\n", + "\n", + " # Assumes input x being an one-dimensional array\n", + " num_values = np.size(x)\n", + " x = x.reshape(-1, num_values)\n", + "\n", + " # Assume that the input layer does nothing to the input x\n", + " x_input = x\n", + "\n", + " # Due to multiple hidden layers, define a variable referencing to the\n", + " # output of the previous layer:\n", + " x_prev = x_input\n", + "\n", + " ## Hidden layers:\n", + "\n", + " for l in range(N_hidden):\n", + " # From the list of parameters P; find the correct weigths and bias for this layer\n", + " w_hidden = deep_params[l]\n", + "\n", + " # Add a row of ones to include bias\n", + " x_prev = np.concatenate((np.ones((1,num_values)), x_prev ), axis = 0)\n", + "\n", + " z_hidden = np.matmul(w_hidden, x_prev)\n", + " x_hidden = sigmoid(z_hidden)\n", + "\n", + " # Update x_prev such that next layer can use the output from this layer\n", + " x_prev = x_hidden\n", + "\n", + " ## Output layer:\n", + "\n", + " # Get the weights and bias for this layer\n", + " w_output = deep_params[-1]\n", + "\n", + " # Include bias:\n", + " x_prev = np.concatenate((np.ones((1,num_values)), x_prev), axis = 0)\n", + "\n", + " z_output = np.matmul(w_output, x_prev)\n", + " x_output = z_output\n", + "\n", + " return x_output\n", + "\n", + "def solve_ode_deep_neural_network(x, num_neurons, num_iter, lmb):\n", + " # num_hidden_neurons is now a list of number of neurons within each hidden layer\n", + "\n", + " # Find the number of hidden layers:\n", + " N_hidden = np.size(num_neurons)\n", + "\n", + " ## Set up initial weigths and biases\n", + "\n", + " # Initialize the list of parameters:\n", + " P = [None]*(N_hidden + 1) # + 1 to include the output layer\n", + "\n", + " P[0] = npr.randn(num_neurons[0], 2 )\n", + " for l in range(1,N_hidden):\n", + " P[l] = npr.randn(num_neurons[l], num_neurons[l-1] + 1) # +1 to include bias\n", + "\n", + " # For the output layer\n", + " P[-1] = npr.randn(1, num_neurons[-1] + 1 ) # +1 since bias is included\n", + "\n", + " print('Initial cost: %g'%cost_function_deep(P, x))\n", + "\n", + " ## Start finding the optimal weigths using gradient descent\n", + "\n", + " # Find the Python function that represents the gradient of the cost function\n", + " # w.r.t the 0-th input argument -- that is the weights and biases in the hidden and output layer\n", + " cost_function_deep_grad = grad(cost_function_deep,0)\n", + "\n", + " # Let the update be done num_iter times\n", + " for i in range(num_iter):\n", + " # Evaluate the gradient at the current weights and biases in P.\n", + " # The cost_grad consist now of N_hidden + 1 arrays; the gradient w.r.t the weights and biases\n", + " # in the hidden layers and output layers evaluated at x.\n", + " cost_deep_grad = cost_function_deep_grad(P, x)\n", + "\n", + " for l in range(N_hidden+1):\n", + " P[l] = P[l] - lmb * cost_deep_grad[l]\n", + "\n", + " print('Final cost: %g'%cost_function_deep(P, x))\n", + "\n", + " return P\n", + "\n", + "## Set up the cost function specified for this Poisson equation:\n", + "\n", + "# The right side of the ODE\n", + "def f(x):\n", + " return (3*x + x**2)*np.exp(x)\n", + "\n", + "def cost_function_deep(P, x):\n", + "\n", + " # Evaluate the trial function with the current parameters P\n", + " g_t = g_trial_deep(x,P)\n", + "\n", + " # Find the derivative w.r.t x of the trial function\n", + " d2_g_t = elementwise_grad(elementwise_grad(g_trial_deep,0))(x,P)\n", + "\n", + " right_side = f(x)\n", + "\n", + " err_sqr = (-d2_g_t - right_side)**2\n", + " cost_sum = np.sum(err_sqr)\n", + "\n", + " return cost_sum/np.size(err_sqr)\n", + "\n", + "# The trial solution:\n", + "def g_trial_deep(x,P):\n", + " return x*(1-x)*deep_neural_network(P,x)\n", + "\n", + "# The analytic solution;\n", + "def g_analytic(x):\n", + " return x*(1-x)*np.exp(x)\n", + "\n", + "if __name__ == '__main__':\n", + " npr.seed(4155)\n", + "\n", + " ## Decide the vales of arguments to the function to solve\n", + " Nx = 10\n", + " x = np.linspace(0,1, Nx)\n", + "\n", + " ## Set up the initial parameters\n", + " num_hidden_neurons = [200,100]\n", + " num_iter = 1000\n", + " lmb = 1e-3\n", + "\n", + " P = solve_ode_deep_neural_network(x, num_hidden_neurons, num_iter, lmb)\n", + "\n", + " g_dnn_ag = g_trial_deep(x,P)\n", + " g_analytical = g_analytic(x)\n", + "\n", + " # Find the maximum absolute difference between the solutons:\n", + "\n", + " plt.figure(figsize=(10,10))\n", + "\n", + " plt.title('Performance of neural network solving an ODE compared to the analytical solution')\n", + " plt.plot(x, g_analytical)\n", + " plt.plot(x, g_dnn_ag[0,:])\n", + " plt.legend(['analytical','nn'])\n", + " plt.xlabel('x')\n", + " plt.ylabel('g(x)')\n", + "\n", + " ## Perform the computation using the numerical scheme\n", + "\n", + " dx = 1/(Nx - 1)\n", + "\n", + " # Set up the matrix A\n", + " A = np.zeros((Nx-2,Nx-2))\n", + "\n", + " A[0,0] = 2\n", + " A[0,1] = -1\n", + "\n", + " for i in range(1,Nx-3):\n", + " A[i,i-1] = -1\n", + " A[i,i] = 2\n", + " A[i,i+1] = -1\n", + "\n", + " A[Nx - 3, Nx - 4] = -1\n", + " A[Nx - 3, Nx - 3] = 2\n", + "\n", + " # Set up the vector f\n", + " f_vec = dx**2 * f(x[1:-1])\n", + "\n", + " # Solve the equation\n", + " g_res = np.linalg.solve(A,f_vec)\n", + "\n", + " g_vec = np.zeros(Nx)\n", + " g_vec[1:-1] = g_res\n", + "\n", + " # Print the differences between each method\n", + " max_diff1 = np.max(np.abs(g_dnn_ag - g_analytical))\n", + " max_diff2 = np.max(np.abs(g_vec - g_analytical))\n", + " print(\"The max absolute difference between the analytical solution and DNN Autograd: %g\"%max_diff1)\n", + " print(\"The max absolute difference between the analytical solution and numerical scheme: %g\"%max_diff2)\n", + "\n", + " # Plot the results\n", + " plt.figure(figsize=(10,10))\n", + "\n", + " plt.plot(x,g_vec)\n", + " plt.plot(x,g_analytical)\n", + " plt.plot(x,g_dnn_ag[0,:])\n", + "\n", + " plt.legend(['numerical scheme','analytical','dnn'])\n", + " plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Partial Differential Equations\n", + "\n", + "A partial differential equation (PDE) has a solution here the function\n", + "is defined by multiple variables. The equation may involve all kinds\n", + "of combinations of which variables the function is differentiated with\n", + "respect to.\n", + "\n", + "In general, a partial differential equation for a function $g(x_1,\\dots,x_N)$ with $N$ variables may be expressed as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation} \\label{PDE} \\tag{17}\n", + " f\\left(x_1, \\, \\dots \\, , x_N, \\frac{\\partial g(x_1,\\dots,x_N) }{\\partial x_1}, \\dots , \\frac{\\partial g(x_1,\\dots,x_N) }{\\partial x_N}, \\frac{\\partial g(x_1,\\dots,x_N) }{\\partial x_1\\partial x_2}, \\, \\dots \\, , \\frac{\\partial^n g(x_1,\\dots,x_N) }{\\partial x_N^n} \\right) = 0\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $f$ is an expression involving all kinds of possible mixed derivatives of $g(x_1,\\dots,x_N)$ up to an order $n$. In order for the solution to be unique, some additional conditions must also be given.\n", + "\n", + "\n", + "## Type of problem\n", + "\n", + "The problem our network must solve for, is similar to the ODE case.\n", + "We must have a trial solution $g_t$ at hand.\n", + "\n", + "For instance, the trial solution could be expressed as" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{align*}\n", + " g_t(x_1,\\dots,x_N) = h_1(x_1,\\dots,x_N) + h_2(x_1,\\dots,x_N,N(x_1,\\dots,x_N,P))\n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $h_1(x_1,\\dots,x_N)$ is a function that ensures $g_t(x_1,\\dots,x_N)$ satisfies some given conditions.\n", + "The neural network $N(x_1,\\dots,x_N,P)$ has weights and biases described by $P$ and $h_2(x_1,\\dots,x_N,N(x_1,\\dots,x_N,P))$ is an expression using the output from the neural network in some way.\n", + "\n", + "The role of the function $h_2(x_1,\\dots,x_N,N(x_1,\\dots,x_N,P))$, is to ensure that the output of $N(x_1,\\dots,x_N,P)$ is zero when $g_t(x_1,\\dots,x_N)$ is evaluated at the values of $x_1,\\dots,x_N$ where the given conditions must be satisfied. The function $h_1(x_1,\\dots,x_N)$ should alone make $g_t(x_1,\\dots,x_N)$ satisfy the conditions.\n", + "\n", + "\n", + "\n", + "## Network requirements\n", + "\n", + "The network tries then the minimize the cost function following the\n", + "same ideas as described for the ODE case, but now with more than one\n", + "variables to consider. The concept still remains the same; find a set\n", + "of parameters $P$ such that the expression $f$ in ([17](#PDE)) is as\n", + "close to zero as possible.\n", + "\n", + "As for the ODE case, the cost function is the mean squared error that\n", + "the network must try to minimize. The cost function for the network to\n", + "minimize is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "C\\left(x_1, \\dots, x_N, P\\right) = \\left( f\\left(x_1, \\, \\dots \\, , x_N, \\frac{\\partial g(x_1,\\dots,x_N) }{\\partial x_1}, \\dots , \\frac{\\partial g(x_1,\\dots,x_N) }{\\partial x_N}, \\frac{\\partial g(x_1,\\dots,x_N) }{\\partial x_1\\partial x_2}, \\, \\dots \\, , \\frac{\\partial^n g(x_1,\\dots,x_N) }{\\partial x_N^n} \\right) \\right)^2\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## More details\n", + "\n", + "If we let $\\boldsymbol{x} = \\big( x_1, \\dots, x_N \\big)$ be an array containing the values for $x_1, \\dots, x_N$ respectively, the cost function can be reformulated into the following:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "C\\left(\\boldsymbol{x}, P\\right) = f\\left( \\left( \\boldsymbol{x}, \\frac{\\partial g(\\boldsymbol{x}) }{\\partial x_1}, \\dots , \\frac{\\partial g(\\boldsymbol{x}) }{\\partial x_N}, \\frac{\\partial g(\\boldsymbol{x}) }{\\partial x_1\\partial x_2}, \\, \\dots \\, , \\frac{\\partial^n g(\\boldsymbol{x}) }{\\partial x_N^n} \\right) \\right)^2\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If we also have $M$ different sets of values for $x_1, \\dots, x_N$, that is $\\boldsymbol{x}_i = \\big(x_1^{(i)}, \\dots, x_N^{(i)}\\big)$ for $i = 1,\\dots,M$ being the rows in matrix $X$, the cost function can be generalized into" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "C\\left(X, P \\right) = \\sum_{i=1}^M f\\left( \\left( \\boldsymbol{x}_i, \\frac{\\partial g(\\boldsymbol{x}_i) }{\\partial x_1}, \\dots , \\frac{\\partial g(\\boldsymbol{x}_i) }{\\partial x_N}, \\frac{\\partial g(\\boldsymbol{x}_i) }{\\partial x_1\\partial x_2}, \\, \\dots \\, , \\frac{\\partial^n g(\\boldsymbol{x}_i) }{\\partial x_N^n} \\right) \\right)^2.\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example: The diffusion equation\n", + "\n", + "In one spatial dimension, the equation reads" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{\\partial g(x,t)}{\\partial t} = \\frac{\\partial^2 g(x,t)}{\\partial x^2}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where a possible choice of conditions are" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{align*}\n", + "g(0,t) &= 0 ,\\qquad t \\geq 0 \\\\\n", + "g(1,t) &= 0, \\qquad t \\geq 0 \\\\\n", + "g(x,0) &= u(x),\\qquad x\\in [0,1]\n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "with $u(x)$ being some given function.\n", + "\n", + "\n", + "## Defining the problem\n", + "\n", + "For this case, we want to find $g(x,t)$ such that" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + " \\frac{\\partial g(x,t)}{\\partial t} = \\frac{\\partial^2 g(x,t)}{\\partial x^2}\n", + "\\end{equation} \\label{diffonedim} \\tag{18}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{align*}\n", + "g(0,t) &= 0 ,\\qquad t \\geq 0 \\\\\n", + "g(1,t) &= 0, \\qquad t \\geq 0 \\\\\n", + "g(x,0) &= u(x),\\qquad x\\in [0,1]\n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "with $u(x) = \\sin(\\pi x)$.\n", + "\n", + "First, let us set up the deep neural network.\n", + "The deep neural network will follow the same structure as discussed in the examples solving the ODEs.\n", + "First, we will look into how Autograd could be used in a network tailored to solve for bivariate functions.\n", + "\n", + "\n", + "\n", + "\n", + "## Setting up the network using Autograd\n", + "\n", + "The only change to do here, is to extend our network such that\n", + "functions of multiple parameters are correctly handled. In this case\n", + "we have two variables in our function to solve for, that is time $t$\n", + "and position $x$. The variables will be represented by a\n", + "one-dimensional array in the program. The program will evaluate the\n", + "network at each possible pair $(x,t)$, given an array for the desired\n", + "$x$-values and $t$-values to approximate the solution at." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def sigmoid(z):\n", + " return 1/(1 + np.exp(-z))\n", + "\n", + "def deep_neural_network(deep_params, x):\n", + " # x is now a point and a 1D numpy array; make it a column vector\n", + " num_coordinates = np.size(x,0)\n", + " x = x.reshape(num_coordinates,-1)\n", + "\n", + " num_points = np.size(x,1)\n", + "\n", + " # N_hidden is the number of hidden layers\n", + " N_hidden = np.size(deep_params) - 1 # -1 since params consist of parameters to all the hidden layers AND the output layer\n", + "\n", + " # Assume that the input layer does nothing to the input x\n", + " x_input = x\n", + " x_prev = x_input\n", + "\n", + " ## Hidden layers:\n", + "\n", + " for l in range(N_hidden):\n", + " # From the list of parameters P; find the correct weigths and bias for this layer\n", + " w_hidden = deep_params[l]\n", + "\n", + " # Add a row of ones to include bias\n", + " x_prev = np.concatenate((np.ones((1,num_points)), x_prev ), axis = 0)\n", + "\n", + " z_hidden = np.matmul(w_hidden, x_prev)\n", + " x_hidden = sigmoid(z_hidden)\n", + "\n", + " # Update x_prev such that next layer can use the output from this layer\n", + " x_prev = x_hidden\n", + "\n", + " ## Output layer:\n", + "\n", + " # Get the weights and bias for this layer\n", + " w_output = deep_params[-1]\n", + "\n", + " # Include bias:\n", + " x_prev = np.concatenate((np.ones((1,num_points)), x_prev), axis = 0)\n", + "\n", + " z_output = np.matmul(w_output, x_prev)\n", + " x_output = z_output\n", + "\n", + " return x_output[0][0]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Setting up the network using Autograd; The trial solution\n", + "\n", + "The cost function must then iterate through the given arrays\n", + "containing values for $x$ and $t$, defines a point $(x,t)$ the deep\n", + "neural network and the trial solution is evaluated at, and then finds\n", + "the Jacobian of the trial solution.\n", + "\n", + "A possible trial solution for this PDE is\n", + "\n", + "$$\n", + "g_t(x,t) = h_1(x,t) + x(1-x)tN(x,t,P)\n", + "$$\n", + "\n", + "with $A(x,t)$ being a function ensuring that $g_t(x,t)$ satisfies our given conditions, and $N(x,t,P)$ being the output from the deep neural network using weights and biases for each layer from $P$.\n", + "\n", + "To fulfill the conditions, $A(x,t)$ could be:\n", + "\n", + "$$\n", + "h_1(x,t) = (1-t)\\Big(u(x) - \\big((1-x)u(0) + x u(1)\\big)\\Big) = (1-t)u(x) = (1-t)\\sin(\\pi x)\n", + "$$\n", + "since $(0) = u(1) = 0$ and $u(x) = \\sin(\\pi x)$.\n", + "\n", + "\n", + "## Why the jacobian?\n", + "\n", + "The Jacobian is used because the program must find the derivative of\n", + "the trial solution with respect to $x$ and $t$.\n", + "\n", + "This gives the necessity of computing the Jacobian matrix, as we want\n", + "to evaluate the gradient with respect to $x$ and $t$ (note that the\n", + "Jacobian of a scalar-valued multivariate function is simply its\n", + "gradient).\n", + "\n", + "In Autograd, the differentiation is by default done with respect to\n", + "the first input argument of your Python function. Since the points is\n", + "an array representing $x$ and $t$, the Jacobian is calculated using\n", + "the values of $x$ and $t$.\n", + "\n", + "To find the second derivative with respect to $x$ and $t$, the\n", + "Jacobian can be found for the second time. The result is a Hessian\n", + "matrix, which is the matrix containing all the possible second order\n", + "mixed derivatives of $g(x,t)$." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Set up the trial function:\n", + "def u(x):\n", + " return np.sin(np.pi*x)\n", + "\n", + "def g_trial(point,P):\n", + " x,t = point\n", + " return (1-t)*u(x) + x*(1-x)*t*deep_neural_network(P,point)\n", + "\n", + "# The right side of the ODE:\n", + "def f(point):\n", + " return 0.\n", + "\n", + "# The cost function:\n", + "def cost_function(P, x, t):\n", + " cost_sum = 0\n", + "\n", + " g_t_jacobian_func = jacobian(g_trial)\n", + " g_t_hessian_func = hessian(g_trial)\n", + "\n", + " for x_ in x:\n", + " for t_ in t:\n", + " point = np.array([x_,t_])\n", + "\n", + " g_t = g_trial(point,P)\n", + " g_t_jacobian = g_t_jacobian_func(point,P)\n", + " g_t_hessian = g_t_hessian_func(point,P)\n", + "\n", + " g_t_dt = g_t_jacobian[1]\n", + " g_t_d2x = g_t_hessian[0][0]\n", + "\n", + " func = f(point)\n", + "\n", + " err_sqr = ( (g_t_dt - g_t_d2x) - func)**2\n", + " cost_sum += err_sqr\n", + "\n", + " return cost_sum" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Setting up the network using Autograd; The full program\n", + "\n", + "Having set up the network, along with the trial solution and cost function, we can now see how the deep neural network performs by comparing the results to the analytical solution.\n", + "\n", + "The analytical solution of our problem is\n", + "\n", + "$$\n", + "g(x,t) = \\exp(-\\pi^2 t)\\sin(\\pi x)\n", + "$$\n", + "\n", + "A possible way to implement a neural network solving the PDE, is given below.\n", + "Be aware, though, that it is fairly slow for the parameters used.\n", + "A better result is possible, but requires more iterations, and thus longer time to complete.\n", + "\n", + "\n", + "Indeed, the program below is not optimal in its implementation, but rather serves as an example on how to implement and use a neural network to solve a PDE.\n", + "Using TensorFlow results in a much better execution time. Try it!" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import autograd.numpy as np\n", + "from autograd import jacobian,hessian,grad\n", + "import autograd.numpy.random as npr\n", + "from matplotlib import cm\n", + "from matplotlib import pyplot as plt\n", + "from mpl_toolkits.mplot3d import axes3d\n", + "\n", + "## Set up the network\n", + "\n", + "def sigmoid(z):\n", + " return 1/(1 + np.exp(-z))\n", + "\n", + "def deep_neural_network(deep_params, x):\n", + " # x is now a point and a 1D numpy array; make it a column vector\n", + " num_coordinates = np.size(x,0)\n", + " x = x.reshape(num_coordinates,-1)\n", + "\n", + " num_points = np.size(x,1)\n", + "\n", + " # N_hidden is the number of hidden layers\n", + " N_hidden = np.size(deep_params) - 1 # -1 since params consist of parameters to all the hidden layers AND the output layer\n", + "\n", + " # Assume that the input layer does nothing to the input x\n", + " x_input = x\n", + " x_prev = x_input\n", + "\n", + " ## Hidden layers:\n", + "\n", + " for l in range(N_hidden):\n", + " # From the list of parameters P; find the correct weigths and bias for this layer\n", + " w_hidden = deep_params[l]\n", + "\n", + " # Add a row of ones to include bias\n", + " x_prev = np.concatenate((np.ones((1,num_points)), x_prev ), axis = 0)\n", + "\n", + " z_hidden = np.matmul(w_hidden, x_prev)\n", + " x_hidden = sigmoid(z_hidden)\n", + "\n", + " # Update x_prev such that next layer can use the output from this layer\n", + " x_prev = x_hidden\n", + "\n", + " ## Output layer:\n", + "\n", + " # Get the weights and bias for this layer\n", + " w_output = deep_params[-1]\n", + "\n", + " # Include bias:\n", + " x_prev = np.concatenate((np.ones((1,num_points)), x_prev), axis = 0)\n", + "\n", + " z_output = np.matmul(w_output, x_prev)\n", + " x_output = z_output\n", + "\n", + " return x_output[0][0]\n", + "\n", + "## Define the trial solution and cost function\n", + "def u(x):\n", + " return np.sin(np.pi*x)\n", + "\n", + "def g_trial(point,P):\n", + " x,t = point\n", + " return (1-t)*u(x) + x*(1-x)*t*deep_neural_network(P,point)\n", + "\n", + "# The right side of the ODE:\n", + "def f(point):\n", + " return 0.\n", + "\n", + "# The cost function:\n", + "def cost_function(P, x, t):\n", + " cost_sum = 0\n", + "\n", + " g_t_jacobian_func = jacobian(g_trial)\n", + " g_t_hessian_func = hessian(g_trial)\n", + "\n", + " for x_ in x:\n", + " for t_ in t:\n", + " point = np.array([x_,t_])\n", + "\n", + " g_t = g_trial(point,P)\n", + " g_t_jacobian = g_t_jacobian_func(point,P)\n", + " g_t_hessian = g_t_hessian_func(point,P)\n", + "\n", + " g_t_dt = g_t_jacobian[1]\n", + " g_t_d2x = g_t_hessian[0][0]\n", + "\n", + " func = f(point)\n", + "\n", + " err_sqr = ( (g_t_dt - g_t_d2x) - func)**2\n", + " cost_sum += err_sqr\n", + "\n", + " return cost_sum /( np.size(x)*np.size(t) )\n", + "\n", + "## For comparison, define the analytical solution\n", + "def g_analytic(point):\n", + " x,t = point\n", + " return np.exp(-np.pi**2*t)*np.sin(np.pi*x)\n", + "\n", + "## Set up a function for training the network to solve for the equation\n", + "def solve_pde_deep_neural_network(x,t, num_neurons, num_iter, lmb):\n", + " ## Set up initial weigths and biases\n", + " N_hidden = np.size(num_neurons)\n", + "\n", + " ## Set up initial weigths and biases\n", + "\n", + " # Initialize the list of parameters:\n", + " P = [None]*(N_hidden + 1) # + 1 to include the output layer\n", + "\n", + " P[0] = npr.randn(num_neurons[0], 2 + 1 ) # 2 since we have two points, +1 to include bias\n", + " for l in range(1,N_hidden):\n", + " P[l] = npr.randn(num_neurons[l], num_neurons[l-1] + 1) # +1 to include bias\n", + "\n", + " # For the output layer\n", + " P[-1] = npr.randn(1, num_neurons[-1] + 1 ) # +1 since bias is included\n", + "\n", + " print('Initial cost: ',cost_function(P, x, t))\n", + "\n", + " cost_function_grad = grad(cost_function,0)\n", + "\n", + " # Let the update be done num_iter times\n", + " for i in range(num_iter):\n", + " cost_grad = cost_function_grad(P, x , t)\n", + "\n", + " for l in range(N_hidden+1):\n", + " P[l] = P[l] - lmb * cost_grad[l]\n", + "\n", + " print('Final cost: ',cost_function(P, x, t))\n", + "\n", + " return P\n", + "\n", + "if __name__ == '__main__':\n", + " ### Use the neural network:\n", + " npr.seed(15)\n", + "\n", + " ## Decide the vales of arguments to the function to solve\n", + " Nx = 10; Nt = 10\n", + " x = np.linspace(0, 1, Nx)\n", + " t = np.linspace(0,1,Nt)\n", + "\n", + " ## Set up the parameters for the network\n", + " num_hidden_neurons = [100, 25]\n", + " num_iter = 250\n", + " lmb = 0.01\n", + "\n", + " P = solve_pde_deep_neural_network(x,t, num_hidden_neurons, num_iter, lmb)\n", + "\n", + " ## Store the results\n", + " g_dnn_ag = np.zeros((Nx, Nt))\n", + " G_analytical = np.zeros((Nx, Nt))\n", + " for i,x_ in enumerate(x):\n", + " for j, t_ in enumerate(t):\n", + " point = np.array([x_, t_])\n", + " g_dnn_ag[i,j] = g_trial(point,P)\n", + "\n", + " G_analytical[i,j] = g_analytic(point)\n", + "\n", + " # Find the map difference between the analytical and the computed solution\n", + " diff_ag = np.abs(g_dnn_ag - G_analytical)\n", + " print('Max absolute difference between the analytical solution and the network: %g'%np.max(diff_ag))\n", + "\n", + " ## Plot the solutions in two dimensions, that being in position and time\n", + "\n", + " T,X = np.meshgrid(t,x)\n", + "\n", + " fig = plt.figure(figsize=(10,10))\n", + " ax = fig.gca(projection='3d')\n", + " ax.set_title('Solution from the deep neural network w/ %d layer'%len(num_hidden_neurons))\n", + " s = ax.plot_surface(T,X,g_dnn_ag,linewidth=0,antialiased=False,cmap=cm.viridis)\n", + " ax.set_xlabel('Time $t$')\n", + " ax.set_ylabel('Position $x$');\n", + "\n", + "\n", + " fig = plt.figure(figsize=(10,10))\n", + " ax = fig.gca(projection='3d')\n", + " ax.set_title('Analytical solution')\n", + " s = ax.plot_surface(T,X,G_analytical,linewidth=0,antialiased=False,cmap=cm.viridis)\n", + " ax.set_xlabel('Time $t$')\n", + " ax.set_ylabel('Position $x$');\n", + "\n", + " fig = plt.figure(figsize=(10,10))\n", + " ax = fig.gca(projection='3d')\n", + " ax.set_title('Difference')\n", + " s = ax.plot_surface(T,X,diff_ag,linewidth=0,antialiased=False,cmap=cm.viridis)\n", + " ax.set_xlabel('Time $t$')\n", + " ax.set_ylabel('Position $x$');\n", + "\n", + " ## Take some slices of the 3D plots just to see the solutions at particular times\n", + " indx1 = 0\n", + " indx2 = int(Nt/2)\n", + " indx3 = Nt-1\n", + "\n", + " t1 = t[indx1]\n", + " t2 = t[indx2]\n", + " t3 = t[indx3]\n", + "\n", + " # Slice the results from the DNN\n", + " res1 = g_dnn_ag[:,indx1]\n", + " res2 = g_dnn_ag[:,indx2]\n", + " res3 = g_dnn_ag[:,indx3]\n", + "\n", + " # Slice the analytical results\n", + " res_analytical1 = G_analytical[:,indx1]\n", + " res_analytical2 = G_analytical[:,indx2]\n", + " res_analytical3 = G_analytical[:,indx3]\n", + "\n", + " # Plot the slices\n", + " plt.figure(figsize=(10,10))\n", + " plt.title(\"Computed solutions at time = %g\"%t1)\n", + " plt.plot(x, res1)\n", + " plt.plot(x,res_analytical1)\n", + " plt.legend(['dnn','analytical'])\n", + "\n", + " plt.figure(figsize=(10,10))\n", + " plt.title(\"Computed solutions at time = %g\"%t2)\n", + " plt.plot(x, res2)\n", + " plt.plot(x,res_analytical2)\n", + " plt.legend(['dnn','analytical'])\n", + "\n", + " plt.figure(figsize=(10,10))\n", + " plt.title(\"Computed solutions at time = %g\"%t3)\n", + " plt.plot(x, res3)\n", + " plt.plot(x,res_analytical3)\n", + " plt.legend(['dnn','analytical'])\n", + "\n", + " plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example: Solving the wave equation with Neural Networks\n", + "\n", + "The wave equation is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\frac{\\partial^2 g(x,t)}{\\partial t^2} = c^2\\frac{\\partial^2 g(x,t)}{\\partial x^2}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "with $c$ being the specified wave speed.\n", + "\n", + "Here, the chosen conditions are" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{align*}\n", + "\tg(0,t) &= 0 \\\\\n", + "\tg(1,t) &= 0 \\\\\n", + "\tg(x,0) &= u(x) \\\\\n", + "\t\\frac{\\partial g(x,t)}{\\partial t} \\Big |_{t = 0} &= v(x)\n", + "\\end{align*}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $\\frac{\\partial g(x,t)}{\\partial t} \\Big |_{t = 0}$ means the derivative of $g(x,t)$ with respect to $t$ is evaluated at $t = 0$, and $u(x)$ and $v(x)$ being given functions.\n", + "\n", + "\n", + "## The problem to solve for\n", + "\n", + "The wave equation to solve for, is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation} \\label{wave} \\tag{19}\n", + "\\frac{\\partial^2 g(x,t)}{\\partial t^2} = c^2 \\frac{\\partial^2 g(x,t)}{\\partial x^2}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where $c$ is the given wave speed.\n", + "The chosen conditions for this equation are" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{aligned}\n", + "g(0,t) &= 0, &t \\geq 0 \\\\\n", + "g(1,t) &= 0, &t \\geq 0 \\\\\n", + "g(x,0) &= u(x), &x\\in[0,1] \\\\\n", + "\\frac{\\partial g(x,t)}{\\partial t}\\Big |_{t = 0} &= v(x), &x \\in [0,1]\n", + "\\end{aligned} \\label{condwave} \\tag{20}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this example, let $c = 1$ and $u(x) = \\sin(\\pi x)$ and $v(x) = -\\pi\\sin(\\pi x)$.\n", + "\n", + "\n", + "\n", + "## The trial solution\n", + "Setting up the network is done in similar matter as for the example of solving the diffusion equation.\n", + "The only things we have to change, is the trial solution such that it satisfies the conditions from ([20](#condwave)) and the cost function.\n", + "\n", + "The trial solution becomes slightly different since we have other conditions than in the example of solving the diffusion equation. Here, a possible trial solution $g_t(x,t)$ is\n", + "\n", + "$$\n", + "g_t(x,t) = h_1(x,t) + x(1-x)t^2N(x,t,P)\n", + "$$\n", + "\n", + "where\n", + "\n", + "$$\n", + "h_1(x,t) = (1-t^2)u(x) + tv(x)\n", + "$$\n", + "\n", + "Note that this trial solution satisfies the conditions only if $u(0) = v(0) = u(1) = v(1) = 0$, which is the case in this example.\n", + "\n", + "\n", + "## The analytical solution\n", + "\n", + "The analytical solution for our specific problem, is\n", + "\n", + "$$\n", + "g(x,t) = \\sin(\\pi x)\\cos(\\pi t) - \\sin(\\pi x)\\sin(\\pi t)\n", + "$$\n", + "\n", + "\n", + "## Solving the wave equation - the full program using Autograd" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import autograd.numpy as np\n", + "from autograd import hessian,grad\n", + "import autograd.numpy.random as npr\n", + "from matplotlib import cm\n", + "from matplotlib import pyplot as plt\n", + "from mpl_toolkits.mplot3d import axes3d\n", + "\n", + "## Set up the trial function:\n", + "def u(x):\n", + " return np.sin(np.pi*x)\n", + "\n", + "def v(x):\n", + " return -np.pi*np.sin(np.pi*x)\n", + "\n", + "def h1(point):\n", + " x,t = point\n", + " return (1 - t**2)*u(x) + t*v(x)\n", + "\n", + "def g_trial(point,P):\n", + " x,t = point\n", + " return h1(point) + x*(1-x)*t**2*deep_neural_network(P,point)\n", + "\n", + "## Define the cost function\n", + "def cost_function(P, x, t):\n", + " cost_sum = 0\n", + "\n", + " g_t_hessian_func = hessian(g_trial)\n", + "\n", + " for x_ in x:\n", + " for t_ in t:\n", + " point = np.array([x_,t_])\n", + "\n", + " g_t_hessian = g_t_hessian_func(point,P)\n", + "\n", + " g_t_d2x = g_t_hessian[0][0]\n", + " g_t_d2t = g_t_hessian[1][1]\n", + "\n", + " err_sqr = ( (g_t_d2t - g_t_d2x) )**2\n", + " cost_sum += err_sqr\n", + "\n", + " return cost_sum / (np.size(t) * np.size(x))\n", + "\n", + "## The neural network\n", + "def sigmoid(z):\n", + " return 1/(1 + np.exp(-z))\n", + "\n", + "def deep_neural_network(deep_params, x):\n", + " # x is now a point and a 1D numpy array; make it a column vector\n", + " num_coordinates = np.size(x,0)\n", + " x = x.reshape(num_coordinates,-1)\n", + "\n", + " num_points = np.size(x,1)\n", + "\n", + " # N_hidden is the number of hidden layers\n", + " N_hidden = np.size(deep_params) - 1 # -1 since params consist of parameters to all the hidden layers AND the output layer\n", + "\n", + " # Assume that the input layer does nothing to the input x\n", + " x_input = x\n", + " x_prev = x_input\n", + "\n", + " ## Hidden layers:\n", + "\n", + " for l in range(N_hidden):\n", + " # From the list of parameters P; find the correct weigths and bias for this layer\n", + " w_hidden = deep_params[l]\n", + "\n", + " # Add a row of ones to include bias\n", + " x_prev = np.concatenate((np.ones((1,num_points)), x_prev ), axis = 0)\n", + "\n", + " z_hidden = np.matmul(w_hidden, x_prev)\n", + " x_hidden = sigmoid(z_hidden)\n", + "\n", + " # Update x_prev such that next layer can use the output from this layer\n", + " x_prev = x_hidden\n", + "\n", + " ## Output layer:\n", + "\n", + " # Get the weights and bias for this layer\n", + " w_output = deep_params[-1]\n", + "\n", + " # Include bias:\n", + " x_prev = np.concatenate((np.ones((1,num_points)), x_prev), axis = 0)\n", + "\n", + " z_output = np.matmul(w_output, x_prev)\n", + " x_output = z_output\n", + "\n", + " return x_output[0][0]\n", + "\n", + "## The analytical solution\n", + "def g_analytic(point):\n", + " x,t = point\n", + " return np.sin(np.pi*x)*np.cos(np.pi*t) - np.sin(np.pi*x)*np.sin(np.pi*t)\n", + "\n", + "def solve_pde_deep_neural_network(x,t, num_neurons, num_iter, lmb):\n", + " ## Set up initial weigths and biases\n", + " N_hidden = np.size(num_neurons)\n", + "\n", + " ## Set up initial weigths and biases\n", + "\n", + " # Initialize the list of parameters:\n", + " P = [None]*(N_hidden + 1) # + 1 to include the output layer\n", + "\n", + " P[0] = npr.randn(num_neurons[0], 2 + 1 ) # 2 since we have two points, +1 to include bias\n", + " for l in range(1,N_hidden):\n", + " P[l] = npr.randn(num_neurons[l], num_neurons[l-1] + 1) # +1 to include bias\n", + "\n", + " # For the output layer\n", + " P[-1] = npr.randn(1, num_neurons[-1] + 1 ) # +1 since bias is included\n", + "\n", + " print('Initial cost: ',cost_function(P, x, t))\n", + "\n", + " cost_function_grad = grad(cost_function,0)\n", + "\n", + " # Let the update be done num_iter times\n", + " for i in range(num_iter):\n", + " cost_grad = cost_function_grad(P, x , t)\n", + "\n", + " for l in range(N_hidden+1):\n", + " P[l] = P[l] - lmb * cost_grad[l]\n", + "\n", + "\n", + " print('Final cost: ',cost_function(P, x, t))\n", + "\n", + " return P\n", + "\n", + "if __name__ == '__main__':\n", + " ### Use the neural network:\n", + " npr.seed(15)\n", + "\n", + " ## Decide the vales of arguments to the function to solve\n", + " Nx = 10; Nt = 10\n", + " x = np.linspace(0, 1, Nx)\n", + " t = np.linspace(0,1,Nt)\n", + "\n", + " ## Set up the parameters for the network\n", + " num_hidden_neurons = [50,20]\n", + " num_iter = 1000\n", + " lmb = 0.01\n", + "\n", + " P = solve_pde_deep_neural_network(x,t, num_hidden_neurons, num_iter, lmb)\n", + "\n", + " ## Store the results\n", + " res = np.zeros((Nx, Nt))\n", + " res_analytical = np.zeros((Nx, Nt))\n", + " for i,x_ in enumerate(x):\n", + " for j, t_ in enumerate(t):\n", + " point = np.array([x_, t_])\n", + " res[i,j] = g_trial(point,P)\n", + "\n", + " res_analytical[i,j] = g_analytic(point)\n", + "\n", + " diff = np.abs(res - res_analytical)\n", + " print(\"Max difference between analytical and solution from nn: %g\"%np.max(diff))\n", + "\n", + " ## Plot the solutions in two dimensions, that being in position and time\n", + "\n", + " T,X = np.meshgrid(t,x)\n", + "\n", + " fig = plt.figure(figsize=(10,10))\n", + " ax = fig.gca(projection='3d')\n", + " ax.set_title('Solution from the deep neural network w/ %d layer'%len(num_hidden_neurons))\n", + " s = ax.plot_surface(T,X,res,linewidth=0,antialiased=False,cmap=cm.viridis)\n", + " ax.set_xlabel('Time $t$')\n", + " ax.set_ylabel('Position $x$');\n", + "\n", + "\n", + " fig = plt.figure(figsize=(10,10))\n", + " ax = fig.gca(projection='3d')\n", + " ax.set_title('Analytical solution')\n", + " s = ax.plot_surface(T,X,res_analytical,linewidth=0,antialiased=False,cmap=cm.viridis)\n", + " ax.set_xlabel('Time $t$')\n", + " ax.set_ylabel('Position $x$');\n", + "\n", + "\n", + " fig = plt.figure(figsize=(10,10))\n", + " ax = fig.gca(projection='3d')\n", + " ax.set_title('Difference')\n", + " s = ax.plot_surface(T,X,diff,linewidth=0,antialiased=False,cmap=cm.viridis)\n", + " ax.set_xlabel('Time $t$')\n", + " ax.set_ylabel('Position $x$');\n", + "\n", + " ## Take some slices of the 3D plots just to see the solutions at particular times\n", + " indx1 = 0\n", + " indx2 = int(Nt/2)\n", + " indx3 = Nt-1\n", + "\n", + " t1 = t[indx1]\n", + " t2 = t[indx2]\n", + " t3 = t[indx3]\n", + "\n", + " # Slice the results from the DNN\n", + " res1 = res[:,indx1]\n", + " res2 = res[:,indx2]\n", + " res3 = res[:,indx3]\n", + "\n", + " # Slice the analytical results\n", + " res_analytical1 = res_analytical[:,indx1]\n", + " res_analytical2 = res_analytical[:,indx2]\n", + " res_analytical3 = res_analytical[:,indx3]\n", + "\n", + " # Plot the slices\n", + " plt.figure(figsize=(10,10))\n", + " plt.title(\"Computed solutions at time = %g\"%t1)\n", + " plt.plot(x, res1)\n", + " plt.plot(x,res_analytical1)\n", + " plt.legend(['dnn','analytical'])\n", + "\n", + " plt.figure(figsize=(10,10))\n", + " plt.title(\"Computed solutions at time = %g\"%t2)\n", + " plt.plot(x, res2)\n", + " plt.plot(x,res_analytical2)\n", + " plt.legend(['dnn','analytical'])\n", + "\n", + " plt.figure(figsize=(10,10))\n", + " plt.title(\"Computed solutions at time = %g\"%t3)\n", + " plt.plot(x, res3)\n", + " plt.plot(x,res_analytical3)\n", + " plt.legend(['dnn','analytical'])\n", + "\n", + " plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Resources on differential equations and deep learning\n", + "\n", + "1. [Artificial neural networks for solving ordinary and partial differential equations by I.E. Lagaris et al](https://pdfs.semanticscholar.org/d061/df393e0e8fbfd0ea24976458b7d42419040d.pdf)\n", + "\n", + "2. [Neural networks for solving differential equations by A. Honchar](https://becominghuman.ai/neural-networks-for-solving-differential-equations-fa230ac5e04c)\n", + "\n", + "3. [Solving differential equations using neural networks by M.M Chiaramonte and M. Kiener](http://cs229.stanford.edu/proj2013/ChiaramonteKiener-SolvingDifferentialEquationsUsingNeuralNetworks.pdf)\n", + "\n", + "4. [Introduction to Partial Differential Equations by A. Tveito, R. Winther](https://www.springer.com/us/book/9783540225515)" + ] + } + ], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/doc/src/LectureNotes/chapter11.ipynb b/doc/src/LectureNotes/chapter11.ipynb new file mode 100644 index 000000000..200cdd664 --- /dev/null +++ b/doc/src/LectureNotes/chapter11.ipynb @@ -0,0 +1,1030 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "# Data Analysis and Machine Learning: \n", + "\n", + " \n", + "**Christian Forssén**, Department of Physics, Chalmers University of Technology, Sweden \n", + "\n", + " **Morten Hjorth-Jensen**, Department of Physics, University of Oslo and Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University\n", + "\n", + "Date: **Dec 23, 2020**\n", + "\n", + "Copyright 1999-2020, Morten Hjorth-Jensen. Released under CC Attribution-NonCommercial 4.0 license\n", + "\n", + "\n", + "\n", + "\n", + "# Elements of Bayesian theory and Bayesian Neural Networks\n", + "\n", + "\n", + "## Why Bayesian Statistics?\n", + "\n", + "We have already made ourselves familiar with elements of a statistical\n", + "data analysis via quantities like the bias-variance tradeoff as well\n", + "as some central distribution functions such as the Normal\n", + "distribution, the binomial distribution and other probability\n", + "distribution functions. \n", + "\n", + "In essentially all the Machine Learning algorithms we have studied,\n", + "our focus has been on a so-called **frequentist approach**, where\n", + "knowledge of an underlying likelihood function has not been\n", + "emphasized. Our data, whether we had a classification or a regression\n", + "problem, have been our central points of departure.\n", + "\n", + "Here we wish to merge this approach with the derivation of a\n", + "likelihood function which can be used to make prediction on how our\n", + "system under study evolves. We will venture into the realm of what is\n", + "called Bayesian Neural Networks. To get an overarching view on what\n", + "this entails, the following figure conveys the essential differences\n", + "between a standard Neural network that we have met earlier and a\n", + "Bayesian Neural Network. In order to get there, we need to present\n", + "some of the basic elements of Bayesian statistics, starting with the\n", + "product rule and Bayes' theorem.\n", + "\n", + "\n", + "\n", + "\n", + "## Inference\n", + "Inference:\n", + " : \n", + " \"the act of passing from one proposition, statement or judgment considered as true to another whose truth is believed to follow from that of the former\" (Webster) \n", + " Do premises $A, B, \\ldots \\to$ hypothesis, $H$? \n", + "\n", + "Deductive inference:\n", + " : \n", + " Premises allow definite determination of truth/falsity of H (syllogisms, symbolic logic, Boolean algebra) \n", + " $B(H|A,B,...) = 0$ or $1$\n", + "\n", + "Inductive inference:\n", + " : \n", + " Premises bear on truth/falsity of H, but don’t allow its definite determination (weak syllogisms, analogies)\n", + " $A, B, C, D$ share properties $x, y, z$; $E$ has properties $x, y$\n", + " $\\to$ $E$ probably has property $z$.\n", + "\n", + "\n", + "\n", + "\n", + "## Statistical Inference\n", + "* Quantify the strength of inductive inferences from facts, in the form of data ($D$), and other premises, e.g. models, to hypotheses about the phenomena producing the data.\n", + "\n", + "* Quantify via probabilities, or averages calculated using probabilities. Frequentists ($\\mathcal{F}$) and Bayesians ($\\mathcal{B}$) use probabilities very differently for this.\n", + "\n", + "* To the pioneers such as Bernoulli, Bayes and Laplace, a probability represented a *degree-of-belief* or plausability: how much they thought that something as true based on the evidence at hand. This is the Bayesian approach.\n", + "\n", + "* To the 19th century scholars, this seemed too vague and subjective. They redefined probability as the *long run relative frequency* with which an event occurred, given (infinitely) many repeated (experimental) trials.\n", + "\n", + "\n", + "\n", + "\n", + "## Some history\n", + "Adapted from D.S. Sivia[^Sivia]:\n", + "\n", + "[^Sivia]: Sivia, Devinderjit, and John Skilling. Data Analysis : A Bayesian Tutorial, OUP Oxford, 2006\n", + "\n", + "> Although the frequency definition appears to be more objective, its range of validity is also far more limited. For example, Laplace used (his) probability theory to estimate the mass of Saturn, given orbital data that were available to him from various astronomical observatories. In essence, he computed the posterior pdf for the mass M , given the data and all the relevant background information I (such as a knowledge of the laws of classical mechanics): prob(M|{data},I); this is shown schematically in the figure [Fig. 1.2].\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "

    \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "> To Laplace, the (shaded) area under the posterior pdf curve between $m_1$ and $m_2$ was a measure of how much he believed that the mass of Saturn lay in the range $m_1 \\le M \\le m_2$. As such, the position of the maximum of the posterior pdf represents a best estimate of the mass; its width, or spread, about this optimal value gives an indication of the uncertainty in the estimate. Laplace stated that: ‘ . . . it is a bet of 11,000 to 1 that the error of this result is not 1/100th of its value.’ He would have won the bet, as another 150 years’ accumulation of data has changed the estimate by only 0.63%!\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "> According to the frequency definition, however, we are not permitted to use probability theory to tackle this problem. This is because the mass of Saturn is a constant and not a random variable; therefore, it has no frequency distribution and so probability theory cannot be used.\n", + "> \n", + "> If the pdf [of Fig. 1.2] had to be interpreted in terms of the frequency definition, we would have to imagine a large ensemble of universes in which everything remains constant apart from the mass of Saturn.\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "> As this scenario appears quite far-fetched, we might be inclined to think of [Fig. 1.2] in terms of the distribution of the measurements of the mass in many repetitions of the experiment. Although we are at liberty to think about a problem in any way that facilitates its solution, or our understanding of it, having to seek a frequency interpretation for every data analysis problem seems rather perverse.\n", + "> For example, what do we mean by the ‘measurement of the mass’ when the data consist of orbital periods? Besides, why should we have to think about many repetitions of an experiment that never happened? What we really want to do is to make the best inference of the mass given the (few) data that we actually have; this is precisely the Bayes and Laplace view of probability.\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "> Faced with the realization that the frequency definition of probability theory did not permit most real-life scientific problems to be addressed, a new subject was invented — statistics! To estimate the mass of Saturn, for example, one has to relate the mass to the data through some function called the statistic; since the data are subject to ‘random’ noise, the statistic becomes the random variable to which the rules of probability the- ory can be applied. But now the question arises: How should we choose the statistic? The frequentist approach does not yield a natural way of doing this and has, therefore, led to the development of several alternative schools of orthodox or conventional statis- tics. The masters, such as Fisher, Neyman and Pearson, provided a variety of different principles, which has merely resulted in a plethora of tests and procedures without any clear underlying rationale. This lack of unifying principles is, perhaps, at the heart of the shortcomings of the cook-book approach to statistics that students are often taught even today.\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "## The Bayesian recipe\n", + "Assess hypotheses by calculating their probabilities $p(H_i | \\ldots)$ conditional on known and/or presumed information using the rules of probability theory.\n", + "\n", + "\n", + "Probability Theory Axioms:\n", + "Product (AND) rule :\n", + " : \n", + " $p(A, B | I) = p(A|I) p(B|A, I) = p(B|I)p(A|B,I)$\n", + " Should read $p(A,B|I)$ as the probability for propositions $A$ AND $B$ being true given that $I$ is true.\n", + "\n", + "Sum (OR) rule:\n", + " : \n", + " $p(A + B | I) = p(A | I) + p(B | I) - p(A, B | I)$\n", + " $p(A+B|I)$ is the probability that proposition $A$ OR $B$ is true given that $I$ is true.\n", + "\n", + "Normalization:\n", + " : \n", + " $p(A|I) + p(\\bar{A}|I) = 1$\n", + " $\\bar{A}$ denotes the proposition that $A$ is false.\n", + "\n", + "\n", + "\n", + "\n", + "## Bayes' theorem\n", + "Bayes' theorem follows directly from the product rule" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "$$\n", + "p(A|B,I) = \\frac{p(B|A,I) p(A|I)}{p(B|I)}.\n", + "$$\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The importance of this property to data analysis becomes apparent if we replace $A$ and $B$ by hypothesis($H$) and data($D$):" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "p(H|D,I) = \\frac{p(D|H,I) p(H|I)}{p(D|I)}.\n", + "\\label{eq:bayes} \\tag{1}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The power of Bayes’ theorem lies in the fact that it relates the quantity of interest, the probability that the hypothesis is true given the data, to the term we have a better chance of being able to assign, the probability that we would have observed the measured data if the hypothesis was true.\n", + "\n", + "\n", + "\n", + "\n", + "The various terms in Bayes’ theorem have formal names. \n", + "* The quantity on the far right, $p(H|I)$, is called the *prior* probability; it represents our state of knowledge (or ignorance) about the truth of the hypothesis before we have analysed the current data. \n", + "\n", + "* This is modified by the experimental measurements through $p(D|H,I)$, the *likelihood* function, \n", + "\n", + "* The denominator $p(D|I)$ is called the *evidence*. It does not depend on the hypothesis and can be regarded as a normalization constant.\n", + "\n", + "* Together, these yield the *posterior* probability, $p(H|D, I )$, representing our state of knowledge about the truth of the hypothesis in the light of the data. \n", + "\n", + "In a sense, Bayes’ theorem encapsulates the process of learning.\n", + "\n", + "\n", + "\n", + "\n", + "## The friends of Bayes' theorem\n", + "Normalization:\n", + " : \n", + " $\\sum_i p(H_i|\\ldots) = 1$.\n", + "\n", + "Marginalization:\n", + " : \n", + " $\\sum_i p(A,H_i|I) = \\sum_i p(H_i|A,I) p(A|I) = p(A|I)$.\n", + "\n", + "Marginalization (continuum limit):\n", + " : \n", + " $\\int dx p(A,H(x)|I) = p(A|I)$.\n", + "\n", + "In the above, $H_i$ is an exclusive and exhaustive list of hypotheses. For example,let’s imagine that there are five candidates in a presidential election; then $H_1$ could be the proposition that the first candidate will win, and so on. The probability that $A$ is true, for example that unemployment will be lower in a year’s time (given all relevant information $I$, but irrespective of whoever becomes president) is then given by $\\sum_i p(A,H_i|I)$.\n", + "\n", + "In the continuum limit of propositions we must understand $p(\\ldots)$ as a pdf (probability density function).\n", + "\n", + "Marginalization is a very powerful device in data analysis because it enables us to deal with nuisance parameters; that is, quantities which necessarily enter the analysis but are of no intrinsic interest. The unwanted background signal present in many experimental measurements are examples of nuisance parameters.\n", + "\n", + "\n", + "\n", + "\n", + "## Inference With Parametric Models\n", + "Inductive inference with parametric models is a very important tool in the natural sciences.\n", + "* Consider $N$ different models $M_i$ ($i = 1, \\ldots, N$), each with parameters $\\boldsymbol{\\alpha}_i$. Each of them implies a sampling distribution (conditional predictive distribution for possible data)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "$$\n", + "p(D|\\boldsymbol{\\alpha}_i, M_i)\n", + "$$\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "* The $\\boldsymbol{\\alpha}_i$ dependence when we fix attention on the actual, observed data ($D_\\mathrm{obs}$) is the likelihood function:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "$$\n", + "\\mathcal{L}_i (\\boldsymbol{\\alpha}_i) \\equiv p(D_\\mathrm{obs}|\\boldsymbol{\\alpha}_i, M_i)\n", + "$$\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "* We may be uncertain about $i$ (model uncertainty),\n", + "\n", + "* or uncertain about $\\boldsymbol{\\alpha}_i$ (parameter uncertainty).\n", + "\n", + "\n", + "\n", + "\n", + "Parameter Estimation:\n", + " : \n", + " Premise = choice of model (pick specific $i$)\n", + " $\\Rightarrow$ What can we say about $\\boldsymbol{\\alpha}_i$?\n", + "\n", + "Model comparison:\n", + " : \n", + " Premise = $\\{M_i\\}$\n", + " $\\Rightarrow$ What can we say about $i$?\n", + "\n", + "Model adequacy:\n", + " : \n", + " Premise = $M_1$\n", + " $\\Rightarrow$ Is $M_1$ adequate?\n", + "\n", + "Hybrid Uncertainty:\n", + " : \n", + " Models share some common params: $\\boldsymbol{\\alpha}_1 = \\{ \\boldsymbol{\\varphi}, \\boldsymbol{\\eta}_i\\}$\n", + " $\\Rightarrow$ What can we say about $\\boldsymbol{\\varphi}$? (Systematic error is an example)\n", + "\n", + "\n", + "\n", + "\n", + "## Illustrative examples with python code\n", + "* Is this a fair coin? (analytical)\n", + "\n", + "* Flux from a star (single parameter, MCMC)\n", + "\n", + "* The lighthouse problem (two parameters, MCMC)\n", + "\n", + "* Linear fit with outliers (nuisance parameters)\n", + "\n", + "* ...\n", + "\n", + "\n", + "\n", + "\n", + "## Example: Is this a fair coin?\n", + "Let us begin with the analysis of data from a simple coin-tossing experiment. \n", + "Given that we had observed 6 heads in 8 flips, would you think it was a fair coin? By fair, we mean that we would be prepared to lay an even 1 : 1 bet on the outcome of a flip being a head or a tail. If we decide that the coin was fair, the question which follows naturally is how sure are we that this was so; if it was not fair, how unfair do we think it was? Furthermore, if we were to continue collecting data for this particular coin, observing the outcomes of additional flips, how would we update our belief on the fairness of the coin?\n", + "\n", + "A sensible way of formulating this problem is to consider a large number of hypotheses about the range in which the bias-weighting of the coin might lie. If we denote the bias-weighting by $H$, then $H = 0$ and $H = 1$ can represent a coin which produces a tail or a head on every flip, respectively. There is a continuum of possibilities for the value of H between these limits, with $H = 0.5$ indicating a fair coin. Our state of knowledge about the fairness, or the degree of unfairness, of the coin is then completely summarized by specifying how much we believe these various propositions to be true. \n", + "\n", + "Let us perform a computer simulation of a coin-tossing experiment. This provides the data that we will be analysing." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "0\n", + " \n", + "<\n", + "<\n", + "<\n", + "!\n", + "!\n", + "C\n", + "O\n", + "D\n", + "E\n", + "_\n", + "B\n", + "L\n", + "O\n", + "C\n", + "K\n", + " \n", + " \n", + "p\n", + "y\n", + "c\n", + "o\n", + "d" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "np.random.seed(999) # for reproducibility\n", + "a=0.6 # biased coin\n", + "flips=np.random.rand(2**12) # simulates 4096 coin flips\n", + "heads=flips
    \n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\int_0^1 p(H|D,I) dH = 1.\n", + "\\label{eq:coin_posterior_norm} \\tag{2}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The prior pdf, $p(H|I)$, represents what we know about the coin given only the information $I$ that we are dealing with a ‘strange coin’. We could keep a very open mind about the nature of the coin; a simple probability assignment which reflects this is a uniform, or flat, prior" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "p(H|I) = \\left\\{ \\begin{array}{ll}\n", + "1 & 0 \\le H \\le 1, \\\\\n", + "0 & \\mathrm{otherwise}.\n", + "\\end{array} \\right.\n", + "\\label{eq:coin_prior_uniform} \\tag{3}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We will get back later to the choice of prior and its effect on the analysis.\n", + "\n", + "This prior state of knowledge, or ignorance, is modified by the data through the likelihood function $p(D|H,I)$. It is a measure of the chance that we would have obtained the data that we actually observed, if the value of the bias-weighting was given (as known). If, in the conditioning information $I$, we assume that the flips of the coin were independent events, so that the outcome of one did not influence that of another, then the probability of obtaining the data `R heads in N tosses' is given by the binomial distribution (we leave a formal definition of this to a statistics textbook)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "p(D|H,I) \\propto H^R (1-H)^{N-R}.\n", + "\\label{_auto1} \\tag{4}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "It seems reasonable because $H$ is the chance of obtaining a head on any flip, and there were $R$ of them, and $1-H$ is the corresponding probability for a tail, of which there were $N-R$. We note that this binomial distribution also contains a normalization factor, but we will ignore it since it does not depend explicitly on $H$, the quantity of interest. It will be absorbed by the normalization condition ([2](#eq:coin_posterior_norm)).\n", + "\n", + "We perform the setup of this Bayesian framework on the computer." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def prior(H):\n", + " p=np.zeros_like(H)\n", + " p[(0<=x)&(x<=1)]=1 # allowed range: 0<=H<=1\n", + " return p # uniform prior\n", + "def likelihood(H,data):\n", + " N = len(data)\n", + " no_of_heads = sum(data)\n", + " no_of_tails = N - no_of_heads\n", + " return H**no_of_heads * (1-H)**no_of_tails\n", + "def posterior(H,data):\n", + " p=prior(H)*likelihood(H,data)\n", + " norm=np.trapz(p,H)\n", + " return p/norm" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The next step is to confront this setup with the simulated data. To get a feel for the result, it is instructive to see how the posterior pdf evolves as we obtain more and more data pertaining to the coin. The results of such an analyses is shown in Fig. [fig:coinflipping](#fig:coinflipping)." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "x=np.linspace(0,1,100)\n", + "fig, axs = plt.subplots(nrows=4,ncols=3,sharex=True,sharey='row')\n", + "axs_vec=np.reshape(axs,-1)\n", + "axs_vec[0].plot(x,prior(x))\n", + "for ndouble in range(11):\n", + " ax=axs_vec[1+ndouble]\n", + " ax.plot(x,posterior(x,heads[:2**ndouble]))\n", + " ax.text(0.1, 0.8, '$N={0}$'.format(2**ndouble), transform=ax.transAxes)\n", + "for row in range(4): axs[row,0].set_ylabel('$p(H|D_\\mathrm{obs},I)$')\n", + "for col in range(3): axs[-1,col].set_xlabel('$H$')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "
    \n", + "\n", + "

    The evolution of the posterior pdf for the bias-weighting of a coin, as the number of data available increases. The figure on the top left-hand corner of each panel shows the number of data included in the analysis.

    \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "The panel in the top left-hand corner shows the posterior pdf for $H$ given no data, i.e., it is the same as the prior pdf of Eq. ([3](#eq:coin_prior_uniform)). It indicates that we have no more reason to believe that the coin is fair than we have to think that it is double-headed, double-tailed, or of any other intermediate bias-weighting.\n", + "\n", + "The first flip is obviously tails. At this point we have no evidence that the coin has a side with heads, as indicated by the pdf going to zero as $H \\to 1$. The second flip is obviously heads and we have now excluded both extreme options $H=0$ (double-tailed) and $H=1$ (double-headed). We can note that the posterior at this point has the simple form $p(H|D,I) = H(1-H)$ for $0 \\le H \\le 1$.\n", + "\n", + "The remainder of Fig. [fig:coinflipping](#fig:coinflipping) shows how the posterior pdf evolves as the number of data analysed becomes larger and larger. We see that the position of the maximum moves around, but that the amount by which it does so decreases with the increasing number of observations. The width of the posterior pdf also becomes narrower with more data, indicating that we are becoming increasingly confident in our estimate of the bias-weighting. For the coin in this example, the best estimate of $H$ eventually converges to 0.6, which, of course, was the value chosen to simulate the flips.\n", + "\n", + "\n", + "## A few words on different priors\n", + "* uniform\n", + "\n", + "* Gaussian\n", + "\n", + "* Jeffrey's prior\n", + "\n", + "Repeat the coin flipping experiment with other priors.\n", + "\n", + "\n", + "## Bayesian parameter estimation (single parameter)\n", + "We will now consider the very important task of model parameter estimation using statistical inference. \n", + "[CF 1: maybe stress that model parameters are not random variables, and the meaning of parameter estimation is therefore very different between frequentist and bayesian approaches.]\n", + "\n", + "Throughout this section we will consider a specific example that involves a model with a single parameter: \"Measured flux from a star\".\n", + "\n", + "\n", + "\n", + "\n", + "### Example: Measured flux from a star\n", + "\n", + "Adapted from the blog [Pythonic Perambulations](http://jakevdp.github.io) by Jake VanderPlas.\n", + "\n", + "Imagine that we point our telescope to the sky, and observe the light coming from a single star. For the time being, we'll assume that the star's true flux is constant with time, i.e. that is it has a fixed value $F_\\mathrm{true}$ (we'll also ignore effects like sky noise and other sources of systematic error). We'll assume that we perform a series of $N$ measurements with our telescope, where the ith measurement reports the observed photon flux $F_i$ and error $e_i$[^errors].\n", + "The question is, given this set of measurements $D = \\{F_i, e_i\\}$, what is our best estimate of the true flux $F_\\mathrm{true}$?\n", + "\n", + "[^errors]: We'll make the reasonable assumption that errors are Gaussian. In a Frequentist perspective, $e_i$ is the standard deviation of the results of a single measurement event in the limit of repetitions of *that event*. In the Bayesian perspective, $e_i$ is the standard deviation of the (Gaussian) probability distribution describing our knowledge of that particular measurement given its observed value.\n", + "\n", + "Because the measurements are number counts, a Poisson distribution is a good approximation to the measurement process:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "np.random.seed(1) # for repeatability\n", + "F_true = 1000 # true flux, say number of photons measured in 1 second\n", + "N = 50 # number of measurements\n", + "F = stats.poisson(F_true).rvs(N)\n", + " # N measurements of the flux\n", + "e = np.sqrt(F) # errors on Poisson counts estimated via square root" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now let's make a simple visualization of the \"observed\" data, see Fig. [fig:flux](#fig:flux)." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "fig, ax = plt.subplots()\n", + "ax.errorbar(F, np.arange(N), xerr=e, fmt='ok', ecolor='gray', alpha=0.5)\n", + "ax.vlines([F_true], 0, N, linewidth=5, alpha=0.2)\n", + "ax.set_xlabel(\"Flux\");ax.set_ylabel(\"measurement number\");" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "
    \n", + "\n", + "

    Single photon counts (flux measurements).

    \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "These measurements each have a different error $e_i$ which is estimated from Poisson statistics using the standard square-root rule. In this toy example we already know the true flux $F_\\mathrm{true}$, but the question is this: given our measurements and errors, what is our best estimate of the true flux?\n", + "\n", + "Let's take a look at the frequentist and Bayesian approaches to solving this.\n", + "\n", + "### Simple Photon Counts: Frequentist Approach\n", + "\n", + "We'll start with the classical frequentist maximum likelihood approach. Given a single observation $D_i = (F_i, e_i)$, we can compute the probability distribution of the measurement given the true flux Ftrue given our assumption of Gaussian errors" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "p(D_i | F_\\mathrm{true}, I) = \\frac{1}{\\sqrt{2\\pi e_i^2}} \\exp \\left( \\frac{-(F_i-F_\\mathrm{true})^2}{2e_i^2} \\right).\n", + "\\label{_auto2} \\tag{5}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This should be read \"the probability of $D_i$ given $F_\\mathrm{true}$\n", + "equals ...\". You should recognize this as a normal distribution with mean $F_\\mathrm{true}$ and standard deviation $e_i$.\n", + "\n", + "We construct the *likelihood function* by computing the product of the probabilities for each data point" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\mathcal{L}(D | F_\\mathrm{true}, I) = \\prod_{i=1}^N p(D_i | F_\\mathrm{true}, I),\n", + "\\label{_auto3} \\tag{6}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "here $D = \\{D_i\\}$ represents the entire set of measurements. Because the value of the likelihood can become very small, it is often more convenient to instead compute the log-likelihood. Combining the previous two equations and computing the log, we have" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\log\\mathcal{L} = -\\frac{1}{2} \\sum_{i=1}^N \\left[ \\log(2\\pi e_i^2) + \\frac{(F_i-F_\\mathrm{true})^2}{e_i^2} \\right].\n", + "\\label{_auto4} \\tag{7}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "What we'd like to do is determine $F_\\mathrm{true}$ such that the likelihood is maximized. For this simple problem, the maximization can be computed analytically (i.e. by setting $d\\log\\mathcal{L}/d F_\\mathrm{true} = 0$). This results in the following observed estimate of $F_\\mathrm{true}$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "F_\\mathrm{est} = \\sum_{i=1}^N w_i F_i; \\quad w_i = 1/e_i^2.\n", + "\\label{_auto5} \\tag{8}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Notice that in the special case of all errors $e_i$ being equal, this reduces to" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "F_\\mathrm{est} = \\frac{1}{N} \\sum_{i=1} F_i.\n", + "\\label{_auto6} \\tag{9}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "That is, in agreement with intuition, $F_\\mathrm{est}$ is simply the mean of the observed data when errors are equal.\n", + "\n", + "We can go further and ask what the error of our estimate is. In the frequentist approach, this can be accomplished by fitting a Gaussian approximation to the likelihood curve at maximum; in this simple case this can also be solved analytically (the sum of Gaussians is also a Gaussian). It can be shown that the standard deviation of this Gaussian approximation is" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "\\sigma_\\mathrm{est} = \\sum_{i=1}^N w_i.\n", + "\\label{_auto7} \\tag{10}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "These results are fairly simple calculations; let's evaluate them for our toy dataset:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "w=1./e**2\n", + "print(\"\"\"\n", + "F_true = {0}\n", + "F_est = {1:.0f} +/- {2:.0f} (based on {3} measurements) \"\"\"\\\n", + " .format(F_true, (w * F).sum() / w.sum(), w.sum() ** -0.5, N))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`F_true = 1000` \n", + "`F_est = 998 +/- 4 (based on 50 measurements)` \n", + "\n", + "We find that for 50 measurements of the flux, our estimate has an error of about 0.4% and is consistent with the input value.\n", + "\n", + "\n", + "### Simple Photon Counts: Bayesian Approach\n", + "\n", + "The Bayesian approach, as you might expect, begins and ends with probabilities. Our hypothesis is that the star has a constant flux $F_\\mathrm{true}$. It recognizes that what we fundamentally want to compute is our knowledge of the parameters in question given the data and other information (such as our knowledge of uncertainties for the observed values), i.e. in this case, $p(F_\\mathrm{true} | D,I)$.\n", + "Note that this formulation of the problem is fundamentally contrary to the frequentist philosophy, which says that probabilities have no meaning for model parameters like $F_\\mathrm{true}$. Nevertheless, within the Bayesian philosophy this is perfectly acceptable.\n", + "\n", + "To compute this result, Bayesians next apply Bayes' Theorem ([1](#eq:bayes)).\n", + "If we set the prior $p(F_\\mathrm{true}|I) \\propto 1$ (a flat prior), we find\n", + "$p(F_\\mathrm{true}|D,I) \\propto p(D | F_\\mathrm{true},I) \\equiv \\mathcal{L}(D | F_\\mathrm{true},I)$\n", + "and the Bayesian probability is maximized at precisely the same value as the frequentist result! So despite the philosophical differences, we see that (for this simple problem at least) the Bayesian and frequentist point estimates are equivalent.\n", + "\n", + "### A note about priors\n", + "\n", + "The prior allows inclusion of other information into the computation, which becomes very useful in cases where multiple measurement strategies are being combined to constrain a single model. The necessity to specify a prior, however, is one of the more controversial pieces of Bayesian analysis.\n", + "A frequentist will point out that the prior is problematic when no true prior information is available. Though it might seem straightforward to use a noninformative prior like the flat prior mentioned above, there are some [surprisingly subtleties](http://normaldeviate.wordpress.com/2013/07/13/lost-causes-in-statistics-ii-noninformative- priors/comment-page-1/) involved. It turns out that in many situations, a truly noninformative prior does not exist! Frequentists point out that the subjective choice of a prior which necessarily biases your result has no place in statistical data analysis.\n", + "A Bayesian would counter that frequentism doesn't solve this problem, but simply skirts the question. Frequentism can often be viewed as simply a special case of the Bayesian approach for some (implicit) choice of the prior: a Bayesian would say that it's better to make this implicit choice explicit, even if the choice might include some subjectivity.\n", + "\n", + "### Simple Photon Counts: Bayesian approach in practice\n", + "\n", + "Leaving these philosophical debates aside for the time being, let's address how Bayesian results are generally computed in practice. For a one parameter problem like the one considered here, it's as simple as computing the posterior probability $p(F_\\mathrm{true} | D,I)$ as a function of $F_\\mathrm{true}$: this is the distribution reflecting our knowledge of the parameter $F_\\mathrm{true}$.\n", + "But as the dimension of the model grows, this direct approach becomes increasingly intractable. For this reason, Bayesian calculations often depend on sampling methods such as Markov Chain Monte Carlo (MCMC). For this practical example, let us apply an MCMC approach using Dan Foreman-Mackey's [emcee](http://dan.iel.fm/emcee/current/) package. Keep in mind here that the goal is to generate a set of points drawn from the posterior probability distribution, and to use those points to determine the answer we seek.\n", + "To perform this MCMC, we start by defining Python functions for the prior $p(F_\\mathrm{true} | I)$, the likelihood $p(D | F_\\mathrm{true},I)$, and the posterior $p(F_\\mathrm{true} | D,I)$, noting that none of these need be properly normalized. Our model here is one-dimensional, but to handle multi-dimensional models we'll define the model in terms of an array of parameters $\\boldsymbol{\\alpha}$, which in this case is $\\boldsymbol{\\alpha} = [F_\\mathrm{true}]$" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def log_prior(alpha):\n", + " return 0 # flat prior\n", + "\n", + "def log_likelihood(alpha, F, e):\n", + " return -0.5 * np.sum(np.log(2 * np.pi * e ** 2) \\\n", + " + (F - alpha[0]) ** 2 / e ** 2)\n", + " \n", + "def log_posterior(alpha, F, e):\n", + " return log_prior(alpha) + log_likelihood(alpha, F, e)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we set up the problem, including generating some random starting guesses for the multiple chains of points." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "ndim = 1 # number of parameters in the model\n", + "nwalkers = 50 # number of MCMC walkers\n", + "nburn = 1000 # \"burn-in\" period to let chains stabilize\n", + "nsteps = 2000 # number of MCMC steps to take\n", + "# we'll start at random locations between 0 and 2000\n", + "starting_guesses = 2000 * np.random.rand(nwalkers, ndim)\n", + "sampler = emcee.EnsembleSampler(nwalkers, ndim, log_posterior, args=[F,e])\n", + "sampler.run_mcmc(starting_guesses, nsteps)\n", + "# Shape of sampler.chain = (nwalkers, nsteps, ndim)\n", + "# Flatten the sampler chain and discard burn-in points:\n", + "samples = sampler.chain[:, nburn:, :].reshape((-1, ndim))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If this all worked correctly, the array sample should contain a series of 50,000 points drawn from the posterior. Let's plot them and check. See results in Fig. [fig:flux-bayesian](#fig:flux-bayesian)." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "fig, ax = plt.subplots()\n", + "ax.hist(samples, bins=50, histtype=\"stepfilled\", alpha=0.3, normed=True)\n", + "ax.set_xlabel(r'$F_\\mathrm{est}$')\n", + "ax.set_ylabel(r'$p(F_\\mathrm{est}|D,I)$')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "
    \n", + "\n", + "

    Bayesian posterior pdf (represented by a histogram of MCMC samples) from flux measurements.

    \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "### Best estimates and confidence intervals\n", + "\n", + "The posterior distribution from our Bayesian data analysis is the key quantity that encodes our inference about the values of the model parameters, given the data and the relevant background information. Often, however, we wish to summarize this result with just a few numbers: the best estimate and a measure of its reliability. \n", + "\n", + "There are a few different options for this. The choice of the most appropriate one depends mainly on the shape of the posterior distribution:\n", + "\n", + "*Symmetric posterior pdfs*: Since the probability (density) associated with any particular value of the parameter is a measure of how much we believe that it lies in the neighbourhood of that point, our best estimate is given by the maximum of the posterior pdf. If we denote the quantity of interest by $X$, with a posterior pdf $P =p(X|D,I)$, then the best estimate of its value $X_0$ is given by the condition $dP/dX|_{X=X_0}=0$. Strictly speaking, we should also check the sign of the second derivative to ensure that $X_0$ represents a maximum.\n", + "\n", + "To obtain a measure of the reliability of this best estimate, we need to look at the width or spread of the posterior pdf about $X_0$. When considering the behaviour of any function in the neighbourhood of a particular point, it is often helpful to carry out a Taylor series expansion; this is simply a standard tool for (locally) approximating a complicated function by a low-order polynomial. The linear term is zero at the maximum and the quadratic term is often the dominating one determining the width of the posterior pdf. Ignoring all the higher-order terms we arrive at the Gaussian approximation" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "
    \n", + "\n", + "$$\n", + "\\begin{equation}\n", + "p(X|D,I) \\approx \\frac{1}{\\sigma\\sqrt{2\\pi}} \\exp \\left[ -\\frac{(x-\\mu)^2}{2\\sigma^2} \\right],\n", + "\\label{_auto8} \\tag{11}\n", + "\\end{equation}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where the mean $\\mu = X_0$ and the variance $\\sigma = \\left( - \\left. \\frac{d^2L}{dX^2} \\right|_{X_0} \\right)^{-1/2}$, where $L$ is the logarithm of the posterior $P$. Our inference about the quantity of interest is conveyed very concisely, therefore, by the statement $X = X_0 \\pm \\sigma$, and" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "$$\n", + "p(X_0-\\sigma < X < X_0+\\sigma | D,I) = \\int_{X_0-\\sigma}^{X_0+\\sigma} p(X|D,I) dX \\approx 0.67.\n", + "$$\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "*Asymmetric posterior pdfs*: While the maximum of the posterior ($X_0$) can still be regarded as giving the best estimate, the true value is now more likely to be on one side of this rather than the other. Alternatively one can compute the mean value, $\\langle X \\rangle = \\int X p(X|D,I) dX$, although this tends to overemphasise very long tails. The best option is probably a compromise that can be employed when having access to a large sample from the posterior (as provided by an MCMC), namely to give the median of this ensamble.\n", + "\n", + "Furthermore, the concept of an error-bar does not seem appropriate in this case, as it implicitly entails the idea of symmetry. A good way of expressing the reliability with which a parameter can be inferred, for an asymmetric posterior pdf, is rather through a *confidence interval*. Since the area under the posterior pdf between $X_1$ and $X_2$ is proportional to how much we believe that $X$ lies in that range, the shortest interval that encloses 67% of the area represents a sensible measure of the uncertainty of the estimate. Obviously we can choose to provide some other degree-of-belief that we think is relevant for the case at hand. Assuming that the posterior pdf has been normalized, to have unit area, we need to find $X_1$ and $X_2$ such that:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "$$\n", + "p(X_1 < X < X_2 | D,I) = \\int_{X_1}^{X_2} p(X|D,I) dX \\approx 0.67, \n", + "$$\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where the difference $X_2 - X_1$ is as small as possible. The region $X_1 < X < X_2$ is then called the shortest 67% confidence interval. \n", + "\n", + "*Multimodal posterior pdfs*: We can sometimes obtain posteriors which are multimodal; i.e. contains several disconnected regions with large probabilities. There is no difficulty when one of the maxima is very much larger than the others: we can simply ignore the subsidiary solutions, to a good approximation, and concentrate on the global maximum. The problem arises when there are several maxima of comparable magnitude. What do we now mean by a best estimate, and how should we quantify its reliability? The idea of a best estimate and an error-bar, or even a confidence interval, is merely an attempt to summarize the posterior with just two or three numbers; sometimes this just can’t be done, and so these concepts are not valid. For the bimodal case we might be able to characterize the posterior in terms of a few numbers: two best estimates and their associated error-bars, or disjoint confidence intervals. For a general multimodal pdf, the most honest thing we can do is just display the posterior itself.\n", + "\n", + "### Simple Photon Counts: Best estimates and confidence intervals\n", + "\n", + "To compute these numbers for our example, you would run:" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "sampper=np.percentile(samples, [2.5, 16.5, 50, 83.5, 97.5],axis=0).flatten()\n", + "print(\"\"\"\n", + "F_true = {0}\n", + "Based on {1} measurements the posterior point estimates are:\n", + "...F_est = {2:.0f} +/- {3:.0f}\n", + "or using credible intervals:\n", + "...F_est = {4:.0f} (posterior median) \n", + "...F_est in [{5:.0f}, {6:.0f}] (67% credible interval) \n", + "...F_est in [{7:.0f}, {8:.0f}] (95% credible interval) \"\"\"\\\n", + " .format(F_true, N, np.mean(samples), np.std(samples), \\\n", + " sampper[2], sampper[1], sampper[3], sampper[0], sampper[4]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`F_true = 1000` \n", + "`Based on 50 measurements the posterior point estimates are:` \n", + "`...F_est = 998 +/- 4` \n", + "`or using credible intervals:` \n", + "`...F_est = 998 (posterior median)` \n", + "`...F_est in [993, 1002] (67% credible interval)` \n", + "`...F_est in [989, 1006] (95% credible interval)` \n", + "\n", + "In this particular example, the posterior pdf is actually a Gaussian (since it is constructed as a product of Gaussians), and the mean and variance from the quadratic approximation will agree exactly with the frequentist approach.\n", + "\n", + "From this final result you might come away with the impression that the Bayesian method is unnecessarily complicated, and in this case it certainly is. Using an MCMC sampler to characterize a one-dimensional normal distribution is a bit like using the Death Star to destroy a beach ball, but we did this here because it demonstrates an approach that can scale to complicated posteriors in many, many dimensions, and can provide nice results in more complicated situations where an analytic likelihood approach is not possible.\n", + "\n", + "Furthermore, as data and models grow in complexity, the two approaches can diverge greatly. \n", + "\n", + "\n", + "## Bayesian parameter estimation (multiple parameters, covariance)\n", + "* multidimensional posterior pdf:s\n", + "\n", + "* nuisance parameters (e.g. background subtraction?)\n", + "\n", + "* corner plots, covariance, correlations\n", + "\n", + "* best example?\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "## Bayesian model selection\n", + "* Bayesian evidence\n", + "\n", + "* Occam's razor\n", + "\n", + "* Best example? How many spectral lines are there?" + ] + } + ], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/doc/src/LectureNotes/gaussian.pdf b/doc/src/LectureNotes/gaussian.pdf index 6726dec52b86d852bcda6b26557cbde3fd784352..b58084dc5a5b4c8fe1a335c915dfda3a15aa97b1 100644 GIT binary patch delta 26 icmdnm%(u0fuc3vpg=q`(-dYwzQ$vI82Wy$XFarRF@d?8K delta 26 icmdnm%(u0fuc3vpg=q`(-dYv|BLnm82Wy$XFarRF^$EoQ

    +#{ti&LdXcH86P7mZVU!b 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 z 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 G2DDI9G9%}t!r-m;nPW5 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 diff --git a/doc/src/LectureNotes/_build/.doctrees/chapter8.doctree b/doc/src/LectureNotes/_build/.doctrees/chapter8.doctree index 9daeb94bf7a9c6092493bb529618ccdfd0e9dd98..d11e1ed3ebed35135ed41c477feb34ea69ab9af1 100644 GIT binary patch delta 58141 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 delta 54287 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 diff --git a/doc/src/LectureNotes/_build/.doctrees/chapter9.doctree b/doc/src/LectureNotes/_build/.doctrees/chapter9.doctree index d851430c8903b42906b2613e1bd02ebf5be3014a..69683e397b8a9cb0ba3646426369e805cc0ac4ca 100644 GIT binary patch delta 603 zcmZvay-EW?6h^tL5ez6=g{0bOVPP`P-|o!KZdPp-U%)~PA)Tn0M6fejSPR0n(Pu~_ zLLNW_5$vo}X=iWc#H4Z8a^TMQoqJ}U2Knbf{`>~!;P7D{zQv4UTm+o%5Vk1R(5nQt z+g@vTTE~9XKR9Z)YrbTtwQ$Eqv)MgqG|y^2XWU4cr?Lb?u>zcOXWBGyI<2_W^d7)V zB{1nESB9ZUB?)D5lH>;vc?w5CouaGd+@^-5uy)*l&7C#{GQ zt|&$v9vVzfvaM`9JamE4L6)^5P7Kw?%QGfyh*b_6+X8HXF^OFb$7L7ge%5G}N2d+J zeYhYZmee0mlrG?rf@I0LIrg~7iKbNHyMX705I)M?D&u=nE9IYO4eJ`p1$X!*8(8aB zB@R8T#&B7bgj30I8p94=r%=Nc3uWwRNN_uWWSMbdnbzMEFA1DAh4n35#>7_mji`zj z8m}$)TyePAIc^$A!Bq~u!Ob?13g7pBz;Ys`Ww@IGQ?jQvpR9q0y%nK*x& f9^Q7~eB-~GVy>Vv_P3zTyRBW!Q@Ed}OT)cS-H?~3 diff --git a/doc/src/LectureNotes/_build/.doctrees/environment.pickle b/doc/src/LectureNotes/_build/.doctrees/environment.pickle index a0d0a0bc1b33852c9154269300b3b1969a7c8fd1..633a94b3743f3d23efb8bae2fd108b770fdf0056 100644 GIT binary patch literal 420681 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�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 VSW4AGf0aLWT`B_6^|ijPe*o*gJgEQx diff --git a/doc/src/LectureNotes/_build/.doctrees/testbook/_build/jupyter_execute/chapter2.doctree b/doc/src/LectureNotes/_build/.doctrees/testbook/_build/jupyter_execute/chapter2.doctree index 9cb6b7b93c13f69f28a820bab1570367b11963c7..e79a62e7387125392a5150559d59ed699ef6afab 100644 GIT binary patch delta 154 zcmXAhyA8rH6h#H@OpytY-U6}wetz~QG%SEbnG)e5BSd16NU72@1jArMd5_MydmZ*V z)cG(USNHKxz>o!*1OY}2B83sj0AeVJxv*vE4ym%{A5W!7j3O|`kklxl72hQzrKHIJ hpd}{OPr2#bRu43zWmdTQWqK^P*X8W)+xz6E^$WpwBk}+M delta 154 zcmWlRF%H5o3`GUq!q5{S`2vmXICh+yuy6q+#*T;#JwhceQmIpS4#8n?w)da(-_gdS zjcqwC=WY0f_e7BjrkX?noHb`;W0){X;*^tR0F0H)n5=e>qCRr&Y)DDOYUpQ^A{AMn iM+udcJc?0EadPjBy<}MKVVz&=<8!+X&;5HD=IsyDA0#3G diff --git a/doc/src/LectureNotes/_build/.doctrees/testbook/chapter2.doctree b/doc/src/LectureNotes/_build/.doctrees/testbook/chapter2.doctree index 596968e92e8335ada35500d6e8b9b9dc53a992e5..6d07bc7e607079a92d1f176e535213dd5d7ae136 100644 GIT binary patch delta 149 zcmXAhyA8rX5JUyejO3Jb8}Mp>ce`5*4UiKe2wZ{#3b8~z?!uYziHY7wZ)V$vZ6Ds# zX*w_6r++b$m6{$3z*r+x>CYw2h0|dq6d`e|1|uVjxoZRfp@#)!l)jbl%y5G?u;Yf0 aG%m_UrraD!uj&f7ettaXJASX1Ze4!ayd!e} delta 149 zcmW;DxedZV5I|9Zvqf@BIt_R<$L<`(&;U6hg1{v>pb$&c<1U;To9ydLZ{7NJ>)+#P zJkQ;yya>4^sgl9KxQA<401zs-keU?+LTj2$Opc$X6zYEbNH>z!3IL-?HOtsBqj*+J b{$poVPSFDhdlEa`%Jg_ncl=&2-7^0G+*2c! diff --git a/doc/src/LectureNotes/_build/html/_images/chapter10_11_326.png b/doc/src/LectureNotes/_build/html/_images/chapter10_11_326.png new file mode 100644 index 0000000000000000000000000000000000000000..805fe41b26df2d2c4feff05898eb17068b83f300 GIT binary patch literal 13138 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 literal 0 HcmV?d00001 diff --git a/doc/src/LectureNotes/_build/html/_images/chapter10_11_328.png b/doc/src/LectureNotes/_build/html/_images/chapter10_11_328.png new file mode 100644 index 0000000000000000000000000000000000000000..15cd8bd4a1f0ad7ccb14bbc440884955134a3070 GIT binary patch literal 12990 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 OfFwobU`6lseE$zj1Q&V$ literal 0 HcmV?d00001 diff --git a/doc/src/LectureNotes/_build/html/_images/chapter10_11_687.png b/doc/src/LectureNotes/_build/html/_images/chapter10_11_687.png new file mode 100644 index 0000000000000000000000000000000000000000..69b7bde496bd740360c070ae6bd92a3926d3f0d8 GIT binary patch literal 13512 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 literal 0 HcmV?d00001 diff --git a/doc/src/LectureNotes/_build/html/_images/chapter10_11_688.png b/doc/src/LectureNotes/_build/html/_images/chapter10_11_688.png new file mode 100644 index 0000000000000000000000000000000000000000..a6433f182c7fc5d8c9a6b84c635c377eff04044a GIT binary patch literal 14023 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 HanSz(eT-Ih literal 0 HcmV?d00001 diff --git a/doc/src/LectureNotes/_build/html/_images/chapter10_1_0.png b/doc/src/LectureNotes/_build/html/_images/chapter10_1_0.png new file mode 100644 index 0000000000000000000000000000000000000000..1d4c167046e7763474c37abd23b5ab6a82d162f2 GIT binary patch literal 19858 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 H?8E*A_%o<) literal 0 HcmV?d00001 diff --git a/doc/src/LectureNotes/_build/html/_images/chapter10_1_197.png b/doc/src/LectureNotes/_build/html/_images/chapter10_1_197.png new file mode 100644 index 0000000000000000000000000000000000000000..35d7d55c450be8ebbea85433e7f8fdb87f9cf51b GIT binary patch literal 31357 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 literal 0 HcmV?d00001 diff --git a/doc/src/LectureNotes/_build/html/_images/chapter10_59_2.png b/doc/src/LectureNotes/_build/html/_images/chapter10_59_2.png new file mode 100644 index 0000000000000000000000000000000000000000..bb70c1d74b08172e6aba7091ed4e9a2fb15f71a9 GIT binary patch literal 23442 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 literal 0 HcmV?d00001 diff --git a/doc/src/LectureNotes/_build/html/_images/chapter10_7_413.png b/doc/src/LectureNotes/_build/html/_images/chapter10_7_413.png new file mode 100644 index 0000000000000000000000000000000000000000..93e7d1fc9135e2064a9217bd1ec82b4fc338eefc GIT binary patch literal 13154 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 KRxDxg`Tqgm9wiU} literal 0 HcmV?d00001 diff --git a/doc/src/LectureNotes/_build/html/_images/chapter2_178_0.png b/doc/src/LectureNotes/_build/html/_images/chapter2_178_0.png index 80d8fd1120888e4b16309b60290b1dbd6e3fd02f..e1fe92955b1372f4d38aea8abb355b44046a13c6 100644 GIT binary patch literal 5163 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 ZQ6>fYelLH*Jpv+sv^5N%Wsj^Q{|lkKBoqJu literal 10572 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 diff --git a/doc/src/LectureNotes/_build/html/_images/chapter4_278_2.png b/doc/src/LectureNotes/_build/html/_images/chapter4_278_2.png index a56a44f786d799ad109574c1df0134ff3837804f..2abb9e89de9a668ec7cf1eea78dc2350403ce1fc 100644 GIT binary patch literal 9431 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 bamn^;_EcEs_LeaGw~C{K>mLR7zRCXrYJWPP literal 0 HcmV?d00001 diff --git a/doc/src/LectureNotes/_build/html/_images/chapter6_134_2.png b/doc/src/LectureNotes/_build/html/_images/chapter6_134_2.png new file mode 100644 index 0000000000000000000000000000000000000000..e3bbd68049d827106ee5a162ef13f69dcbe2ce24 GIT binary patch literal 28089 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 literal 0 HcmV?d00001 diff --git a/doc/src/LectureNotes/_build/html/_images/chapter6_138_0.png b/doc/src/LectureNotes/_build/html/_images/chapter6_138_0.png new file mode 100644 index 0000000000000000000000000000000000000000..cae5147e98060873de8b6baf4ec8efe9f3fd7fd7 GIT binary patch literal 26198 zcmb@uby!qw*FKCQp_GWyf+Er#(x5cb4N}q|-OV7~h%`t`Nq3jT(A_n3clUgIK=1dt zpWplaj_;3ej$>xe-uv2DtSipl2A^K|EoY`3W`_t$bl486oD)s+5!X9e#47mwt9Lz&lw5| z{7p@z_yHk2^S77ibOx9n8E5Y@0tW^cL|Lk z@ZtaVX5htBOiawj&sn{Jb5gyW*Q6vQB(KHMUc;`cenAfK_ZRJu6A*=^R#Hi!e)a5& zCg{el;cAx)&i!hK?PC;`kb=TGyavs}L$d#q4P8XWp^1JcN6HdU4?6ohR$Q-$dPqz!$HMF#gRHnt;{ zQFnc!_zfDtJH5-}4LHYoO+*YLiFDx*qw#{5@JQ%CZPxm#$1F~_CudxbddtkFqbcPx zzumZuNb}tY`k}ux8cahlo37B`nJNcWH^^mtBm`Qrbpch=Y;@;~{T@-grixR%CTLoboTDI%m7Hs?+Z4seb2& z-SqTbE~F$*LHPV6F>!p*>xhe^HD=dy%V;`{k0+a>ajYiT)Jl1;sHg&cP;gcq`&N4s zHm1s{QLt%JG-~aG2|1WV;()@Ryr63BiDP!U+Ns3jc4WZA!voIz^3^I!^g5pz^!?~0 z23?1n)N>PIlp6MDD&{J&m`;3qBNDoQGOh(bZ(qAHSxV01a;n$){Vgg!i$5F0HKM1d zM}0gY^CG6Oxj>`VaVx)4rOuI2td~X|CR7veXa*4WH#)WY5dr8!-g)S#^&>p=M$c10?lg z-V5XK<_yAYJVXj~L<>+_)o#s}HFp+J9fce@1dm^exlEwjYxPPupndR`y{zNk;^G3j zS9C^yDVCYf#&>jx!tGYC5oJmx#xGR^@@is{+#JmnQBlF|jc3*Eilm%z-pb#esmAha zX$A%zVpI9JX2Pg{r`gR#B!#Re(60|HZ%)SLQ{I2g6P~&}+3Jj;Cx$Z_%UifuO9pS) zF4}U&y)(myd;IwE3O?R9v!1n?Py`k@iD1Km`; zRZv^Ck(sdX$i4h7kNyhIq=mtn7G96l9<>FosU$B?cpS=3SWO<7C7mqg?93TLz=r6G zm-+K2sr}BB&+tai)G8FH^3jj2?ihLtwV1d#W3|3peAo=DJ7_1c-5Bx#q@H-V(p_pa zNCNl!_ixi_KFfJHSy@?irrE=;niH;#W!rydLRJRDH$cbhQ_U<9)m4R}Z;a$4<_ zj~}kYXc^Qa0)vbBXssX2BFV(eyfK_5Jr-OCq+qmNmjOCjxLBu+ZqtN}#K{jfCyJAJ zT$q46pDIi{m%{j@LhxB9Y8`<3iqzWgWGm(4!)87(3BCRN)?%^wblXvPtCrBaqNroi z-BEDpmPc~rVM|J}E_kTM&P3B`2GyYCLw!SH;D}Ukj!XTuvtqCyTV06i94j<=BdHVv zfraCp`HU#ANT^m>zCPI+=i57CQTYTYL{Ftk^Vt&j0>ktD1ymyLSgyS~teEaLcnogK zxi#uHFirYSvm1n$iel^!Obw6$QDk)p^l_jmc%V%qO3^EC6{l`+qzfQ^iYe=1_JPU?N1 za3CWXmc@k8W!-<~REPVuz!P#`%4=~v*f1z&WHpiaQpW0KWos?Fb&PtT_x*pU+RO#mV|=Z7{6?$A6K~$Qi3&Z(HFFG?9}vY zxJO5DprP==&f4e&@_5zJZkv1#rG{%CR;AAIJ#fG?(gD^&r9||aHBZ&vZLf~*5?`cm z;t1tW7p8Wjj`+6sci-#XZxx*GOz|K9EtR9#_HSz*6H|yO$G!p!c&DkIR6A%YpDwisBYNi-~5U ze+Ps84tK|Xs<>5c{R97HNNus^+nQrD3CF5o2RcV5_dc5sL0d*p86FxGrXgl0hkZHw zn?pm7FW3FE6M2XjjgtZU9hUYMxAYb~hjaxI#-QBbmW7n@3BMerMk+W0-q}{9o2-X2 zwL+4Yppl@T^_{BI8_LkPLw!~>8t7kGv-x8Tue-b(1YotuwU6WC9M7_C z`_BDohmt7wmSuEPIm7*G3Qi$kK0tczli(TtP3bM&ny}2*-xrS7Mk1P^>o+yCyxv|e zVM8l%*nfmY%qKOQd1|ATNET4$Ttw6lffCIUV7w(^`teS~;zapmh2%g@U>(pQx-(T) zb=Qa8sD$j_td`n~0fQH`b4x#3b@9dCe766#UgUua=NcD&(#cnc+WKH;v)3XK(hrJk zw%nh*=#^H9jre^~JYp>4gF~FWcvho@%DSnfw-(Je0o8(3R=ph_A52l~3vvs(GG9I7 zAUIzw?X5N^rA) zI$2t)g)IowaiFr;`yzWXg-Sfj)unUGrFd3m>!ZCXUsE!O2>$b6n&gZ-n6-k*yfUWJ zmv&`+Pyx<Ra5 z=viLbuHoJyzL-RKQYwPDaU14v1=ZEhMhVorUHDLSTYrs<<|(&@h2Pk)ZYt`mt@2GY zt{qofOnt#GD+o_l4?@~JyvRFoE!`%czMP((ZK}g)TpW3f6Rpo^-$ba?2U(A)(fXo^ z+IWKyuZ7PK7}t!_yceW!0LD?b3E3mP8WN{xv|1DdDJ;;p;ZVPqt3YuWN_~FVCX5+D z&tx*2dIO%^@9oQ50Vg#?*lF!FEge|1Y>;{-#djuWNhdXD8XY_&eaVgmI&8*T4hkV7 z1O3dOsV$^k&TZpMvf+~C99is0eLm(|eDZztM2_N9$t$s|FhJQ6vr9Ep8R;B~Om@{@ zEt)pOL)}8xaOjjgcD<&U%hp6<=jLnCR9*QA#l$F8yMdqOeqtdB3Bj=%0VL@n_gM?o z?y$2uuW}Rng@f2gIt_16gd;}Bb)MklePj$?g)sTG^-onZZ8*@{HP4qo+7pZR8t8N= z7>jWB^?`oi_p&{SamAsAH_Oyd1td(5AylQ;>4ofeG*Nh0bB1HL7!%N~4`Z|k8rSln zKlD1Uv<7Z2ZzUYHIpNn%vW#+m-=gdiQ+-N%C59Ag2sDP<>T-f_Yv!zryWvwACHP2O z3s1V4{kX8ZI9pXI;h=-EmUR=+u=`Va8e?tbIAE8_eG#p2bTfE4>MzecB=*%~m@xii$kUbbX3rBwvK0=V@ouAI^sJ(y_#&!Jk$%fwOj=;f$O2!OT$Re#yp^=KPpl7B zsPK&AKnFC*PsXFt9VgRl2^?{B8y%AjFh-Wf##kM79QT9qI9$&k2?Z|qf1>-u5*-=I zGSq*0O-|Z+a5{m+AQ_Z(=`OLkk=Gx-Ebn@Bg05a5!A%rF-*_JPOHurS)i>zv#=KRa z9v}9zMb|aYGW9+LdE%o)6r!Z33TvJ%E)kS+X)i=r!k$tM{(KyiJ2GlzA7f z%zy#nIHRdVHzB%$ze1;IxAN>jTp-)!Y!`-}085_1`PgXA{mKjx756=C(9PA?^8MP6 zc~@`~(ly#8Q<6vTGhOFKJLX=AhWPSwtDqNWE~Tc2OvlNowe#PFV5-HkXomC z-v`HESYkCp5KB$F*z!JA1q@0{H%2NpWH&&~*%Wi5(-bHnK85`*3j-?NPKK_N4QVem{20VCC6!icxxL zL6R!?VUs0~Khf6^5svq4UE~Kh=8W5K^3Y7C!)lH?_Eq=aBtHlzTp|~44CNN4hPV$5 zT%61C?dHrPX_O-cKtv}3X7mkMB2tVcdn}rSP-JaPZNiC&)_q?2Y)cK*BwTmmdVDl= z+ZXgXOJEJuoBn5-PUVSvM~zTifjM=FwvTO2zd$xbE_x5mrpA7%6h9ovR}QE-q0;B6 zghmXjmRY_jwvw$o`=CsS?xj(SemGYp4UaqM!)3)1g-PG5-{kM&R@g=?f_M6xTp{~Y zU_)U=24KXL)l^pOsav`zZq8`3ZdLd5FukVeLjXs};m+9+()T(A?)x*GLhb!iF+wwR zdJnldZmnv@*Fk+uaC^KLnDt=p9&asSZD&b$m1>_!0UYgkvcj?p3?7JkEE3{e$OfZR z`jV(z=nquO);0UZ4oczEhm!}f0h-P%t}8*!D)UoOT}bLBP?0;n%I9G{!=TzpaCONz-;nYbv= z((Vl%WWHxpd-V=meMdN5Ex)^>9^1ZnxH&xg=DMa)(xv;-OpCQ^_hh=kI-P(j5C*K+ zyv><$Im2Q9e+b<}lWM}u@~fbKfvp6Yc-G82Y~xLH53Slwe58^{ZAo4LV20y9v5u~< z%zs}>SJefe63OfL_gN3-F#_qspQij9P~|ia!BROT|G{Z!soY}gf>gjIYwSNr4sa3t z2a-!C)_@iK_(2!U8|xo3KIG;N-2NZncLqa||8qYF@TdammfilOZ@)YBhWqQ{y~ARr zwgN(TwR;+gm%4`2g9?a_Z1zc4<#w7_CCNh#ACHf0E%3mB63d-*KoL1R!T^TEWi%@g zYM#6n;;VsG_}N2#uKHKN9}Y*m`|RqZ{~*3UjpzPzK8Ongf`BaUG2^<3@_)8aceC;i zyB_lX5x_mN<@W%*J3uKVBdlb=@m=OU7X5zq7Xja_{{k8+I+yhaiQXOl!L|7c@J{^ybc61fvDp7hUK0O+?SD(L?sX)&tiXC%@0Rv0>3&t}NYwskKL0*L`cmuH z*ANoqFpp>Ysq)etI1Z}^>3-UxT8t|bCvH2;~;29=DIlhmT_|`mUnZ2py(aJI^w>gEokJp%6dO%8xWszFySPMyR^ad-@Nc@eYIXf!FV`aym5b%KJ3q>&)nkAH##1wEnumyY0v0Q~9L|VzlU9`vE8)k)}((KskXVS(x?1 zBF7r|VU)u9J?#M(q8Yp*TLa6aPXap={ktPpL2+;DY@H~Bamc*oe|k567dx%8ztJnP z4iyV~t$j?4BNg=t-5?A-N%tn1fwsj0^cDMu$d=G)HyMTULF3$Ryb{tUHwkeD znAi(f&;~8ZFEhKX3oOVeY}wZ75wsA*{?3DONzIQ+mU2HM_kL^UIz38gv|hsp3IDRt zFsPwtzH9_D4byU)Lk{LozMV`x^2#SbE6CH6y*@sG6!~=4M4g}hp?d7%wI6tf|O|x)Uihc4k6wEJRcYCgPs*yQHPeGigYVlkXRYPTM z4Hhv%ZJUS)(qPT}g66Rkr2#O}=E&2Bp=2Kx(hQ?f+5~F4U(MPX%tl4Isiwa1bM4OM zLkgRoS9tQA=3!VPYTL)F%DI@X1JV*HYdD0Z*Rwu5Csk=B%>~Icp+tv?aAWk9`!%mw z+aTpPXHukU&pWU!zNR&t@xD>33m-(>arQati@-yzp$}mV;$hjsM}I&05&d2M{^E&> z-cMCi)t!~)!FdkGBvB@_1Mmyh4$BY1Q*lhdle8|vjJF#KzIMEwmv7@(HlHChoj7=7 zB|<)*!;|BUU62ZWWY2b$uWD?m`YaNG`UITp)cB-LU`iDXRg9voxH0Gr!5QMf2=6GSICk(|!NvR|K` zNz-W7#R5UA!73|V-rMsf!Z3^3nyA{{njoe8PX`maVd3AcZ`r`~@OYwGf)&T{XPlCo z{R-o7(X(eKUXewoxbo02k6W4@5KWjJuGnJ0=4tqM^ahP}?ai&YV>j~e*t5S?4^tCl z>zVv%^<);Dk)Stk9qGKI?LzxO6-UFVJem#h;UD(S4uM6_%Pxp1_98QgNcZpnG|b$g z+|)JYTCx~dO$Vny}SmMsj3S~`c6Vzt-dx9{Xj z{u)P5^0l;2wcj>$DCqyH9W?tP;_CCF2@$Gav!oO0>1Qh-mMI)c*jeXv1n8F(APz8N zJ1nUV_}x|Y=Ny;NfRJMgEUfbFwLmO`_QRXYldJBX%Z%5@fCP&T`-z@CduD1Z4A;T{ zn65s2zpSKuus)xiGIxU`UXwKn>5atMZO~=MBHQg9(-MpO`b50e$^&g}V)!g-_n$KF z4F~A?cVdLg8umTgpbN^)#hY=>+WTU~J*l(tJSg^+E6)=$-0fMb%!TjYO)(RRNlMyk zZPH_?e{oXC4dGZMVoPCz=G&tl#^GW25~Gu^9(!~~G0#4y#N*a@gRq2lJ7cwa!|Oz9 zcwPI>nL>><`1f1a1IPror!?4b{$ue(#h5@TI1QNY$S8hW78r(GUoa}mj$9~kep=SG zSxonrIfuTzYFHK&PNs}l_53(Wv&nX%7Zt}g8E$u72<7w2(M_BgAMWl&^D4!Bl1IcW0@cdW!w!0$d_WC371TFWAtJL$J9^+Y5eSwi9#J5nc?l z6>QY%$0-z;K?BtezmU6BII`RIoZ*|Pt)Le&=MFB5h`;+90_`EFWDLZNNLFK0%YS{dfS<%q;#Hiskg^X88} ztiQaPRQzRJWLPUSv@tPG!&-fsHz6O|#MSR8%J=drh8bAXSCKC#;A!8!^>Mp8T{-8f zRoeohzpY>};GZESwFJh$S{y9i4q#!KN^^~|JXHZ8BHv#NYT@J(vI#JqtBd2XS!FO9 zNCDO7E4ol=dgD);O~M_KdxGH)-lmvPzFJ&fD+jqzj^q}8b#eKw8@Qb= zi8>c=rcttSv=I%WD^g=S&m3^(ktusL1A#P$!!zhcc9t%=;#3#n#JQGE{ANnMW<}g_ z!50+NoWkO-u`?E4FrS`ZDGi%(=k>;jI#S1+AtiEktNq1~{t zWajKGU-!eyHl{6aA&zvfvdI(i%v&~nA;T$os8>9~3v!W|Ku=~kZzr(u41J2{MQ^be z8Hz~OpsuMqpaDAdZWbkeEIdtwq_i!`l1ADreq>a=H0MNeKeLO9Z0uumX>yQGY8P-Q2o#F7hvZlxXFl|j9E6VoTQnuik);x#Ug-a zS-t5p#Rs20!M^>1tWiLxC_tg2{>xW}p(+wB_49n8@4yOGr1^eKLfy<$eB05hYV6YL+$AqRM+eAV`H}#{2?j}Bp{_QUQR`G^=s>k_wdMA#F%_loLa0gd5-jut(_;=JIKI^LnqQ!TW#^b|??2&tW( zrbpIa#|mr?oBhJ8n9;go&JInXwugx?pfgSjJz7sc==~I$EFrr|5+$eWJDa%nS)kFt zml7sZ_+@n1GrS=vc+M9ZBzcDUUHzs4spiyXzwOt+g~zot1sJ{Iy!O~@CHJ95M3c<5 z6Z364cp(GIj&~66*Cx*sNoUNs34f)p-GYILmBob%jrQZf;vUI0JKVG+hZBHUJ;Opn z;XT|xV8?(Iu&I=jIrd?K!w69E@Y_M+%H(xtl9pU3h{NP0(h{A-c5qaqNjtiO^3>)Le_H92>MiXY~0Y99~Bvx;hM9#-U{KK*;-=ZAfY31kJ5X!hs*#7 zGp&>c3JVnR76T4TLx3B$Jz44pur^`#Tl_KQ9ooHK*%iXGXbzI@x{lqW0x)#gi#dP;muOMgA`b=u658{wB? zxyqprd?k`P-T9)4*K)c$`l1%Q>%<5C-*E+X=Z--m3h>Gm=eY`uFo}C1xy2Po^Pzxu z-ieAap6e!i>4MQN`3NLqM08?VI6SW}1kSke@~)YLjR2ZePcmO}Q4s^D!>+`5fd(*- zQ;df*Rbm8eWPp_@4tv?Y7FVRAu!A*M)fO}$4vG0~iHmI(uln4-6dA)Si|FidtX68* zoisSjht|BIc@doKm1WYy4PGI4xgJ+MIvjwHLv`f9_k)jrXNQGjh>2~maDeODIM|us zHRSK_!R9A;u;4A~eAcxu4HqLr(Tjg1F3?dzgW7VIrfJpoq7Hg{1tUcL_CYbs2i8s~ zRru#({pq;e+XX%UpmP5JUU{-n1U7ZU!GdZe4*{|LK0zd4F3oE@meg9zvoxI>qjyC= zNusZ8dnQp~#$|&iA;sh$Qtsb}-PnyVuCbQt#HaZVf9O zL4+(-ZFAo^exPbx`C3tpR&u+?du5_YqQV={TLZO&=r4E3##WAeDCP3Zdaba9NZ)8` zQ(}?4hjNkDwlE_H)}@a4VLDK$g_@JKlzeIRsFKZ67uV9n4Fg(96&#ETQHil=KufoN zTiDq04b(}Gm#SIsEL&h^sjDljhS-tyEsR##Z> zvv@ywQQ}wt;-tq2Zr}MT_m)=EkuGG1ix8E7sLlI;t}D8H-PVF^)}{S(9AZEK(dFrZ zom;u_&g!z5m-(zNLp|aPD#wirM`w@p8g~91lb#|^%Wt7;^P>Rg#GN@4TD;XdLf>pN#h_yzL*g{8v-lE5O>P_@qDoR~3IxAo@o?M{0s8L$aM|AL zTB-X||N2({@hjiuJn>(O?SFI%jQ+FzM|1AU|F63Jy^Mi3;g`k$QGYA^RJS=BzoGTn z?hnZIGpTNRFg+}K|5%^S`N7_v8bIv?SWxKz(ZKck0L(!I1qhiNGu6xh$8~YRk9ZXr zD{HfvcRpL|Nf=`dV5Gq)wKOV49sm{cV5_jvfX7@FJB;s^eYVCj z`|s&Xk9w9nBk=xhz4~DglkxKMnsB^+{k1oN&5(9)wl)S}Gamj%p)WF%vX+&UB&)i1EQp!jWuQR6Hi{ z*8;xRE4TM{qz6YW%C>qS4t*bBz$Tafh>R5E=jR`@c6H?jfaV)UMobTE+D`)jvGd4W z`Oeg8?PIz=J7XKok@qV%8Mi)OmmL}!QfY8?8gqQ*0mv>XT_mi;?aCfbsX)DxbzI$M zZinj5ryWzT(-t^bsKrO*IR9YAoNZ^iG7F$!!noMHZkI5MGhjNmcszg?6&FtjNN=bw zIgjh6S!ueT)Le+V=f)`fKcR-Q_6wH(DTdAOGmQ`nP$;_-Bs&A;4|(Q@r`x_|vSTZO2` z9@W~}T>p(~ws?y7c%}Oj>bjvU1A1sy zQwk>HG>Fwd)U!g8cDI(gsvu=+%!hHIMRX=krlGD={${wtLFxKv&8O7z!=vzUnTkBI zJ@O&{pd+3NOKtXKx{z1QSX2tfha>k^6?(PhCjJ$Y`!u}9W%Hrp*Mb13kM(xS`3sn} zw{C^Y(Au2+flNFr4rWO$x?PoRoFshyjq3IIjl`-XLyi^!BKnyI=PmQtD>8g+$#-$L z1)XeLXbqpR{6*<{4wevG{Dcp>npk+_zkdw)PDUIWRuXk_fJ9zuAk4H)i?bIdz0#h* z9ZZOc*2JdeS8VD2NWd@aaG_O!i3xSpJxxib2p}36^(XNVa@rz$04RO`a;vb^bdm{R z8KuQGz)i9FkyRqpklo^R6?-iz!|Xp+2%fqcURTs9t%Ipq@v%5OwVK>oOd?{r$*1Si z`?L^Q$YL(*w~bStv65n+;m4Q@GEjq{m0ZuYTV{er2f5u&%Kc%X6oNP$KIK<^*OmVL9@m)N~K z3uCyi2|ZqwbIB>(gN#CuDu}*5y>D0p=;+fm61u>FH?#7M&VeP>=&Mm7r8AXsD(vA^ z&I!;!nx0iGGzVs5k+hvnEUqAqlYi1P_>Gf``uq1Q6~tIV-tAYf)vgZ?unQF6V}kN_ zi>VardXkBoQ@s$|0@Yk^RoTreKYR>qZg4{nC1!Knox}|#WE7P+9@-f^h7+=}@)^o2 zK6>Xp2ZFl!qQCqI>=8HzxXu&RHsoCP+w-uc6|lMB6tZQ$;xQZiupt0!4E@OxeNuAr z;WQzXv3xZVfMooV(>4Wg(tH>Opl+u)4VHB`guUeC#Yi2xGq>KLp$EKQ3mba&`yWD% zxW{|ijMo}or(x_ApKv#4J|DF7H%DNW^jQ`66M=MC=`py!HB-}r=PlnyWX83&$9emF z9fv1i^F5e)1sGQhwxTQ%WP(HK%D$k7-+~tF&{D52j%=pQDlxIKh57j(vYL#Q@ibUK z8uAbas{u;0px`5*o6=0i3j~FQ4R}^hoau`;Nk|SYA}J6PD)FxAy=>U=7IkQK()uIC z?3&TWRcA(Llvib*1;-i5yy}aQbuOtDYG#M%5=*dBsBt>V0W^H<>54?-s<-5Lt?i!# z4TB&no?phDjHY@L6<5i~u`*p1u<1=H6|Dy4Pva14IJE&sV2AwwogXnUV>&EmT4N9c?mM(QT_*^Nm-o z-KE%gEOmcOw@Xg;s7*C@(60}r)3h+tjRlu$(4kp^_lZpmK1(ByBR)T?#eR`lLWJ9u zYs~Mqpf}m_VBYpM(Gst$%au1Lw%5cULa`P^B2@UzQHRnmitKoJ4ckMT7A@HdVp_Xi zy-v*h0=}rtJN8GtY!I13O`cy0IsAYu{rl$hc*Dq(96bTI4SLpaTsa*Hi6^kl!UiCw zYpV1L2`+0<${}ll`hM$`-cojM`W?;s@O!kdR7(=NSO$%&uBHb zw@kKeYaxr(Y=mX*9c)cC%F02lR1eTMi76C1(m+sKO#<8yF#Ow(@!VJH_+0kvxQyKK zXW%Tk%ser$3-kIcGjZnQaWdx(fL(%~t!TnVE{)GU$3vWnL#4p5aqIXAu<1lSvv{rw z@uKYtH06>3F_!@D^1MbspOu23?jK|5de@RcyM@kEv4GOjYa}80s`I}nt;2NTb2F{R zGq)j&t1g&$05(X5>0}AZmk|n+L|{kAT3=#JnGWDVc=qabBxX&@6>=M3LjYc`APtyL z1+#HT+7z(H{3R)7MMU|EUjr%sGMWF;TK_Vqr0)C?|HP8hH;#Zu{^0?X2EQL~vba-W zfbP6E+KlfG{}Z|Xm;2$r)Exn^69%Z&U*AsR-@x_1g5&mgy7_AGu^I{!WG;BV%V6lk6IQsa;Qzt$Kn8vB21<-LFD-j?|P zCa?c85B}lB|NmAxz;O2|nVXB!F3M}mtqp+l*Mf>w&1@4u7 zoso~j9cK_%x?DDn6gU|T>!ISSex~ENjuaqS!W~#IMEI{7Ox=9hI)bPWw7Aq2IpBKBv<;G}@E6OKqMQ(Mc@4 zXiuOnJJ*dRy%r2QxVDU@*{_G{cg1tht@T_%a?E%GTa&A;%WAnI5FH$^ahrWmRwf?Y z&Nv1VXT4oGQF%^_K_K+I7bDiE{`=f~SMQj`LDf-1}kaxcU0XJ*wa+HJQ zGn3|#!G;)%4OAeA4i90*J5LJW!iw%iO%nFl^6oTDmp3|ceL&Q@#b#a-lpoZt* z+g4I3HL!Z|ko(wPyWrQ0&MpiofGI7>nGpTc>TC;P<5EhS8?VUfEA`V<^>0{Uv^gT8 zwxhzI2fHFU&*`<9E(Bbt?T^BwR{H`!4=~`QLmaGHLWt(@@bsyf9h4q5nieO&_i7GU zVlZ$d?XUaZ$3OZG^ZelO_-6u4rF(shm|j25(b z@zuDFZ}RLGWP5rA^@@--5Z-UM#L?xov}%zgY7gFTYuv-|x-Mo|g;yTaDq?xW&tdOz zj72mS$|G8Tn_7+%N z`~_8fB+X7xzOgu4u9Elk928>DSykX0la|$ZF{eJ>;%lc}HQNBLyk6HEc97aNT{wkp zOdw|Som^}z%}6Lz_FnOC{8VvnGJdi@%W0@|&6gb7DE73yal-}3J1&y*C8$)%yn%D; z25J}MwK=(17_oB$sTd7tF+S+Q8a#F;^~IAX*>{G=?BoMXUU;0A9($0__Hdq!ZpXh5L2|?KDbppYGY|5|UBU6}eY=P6a(l66lc!c~ z{gzzn2i#{Mq!3f{WX+D{@e>@Lqh|W&7{+v7wm7P@y1)vdQasQcE`Ti**u2?~#%=B; zPiZOH%RJ3#jok3VV!sJ1GdaD=l02fW6`RLqza87|+eS%;M5%x9!OMNjL3I3+V0~w( zu3#HSkwlObl=4wi@r|ZBxx{Ln^$&TG`p5$O=6sDqB+_Vj5nuz83w-5Y`LG*kW;H7u$af>DlVZ=C{P0hxx6{OtnW!0;eTM&hw^|{^# zE#o)FWE{1WE^5Wmy3@om(0RrnW|eZ|E=gOKFZxPV}*zR$Kk=dr;HrhMi*t-mP7Tv`MEo&Iv>T!k^Zu_&fP z1u6P*2!sN~LmL-YN`=Rn&t*I*ttaFnfM+)QiF3?{%yun0CxPtG&7Lsl17O-?;jC>b zXjYoPWCMck8FMEPgScf*<$-Y8ZY@TDhG22fXMzq`SnrBEa7-|xcj_7qae`e&KeQ-e zkB>Gik2V<5pfFfB!1*rq)coWj8tbzi)K}Mj5{0b0M1q5Yl(j!U?X&Ovxj!tf?4^uH zk)@Y@y4<<_CMCXo(24GIoIY;wgT0Q^w%vF^`j^BV%e~5JR_ybkWac`$w5Uj^1kc-A z!VG1qL@kpzXsFL}N+y>IJAdB-LK6K zwA6aL>l2xsmR5{VkyvVm&u;yERA(k<+y^a&c_Z46TD;O20RYod&384~?*_h2XpZI( zF=D)Yq7x)i4&~;@$5vrkkZ;>bJb@s3vPDfp*8=4tB&J6;Yf~TpTuF6$gT4%3i66%v#0a(S*FBC z#mD{lgl=v}MzEyu5i=4Rb4$h`^*f{eck|h>(ZtH zkie>Xe(DPmKAW9k)WvzaDEdnVcH5@r)-%^7s?e9L43d_H{CioRx=pr&kAf1X`|8H4 z+mcs3O@295r{|F8_8f=J&p+@IKtd&}U%SF~z0Uq>j1R;~oDs#Y4<3_oRX{_|pfym7 zy}2cqJSbl%A0L-?eDAiPtNcMZdf$p`pOaLSg&0Q<h#uiyL|l0O(WU1 z+toYQc3V3IU4g@t)i~d$WwvJ=#HjG*Q|0-z zx~8N!qUZ_}W|n2I`z085uTY+#(!Nf9I_`1}F}pe5xpvG*>L1w9l3#HUXLP!9=_vJ1 zFgI5C2yWoCaOShrm5A%f(`sx0HUsCk1>u+s{S@n>_#DyUFlxU!elyg$RIp>VMfgh= z65I2G=dC2(MrIIzh_otOQ#pHoShN4!Yy2Kvw=}Rn&Wxh*j8yD}i8JNt`}n@r8u!kf zNlV$NO?(^)M96Nc?iJnEZ@h7kBOfS=3i8>(>8d8@V~frdRR7nIT%t8+;^j)Nf{y|n zw>&AUiQ#&a^lo5?)mwOiF~?u#@JpWk!&!vR+TN9N?!?fHpt_MNp?Lnio{_q@ILD`^ z<0P9EFNa35Rh?7CJV|qecTitmchcrU3C10NNul3>tONt{ZlPy^w~dvgLYSo*LD|!` zqRK4>#y(_^zyFLs(_3!}+vU78aII# zWU6nyxE1Rn{X%!S3+u(PR%|(=!lQH2x%#QAepPPVbl^x~X<^&27plK7@B~1MG4NJ| zcs7eUK3?$Yo2Wwul9+XipD&JPB9rJ4qM|Oj6LMOyhCGqkLK0RkR~qfg1=Pl?#=I38 zy6vv&lo>aC8q8}fHL2X%G$NvQt!Md@$I;d464urte+tyfoirlgM27E1YWderVbEvT zkTX5!xT$lNK8hiAtECfyD5hKhjruLv_rA241H=T-i_1M0Z%ttb8 zyy2y1p*t{1N|yg_?{;&wbF?8Rs+#2+Qj?8kWgdT^WL3{IZHF{7rI_>ynv?Y-4t>_j zp@s;=q}W#AEckm7LG$BB>*eX4BfN{_y75^psQZ;`jlgSt=97_ZaZbFo%s7h|@~x)h z8Vp;dm-N81zL#qQ&@dcFN=mT{>#I6L-Z{-fkXEhvYia42u4ub2=Qafg$)^TZlF3W> zP}W@Ta`SSN>%BTI4S2trOVGym7e390NO5_UImXc|E; zhF4JVE)7n_5_vW+>y)#%(!XHDFiPaFL=`)L;@8&dk~Rh2NYsuc8MjE(DoII5dmr+< zlk)orxxf9-pAYV2{1oSh)RJyPCZxQ#VQj&F`<$oYZS3k>F|mPRHe6#&7R4Ztta zTRaP_yvJSCg+_q$8|2i-&ys)w2e-WmIJ^O3`v5>^SYBDlFrTf-0lvQ!I#me8BqTPO5Jn0gZbyZ{rQ@xlhT?rby&<`-DTUIRf}-VC~OK#(2r8K)_}` z0=)Nu)v%8c0RiDg{~2jG@&h;z{#WemD!_b`2b`Uw8R9s0>jNKvkfuEJ_NE-*zJOdc zGuwf-eE8sIstmA~MvHYtS{kZt)(lLP8(c5cc?3k$NPyx^g9D$!!7)&!yhy!%FN6#S zH-Y^E)*wOH|CIGNFgaGVjo<=lD6%X2*N~`y*UdClWCK-zdjtCqCq#Vrz`W&D7U|tn ze{#@E_I!GGM@s=F)Cc{rtco7oJ?{@I^!=a+tPtEHVc@q3@n2a60QZY%?^^I6C<7?V zG(|?qTN5qc#11*y%3z8@vcH+>EKtesGiBws_qhT^kw+tVz#+J$e|+;P&5DFrG3O(b zxACq#1UJ7@Ngk!h6xlp`^a}dC3s!OmU*3OIro%Y-`+ZH-?rUlS)ECaw<4!PlLXtU_ zg{4OfmB@X=fN|HT`=pq6NdtNB#(2J+e7U!}o2j;U8>8t?!Ox|1lRT+$EwWjbU$C!C^xcqA`sLgi zctWeIc!${rX}tr3(Z_td(B9&R>p3rzM3N>EXC0rCyog&`$Z(^Po6k8}NF6iz$gxp|&UmT1)%pld$ z-8MWP3r`L;x#;QrPHK_-4FA+#S}~iD#4kZWjW=|tWP_j=mDtH6rPHUAK*Id?v+?3rT?9)6^XZ1GyamccNxvE#_|mId$Vbo0 z&8y9sEk9ytd~Eo6JDM~qAJV=#_l{Kocu&O3n~kcZDhJy!le5+Osmp^<{)k5xu%fmf z;6poDPI7sNSWlM<8BYn4=p%JOtXk0T_`KB#nr=D`mk>5t^3Wuu^A7aMDa9%t(L#D> z{*Wm}=533C%wL=*U-H(7U6kR~q@$G?rR_F`NAmV9VlD89(Lh;+?Psw$?&TuXyP}@I zwQi*=>|fk!C}E8UD=hV$;hypxnu=7rRBZ%Y>YfPR;3(#KXAu!$8YrE!wT?Ib^p$oJ zEac^tzDbZC2uS~bD!b08CbMphQl*P12r(*MT4EVR zL5c{{2|d(MLotxp02PoLKB9%s@ZCMxa*^AnY>vt)S{fH4{rVHKIT4^5t3|N1+kv56O7Y`SBZ?t{ug&$(JX%b!V0LV|syM%W#JEftrYl3-pK4&6sy}Lf zWX;VQ2(9eiwX41@&t?&PfXIFCd-h+YzSwW0ZHGPe zF~$gGb=PA(^h{y2{OyM-%p1gSy@Su+&N0x>DezT0?eekioKJz9A;^C$meGj%e?pLw&<`s z+7%QX(23FitS2eaO zxwB`*pPj_Zb#^*!IQ7Fbe89(=Y` z$AO07a=idEX`wj}ABEv_J_k(BWOf-lJIgu6M6H!XP)>fEGlIFm-p|5d#@&b37xNQ=P3DRg(ALk9raVO%n5K$ z-|soSTEV0192$p_z2GF5pIR@NK8hd1R3}c#GfwFTmsT>qsDw*6+2F}5Z3T0jOSSDB zyJqRD1tRG3`|`$Bgg~9fuK^8cl(wO#>C+-odv?8P@qlrOhs5!r!r6ICQsGwu%E$pd zwI+$u639wwHAW_RNNySv%1R}W?`sat=GhGhn2TaM5KD)gkV~iP?Cl1)ZD>y67cqu4 z#9Q;0?`NAt4>(l}muC^a5=w)|^K!a2v{!vgR20J{k{vqy?i!@G)8>SXn&e}L%EfHa z2m6MHiBOd?3MuG3NL-m{n{z>;?XnlDV~AO;=+r2L{r>)YsriK$V?aQ_MHZr0i zOo_Z+;8U45?M_H+u_f#mMpL_R=MxZjuax?cT*W6TvbxPfKBX#*>b+jga#>Hy{5;Sh zW5uKluw8RPEgQMedUyG95wfaG$5}OdU81$B6>Dapqlq&}qLfAUH=A5onq+ba7ur@J zs~CAt{n{5~D{-6rh^c!OZN=#skG%qiG_qE$mxqy}g-cjbce7wYkt}z8RqTpNYnAM% zcM!i<3%R7TsrpiYVo#EC2j_rB)+c0YrwS9&buUG)y??&_9{jPCyQ*_jaLK_LWtqM z*YV2fvTG%4a^7xuWyk3eOwr5api|i`X{(Q=hbgF#4+&3l#G2l9`R0GcJE!~}yCMEA zV`|f8cz?*kP`~qHUthx9jFWqS5A7Q%54Ou+=|^o`pLtAmrr%IiTFf&BD zOH6$M3)!%GJpDN*=Fhh1R%P6zucFJVoZ{4+BPV6uWjFIB)uzjf+LK4_c9wpe_r%mI z1(?WvTJ%8j=E(Bnb;2-4%}q@o5G4&I8{W#0yFLcq7bX1pga@SE-x9=rgUlE{Nf#b5pJyp03(N~Ey z$Km~TsBSkVP_pp32shZNdiy&2r+=)DeQnRg+f1m^^3S*Jvie1O0JbGe|%>laeV6q^`~+C#w+$3h9kW85A?D%hL6U#!8iYLr)^ue{V}>9 z*y?l)_i!mdk)WxOM{wzXEhW9mL_pO$&uP>WXiFOZ*zEn5j?H z2B;YfFPFoI1zDIzO`GVEW3J#amkb1O;r-d`kQ;|4c+Wk@tqz7~5kP5dJSE(+F-G2b zVU$S70QJl$NYS#23*YML{{INXO^`Yo8cijR{an1fVyFzg6u-W{KE_NsTlz6R; zMuW(jUePA7{(9+pDfvbH{r%jB4@Z#sxVVx>Mnl{>s6d2J(jX_3;-+#DyhVrL!2;yNi2m`%B|!M0f?Yn#U7nyP zNb<5|p-Ej~mx;D3e2Q+;6VZz9B*AnCdPX}9&+Jh-wbjAjr)Be`_XmL+zb7%ZE$%vnt`fET@u$6So%Znb7@2u@!0*0& zn4Uy3PkZ66OcJS_=kutG=%QYft(GZ~fPX<2?km$LV)s4?!e5Q6P;$9HEntI}sw%20 zTP_KlP&6v6?0!1EsgRu^>OHZYw7ec9<#+ha-%&pNQs>OoaSEitb26xqG9UD*3#Um2jc%d7RAs*!Q&+I`WN{^lX-Q%Pnd_ykai&%}4FJ&F zSFrQe#ve`1IctB$%JD+|gTU7o(#0^RsKQf$rieZzb`Yytrh=g#+2v%q9# z301~5ynQNZKjM> z$NhJvU!gd#5S)P_u{&UKBdI_-moDhRy=)Lptz{whRaSeEpb>i2a5{dTUBPi7^gUrb zBHQ8#`kklG=VJ&5tFBzyg${?YX3F!pX%&s_X4)=`G^=y366@^17)km^zTSoHp<19& zsE}kZ0i&SX*Z_i{wQn|h^fGT6^0oN@G>Z!bX!Z}Fg^y+w_Z=;`RAWpYGj4q6Q^oDI zP$+2M)p)nLFN4Vjsi}y?K|_Vu2r-nxicJ=JXQv=1r+ZU>t;V-X+|)txNXr>BiuQIh zk-5hwVOO9z`0+}^X(HtjSpe<{h7_REhL+sA-|1#l%kw&EC@NR1|gO!Zhl8Y zu(&VkedYf6DAlN6RN=6XW}fdtApUn$}A zs<~f`Hqo{$7x3Q1Sr*>QM5S>|$*Tftdgq zVWh~36Bogv8@jj@f|6)DqzI1_3Ajd(2d>%mM=J{)NevmaxUoFa(Q)y+gubUvt2Nep zgiz$EOb5>wt0HGU8nd6OgJ5NhrXGsWHz#2thVh)ZF<}z>LOGf~G;7yBnu*;R8fRIe z@&4gpwXoEXON-mZ8UY)t_h+EQqwN0^R$UcVP|W~dP@hdYT;Jihb-{rXGyu)CW0 zOF{Y_oNT4Tdb{v&KPxk9wnJfNv?Aj550IM_SZ$9!SPcu12H(OgH4tVqL5*~IpWY!IJGV@5t zb_{|Y!E41RI?uPkI2mBIQu5_r>kd7#w6RV0Cq!neA)6?|Rx0I0q4Th|_|@F=4<9~U z>+_dfn4(N)fap<_ymPACM4PqRF1&yAhnM|c$Nu=hfA_a4@){v>bDLQO`u^AxS$?B$ zyBSeybD{?ltF7+b;gEM8@m71P%r9YEwM_j`E3Q-NJ@6Qpibv*h!Q{L`jd%YTerXe*!!%r2i(lnw@6}pe z2{V{}Y3;!)G#4%MTz9sw!gVZkJf|i&`1h3L@h>!qYKzgtJ*`*G zO(RMwsqkaItz{JPcqvks4_wzy*ZjooBQZ{#x04V?3_6hlbGrH@R()5{A*^6v(O^%S z9vMHVk>w$-vh-r(vBpj8&c9a1Hoomamq$>jgg_)Q_N7-?NKD2;;cr-rQnLiI=#YM) z$Mn;6{9KHinwnJu)8a`6^PZH@J|3m}xo_MiGf=NirhBi>!RGFJQZpjnm*4YG(4*bL zJ&fCgi{l1*r5%rjP}ZAM`pxZk#RI=6QIc?1ZjpD3E=%H3dTsbIVTTUfrRe?LmQfox zfytE#buC`9LAZWX_AW%-WOsh6+|uSWwC%z>8Z=l}Eii|M_NbeOa?vJL=>(^adqqV|%TY-&<3Yvh(NRYW>6Kph z=5#aV9bt?5j}N-1UGP`T5A?b7cBcZKbWe<{_H*f9g5~npiY(3NLY2yt%x!wyUt=ch z7F*-rBxQ3*S$&%=$4ktXb@R+UtgI0j;hF!y?%Dr**|4-y+;eTxlBaVaY@8oySEHxA z+G6ABUZoL|96L^J%5X=XJ3e<5$eH{TaTbY(Y!_eq5`7_v*BsjGZ&>QELm4q@z1JQ& z_@*jnb4H_UU^sge<6B)@t3?A}VcF6QtG6Kg9Yhsel`K0tHO6eXtmWbPQq(vzo_Nx= zDcJ3<`SJ>R4}O}twvWV^_HXd&-^1L$jp8Wh9K|d7cYElFHH#qFpd_*|h{xZ-@Tc0k z=ai)!nyXmhUmEi0t{bkqTJjsVGo12!M-23HT1gYvnn>j1cTxd{JojN5?*PKXc*aN+ z&;*8?`Z*E5#gOERfA^<;CN92>NGNZ;`<)KiPHf`u$r0XimSohnsEs@pwGlt^!@Uap zPI~+lzYqO9InQ#&_`f3tRy6-XV$c@xa4-MowpV{51=PGpMSt?sN-@7dAD_1R_$_9O zWB4~5X<@N6Tt0%}1HLVa;DK-S>y{7xgN6B|=AXi+O$?x3Kgh=R_wFtFqT>V$6%?s{ zA0*4&ZaethdHl|Ce81Os1jOQ@*r37MQ7Dm5g1X~O*YOt9!doxty%7@fJ{=>jY-~G% zS!V>un?NGBuBPS-dP2kXjrFwySHyvchLD_HgF{etd0&lfu zlr#$DqhsjS5hV2>e%9w936@^!Y{v@ajs%f)q07n?eD}UWpIJKkHnMmE3)5tb2)#LEJ1WFc7P(cPH+Ud+o=PE$a zI|&X2Kof9l>5WZItN|jh?FPkNZqaZnQBhI!X=9QB2;*mQR2XOz_0CTGPzInsk_H%K5UUJJ-w9}Y*z!VAbdT|O#vyFNrnL+r&T z@3^=)kPnZ7sUrf>D=H_~2EPx&ZQ?2%P@w7P=xF47{S8EI=s8walGK$%aKxGm>~y+7 zyxyTLHv#6d4}@V~!8lkrs-#2?GVL|tq=G`a^>NNC`@W>WNdWS^fmv8$lYN_7!!p$H zXX+4Cc;uauMUAp;F6Y@n8o!~#+^%jSk4xh^cc!RhIoz6$?LST99Udvmw%PcV0= zkADc?%4KcA-lFXOm1r5P9_SQgaqKzy%-_EWlnYqI20St*e1W6auV0t8tvPH#^)?BY zv}%C^EmGUb7+4JUP^z{)+k#@0X`Iu-ikU%aMF78YI}F5`vEiW=r(^;rI-s?+TR>eN z>zwpJ5OKHL+zPjv5)u*;3bO;L>>&9+m9HQ+aC|*^QC9drtTT(x2K<}>m0L!>I}WhQ zRnb~nbf8=cmcS5b1u4xvdvYa`2sO2Sfq_Qh5*7nfQzR(t=s0`4FcX#w1|G+;#uR_x z*XiY6?hwywf^q4?QiSX+oi2*Iv8ibkkIe0~odVwVW4Xb;yuiTQyMh&EGrHygR`35d zO+ReeF=Lnx;z_Nj5qLt26u8(vodZMW#5w^Z<7!?a$fe(M6=n;z1G_fhN1;%_s$erE z&3EW7%v#v6ISoQI!jy(9UoqlmQ)LCFN+G{JAwK>XpR%XHAqjJ^SZtpTz#SQl?ma$4 zSogP}iV&8Y^*iYYCmvtk_0}~dHPvBZq`?!SDuWR4t*_Ue?4k9H<+2^q3Es7>ganU( z8Os-dg9(IC2?+^e5x?r*U|mTa8M&pZrp9V)vd%gN0CpU|-+W)0ork?bYiqOl|5)oa Z{0`5C{^vtq>I-c{TCLE;^Y7T literal 0 HcmV?d00001 diff --git a/doc/src/LectureNotes/_build/html/_images/chapter6_138_1.png b/doc/src/LectureNotes/_build/html/_images/chapter6_138_1.png new file mode 100644 index 0000000000000000000000000000000000000000..f889a46a4e9eefb41bb4a7865307d52c6ed3a5ad GIT binary patch literal 27885 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 z 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 literal 0 HcmV?d00001 diff --git a/doc/src/LectureNotes/_build/html/_images/chapter8_77_1.png b/doc/src/LectureNotes/_build/html/_images/chapter8_77_1.png index 50f345c7fb1e04a9736e726513119ab088ecc749..1bc84b6021bb3060d14bc00cd0ada337412c83b3 100644 GIT binary patch literal 27981 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 G?|%T?3u^EH literal 24893 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