5673 lines
692 KiB
Plaintext
5673 lines
692 KiB
Plaintext
{
|
||
"cells": [
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "2f8195a9",
|
||
"metadata": {},
|
||
"source": [
|
||
"<!-- HTML file automatically generated from DocOnce source (https://github.com/doconce/doconce/)\n",
|
||
"doconce format html week42.do.txt --no_mako -->\n",
|
||
"<!-- dom:TITLE: Week 42 Solving differential equations and Convolutional (CNN) -->"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "dfa7bd49",
|
||
"metadata": {},
|
||
"source": [
|
||
"# Week 42 Solving differential equations and Convolutional (CNN)\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: **Oct 21, 2022**\n",
|
||
"\n",
|
||
"Copyright 1999-2022, Morten Hjorth-Jensen. Released under CC Attribution-NonCommercial 4.0 license"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "219b113b",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Plan for week 42\n",
|
||
"\n",
|
||
"* Thursday: Solving differential equations with Neural Networks and intro to **Tensorflow** with examples.\n",
|
||
"\n",
|
||
" * [Video of lecture](https://youtu.be/MdYT6uwOkT0)\n",
|
||
"\n",
|
||
"* Friday: Convolutional Neural Networks.\n",
|
||
"\n",
|
||
" * [Video of lecture](https://youtu.be/3bDkrB-E7cU)\n",
|
||
"\n",
|
||
"* Reading recommendations:\n",
|
||
"\n",
|
||
"a. See lecture notes for week 42 at <https://compphysics.github.io/MachineLearning/doc/web/course.html.>\n",
|
||
"\n",
|
||
"b. For Tensorflow and Keras, see lecture notes from week 41\n",
|
||
"\n",
|
||
"c. For neural networks we recommend Goodfellow et al chapters 6 and 7. For CNNs, see Goodfellow et al chapter 9. See also chapter 11 and 12 on practicalities and applications\n",
|
||
"\n",
|
||
"d. Reading suggestions for implementation of CNNs: [Aurelien Geron's chapter 13](https://github.com/CompPhysics/MachineLearning/blob/master/doc/Textbooks/TensorflowML.pdf).\n",
|
||
"\n",
|
||
"**Excellent lectures on CNNs and Neural Networks.**\n",
|
||
"\n",
|
||
"* [Video on Deep Learning](https://www.youtube.com/playlist?list=PLZHQObOWTQDNU6R1_67000Dx_ZCJB-3pi)\n",
|
||
"\n",
|
||
"* [Video on Convolutional Neural Networks from MIT](https://www.youtube.com/watch?v=iaSUYvmCekI&ab_channel=AlexanderAmini)\n",
|
||
"\n",
|
||
"* [Video on CNNs from Stanford](https://www.youtube.com/watch?v=bNb2fEVKeEo&list=PLC1qU-LWwrF64f4QKQT-Vg5Wr4qEE1Zxk&index=6&ab_channel=StanfordUniversitySchoolofEngineering)\n",
|
||
"\n",
|
||
"m\n",
|
||
"\n",
|
||
"**And Lecture material on CNNs.**\n",
|
||
"\n",
|
||
"* [Lectures from IN5400 spring 2019](https://www.uio.no/studier/emner/matnat/ifi/IN5400/v19/material/week5/in5400_2019_week5_convolutional_nerual_networks.pdf)\n",
|
||
"\n",
|
||
"* [Lectures from IN5400 spring 2021](https://www.uio.no/studier/emner/matnat/ifi/IN5400/v21/lecture-slides/in5400_2021_w5_lecture_convolutions.pdf)\n",
|
||
"\n",
|
||
"* [See also Michael Nielsen's Lectures](http://neuralnetworksanddeeplearning.com/chap6.html)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "a0a7d278",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Using Automatic differentiation\n",
|
||
"a\n",
|
||
"In our discussions of ordinary differential equations \n",
|
||
"we will also study the usage of [Autograd](https://www.youtube.com/watch?v=fRf4l5qaX1M&ab_channel=AlexSmola) in computing gradients for deep learning. For the documentation of Autograd and examples see the lectures slides from [week 39](https://compphysics.github.io/MachineLearning/doc/pub/week39/html/week39.html) and the [Autograd documentation](https://github.com/HIPS/autograd).\n",
|
||
"t"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "1f733262",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Back propagation and automatic differentiation\n",
|
||
"\n",
|
||
"For more details on the back propagation algorithm and automatic differentiation see\n",
|
||
"1. <https://www.jmlr.org/papers/volume18/17-468/17-468.pdf>\n",
|
||
"\n",
|
||
"2. <https://deepimaging.github.io/lectures/lecture_11_Backpropagation.pdf>\n",
|
||
"\n",
|
||
"3. Slides 12-44 at URL\":http://cs231n.stanford.edu/slides/2017/cs231n_2017_lecture4.pdf\""
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "b381b780",
|
||
"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",
|
||
"**Book on solving differential equations with ML methods.**\n",
|
||
"\n",
|
||
"[An Introduction to Neural Network Methods for Differential Equations](https://www.springer.com/gp/book/9789401798150), by Yadav and Kumar.\n",
|
||
"\n",
|
||
"**Master thesis on applying deep learning to problems in mechanics.**\n",
|
||
"\n",
|
||
"[Using Deep Reinforcement Learning for Active Flow Control](https://www.duo.uio.no/handle/10852/79212), by Marius Holm\n",
|
||
"\n",
|
||
"**Thanks to Kristine Baluka Hein.**\n",
|
||
"\n",
|
||
"The lectures on differential equations were developed by Kristine Baluka Hein, now PhD student at IFI.\n",
|
||
"A great thanks to Kristine."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "5433168f",
|
||
"metadata": {},
|
||
"source": [
|
||
"## 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",
|
||
"id": "ba1807a1",
|
||
"metadata": {},
|
||
"source": [
|
||
"<!-- Equation labels as ordinary links -->\n",
|
||
"<div id=\"ode\"></div>\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",
|
||
"id": "4be558b5",
|
||
"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."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "6ed06c5f",
|
||
"metadata": {},
|
||
"source": [
|
||
"## The trial solution\n",
|
||
"\n",
|
||
"Let the trial solution $g_t(x)$ be"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "44cebe9d",
|
||
"metadata": {},
|
||
"source": [
|
||
"<!-- Equation labels as ordinary links -->\n",
|
||
"<div id=\"_auto1\"></div>\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",
|
||
"id": "6e7591e4",
|
||
"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",
|
||
"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."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "c0762551",
|
||
"metadata": {},
|
||
"source": [
|
||
"## 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",
|
||
"id": "1012f4f5",
|
||
"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",
|
||
"id": "7d36e2da",
|
||
"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",
|
||
"id": "cc238507",
|
||
"metadata": {},
|
||
"source": [
|
||
"<!-- Equation labels as ordinary links -->\n",
|
||
"<div id=\"cost\"></div>\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",
|
||
"id": "31290afe",
|
||
"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$."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "8a2114d1",
|
||
"metadata": {},
|
||
"source": [
|
||
"## 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."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "9ce949b8",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Example: Exponential decay\n",
|
||
"\n",
|
||
"An exponential decay of a quantity $g(x)$ is described by the equation"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "5c77fdf5",
|
||
"metadata": {},
|
||
"source": [
|
||
"<!-- Equation labels as ordinary links -->\n",
|
||
"<div id=\"solve_expdec\"></div>\n",
|
||
"\n",
|
||
"$$\n",
|
||
"\\begin{equation} \\label{solve_expdec} \\tag{4}\n",
|
||
" g'(x) = -\\gamma g(x)\n",
|
||
"\\end{equation}\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "84f7fcd7",
|
||
"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",
|
||
"id": "44c593b5",
|
||
"metadata": {},
|
||
"source": [
|
||
"<!-- Equation labels as ordinary links -->\n",
|
||
"<div id=\"_auto2\"></div>\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",
|
||
"id": "0e41c560",
|
||
"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))."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "ea0be84f",
|
||
"metadata": {},
|
||
"source": [
|
||
"## The function to solve for\n",
|
||
"\n",
|
||
"The program will use a neural network to solve"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "b7ff230b",
|
||
"metadata": {},
|
||
"source": [
|
||
"<!-- Equation labels as ordinary links -->\n",
|
||
"<div id=\"solveode\"></div>\n",
|
||
"\n",
|
||
"$$\n",
|
||
"\\begin{equation} \\label{solveode} \\tag{6}\n",
|
||
"g'(x) = -\\gamma g(x)\n",
|
||
"\\end{equation}\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "e13b3067",
|
||
"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$."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "e520ea40",
|
||
"metadata": {},
|
||
"source": [
|
||
"## 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",
|
||
"id": "3b1fa662",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"g_t(x, P) = h_1(x) + h_2(x, N(x, P))\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "8b1510cc",
|
||
"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."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "2c141fbb",
|
||
"metadata": {},
|
||
"source": [
|
||
"## 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",
|
||
"id": "1871cb76",
|
||
"metadata": {},
|
||
"source": [
|
||
"<!-- Equation labels as ordinary links -->\n",
|
||
"<div id=\"trial\"></div>\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",
|
||
"id": "94ec0e56",
|
||
"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",
|
||
"id": "813d0378",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"g_t(x, P) = g_0 + x \\cdot N(x, P)\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "33747043",
|
||
"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",
|
||
"id": "3472f2a6",
|
||
"metadata": {},
|
||
"source": [
|
||
"<!-- Equation labels as ordinary links -->\n",
|
||
"<div id=\"nnmin\"></div>\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",
|
||
"id": "93c47a39",
|
||
"metadata": {},
|
||
"source": [
|
||
"is fulfilled as *best as possible*."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "0772bce3",
|
||
"metadata": {},
|
||
"source": [
|
||
"## 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",
|
||
"id": "84880a3a",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\min_{P}\\Big\\{ \\big(g_t'(x, P) - ( -\\gamma g_t(x, P) \\big)^2 \\Big\\}\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "65375191",
|
||
"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",
|
||
"id": "eed8422e",
|
||
"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",
|
||
"id": "47cb2e38",
|
||
"metadata": {},
|
||
"source": [
|
||
"for an input value $x$."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "484a9d19",
|
||
"metadata": {},
|
||
"source": [
|
||
"## 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",
|
||
"id": "283b0042",
|
||
"metadata": {},
|
||
"source": [
|
||
"<!-- Equation labels as ordinary links -->\n",
|
||
"<div id=\"min\"></div>\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",
|
||
"id": "2bdf98d6",
|
||
"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",
|
||
"id": "e87de03a",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\min_{P} C(\\boldsymbol{x}, P)\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "b883c4d8",
|
||
"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",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "ffe08292",
|
||
"metadata": {},
|
||
"source": [
|
||
"## 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} }$."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "4fcb0ec6",
|
||
"metadata": {},
|
||
"source": [
|
||
"## 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",
|
||
"id": "7a61ba45",
|
||
"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",
|
||
"id": "09ed7190",
|
||
"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",
|
||
"id": "47ec3fee",
|
||
"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",
|
||
"id": "8593d76f",
|
||
"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",
|
||
"id": "31f28a52",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"f(z) = \\frac{1}{1 + \\exp{(-z)}}\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "da7aecec",
|
||
"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."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "738fec98",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Final technicalities III\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",
|
||
"id": "60484140",
|
||
"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",
|
||
"id": "72535cc4",
|
||
"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",
|
||
"id": "d5f241b9",
|
||
"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",
|
||
"id": "e34c683d",
|
||
"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."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "e1381e61",
|
||
"metadata": {},
|
||
"source": [
|
||
"## 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",
|
||
"id": "0af6f5af",
|
||
"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",
|
||
"id": "8e575647",
|
||
"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."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "03aaf438",
|
||
"metadata": {},
|
||
"source": [
|
||
"## 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",
|
||
"id": "130032ee",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\boldsymbol{\\omega}_{\\text{new} } = \\boldsymbol{\\omega} - \\lambda \\nabla_{\\boldsymbol{\\omega}} C(\\boldsymbol{x}, \\boldsymbol{\\omega})\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "da59a12f",
|
||
"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",
|
||
"id": "5898ee15",
|
||
"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",
|
||
"id": "206752c5",
|
||
"metadata": {},
|
||
"source": [
|
||
"## The code for solving the ODE"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 1,
|
||
"id": "8f8405c3",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Initial cost: 367.01\n",
|
||
"Final cost: 0.0666807\n",
|
||
"Max absolute difference: 0.0437499\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"image/png": "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dV2SVLJkSX3yySeKiorSt99+m6llMmv8+PGqV6+eAgICFBAQoJo1a6Z7HX/88UfVqFFDPj4+KlCggDp06KAdO3akmad79+4KCAjQzp071bJlS/n7+6to0aKpz3HVqlVq2LCh/P39dcstt2jMmDFplk95X8yfP189evRQgQIF5O/vr3bt2qX7Xpo/f77at2+vEiVKyMfHR+XLl9czzzyj06dPp5kv5dTEDRs2qGPHjsqfP3/q/4Jn9jvQGJN6RNDHx0e33XabZs+enalta1mWoqOjNWbMmNR9yL/3nVu3blX79u2VP39++fj4qGbNmum2y/WsV5KioqKybJ+fkVOnTunZZ59VlSpVFBAQoJCQEN19991atmxZmvlSvgc+/vhjDRs2TGXKlFFAQIDq1aunVatWpZl33bp16tSpk0qXLi1fX1+VLl1anTt3Tv295XJ++uknWZaV4SmtAwcOlKenp44dO6YmTZpo1qxZOnjwYJpTVFNkdJra0aNH9fTTTyssLExeXl4qVqyYOnbsqJMnT0pStnyXZdd+WvrfZ+JSl+6XS5curW3btmnp0qWp2ynl+/1yp94tX75czZo1U2BgoPz8/FS/fn3NmjUrw8fJ7O8kuYKBWxk1apSRZNauXZtm+ueff24kme+++84YY8xTTz1lPD09zauvvmrmzJljxo8fbypVqmSKFCliTpw4kbpc48aNTYECBUxYWJj58ssvzeLFi83SpUvNypUrTevWrY2vr69ZuXKlWblypQkPDzcul8u0bNnSeHh4mHfeecfMmzfPfPzxx8bf39/UqlXLxMXFpa67VKlSpmjRoqZs2bLmxx9/NIsXLzZr1qwxixcvNpJMqVKlTPfu3c2cOXPMN998YwICAkzTpk1N8+bNTZ8+fcy8efPMRx99ZJxOp3nhhRfSPN+XX37ZjBgxwsyZM8csWrTIfPrpp6ZQoUKmR48eaeZr3LixKViwoKlQoYL55ptvzPz5882zzz5rJJkxY8akzhcZGWluvfVW4+/vbwYOHGjmzp1rJk+ebF566SWzaNEiY4wxycnJplWrVsbf39+8++67Zv78+WbkyJGmePHipkqVKiYmJuaKr924ceOMJNOiRQszbdo0M2nSJFO7dm3j5eVlli1bZowxZu/evebrr782ksygQYPMypUrzbZt2676fihbtqx54YUXzNy5c83IkSNN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Djx37pzx8fG5bKarFSVjjPH3989w/9WpUyfj7e1tDh06lGb6vffea/z8/K74Ob3SerNjn58ZKfvwZs2apdleKd8D1apVS1Pe16xZYySZCRMmXHGdFy5cMP7+/ubzzz9PnX5pUTLm4mvt5eWV+nky5n/71pR9sjHGtGnTJs331L9duk/r2bOn8fT0NNu3b8/MJkjNfCPfZdm9n85sUTLGmFtvvTXD93hGRenOO+80ISEhJioqKnVaUlKSqVq1qilRooRxuVxpHudq78/chFPv3NSdd94pT09PBQYGqm3btgoNDdXs2bNVpEgRzZw5U5ZlqUuXLkpKSkq9hYaGqkaNGulOX8mfP7/uvvvuTD3uokWLJCndxX8PPfSQ/P39tXDhwjTTq1evftmBCNq2bZvm58qVK0tSutObKleurLNnz6Y5/W7jxo267777VLBgQTmdTnl6eqpbt25KTk7W7t270ywfGhqqOnXqpMv178P9s2fP1i233JLhhdQpZs6cqXz58qldu3ZptmvNmjUVGhp6xdOCdu3apWPHjqlr165yOP73sQoICNCDDz6oVatWKSYm5rLLX819992X7vlJ/zsVc+7cuUpKSlK3bt3SZPfx8VHjxo2va3Shfz+2p6dnuum//vqrGjRooICAAHl4eMjT01M//PBDulN6rkXTpk0VGBiY+nORIkUUEhKS+jzj4uK0cOFCdejQQX5+fmmea+vWrRUXF5fudJCMNGvWTCtWrFBsbKwOHjyovXv3qlOnTqpZs6bmz58vSVqwYIFKliypChUqSMraz8b+/ftVr149RUZGatWqVapRo8ZVM6ecSvjwww/rl19+yXAUzEWLFqlKlSrpPg/du3eXMSb1OWTksccek7e3d5rTMSZMmKD4+Hj16NHjqvky8zlcunSpqlatqipVqqSZr3PnzlddvyQlJSVp0KBBqlKliry8vOTh4SEvLy/t2bMnw/fd1T43N8IYI0kZngZztWUutWDBAq1duzbN7Wojrc2fP1/Jycl67rnnLjvPypUrFRsbm+49GxYWprvvvjvde9ayLLVu3Tr1Zw8PD5UvX15FixZVrVq1UqcXKFAgzefy3y69hrZ+/foqVaqUFi9enDotPDxc//nPfxQWFpa67yhVqpQkZfg6/vv0V0mZ/g5cuXKl4uLiLpvpRixatEjNmjVTWFhYmundu3dXTExMhqeRXYubsc//5ptvdNttt8nHxyf1dVi4cGGGr0GbNm3kdDovm0eSLly4oNdff13ly5eXh4eHPDw8FBAQoOjo6Kt+L/Tq1UuS0px+/NVXX6latWq66667rvpcMjJ79mw1bdo09XePy8nK77Ls3k9nh+joaK1evVodO3ZMM6iX0+lU165ddeTIkXSnLGfnvtXdUJTc1NixY7V27Vpt3LhRx44d05YtW1IvGj558qSMMSpSpIg8PT3T3FatWpXuPO9rGTnpzJkz8vDwSHextmVZCg0N1ZkzZzK97gIFCqT52cvL64rT4+LiJF08d7dRo0Y6evSoPv/8cy1btkxr165NvQYlNjY2zfIFCxZM99je3t5p5jt16tRVR8M5efKkzp8/Ly8vr3Tb9cSJE+m267+lbJeMtkexYsXkcrl07ty5Kz7+lVz6HFMGU0h5jinnW99xxx3psk+aNOmK2a8mo+c0ZcoUPfzwwypevLh+/vlnrVy5UmvXrlXPnj1TX8frcbXX8syZM0pKStKXX36Z7nmm/IKXmed6zz33KD4+XsuXL9f8+fNVqFAh1apVS/fcc48WLFggSVq4cGGaYp2Vn401a9Zo9+7deuSRRzI9StNdd92ladOmpf5yVKJECVWtWlUTJkxIk/Fy78GU+y+nQIECuu+++zR27FglJydLung+ep06dXTrrbdeNV9mPodnzpxJN5CBpAynZeSVV17RO++8o/vvv18zZszQ6tWrtXbtWtWoUSPdfiGjTJd+bjJSqFAh+fn5af/+/VfMcuDAAfn5+aXbn11OdHS0zpw5k/pa/FuNGjV0++23p7lVrVr1iutLuW7ySu+fq+2XLn0/+Pn5ycfHJ800Ly+vDJ+jl5dXhp/10NDQDKelPJbL5VKLFi00ZcoUvfbaa1q4cKHWrFmT+h8cGb02l+bP7HdgymNeLtONuJHPWmZk9z5/2LBh6tWrl+rWravJkydr1apVWrt2rVq1anXdn6VHH31UX331lZ588knNnTtXa9as0dq1a1W4cOErfuaki/uARx55RN9++62Sk5O1ZcsWLVu27IYGm8rM935Wf5dl9346O5w7d07GmGvKdD371pyKUe/cVOXKldOMnPRvhQoVkmVZWrZsWYajj1067Vr+x7NgwYJKSkrSqVOn0vxCaIzRiRMnUv+35HrWnVnTpk1TdHS0pkyZkuZ//W7k7+EULlxYR44cueI8KRclzpkzJ8P7/32k41IpO43jx4+nu+/YsWNyOBzKnz//NSS+NikjZv32229X/Z9SHx8fRUREpJt+uS/WjF7jn3/+WWXKlNGkSZPS3B8fH38tsa9Z/vz5U/+X63L/k16mTJmrrqdu3boKCAjQggULdODAATVr1kyWZalZs2b65JNPtHbtWh06dChNUcrKz8Yjjzyi0NBQ9e3bVy6XS2+//fZVM0tS+/bt1b59e8XHx2vVqlUaPHiwHn30UZUuXVr16tVTwYIFL/selHTVkdV69OihX3/9VfPnz1fJkiW1du1ajRgxIlPZMqNgwYKpv+D924kTJzK1/M8//6xu3bpp0KBBaaafPn1a+fLly4qIcjqdatq0qebMmaMjR45k+IvWkSNHtH79et17771p/pf9SmbNmqXk5ORM/e2ezEh5Dx45ciTdUY0UV9svZcdIexm9lidOnFD58uUlXRwAYfPmzRo9erQef/zx1Hn27t172XVe+lnK7HdgyvO/XKZ/D15zrW70s3ajrmWfn5Gff/5ZTZo0Sff5joqKuq48ERERmjlzpvr376833ngjdXp8fLzOnj2bqXW89NJL+umnn/T7779rzpw5ypcv3w2N8puZ7/3s+C7Lzv10yn9kxMfHp3nv38h/hubPn18Oh8PW97M744hSDtS2bVsZY3T06NF0/wt5++23q1q1ate97mbNmkm6uPP4t8mTJys6Ojr1/uyUsrP6907AGHPVEcGu5N5779Xu3buveEi7bdu2OnPmjJKTkzPcrhUrVrzsshUrVlTx4sU1fvz4NKfXREdHa/Lkyakj4WWXli1bysPDQ//880+G2f9dukuXLq3du3en+SI4c+aM/vrrr0w/nmVZ8vLySvPFcuLEiRsaKSgz/Pz81LRpU23cuFHVq1fP8Hmm/HJ0pf/h8vT01F133aX58+dr0aJFat68uSSpUaNG8vDw0Ntvv51anFJk9Wfj7bff1meffaZ+/frpzTffvKZlvb291bhxY3300UeSlDrKVbNmzbR9+3Zt2LAhzfxjx46VZVlq2rTpFdfbokULFS9eXKNGjdKoUaPk4+OT6dPiMqNx48baunWrtm/fnmb6xIkTM7W8ZVnpfjGeNWtWlv8x7jfffFPGGD377LOpR9dSJCcnq1evXjLGZPp1O3TokPr06aPg4GA988wzWZKxRYsWcjqdVyyy9erVk6+vb7r37JEjR1JPHctq48aNS/PzX3/9pYMHD6YWxIz275KuaTTAzH4H3nnnnfLx8blspsy49KhoimbNmmnRokXpRvoaO3as/Pz8rjr88uXWm1nXss/PSEafpS1btlz3KYOWZckYk26dI0eOTPcZupzatWurfv36+uijjzRu3Dh179493d+NvJbtdu+992rx4sVXHOkyO7/LsmM/nVLut2zZkmb6jBkzMnz8zGwrf39/1a1bV1OmTEkzv8vl0s8//6wSJUrk6b/1yBGlHKhBgwZ6+umn1aNHD61bt0533XWX/P39dfz4cS1fvlzVqlVLPd/3WjVv3lwtW7bU66+/rsjISDVo0EBbtmxR//79VatWLXXt2jWLn03GGby8vNS5c2e99tpriouL04gRI27o1LXevXtr0qRJat++vd544w3VqVNHsbGxWrp0qdq2baumTZuqU6dOGjdunFq3bq2XXnpJderUkaenp44cOaLFixerffv26tChQ4brdzgcGjJkiB577DG1bdtWzzzzjOLj4zV06FCdP38+08MIX6/SpUtr4MCB6tu3r/bt26dWrVopf/78OnnypNasWSN/f//U4am7du2qb7/9Vl26dNFTTz2lM2fOaMiQIQoKCsr046UMff3ss8+qY8eOOnz4sN577z0VLVpUe/bsya6nKUn6/PPP1bBhQzVq1Ei9evVS6dKlFRUVpb1792rGjBmpZbhcuXLy9fXVuHHjVLlyZQUEBKhYsWKppxI0a9ZMr776qiSlHjny9fVV/fr1NW/ePFWvXl0hISGpj5sdn42XXnpJAQEBevrpp3XhwgV98cUXlz0S1a9fPx05ckTNmjVTiRIldP78eX3++efy9PRM/XtcL7/8ssaOHas2bdpo4MCBKlWqlGbNmqXhw4erV69eV/2yczqd6tatm4YNG6agoCA98MADGf4h1OvVu3dv/fjjj7r33ns1cOBAFSlSROPHj08dov/f1/dlpG3btho9erQqVaqk6tWra/369Ro6dGiW/5HJBg0a6LPPPlPv3r3VsGFDPf/88ypZsmTqH5xdvXq1PvvsM9WvXz/dslu3bk29XiQ8PFzLli3TqFGj5HQ6NXXq1Az/BtX69esz3M5VqlS57OeydOnSeuutt/Tee+8pNjZWnTt3VnBwsLZv367Tp0/r3XffVb58+fTOO+/orbfeUrdu3dS5c2edOXNG7777rnx8fNS/f/8b31iXWLdunZ588kk99NBDOnz4sPr27avixYvr2WeflSRVqlRJ5cqV0xtvvCFjjAoUKKAZM2akXhuYGZn9DsyfP7/69Omj999/P02mAQMGZPrUu2rVqmnJkiWaMWOGihYtqsDAQFWsWFH9+/fXzJkz1bRpU/Xr108FChTQuHHjNGvWLA0ZMuSqn5vLrTezrmWfn5G2bdvqvffeU//+/dW4cWPt2rVLAwcOVJkyZZSUlJTpHCmCgoJ01113aejQoSpUqJBKly6tpUuX6ocffrimo70vvfRS6p/OSHnP/Fu1atU0ZcoUjRgxQrVr15bD4bhsKRw4cKBmz56tu+66S2+99ZaqVaum8+fPa86cOXrllVdUqVKlLP8uy+79dOvWrVWgQAE98cQTGjhwoDw8PDR69GgdPnw4w201ceJETZo0SWXLlpWPj89l/yN98ODBat68uZo2bao+ffrIy8tLw4cP19atWzVhwoRsOXsox7jpw0fgijIzclKKH3/80dStW9f4+/sbX19fU65cOdOtW7c0Q7Y2btzY3HrrrRkun9God8YYExsba15//XVTqlQp4+npaYoWLWp69eqVZnhXYy6OANOmTZt0y19uVLfLPbeUUVz+PXzojBkzTI0aNYyPj48pXry4+e9//2tmz56dbqScyz2/S0dwM+biCEgvvfSSKVmypPH09DQhISGmTZs2aYYVTkxMNB9//HHqYwcEBJhKlSqZZ555xuzZsyfd41xq2rRppm7dusbHx8f4+/ubZs2amRUrVmRq+2Tkctsso1GDUh6/adOmJigoyHh7e5tSpUqZjh07mgULFqSZb8yYMaZy5crGx8fHVKlSxUyaNOmyo94NHTo0w2wffvihKV26tPH29jaVK1c233//fYYj8lzLqHcpw2Zfbfn9+/ebnj17muLFixtPT09TuHBhU79+/XQja02YMMFUqlTJeHp6phs9aPPmzUaSqVChQpplPvjgAyMpzYheKW70s3G55zlhwgTj4eFhevTokWbUxH+bOXOmuffee03x4sWNl5eXCQkJMa1bt04dej7FwYMHzaOPPmoKFixoPD09TcWKFc3QoUPTrffS7ZFi9+7dqSOvZTRK5OVGvcvs53Dr1q3mnnvuMT4+PqZAgQLmiSeeMGPGjDGSzObNmzN8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8GEzLi7O7NChg9mpUyer/gqoRNnZ2WZiYqKZmJhoSjInTpxoJiYmmklJSaZpVu3Xv4RSOZs6darZsGFD09fX12zXrp25YcOG0sceeOABs1evXj97/vr16822bduavr6+ZqNGjczp06dX8mJYrSxnplevXqakX/x64IEHKn84LFPW7zOuCKXqqaxn5ocffjD79u1rBgQEmNHR0eazzz5r5ubmVvJqWKmsZ2by5Mlmq1atzICAADMqKsq89957zZMnT1byalhh3bp1v/napCq//jVMk3uiAAAAAOCKn1ECAAAAADeEEgAAAAC4IZQAAAAAwA2hBAAAAABuCCUAAAAAcEMoAQAAAIAbQgkAAAAA3BBKAAAAAOCGUAIAAAAAN4QSAAAAALghlAAAAADADaEEAPBa586dU926dfXaa6+VXtu+fbt8fX21atUqC5cBADydYZqmafUIAAAqyrJlyzR06FBt2bJFMTExatu2rQYPHqxJkyZZPQ0A4MEIJQCA1xs1apTWrFmjjh07ateuXdqxY4f8/f2tngUA8GCEEgDA6+Xl5enaa6/ViRMnFB8fr9atW1s9CQDg4fgZJQCA1zty5IiSk5PldDqVlJRk9RwAQBXAHSUAgFcrLCxUp06d1KZNG8XExGjixInavXu3IiMjrZ4GAPBghBIAwKs9//zzWrBggXbt2qWaNWuqd+/eCgoK0tdff231NACAB+O/3gEAvNb69es1adIkzZo1S8HBwbLZbJo1a5bi4uI0ffp0q+cBADwYd5QAAAAAwA13lAAAAADADaEEAAAAAG4IJQAAAABwQygBAAAAgBtCCQAAAADcEEoAAAAA4IZQAgAAAAA3hBIAAAAAuCGUAAAAAMANoQQAAAAAbgglAAAAAHDz/wA7GnFKe8aZWAAAAABJRU5ErkJggg==\n",
|
||
"text/plain": [
|
||
"<Figure size 1000x1000 with 1 Axes>"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"%matplotlib inline\n",
|
||
"\n",
|
||
"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",
|
||
"id": "c7635a55",
|
||
"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": 2,
|
||
"id": "c87a3518",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"/Users/mhjensen/miniforge3/envs/myenv/lib/python3.9/site-packages/numpy/core/fromnumeric.py:3208: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray.\n",
|
||
" return asarray(a).size\n"
|
||
]
|
||
},
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Initial cost: 324.246\n",
|
||
"Final cost: 0.119936\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"image/png": "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x48fT7C8qKgo9ezZM/61WK9ePW3YsCHZp+L069dP9957r3LmzKnAwEDdddddGjt2rIwxCeaLe93Nnz9fd911l3x9fVWuXDmNGzfupo8xa9Ys7dixQ++8806SR7kff/xxNWvWTGPHjtXJkydvujyn06lvv/1WuXLl0uDBg286f0rs2rVLHTp0UN68eeXt7a0iRYqoc+fOCV4z27Zt04MPPqgcOXLIx8dH1apV048//phgOanxfhW3rxo1apTKlCkjb29vVahQQVOnTk0wX3L353GnJg4aNEiffvqpihcvLm9vb/3111+SpPXr16tt27bKmTOnfHx8VL16dU2fPj3ROlq9erXq1KkjHx8fFShQQH369Eny1MlrdenSJX7/efUpkXH7zuR+RkjpcuOk1j7/elL780VkZKR69uypatWqKSgoSDlz5lStWrX066+/3jBHeHi4smfPrm7duiX63aFDh+R0OjV48GD98MMPevTRRyVd+Y/zaz+zJXWamtvt1jfffBP/GTF79uy67777NGfOnPh5Uvu9LC3303GviaROKb96v9y3b1+99dZbkqTixYvHr6u49/ekTr07f/68unfvroIFC8rLy0slSpTQe++9l+j9NyWfSVKNQSLjx483ksy6desSTP/qq6+MJDN69GhjjDHPP/+88fT0ND179jTz5883kydPNuXKlTN58+Y1J0+ejL9f/fr1Tc6cOU3hwoXNN998Y/766y+zbNkys2rVKtOyZUvj6+trVq1aZVatWmVOnz5t3G63ad68ufHw8DAffPCBWbBggfniiy+Mv7+/qV69uomMjIxfdtGiRU3+/PlNiRIlzLhx48xff/1l1q5da/766y8jyRQtWtR06dLFzJ8/34wcOdIEBASYhg0bmqZNm5pevXqZBQsWmIEDBxqn02leffXVBM/3jTfeMN99952ZP3++WbJkiRk6dKjJlSuXeeaZZxLMV79+fRMcHGxKly5tRo4caRYuXGi6d+9uJJkff/wxfr7Q0FBTsWJF4+/vbz7++GPz559/mhkzZpjXX3/dLFmyxBhjjMvlMg888IDx9/c3/fr1MwsXLjRjxowxBQsWNBUqVDCXL1++4d9u0qRJRpJp1qyZmT17tpk2bZq5++67jZeXl1mxYoUxxph9+/aZ4cOHG0nm888/N6tWrTLbt2+/7jJ37dplXnrpJTN16lSz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atq0qWrVqqWePXuqVq1aioqK0m+//abRo0erfv36GjJkSKL7njp1SqtXr5YxRmFhYfFfOLtlyxa98cYbev755xPd5/Dhw0leT5I7d+4bDiv/5Zdf6v7779e9996rd955R6VKldKpU6c0Z84cjRo1StmyZdNHH30Uf+3lhx9+qJw5c2rSpEmaO3euBg0apKCgoNtbWdfIlSuXGjVqpA8++ED+/v4aMWKEdu3alWCI8NvZn8cZNWqUWrRooebNm6tLly4qWLCgzp8/r507d2rjxo36+eefJUnvv/++5syZo0aNGunDDz+Un5+fhg8fnuyhn+P2FwMHDlSLFi3kdDpVpUqV2/6McL3lxp3SmBzJ3ecnJS0+X8R9TUr37t3Vvn17HTlyRJ988ony58+vvXv3JmsZTz31lPr06aPly5fr/fffT7Q+KlWqJEkaPXq0smXLJh8fHxUvXjzJUli3bl116tRJn376qU6dOqXWrVvL29tbmzZtkp+fn1599dVUfy9L6/103HX548aNU8mSJVW1alWtXbtWkydPTjRv3Db21Vdf6emnn5anp6fKli2b5FkXnTt31vDhw/X000/r0KFDqly5sv7++299/vnnatmy5Q2va78j0mSIiAzuesODJ2XcuHHm3nvvNf7+/sbX19eULFnSdO7c2axfvz5+nvr165uKFSsmef+kRr0z5sqIK7179zZFixY1np6eJn/+/Oall14yFy5cSDBf0aJFTatWrRLd/3qjul3vucWNqHL10JC//fabqVq1qvHx8TEFCxY0b731VvxoS9eOTpbU80tquMwLFy6Y119/3RQpUsR4enqaPHnymFatWpldu3bFzxMTE2O++OKL+McOCAgw5cqVM926dTN79+5N9DjXmj17trn33nuNj4+P8ff3N40bNzYrV65M1vpJSlRUlOnVq5cpWLCg8fHxMXfddZeZPXt2ks/vevfv2bOnyZMnj/Hx8TH33XefWbVqVaKRd4wx5syZM+a1114zxYsXN56eniZnzpzm7rvvNu+9954JDw9P8TqK2z5++eUXU7FiRePl5WWKFStmvvzyy5vmNub6I2kllf3gwYOma9eupmDBgsbT09Pkzp3b1K5d23z66acJ5tuzZ49p1qyZCQwMNLlz5zavvvqqmTt3brK3K2OM+eeff0ytWrWMn5+fyZ07t3nuuefMxo0bE43I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UZ1z5s033+Tkk0+mZcuWZGdnc+SRR/L+++/X4FrVBtX9e+YrEyZMIB6P06NHj107ULVOdc+Z0tJS7r77bjp16kRGRgZ77703zz77bA2tVW1Q3XPmpZdeonv37jRu3Ji2bdty1VVXsX79+hpaqzDl5uZy1lln0a5dOyKRCG+99daPfk9def9rKO1Er776Krfeeit33303M2bM4Oijj+b0009n2bJl33l8Xl4eZ5xxBkcffTQzZszgrrvu4pZbbuGNN96o4eUKS3XPmdzcXE4++WSGDx/OtGnTOP744znrrLOYMWNGDS9XWKp7znxl06ZNXH755Zx44ok1tFS1xY6cMxdddBGjRo3imWee4dNPP+Xll19m//33r8HVClN1z5nx48dz+eWXc/XVVzN37lwGDx7Mxx9/zIABA2p4ucKwZcsWunfvzj/+8Y/tOr5Ovf8NtNP07t07uO66677x2v777x/ceeed33n8HXfcEey///7feO3aa68NjjjiiF22UbVLdc+Z79K1a9fggQce2NnTVEvt6DnTr1+/4J577gnuu+++oHv37rtwoWqb6p4z7777bpCTkxOsX7++JuapFqruOfPwww8HnTt3/sZrjz32WNChQ4ddtlG1ExAMGTLkB4+pS+9/vaK0k5SVlTFt2jROOeWUb7x+yimnMHHixO/8nkmTJn3r+FNPPZWpU6dSXl6+y7aqdtiRc6aqRCJBUVERzZs33xUTVcvs6DkzcOBAFi1axH333berJ6qW2ZFzZujQofTq1YuHHnqI9u3bs++++3L77bezdevWmpiskO3IOdOnTx9WrFjB8OHDCYKA1atX8/rrr3PmmWfWxGTVMXXp/W887AH1xbp166isrKR169bfeL1169asWrXqO79n1apV33l8RUUF69ato23btrtsr8K3I+dMVX/961/ZsmULF1100a6YqFpmR86ZhQsXcueddzJu3Djicf/Kb2h25JxZvHgx48ePJzMzkyFDhrBu3TpuuOEGNmzY4M8pNQA7cs706dOHl156iX79+lFSUkJFRQVnn302jz/+eE1MVh1Tl97/ekVpJ4tEIt/47yAIvvXajx3/Xa+r/qruOfOVl19+mfvvv59XX32VVq1a7ap5qoW295yprKzkkksu4YEHHmDfffetqXmqharz90wikSASifDSSy/Ru3dvzjjjDB555BGee+45ryo1INU5Z+bNm8ctt9zCvffey7Rp03jvvffIy8vjuuuuq4mpqoPqyvtf/3lxJ2nRogWxWOxb/9qyZs2ab1XzV9q0afOdx8fjcXbfffddtlW1w46cM1959dVXufrqqxk8eDAnnXTSrpypWqS650xRURFTp05lxowZ3HTTTUDyTXAQBMTjcUaMGMEJJ5xQI9sVjh35e6Zt27a0b9+enJycr1874IADCIKAFStW0KVLl126WeHakXPmwQcf5KijjuK3v/0tAN26dSMrK4ujjz6a//qv/6pVVwgUvrr0/tcrSjtJeno6PXv2ZOTIkd94feTIkfTp0+c7v+fII4/81vEjRoygV69epKWl7bKtqh125JyB5JWkK6+8kkGDBvn57wamuudMdnY2c+bMYebMmV//uu6669hvv/2YOXMmhx9+eE1NV0h25O+Zo446ivz8fDZv3vz1a5999hnRaJQOHTrs0r0K346cM8XFxUSj33xLGYvFgG1XCqSv1Kn3vyHdRKJeeuWVV4K0tLTgmWeeCebNmxfceuutQVZWVrBkyZIgCILgzjvvDH7xi198ffzixYuDxo0bB7fddlswb9684JlnngnS0tKC119/Paw/gmpYdc+ZQYMGBfF4PHjiiSeClStXfv2roKAgrD+Calh1z5mqvOtdw1Pdc6aoqCjo0KFD0Ldv32Du3LnB2LFjgy5dugQDBgwI64+gGlbdc2bgwIFBPB4PnnzyyWDRokXB+PHjg169egW9e/cO64+gGlRUVBTMmDEjmDFjRgAEjzzySDBjxoxg6dKlQRDU7fe/htJO9sQTTwSdOnUK0tPTg0MPPTQYO3bs11+74oorgmOPPfYbx3/44YfBIYccEqSnpwd77rln8NRTT9XwYoWtOufMscceGwDf+nXFFVfU/HCFprp/z6QylBqm6p4z8+fPD0466aSgUaNGQYcOHYJf//rXQXFxcQ2vVpiqe8489thjQdeuXYNGjRoFbdu2DS699NJgxYoVNbxaYRgzZswPvjepy+9/I0HgNVFJkiRJSuXPKEmSJElSFYaSJEmSJFVhKEmSJElSFYaSJEmSJFVhKEmSJElSFYaSJEmSJFVhKEmSJElSFYaSJEmSJFVhKEmSJElSFYaSJEmSJFVhKEmSJElSFYaSJEmSJFXx/wEVdhHFCFo3EAAAAABJRU5ErkJggg==\n",
|
||
"text/plain": [
|
||
"<Figure size 1000x1000 with 1 Axes>"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"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",
|
||
"# 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",
|
||
"id": "208d3ec4",
|
||
"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",
|
||
"id": "80e303ab",
|
||
"metadata": {},
|
||
"source": [
|
||
"<!-- Equation labels as ordinary links -->\n",
|
||
"<div id=\"log\"></div>\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",
|
||
"id": "410ffa1a",
|
||
"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."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "966f9ec6",
|
||
"metadata": {},
|
||
"source": [
|
||
"## 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",
|
||
"id": "aab8b361",
|
||
"metadata": {},
|
||
"source": [
|
||
"<!-- Equation labels as ordinary links -->\n",
|
||
"<div id=\"solveode_population\"></div>\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",
|
||
"id": "c8dd3e3f",
|
||
"metadata": {},
|
||
"source": [
|
||
"where $g(0) = g_0$.\n",
|
||
"\n",
|
||
"In this example, we let $\\alpha = 2$, $A = 1$, and $g_0 = 1.2$."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "aaf89bbf",
|
||
"metadata": {},
|
||
"source": [
|
||
"## 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",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "b5c25622",
|
||
"metadata": {},
|
||
"source": [
|
||
"## 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": 3,
|
||
"id": "34787ebc",
|
||
"metadata": {},
|
||
"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",
|
||
"id": "49fd09f6",
|
||
"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",
|
||
"id": "a2b04875",
|
||
"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",
|
||
"id": "04f5a4d0",
|
||
"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",
|
||
"id": "59eca821",
|
||
"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",
|
||
"id": "4e8d49a1",
|
||
"metadata": {},
|
||
"source": [
|
||
"Now, if $g_i = g(t_i)$ then"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "d7ddff32",
|
||
"metadata": {},
|
||
"source": [
|
||
"<!-- Equation labels as ordinary links -->\n",
|
||
"<div id=\"odenum\"></div>\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",
|
||
"id": "85e79382",
|
||
"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": 4,
|
||
"id": "5dd0da52",
|
||
"metadata": {},
|
||
"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",
|
||
"id": "dab25b3d",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Example: Solving the one dimensional Poisson equation\n",
|
||
"\n",
|
||
"The Poisson equation for $g(x)$ in one dimension is"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "83838a24",
|
||
"metadata": {},
|
||
"source": [
|
||
"<!-- Equation labels as ordinary links -->\n",
|
||
"<div id=\"poisson\"></div>\n",
|
||
"\n",
|
||
"$$\n",
|
||
"\\begin{equation} \\label{poisson} \\tag{13}\n",
|
||
" -g''(x) = f(x)\n",
|
||
"\\end{equation}\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "732ce94b",
|
||
"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",
|
||
"id": "35634df2",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\begin{align*}\n",
|
||
" g(0) &= 0 \\\\\n",
|
||
" g(1) &= 0\n",
|
||
"\\end{align*}\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "fa26e45e",
|
||
"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."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "22ae35fb",
|
||
"metadata": {},
|
||
"source": [
|
||
"## The specific equation to solve for\n",
|
||
"\n",
|
||
"Here, the function $g(x)$ to solve for follows the equation"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "12ec38a5",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"-g''(x) = f(x),\\qquad x \\in (0,1)\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "c32759f0",
|
||
"metadata": {},
|
||
"source": [
|
||
"where $f(x)$ is a given function, along with the chosen conditions"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "69bc571c",
|
||
"metadata": {},
|
||
"source": [
|
||
"<!-- Equation labels as ordinary links -->\n",
|
||
"<div id=\"cond\"></div>\n",
|
||
"\n",
|
||
"$$\n",
|
||
"\\begin{aligned}\n",
|
||
"g(0) = g(1) = 0\n",
|
||
"\\end{aligned}\\label{cond} \\tag{14}\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "555c09cf",
|
||
"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",
|
||
"id": "5247323f",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"g_t(x) = x \\cdot (1-x) \\cdot N(P,x)\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "90357df3",
|
||
"metadata": {},
|
||
"source": [
|
||
"The analytical solution for this problem is"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "33be81dc",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"g(x) = x(1 - x)\\exp(x)\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "7fdc3446",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Solving the equation using Autograd"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 1,
|
||
"id": "b1fb7c4b",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"/opt/homebrew/lib/python3.9/site-packages/numpy/core/_asarray.py:102: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray.\n",
|
||
" return array(a, dtype, copy=False, order=order)\n"
|
||
]
|
||
},
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Initial cost: 457.256\n",
|
||
"Final cost: 0.00310113\n",
|
||
"The max absolute difference between the solutions is: 0.000464088\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"image/png": "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REREjlxNTQ15eXlUVla6jhISYmNjSUtLIyoqqtm/oxImIiIShvLy8khMTCQzMxNjjOs4Qc1aS2FhIXl5eWRlZTX79/R1pIiISBiqrKykS5cuKmBtwBhDly5dWrxXUSVMREQkTKmAtZ3WPJcqYSIiIiIOqISJiIhIUHvqqae46aabDnud/Pz8b05fe+21rFmzpsX3NXfuXE477bQW/15TVMJEREQk5DUuYf/6178YMmSIw0QqYSIiIuLQmWeeydixYxk6dCiPPfYYAAkJCfzyl79k5MiRTJo0iV27dgEwe/ZsJk6cyOjRo5k+ffo35x+wf/9+srKyqKmpAaCkpISsrCxefvllFi9ezCWXXMKoUaOoqKhg6tSp30yD+O677zJmzBhGjhzJCSecAMDChQuZPHkyo0eP5qijjmL9+vVt/th1iAoREZEw9/vZq1mTX9KmtzmkV0d+e/rQw17vySefJDk5mYqKCsaPH88555xDWVkZkyZN4o9//CN33HEHjz/+OL/61a+YMmUK8+fPxxjDv/71L+6++27uueeeb24rMTGRqVOn8vbbb3PmmWfy4osvcvbZZ3Peeefx0EMP8be//Y1x48Z96/4LCgr4/ve/z2effUZWVhZFRUUADBo0iM8//5zIyEg+/PBDfvGLX/Dqq6+26XOkEiYiIiLO3H///bz++usA5ObmsnHjRqKjo78ZdzV27Fg++OADwHtsswsuuIAdO3ZQXV3d5DG5rr32Wu6++27OPPNM/v3vf/P4448f8v7nz5/Pscce+81tJScnA1BcXMwVV1zBxo0bMcZ8s3etLamEiYiIhLnm7LHyh7lz5/Lhhx/y1VdfERcXx9SpU6msrCQqKuqbQz5ERERQW1sLwI9+9CNuu+02Zs6cydy5c/nd7373nds8+uijyc7OZu7cudTV1TFs2LBWZfv1r3/N8ccfz+uvv052djZTp05t7cM8KI0JExERESeKi4vp3LkzcXFxrFu3jvnz5x/2+qmpqQA8/fTTB73e5ZdfzsUXX8xVV131zXmJiYns37//O9edNGkSn332GVu3bgX45uvIhvf11FNPtehxNZdKmIiIiDhx8sknU1tby+DBg/nZz37GpEmTDnn93/3ud5x33nmMHTuWrl27HvR6l1xyCXv37uWiiy765rwrr7ySG2644ZuB+QekpKTw2GOPcfbZZzNy5Egu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\n",
|
||
"text/plain": [
|
||
"<Figure size 720x720 with 1 Axes>"
|
||
]
|
||
},
|
||
"metadata": {
|
||
"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",
|
||
"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",
|
||
"id": "c13e59dd",
|
||
"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",
|
||
"id": "d268a538",
|
||
"metadata": {},
|
||
"source": [
|
||
"<!-- Equation labels as ordinary links -->\n",
|
||
"<div id=\"approx\"></div>\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",
|
||
"id": "18236a01",
|
||
"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",
|
||
"id": "9454651e",
|
||
"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",
|
||
"id": "227cb339",
|
||
"metadata": {},
|
||
"source": [
|
||
"Since we know from our problem that"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "0fb50ca9",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\begin{aligned}\n",
|
||
"-g''(x) &= f(x) \\\\\n",
|
||
"&= (3x + x^2)\\exp(x)\n",
|
||
"\\end{aligned}\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "6f2d9f30",
|
||
"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",
|
||
"id": "6094700a",
|
||
"metadata": {},
|
||
"source": [
|
||
"<!-- Equation labels as ordinary links -->\n",
|
||
"<div id=\"odesys\"></div>\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",
|
||
"id": "2e29ff0e",
|
||
"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",
|
||
"id": "eb0fe9a1",
|
||
"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",
|
||
"id": "c03a46bb",
|
||
"metadata": {},
|
||
"source": [
|
||
"which makes it possible to solve for the vector $\\boldsymbol{g}$."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "401c3831",
|
||
"metadata": {},
|
||
"source": [
|
||
"## 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": 2,
|
||
"id": "4f67bd3c",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"/opt/homebrew/lib/python3.9/site-packages/numpy/core/_asarray.py:102: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray.\n",
|
||
" return array(a, dtype, copy=False, order=order)\n"
|
||
]
|
||
},
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Initial cost: 457.256\n",
|
||
"Final cost: 0.00310113\n",
|
||
"The max absolute difference between the analytical solution and DNN Autograd: 0.000464088\n",
|
||
"The max absolute difference between the analytical solution and numerical scheme: 0.00266858\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"image/png": "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REREjlxNTQ15eXlUVla6jhISYmNjSUtLIyoqqtm/oxImIiIShvLy8khMTCQzMxNjjOs4Qc1aS2FhIXl5eWRlZTX79/R1pIiISBiqrKykS5cuKmBtwBhDly5dWrxXUSVMREQkTKmAtZ3WPJcqYSIiIiIOqISJiIhIUHvqqae46aabDnud/Pz8b05fe+21rFmzpsX3NXfuXE477bQW/15TVMJEREQk5DUuYf/6178YMmSIw0QqYSIiIuLQmWeeydixYxk6dCiPPfYYAAkJCfzyl79k5MiRTJo0iV27dgEwe/ZsJk6cyOjRo5k+ffo35x+wf/9+srKyqKmpAaCkpISsrCxefvllFi9ezCWXXMKoUaOoqKhg6tSp30yD+O677zJmzBhGjhzJCSecAMDChQuZPHkyo0eP5qijjmL9+vVt/th1iAoREZEw9/vZq1mTX9KmtzmkV0d+e/rQw17vySefJDk5mYqKCsaPH88555xDWVkZkyZN4o9//CN33HEHjz/+OL/61a+YMmUK8+fPxxjDv/71L+6++27uueeeb24rMTGRqVOn8vbbb3PmmWfy4osvcvbZZ3Peeefx0EMP8be//Y1x48Z96/4LCgr4/ve/z2effUZWVhZFRUUADBo0iM8//5zIyEg+/PBDfvGLX/Dqq6+26XOkEiYiIiLO3H///bz++usA5ObmsnHjRqKjo78ZdzV27Fg++OADwHtsswsuuIAdO3ZQXV3d5DG5rr32Wu6++27OPPNM/v3vf/P4448f8v7nz5/Pscce+81tJScnA1BcXMwVV1zBxo0bMcZ8s3etLamEiYiIhLnm7LHyh7lz5/Lhhx/y1VdfERcXx9SpU6msrCQqKuqbQz5ERERQW1sLwI9+9CNuu+02Zs6cydy5c/nd7373nds8+uijyc7OZu7cudTV1TFs2LBWZfv1r3/N8ccfz+uvv052djZTp05t7cM8KI0JExERESeKi4vp3LkzcXFxrFu3jvnz5x/2+qmpqQA8/fTTB73e5ZdfzsUXX8xVV131zXmJiYns37//O9edNGkSn332GVu3bgX45uvIhvf11FNPtehxNZdKmIiIiDhx8sknU1tby+DBg/nZz37GpEmTDnn93/3ud5x33nmMHTuWrl27HvR6l1xyCXv37uWiiy765rwrr7ySG2644ZuB+QekpKTw2GOPcfbZZzNy5Egu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\n",
|
||
"text/plain": [
|
||
"<Figure size 720x720 with 1 Axes>"
|
||
]
|
||
},
|
||
"metadata": {
|
||
"needs_background": "light"
|
||
},
|
||
"output_type": "display_data"
|
||
},
|
||
{
|
||
"data": {
|
||
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAlMAAAI/CAYAAABTd1zJAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAAsTAAALEwEAmpwYAABrKUlEQVR4nO3dd3gV5OH28e9zRhaEEcJMAmET9ghTUQQEVEQEcVfBXVdb62rrrq2t9dc6at171FkVt6IiIhtBZO8pG0J2csbz/gHyoiIEMp4z7s919WrGSfKFI+TmnJPzGGstIiIiInJ0PK4DRERERKKZxpSIiIhIJWhMiYiIiFSCxpSIiIhIJWhMiYiIiFSCxpSIiIhIJfhcfeH09HSbnZ3t6suLiIiIVNjcuXN3WGsbHux9zsZUdnY2c+bMcfXlRURERCrMGLPul96nu/lEREREKkFjSkRERKQSNKZEREREKsHZY6ZEREQiVSAQYOPGjZSWlrpOkRqWlJREZmYmfr+/wh+jMSUiIvITGzduJDU1lezsbIwxrnOkhlhr2blzJxs3bqRly5YV/jjdzSciIvITpaWlNGjQQEMqzhhjaNCgwRHfIqkxJSIichAaUvHpaK53jSkRERH5mYkTJ/K3v/3tqD42OzubHTt2HPXXnjx5MiNHjjzqj69pesyUiIiI/EgwGGTUqFGMGjXKdUpU0C1TIiIiEWbt2rXk5ORw6aWX0qlTJ4YNG0ZJSQkAgwYN2n+CyI4dO/jhaLZnn32W0aNHc+KJJ5Kdnc2///1v/vnPf9KjRw/69evHrl27AFi1ahUjRoygV69eDBw4kKVLlwIwfvx4rrjiCvr27cuNN97Is88+y9VXXw3A1q1bOf300+nWrRvdunVj2rRpAIwePZpevXrRqVMnHn/88UP+mkKhEOPHj6dz58506dKFf/3rXwCsXLmSoUOH0q1bN3r27MmqVasAKCws5IwzzqBDhw6cd955WGsBmDt3Lscffzy9evVi+PDhbN68ef/vy+9+9ztyc3PJyclh9uzZjBkzhrZt23LLLbfs73jxxRfp06cP3bt35/LLLycUClXuyoK9j1x38b9evXpZERGRSLR48WKnX3/NmjXW6/XaefPmWWutHTdunH3hhRestdYef/zxdvbs2dZaa7dv325btGhhrbX2mWeesa1bt7b5+fl227Zttk6dOvaRRx6x1lr729/+1v7rX/+y1lo7ePBgu3z5cmuttTNmzLAnnHCCtdbaCy+80J5yyik2GAzu/3xXXXWVtdbaM888c//HB4NBm5eXZ621dufOndZaa4uLi22nTp3sjh07rLXWtmjRwm7fvv1Hv6Y5c+bYoUOH7n999+7d1lpr+/TpY//3v/9Za60tKSmxRUVF9osvvrB16tSxGzZssKFQyPbr189+9dVXtry83Pbv399u27bNWmvtK6+8YidMmLD/9+XGG2+01lp7//3326ZNm9rvv//elpaW2oyMDLtjxw67ePFiO3LkSFteXm6ttfbXv/61fe655372+3+w6x+YY39h0+huPhERkUO4891FLP4+v0o/Z8dmdbj91E6HvEzLli3p3r07AL169WLt2rWH/bwnnHACqamppKamUrduXU499VQAunTpwoIFCygsLGTatGmMGzdu/8eUlZXtf3ncuHF4vd6ffd7PP/+c559/HgCv10vdunUBePDBB3nrrbcA2LBhAytWrKBBgwYHbWvVqhWrV6/mmmuu4ZRTTmHYsGEUFBSwadMmTj/9dGDvczz9oE+fPmRmZgLQvXt31q5dS7169Vi4cCEnnngisPfWrqZNm+7/mB/uluzSpQudOnXa/75WrVqxYcMGpk6dyty5c+nduzcAJSUlNGrU6LC/r4ejMSUiIhKBEhMT97/s9Xr3383n8/kIh8MAP/sR/gM/xuPx7H/d4/EQDAYJh8PUq1eP+fPnH/Rr1qpVq8J9kydPZtKkSUyfPp2UlBQGDRp0yKcUqF+/Pt9++y0ff/wxjz76KK+99hoPPPDAL17+p7/+YDCItZZOnToxffr0Q37Mgb/2H17/4eMvvPBC7rnnngr/OitCY0pEROQQDncLUk3Lzs5m7ty59OnThzfeeOOIPrZOnTq0bNmS119/nXHjxmGtZcGCBXTr1u2QHzdkyBAeeeQRfvvb3xIKhSgsLGTPnj3Ur1+flJQUli5dyowZMw75OXbs2EFCQgJjx46lffv2nH/++aSmppKZmcnbb7/N6NGjKSsrO+RjmNq3b8/27duZPn06/fv3JxAIsHz5cjp1qth1NGTIEE477TR+97vf0ahRI3bt2kVBQQEtWrSo0Mf/Ej0AXUREJIpcf/31PPLII/To0eOonn7gpZde4qmnnqJbt2506tSJd95557Af88ADD/DFF1/QpUsXevXqxeLFixkxYgTBYJCcnBxuvvlm+vXrd8jPsWnTJgYNGkT37t05//zz99869MILL/Dggw/StWtXBgwYwJYtW37xcyQkJPDGG29w00030a1bN7p3777/wfAV0bFjR+6++26GDRtG165dOfHEE/c/gL0yjN336Pialpuba3/4aQQREZFIsmTJEnJyclxniCMHu/6NMXOttbkHu7xumRIRERGpBI0pERERkUrQmBIRERGpBI0pERERkUrQmBIRERGpBI0pERERkUrQk3aKiMSYUDhEWaiMkkAxpWV7KC3ZRWnpLkpK8igp20NpeT6lZQWUlBdQGiiiNFBMaaCYklAJpaEySkPllIbLKQkHwMJVPa+lS/fxrn9ZcpSeffZZ5syZw7///e9DXmbYsGE0a9YMgEsuuYTrrruOjh07HtHXmjx5Mvfddx/vvfdepZqjjcaUiEgNCoQDlARLKA2WUhos3ftyqHTf6yWUlBXsHUBleygpy6e0vICS8iJKg/tGT7CEkmDp/sFTGg5QagMU2xClNkwplnJz5F1ea0m2kITZ+z/jJdnj4/twKVd98w9eTG1G89bDqv43RCLCs88+S+fOnfePqSeffNJxUXTRmBIROUqr8lbxzvL/UVy+h5KyAkoC/3/wlIZKKQn9MHoC+0ZPiCBH/kTJCWFLsg2TZC3JYUuStSQBSXioZ3wke3wkeRJI8iSQ7E0kyZdEsi+ZJH8KSf5aJCXUJjkhlaTEOiQl1CEpqR4pSfVJSk7b+7+UBvj9KQf92uu+n835H0/gyi+v48U6r1Gv4ZHdUiGVM3r0aDZs2EBpaSm/+c1vuOyyy6hduza/+c1veO+990hOTuadd96hcePGvPvuu9x9992Ul5fToEEDXnrpJRo3brz/cxUUFNC1a1eWL1+O3+8nPz+fbt26ce+99zJnzhzOO+88kpOTmT59OieddBL33Xcfubm5fPTRR/zxj38kFAqRnp7OZ599xqxZs/jNb35DaWkpycnJPPPMM7Rv397h75RbGlMiIkdh3pY5XPXJpZSEA9QJh0n6YeTsGz11wpbGdt/bwmGSMCR7/CR5EknyJpDkSyTZm0ySP5lkf22S/LVITqh9wOCpS3JSPRKT6uNNqgsJtSGx9t7/T6gNvoTDNpYFQxSWBikqC1FYFqSwLMiusiAFZUGKCoIUlgYpLCuhsGwtRfveX1gWpKgsSEFpkKLyIOEwXNrrOh7a9E9+8+65PH7WJyTWalQDv8MC8PTTT5OWlkZJSQm9e/dm7NixFBUV0a9fP/7yl79w44038sQTT3DLLbdw7LHHMmPGDIwxPPnkk9x777383//93/7PlZqayqBBg3j//fcZPXo0r7zyCmPGjGHcuHE8/PDD+8fTgbZv386ll17KlClTaNmyJbt27QKgQ4cOfPXVV/h8PiZNmsQf//hH3nzzzRr9vYkkGlMiIkdoyrrP+P3k39GkvJzHGhxDs2a9///QSawNCamQUOv/v5xYG3yJh/281lrKgmGKyvYOoC1lgb1DqChA4a4fhlEeBWU79l1m3zAq+2EY/f8xVFgWJBCq2K1gtRK81Er0UTvJR+3Evf/LSkshNdHHki0F/HVyU24aeBb3b32NW984jb+dNxlPBX49MePDm2HLd1X7OZt0gZP+dtiLPfjgg7z11lsAbNiwgRUrVpCQkMDIkSMB6NWrF59++ikAGzdu5KyzzmLz5s2Ul5fTsmXLn32+Sy65hHvvvZfRo0fzzDPP8MQTTxzy68+YMYPjjjtu/+dKS0sDYM+ePVx44YWsWLECYwyBQKDiv/YYpDElInIE3lv2JrfOuIO2ZeU80uFi0gbeQOm+AfTDmCksDVJUvO/WnbIiCsvyKCz7YQwFKSwP/v+Xf3KL0JEMoNpJvr0j6IcBVGvvAPrpMDrwMnvf7t3/tloJPjyeX36QVV5xOWMfmcYDM/pwSc9NPLn7azLeOJ3fnPU+mKN4cJZU2OTJk5k0aRLTp08nJSWFQYMGUVpait/vx+z7vfd6vQSDQQCuueYarrvuOkaNGsXkyZO54447fvY5jznmGNauXcvkyZMJhUJ07tz5qNpuvfVWTjjhBN566y3Wrl3LoEGDjvaXGRM0pkREKuilb5/gb/MfpHdJGQ/k3swjOwbw5K0fUR4MV+jjDxxAP4ye5rVS9o+cA0fPwQZQ7UQ/tRK9hx1AValeSgLPTujD6f+ZxquLxzG61WaeLFlNxvuXccbIQ9+qETMqcAtSddizZw/169cnJSWFpUuXMmPGjMNePiMjA4DnnnvuFy93wQUXcO6553Lrrbfuf1tqaioFBQU/u2y/fv248sorWbNmzf67+dLS0n70tZ599tmj+NXFFo0pEZHDsNbyn5l/49FlLzO4uIx7jruXWxe15M1vVnFKl6Z0bFbnRyMoNennYyjF762xAVTVstJSeGZ8b856fDrfbPktA9Ju4+4d02k65S8cc9yfXOfFrBEjRvDoo4+Sk5ND+/bt6dev3yEvf8cddzBu3Djq16/P4MGDWbNmzUEvd95553HLLbdwzjnn7H/b+PHjueKKK/Y/AP0HDRs25PHHH2fMmDGEw2EaNWrEp59+yo033siFF17I3XffzSmnnFI1v+AoZqw98p8sqQq5ubl2zpw5Tr62iEhFhW2Ye768iVfWfcTo4nJuHvo4136dwmdLt/G7oe24dkib/Xe5xLovlm7jkufncFybRAo8N7DRlvFcrz/Svut5rtOq3JIlS8jJyXGdUS3eeOMN3nnnHV544QXXKRHrYNe/MWautTb3YJfXM6CLiPyCQCjAzR9fxivrPmJ8cZAbRrzChZP8fL5sG38e3ZnfDG0bN0MK4IQOjbh7dGe+WF5K6+S7qIWXK+f8la3rv3adJhV0zTXXcPPNN//oLj6pPI0pEZGDKA4Uc8175/Lh1pn8rsRw4SlvMe7tAhZs3MO/z+nJr/q1cJ3oxDl9mnP1CW14dZ5heIM/UGQMV316OUW7VrtOkwp46KGHWLlyJe3atXOdElM0pkREfmJP2R4ue2cs03cv4Y6yZIaMeJvTXv6ejbuLeWZCb07p2tR1olO/H9aO03tk8J9pdTi/8eWs9MLv3x5LsCTPdZqIExpTIiIH2Fa8jfFvncbiwg3cZ9PpMPRNxrywitJAiFcu688xbdJdJzpnjOHvY7syoHUD7p/amovTT+Vrb5C/vH4qNhjfzzck8UljSkRkn/V71nHB/0bxfcl2HvG3otaAlzjz2UUk+b28fkV/umTWdZ0YMRJ8Hh79VS9aN6zN47MHcXZqD96weTzzvzPB0Q82ibiiMSUiAizdsYgL3hlDUXk+T9Xpxc5ODzP++QVk1k/hf1cOoFXD2q4TI06dJD/PTOhNrUQfE5f+ihMTMvhXyUo++vha12kiNUpjSkTi3pxNM5jw/nn4AsU812Q485rdxVWvLqBrZl1eu7w/jeskuU6MWM3qJfPMhN4UlYVZvOX3dDe1+dPmL5g3/Z+u02LKHXfcwX333ec6Q36BxpSIxLXJqz/kikmXkV5eyvOtf8W7CVdy6zuLGNy+ES9c3Je6KX7XiREvp2kdHjm/Jyu3BwiX3UoT4+PaJU+xbslbrtNEaoTGlIjErYmLX+a3U26kTVkZz3T/PY/uGcW/Ji1nbM9MHv1VL5ITvK4To8bAtg3529iufL3K0jbhFozxcOW0P7F7k56c+Wj95S9/oV27dhx77LEsW7YMgEGDBnHTTTfRp08f2rVrx1dffQXsPdJlzJgxjBgxgrZt23LjjTe6TI87GlMiEpdemPsQf5p9D7ll5Tza/x7uWNGL56ev47LjWnHfuK74vfrr8Uid0SuT605sx9sLkjmx7m/Z4vVw7UcTKNuz0XVa1Jk7dy6vvPIK8+fP54MPPmD27Nn73xcMBpk1axb3338/d9555/63z58/n1dffZXvvvuOV199lQ0bNrhIj0s6m09E4oq1loe+vpMnVr3J0JIAtw9+hKun1GLqys384aQOXH58a9eJUe2awW34Pq+Ep2bBlf3P54W8l/jTm6O597zJeBKj80H8f5/1d5buWlqln7NDWgdu6nPTL77/q6++4vTTTyclJQWAUaNG7X/fmDFjAOjVqxdr167d//YhQ4ZQt+7enzjt2LEj69atIysrq0q75eD0Ty8RiRuhcIg/f3YtT6x6k7ElIW458QUu/CSB6at38o8zumpIVQFjDH8e3Znj2zXksZldObfuYD72lvHAa6MgHHKdFxMSExMB8Hq9BIPBn739YO+T6qVbpkQkLgRCAf7w4UV8vHM+F5cazhz+BuP+t41Nu0t47PxeDO3Y2HVizPB7PTx8Xk/Oemw6L3wzgtM6f8/TJUvJeOs8zhzzX4iy8wwPdQtSdTnuuOMYP348f/jDHwgGg7z77rtcfvnlNd4hFaNbpkQk5hUHirl64jg+3jmf35cnceqwtxjz381sLyjjxUv6akhVg9qJPp4Z35v6KYl8uuIS+vsa8teChXz12c2u06JCz549Oeuss+jWrRsnnXQSvXv3dp0kh2Cso2eqzc3NtXPm6Kc8RKR65ZXmcdU7Z7CwZAt32DSyj32e8S8vJ9Hn4bmL+pDTtI7rxJi2clsBY/4zjYaplrT0W1kfLua5LtfQIfcK12mHtGTJEnJyclxniCMHu/6NMXOttbkHu7xumRKRmLW1aAvj/zeSpcVb+Ke/BWm9X+Sc55dQP8XPm78eoCFVA9o0SuWJC3LZsMtiSm4h1fi46tsH2bLiI9dpIlVGY0pEYtLavNVc8L9T2VK2m0dSu5Hf/mEuenkhbRrV5o1fDyArLcV1Ytzo26oB953ZjVlrfbQzN1Dk9XLVl9dRuOU712kiVUJjSkRizuJt33LhO2MpDRTxdKMhLGh0F797YxF9W6bx30v7kV478fCfRKrUqG7N+MNJHfhgSX2GpFzGap+H6987j0DBVtdpIpWmMSUiMWX2+ilc9OGvSAyW8mzLs5nouZK7P1jKyV2a8MyE3qQm6XgYVy47rhW/6teCl75pxejU0/nab/nLG6diy4tdpx2Uq8cUi1tHc71rTIlIzPh8xTtc8flVNC4v59nO1/DIztN49MtVnNu3OQ+d05NEn46HcckYwx2jOjE0pzHPzenHabX68qanhKdePx3CYdd5P5KUlMTOnTs1qOKMtZadO3eSlHRkh5vrp/lEJCa8veBpbv/mX3QqD3B/3zv54/zWTFqylWuHtOV3Q9tiouy5jWJZSXmIs5+YwbItexjW6RG+KFvLvfV6cdJpz7pO2y8QCLBx40ZKS0tdp0gNS0pKIjMzE7//x7diH+qn+TSmRCTqPTfzH9y39Hn6lwa4+7gHufrLVGav28Udp3biwgHZrvPkIHYUljHmP9MoKC2hU8u/sjiUx5PZ4+g56HbXaSIHpadGEJGYZK3l/sk3cd/S5xlWGuKuwc9ywcdJzNuwmwfO7qEhFcHSayfy3EV9AB8bt9xAM5PItatfZe38512niRwxjSkRiUqhcIg7P76cp9Z9wLgyuHbIa4x7q5j1u4p56sLejOrWzHWiHEbL9Fo8eWFvNu9JIKHoRjweH1fO/Ru71kx2nSZyRDSmRCTqlIfKueHdc3hz63QuDSQybtCbjH1lM4WlQV6+tB/HtWvoOlEqqFeL+jxwdg/mbahNu/A1bPN6uPazqyjdsdx1mkiFVWhMGWNGGGOWGWNWGmN+8WAlY8xYY4w1xhz0PkURkcoqChRx5f9G82neEm4I16PfMa8z7qU1JHg9vH7FALpn1XOdKEdoROcm3DayI5OWN+O4hF+xwGf449vjCBfvdJ0mUiGHHVPGGC/wMHAS0BE4xxjT8SCXSwV+A8ys6kgREYDdJbu45I2TmVO0nr94M2jS83nOf3EpTeom8eaVA2jTqLbrRDlKE45pySXHtuR/CzpzUvIwPvWHuf+1UyFY5jpN5LAqcstUH2CltXa1tbYceAU47SCX+zPwd0A/RyoiVW5LwSYufPNkVpTu4P5anSlu8x+ueGUxnTLq8Prl/WlaN9l1olTSH0/O4ZQuTXl13mCGJnXlGVPAq2+cEXHPQSXyUxUZUxnAhgNe37jvbfsZY3oCWdba96uwTUQEgNU7l/Grt0axPVDAI+nHsTDtLm5+ewnHtWvIS5f0pX6tBNeJUgU8HsP/ndmN3tlpvP/dufT1N+OvpWuY8sFVrtNEDqnSD0A3xniAfwK/r8BlLzPGzDHGzNm+fXtlv7SIxIFFm2cz/r0zKQ+W8GTzMbxvr+a+T1dweo8Mnrggl5QEn+tEqUJJfi9PXJBLZv1azFpxFW09qVy/fQpLpv7ddZrIL6rImNoEZB3weua+t/0gFegMTDbGrAX6ARMP9iB0a+3j1tpca21uw4b6aRsRObSZaz7loo8vJiVQztMdruCxbWN4dtpaLjqmJf83rht+r34gORbVS0nguQl9SPCmsHXL76lrErhq2XNsWfi66zSRg6rI30SzgbbGmJbGmATgbGDiD++01u6x1qZba7OttdnADGCUtVZPby4iR23S4lf49ZfX0SwY4Mmet3Dn0n5M/PZ7bhzRnltH5uDx6HiYWJaVlsLT43PZUVCblMLfUeL18usZt1GwfobrNJGfOeyYstYGgauBj4ElwGvW2kXGmLuMMaOqO1BE4s//vvkPv591NzmBIP/udx9XT89m6ort/G1MF64c1Ebn7MWJrpn1ePi8Hny3qQHtgpey1ufl9x9fTGD3WtdpIj+is/lEJKI8/fVd/Gvl6xxTFuLm457g4vcDbNhdwkPn9GB4pyau88SBl2au409vLeTkTjP5KvwWpwd83HneF5jkeq7TJI7obD4RiXjWWv456Tf8a+XrjCiH3x//Mue8Vcq2/DKev6iPhlQcO69vC64c1JoPFvXlhIRjeMsf5InXRkEo4DpNBNCYEpEIEAwHuf39C3lm0+ecFUjg/GNfZdyr2wiELK9c3o9+rRq4ThTHbhjentHdmzHx25EM8LflIXbz3pvngKN7V0QOpDElIk6Vhcq4/u0zeGvnPK4Ip3J8n1c4++X11Eny8+av+9OpWV3XiRIBjDHce0Y3+rdK5/NF4+nqTee24qXM/viwz8ojUu00pkTEmcKyAq58/RQ+K1jFzd6mNO/6AhNeWUHL9Fq88ev+tGhQy3WiRJAEn4dHf9WLlul1WbDqGpqZZH77/UesnvGQ6zSJcxpTIuLEruLtXPzGCL4p3cI9ye0JtHiYa15fSq8W9Xnl8n40Sk1ynSgRqG6yn2cn9CHFX4ddW36Hz+PnyoX/YefSd12nSRzTmBKRGrd5zzoufOMkVpXncX9af5bWuZs73l/OsI6Nee6iPtRJ8rtOlAjWrF4yz4zvQ35xA2rlX8lOn49rv7qRku/nuU6TOKUxJSI1avW2hfzq7dPYGSzh0cxRfBS8hn9PXsXZvbP4z3k9SfJ7XSdKFOjYrA6PnN+T5VuyaFt+Pt/5vfzhvV8R2rPRdZrEIY0pEakx322YyoUfnEswVM4T7SbwxJax/HfWBq46oTX3jOmCT8fDyBEY2LYh94zpwrTVnelthvNZouGfr4+GsgLXaRJn9DeXiNSI6csncvFnv6ZWKMjjXW/grkXH8PGirdw2siM3DO+gZzWXozIuN4vfDW3HZ0sG09fbg+f9Zbz86mkQCrpOkziiMSUi1e6TBc9y1bQ/khkM8e/ce/jt122Yu24395/VnYuObek6T6LctUPacFZuFpMWjqO7N4u/h7cx+e0L9RxUUmM0pkSkWr0+8z6u/+Y+Ogcsf+v3Hy7+pA5rdhTx5IW5jO6R4TpPYoAxhrtP78xx7RozbclltPbU48b8+Sz67E+u0yROaEyJSLV57stbuGvpcxwTNNw44FnOeyfInpIAL13al0HtG7nOkxji93r4z3k96dC4AcvXXENdTyJXr3ub7+c86TpN4oDGlIhUi29Xf8L/rXmbE4M+JvT9L+e8tgufx/D65f3p2by+6zyJQbUTfTwzvjd1ExuSv/laSr0+rpp3H/krP3WdJjFOY0pEqlx5sIzbvrqZxqEwwzs+yPmvbqBRnUTe+PUA2jZOdZ0nMaxRnSSendCbktKm1Mm/mLV+P9d9fi2BrYtcp0kM05gSkSr32CfXsJoA59Uexq8n5pPTtA6vXzGAjHrJrtMkDrRtnMrjF+SyZms7WpeNYWaijzvfORtbsNV1msQojSkRqVJL13/FU9umcUoomb8uGEr/1g14+ZK+pNVKcJ0mcaRfqwb8Y1xX5qzpQ7fwQN5JhMdeGwXlRa7TJAZpTIlIlQmEyrnti+uoF7ZsLbiSOsmJPHROT2ol+lynSRw6rXsGN43owNRlJ9PNdOBhXzHvvnYGhEOu0yTGaEyJSJV57rPrWUIpY33H8MXmhvz5tM66RUqcuuL4VpzfrwVTF59PB9OY24IbmD3xUj0HlVQpjSkRqRKrv5/NI99/zuBgAg8vO41TujTlpC5NXWdJnDPGcMepnRia04y5y66gmanNb3bNZPWXd7tOkxiiMSUilRYKBbl90tUkhy1FhVeQkpTAnad1cp0lAoDP6+HBc3rQpWkTVq+9Gr8ngStXvsyOb19ynSYxQmNKRCrtlS//yHxbzFhvLpM2N+POUZ1Ir53oOktkv5QEH0+N703D5AxKt1zOTp+Pa2b+mZK1X7lOkxigMSUilbJh6wIeWP8BA4I+Hl9xBiM6NWFkV929J5EnvXYiz07oTXl5K+rtOZ/FCX5u/vgyQjuWu06TKKcxJSJHzVrLnZ/8Go+1UHwZiQmJ/Hl0Z4wxrtNEDqpVw9o8eWEu67d3pWXpCD5P8vHwexNcZ0mU05gSkaP2vyl3MDOcz1hPVz7e1Jw7R3WiYaru3pPI1qtFGg+c3Z1v1w2ic3kTXgnnUbZjhessiWIaUyJyVLbuXMZ9q9+kV9DLsyvOZmhOY0Z1a+Y6S6RCRnRuyq2ndGTV5oEUeD1MnnW/6ySJYhpTInLErLXc/dGlBLHUKpmA15fEX0/X3XsSXS46tiW5rU+mftAw8fuv9NxTctQ0pkTkiH04/e9MDu5mjCeH9ze24fZTO9GoTpLrLJEjdn7fbOrlt2CaL8yuNZNd50iU0pgSkSOyM28t9yx7kc5Bw8srz2dwh0aM6ZnhOkvkqPRr1YD8wCiCxvDhvEdc50iU0pgSkSPytw8uoshAg9ILwJvMX0/vorv3JGp5PIaTug6kaZmPd3cthFDAdZJEIY0pEamwz2c9wEeB7YymFe9tyOHWUzrSpK7u3pPoNqZHBr49nViU4GXNdy+7zpEopDElIhWSX/A9dy96knZB+N/qCRzXriHjcjNdZ4lUWtvGqXiSzsRjLe8uetF1jkQhjSkRqZD73r+IXcaSUXouQZPC38bo7j2JHWN6dKF5cW3eL91EuHiX6xyJMhpTInJY0755grfKNnEqWUzc0JU/nZJDs3rJrrNEqsyo7s0ozu/L9z4vc+f8x3WORBmNKRE5pOKiHdz57YNkh+CDNRdxbJt0zu6d5TpLpEql104ks/EZJIct765613WORBmNKRE5pPvfn8BmY2ldNpZSm8o9untPYtS4Xq1pVtCQTymkVIcfyxHQmBKRX/TNghf5b8laTrZNeXtdb24+OYestBTXWSLVYmhOY/KKhlDo8TB51gOucySKaEyJyEGVluRx+5x7aRayfLbuEvq3asB5fZq7zhKpNkl+L33bjqR+0PCujpeRI6AxJSIH9cgHF7PWa+lYPorCUF3+PrYrHo/u3pPYNqZnFvXzs/ceL7N2susciRIaUyLyM4uWvMlzBcsYGk7nrbXHcPNJHWjeQHfvSezrnZ1GYWjf8TLf6HgZqRiNKRH5kUBZIbdNv4u0MEzfcCl9Wqbxq34tXGeJ1AiPx3By14E0K9XxMlJxGlMi8iNPfnApy71hugWGkxeoz726e0/izOk9MvDl7z1eZvV3/3WdI1FAY0pE9lux/H0e3/Mdx4fr8daawdwwvAPZ6bVcZ4nUqFYNa+NLOQuPtby36AXXORIFNKZEBIBQoJTbv/4TqRa+2XApuS3qM35AtussESfO6Ln3eJn3SjcRLtntOkcinMaUiADw4odX8J0nRK/yE9hZ3pB7z+iKV3fvSZwa2bUZZQV92OzzMne2jpeRQ9OYEhHWr/mCh3bOoV84lbfWDOf6Ye1p1bC26ywRZ+rXSiCryZl7j5dZreNl5NA0pkTiXDhYzu2TryMBWLbpEno0r89Fx7Z0nSXi3LherckoaMintoDSnStd50gE05gSiXOvf3INczxB+gSOYUtpU/6hu/dEADihQyP2FP9wvMz9rnMkgmlMicSxzRum8c+tU+kZSubt1SP53dB2tGmU6jpLJCIk+rz0a3fq3uNlNul4GfllGlMiccqGgtw56VoshvWbL6FbZn0uHai790QONLZXc9LyW/C1L8TOdVNc50iE0pgSiVPvTvo9X3vK6B/szabiLO49oxs+r/5KEDlQz+b1KA6fRsgYPpqrn+qTg9PfnCJxaMf3c/n7pkl0DiXyzqrTuXZIG9o30d17Ij9ljOGUbsfTrNTHxN3fQSjoOkkikMaUSLwJh/nrJ1dS6jHs2DqBzhn1ufz41q6rRCLW6T0y8Od3ZLHfy+qFOl5Gfk5jSiTOfPLFH/jUFDMg0I21hS35xxnd8OvuPZFf1LxBCkm1z8ZrLe/qeBk5CP0NKhJH8rYt5C/r3qNdyM+7q87k6hPaktO0jusskYg3pmc3mhfX5v2SjYRL8lznSITRmBKJF9Zy74eXku8xFGz7FTlN07jyBN29J1IRp3RpSln+vuNl5uiB6PJjGlMicWLKl3fyLoUMCOawOr89943rqrv3RCqoboqflhln7z1eZpWOl5Ef09+kInGgcOcK7lr9OtlhHx+sOpcrB7WmU7O6rrNEosoZ+4+Xyad01yrXORJBNKZEYp21/Ov9i9juMYR2nEP7xg24enBb11UiUef49g0pKB2693iZmf9ynSMRRGNKJMbN/vpeXrN59A+2ZtnuzvzjjG4k+PRHX+RI+b0ejmk/irSgYaKOl5ED6G9UkRhWsnsdty97noywh09WXcAVx7eiS6bu3hM5WmN7ZZGW34JpvhA7133lOkcihMaUSKyyln+/P54NPg/+HeNo3TCda4fo7j2RyuiSUZdSRu89XuYb/VSf7KUxJRKjFsx6iBeD2+kXbM6iXT34x7huJPq8rrNEopoxhpHdjyej1MfEXTpeRvbSmBKJQeX533PbwsdoaD18vupCLj2uFd2z6rnOEokJo/cfL+Nh9cJXXedIBNCYEolBj787nlU+Dym7RpPdoBG/G9rOdZJIzMiol0ytOufgtZaJi553nSMRQGNKJMYsm/s4TwW+JzfYlO929OXeM7qR5NfdeyJVaUyvbrQorsUHJRsIl+5xnSOOaUyJxJBg4TZunfcAdayHr1ZN4OJjWtKrRX3XWSIx56TOTSgv0PEyspfGlEgMefa9i1ji91Av72Sy0pry+2HtXSeJxKTUJD+tMs8lOWyZuHKi6xxxTGNKJEas+fYFHilZS/dQQxZsG8i9Z3QlOUF374lUl3G5rcksTGeSzad012rXOeKQxpRIDAiX7Ob22X8nCcPMVRMYPyCb3tlprrNEYtqxbdIpKtl3vMys+13niEMaUyIx4L/vXsQ8v6HRnqE0qZvJDcN1955IdfN5PRybM5q0AEzcNEXHy8QxjSmRKLdx0es8ULScTqH6zNsyhHvP6EpKgs91lkhcGNMriwYFLZjmDbJz3VTXOeKIxpRIFLOl+dw5/S6M8TBvzQQu6J9Nv1YNXGeJxI2OTesQ9JxOyBg+1PEycUtjSiSKvfX+pczwQ0b+cTSs3YKbRnRwnSQSV4wxnNJ90L7jZRboeJk4pTElEqW2LX2X+/YspF2oDt98P4J7x3alVqLu3hOpaaN7ZJCQ35Elfg+rF+l4mXikMSUShWxZIX+e+kfKPR4Wrx3PeX2zGdAm3XWWSFxqXCeJOvXP3Xu8zEIdLxOPNKZEotBHH17JZD80L+hHWkpr/nByjuskkbg29kfHy+S7zpEapjElEmV2rZzEPbvm0CpUi282jeJvY7tQW3fviTg1vFMTgoU6XiZeaUyJRJNACX+b/HsKPB5Wr7uAs3u3YGDbhq6rROJeSoKPNs3P33u8zCodLxNvNKZEosgXH13Lh/4wLYt6UTupPX88RXfviUSKcb1ak1WQzqfhPZTuXus6R2qQxpRIlMhfO4U/b/ua5qEkvtkwlnvGdKFOkt91lojs0791A0rKh1Lk8fDFzH+5zpEapDElEg2CZfzfpN+wy+thw4ZfMa5XCwa1b+S6SkQO4PUYju14Og0CMHHTl65zpAZpTIlEgWmfXM///EFaFncl2d+RW0Z2dJ0kIgcxtmdz0gpaMN0bZIeOl4kbGlMiEa54wyzu3DyJpuEE5m04k7+e3oW6ybp7TyQStW+SivXuPV7mo28edp0jNURjSiSShQI88Mmv2ez1sn3jOYzpns2QnMauq0TkEEb2HExmqY+JOxdAOOQ6R2qAxpRIBJs36Y/811tG65IO+Dzdue1U3b0nEulGdWtGoo6XiSsaUyIRquz7+dy24T0a2gTmrT+Xv4zuTL2UBNdZInIYDVMTqdfgPB0vE0c0pkQiUSjIIx9exlq/j7xNZzCqa0uGdWriukpEKmhMr+5kF9fi/eL1hMsKXOdINdOYEolAiybfwbPeYlqXtMLQmztGdXKdJCJHYFjHxoQK+7DF52XObB0vE+s0pkQiTGDrIm5b/QZ1rI/568/nz6d1Jq2W7t4TiSZJfi8dsn+173iZd1znSDXTmBKJJOEQT71/CcsT/JRsHs0pnVtzUpemrqtE5CiMzd17vMyk8B5KdLxMTNOYEokgK6fcw2OeAlqWZhEKHcNduntPJGr1yU6jfN/xMpNn6XiZWKYxJRIhQjtXcPvyF0mxXr5bfwF3ndaJBrUTXWeJyFHyeAzHdR6793iZjTpeJpZpTIlEgnCYFydexIJEP8GtIxneoS2n6O49kag3plcWDfKb7z1eZv3XrnOkmmhMiUSA9dP+j3+zixZlTSgtP44/j+6MMcZ1lohUUuuGtTGJZ+w9XmaujpeJVRpTIo6Fd63h9sVP4TFeFq0fz12jOtMwVXfvicSKUT1PILPUxzs7v9XxMjFKY0rEJWt5492LmJPox7NtGEPbtWdUt2auq0SkCo3s2oyk/ByW+j2sWvSa6xypBhpTIg5tmfkw/wxvI7M8naKSE/mL7t4TiTlptRJIa3jBvuNlnnOdI9VAY0rEEZu/mTu//TdB42HZ+vHccWonGtVJcp0lItXgjF7dyC6uxQfF6wmXFbrOkSqmMSXiyOeTbmBqkp/EHcczqHVHTu+R4TpJRKrJ4JxG2KJ9x8vM0fEysUZjSsSB0M6VPLRzDo2CieQXnsxfT++iu/dEYliiz0tOqwtICVsmrtTxMrFGY0rEgfcn3cCqBD95W0Zw6yldaFJXd++JxLpxua3JKmjApHAeJbvXuc6RKqQxJVLDAlu+4+GCpTQpT6ZR7RM5o1em6yQRqQE9m9cnGBq273iZ+13nSBXSmBKpYW98dj3f+31s23IaN47IwePR3Xsi8cAYw/H7jpd5Z+Nk1zlShTSmRGpQ8fppPFa6gWaldWjX8AQGtWvoOklEatCYnlmk5zdnhjfAjg3TXedIFdGYEqlBL3/xB3b6vGzccgY3jeigB52LxJkWDWrhT9p7vMwHc/7tOkeqiMaUSA3Zs/wjng7tILO4AX1bHEtudprrJBFxYGSvwWSVenl357cQDrvOkSpQoTFljBlhjFlmjFlpjLn5IO+/whjznTFmvjFmqjGmY9WnikQxa3lu6h0UeD2s2XIW1w9r77pIRBwZ2aUZSQUdWeo3Ol4mRhx2TBljvMDDwElAR+Ccg4yll621Xay13YF7gX9WdahINNux8HVeNAVkFjTlxA796NisjuskEXGkboqfRjpeJqZU5JapPsBKa+1qa2058Apw2oEXsNbmH/BqLcBWXaJIlAuHeWLm3ykzhtXbz+G6E9u5LhIRx8b27kHL4lq8X7xOx8vEgIqMqQxgwwGvb9z3th8xxlxljFnF3lumrq2aPJHot+mbp3nNV0bT/GzGdMulZXot10ki4tjx7RpCUR+2+rzMnvuI6xyppCp7ALq19mFrbWvgJuCWg13GGHOZMWaOMWbO9u3bq+pLi0SuUID/zHsQg2HtznP5zZC2rotEJAIk+Dx0bnMhKWHLOyvedp0jlVSRMbUJyDrg9cx9b/slrwCjD/YOa+3j1tpca21uw4Z6fh2JfatmPMh7/jANdrfjgr49dGyMiOw3NrcNzQsa8Fk4j5K89a5zpBIqMqZmA22NMS2NMQnA2cDEAy9gjDnwn9unACuqLlEkSgVK+feip0m0hs355/Lr41u7LhKRCNItsy7h0DCKPR6+mPkv1zlSCYcdU9baIHA18DGwBHjNWrvIGHOXMWbUvotdbYxZZIyZD1wHXFhdwSLRYuHUe5iU6CF1V1cuPaYr9WsluE4SkQhijGFQ1zNoEICJOl4mqvkqciFr7QfABz95220HvPybKu4SiW5lBTy44nVSfT52l5zNxQNbui4SkQh0es8svvw2ixlp69mxcSbpmX1dJ8lR0DOgi1SDWV/czvREL/4dfbhqUGdqJ1bo3y0iEmcy66eQlHzmvuNlHnKdI0dJY0qkitminTyw4UPqB72Uh87gvL7NXSeJSAQblTtk7/EyO+breJkopTElUsUmf34zCxJ8hLcfx++GdiLJ73WdJCIR7KQuTUgpyGGp37By8euuc+QoaEyJVKHwnk08uGUqDQN+EvynMabnz57fVkTkR1KT/DRpMn7v8TLf6XiZaKQxJVKFPph0AysTfBRvO5Hrh3XE59UfMRE5vLG9e9CqOIUPitcSLi9ynSNHSH/Ti1SRwI4VPLx7Hk3KE2mQejIjOjVxnSQiUWJgm3RMcd+9x8vM+Y/rHDlCGlMiVeStz65no9/H7i0juXF4Rzwe4zpJRKKEz+uhc7sJOl4mSmlMiVSBks3zebRwBRmltWjVaBjHtU13nSQiUWZcr9a02H+8zAbXOXIENKZEqsArn9/Idp+XLVtO56YRORijW6VE5Mh0alYHY/cdLzNLx8tEE40pkUoqWPcVT5VtpHlxXXKzB9OrRX3XSSIShYwxDOp2JukBeGfDF65z5AhoTIlU0nOT/8Qer5f1W8/k+uHtXeeISBQ7vUcWDQuymOENsGPjTNc5UkEaUyKVsHPZBzwf3kmLwoYM6TCQDk3quE4SkSjWpG4StWqdRVjHy0QVjSmRo2UtT067i3JjWLPtXH53YjvXRSISA07NHULzUi8TdbxM1NCYEjlKmxe+yqumkIz8DEZ370uLBrVcJ4lIDBjeqQkphTks8xtWLnnDdY5UgMaUyNEIh3lk1r0ArNt9PtcOaes4SERiRa1EHxlNJ+C1lncWPOs6RypAY0rkKKz55gne8ZbTJK8V5/XJpXGdJNdJIhJDxvbuQeviFD7U8TJRQWNK5EiFgvx73sMkWsPG/F/x6+Nbuy4SkRgzoHU63pIfjpd5xHWOHIbGlMgRWjzjX3ySYEnblcNlx3anXkqC6yQRiTFej6Fr+73Hy7yt42UinsaUyJEIlPLg4ueoHYLtJecx4ZiWrotEJEaNy21Li4IGfB7eTcmeja5z5BA0pkSOwJyv/sLXCYbaO3ty9QldqZXoc50kIjGqfZNUfOw9XubzmTpeJpJpTIlUkC0t4MFVb1I/ZCgKncO5fZu7ThKRGHdC97N0vEwU0JgSqaCvJt/CvAQvvu0D+N3QTiT6vK6TRCTGndYjk0YFWcz0lrNj4yzXOfILNKZEKiBctIMHN35Kw4AX4z+TMT0zXSeJSBxolJpEau0fjpd50HWO/AKNKZEK+Pizm1jm9xLYfgI3DMvB6zGuk0QkTpzaeygtdLxMRNOYEjmMwJ6N/HvbNJqW+6mXejrDOzVxnSQicWRYxybU2ne8zIolb7rOkYPQmBI5jHcm/Z71fh8F207ixuE5GKNbpUSk5iQneMnMuAivtUxc8IzrHDkIjSmRQyjdsYxH8r4jszSJFg1HcmybdNdJIhKHzujdk9bFyXxQvI5QmY6XiTQaUyKH8OqkG9jm87J962huHNFBt0qJiBN9W6aRUNqPbT4Ps7951HWO/ITGlMgvKNz0DU8Wr6RFcW16ZA+nZ/P6rpNEJE55PIZuOReREra8s/wt1znyExpTIr/ghck3kef1smnrOK4f1t51jojEuTN6tSW7IG3f8TKbXOfIATSmRA5i95ovea78e1oW1ueEnMG0b5LqOklE4lybRrVJ8Azfe7zMLB0vE0k0pkQO4skpt1BiDOu2n8Nvh7ZznSMiAsDg7mfTMADvrP/cdYocQGNK5Ce2LHuXV8K7yS5owqjuA2neIMV1kogIAKO6H3i8zGzXObKPxpTIgazl0Wl3Yw2s2XU+1wxu47pIRGS/BrUTqVdn7/Ey7+l4mYihMSVygHULXuZtU0RmXnPO69uPRnWSXCeJiPzIqD7DaFHq5d0d88Ba1zmCxpTI/xcO8/Cc/8NvYUP+BVxxXGvXRSIiPzO4QyNqF+Ww3G9YseR/rnMEjSmR/ZbNeZQPfQGa7G7LJQNzqZvid50kIvIzSX4v2ZkX47WWdxY87TpH0JgS2SsU5MEFj1I7BFuKL2TCMdmui0REftEZffYeL/Nh0VpC5cWuc+KexpQIMG/aP5jit6Tt6szVg7uTkuBznSQi8ot6tahPUtkPx8s85jon7mlMSdyzgVLuX/YS9UKQF7yAc/o0d50kInJIxhh6dLyYWiHL28v0uCnXNKYk7n095U6+8RtSdvTmuhO7kODTHwsRiXxn9GpLdmEan4d3UZyv42Vc0ncNiWvh0nweWDORhkFD2Hcuo3tkuE4SEamQ7PRaJHtHUOLx8PlMHS/jksaUxLVPv/gjS/0ePNsGcv3wzng9xnWSiEiFDe5xNg0DVsfLOKYxJXErWLSdf2/6nKblXmrVOZthHRu7ThIROSKnds+kcUFzZnnL2b5Jx8u4ojElcevdSTew1u+lbNswbhqegzG6VUpEoku9lAQa1DubsDG8P+ch1zlxS2NK4lJZ3gb+s2MWzcsSyGh8OgPapLtOEhE5KnuPl/Hw7nYdL+OKxpTEpdcn/Z4tPi95W0dy4/Ac1zkiIkdtUPtG1C3qyHI/rFjyluucuKQxJXGnaPtSHs9fSMviZDpnn0r3rHquk0REjlqCz0Or5j8cL/OU65y4pDElceeFz65nt9fLtm1juX5Ye9c5IiKVNqZPL9oUJ/NBsY6XcUFjSuJK3qa5PFeyhtaFqRyTM4K2jVNdJ4mIVFr3rHqklPdju9fDLB0vU+M0piSuPD35RoqMYdOOc/jt0Lauc0REqoQxhp6dLtl3vMybrnPijsaUxI1tq7/g5fIttClI5+TuJ5CVluI6SUSkyozt1Zbswvp8Ed6t42VqmMaUxI3Hpt5KyBjW7foVVw/WrVIiEluy0lKo7T9p7/Eys+53nRNXNKYkLmxY+g7/C+fRck9Tzu53DA1TE10niYhUuaE9z9HxMg5oTEnss5aHp/8Fr4WN+eO57LjWrotERKrFyd0yaVqQxSxPGdu/n+s6J25oTEnMW/7t83xgimmel82Egf2om+x3nSQiUi3qJPlpmHYeYWN4b/aDrnPihsaUxLZwmIe+uZ8UC5uLJzB+QLbrIhGRajWq74lkl3p4d8c3Ol6mhmhMSUybP/shJnuDNNnZgSuH5JKc4HWdJCJSrQa2bUi94hxW+GD50rdd58QFjSmJWTYY4MGFT1EvBLvC4zkrN8t1kohItfN7PbRqcSlea3n7Wx0vUxM0piRmTZ/2N2b7LPV3dON3J3Ynwaf/3EUkPozrm0vb4mQ+Kl5DqLzEdU7M03cXiUk2UMqDK16lYRBKfeMZ1S3DdZKISI3p1KwOtX84XmaejpepbhpTEpM++/I2FvkMSdv7ccOILng9xnWSiEiNMcbQq8tle4+XWarjZaqbxpTEnFBpPg+te59m5R4SU3/F0JxGrpNERGrc2Nw2tCyszxfhXZQUbnOdE9M0piTmvPf5Taz2ebDbBnHjiE4Yo1ulRCT+NK2bTAN/X0o8HhaveNd1TkzTmJKYUl64lf9snkLzMh+NmpxD/9YNXCeJiDjTO2cUALPXfOW4JLZpTElMeeOzG/je56F46whuHN7BdY6IiFP9c3qQHrQsylvhOiWm+VwHiFSV4rx1PL5zLq3Kk2maPZaumfVcJ4mIONW6YW0alyWzMnGP65SYplumJGa8NOk6dno97N52GtcPb+86R0TEOa/HkEYmG32G/N1rXefELI0piQl7ti3imYKltCuqRd+cUbRplOo6SUQkIjSp2xOABcvfc1wSuzSmJCY88/kNFBrDlu1n8tsT27nOERGJGB1bnwLA3HXTHJfELo0piXo7Ns7ipZJ1tC+sx7Cew8mol+w6SUQkYvRp24EmAcuSgtWuU2KWxpREvce+vJmAMWzcdR5XndDGdY6ISETJSkumYVktVlLgOiVmaUxJVNu46lPeCGyj3Z6GnNFvMOm1E10niYhEFGMMDTwt2OrzsHP7Ytc5MUljSqLaI1/fgcfCpoLxXHpcK9c5IiIRqVlaHwDmL3vfcUls0piSqLVy8Zu8G95D67wMLhh4LHWS/K6TREQiUpd2J2OsZe6GGa5TYpLGlEQna/n3rL+RYmFz6UVcOCDbdZGISMTq3boVGQHDsqL1rlNiksaURKXv5j/NZ6aUrF2tuGJwP5L8XtdJIiIRq3GdJNLL67DSU4wNh13nxByNKYk+1vLgvH9TL2TZEb6EM3OzXBeJiES8Br6W7PJ62Lp5ruuUmKMxJVFn5sx/McMbpPHOjvz2xF74vfrPWETkcJqnDwDgmxUfOi6JPfouJFHFhoLcv/hZ0oOWIt8lnNq1meskEZGo0D3nZLzW8s3GOa5TYo7GlESVL6bezUKvpd72Xlw/ohsej3GdJCISFXpmNyOz3MOK0o2uU2KOxpREjVB5MQ+ufINmATB1LmZwh0auk0REoka9lATSA/VY6SnDhoKuc2KKxpREjQ++vJVVPkPCtmO4aUQnjNGtUiIiRyLd34Z8r4cNG6a6TokpGlMSFQIleTy84SOal3mo3/hC+rZq4DpJRCTqZDc5DoA5Kz52XBJbNKYkKrz5+Y1s8noIbxvMjSM6us4REYlKPToMIzFsmb95vuuUmKIxJRGvpGALj239mjYlPlpmn0/njLquk0REolL3Fo3IKPeysnyz65SYojElEe/lSdexw+uhcPsp/H54e9c5IiJRq1aij/RgA1Z6A4QCpa5zYobGlES0/F2reTrvWzoUJdIz50xaN6ztOklEJKo1TOpAicfD6rWfuU6JGRpTEtGe/ez35Hs87Ngxlt8Mbes6R0Qk6rVqNgiA2Ss0pqqKxpRErB1bFvBi4XI6FtRicM/TaFYv2XWSiEjU691xCMlhy3fbF7hOiRkaUxKxnp58M+XGsHX3uVw5qLXrHBGRmNAxox6ZZT5WBra5TokZGlMSkfJ2LOf1knXkFNRhVL8RNKid6DpJRCQmJPq8pIcbsdobJlBa4DonJmhMSUT675Q/UerxsKtgLJcObOk6R0QkpjRK6US5x7B8lZ68sypoTEnEKS7YzEt7FpNTmMQpfUeRmuR3nSQiElPaZg0FYNbKzx2XxAaNKYk4b355C3s8HgrzTuaC/i1c54iIxJw+OcdQJxRm4a7FrlNigs91gMiBAqX5PLdtBm3L/fTqfhb1UhJcJ4mIxJy2jevQrCyRVf6drlNigm6Zkojy/ld3sNXrIbTrBC4Z2Mp1johITPJ5PTSwTVjrs5QW7XCdE/U0piRihIPlPL3hU1qUQYe2F9K4TpLrJBGRmNU0tRshY1i04n3XKVFPY0oixhfT72WNFxJ39uGKE/Rs5yIi1al9y+EAzFr9peOS6KcxJRHBhsM8ueINmgQsTbIuo2V6LddJIiIxrW+H3qQFwyzJW+46JeppTElEmP3NYyz0hkjb1Ylfn9DBdY6ISMzLbpBC07JkVoXzXKdEPY0piQhPLnya+sEwyQ2uoHNGXdc5IiIxzxhDuslggw8K92xwnRPVNKbEucWL32C6KSVzdysuH9TVdY6ISNxoWrcn1hgWLNOD0CtDY0qce2ru/dQKhwkmXUq/Vmmuc0RE4kanNqcAMGvtVMcl0U1jSpxat3Yyk0J5tMlrxqWD+2KMcZ0kIhI3+rbvRKOAZXnBKtcpUa1CY8oYM8IYs8wYs9IYc/NB3n+dMWaxMWaBMeYzY4zOAJEKeXb6X/BZKAxPYEiHRq5zRETiSpM6STQpr8VK8l2nRLXDjiljjBd4GDgJ6AicY4zp+JOLzQNyrbVdgTeAe6s6VGLP9q0LeKdsMzn59bnghOPweHSrlIhITTLGkO7JYrPPw+4deoqEo1WRW6b6ACuttautteXAK8BpB17AWvuFtbZ436szgMyqzZRY9MKU2wgBe0rP5dRuzVzniIjEpYy0PgDM04PQj1pFxlQGcODPTG7c97ZfcjHwYWWiJPbl563jtcIVdCqsxRkDT8Lv1cP3RERc6NphJABz1k9zXBK9qvQ7mDHmfCAX+McvvP8yY8wcY8yc7du3V+WXlijz6pe3UOTxUFQwmjNzs1zniIjErT6t29Cs3LK8aJ3rlKhVkTG1CTjwu13mvrf9iDFmKPAnYJS1tuxgn8ha+7i1Ntdam9uwYcOj6ZUYUFq8kxd2fkNOkZ9h/caRnOB1nSQiErfSaiXQOFCHVaYIrHWdE5UqMqZmA22NMS2NMQnA2cDEAy9gjOkBPMbeIbWt6jMllrw95XZ2ez0E9gzj/H76wU8REdfSfdns8HnYtmW+65SodNgxZa0NAlcDHwNLgNestYuMMXcZY0btu9g/gNrA68aY+caYib/w6STOBQMlPPP9ZNqUGHp3u4C6yX7XSSIica95en8A5iz7wHFJdPJV5ELW2g+AD37yttsOeHloFXdJjPr467/wvdfQfvcxXHJuK9c5IiIC9Mg5Be/Mx/hm42xOdh0ThfQjVFJjbCjEU6snklVuadfuMhrVSXKdJCIiQK9WzckoN6wo1YHHR0NjSmrMV7MfZIXXUmdnDy4f1M51joiI7FM70UejYD1WeUqxoZDrnKijMSU15sklL9AoEKZh1pW0aFDLdY6IiBygYUIb9ng9bNw03XVK1NGYkhrxzbfPM88ToOnu9vz6hE6uc0RE5CeyGx8LwKxlHzkuiT4aU1Ijnpr/H+qGwiSlXUnHZnVc54iIyE/kdjoJv7Us2PyN65SoozEl1W75yg+ZQhGtdmdx2eCernNEROQgumY1JrPMw8qyza5Too7GlFS7p2feS0o4TDjpcvq0THOdIyIiB5Hk99Iw1IBVvnLCwXLXOVFFY0qq1aZNs/gosJ32exoyYfAA1zkiInIIjZPaU+TxsHbtF65ToorGlFSr56beiQHKGM/gDo1c54iIyCG0bnY8ANOXfeq4JLpoTEm12bljOf8rXkfn/FTOHXQixhjXSSIicgh9Ow8jOWxZtGOB65SoUqHjZESOxktTbqHcQEnZmZzSpanrHBEROYwOTeuTWeZjpXer65SoolumpFoUFm7hlT2L6VyUxGkDx+Dz6j81EZFI5/N6SA+ns9oXIlBe5Donaug7nFSLN768lQKPobxwJON6ZbrOERGRCmpSqxNlHsPylZ+4TokaGlNS5crLCnhu63Q6FHsZ3Pd8kvxe10kiIlJB7ZoPAWDmys8cl0QPjSmpcu9+dSc7vAZP3iDO79fCdY6IiByBfh0HUTsUZvGORa5ToobGlFSpUDDA0+s/plUp9Ox2GXWS/K6TRETkCLRqmEpmWQKrwztcp0QNjSmpUpNm/oP1Xqi1uzcXDWztOkdERI6Qx2NIpwlrfJaykt2uc6KCxpRUGRsO8+Ty18goD9Om3dU0TE10nSQiIkehWWoXgsawaPn7rlOigsaUVJnp859gqSdEw92duXRQB9c5IiJylDq2HAHAzJVfOi6JDhpTUmWeXPAk6cEwDTOuJistxXWOiIgcpb4d+1EvGGbpnqWuU6KCxpRUie+WvMlsU0rz3S25bEg31zkiIlIJGfWSyShPYnVYj5mqCI0pqRJPzrmf1FCY5LSr6NCkjuscERGpBGMM6aYZ631QXLDZdU7E05iSSlu97ku+CO2mfV5TLh3S13WOiIhUgcy6PQgbw/yl77lOiXgaU1Jpz0z7CwkWSLqEXi3SXOeIiEgV6Nz2ZABmr/nKcUnk05iSStmy9TveK/uezvn1uGDIYNc5IiJSRfp16EHDgGVZ/krXKRFPY0oq5fmvbsMCQfsrBrVr6DpHRESqSHrtRJqWp7CaPa5TIp7GlBy1vD3reaNgBV0LUjjrhFMxxrhOEhGRKtTQm8Umv4c9u9e4ToloGlNy1P775S2UeAzBsjGc1LmJ6xwREaliWQ16AzB3yTuOSyKbxpQcleKS3by08xu6FPkYOfBcfF79pyQiEmu6tx8JwNx1MxyXRDZ9B5Sj8taU29jjMVAwgjE9M1zniIhINcht056m5ZblRatdp0Q0jSk5YoFACc9smkz7Eji+78Uk+b2uk0REpBrUTfbTJFCb1aYIrHWdE7E0puSIfTDtr2z1QvKeYzm3XwvXOSIiUo0a+Vqyzedhx/bFrlMilsaUHJFwOMRTqyaSXWbp2vUaUpP8rpNERKQaNW/UD4CZiyc6LolcGlNyRCbPfog13jBped25aGBr1zkiIlLNenc8FY+1zN84y3VKxNKYkgqz1vLE4hdoEgjTqu1vaVA70XWSiIhUs+7ZLcgoN6ws2eA6JWJpTEmFzVn4Egs95WTtbsvFgzq6zhERkRqQnOClcbAuK70l2HDYdU5E0piSCnty3sPUD4ZJz/gtmfVTXOeIiEgNaZzYmjyvh83fz3GdEpE0pqRClq76mGm2kDZ5mVwypJfrHBERqUGtGh8LwPTF7zsuiUwaU1IhT874O7XCYWqlXU27xqmuc0REpAb17nIKPmtZsGWu65SIpDElh7V+02w+DWyjY146E4Yc6zpHRERqWOfMJmSVe1hV9r3rlIikMSWH9fTUO/BZ8CVdTM/m9V3niIhIDfN7PTQK1meVr4xwKOA6J+JoTMkhbd+5gokl6+haUJvzh5zkOkdERBxpnNyOQo+Hteumuk6JOBpTckgvTLmVEGDsuQxsm+46R0REHGmbMQiA6Us/dBsSgTSm5BcVFG7jtbyFdCtMZOwJ4zDGuE4SERFH+nceTmLYsnDbt65TIo7PdYBErlen3EKRx+AtG8WIzk1c54iIiENtmzQgq9zLGs9W1ykRR7dMyUGVlhXwwpZpdC72MOK4CXg9ulVKRCSeeTyGRuF0VvkCBAMlrnMiisaUHNQ7U//MLq8hqfAERvfIcJ0jIiIRoGmtjpR6PCxf9ZnrlIiiMSU/EwwFeHrdR7QrtQzocxWJPq/rJBERiQDtmw8BYMayTxyXRBaNKfmZT2b+H997LXX39OGcfi1d54iISIQY0HkItcJhFu9c6DolougB6PIj1lqeWPYqWcEwXbpeR+1E/SciIiJ7NW9Qm8yyBNZ4d7hOiSi6ZUp+ZOq8J1jpCdI0rxMXDmznOkdERCKIMYbGNGKNP0ygtMB1TsTQmJIfeeK7J2kUDJHd5jrSaiW4zhERkQjTLLULAWP4bvn7rlMihsaU7Dd/6VvMo4RWu1ty8QndXOeIiEgE6tRyBAAzV37huCRyaEzJfk/M/id1Q2EaNfstzeolu84REZEI1L/TAOqGwizdvcR1SsTQmBIAVqyfwpRwHjl5jZkwtL/rHBERiVCN66aQUZ7EGrvbdUrE0JgSAJ76+i8kh8Ok1r+KNo1qu84REZEI1tg0ZZ3PUlK03XVKRNCYEr7ftpCPyjbRdU89Lhw6xHWOiIhEuMy63QkbwzdL3nWdEhE0poRnptyKAZKTJtAtq57rHBERiXBd250CwJzVUxyXRAaNqTi3a88G3ipYQY+CZM4eOtp1joiIRIH+HXJpEAyzPH+F65SIoDEV51768hbKDSSGxzGgdQPXOSIiEgXqpvjJKE9hNXtcp0QEjak4VlSym1d2zqV7kY/ThvwKY4zrJBERiRKNvJls9BsK9qx3neKcxlQce33KbeR7DEllJzGsYxPXOSIiEkVapOUCMHPRRMcl7mlMxanyQCnPb5pMp2IYOvDXeDy6VUpERCquZ4dTAfhm7deOS9zTmIpT702/h+1eqFs4kNE9Ml3niIhIlMlt15EmAcvK4tWuU5zTmIpDoVCQp1a9TeuyMH37/JYEn/4zEBGRI5OS4KNpoDarTaHrFOf0XTQOfT73P6z3hGm8pwdn92/lOkdERKJUY38Ltvo87Nyx1HWKUxpTccZayxOLnyMjEKJT1xtJSfC5ThIRkSiV3bAvANMXxvczoWtMxZmZi15miSmnxe52XDCwg+scERGJYr07jsJYy/yNM1ynOKUxFWee+OZh0oMhWra5nnopCa5zREQkinVv2YqMAKwuie/nmtKYiiOLVn/MLFtA+7xMxg/OdZ0jIiJRLsHnoUmwLqs9xdhw2HWOMxpTceTx6X8nNRSmcdPf0qRukuscERGJAU0SW7PT52HL5nmuU5zRmIoTa76fwxeBbXTZ04ALTzzOdY6IiMSI1k36A/D14vccl7ijMRUnnvrqDhKspX69X9OqYW3XOSIiEiP6dRmF11q+2zzXdYozGlNxYOuulbxfspYe+bU5f9jJrnNERCSG5GQ0I7PcsLpso+sUZzSm4sBzX96KBVITz6dzRl3XOSIiEkO8HkPTUH1We8uwoZDrHCc0pmLcnsKtvJn3HT0LExh34rmuc0REJAY1SW5HvtfDmvXxeeixxlSMe3nKrRR7DLXDo+nXKs11joiIxKB2GXt/sGnakg8cl7ihMRXDissKeWnrNLoXGUYOvhRjjOskERGJQQO6nkJC2LJ427euU5zQwWwx7K2v72KPx1CvdChDOzZxnSMiIjGqVaM0sso9rPZsdp3ihG6ZilGBUDnPrPuInJIwg477DR6PbpUSEZHqYYyhiU1njS9AKFDmOqfGaUzFqI9m/YutHkujwn6M6pHlOkdERGJcs5Qcij0elq363HVKjdOYikFhG+aJpa+QXR6id58b8Ht1NYuISPXKaXECADOWfey4pObpu2wMmjL/adZ4grTY05kz+7V1nSMiInHgmG7DSQ6HWbJzoeuUGqcHoMcYay2Pffs4TYMhOnW5ieQEr+skERGJA83qpdK83M8azzbXKTVOt0zFmLnL32GhKaHtnmzOHdjVdY6IiMSRxrYRa3xhAuVFrlNqlMZUjHl81j+pHwrRqvUN1E3xu84REZE4kpnamXKPYcGy+HryTo2pGLJsw1dMD++mS15jzh/c33WOiIjEmU6thgEwc3l8/USfxlQMeXzq3dQKh2na9Dc0rpPkOkdEROLMsZ0HkRoKszxvieuUGqUxFSM2bFvIpLJN9NhTl/NPPNF1joiIxKG01CSyyhNZE97pOqVGaUzFiKem3IYXaFD3ErLTa7nOERGRONXENGW931JavMt1So3RmIoBO/Zs4N3C5eTmJ3HO8LGuc0REJI41r9edoDHMXfyu65QaozEVA5778haCQIOEs+nUrK7rHBERiWPd2p4EwOzVk92G1CCNqShXULKL13fOpVeRl9EnjnedIyIica5vx76kBcOsyF/hOqXGaExFuVe+uoMij6FB+BT6tGrgOkdEROJcapKfzEAya8lznVJjNKaiWFmwlBc3fUG3YsuIIddgjHGdJCIiQmNPJht8UJj/veuUGqExFcXenvY3dnmgcelxnNChiescERERALIb9MIaw4yF77hOqREaU1EqFA7xzKq3aV8aYuDAG/B4dKuUiIhEhl45pwLwzbqpjktqhsZUlPp83hNs8oTILOrOyB4tXOeIiIjsl9uuC40ClpWFq12n1AiNqSj1zHfP0CwQolevP+Dz6moUEZHIkejzkhGsxVpT4DqlRui7cBRasPoTvjPFtM9vztj+Oa5zREREfqaJrzmb/YZdO1a6Tql2GlNR6Knp/6B2KEyb1teRkuBznSMiIvIzrRv1BeDrOHgQusZUlNm0cymTA5vpkV+Xswcf5zpHRETkoHp3Og2ABRtnOC6pfhpTUeb5L+/EA2SkTaBRapLrHBERkYPqmt2aZuWWVSXrXKdUO42pKFJYksfbe76jZ6GPccPPdp0jIiLyi3xeD81CdVjrKQJrXedUK42pKPLa1Lso9hiaeEfSrnGq6xwREZFDapbQiu0+D5u3fOc6pVpVaEwZY0YYY5YZY1YaY24+yPuPM8Z8Y4wJGmPOqPpMCYYCvLxhEp1Kwpw89FrXOSIiIofVpukAAKZ+F9sPQj/smDLGeIGHgZOAjsA5xpiOP7nYemA88HJVB8pen879D1u9loyyPgxo09B1joiIyGH17zoKj7Us3DzHdUq1qsjP1fcBVlprVwMYY14BTgMW/3ABa+3afe8LV0Nj3LPW8vSiF8kIhRjY/2YdaCwiIlGhfbMMMgOGNWx0nVKtKnI3Xwaw4YDXN+57m9SQ+SvfZ6mnlPb5rTilV1vXOSIiIhVijKFpqB5rvKXYcOze3lKjD0A3xlxmjJljjJmzffv2mvzSUe3JGf+kTihMl4434tfRMSIiEkUyktuS5/Wwdn3sPt9URb4zbwKyDng9c9/bjpi19nFrba61NrdhQz3upyI2bPuOr0Lb6Jafxrjj+7vOEREROSLtMwYCMHXR+45Lqk9FxtRsoK0xpqUxJgE4G5hYvVnyg6e/vBMv0Lrp5dRN9rvOEREROSLHdBuF31qWbJ/nOqXaHHZMWWuDwNXAx8AS4DVr7SJjzF3GmFEAxpjexpiNwDjgMWPMouqMjhd7inbwfuFSehUmcOaJY1zniIiIHLHm6WlklXtYE9jsOqXaVOiUXGvtB8AHP3nbbQe8PJu9d/9JFXplyp2UeAxZSWPISktxnSMiInLEjDE0DTdgfuI2wqEAHm/s3cuiRzNHqEConFc2T6ZLseX04Ve5zhERETlqmbU6UOTxsHTVF65TqoXGVIT6cOb97PBC89AxdM2q7zpHRETkqOW0OAGAaYs/dlxSPTSmIpC1lmeXvUrz8hCDj/uj6xwREZFKGdjtJJLClmW7FrhOqRYaUxFoztL/scJTTrui9gzt3Nx1joiISKU0qptK83Iva0PbXKdUC42pCPTErAeoFwrRp8cf8Hh0dIyIiES/JjRijS9EMFDiOqXKaUxFmLWbv2E6u+la0IjTB/RynSMiIlIlslI7UeYxfLv0I9cpVU5jKsI8+eWdJIQtHZtfQ5Lf6zpHRESkSnRpfSIAM5dPclxS9TSmIkhe4WY+KllFz8IkzjpxpOscERGRKnNslyHUDoVZnrfYdUqV05iKIC9Mvp0yj6FVnXNIr53oOkdERKTK1E1JonkggXXhna5TqpzGVIQoD5TyxrbpdC2GcSMuc50jIiJS5ZqYpqz1hykr3eM6pUppTEWId6ffxy4vtGQwbRqnus4RERGpci3qdSVoDLMXvus6pUppTEUAay3PrXyT7PIQI4fe7DpHRESkWvRodzIAs1dNdhtSxTSmIsD0hS+zxhukXUln+rZp4jpHRESkWvTL6U+9UJhVBctcp1QpjakI8OTc/5AWDDGo7y0YoyfpFBGR2JSc6CerPIl1Ns91SpXSmHJs1cYZzDb5dC1sxkm5nV3niIiIVKumvgzW+y1FhVtdp1QZjSnHHpvyZxLDYXq2vw6fV1eHiIjEtpZpPQkbw9ffvu06pcrou7dDO/M38Fn5OnoW1uaMQSe6zhEREal2vXL2Pin1/HVTHZdUHY0ph577/DbKjSEn/UJSk/yuc0RERKpdbruepAfDrCpa5TqlymhMOVJaXsRbu2bTvcjDWSdNcJ0jIiJSI/xeD1mBWqwz+a5TqozGlCP/m/o38ryGNv7hNKuX7DpHRESkxjT1N2eT37B711rXKVVCY8oBay0vrZ1I67IwY4bf6DpHRESkRrVp1BuAKd++5bikamhMOfDlvGdY7w3TPtCdLs3TXeeIiIjUqH6dTwNg4aYZjkuqhs91QDx6+tvHSQ+HGH7sba5TREREalynFu1pGrCsLl/rOqVK6JapGrZs7WTmeYroWtScQV3auc4RERGpcR6PISOYylpPoeuUKqExVcMem3oPSeEwA7rchMejo2NERCQ+ZSS2ZJvPw/dbFrlOqTSNqRq0ffdqvghuoldhHU479jjXOSIiIs60bdIfgKkL3nFcUnkaUzXoqc9vJQR0a3YpSX6v6xwRERFnjuk2Go+1LNoy23VKpWlM1ZCSsgLe3fMtPYp9nD3ifNc5IiIiTrVumklGwLC2dIPrlErTmKohr02+i3yvIafWKOrXSnCdIyIi4pQxhoxQXdb4SrDhsOucStGYqgHhcIhXNn5M29IwZ550vescERGRiJCR3IbdXg9rN8xxnVIpGlM1YNKcx9jos+TYvrRqVMd1joiISETIyTwWgKkL33VcUjkaUzXg2YXP0jgQYvSQO1yniIiIRIxju52G11qWbJ/nOqVSNKaq2cJVn/Cdt4Qupa3IbZPlOkdERCRiZKQ3pHm5YV35965TKkVjqpo9NvXvpITDDO75J4zRk3SKiIgcqJlNY42vDBsKuU45ahpT1WjLjqV8ZbfSs7A+J/Xt6zpHREQk4mTV6kCB18PiVV+6TjlqGlPV6PHPbsMCfVpdhc+r32oREZGf6tziBACmL/7QccnR03f4alJckseHxYvpUZTAmUPHuc4RERGJSMd2P4XEsGXZrgWuU46az3VArHrx89sp9Bi61h9LrUT9NouIiBxMg9RUmpd7WW+2uk45arplqhqEQkHe2PI57Ust551ynescERGRiJZh0lnjDxAKlLlOOSoaU9XgwxkPsdkHnT3H0rhususcERGRiJaV2okSj4dvlnzsOuWoaExVg+eXvkjTQIhxw293nSIiIhLxurUeCsCs5Z86Ljk6GlNVbO7Sd1jiK6dbeXs6NW/qOkdERCTiHdt1OCnhMCvyFrtOOSp6ZHQVe3L6P6ltw5zc/zbXKSIiIlGhVlIiLcoTWO/Z7jrlqOiWqSq0aet3TDc76VWczqDu3V3niIiIRI1mnsas9YcpLy1wnXLENKaq0KOf3YoBBna4TkfHiIiIHIEWdbsQMIYZ373nOuWIaUxVkcLiHXxStpIeRUmcPuhU1zkiIiJRpVe7kwCYu/oLxyVHTmOqijz76a0Uewy9Gp1Lgk+/rSIiIkeiX6fjqBsKsyp/qeuUI6bv+lUgGArw9o6p5JTAeSdf5TpHREQk6iT4fWQFkljHbtcpR0xjqgq8/dV9bPVB98TB1KuV6DpHREQkKmV4m7HBbyks3OE65YhoTFWStZb/rnydZoEw556sJ+kUERE5Wq3SehAyhq+/fcd1yhHRmKqkmd+9znJ/gJ7BTmQ3TnOdIyIiErV654wEYP66KY5LjozGVCU9NedB6oTCjB50l+sUERGRqNazfW8aBMOsKVrpOuWIaExVwppNs5npyaNXSVP6dujgOkdERCSqeT2GrEAK68we1ylHRGOqEh77/E68wJBuN7hOERERiQkZCVls9Bt27d7oOqXCNKaO0p6C7/k8uJaeRSmMHDDMdY6IiEhMaNOwNwBT5r/luKTiNKaO0pOf3EKJx3BM1gS8Hh0dIyIiUhUGdB4FwHcbpzkuqTiNqaMQCJbyXt4sOpUYzhl+qescERGRmJGT3ZEmAcu6kjWuUypMY+oovP7FPezwGXJrjyA50ec6R0REJGYYY8gM1Wadp8B1SoVpTB0hay2vrXuHrPIw54+8xXWOiIhIzMlMyGaL38P3W5a5TqkQjakj9OU3L7DKHyKXHjSpV8d1joiISMxp37Q/AF8teNttSAVpTB2h5+Y/Qr1QmLNP/LPrFBERkZh0bLfRGGtZtHmW65QK0Zg6AsvWTmOut4Dcskw6Zrd0nSMiIhKTspu2ICMA68vWu06pEI2pI/D4l3fitzCytx4rJSIiUp0yw3VZ6y0Ga12nHJbGVAXtylvPl+FN9CpJZXCvY13niIiIxLTM5Nbs9HlYtf4b1ymHpTFVQY99/EfKPIZBrS/HGD1Jp4iISHXqmLn3houpC991XHJ4GlMVUF5ezEdF8+lS4mXc0Atc54iIiMS847ufjtdalm6b6zrlsDSmKuDFT+9kl9fQr/4o/F79lomIiFS3RmkNyQoY1gc2uU45LC2Dw7DhMG9t/ogW5WEuHPkH1zkiIiJxIyOcxlpfGTYcdp1ySBpTh/HJzCdY6w/T29eXurWSXeeIiIjEjea125Hv9bBw5VeuUw5JY+owXlr0FGnBMBeMuNt1ioiISFzp0nwQADMWf+A25DA0pg7huxWfMc9fQp9gS1o2beY6R0REJK4c1+NUEsKW5Tu/dZ1ySD7XAZHsyan3kIhl7DG3u04RERGJO3Vr16F5wMN6trhOOSTdMvULtu5YxVS2kFtaj36de7vOERERiUsZpLPWHyAULHed8os0pn7Box//kXKPYUTONa5TRERE4lZ2nY4UezzMWfSJ65RfpDF1EKVl+UwqW0i3Ej+jjjvTdY6IiEjc6t5qCACzV3zquOSXaUwdxNMf3k6e18PAxuPweHR0jIiIiCvHdD2J5HCYVXmLXKf8Ij0A/SdsOMx7OybRMmy54OTrXeeIiIjEteSkJFqU+1lvtrtO+UW6ZeonJk59iA1+6J80kOREv+scERGRuJfhacQ6f4iysiLXKQelMfUTry17gfRgmAkj/+w6RURERICW9bpQ5jFMW/C+65SD0pg6wJxF77MgoYy+4XY0SUt3nSMiIiJAbrsRAMxb/bnjkoPTmDrAMzP+QVI4zHmDdXSMiIhIpOjbaTCpoTBr8pe6Tjkojal9Nm5ZzDTvDvqUNaRL606uc0RERGQfn89Li0Ai69npOuWgNKb2efSTPxECRnX/vesUERER+YkMb1PW+y2FRbtcp/yMxhRQVLybL4LL6V6axLC+I13niIiIyE+0Se9B0Bi+mveO65Sf0ZgCnvjgT+R7PQzNOg9j9CSdIiIikaZvzikAfLt+iuOSn4v7MRUOh/go7yvalME5w3QOn4iISCTq1qYP9YNh1haucJ3yM3E/pl777B9s8sOxtQfj9+sJ4UVERCKRx+ulRTCZDSbPdcrPxP2YenvtazQKhLno1Ltcp4iIiMghZPgz2eCHnbu/d53yI3E9pr765g0WJQQY4OlE/dS6rnNERETkENo16o01hinz33Kd8iNxPaZenPsAKeEw44f91XWKiIiIHMaAzqcBsHDjNMclPxa3Y2rl+nnM8u+mX3kTWme2cZ0jIiIih9EhuzONgmHWlax2nfIjcTumnvj8NsLAuH5/cJ0iIiIiFdQ8WJv1ngLXGT8Sl2MqL38rU8Kr6VmawrHdhrrOERERkQrKTGzBZr9h49aVrlP2i8sx9dj7f6TQ6+GkNhe5ThEREZEj0KFpPwCmzIucB6HH3ZgKBsuZVDST9qWGcYMvc50jIiIiR+C4bqcDsHTrLMcl/1/cjamXPv4rW/yGQWknYTxx98sXERGJallNWtIsYFlfts51yn5xtybe3fQ2TQJhLjr1dtcpIiIichSah+qw3lvkOmO/uBpTH09/gWWJIY71dyclKcV1joiIiByFrJRWbPd5WLFuvusUIM7G1OvfPULtUJhLTvqb6xQRERE5Sp0yjgHg6+8mOi7ZK27G1MKV05mTkE//UBYZjbJc54iIiMhROq7H6XisZdn2ua5TAPC5Dqgpz3x5J8YL5x97q+sUERERqYSG9ZuQFTBssBtdpwBxcsvUtl0bmerZQK+yVHrmHOM6R0RERCop09Zjra+UcCjkOiU+xtQTH/yBYo+H0zpe4TpFREREqkB2rXbs8Xr4btV01ymxP6bKykv4omweOWVeRh57gescERERqQJdWhwPwIxF7zsuiYMx9cwHd7LVZzix0SiMMa5zREREpAoM7D4Kn7Ws3PWt65SKjSljzAhjzDJjzEpjzM0HeX+iMebVfe+faYzJrvLSo2Ct5ePtH9IsYBl/yi2uc0RERKSK1KldjxblHjaENrtOOfyYMsZ4gYeBk4COwDnGmI4/udjFwG5rbRvgX8Dfqzr0aEz88klWJoQZlNwbvz/BdY6IiIhUoUzTgLX+coLBgNOOitwy1QdYaa1dba0tB14BTvvJZU4Dntv38hvAEBMB96m9vexJUkNhLj35HtcpIiIiUsVa1smhyONh9uLPnHZUZExlABsOeH3jvrcd9DLW2iCwB2hQFYFHa/aiz5mbWMSxtiXp9Zu4TBEREZFq0KPlYADmLPvYaUeNPgDdGHOZMWaOMWbO9u3bq/VrLV03i/SQZcIJd1br1xERERE3BnQ7maYBS2mw2GmHsdYe+gLG9AfusNYO3/f6HwCstfcccJmP911mujHGB2wBGtpDfPLc3Fw7Z86cKvgl/LLy8jISEhKr9WuIiIhI7DPGzLXW5h7sfRW5ZWo20NYY09IYkwCcDfz0ZMGJwIX7Xj4D+PxQQ6qmaEiJiIhIdTvs2XzW2qAx5mrgY8ALPG2tXWSMuQuYY62dCDwFvGCMWQnsYu/gEhEREYl5FTro2Fr7AfDBT9522wEvlwLjqjZNREREJPLF/DOgi4iIiFQnjSkRERGRStCYEhEREakEjSkRERGRStCYEhEREakEjSkRERGRStCYEhEREakEjSkRERGRStCYEhEREakEjSkRERGRStCYEhEREakEjSkRERGRStCYEhEREakEjSkRERGRStCYEhEREakEjSkRERGRStCYEhEREakEjSkRERGRStCYEhEREakEjSkRERGRSjDWWjdf2JjtwLpq/jLpwI5q/hpy5HS9RB5dJ5FJ10vk0XUSmWriemlhrW14sHc4G1M1wRgzx1qb67pDfkzXS+TRdRKZdL1EHl0nkcn19aK7+UREREQqQWNKREREpBJifUw97jpADkrXS+TRdRKZdL1EHl0nkcnp9RLTj5kSERERqW6xfsuUiIiISLWKiTFljBlhjFlmjFlpjLn5IO9PNMa8uu/9M40x2Q4y404FrpfrjDGLjTELjDGfGWNauOiMJ4e7Tg643FhjjDXG6KeWqllFrhNjzJn7/qwsMsa8XNON8agCf381N8Z8YYyZt+/vsJNddMYTY8zTxphtxpiFv/B+Y4x5cN91tsAY07Om2qJ+TBljvMDDwElAR+AcY0zHn1zsYmC3tbYN8C/g7zVbGX8qeL3MA3KttV2BN4B7a7YyvlTwOsEYkwr8BphZs4XxpyLXiTGmLfAH4BhrbSfgtzXdGW8q+GflFuA1a20P4GzgPzVbGZeeBUYc4v0nAW33/e8y4JEaaAJiYEwBfYCV1trV1tpy4BXgtJ9c5jTguX0vvwEMMcaYGmyMR4e9Xqy1X1hri/e9OgPIrOHGeFORPysAf2bvPzhKazIuTlXkOrkUeNhauxvAWruthhvjUUWuFwvU2fdyXeD7GuyLS9baKcCuQ1zkNOB5u9cMoJ4xpmlNtMXCmMoANhzw+sZ9bzvoZay1QWAP0KBG6uJXRa6XA10MfFitRXLY62TfzeJZ1tr3azIsjlXkz0k7oJ0x5mtjzAxjzKH+ZS5VoyLXyx3A+caYjcAHwDU1kyaHcKTfd6qMrya+iMihGGPOB3KB4123xDNjjAf4JzDecYr8mI+9d1sMYu+tt1OMMV2stXkuo4RzgGettf9njOkPvGCM6WytDbsOk5oXC7dMbQKyDng9c9/bDnoZY4yPvTfJ7qyRuvhVkesFY8xQ4E/AKGttWQ21xavDXSepQGdgsjFmLdAPmKgHoVerivw52QhMtNYGrLVrgOXsHVdSfSpyvVwMvAZgrZ0OJLH3fDhxp0Lfd6pDLIyp2UBbY0xLY0wCex8IOPEnl5kIXLjv5TOAz62eYKu6HfZ6Mcb0AB5j75DS40Cq3yGvE2vtHmtturU221qbzd7HsY2y1s5xkxsXKvL319vsvVUKY0w6e+/2W12DjfGoItfLemAIgDEmh71januNVspPTQQu2PdTff2APdbazTXxhaP+bj5rbdAYczXwMeAFnrbWLjLG3AXMsdZOBJ5i702wK9n74LWz3RXHhwpeL/8AagOv7/t5gPXW2lHOomNcBa8TqUEVvE4+BoYZYxYDIeAGa61uWa9GFbxefg88YYz5HXsfjD5e/0ivXsaY/7L3Hxbp+x6rdjvgB7DWPsrex66dDKwEioEJNdam615ERETk6MXC3XwiIiIizmhMiYiIiFSCxpSIiIhIJWhMiYiIiFSCxpSIiIhIJWhMiYiIiFSCxpSIiIhIJWhMiYiIiFTC/wO3p20fkSyHFQAAAABJRU5ErkJggg==\n",
|
||
"text/plain": [
|
||
"<Figure size 720x720 with 1 Axes>"
|
||
]
|
||
},
|
||
"metadata": {
|
||
"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",
|
||
"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",
|
||
"id": "e303dc71",
|
||
"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",
|
||
"id": "e30e6e45",
|
||
"metadata": {},
|
||
"source": [
|
||
"<!-- Equation labels as ordinary links -->\n",
|
||
"<div id=\"PDE\"></div>\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",
|
||
"id": "1173cba1",
|
||
"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."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "87b83e1d",
|
||
"metadata": {},
|
||
"source": [
|
||
"## 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",
|
||
"id": "f41effef",
|
||
"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",
|
||
"id": "c4a45e13",
|
||
"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."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "0b04a28a",
|
||
"metadata": {},
|
||
"source": [
|
||
"## 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",
|
||
"id": "adcccc59",
|
||
"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",
|
||
"id": "b4d3ebc5",
|
||
"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",
|
||
"id": "68189260",
|
||
"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",
|
||
"id": "0afc4171",
|
||
"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",
|
||
"id": "eb4f9d04",
|
||
"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",
|
||
"id": "205b707c",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Example: The diffusion equation\n",
|
||
"\n",
|
||
"In one spatial dimension, the equation reads"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "404eb094",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\frac{\\partial g(x,t)}{\\partial t} = \\frac{\\partial^2 g(x,t)}{\\partial x^2}\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "0ea885b8",
|
||
"metadata": {},
|
||
"source": [
|
||
"where a possible choice of conditions are"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "ff4404d8",
|
||
"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",
|
||
"id": "acc86662",
|
||
"metadata": {},
|
||
"source": [
|
||
"with $u(x)$ being some given function."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "f2237d59",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Defining the problem\n",
|
||
"\n",
|
||
"For this case, we want to find $g(x,t)$ such that"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "a3673fb9",
|
||
"metadata": {},
|
||
"source": [
|
||
"<!-- Equation labels as ordinary links -->\n",
|
||
"<div id=\"diffonedim\"></div>\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",
|
||
"id": "3966a036",
|
||
"metadata": {},
|
||
"source": [
|
||
"and"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "d8c2715d",
|
||
"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",
|
||
"id": "1d27bfe8",
|
||
"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."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "148027d5",
|
||
"metadata": {},
|
||
"source": [
|
||
"## 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": 7,
|
||
"id": "6398f3ad",
|
||
"metadata": {},
|
||
"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",
|
||
"id": "692b2f8e",
|
||
"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)$."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "aace74d8",
|
||
"metadata": {},
|
||
"source": [
|
||
"## 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": 8,
|
||
"id": "ad86c98b",
|
||
"metadata": {},
|
||
"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",
|
||
"id": "bc714b2c",
|
||
"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",
|
||
"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": 9,
|
||
"id": "0901c4d7",
|
||
"metadata": {},
|
||
"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",
|
||
"id": "7599ed2e",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Example: Solving the wave equation with Neural Networks\n",
|
||
"\n",
|
||
"The wave equation is"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "fb75b947",
|
||
"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",
|
||
"id": "15212ace",
|
||
"metadata": {},
|
||
"source": [
|
||
"with $c$ being the specified wave speed.\n",
|
||
"\n",
|
||
"Here, the chosen conditions are"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "81bca02a",
|
||
"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",
|
||
"id": "a8ddda25",
|
||
"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."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "8d367f03",
|
||
"metadata": {},
|
||
"source": [
|
||
"## The problem to solve for\n",
|
||
"\n",
|
||
"The wave equation to solve for, is"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "4c323240",
|
||
"metadata": {},
|
||
"source": [
|
||
"<!-- Equation labels as ordinary links -->\n",
|
||
"<div id=\"wave\"></div>\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",
|
||
"id": "071489f1",
|
||
"metadata": {},
|
||
"source": [
|
||
"where $c$ is the given wave speed.\n",
|
||
"The chosen conditions for this equation are"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "28331e09",
|
||
"metadata": {},
|
||
"source": [
|
||
"<!-- Equation labels as ordinary links -->\n",
|
||
"<div id=\"condwave\"></div>\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",
|
||
"id": "f2f4f1f9",
|
||
"metadata": {},
|
||
"source": [
|
||
"In this example, let $c = 1$ and $u(x) = \\sin(\\pi x)$ and $v(x) = -\\pi\\sin(\\pi x)$."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "777aebaf",
|
||
"metadata": {},
|
||
"source": [
|
||
"## 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."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "41b8d250",
|
||
"metadata": {},
|
||
"source": [
|
||
"## 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",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "10183371",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Solving the wave equation - the full program using Autograd"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 10,
|
||
"id": "3abd461f",
|
||
"metadata": {},
|
||
"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",
|
||
"id": "119b3b20",
|
||
"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)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "c0e661cb",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Convolutional Neural Networks (recognizing images)\n",
|
||
"\n",
|
||
"Convolutional neural networks (CNNs) were developed during the last\n",
|
||
"decade of the previous century, with a focus on character recognition\n",
|
||
"tasks. Nowadays, CNNs are a central element in the spectacular success\n",
|
||
"of deep learning methods. The success in for example image\n",
|
||
"classifications have made them a central tool for most machine\n",
|
||
"learning practitioners.\n",
|
||
"\n",
|
||
"CNNs are very similar to ordinary Neural Networks.\n",
|
||
"They are made up of neurons that have learnable weights and\n",
|
||
"biases. Each neuron receives some inputs, performs a dot product and\n",
|
||
"optionally follows it with a non-linearity. The whole network still\n",
|
||
"expresses a single differentiable score function: from the raw image\n",
|
||
"pixels on one end to class scores at the other. And they still have a\n",
|
||
"loss function (for example Softmax) on the last (fully-connected) layer\n",
|
||
"and all the tips/tricks we developed for learning regular Neural\n",
|
||
"Networks still apply (back propagation, gradient descent etc etc)."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "cae07a7f",
|
||
"metadata": {},
|
||
"source": [
|
||
"## What is the Difference\n",
|
||
"\n",
|
||
"**CNN architectures make the explicit assumption that\n",
|
||
"the inputs are images, which allows us to encode certain properties\n",
|
||
"into the architecture. These then make the forward function more\n",
|
||
"efficient to implement and vastly reduce the amount of parameters in\n",
|
||
"the network.**\n",
|
||
"\n",
|
||
"Here we provide only a superficial overview, for the more interested, we recommend highly the course\n",
|
||
"[IN5400 – Machine Learning for Image Analysis](https://www.uio.no/studier/emner/matnat/ifi/IN5400/index-eng.html)\n",
|
||
"and the slides of [CS231](http://cs231n.github.io/convolutional-networks/).\n",
|
||
"\n",
|
||
"Another good read is the article here <https://arxiv.org/pdf/1603.07285.pdf>."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "15491f8e",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Neural Networks vs CNNs\n",
|
||
"\n",
|
||
"Neural networks are defined as **affine transformations**, that is \n",
|
||
"a vector is received as input and is multiplied with a matrix of so-called weights (our unknown paramters) to produce an\n",
|
||
"output (to which a bias vector is usually added before passing the result\n",
|
||
"through a nonlinear activation function). This is applicable to any type of input, be it an\n",
|
||
"image, a sound clip or an unordered collection of features: whatever their\n",
|
||
"dimensionality, their representation can always be flattened into a vector\n",
|
||
"before the transformation."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "d6a16e04",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Why CNNS for images, sound files, medical images from CT scans etc?\n",
|
||
"\n",
|
||
"However, when we consider images, sound clips and many other similar kinds of data, these data have an intrinsic\n",
|
||
"structure. More formally, they share these important properties:\n",
|
||
"* They are stored as multi-dimensional arrays (think of the pixels of a figure) .\n",
|
||
"\n",
|
||
"* They feature one or more axes for which ordering matters (e.g., width and height axes for an image, time axis for a sound clip).\n",
|
||
"\n",
|
||
"* One axis, called the channel axis, is used to access different views of the data (e.g., the red, green and blue channels of a color image, or the left and right channels of a stereo audio track).\n",
|
||
"\n",
|
||
"These properties are not exploited when an affine transformation is applied; in\n",
|
||
"fact, all the axes are treated in the same way and the topological information\n",
|
||
"is not taken into account. Still, taking advantage of the implicit structure of\n",
|
||
"the data may prove very handy in solving some tasks, like computer vision and\n",
|
||
"speech recognition, and in these cases it would be best to preserve it. This is\n",
|
||
"where discrete convolutions come into play.\n",
|
||
"\n",
|
||
"A discrete convolution is a linear transformation that preserves this notion of\n",
|
||
"ordering. It is sparse (only a few input units contribute to a given output\n",
|
||
"unit) and reuses parameters (the same weights are applied to multiple locations\n",
|
||
"in the input)."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "33c6656c",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Regular NNs don’t scale well to full images\n",
|
||
"\n",
|
||
"As an example, consider\n",
|
||
"an image of size $32\\times 32\\times 3$ (32 wide, 32 high, 3 color channels), so a\n",
|
||
"single fully-connected neuron in a first hidden layer of a regular\n",
|
||
"Neural Network would have $32\\times 32\\times 3 = 3072$ weights. This amount still\n",
|
||
"seems manageable, but clearly this fully-connected structure does not\n",
|
||
"scale to larger images. For example, an image of more respectable\n",
|
||
"size, say $200\\times 200\\times 3$, would lead to neurons that have \n",
|
||
"$200\\times 200\\times 3 = 120,000$ weights. \n",
|
||
"\n",
|
||
"We could have\n",
|
||
"several such neurons, and the parameters would add up quickly! Clearly,\n",
|
||
"this full connectivity is wasteful and the huge number of parameters\n",
|
||
"would quickly lead to possible overfitting.\n",
|
||
"\n",
|
||
"<!-- dom:FIGURE: [figslides/nn.jpeg, width=500 frac=0.6] A regular 3-layer Neural Network. -->\n",
|
||
"<!-- begin figure -->\n",
|
||
"\n",
|
||
"<img src=\"figslides/nn.jpeg\" width=\"500\"><p style=\"font-size: 0.9em\"><i>Figure 1: A regular 3-layer Neural Network.</i></p>\n",
|
||
"<!-- end figure -->"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "fddecbf2",
|
||
"metadata": {},
|
||
"source": [
|
||
"## 3D volumes of neurons\n",
|
||
"\n",
|
||
"Convolutional Neural Networks take advantage of the fact that the\n",
|
||
"input consists of images and they constrain the architecture in a more\n",
|
||
"sensible way. \n",
|
||
"\n",
|
||
"In particular, unlike a regular Neural Network, the\n",
|
||
"layers of a CNN have neurons arranged in 3 dimensions: width,\n",
|
||
"height, depth. (Note that the word depth here refers to the third\n",
|
||
"dimension of an activation volume, not to the depth of a full Neural\n",
|
||
"Network, which can refer to the total number of layers in a network.)\n",
|
||
"\n",
|
||
"To understand it better, the above example of an image \n",
|
||
"with an input volume of\n",
|
||
"activations has dimensions $32\\times 32\\times 3$ (width, height,\n",
|
||
"depth respectively). \n",
|
||
"\n",
|
||
"The neurons in a layer will\n",
|
||
"only be connected to a small region of the layer before it, instead of\n",
|
||
"all of the neurons in a fully-connected manner. Moreover, the final\n",
|
||
"output layer could for this specific image have dimensions $1\\times 1 \\times 10$, \n",
|
||
"because by the\n",
|
||
"end of the CNN architecture we will reduce the full image into a\n",
|
||
"single vector of class scores, arranged along the depth\n",
|
||
"dimension. \n",
|
||
"\n",
|
||
"<!-- dom:FIGURE: [figslides/cnn.jpeg, width=500 frac=0.6] A CNN arranges its neurons in three dimensions (width, height, depth), as visualized in one of the layers. Every layer of a CNN transforms the 3D input volume to a 3D output volume of neuron activations. In this example, the red input layer holds the image, so its width and height would be the dimensions of the image, and the depth would be 3 (Red, Green, Blue channels). -->\n",
|
||
"<!-- begin figure -->\n",
|
||
"\n",
|
||
"<img src=\"figslides/cnn.jpeg\" width=\"500\"><p style=\"font-size: 0.9em\"><i>Figure 1: A CNN arranges its neurons in three dimensions (width, height, depth), as visualized in one of the layers. Every layer of a CNN transforms the 3D input volume to a 3D output volume of neuron activations. In this example, the red input layer holds the image, so its width and height would be the dimensions of the image, and the depth would be 3 (Red, Green, Blue channels).</i></p>\n",
|
||
"<!-- end figure -->"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "c586e81c",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Layers used to build CNNs\n",
|
||
"\n",
|
||
"A simple CNN is a sequence of layers, and every layer of a CNN\n",
|
||
"transforms one volume of activations to another through a\n",
|
||
"differentiable function. We use three main types of layers to build\n",
|
||
"CNN architectures: Convolutional Layer, Pooling Layer, and\n",
|
||
"Fully-Connected Layer (exactly as seen in regular Neural Networks). We\n",
|
||
"will stack these layers to form a full CNN architecture.\n",
|
||
"\n",
|
||
"A simple CNN for image classification could have the architecture:\n",
|
||
"\n",
|
||
"* **INPUT** ($32\\times 32 \\times 3$) will hold the raw pixel values of the image, in this case an image of width 32, height 32, and with three color channels R,G,B.\n",
|
||
"\n",
|
||
"* **CONV** (convolutional )layer will compute the output of neurons that are connected to local regions in the input, each computing a dot product between their weights and a small region they are connected to in the input volume. This may result in volume such as $[32\\times 32\\times 12]$ if we decided to use 12 filters.\n",
|
||
"\n",
|
||
"* **RELU** layer will apply an elementwise activation function, such as the $max(0,x)$ thresholding at zero. This leaves the size of the volume unchanged ($[32\\times 32\\times 12]$).\n",
|
||
"\n",
|
||
"* **POOL** (pooling) layer will perform a downsampling operation along the spatial dimensions (width, height), resulting in volume such as $[16\\times 16\\times 12]$.\n",
|
||
"\n",
|
||
"* **FC** (i.e. fully-connected) layer will compute the class scores, resulting in volume of size $[1\\times 1\\times 10]$, where each of the 10 numbers correspond to a class score, such as among the 10 categories of the MNIST images we considered above . As with ordinary Neural Networks and as the name implies, each neuron in this layer will be connected to all the numbers in the previous volume."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "7ca122dd",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Transforming images\n",
|
||
"\n",
|
||
"CNNs transform the original image layer by layer from the original\n",
|
||
"pixel values to the final class scores. \n",
|
||
"\n",
|
||
"Observe that some layers contain\n",
|
||
"parameters and other don’t. In particular, the CNN layers perform\n",
|
||
"transformations that are a function of not only the activations in the\n",
|
||
"input volume, but also of the parameters (the weights and biases of\n",
|
||
"the neurons). On the other hand, the RELU/POOL layers will implement a\n",
|
||
"fixed function. The parameters in the CONV/FC layers will be trained\n",
|
||
"with gradient descent so that the class scores that the CNN computes\n",
|
||
"are consistent with the labels in the training set for each image."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "7a990115",
|
||
"metadata": {},
|
||
"source": [
|
||
"## CNNs in brief\n",
|
||
"\n",
|
||
"In summary:\n",
|
||
"\n",
|
||
"* A CNN architecture is in the simplest case a list of Layers that transform the image volume into an output volume (e.g. holding the class scores)\n",
|
||
"\n",
|
||
"* There are a few distinct types of Layers (e.g. CONV/FC/RELU/POOL are by far the most popular)\n",
|
||
"\n",
|
||
"* Each Layer accepts an input 3D volume and transforms it to an output 3D volume through a differentiable function\n",
|
||
"\n",
|
||
"* Each Layer may or may not have parameters (e.g. CONV/FC do, RELU/POOL don’t)\n",
|
||
"\n",
|
||
"* Each Layer may or may not have additional hyperparameters (e.g. CONV/FC/POOL do, RELU doesn’t)\n",
|
||
"\n",
|
||
"For more material on convolutional networks, we strongly recommend\n",
|
||
"the course\n",
|
||
"[IN5400 – Machine Learning for Image Analysis](https://www.uio.no/studier/emner/matnat/ifi/IN5400/index-eng.html)\n",
|
||
"and the slides of [CS231](http://cs231n.github.io/convolutional-networks/) which is taught at Stanford University (consistently ranked as one of the top computer science programs in the world). [Michael Nielsen's book is a must read, in particular chapter 6 which deals with CNNs](http://neuralnetworksanddeeplearning.com/chap6.html).\n",
|
||
"\n",
|
||
"The textbook by Goodfellow et al, see chapter 9 contains an in depth discussion as well."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "fbc35b23",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Key Idea\n",
|
||
"\n",
|
||
"A dense neural network is representd by an affine operation (like matrix-matrix multiplication) where all parameters are included.\n",
|
||
"\n",
|
||
"The key idea in CNNs for say imaging is that in images neighbor pixels tend to be related! So we connect\n",
|
||
"only neighboring neurons in the input instead of connecting all with the first hidden layer.\n",
|
||
"\n",
|
||
"We say we perform a filtering (convolution is the mathematical operation)."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "95f90e42",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Mathematics of CNNs\n",
|
||
"\n",
|
||
"The mathematics of CNNs is based on the mathematical operation of\n",
|
||
"**convolution**. In mathematics (in particular in functional analysis),\n",
|
||
"convolution is represented by mathematical operation (integration,\n",
|
||
"summation etc) on two function in order to produce a third function\n",
|
||
"that expresses how the shape of one gets modified by the other.\n",
|
||
"Convolution has a plethora of applications in a variety of disciplines, spanning from statistics to signal processing, computer vision, solutions of differential equations,linear algebra, engineering, and yes, machine learning.\n",
|
||
"\n",
|
||
"Mathematically, convolution is defined as follows (one-dimensional example):\n",
|
||
"Let us define a continuous function $y(t)$ given by"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "1a582990",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"y(t) = \\int x(a) w(t-a) da,\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "8a4fae4c",
|
||
"metadata": {},
|
||
"source": [
|
||
"where $x(a)$ represents a so-called input and $w(t-a)$ is normally called the weight function or kernel.\n",
|
||
"\n",
|
||
"The above integral is written in a more compact form as"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "7ddf0d4b",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"y(t) = \\left(x * w\\right)(t).\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "af350fa5",
|
||
"metadata": {},
|
||
"source": [
|
||
"The discretized version reads"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "7e68a973",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"y(t) = \\sum_{a=-\\infty}^{a=\\infty}x(a)w(t-a).\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "f5753124",
|
||
"metadata": {},
|
||
"source": [
|
||
"Computing the inverse of the above convolution operations is known as deconvolution.\n",
|
||
"\n",
|
||
"How can we use this? And what does it mean? Let us study some familiar examples first."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "e657578c",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Convolution Examples: Polynomial multiplication\n",
|
||
"\n",
|
||
"We have already met such an example in project 1 when we tried to set\n",
|
||
"up the design matrix for a two-dimensional function. This was an\n",
|
||
"example of polynomial multiplication. Let us recast such a problem in terms of the convolution operation.\n",
|
||
"Let us look a the following polynomials to second and third order, respectively:"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "a7ab8c44",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"p(t) = \\alpha_0+\\alpha_1 t+\\alpha_2 t^2,\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "f8b3e313",
|
||
"metadata": {},
|
||
"source": [
|
||
"and"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "31842251",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"s(t) = \\beta_0+\\beta_1 t+\\beta_2 t^2+\\beta_3 t^3.\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "6b8a1979",
|
||
"metadata": {},
|
||
"source": [
|
||
"The polynomial multiplication gives us a new polynomial of degree $5$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "75fcd18c",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"z(t) = \\delta_0+\\delta_1 t+\\delta_2 t^2+\\delta_3 t^3+\\delta_4 t^4+\\delta_5 t^5.\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "f7853eed",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Efficient Polynomial Multiplication\n",
|
||
"\n",
|
||
"Computing polynomial products can be implemented efficiently if we rewrite the more brute force multiplications using convolution.\n",
|
||
"We note first that the new coefficients are given as"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "aa6b8f30",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\begin{split}\n",
|
||
"\\delta_0=&\\alpha_0\\beta_0\\\\\n",
|
||
"\\delta_1=&\\alpha_1\\beta_0+\\alpha_1\\beta_0\\\\\n",
|
||
"\\delta_2=&\\alpha_0\\beta_2+\\alpha_1\\beta_1+\\alpha_2\\beta_0\\\\\n",
|
||
"\\delta_3=&\\alpha_1\\beta_2+\\alpha_2\\beta_1+\\alpha_0\\beta_3\\\\\n",
|
||
"\\delta_4=&\\alpha_2\\beta_2+\\alpha_1\\beta_3\\\\\n",
|
||
"\\delta_5=&\\alpha_2\\beta_3.\\\\\n",
|
||
"\\end{split}\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "3b0d50d6",
|
||
"metadata": {},
|
||
"source": [
|
||
"We note that $\\alpha_i=0$ except for $i\\in \\left\\{0,1,2\\right\\}$ and $\\beta_i=0$ except for $i\\in\\left\\{0,1,2,3\\right\\}$.\n",
|
||
"\n",
|
||
"We can then rewrite the coefficients $\\delta_j$ using a discrete convolution as"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "ca1b360f",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\delta_j = \\sum_{i=-\\infty}^{i=\\infty}\\alpha_i\\beta_{j-i}=(\\alpha * \\beta)_j,\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "4da60fe0",
|
||
"metadata": {},
|
||
"source": [
|
||
"or as a double sum with restriction $l=i+j$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "17ef5106",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\delta_l = \\sum_{ij}\\alpha_i\\beta_{j}.\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "c75712f0",
|
||
"metadata": {},
|
||
"source": [
|
||
"Do you see a potential drawback with these equations?"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "1ba6594d",
|
||
"metadata": {},
|
||
"source": [
|
||
"## A more efficient way of coding the above Convolution\n",
|
||
"\n",
|
||
"Since we only have a finite number of $\\alpha$ and $\\beta$ values\n",
|
||
"which are non-zero, we can rewrite the above convolution expressions\n",
|
||
"as a matrix-vector multiplication"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "bd1b9286",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\boldsymbol{\\delta}=\\begin{bmatrix}\\alpha_0 & 0 & 0 & 0 \\\\\n",
|
||
" \\alpha_1 & \\alpha_0 & 0 & 0 \\\\\n",
|
||
"\t\t\t \\alpha_2 & \\alpha_1 & \\alpha_0 & 0 \\\\\n",
|
||
"\t\t\t 0 & \\alpha_2 & \\alpha_1 & \\alpha_0 \\\\\n",
|
||
"\t\t\t 0 & 0 & \\alpha_2 & \\alpha_1 \\\\\n",
|
||
"\t\t\t 0 & 0 & 0 & \\alpha_2\n",
|
||
"\t\t\t \\end{bmatrix}\\begin{bmatrix} \\beta_0 \\\\ \\beta_1 \\\\ \\beta_2 \\\\ \\beta_3\\end{bmatrix}.\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "f88ab8dc",
|
||
"metadata": {},
|
||
"source": [
|
||
"The process is commutative and we can easily see that we can rewrite the multiplication in terms of a matrix holding $\\beta$ and a vector holding $\\alpha$.\n",
|
||
"In this case we have"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "a0f533df",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\boldsymbol{\\delta}=\\begin{bmatrix}\\beta_0 & 0 & 0 \\\\\n",
|
||
" \\beta_1 & \\beta_0 & 0 \\\\\n",
|
||
"\t\t\t \\beta_2 & \\beta_1 & \\beta_0 \\\\\n",
|
||
"\t\t\t \\beta_3 & \\beta_2 & \\beta_1 \\\\\n",
|
||
"\t\t\t 0 & \\beta_3 & \\beta_2 \\\\\n",
|
||
"\t\t\t 0 & 0 & \\beta_3\n",
|
||
"\t\t\t \\end{bmatrix}\\begin{bmatrix} \\alpha_0 \\\\ \\alpha_1 \\\\ \\alpha_2\\end{bmatrix}.\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "0618610f",
|
||
"metadata": {},
|
||
"source": [
|
||
"Note that the use of these matrices is for mathematical purposes only and not implementation purposes.\n",
|
||
"When implementing the above equation we do not encode (and allocate memory) the matrices explicitely.\n",
|
||
"We rather code the convolutions in the minimal memory footprint that they require.\n",
|
||
"\n",
|
||
"Does the number of floating point operations change here when we use the commutative property?"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "41f3f297",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Convolution Examples: Principle of Superposition and Periodic Forces (Fourier Transforms)\n",
|
||
"\n",
|
||
"For problems with so-called harmonic oscillations, given by for example the following differential equation"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "c7996c86",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"m\\frac{d^2x}{dt^2}+\\eta\\frac{dx}{dt}+x(t)=F(t),\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "55a601e4",
|
||
"metadata": {},
|
||
"source": [
|
||
"where $F(t)$ is an applied external force acting on the system (often called a driving force), one can use the theory of Fourier transformations to find the solutions of this type of equations.\n",
|
||
"\n",
|
||
"If one has several driving forces, $F(t)=\\sum_n F_n(t)$, one can find\n",
|
||
"the particular solution to each $F_n$, $x_{pn}(t)$, and the particular\n",
|
||
"solution for the entire driving force is then given by a series like"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "e0006437",
|
||
"metadata": {},
|
||
"source": [
|
||
"<!-- Equation labels as ordinary links -->\n",
|
||
"<div id=\"_auto3\"></div>\n",
|
||
"\n",
|
||
"$$\n",
|
||
"\\begin{equation}\n",
|
||
"x_p(t)=\\sum_nx_{pn}(t).\n",
|
||
"\\label{_auto3} \\tag{21}\n",
|
||
"\\end{equation}\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "34568d1f",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Principle of Superposition\n",
|
||
"\n",
|
||
"This is known as the principle of superposition. It only applies when\n",
|
||
"the homogenous equation is linear. If there were an anharmonic term\n",
|
||
"such as $x^3$ in the homogenous equation, then when one summed various\n",
|
||
"solutions, $x=(\\sum_n x_n)^2$, one would get cross\n",
|
||
"terms. Superposition is especially useful when $F(t)$ can be written\n",
|
||
"as a sum of sinusoidal terms, because the solutions for each\n",
|
||
"sinusoidal (sine or cosine) term is analytic. \n",
|
||
"\n",
|
||
"Driving forces are often periodic, even when they are not\n",
|
||
"sinusoidal. Periodicity implies that for some time $\\tau$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "9be00807",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\begin{eqnarray}\n",
|
||
"F(t+\\tau)=F(t). \n",
|
||
"\\end{eqnarray}\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "3dd03861",
|
||
"metadata": {},
|
||
"source": [
|
||
"One example of a non-sinusoidal periodic force is a square wave. Many\n",
|
||
"components in electric circuits are non-linear, e.g. diodes, which\n",
|
||
"makes many wave forms non-sinusoidal even when the circuits are being\n",
|
||
"driven by purely sinusoidal sources."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "8e79b05f",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Simple Code Example\n",
|
||
"\n",
|
||
"The code here shows a typical example of such a square wave generated using the functionality included in the **scipy** Python package. We have used a period of $\\tau=0.2$."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 11,
|
||
"id": "9743d437",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"import numpy as np\n",
|
||
"import math\n",
|
||
"from scipy import signal\n",
|
||
"import matplotlib.pyplot as plt\n",
|
||
"\n",
|
||
"# number of points \n",
|
||
"n = 500\n",
|
||
"# start and final times \n",
|
||
"t0 = 0.0\n",
|
||
"tn = 1.0\n",
|
||
"# Period \n",
|
||
"t = np.linspace(t0, tn, n, endpoint=False)\n",
|
||
"SqrSignal = np.zeros(n)\n",
|
||
"SqrSignal = 1.0+signal.square(2*np.pi*5*t)\n",
|
||
"plt.plot(t, SqrSignal)\n",
|
||
"plt.ylim(-0.5, 2.5)\n",
|
||
"plt.show()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "e73902c2",
|
||
"metadata": {},
|
||
"source": [
|
||
"For the sinusoidal example the\n",
|
||
"period is $\\tau=2\\pi/\\omega$. However, higher harmonics can also\n",
|
||
"satisfy the periodicity requirement. In general, any force that\n",
|
||
"satisfies the periodicity requirement can be expressed as a sum over\n",
|
||
"harmonics,"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "20805935",
|
||
"metadata": {},
|
||
"source": [
|
||
"<!-- Equation labels as ordinary links -->\n",
|
||
"<div id=\"_auto4\"></div>\n",
|
||
"\n",
|
||
"$$\n",
|
||
"\\begin{equation}\n",
|
||
"F(t)=\\frac{f_0}{2}+\\sum_{n>0} f_n\\cos(2n\\pi t/\\tau)+g_n\\sin(2n\\pi t/\\tau).\n",
|
||
"\\label{_auto4} \\tag{22}\n",
|
||
"\\end{equation}\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "345f9874",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Wrapping up Fourier transforms\n",
|
||
"\n",
|
||
"We can write down the answer for\n",
|
||
"$x_{pn}(t)$, by substituting $f_n/m$ or $g_n/m$ for $F_0/m$. By\n",
|
||
"writing each factor $2n\\pi t/\\tau$ as $n\\omega t$, with $\\omega\\equiv\n",
|
||
"2\\pi/\\tau$,"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "5fa36e45",
|
||
"metadata": {},
|
||
"source": [
|
||
"<!-- Equation labels as ordinary links -->\n",
|
||
"<div id=\"eq:fourierdef1\"></div>\n",
|
||
"\n",
|
||
"$$\n",
|
||
"\\begin{equation}\n",
|
||
"\\label{eq:fourierdef1} \\tag{23}\n",
|
||
"F(t)=\\frac{f_0}{2}+\\sum_{n>0}f_n\\cos(n\\omega t)+g_n\\sin(n\\omega t).\n",
|
||
"\\end{equation}\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "c9f2fa30",
|
||
"metadata": {},
|
||
"source": [
|
||
"The solutions for $x(t)$ then come from replacing $\\omega$ with\n",
|
||
"$n\\omega$ for each term in the particular solution,"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "e6ed026a",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\begin{eqnarray}\n",
|
||
"x_p(t)&=&\\frac{f_0}{2k}+\\sum_{n>0} \\alpha_n\\cos(n\\omega t-\\delta_n)+\\beta_n\\sin(n\\omega t-\\delta_n),\\\\\n",
|
||
"\\nonumber\n",
|
||
"\\alpha_n&=&\\frac{f_n/m}{\\sqrt{((n\\omega)^2-\\omega_0^2)+4\\beta^2n^2\\omega^2}},\\\\\n",
|
||
"\\nonumber\n",
|
||
"\\beta_n&=&\\frac{g_n/m}{\\sqrt{((n\\omega)^2-\\omega_0^2)+4\\beta^2n^2\\omega^2}},\\\\\n",
|
||
"\\nonumber\n",
|
||
"\\delta_n&=&\\tan^{-1}\\left(\\frac{2\\beta n\\omega}{\\omega_0^2-n^2\\omega^2}\\right).\n",
|
||
"\\end{eqnarray}\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "b925f9a5",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Finding the Coefficients\n",
|
||
"\n",
|
||
"Because the forces have been applied for a long time, any non-zero\n",
|
||
"damping eliminates the homogenous parts of the solution, so one need\n",
|
||
"only consider the particular solution for each $n$.\n",
|
||
"\n",
|
||
"The problem is considered solved if one can find expressions for the\n",
|
||
"coefficients $f_n$ and $g_n$, even though the solutions are expressed\n",
|
||
"as an infinite sum. The coefficients can be extracted from the\n",
|
||
"function $F(t)$ by"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "6dac2506",
|
||
"metadata": {},
|
||
"source": [
|
||
"<!-- Equation labels as ordinary links -->\n",
|
||
"<div id=\"eq:fourierdef2\"></div>\n",
|
||
"\n",
|
||
"$$\n",
|
||
"\\begin{eqnarray}\n",
|
||
"\\label{eq:fourierdef2} \\tag{24}\n",
|
||
"f_n&=&\\frac{2}{\\tau}\\int_{-\\tau/2}^{\\tau/2} dt~F(t)\\cos(2n\\pi t/\\tau),\\\\\n",
|
||
"\\nonumber\n",
|
||
"g_n&=&\\frac{2}{\\tau}\\int_{-\\tau/2}^{\\tau/2} dt~F(t)\\sin(2n\\pi t/\\tau).\n",
|
||
"\\end{eqnarray}\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "a3582398",
|
||
"metadata": {},
|
||
"source": [
|
||
"To check the consistency of these expressions and to verify\n",
|
||
"Eq. ([24](#eq:fourierdef2)), one can insert the expansion of $F(t)$ in\n",
|
||
"Eq. ([23](#eq:fourierdef1)) into the expression for the coefficients in\n",
|
||
"Eq. ([24](#eq:fourierdef2)) and see whether"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "c28b32ac",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\begin{eqnarray}\n",
|
||
"f_n&=?&\\frac{2}{\\tau}\\int_{-\\tau/2}^{\\tau/2} dt~\\left\\{\n",
|
||
"\\frac{f_0}{2}+\\sum_{m>0}f_m\\cos(m\\omega t)+g_m\\sin(m\\omega t)\n",
|
||
"\\right\\}\\cos(n\\omega t).\n",
|
||
"\\end{eqnarray}\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "e7bb2438",
|
||
"metadata": {},
|
||
"source": [
|
||
"Immediately, one can throw away all the terms with $g_m$ because they\n",
|
||
"convolute an even and an odd function. The term with $f_0/2$\n",
|
||
"disappears because $\\cos(n\\omega t)$ is equally positive and negative\n",
|
||
"over the interval and will integrate to zero. For all the terms\n",
|
||
"$f_m\\cos(m\\omega t)$ appearing in the sum, one can use angle addition\n",
|
||
"formulas to see that $\\cos(m\\omega t)\\cos(n\\omega\n",
|
||
"t)=(1/2)(\\cos[(m+n)\\omega t]+\\cos[(m-n)\\omega t]$. This will integrate\n",
|
||
"to zero unless $m=n$. In that case the $m=n$ term gives"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "f174e71f",
|
||
"metadata": {},
|
||
"source": [
|
||
"<!-- Equation labels as ordinary links -->\n",
|
||
"<div id=\"_auto5\"></div>\n",
|
||
"\n",
|
||
"$$\n",
|
||
"\\begin{equation}\n",
|
||
"\\int_{-\\tau/2}^{\\tau/2}dt~\\cos^2(m\\omega t)=\\frac{\\tau}{2},\n",
|
||
"\\label{_auto5} \\tag{25}\n",
|
||
"\\end{equation}\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "efcb4f9c",
|
||
"metadata": {},
|
||
"source": [
|
||
"and"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "161f1560",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\begin{eqnarray}\n",
|
||
"f_n&=?&\\frac{2}{\\tau}\\int_{-\\tau/2}^{\\tau/2} dt~f_n/2\\\\\n",
|
||
"\\nonumber\n",
|
||
"&=&f_n~\\checkmark.\n",
|
||
"\\end{eqnarray}\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "ea40b7b4",
|
||
"metadata": {},
|
||
"source": [
|
||
"The same method can be used to check for the consistency of $g_n$."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "6ed3ab85",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Final words on Fourier Transforms\n",
|
||
"\n",
|
||
"The code here uses the Fourier series applied to a \n",
|
||
"square wave signal. The code here\n",
|
||
"visualizes the various approximations given by Fourier series compared\n",
|
||
"with a square wave with period $T=0.2$ (dimensionless time), width $0.1$ and max value of the force $F=2$. We\n",
|
||
"see that when we increase the number of components in the Fourier\n",
|
||
"series, the Fourier series approximation gets closer and closer to the\n",
|
||
"square wave signal."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 12,
|
||
"id": "d4395346",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"import numpy as np\n",
|
||
"import math\n",
|
||
"from scipy import signal\n",
|
||
"import matplotlib.pyplot as plt\n",
|
||
"\n",
|
||
"# number of points \n",
|
||
"n = 500\n",
|
||
"# start and final times \n",
|
||
"t0 = 0.0\n",
|
||
"tn = 1.0\n",
|
||
"# Period \n",
|
||
"T =0.2\n",
|
||
"# Max value of square signal \n",
|
||
"Fmax= 2.0\n",
|
||
"# Width of signal \n",
|
||
"Width = 0.1\n",
|
||
"t = np.linspace(t0, tn, n, endpoint=False)\n",
|
||
"SqrSignal = np.zeros(n)\n",
|
||
"FourierSeriesSignal = np.zeros(n)\n",
|
||
"SqrSignal = 1.0+signal.square(2*np.pi*5*t+np.pi*Width/T)\n",
|
||
"a0 = Fmax*Width/T\n",
|
||
"FourierSeriesSignal = a0\n",
|
||
"Factor = 2.0*Fmax/np.pi\n",
|
||
"for i in range(1,500):\n",
|
||
" FourierSeriesSignal += Factor/(i)*np.sin(np.pi*i*Width/T)*np.cos(i*t*2*np.pi/T)\n",
|
||
"plt.plot(t, SqrSignal)\n",
|
||
"plt.plot(t, FourierSeriesSignal)\n",
|
||
"plt.ylim(-0.5, 2.5)\n",
|
||
"plt.show()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "cbd2d810",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Two-dimensional Objects\n",
|
||
"\n",
|
||
"We often use convolutions over more than one dimension at a time. If\n",
|
||
"we have a two-dimensional image $I$ as input, we can have a **filter**\n",
|
||
"defined by a two-dimensional **kernel** $K$. This leads to an output $S$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "54b08352",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"S_(i,j)=(I * K)(i,j) = \\sum_m\\sum_n I(m,n)K(i-m,j-n).\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "e6d3c4d7",
|
||
"metadata": {},
|
||
"source": [
|
||
"Convolution is a commutatitave process, which means we can rewrite this equation as"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "b348035a",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"S_(i,j)=(I * K)(i,j) = \\sum_m\\sum_n I(i-m,j-n)K(m,n).\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "a397fbae",
|
||
"metadata": {},
|
||
"source": [
|
||
"Normally the latter is more straightforward to implement in a machine elarning library since there is less variation in the range of values of $m$ and $n$."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "decee3f7",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Cross-Correlation\n",
|
||
"\n",
|
||
"Many deep learning libraries implement cross-correlation instead of convolution"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "336d08e4",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"S_(i,j)=(I * K)(i,j) = \\sum_m\\sum_n I(i+m,j-+)K(m,n).\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "9bf87751",
|
||
"metadata": {},
|
||
"source": [
|
||
"## More on Dimensionalities\n",
|
||
"\n",
|
||
"In feilds like signal processing (and imaging as well), one designs\n",
|
||
"so-called filters. These filters are defined by the convolutions and\n",
|
||
"are often hand-crafted. One may specify filters for smoothing, edge\n",
|
||
"detection, frequency reshaping, and similar operations. However with\n",
|
||
"neural networks the idea is to automatically learn the filters and use\n",
|
||
"many of them in conjunction with non-linear operations (activation\n",
|
||
"functions).\n",
|
||
"\n",
|
||
"As an example consider a neural network operating on sound sequence\n",
|
||
"data. Assume that we an input vector $\\boldsymbol{x}$ of length $d=10^6$. We\n",
|
||
"construct then a neural network with onle hidden layer only with\n",
|
||
"$10^4$ nodes. This means that we will have a weight matrix with\n",
|
||
"$10^4\\times 10^6=10^{10}$ weights to be determined, together with $10^4$ biases.\n",
|
||
"\n",
|
||
"Assume furthermore that we have an output layer which is meant to train whether the sound sequence represents a human voice (true) or something else (false).\n",
|
||
"It means that we have only one output node. But since this output node connects to $10^4$ nodes in the hidden layer, there are in total $10^4$ weights to be determined for the output layer, plus one bias. In total we have"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "1ecf964a",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"\\mathrm{NumberParameters}=10^{10}+10^4+10^4+1 \\approx 10^{10},\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "41608899",
|
||
"metadata": {},
|
||
"source": [
|
||
"that is ten billion parameters to determine."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "78314823",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Further Dimensionality Remarks\n",
|
||
"\n",
|
||
"In today’s architecture one can train such neural networks, however\n",
|
||
"this is a huge number of parameters for the task at hand. In general,\n",
|
||
"it is a very wasteful and inefficient use of dense matrices as\n",
|
||
"parameters. Just as importantly, such trained network parameters are\n",
|
||
"very specific for the type of input data on which they were trained\n",
|
||
"and the network is not likely to generalize easily to variations in\n",
|
||
"the input.\n",
|
||
"\n",
|
||
"The main principles that justify convolutions is locality of\n",
|
||
"information and repetion of patterns within the signal. Sound samples\n",
|
||
"of the input in adjacent spots are much more likely to affect each\n",
|
||
"other than those that are very far away. Similarly, sounds are\n",
|
||
"repeated in multiple times in the signal. While slightly simplistic,\n",
|
||
"reasoning about such a sound example demonstrates this. The same\n",
|
||
"principles then apply to images and other similar data."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "8c588e74",
|
||
"metadata": {},
|
||
"source": [
|
||
"## CNNs in more detail, Lecture from IN5400\n",
|
||
"\n",
|
||
"* [Lectures from IN5400 spring 2019](https://www.uio.no/studier/emner/matnat/ifi/IN5400/v19/material/week5/in5400_2019_week5_convolutional_nerual_networks.pdf)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "dde50e2c",
|
||
"metadata": {},
|
||
"source": [
|
||
"## CNNs in more detail, building convolutional neural networks in Tensorflow and Keras\n",
|
||
"\n",
|
||
"As discussed above, CNNs are neural networks built from the assumption that the inputs\n",
|
||
"to the network are 2D images. This is important because the number of features or pixels in images\n",
|
||
"grows very fast with the image size, and an enormous number of weights and biases are needed in order to build an accurate network. \n",
|
||
"\n",
|
||
"As before, we still have our input, a hidden layer and an output. What's novel about convolutional networks\n",
|
||
"are the **convolutional** and **pooling** layers stacked in pairs between the input and the hidden layer.\n",
|
||
"In addition, the data is no longer represented as a 2D feature matrix, instead each input is a number of 2D\n",
|
||
"matrices, typically 1 for each color dimension (Red, Green, Blue)."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "29fa7070",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Setting it up\n",
|
||
"\n",
|
||
"It means that to represent the entire\n",
|
||
"dataset of images, we require a 4D matrix or **tensor**. This tensor has the dimensions:"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "a22ddefa",
|
||
"metadata": {},
|
||
"source": [
|
||
"$$\n",
|
||
"(n_{inputs},\\, n_{pixels, width},\\, n_{pixels, height},\\, depth) .\n",
|
||
"$$"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "cd11b854",
|
||
"metadata": {},
|
||
"source": [
|
||
"## The MNIST dataset again\n",
|
||
"\n",
|
||
"The MNIST dataset consists of grayscale images with a pixel size of\n",
|
||
"$28\\times 28$, meaning we require $28 \\times 28 = 724$ weights to each\n",
|
||
"neuron in the first hidden layer.\n",
|
||
"\n",
|
||
"If we were to analyze images of size $128\\times 128$ we would require\n",
|
||
"$128 \\times 128 = 16384$ weights to each neuron. Even worse if we were\n",
|
||
"dealing with color images, as most images are, we have an image matrix\n",
|
||
"of size $128\\times 128$ for each color dimension (Red, Green, Blue),\n",
|
||
"meaning 3 times the number of weights $= 49152$ are required for every\n",
|
||
"single neuron in the first hidden layer."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "d58e3877",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Strong correlations\n",
|
||
"\n",
|
||
"Images typically have strong local correlations, meaning that a small\n",
|
||
"part of the image varies little from its neighboring regions. If for\n",
|
||
"example we have an image of a blue car, we can roughly assume that a\n",
|
||
"small blue part of the image is surrounded by other blue regions.\n",
|
||
"\n",
|
||
"Therefore, instead of connecting every single pixel to a neuron in the\n",
|
||
"first hidden layer, as we have previously done with deep neural\n",
|
||
"networks, we can instead connect each neuron to a small part of the\n",
|
||
"image (in all 3 RGB depth dimensions). The size of each small area is\n",
|
||
"fixed, and known as a [receptive](https://en.wikipedia.org/wiki/Receptive_field)."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "eeb50fa4",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Layers of a CNN\n",
|
||
"The layers of a convolutional neural network arrange neurons in 3D: width, height and depth. \n",
|
||
"The input image is typically a square matrix of depth 3. \n",
|
||
"\n",
|
||
"A **convolution** is performed on the image which outputs\n",
|
||
"a 3D volume of neurons. The weights to the input are arranged in a number of 2D matrices, known as **filters**.\n",
|
||
"\n",
|
||
"Each filter slides along the input image, taking the dot product\n",
|
||
"between each small part of the image and the filter, in all depth\n",
|
||
"dimensions. This is then passed through a non-linear function,\n",
|
||
"typically the **Rectified Linear (ReLu)** function, which serves as the\n",
|
||
"activation of the neurons in the first convolutional layer. This is\n",
|
||
"further passed through a **pooling layer**, which reduces the size of the\n",
|
||
"convolutional layer, e.g. by taking the maximum or average across some\n",
|
||
"small regions, and this serves as input to the next convolutional\n",
|
||
"layer."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "5ad42b43",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Systematic reduction\n",
|
||
"\n",
|
||
"By systematically reducing the size of the input volume, through\n",
|
||
"convolution and pooling, the network should create representations of\n",
|
||
"small parts of the input, and then from them assemble representations\n",
|
||
"of larger areas. The final pooling layer is flattened to serve as\n",
|
||
"input to a hidden layer, such that each neuron in the final pooling\n",
|
||
"layer is connected to every single neuron in the hidden layer. This\n",
|
||
"then serves as input to the output layer, e.g. a softmax output for\n",
|
||
"classification."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "a3193d14",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Prerequisites: Collect and pre-process data"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 3,
|
||
"id": "3cf1c5e2",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"inputs = (n_inputs, pixel_width, pixel_height, depth) = (1797, 8, 8, 1)\n",
|
||
"labels = (n_inputs) = (1797,)\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA7YAAADICAYAAADcOn20AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAA9hAAAPYQGoP6dpAAAQx0lEQVR4nO3dbWydZRkH8OuMjklYaEHMxla3ji46/KBdiItodB2oEUVXDNMYois6QgLCkKkhEGwHGDCaWIxODY510SUuJmSdZr4AdjUmxPBWEhaNjlBEzSYOOl+SbQwfPxhqN9Y68G7rdc7vl/QDZz3/c5+T6z7P899zOKtVVVUFAAAAJDVrphcAAAAA/wvFFgAAgNQUWwAAAFJTbAEAAEhNsQUAACA1xRYAAIDUFFsAAABSU2wBAABITbEFAAAgtYYptv39/VGr1eLhhx8ukler1eLTn/50kazxmb29va/6/nv37o2Pf/zjsWjRojjttNOivb09brjhhjhw4EC5RZJSvc9/b29v1Gq1CX++//3vF10r+dgD9kAjq/f5f+aZZ+LSSy+Nc889N04//fRobm6O5cuXx9e//vU4evRo0XWSj/lvHE0zvQDKePbZZ+Ntb3tbnHHGGXHbbbfFokWL4rHHHouenp4YHByMRx55JGbNapi/x6DBrFu3Lt73vve97PYrr7wynnzyyRP+GdQTe4BG9o9//CPOOOOMuOWWW2LRokVx5MiR2LVrV1x77bUxPDwc3/nOd2Z6iTBlzP9/KLZ1YmBgIA4cOBDbt2+Piy66KCIiVq1aFYcPH46bbropHn/88Vi+fPkMrxKmRmtra7S2th5z28jISOzZsycuv/zyaGlpmZmFwTSxB2hky5Yti61btx5z28UXXxx//vOfY+vWrfGNb3wj5syZM0Org6ll/v/DJbxxDh06FBs2bIiOjo5obm6Os846Ky644IIYGBiY8D7f/va34w1veEPMmTMn3vSmN53w41779u2Lq666KlpbW+PUU0+NJUuWxMaNG4t+PGD27NkREdHc3HzM7S+dzLzmNa8p9ljUp8zzfyL33HNPVFUV69atm9LHoX7YAzSyepv/iIjXve51MWvWrDjllFOm/LHIzfzXB1dsxzl8+HA899xz8dnPfjYWLlwYR44cifvvvz8+/OEPx5YtW+ITn/jEMb+/c+fOGBwcjFtvvTVOP/302LRpU3zsYx+LpqamuOyyyyLi3wO9YsWKmDVrVnzhC1+I9vb2ePDBB+P222+PkZGR2LJly6Rramtri4h//837ZLq6umLRokWxYcOG2LRpUyxevDgeffTRuPPOO+ODH/xgnHfeea/6daExZJ7/4/3zn/+M/v7+WLp0aaxcufIV3ZfGZQ/QyOph/quqihdffDH+9re/xc9+9rPo7++PDRs2RFOT010mZ/7rRNUgtmzZUkVE9dBDD530fY4ePVq98MIL1ac+9alq+fLlx/xZRFSnnXZatW/fvmN+f9myZdXSpUvHbrvqqququXPnVk8//fQx9//KV75SRUS1Z8+eYzJ7enqO+b329vaqvb39pNb7pz/9qbrggguqiBj7WbNmTXXo0KGTfcrUqUaY//F+/OMfVxFR3XHHHa/4vtQne4BG1ijzf8cdd4yd/9Rqtermm28+6ftSv8x/4/BR5OP84Ac/iHe84x0xd+7caGpqitmzZ8fmzZvj17/+9ct+96KLLop58+aN/fcpp5wSH/3oR2Pv3r3xhz/8ISIifvSjH8WqVatiwYIFcfTo0bGfiy++OCIihoaGJl3P3r17Y+/evf913c8//3ysXr06/vrXv8a2bdviF7/4RWzatCl++ctfxoc+9KGG+1Y0Xp2s83+8zZs3R1NTU3R3d7/i+9LY7AEaWfb57+7ujoceeih++tOfxuc///n48pe/HNdee+1J35/GZv7za6Br0//dvffeGx/5yEdizZo18bnPfS7mz58fTU1N8c1vfjPuueeel/3+/PnzJ7ztwIED0draGvv3748f/vCHY/8P7PH+8pe/FFn7l770pRgeHo6nn346zjnnnIiIeOc73xnLli2LCy+8MLZt2xZr164t8ljUp8zzf3zmzp074wMf+MAJ1wgTsQdoZPUw//Pnzx9bw3vf+94488wz48Ybb4xPfvKTvkCTSZn/+qDYjvO9730vlixZEtu3b49arTZ2++HDh0/4+/v27Zvwtte+9rUREXH22WfHm9/85vjiF794wowFCxb8r8uOiIjh4eFYuHDhWKl9yVvf+taIiHjiiSeKPA71K/P8j/fd7343jhw54gtzeMXsARpZvcz/eCtWrIiIiN/+9rcNc2LPq2P+64NiO06tVotTTz31mIHet2/fhN+I9sADD8T+/fvHPorw4osvxvbt26O9vX3sn1245JJLYteuXdHe3h5nnnnmlK19wYIF8cADD8Qf//jHWLhw4djtDz74YETEy/4ZCDhe5vkfb/PmzbFgwYKxj/rAybIHaGT1Mv/jDQ4ORkTE0qVLp/2xycX814eGK7Y///nPT/jtYu9///vjkksuiXvvvTeuvvrquOyyy+KZZ56J2267Lc4555z43e9+97L7nH322XHhhRfGLbfcMvaNaL/5zW+O+brvW2+9Ne677754+9vfHtddd1288Y1vjEOHDsXIyEjs2rUrvvWtb01aOl8axv/2Gftrrrkmtm3bFu95z3vixhtvjNe//vXxxBNPxO233x7z5s2Lyy+//CRfIepZvc7/S371q1/Fnj174qabbmqor7fn5NkDNLJ6nf+enp7Yv39/vOtd74qFCxfG6Oho/OQnP4m777471qxZE+eff/5JvkLUM/PfAGb626umy0vfiDbRz1NPPVVVVVXdeeedVVtbWzVnzpzqvPPOq+6+++6qp6enOv6liojqmmuuqTZt2lS1t7dXs2fPrpYtW1Zt27btZY/97LPPVtddd121ZMmSavbs2dVZZ51VnX/++dXNN99c/f3vfz8m8/hvRFu8eHG1ePHik3qOjz76aHXppZdWra2t1Zw5c6pzzz23WrduXfX73//+Fb1W1J9GmP+qqqorr7yyqtVq1ZNPPnnS96Ex2AM0snqf/507d1bvfve7q3nz5lVNTU3V3LlzqxUrVlRf+9rXqhdeeOEVv17UF/PfOGpVVVWlyzIAAABMF//cDwAAAKkptgAAAKSm2AIAAJCaYgsAAEBqii0AAACpKbYAAACkptgCAACQWtNML6CU/v7+onm9vb1F81paWormRUT09fUVzevs7Cyax/TZvXt30bzS+2nHjh1F8yIiDh48WDRvcHCwaJ79NL0GBgaK5q1fv75o3lQove/b2tqK5jGxkZGRonmlzwdKHwNKv19HRDQ3NxfNGx4eLppnP01udHS0aN7/+x4o/XwjzOyJuGILAABAaootAAAAqSm2AAAApKbYAgAAkJpiCwAAQGqKLQAAAKkptgAAAKSm2AIAAJCaYgsAAEBqii0AAACpKbYAAACkptgCAACQmmILAABAaootAAAAqSm2AAAApKbYAgAAkJpiCwAAQGqKLQAAAKk1zdQD7969u2jeFVdcUTRv9erVRfNaWlqK5kVEdHV1Fc0bHR0tmsf0uf7664vmlZ6F7u7uonkREXfddVfRvKnYo0xsZGSkaF7p98MMduzYUTSv9PsIE/t/f623bt1aNG9wcLBoXkT5Y4BzoOlV+vUu/X5Y+phSen0REf39/UXzent7i+bNBFdsAQAASE2xBQAAIDXFFgAAgNQUWwAAAFJTbAEAAEhNsQUAACA1xRYAAIDUFFsAAABSU2wBAABITbEFAAAgNcUWAACA1BRbAAAAUlNsAQAASE2xBQAAIDXFFgAAgNQUWwAAAFJTbAEAAEhNsQUAACA1xRYAAIDUalVVVTPxwNdff33RvJGRkaJ5O3bsKJrX2dlZNC8ioqWlpWhe6efM9Ck9/6Vna2hoqGheRMTatWuL5o2OjhbNY3r19fUVzevo6Ciat2rVqqJ5ERErV64smrd79+6iefCS0ud8ERHDw8NF88w/U2kqekDp41Tp4+hMcMUWAACA1BRbAAAAUlNsAQAASE2xBQAAIDXFFgAAgNQUWwAAAFJTbAEAAEhNsQUAACA1xRYAAIDUFFsAAABSU2wBAABITbEFAAAgNcUWAACA1BRbAAAAUlNsAQAASE2xBQAAIDXFFgAAgNQUWwAAAFJTbAEAAEitaaYeuK2trWjeyMhI0bze3t6ieUNDQ0XzIiIee+yx4pnkNDo6WjSv9H7q6ekpmhcR0dLSUjSv9HMu/R7H5Lq7u4vmlT4GTIXSx5XSzznDa8j06OjoKJ7Z399fNK/0cbT0MYrJlT6Gd3V1Fc2bCn19fTO9hP87rtgCAACQmmILAABAaootAAAAqSm2AAAApKbYAgAAkJpiCwAAQGqKLQAAAKkptgAAAKSm2AIAAJCaYgsAAEBqii0AAACpKbYAAACkptgCAACQmmILAABAaootAAAAqSm2AAAApKbYAgAAkJpiCwAAQGqKLQAAAKnVqqqqZnoRJXR0dBTNe/zxx4vmrV27tmheRER/f3/xTKbHwMBA0byurq6ieY2op6enaF5vb2/RvHozPDxcNK+zs7No3sGDB4vmTYXSx5XSM9vW1lY0D8YrPV+lj6N9fX1F85hcIx5TtmzZUjSvu7u7aN5McMUWAACA1BRbAAAAUlNsAQAASE2xBQAAIDXFFgAAgNQUWwAAAFJTbAEAAEhNsQUAACA1xRYAAIDUFFsAAABSU2wBAABITbEFAAAgNcUWAACA1BRbAAAAUlNsAQAASE2xBQAAIDXFFgAAgNQUWwAAAFJTbAEAAEhNsQUAACC1WlVV1UwvooSOjo6ZXsKkWlpaimeWfs59fX1F85jY7t27i+bt2LGjaN7w8HDRvJGRkaJ5EeXXOBV7lImV3gOrVq0qmlfa6tWri2eW3veQSWdn50wvYVKl3+Pqzejo6EwvYVKlzwmmYl5Ln1tNxbnadHPFFgAAgNQUWwAAAFJTbAEAAEhNsQUAACA1xRYAAIDUFFsAAABSU2wBAABITbEFAAAgNcUWAACA1BRbAAAAUlNsAQAASE2xBQAAIDXFFgAAgNQUWwAAAFJTbAEAAEhNsQUAACA1xRYAAIDUFFsAAABSU2wBAABIrWmmF1BKS0tL0bzOzs6ieb29vUXzIso/59JrLL2+elJ6vg4ePFg0r7+/v2heV1dX0bwI85Vd6T2wfv36onl33XVX0bwrrriiaB6MNzAwUDRv8eLFRfOGh4eL5k1F5lScpzGxoaGhonk9PT1F8zZu3Fg0r7u7u2heRPnjyujoaNG8mThPc8UWAACA1BRbAAAAUlNsAQAASE2xBQAAIDXFFgAAgNQUWwAAAFJTbAEAAEhNsQUAACA1xRYAAIDUFFsAAABSU2wBAABITbEFAAAgNcUWAACA1BRbAAAAUlNsAQAASE2xBQAAIDXFFgAAgNQUWwAAAFJTbAEAAEitaaYXUMpnPvOZonldXV1F8zZu3Fg0LyJi9erVRfNaWlqK5jF9nn/++aJ5Bw8eLJrX3d1dNA+m2lve8paieaXfr2G8r371q0XzhoaGiuY1NzcXzYsof1xxnJpeK1euLJrX2dlZNK/0nhodHS2aFxGxfv36onn10ANcsQUAACA1xRYAAIDUFFsAAABSU2wBAABITbEFAAAgNcUWAACA1BRbAAAAUlNsAQAASE2xBQAAIDXFFgAAgNQUWwAAAFJTbAEAAEhNsQUAACA1xRYAAIDUFFsAAABSU2wBAABITbEFAAAgNcUWAACA1BRbAAAAUqtVVVXN9CIAAADg1XLFFgAAgNQUWwAAAFJTbAEAAEhNsQUAACA1xRYAAIDUFFsAAABSU2wBAABITbEFAAAgNcUWAACA1P4F8SqxxH5w1EMAAAAASUVORK5CYII=\n",
|
||
"text/plain": [
|
||
"<Figure size 1200x1200 with 5 Axes>"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"# import necessary packages\n",
|
||
"import numpy as np\n",
|
||
"import matplotlib.pyplot as plt\n",
|
||
"from sklearn import datasets\n",
|
||
"\n",
|
||
"\n",
|
||
"# ensure the same random numbers appear every time\n",
|
||
"np.random.seed(0)\n",
|
||
"\n",
|
||
"# display images in notebook\n",
|
||
"%matplotlib inline\n",
|
||
"plt.rcParams['figure.figsize'] = (12,12)\n",
|
||
"\n",
|
||
"\n",
|
||
"# download MNIST dataset\n",
|
||
"digits = datasets.load_digits()\n",
|
||
"\n",
|
||
"# define inputs and labels\n",
|
||
"inputs = digits.images\n",
|
||
"labels = digits.target\n",
|
||
"\n",
|
||
"# RGB images have a depth of 3\n",
|
||
"# our images are grayscale so they should have a depth of 1\n",
|
||
"inputs = inputs[:,:,:,np.newaxis]\n",
|
||
"\n",
|
||
"print(\"inputs = (n_inputs, pixel_width, pixel_height, depth) = \" + str(inputs.shape))\n",
|
||
"print(\"labels = (n_inputs) = \" + str(labels.shape))\n",
|
||
"\n",
|
||
"\n",
|
||
"# choose some random images to display\n",
|
||
"n_inputs = len(inputs)\n",
|
||
"indices = np.arange(n_inputs)\n",
|
||
"random_indices = np.random.choice(indices, size=5)\n",
|
||
"\n",
|
||
"for i, image in enumerate(digits.images[random_indices]):\n",
|
||
" plt.subplot(1, 5, i+1)\n",
|
||
" plt.axis('off')\n",
|
||
" plt.imshow(image, cmap=plt.cm.gray_r, interpolation='nearest')\n",
|
||
" plt.title(\"Label: %d\" % digits.target[random_indices[i]])\n",
|
||
"plt.show()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "0639c167",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Importing Keras and Tensorflow"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 4,
|
||
"id": "c43a1a3c",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"from tensorflow.keras import datasets, layers, models\n",
|
||
"from tensorflow.keras.layers import Input\n",
|
||
"from tensorflow.keras.models import Sequential #This allows appending layers to existing models\n",
|
||
"from tensorflow.keras.layers import Dense #This allows defining the characteristics of a particular layer\n",
|
||
"from tensorflow.keras import optimizers #This allows using whichever optimiser we want (sgd,adam,RMSprop)\n",
|
||
"from tensorflow.keras import regularizers #This allows using whichever regularizer we want (l1,l2,l1_l2)\n",
|
||
"from tensorflow.keras.utils import to_categorical #This allows using categorical cross entropy as the cost function\n",
|
||
"#from tensorflow.keras import Conv2D\n",
|
||
"#from tensorflow.keras import MaxPooling2D\n",
|
||
"#from tensorflow.keras import Flatten\n",
|
||
"\n",
|
||
"from sklearn.model_selection import train_test_split\n",
|
||
"\n",
|
||
"# representation of labels\n",
|
||
"labels = to_categorical(labels)\n",
|
||
"\n",
|
||
"# split into train and test data\n",
|
||
"# one-liner from scikit-learn library\n",
|
||
"train_size = 0.8\n",
|
||
"test_size = 1 - train_size\n",
|
||
"X_train, X_test, Y_train, Y_test = train_test_split(inputs, labels, train_size=train_size,\n",
|
||
" test_size=test_size)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "beb42cb6",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Running with Keras"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 15,
|
||
"id": "9ee64b95",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"def create_convolutional_neural_network_keras(input_shape, receptive_field,\n",
|
||
" n_filters, n_neurons_connected, n_categories,\n",
|
||
" eta, lmbd):\n",
|
||
" model = Sequential()\n",
|
||
" model.add(layers.Conv2D(n_filters, (receptive_field, receptive_field), input_shape=input_shape, padding='same',\n",
|
||
" activation='relu', kernel_regularizer=regularizers.l2(lmbd)))\n",
|
||
" model.add(layers.MaxPooling2D(pool_size=(2, 2)))\n",
|
||
" model.add(layers.Flatten())\n",
|
||
" model.add(layers.Dense(n_neurons_connected, activation='relu', kernel_regularizer=regularizers.l2(lmbd)))\n",
|
||
" model.add(layers.Dense(n_categories, activation='softmax', kernel_regularizer=regularizers.l2(lmbd)))\n",
|
||
" \n",
|
||
" sgd = optimizers.SGD(lr=eta)\n",
|
||
" model.compile(loss='categorical_crossentropy', optimizer=sgd, metrics=['accuracy'])\n",
|
||
" \n",
|
||
" return model\n",
|
||
"\n",
|
||
"epochs = 100\n",
|
||
"batch_size = 100\n",
|
||
"input_shape = X_train.shape[1:4]\n",
|
||
"receptive_field = 3\n",
|
||
"n_filters = 10\n",
|
||
"n_neurons_connected = 50\n",
|
||
"n_categories = 10\n",
|
||
"\n",
|
||
"eta_vals = np.logspace(-5, 1, 7)\n",
|
||
"lmbd_vals = np.logspace(-5, 1, 7)\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "2e4e80f6",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Final part"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 16,
|
||
"id": "0bd52393",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"/Users/mhjensen/miniforge3/envs/myenv/lib/python3.9/site-packages/keras/optimizer_v2/gradient_descent.py:102: UserWarning: The `lr` argument is deprecated, use `learning_rate` instead.\n",
|
||
" super(SGD, self).__init__(name, **kwargs)\n"
|
||
]
|
||
},
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"12/12 [==============================] - 1s 28ms/step - loss: 2.9422 - accuracy: 0.0944\n",
|
||
"Learning rate = 1e-05\n",
|
||
"Lambda = 1e-05\n",
|
||
"Test accuracy: 0.094\n",
|
||
"\n",
|
||
"12/12 [==============================] - 1s 29ms/step - loss: 2.9493 - accuracy: 0.0917\n",
|
||
"Learning rate = 1e-05\n",
|
||
"Lambda = 0.0001\n",
|
||
"Test accuracy: 0.092\n",
|
||
"\n",
|
||
"12/12 [==============================] - 1s 28ms/step - loss: 3.0350 - accuracy: 0.0944\n",
|
||
"Learning rate = 1e-05\n",
|
||
"Lambda = 0.001\n",
|
||
"Test accuracy: 0.094\n",
|
||
"\n",
|
||
"12/12 [==============================] - 1s 28ms/step - loss: 3.8904 - accuracy: 0.0917\n",
|
||
"Learning rate = 1e-05\n",
|
||
"Lambda = 0.01\n",
|
||
"Test accuracy: 0.092\n",
|
||
"\n",
|
||
"12/12 [==============================] - 1s 29ms/step - loss: 12.3914 - accuracy: 0.0917\n",
|
||
"Learning rate = 1e-05\n",
|
||
"Lambda = 0.1\n",
|
||
"Test accuracy: 0.092\n",
|
||
"\n",
|
||
"12/12 [==============================] - 0s 23ms/step - loss: 92.4942 - accuracy: 0.0917\n",
|
||
"Learning rate = 1e-05\n",
|
||
"Lambda = 1.0\n",
|
||
"Test accuracy: 0.092\n",
|
||
"\n",
|
||
"12/12 [==============================] - 1s 30ms/step - loss: 525.0207 - accuracy: 0.0806\n",
|
||
"Learning rate = 1e-05\n",
|
||
"Lambda = 10.0\n",
|
||
"Test accuracy: 0.081\n",
|
||
"\n",
|
||
"12/12 [==============================] - 1s 27ms/step - loss: 1.3310 - accuracy: 0.5278\n",
|
||
"Learning rate = 0.0001\n",
|
||
"Lambda = 1e-05\n",
|
||
"Test accuracy: 0.528\n",
|
||
"\n",
|
||
"12/12 [==============================] - 1s 33ms/step - loss: 1.3376 - accuracy: 0.5139\n",
|
||
"Learning rate = 0.0001\n",
|
||
"Lambda = 0.0001\n",
|
||
"Test accuracy: 0.514\n",
|
||
"\n",
|
||
"12/12 [==============================] - 1s 27ms/step - loss: 1.4230 - accuracy: 0.5167\n",
|
||
"Learning rate = 0.0001\n",
|
||
"Lambda = 0.001\n",
|
||
"Test accuracy: 0.517\n",
|
||
"\n",
|
||
"12/12 [==============================] - 1s 27ms/step - loss: 2.2754 - accuracy: 0.5167\n",
|
||
"Learning rate = 0.0001\n",
|
||
"Lambda = 0.01\n",
|
||
"Test accuracy: 0.517\n",
|
||
"\n",
|
||
"12/12 [==============================] - 1s 28ms/step - loss: 10.3097 - accuracy: 0.5139\n",
|
||
"Learning rate = 0.0001\n",
|
||
"Lambda = 0.1\n",
|
||
"Test accuracy: 0.514\n",
|
||
"\n",
|
||
"12/12 [==============================] - 1019s 28ms/step - loss: 53.9860 - accuracy: 0.4972\n",
|
||
"Learning rate = 0.0001\n",
|
||
"Lambda = 1.0\n",
|
||
"Test accuracy: 0.497\n",
|
||
"\n",
|
||
"12/12 [==============================] - 0s 27ms/step - loss: 4.6519 - accuracy: 0.1389\n",
|
||
"Learning rate = 0.0001\n",
|
||
"Lambda = 10.0\n",
|
||
"Test accuracy: 0.139\n",
|
||
"\n",
|
||
"12/12 [==============================] - 1s 29ms/step - loss: 0.2474 - accuracy: 0.9167\n",
|
||
"Learning rate = 0.001\n",
|
||
"Lambda = 1e-05\n",
|
||
"Test accuracy: 0.917\n",
|
||
"\n",
|
||
"12/12 [==============================] - 0s 27ms/step - loss: 0.2513 - accuracy: 0.9194\n",
|
||
"Learning rate = 0.001\n",
|
||
"Lambda = 0.0001\n",
|
||
"Test accuracy: 0.919\n",
|
||
"\n",
|
||
"12/12 [==============================] - 0s 27ms/step - loss: 0.3400 - accuracy: 0.9167\n",
|
||
"Learning rate = 0.001\n",
|
||
"Lambda = 0.001\n",
|
||
"Test accuracy: 0.917\n",
|
||
"\n",
|
||
"12/12 [==============================] - 1s 30ms/step - loss: 1.1627 - accuracy: 0.9194\n",
|
||
"Learning rate = 0.001\n",
|
||
"Lambda = 0.01\n",
|
||
"Test accuracy: 0.919\n",
|
||
"\n",
|
||
"12/12 [==============================] - 0s 27ms/step - loss: 5.7782 - accuracy: 0.9250\n",
|
||
"Learning rate = 0.001\n",
|
||
"Lambda = 0.1\n",
|
||
"Test accuracy: 0.925\n",
|
||
"\n",
|
||
"12/12 [==============================] - 0s 25ms/step - loss: 2.6433 - accuracy: 0.6083\n",
|
||
"Learning rate = 0.001\n",
|
||
"Lambda = 1.0\n",
|
||
"Test accuracy: 0.608\n",
|
||
"\n",
|
||
"12/12 [==============================] - 1s 30ms/step - loss: 2.3032 - accuracy: 0.0778\n",
|
||
"Learning rate = 0.001\n",
|
||
"Lambda = 10.0\n",
|
||
"Test accuracy: 0.078\n",
|
||
"\n",
|
||
"12/12 [==============================] - 1s 29ms/step - loss: 0.0658 - accuracy: 0.9722\n",
|
||
"Learning rate = 0.01\n",
|
||
"Lambda = 1e-05\n",
|
||
"Test accuracy: 0.972\n",
|
||
"\n",
|
||
"12/12 [==============================] - 1s 27ms/step - loss: 0.0758 - accuracy: 0.9750\n",
|
||
"Learning rate = 0.01\n",
|
||
"Lambda = 0.0001\n",
|
||
"Test accuracy: 0.975\n",
|
||
"\n",
|
||
"12/12 [==============================] - 0s 25ms/step - loss: 0.1647 - accuracy: 0.9750\n",
|
||
"Learning rate = 0.01\n",
|
||
"Lambda = 0.001\n",
|
||
"Test accuracy: 0.975\n",
|
||
"\n",
|
||
"12/12 [==============================] - 1s 28ms/step - loss: 0.6665 - accuracy: 0.9806\n",
|
||
"Learning rate = 0.01\n",
|
||
"Lambda = 0.01\n",
|
||
"Test accuracy: 0.981\n",
|
||
"\n",
|
||
"12/12 [==============================] - 1s 29ms/step - loss: 0.9409 - accuracy: 0.9472\n",
|
||
"Learning rate = 0.01\n",
|
||
"Lambda = 0.1\n",
|
||
"Test accuracy: 0.947\n",
|
||
"\n",
|
||
"12/12 [==============================] - 1s 29ms/step - loss: 2.3065 - accuracy: 0.0778\n",
|
||
"Learning rate = 0.01\n",
|
||
"Lambda = 1.0\n",
|
||
"Test accuracy: 0.078\n",
|
||
"\n",
|
||
"12/12 [==============================] - 1s 31ms/step - loss: 2.3067 - accuracy: 0.0778\n",
|
||
"Learning rate = 0.01\n",
|
||
"Lambda = 10.0\n",
|
||
"Test accuracy: 0.078\n",
|
||
"\n",
|
||
"12/12 [==============================] - 1s 26ms/step - loss: 0.1937 - accuracy: 0.9556\n",
|
||
"Learning rate = 0.1\n",
|
||
"Lambda = 1e-05\n",
|
||
"Test accuracy: 0.956\n",
|
||
"\n",
|
||
"12/12 [==============================] - 1s 29ms/step - loss: 0.3655 - accuracy: 0.9167\n",
|
||
"Learning rate = 0.1\n",
|
||
"Lambda = 0.0001\n",
|
||
"Test accuracy: 0.917\n",
|
||
"\n",
|
||
"12/12 [==============================] - 1s 28ms/step - loss: 0.4640 - accuracy: 0.9083\n",
|
||
"Learning rate = 0.1\n",
|
||
"Lambda = 0.001\n",
|
||
"Test accuracy: 0.908\n",
|
||
"\n",
|
||
"12/12 [==============================] - 1s 29ms/step - loss: 0.3183 - accuracy: 0.9528\n",
|
||
"Learning rate = 0.1\n",
|
||
"Lambda = 0.01\n",
|
||
"Test accuracy: 0.953\n",
|
||
"\n",
|
||
"12/12 [==============================] - 1s 27ms/step - loss: 2.3076 - accuracy: 0.0778\n",
|
||
"Learning rate = 0.1\n",
|
||
"Lambda = 0.1\n",
|
||
"Test accuracy: 0.078\n",
|
||
"\n",
|
||
"12/12 [==============================] - 1s 26ms/step - loss: 2.3078 - accuracy: 0.0778\n",
|
||
"Learning rate = 0.1\n",
|
||
"Lambda = 1.0\n",
|
||
"Test accuracy: 0.078\n",
|
||
"\n",
|
||
"12/12 [==============================] - 1s 28ms/step - loss: nan - accuracy: 0.0778\n",
|
||
"Learning rate = 0.1\n",
|
||
"Lambda = 10.0\n",
|
||
"Test accuracy: 0.078\n",
|
||
"\n",
|
||
"12/12 [==============================] - 1s 26ms/step - loss: 37.0769 - accuracy: 0.0917\n",
|
||
"Learning rate = 1.0\n",
|
||
"Lambda = 1e-05\n",
|
||
"Test accuracy: 0.092\n",
|
||
"\n",
|
||
"12/12 [==============================] - 1s 27ms/step - loss: 165.7696 - accuracy: 0.0889\n",
|
||
"Learning rate = 1.0\n",
|
||
"Lambda = 0.0001\n",
|
||
"Test accuracy: 0.089\n",
|
||
"\n",
|
||
"12/12 [==============================] - 1s 25ms/step - loss: 12.5201 - accuracy: 0.0917\n",
|
||
"Learning rate = 1.0\n",
|
||
"Lambda = 0.001\n",
|
||
"Test accuracy: 0.092\n",
|
||
"\n",
|
||
"12/12 [==============================] - 1s 27ms/step - loss: 2.3108 - accuracy: 0.0889\n",
|
||
"Learning rate = 1.0\n",
|
||
"Lambda = 0.01\n",
|
||
"Test accuracy: 0.089\n",
|
||
"\n",
|
||
"12/12 [==============================] - 1s 27ms/step - loss: 2.3130 - accuracy: 0.0889\n",
|
||
"Learning rate = 1.0\n",
|
||
"Lambda = 0.1\n",
|
||
"Test accuracy: 0.089\n",
|
||
"\n",
|
||
"12/12 [==============================] - 1s 25ms/step - loss: nan - accuracy: 0.0778\n",
|
||
"Learning rate = 1.0\n",
|
||
"Lambda = 1.0\n",
|
||
"Test accuracy: 0.078\n",
|
||
"\n",
|
||
"12/12 [==============================] - 1s 29ms/step - loss: nan - accuracy: 0.0778\n",
|
||
"Learning rate = 1.0\n",
|
||
"Lambda = 10.0\n",
|
||
"Test accuracy: 0.078\n",
|
||
"\n",
|
||
"12/12 [==============================] - 1s 28ms/step - loss: 28988596.0000 - accuracy: 0.0889\n",
|
||
"Learning rate = 10.0\n",
|
||
"Lambda = 1e-05\n",
|
||
"Test accuracy: 0.089\n",
|
||
"\n",
|
||
"12/12 [==============================] - 1s 26ms/step - loss: 314152.2188 - accuracy: 0.0917\n",
|
||
"Learning rate = 10.0\n",
|
||
"Lambda = 0.0001\n",
|
||
"Test accuracy: 0.092\n",
|
||
"\n",
|
||
"12/12 [==============================] - 1s 28ms/step - loss: 2.4676 - accuracy: 0.0778\n",
|
||
"Learning rate = 10.0\n",
|
||
"Lambda = 0.001\n",
|
||
"Test accuracy: 0.078\n",
|
||
"\n",
|
||
"12/12 [==============================] - 1s 25ms/step - loss: 2.4545 - accuracy: 0.1167\n",
|
||
"Learning rate = 10.0\n",
|
||
"Lambda = 0.01\n",
|
||
"Test accuracy: 0.117\n",
|
||
"\n",
|
||
"12/12 [==============================] - 1s 28ms/step - loss: nan - accuracy: 0.0778\n",
|
||
"Learning rate = 10.0\n",
|
||
"Lambda = 0.1\n",
|
||
"Test accuracy: 0.078\n",
|
||
"\n",
|
||
"12/12 [==============================] - 0s 24ms/step - loss: nan - accuracy: 0.0778\n",
|
||
"Learning rate = 10.0\n",
|
||
"Lambda = 1.0\n",
|
||
"Test accuracy: 0.078\n",
|
||
"\n",
|
||
"12/12 [==============================] - 1s 25ms/step - loss: nan - accuracy: 0.0778\n",
|
||
"Learning rate = 10.0\n",
|
||
"Lambda = 10.0\n",
|
||
"Test accuracy: 0.078\n",
|
||
"\n",
|
||
"Model: \"sequential_49\"\n",
|
||
"_________________________________________________________________\n",
|
||
" Layer (type) Output Shape Param # \n",
|
||
"=================================================================\n",
|
||
" conv2d_49 (Conv2D) (None, 30, 30, 32) 896 \n",
|
||
" \n",
|
||
" max_pooling2d_49 (MaxPoolin (None, 15, 15, 32) 0 \n",
|
||
" g2D) \n",
|
||
" \n",
|
||
" conv2d_50 (Conv2D) (None, 13, 13, 64) 18496 \n",
|
||
" \n",
|
||
" max_pooling2d_50 (MaxPoolin (None, 6, 6, 64) 0 \n",
|
||
" g2D) \n",
|
||
" \n",
|
||
" conv2d_51 (Conv2D) (None, 4, 4, 64) 36928 \n",
|
||
" \n"
|
||
]
|
||
},
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
" flatten_49 (Flatten) (None, 1024) 0 \n",
|
||
" \n",
|
||
" dense_98 (Dense) (None, 64) 65600 \n",
|
||
" \n",
|
||
" dense_99 (Dense) (None, 10) 650 \n",
|
||
" \n",
|
||
"=================================================================\n",
|
||
"Total params: 122,570\n",
|
||
"Trainable params: 122,570\n",
|
||
"Non-trainable params: 0\n",
|
||
"_________________________________________________________________\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"CNN_keras = np.zeros((len(eta_vals), len(lmbd_vals)), dtype=object)\n",
|
||
" \n",
|
||
"for i, eta in enumerate(eta_vals):\n",
|
||
" for j, lmbd in enumerate(lmbd_vals):\n",
|
||
" CNN = create_convolutional_neural_network_keras(input_shape, receptive_field,\n",
|
||
" n_filters, n_neurons_connected, n_categories,\n",
|
||
" eta, lmbd)\n",
|
||
" CNN.fit(X_train, Y_train, epochs=epochs, batch_size=batch_size, verbose=0)\n",
|
||
" scores = CNN.evaluate(X_test, Y_test)\n",
|
||
" \n",
|
||
" CNN_keras[i][j] = CNN\n",
|
||
" \n",
|
||
" print(\"Learning rate = \", eta)\n",
|
||
" print(\"Lambda = \", lmbd)\n",
|
||
" print(\"Test accuracy: %.3f\" % scores[1])\n",
|
||
" print()\n",
|
||
"model.summary()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "d57a3ac4",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Final visualization"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 7,
|
||
"id": "a46c8db7",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"45/45 [==============================] - 1s 16ms/step - loss: 2.8932 - accuracy: 0.1023\n",
|
||
"12/12 [==============================] - 0s 14ms/step - loss: 2.9421 - accuracy: 0.0944\n",
|
||
"45/45 [==============================] - 1s 14ms/step - loss: 2.9007 - accuracy: 0.1023\n",
|
||
"12/12 [==============================] - 0s 13ms/step - loss: 2.9495 - accuracy: 0.0944\n",
|
||
"45/45 [==============================] - 1s 14ms/step - loss: 2.9867 - accuracy: 0.1016\n",
|
||
"12/12 [==============================] - 0s 14ms/step - loss: 3.0358 - accuracy: 0.0944\n",
|
||
"45/45 [==============================] - 1s 17ms/step - loss: 3.8422 - accuracy: 0.1023\n",
|
||
"12/12 [==============================] - 0s 16ms/step - loss: 3.8911 - accuracy: 0.0944\n",
|
||
"45/45 [==============================] - 1s 15ms/step - loss: 12.3434 - accuracy: 0.1023\n",
|
||
"12/12 [==============================] - 0s 13ms/step - loss: 12.3923 - accuracy: 0.0917\n",
|
||
"45/45 [==============================] - 1s 14ms/step - loss: 92.4463 - accuracy: 0.1030\n",
|
||
"12/12 [==============================] - 0s 14ms/step - loss: 92.4949 - accuracy: 0.0917\n",
|
||
"45/45 [==============================] - 1s 15ms/step - loss: 524.9874 - accuracy: 0.0939\n",
|
||
"12/12 [==============================] - 0s 14ms/step - loss: 525.0211 - accuracy: 0.0806\n",
|
||
"45/45 [==============================] - 1s 14ms/step - loss: 1.2081 - accuracy: 0.5999\n",
|
||
"12/12 [==============================] - 0s 14ms/step - loss: 1.3298 - accuracy: 0.5222\n",
|
||
"45/45 [==============================] - 1s 14ms/step - loss: 1.2163 - accuracy: 0.5950\n",
|
||
"12/12 [==============================] - 0s 13ms/step - loss: 1.3385 - accuracy: 0.5139\n",
|
||
"45/45 [==============================] - 1s 14ms/step - loss: 1.3021 - accuracy: 0.5971\n",
|
||
"12/12 [==============================] - 0s 13ms/step - loss: 1.4238 - accuracy: 0.5167\n",
|
||
"45/45 [==============================] - 1s 14ms/step - loss: 2.1562 - accuracy: 0.5985\n",
|
||
"12/12 [==============================] - 0s 14ms/step - loss: 2.2770 - accuracy: 0.5167\n",
|
||
"45/45 [==============================] - 1s 14ms/step - loss: 10.1963 - accuracy: 0.6006\n",
|
||
"12/12 [==============================] - 0s 13ms/step - loss: 10.3111 - accuracy: 0.5194\n",
|
||
"45/45 [==============================] - 1s 16ms/step - loss: 53.9220 - accuracy: 0.5511\n",
|
||
"12/12 [==============================] - 0s 15ms/step - loss: 53.9870 - accuracy: 0.4917\n",
|
||
"45/45 [==============================] - 1s 15ms/step - loss: 4.6518 - accuracy: 0.1684\n",
|
||
"12/12 [==============================] - 0s 13ms/step - loss: 4.6519 - accuracy: 0.1389\n",
|
||
"45/45 [==============================] - 1s 14ms/step - loss: 0.1597 - accuracy: 0.9596\n",
|
||
"12/12 [==============================] - 0s 13ms/step - loss: 0.2500 - accuracy: 0.9111\n",
|
||
"45/45 [==============================] - 1s 13ms/step - loss: 0.1669 - accuracy: 0.9603\n",
|
||
"12/12 [==============================] - 0s 13ms/step - loss: 0.2531 - accuracy: 0.9194\n",
|
||
"45/45 [==============================] - 1s 14ms/step - loss: 0.2535 - accuracy: 0.9603\n",
|
||
"12/12 [==============================] - 0s 13ms/step - loss: 0.3426 - accuracy: 0.9139\n",
|
||
"45/45 [==============================] - 1s 14ms/step - loss: 1.0796 - accuracy: 0.9596\n",
|
||
"12/12 [==============================] - 0s 14ms/step - loss: 1.1611 - accuracy: 0.9194\n",
|
||
"45/45 [==============================] - 1s 14ms/step - loss: 5.7157 - accuracy: 0.9582\n",
|
||
"12/12 [==============================] - 0s 14ms/step - loss: 5.7778 - accuracy: 0.9278\n",
|
||
"45/45 [==============================] - 1s 14ms/step - loss: 2.6418 - accuracy: 0.6402\n",
|
||
"12/12 [==============================] - 0s 15ms/step - loss: 2.6434 - accuracy: 0.5889\n",
|
||
"45/45 [==============================] - 1s 17ms/step - loss: 2.3024 - accuracy: 0.1044\n",
|
||
"12/12 [==============================] - 0s 16ms/step - loss: 2.3032 - accuracy: 0.0778\n",
|
||
"45/45 [==============================] - 1s 18ms/step - loss: 0.0144 - accuracy: 0.9993\n",
|
||
"12/12 [==============================] - 0s 15ms/step - loss: 0.0816 - accuracy: 0.9667\n",
|
||
"45/45 [==============================] - 1s 14ms/step - loss: 0.0247 - accuracy: 0.9993\n",
|
||
"12/12 [==============================] - 0s 16ms/step - loss: 0.0933 - accuracy: 0.9722\n",
|
||
"45/45 [==============================] - 1s 17ms/step - loss: 0.1093 - accuracy: 1.0000\n",
|
||
"12/12 [==============================] - 0s 16ms/step - loss: 0.1685 - accuracy: 0.9694\n",
|
||
"45/45 [==============================] - 1s 16ms/step - loss: 0.6328 - accuracy: 0.9965\n",
|
||
"12/12 [==============================] - 0s 16ms/step - loss: 0.6717 - accuracy: 0.9778\n",
|
||
"45/45 [==============================] - 1s 17ms/step - loss: 0.9136 - accuracy: 0.9589\n",
|
||
"12/12 [==============================] - 0s 14ms/step - loss: 0.9674 - accuracy: 0.9417\n",
|
||
"45/45 [==============================] - 1s 15ms/step - loss: 2.3020 - accuracy: 0.1044\n",
|
||
"12/12 [==============================] - 0s 13ms/step - loss: 2.3067 - accuracy: 0.0778\n",
|
||
"45/45 [==============================] - 1s 15ms/step - loss: 2.3020 - accuracy: 0.1044\n",
|
||
"12/12 [==============================] - 0s 14ms/step - loss: 2.3066 - accuracy: 0.0778\n",
|
||
"45/45 [==============================] - 1s 15ms/step - loss: 0.0030 - accuracy: 1.0000\n",
|
||
"12/12 [==============================] - 0s 14ms/step - loss: 0.1961 - accuracy: 0.9528\n",
|
||
"45/45 [==============================] - 1s 15ms/step - loss: 0.0174 - accuracy: 1.0000\n",
|
||
"12/12 [==============================] - 0s 15ms/step - loss: 0.2711 - accuracy: 0.9278\n",
|
||
"45/45 [==============================] - 1s 15ms/step - loss: 0.1230 - accuracy: 1.0000\n",
|
||
"12/12 [==============================] - 0s 14ms/step - loss: 0.2475 - accuracy: 0.9611\n",
|
||
"45/45 [==============================] - 1s 15ms/step - loss: 0.2983 - accuracy: 0.9562\n",
|
||
"12/12 [==============================] - 0s 14ms/step - loss: 0.3753 - accuracy: 0.9306\n",
|
||
"45/45 [==============================] - 1s 14ms/step - loss: 1.3715 - accuracy: 0.7801\n",
|
||
"12/12 [==============================] - 0s 14ms/step - loss: 1.4469 - accuracy: 0.7250\n",
|
||
"45/45 [==============================] - 1s 14ms/step - loss: 2.3020 - accuracy: 0.1044\n",
|
||
"12/12 [==============================] - 0s 14ms/step - loss: 2.3074 - accuracy: 0.0778\n",
|
||
"45/45 [==============================] - 1s 15ms/step - loss: nan - accuracy: 0.1044\n",
|
||
"12/12 [==============================] - 0s 14ms/step - loss: nan - accuracy: 0.0778\n",
|
||
"45/45 [==============================] - 1s 17ms/step - loss: 26.3099 - accuracy: 0.0995\n",
|
||
"12/12 [==============================] - 0s 16ms/step - loss: 26.3135 - accuracy: 0.1056\n",
|
||
"45/45 [==============================] - 1s 15ms/step - loss: 176.5727 - accuracy: 0.1044\n",
|
||
"12/12 [==============================] - 0s 15ms/step - loss: 176.5789 - accuracy: 0.0778\n",
|
||
"45/45 [==============================] - 1s 17ms/step - loss: 6.7793 - accuracy: 0.0967\n",
|
||
"12/12 [==============================] - 0s 15ms/step - loss: 6.7817 - accuracy: 0.1139\n",
|
||
"45/45 [==============================] - 1s 15ms/step - loss: 2.3031 - accuracy: 0.1037\n",
|
||
"12/12 [==============================] - 0s 14ms/step - loss: 2.3090 - accuracy: 0.0889\n",
|
||
"45/45 [==============================] - 1s 14ms/step - loss: 2.3024 - accuracy: 0.1044\n",
|
||
"12/12 [==============================] - 0s 16ms/step - loss: 2.3087 - accuracy: 0.0778\n",
|
||
"45/45 [==============================] - 1s 16ms/step - loss: nan - accuracy: 0.1044\n",
|
||
"12/12 [==============================] - 0s 13ms/step - loss: nan - accuracy: 0.0778\n",
|
||
"45/45 [==============================] - 1s 14ms/step - loss: nan - accuracy: 0.1044\n",
|
||
"12/12 [==============================] - 0s 14ms/step - loss: nan - accuracy: 0.0778\n",
|
||
"45/45 [==============================] - 1s 16ms/step - loss: 7236819.0000 - accuracy: 0.1037\n",
|
||
"12/12 [==============================] - 0s 17ms/step - loss: 7236819.5000 - accuracy: 0.0889\n",
|
||
"45/45 [==============================] - 1s 17ms/step - loss: 346267.1875 - accuracy: 0.1009\n",
|
||
"12/12 [==============================] - 0s 15ms/step - loss: 346267.2812 - accuracy: 0.1056\n",
|
||
"45/45 [==============================] - 1s 16ms/step - loss: 2.4278 - accuracy: 0.0995\n",
|
||
"12/12 [==============================] - 0s 15ms/step - loss: 2.4059 - accuracy: 0.0861\n",
|
||
"45/45 [==============================] - 1s 15ms/step - loss: 2.4412 - accuracy: 0.1044\n",
|
||
"12/12 [==============================] - 0s 13ms/step - loss: 2.4813 - accuracy: 0.0889\n",
|
||
"45/45 [==============================] - 1s 13ms/step - loss: nan - accuracy: 0.1044\n",
|
||
"12/12 [==============================] - 0s 13ms/step - loss: nan - accuracy: 0.0778\n",
|
||
"45/45 [==============================] - 1s 14ms/step - loss: nan - accuracy: 0.1044\n",
|
||
"12/12 [==============================] - 0s 13ms/step - loss: nan - accuracy: 0.0778\n",
|
||
"45/45 [==============================] - 1s 14ms/step - loss: nan - accuracy: 0.1044\n",
|
||
"12/12 [==============================] - 0s 13ms/step - loss: nan - accuracy: 0.0778\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAyAAAANbCAYAAAC6lftqAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAA9hAAAPYQGoP6dpAAB8k0lEQVR4nOzdd3iTZdvH8V+6NxsKZQgUKJW9kaUggsqLCAiiKKjgQEFAhiIqS1FBURQcDBdTpoqouAEf2YLsKZRRWoRCd9Mmef8IVENbDJDc6fh+nqOH5kqu5MppnrTnfZ73dZtsNptNAAAAAGAAL08vAAAAAEDRQQICAAAAwDAkIAAAAAAMQwICAAAAwDAkIAAAAAAMQwICAAAAwDAkIAAAAAAMQwICAAAAwDAkIAAAAAAMQwICoEB69tlnVatWrSv+tG/f/rpeY/ny5apVq5ZOnDjh1jnX6/jx44qKilKzZs2Unp5u2OsCAHAtTDabzebpRQDA1YqJidG5c+eyb8+cOVN79uzRu+++mz3m5+en6Ojoa36Nc+fOKSYmRtHR0fLz83PbnOs1bdo0fffddzpx4oQmTpyou+++25DXBQDgWpCAACgUnn32WW3atEk//fSTp5diKKvVqvbt26tbt27as2ePLly4oMWLF3t6WQAA5IkWLACF2saNG1WrVi0tWrRIt9xyi2666SatX79ekrRkyRJ1795dDRo0UL169XTXXXdp9erV2XMvb6d69tln1b9/fy1btkydOnVSnTp11LVrV/3666/XNUeS/vjjD91///1q0KCBbr75Zn3yySfq37+/nn322Su+v/Xr1ys2Nla33HKLunbtqu3bt2vfvn05Hnf27FmNGTNGN910kxo2bKj7779fW7duzb4/MzNTM2bM0K233qp69erpzjvv1LJly7Lvf+CBB/TAAw/kGtuNGzdmv/fo6GgtWbJErVu3Vtu2bXXw4EFZLBZ9+OGH6tKli+rVq6cGDRro3nvv1e+//+7wfLt27dKAAQPUuHFjtWjRQsOGDVNsbKyysrLUunVrPfPMMzne1+23367nnnvuijECAOQvJCAAioRp06Zp9OjRGj16tBo0aKD58+frxRdfVIcOHfTBBx9oypQp8vX11ciRI3Xq1Kk8n2fXrl2aM2eOhgwZohkzZsjHx0dDhgzRhQsXrnnO4cOH1b9/f0nSm2++qcGDB+vDDz90SBDysmzZMlWtWlX169dXx44dFRYWpoULFzo8JjU1Vffee6/+97//6ZlnntG7776r4OBgDRgwQIcPH5YkjR49Wh9++KF69uypDz74QO3atdOYMWO0cuXK/1zDv1ksFr3//vuaNGmShg4dqsjISE2dOlUzZsxQ7969NXv2bE2YMEEJCQl6+umnlZqaKknat2+f+vTpo7S0NL366quaMGGC9uzZo4cfflg2m03dunXTDz/8oOTk5OzX2rFjh44cOaLu3btf1RoBAJ7l4+kFAIAR7r33XnXu3Dn79vHjx/Xwww/rySefzB6rWLGiunfvrm3btqlChQq5Pk9SUpKWL1+uypUrS5KCgoLUt29fbdiwQZ06dbqmOR988IFCQkI0e/ZsBQYGSpKqVaume++994rv6fz58/rpp580ePBgSZK/v7/uvPNOffnllxo1apSCg4MlSStWrNDx48e1cuVKRUVFSZKaNGmibt26afPmzbJarfr666/1/PPP68EHH5QktWzZUqdOndLGjRvVrVu3K67jco8//rhuvvnm7Nvx8fEaNmyYQwUlICBAgwcP1v79+9WwYUPNnDlTxYoV09y5c+Xv7y9JCg8P19ChQ7V//3716NFDs2bN0nfffacePXpkv6/KlSurSZMmV7U+AIBnkYAAKBJq1arlcPtSa1NSUpKOHj2qo0ePZrcEZWZm5vk8JUuWzE4kJPsfyZKUlpZ2zXM2bNigdu3aZScfktSwYUNFRERc8T19+eWXysrKUvv27ZWYmChJ6tSpkxYuXKivvvoqO4HZsmWLKlasmJ18SPZk5ZtvvpGk7IpJx44dHZ7/rbfeuuLr56VmzZoOt9944w1J9hP0jx07pr/++iv7XJ1Lsd66davatWuXnXxIUr169RzO6WncuLG++OIL9ejRQ2azWatXr1a/fv1kMpmuaZ0AAM8gAQFQJJQqVcrhdkxMjF588UVt2LBBPj4+qlatWnaScqW9Of6dJEjK/uPXarVe85xz587lWJ8klSlTJs/nlOznXFitVt1555057lu0aFF2AnL+/Plcn/+S8+fPS8oZo2t1+fPs3LlT48eP186dOxUQEKDIyMjs5OpSrP9rjZLUs2dPjRkzRqdOndKOHTuUmJjIjl8AUACRgAAocqxWqx599FH5+vrq888/V3R0tHx8fHTo0CF9+eWXhq8nPDxc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\n",
|
||
"text/plain": [
|
||
"<Figure size 1000x1000 with 2 Axes>"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
},
|
||
{
|
||
"data": {
|
||
"image/png": "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BxGRjWICQkREFhEWFoYNGzagSZMm6Nevn7VXh4iIrIQlWEREREREZDG8CJ2IiIiIiCyGCQgREREREVkMExAiIiIiIrIYJiBERERERGQxNnUXrGbybtZeBSIimyZoeN8Ter8JGSprr0K+d0CzydqrkCNNTDlrr4JRYo/b1l6Ft8IRECIiIiIishgmIEREREREZDE2VYJFRERERPSuNNBYexWMet9GFN639SUiIiIiovcYExAiIiIiIrIYlmAREREREZlALeTNEqz37YCeIyBERERERGQxTECIiIiIiMhi3rcRGyIiIiIiq9CAD1M1B46AEBERERGRxTABISIiIiIii2EJFhERERGRCfLqgwjfNxwBISIiIiIii2ECQkREREREFsMSLCIiIiIiE6gF3gXLHDgCQkREREREFsMEhIiIiIiILIYlWEREREREJuCDCM2DIyBERERERGQxTECIiIiIiMhiWIJFRERERGQCNUuwzIIjIEREREREZDFMQIiIiIiIyGJYgkVEREREZALeBcs8OAJCREREREQWwwSEiIiIiIgshiVYREREREQmUAsswTIHjoAQEREREZHFMAEhIiIiIiKLYQkWEREREZEJNNZegXyCIyBERERERGQxTECIiIiIiMhiWIJFRERERGQCNR9EaBYcASEiIiIiIothAkJERERERBbDEiwiIiIiIhOoWYFlFhwBISIiIiIii2ECQkREREREFsMSLCIiIiIiE/BBhObBERAiIiIiIrIYJiBERERERGQxLMEiIiIiIjKBGiJrr0K+wBEQIiIiIiKyGCYgRERERERkMSzBIiIiIiIygYYPIjQLjoAQEREREZHFMAEhIiIiIiKLYQKSCwKbVsb8E5OwI34l1t6ei84j27yxzUddP8TSi9Ox8/kqLL86E817NzSYp2mP+lhyYRr+frEKa8LmoMcPHSCxk+T4mXVa1cC+9D9QuX6F/7A1eRNjnLsY39zHGOeuwI8rY8Gpydj5YhV+vzMXXUa9Ob6NP/sQSy/PwN8Jq7Hi+qwc47v00nTsSlyNtbd+RY8fDeNbqoofJu8Yhb8eL8bm6CWYunsMylQtYZ4Ny0MY49wV2KwqFp6dhr+T12Hd/UXoMqbdG9s07haMZddmY1fKH1h5cy5a9P3IYJ66bWti4bnp2Jn4O1bfno/uP4bATppzRf5Pm0dg5MqB/2VT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EJUrV8YHH3yAOXPm4OTJkzh//rzJy2UCQkRERERkg8LCwpCSkoKgoKCsaa6urggICMC5c+cM5r9//z5KlSoFd3f3rGmenp4oWLAgzp49azB/TpiAEBERERHZoJiYGADaJOJVRYsWRXR0tMH8RYoUwZMnT6BWq7OmJScnIyEhAc+ePTN5uXniInQiIiIiorwurz6IsHHjxq99/9Ah4895SUtLAwCDu87a29sjISHBYP6WLVti8eLF+PnnnzFs2DCo1WpMmDABIpHI6DUjOeEICBERERGRDZLLtQ+jzZ48KBQKo3e18vPzw/z583Hw4EHUqFED9evXh5eXFypVqgRnZ2eTl8sRECIiIiKi91hOIxxvkll6FRcXh+LFXz5kMS4uDv7+/kbbNGjQAEeOHMGTJ0/g4uICuVyOunXron379iYvlyMgREREREQmUAviPPnzrvz9/eHs7IwzZ85kTUtMTERoaCgCAwMN5r9w4QK6d+8OpVKJIkWKQC6X4+zZs3j+/Dnq1q1r8nI5AkJEREREZINkMhm6d++OWbNmwd3dHd7e3pg5cyY8PDzQtGlTqNVqxMfHZ410lC5dGnfu3MHPP/+Mvn374tGjRxg1ahS6dOkCX19fk5fLBISIiIiIyEYNHjwYGRkZGDduHNLT01GzZk2sWLECMpkMkZGRaNy4MaZOnYr27dvDzc0NS5cuxdSpU9G6dWsULFgQXbp0wVdfffVWyxQJgiDk0vbkOc3k3ay9CkRENk3Q2MxXDuVTQobK2quQ7x3QbLL2KuToyINy1l4FoxqUuG3tVXgrvAaEiIiIiIgshgkIERERERFZDK8BISIiIiIyQV59EOH7hiMgRERERERkMUxAiIiIiIjIYliCRURERERkgv/y0D96iVEkIiIiIiKLYQJCREREREQWwxIsIiIiIiITaHgXLLPgCAgREREREVkMExAiIiIiIrIYlmAREREREZlAzXP3ZsEoEhERERGRxTABISIiIiIii2EJFhERERGRCfggQvNgFImIiIiIyGKYgBARERERkcWwBIuIiIiIyAQanrs3C0aRiIiIiIgshgkIERERERFZDEuwiIiIiIhMoBZE1l6FfIEjIEREREREZDFMQIiIiIiIyGKYgBARERERkcXwGhAiIiIiIhOoee7eLBhFIiIiIiKyGCYgRERERERkMSzBIiIiIiIygUbguXtzYBSJiIiIiMhimIAQEREREZHFsASLiIiIiMgEvAuWeTCKRERERERkMUxAiIiIiIjIYliCRURERERkArUgsvYq5AscASEiIiIiIothAkJERERERBbDEiwiIiIiIhNoeO7eLGwqAbkzrYa1VyFfE2msvQZElNexfDr3SdIZ5NxUZsE9a68C0XuPaRwREREREVmMTY2AEBERERG9K7XAc/fmwCgSEREREZHFMAEhIiIiIiKLYQkWEREREZEJNOBNHsyBIyBERERERGQxTECIiIiIiMhiWIJFRERERGQC3gXLPBhFIiIiIiKyGCYgRERERERkMSzBIiIiIiIygZrn7s2CUSQiIiIiIothAkJERERERBbDEiwiIiIiIhNoBD6I0Bw4AkJERERERBbDBISIiIiIiCyGJVhERERERCbgXbDMg1EkIiIiIiKLYQJCREREREQWwxIsIiIiIiITaASeuzcHRpGIiIiIiCyGCQgREREREVkMS7CIiIiIiEygBh9EaA4cASEiIiIiIothAkJERERERBbDEiwiIiIiIhPwLljmwSgSEREREZHFMAEhIiIiIiKLYQkWEREREZEJeBcs8+AICBERERERWQwTECIiIiIishiWYBERERERmYB3wTIPRpGIiIiIiCyGCQgREREREVkMS7CIiIiIiEygZgmWWTCKRERERERkMUxAiIiIiIhslEajwbx58xAcHIwqVaqgT58+iIiIyHH+J0+eYNiwYahduzZq166Nb7/9FjExMW+1TCYgREREREQm0ECUJ3/+i0WLFmHDhg2YPHkyNm7cCJFIhH79+kGpVBqdf+jQoYiOjsaqVauwatUqxMTE4Ouvv36rZTIBISIiIiKyQUqlEitXrsSgQYPQoEED+Pv7Y86cOYiNjcWBAwcM5k9MTMS5c+fQr18/BAQEICAgAP3798eNGzfw/Plzk5fLBISIiIiIyAaFhYUhJSUFQUFBWdNcXV0REBCAc+fOGcxvb28PR0dHbN++HcnJyUhOTsaOHTtQokQJFChQwOTl8i5YREREREQmyKt3wWrcuPFr3z906JDR6ZnXbnh6eupNL1q0KKKjow3mt7e3x5QpUzBx4kQEBgZCJBKhSJEiWLduHcRi02OTN6NIRERERES5Ki0tDQAgk8n0ptvb20OhUBjMLwgCbt26hWrVquGPP/7AmjVr4O3tjYED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wxIsIiIiIiITaMASLHPgCAgREREREVkMExAiIiIiIrIYlmAREREREZmAd8EyD46AEBERERGRxTABISIiIiIii2EJFhERERGRCTQCz92bA6NIREREREQWwwSEiIiIiIgshiVYREREREQm4F2wzIMjIEREREREZDFMQIiIiIiIyGJYgkVEREREZAINWIJlDhwBISIiIiIii2ECQkREREREFsMSLCIiIiIiE/AuWObBERAiIiIiIrIYJiBERERERGQxLMEiIiIiIjIBS7DMgyMgRERERERkMUxAiIiIiIjIYliCRURERERkApZgmQdHQIiIiIiIyGKYgBARERERkcXYVAnWtvZzrL0K+ZpUpLH2KuR7KoHnDHIT+3Duk4oEa69Cvtf08LfWXoV8LSM6xtqrQFbEEizz4NEMERERERFZDBMQIiIiIiKyGJsqwSIiIiIielcasATLHDgCQkREREREFsMEhIiIiIiILIYlWEREREREJuBdsMyDIyBERERERGQxTECIiIiIiMhiWIJFRERERGQClmCZB0dAiIiIiIjIYpiAEBERERGRxbAEi4iIiIjIBCzBMg+OgBARERER2SiNRoN58+YhODgYVapUQZ8+fRAREWF03vnz56N8+fJGf7777juTl8kEhIiIiIjIRi1atAgbNmzA5MmTsXHjRohEIvTr1w9KpdJg3j59+uD48eN6P0OGDIFcLkfPnj1NXiYTECIiIiIiE2gEUZ78eVdKpRIrV67EoEGD0KBBA/j7+2POnDmIjY3FgQMHDOZ3cnJCkSJFsn7S0tKwZMkSjBkzBv7+/iYvlwkIEREREZENCgsLQ0pKCoKCgrKmubq6IiAgAOfOnXtj+2nTpqFs2bLo3LnzWy2XF6ETEREREb3HGjdu/Nr3Dx06ZHR6TEwMAMDT01NvetGiRREdHf3az7x27RoOHTqENWvWQCx+uzENJiBERERERCYQ8tldsNLS0gAAMplMb7q9vT0SEhJe23b16tWoUqWK3uiJqZiAEBERERG9x3Ia4XgTuVwOQHstSOa/AUChUMDBwSHHdqmpqThw4AB++umnd1ourwEhIiIiIrJBmaVXcXFxetPj4uLg4eGRY7tjx45Bo9GgadOm77RcJiBERERERCbQQJQnf96Vv78/nJ2dcebMmaxpiYmJCA0NRWBgYI7tLly4gIoVK8LV1fWdlssS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CBERERERWQwTECIiIiIishiWYBERERERmeB9fOhfXsQRECIiIiIishgmIEREREREZDEswSIiIiIiMgFLsMyDIyBERERERGQxTECIiIiIiMhiWIJFRERERGQCPofQPDgCQkREREREFsMEhIiIiIiILIYlWEREREREJuBdsMyDIyBERERERGQxTECIiIiIiMhiWIJFRERERGQK3gbLLDgCQkREREREFsMEhIiIiIiILIYlWEREREREJuBdsMyDIyBERERERGQxTECIiIiIiMhiWIJFRERERGQCgXfBMguOgBARERERkcUwASEiIiIiIothCRYRERERkQl4Fyzz4AgIERERERFZDBMQIiIiIiKyGJZgERERERGZgiVYZsERECIiIiIishgmIEREREREZDEswSIiIiIiMgEfRGgeHAEhIiIiIiKLYQJCREREREQWwxIsIiIiIiJTsATLLDgCQkREREREFsMEhIiIiIjIRmk0GsybNw/BwcGoUqUK+vTpg4iIiBznV6lU+OWXXxAcHIyqVauie/fuuHnz5lstkwkIEREREZEJBEGUJ3/+i0WLFmHDhg2YPHkyNm7cCJFIhH79+kGpVBqdf/z48di8eTMmTZqELVu2wM3NDf369UNSUpLJy2QCQkRERERkg5RKJVauXIlBgwahQYMG8Pf3x5w5cxAbG4sDBw4YzP/o0SNs3rwZU6dORcOGDVG6dGn8/PPPkMlkuH79usnLZQJCRERERGSDwsLCkJKSgqCgoKxprq6uCAgIwLlz5wzmP378OFxdXVG/fn29+Q8fPow6deqYvFzeBYuIiIiIyBR59C5YjRs3fu37hw4dMjo9JiYGAODp6ak3vWjRooiOjjaY/8GDB/D19cX+/fuxdOlSxMbGIiAgAGPGjEHp0qVNXl+OgBARERER2aC0tDQAgEwm05tub28PhUJhMH9ycjIePnyIRYsWYdiwYfjtt99gZ2eHzz77DM+ePTN5uRwBISIiIiJ6j+U0wvEmcrkcgPZakMx/A4BCoYCDg4PB/FKpFElJSZgzZ07WiMecOXPQoEEDbNu2DV988YVJy+UICBERERGRCax9tytz3wUrs/QqLi5Ob3pcXBw8PDwM5vfw8ICdnZ1euZVcLoevry8iIyNNXi4TECIiIiIiG+Tv7w9nZ2ecOXMma1piYiJCQ0MRGBhoMH9gYCAyMjJw7dq1rGnp6el49OgR/Pz8TF4uS7CIiIiIiGyQTCZD9+7dMWvWLLi7u8Pb2xszZ86Eh4cHmjZtCrVajfj4eLi4uEAulyMwMBB169bF6NGjMXHiRLi5uWHevHmQSCRo27atycvlCAgRERERkSmEPPrzHwwePBghISEYN24cunbtColEghUrVkAmkyE6Ohr16tXDnj17suafP38+atWqhW+++QYhISFITk7G2rVr4e7ubvIyRYIg5NEbipnflYe+1l6FfE0q0lh7FfI9lcBzBrmJfTj3SUU285VjNU0Pf2vtVcjXyvY6b+1VyPcOaDZZexVyVGLtNGuvglEPPh9j7VV4KzZVglVOalOba3FSkcTaq5DvqQUeIOcmqYj7iNwWo0629irkezxAJqK8jt+2REREREQmefc7TtFLrOcgIiIiIiKLYQJCREREREQWwxIsIiIiIiJT8D4aZsERECIiIiIishgmIEREREREZDEswSIiIiIiMgVLsMyCIyBERERERGQxTECIiIiIiMhiWIJFRERERGQKgQ8iNAeOgBARERERkcUwASEiIiIiIothCRYRERERkQkE3gXLLDgCQkREREREFsMEhIiIiIiILIYlWEREREREpmAJlllwBISIiIiIiCyGCQgREREREVkMS7CIiIiIiEzBBxGaBUdAiIiIiIjIYpiAEBERERGRxbAEi4iIiIjIBCLeBcssOAJCREREREQWwwSEiIiIiIgshiVYRERERESmYAmWWXAEhIiIiIiILIYJCBERERERWQxLsIiIiIiITMEHEZoFR0CIiIiIiMhimIAQEREREZHFsASLiIiIiMgUvAuWWXAEhIiIiIiILIYJCBERERERWQxLsIiIiIiITMESLLPgCAgREREREVkMExAiIiIiIrIYlmAREREREZmCJVhmwREQIiIiIiKyGCYgRERERERkMSzBIiIiIiIyhSCy9hrkCxwBISIiIiIii2ECQkREREREFsMSLCIiIiIiE4h4Fyyz4AgIERERERFZDBMQIiIiIiKyGJZgERERERGZgiVYZsERECIiIiIishiOgFjIiTMiLFwhwb0IEQq6ASFt1OjzmQaiHG4nrVQCi1dLsPuAGC8SgBLFBXzeWYOWTTUAgMfRQMuushyX16a5GhPHqHNhS/KmY2eA+SvECH8AFHQDOrcR8EU34bXxXbhahF37RXie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RERkMSzBIiIiIiIyBUuwzIIjIEREREREZDFMQIiIiIiIyGJYgkVEREREZAI+iNA8OAJCREREREQWwwSEiIiIiIgshgkIERERERFZDBMQIiIiIiKyGCYgRERERERkMbwLFhERERGRKXgXLLPgCAgREREREVkMExAiIiIiIrIYlmAREREREZmADyI0D46AEBERERGRxTABISIiIiIii2EJFhERERGRKViCZRY2lYCkCiprr0K+Fq9WWHsV8j0vidTaq5CvPc5Is/Yq5HtDH3Sw9irYgFhrrwAR0WuxBIuIiIiIiCzGpkZAiIiIiIjeGUuwzIIjIEREREREZDFMQIiIiIiIyGJYgkVEREREZAI+iNA8OAJCREREREQWwwSEiIiIiIgshiVYRERERESmYAmWWXAEhIiIiIiILIYJCBERERERWQxLsIiIiIiITMC7YJkHR0CIiIiIiMhimIAQEREREZHFsASLiIiIiMgULMEyC46AEBERERGRxTABISIiIiIii2EJFhERERGRKViCZRYcASEiIiIiIothAkJERERERBbDEiwiIiIiIhPwQYTmwREQIiIiIiKyGCYgRERERERkMSzBIiIiIiIyBUuwzIIjIEREREREZDFMQIiIiIiIyGJYgkVEREREZAqWYJkFR0CIiIiIiMhimIAQEREREZHFsASLiIiIiMgEfBCheXAEhIiIiIiILIYJCBERERERWQxLsIiIiIiITMESLLPgCAgREREREVkMExAiIiIiIrIYlmAREREREZmAd8EyD46AEBERERGRxTABISIiIiIii2EJFhERERGRKViCZRYcASEiIiIiIothAkJERERERBbDEiwiIiIiIlOwBMssOAJCREREREQWwwSEiIiIiIgshgkIERERERFZDK8BISIiIiIygcjaK5BPcASEiIiIiIgshgkIERERERFZDEuwLOT0WQmWrpDifoQYbm4CPm2dgR6fqSDKYSxPqQRWrJFi3wE7vEgQwa+4Bp91UqFZU7XefK3aOyD+uWEe+feWVBRyt517xV04K8Hvq+zxKEIM1wICWrRWoWNXZY7xVSmBP9bK8L+DUiQmiOBTXINPOyrRqEmG3nz/7JZi5xYpYqLFKFJUwCdtlGjTPue/W3524owYi1bY4X6ECG5uQEibDPT+TP3aPrxktR32HJDgRQJQoriAHp0z8ElTjd58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\n",
|
||
"text/plain": [
|
||
"<Figure size 1000x1000 with 2 Axes>"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"# visual representation of grid search\n",
|
||
"# uses seaborn heatmap, could probably do this in matplotlib\n",
|
||
"import seaborn as sns\n",
|
||
"\n",
|
||
"sns.set()\n",
|
||
"\n",
|
||
"train_accuracy = np.zeros((len(eta_vals), len(lmbd_vals)))\n",
|
||
"test_accuracy = np.zeros((len(eta_vals), len(lmbd_vals)))\n",
|
||
"\n",
|
||
"for i in range(len(eta_vals)):\n",
|
||
" for j in range(len(lmbd_vals)):\n",
|
||
" CNN = CNN_keras[i][j]\n",
|
||
"\n",
|
||
" train_accuracy[i][j] = CNN.evaluate(X_train, Y_train)[1]\n",
|
||
" test_accuracy[i][j] = CNN.evaluate(X_test, Y_test)[1]\n",
|
||
"\n",
|
||
" \n",
|
||
"fig, ax = plt.subplots(figsize = (10, 10))\n",
|
||
"sns.heatmap(train_accuracy, annot=True, ax=ax, cmap=\"viridis\")\n",
|
||
"ax.set_title(\"Training Accuracy\")\n",
|
||
"ax.set_ylabel(\"$\\eta$\")\n",
|
||
"ax.set_xlabel(\"$\\lambda$\")\n",
|
||
"plt.show()\n",
|
||
"\n",
|
||
"fig, ax = plt.subplots(figsize = (10, 10))\n",
|
||
"sns.heatmap(test_accuracy, annot=True, ax=ax, cmap=\"viridis\")\n",
|
||
"ax.set_title(\"Test Accuracy\")\n",
|
||
"ax.set_ylabel(\"$\\eta$\")\n",
|
||
"ax.set_xlabel(\"$\\lambda$\")\n",
|
||
"plt.show()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "0d8ef831",
|
||
"metadata": {},
|
||
"source": [
|
||
"## The CIFAR01 data set\n",
|
||
"\n",
|
||
"The CIFAR10 dataset contains 60,000 color images in 10 classes, with\n",
|
||
"6,000 images in each class. The dataset is divided into 50,000\n",
|
||
"training images and 10,000 testing images. The classes are mutually\n",
|
||
"exclusive and there is no overlap between them."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 8,
|
||
"id": "3d8a7042",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"import tensorflow as tf\n",
|
||
"\n",
|
||
"from tensorflow.keras import datasets, layers, models\n",
|
||
"import matplotlib.pyplot as plt\n",
|
||
"\n",
|
||
"# We import the data set\n",
|
||
"(train_images, train_labels), (test_images, test_labels) = datasets.cifar10.load_data()\n",
|
||
"\n",
|
||
"# Normalize pixel values to be between 0 and 1 by dividing by 255. \n",
|
||
"train_images, test_images = train_images / 255.0, test_images / 255.0"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "2c4dab01",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Verifying the data set\n",
|
||
"\n",
|
||
"To verify that the dataset looks correct, let's plot the first 25 images from the training set and display the class name below each image."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 9,
|
||
"id": "62af6ee9",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"image/png": "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zndVFEVRFEVRFEX27t17vqvQM35ipVM333yzfO5zn5OpqSnZvXu3vOENb5Ddu3fL3/3d38lNN90k1113nXzve98TEZE777xT/sN/+A9y5ZVXyjXXXCO/+Zu/KadPn4bjPfDAA/L6179eLrvsMrnxxhvlU5/6lLzpTW9a+elLUd7whjfIPffcI/fcc4/s3r1bvv/973ftc+9///vl5ptvhu92++l0YWFBPvjBD8p1110nl19+ubz+9a+X++677xnL/8M//EO58MIL5R//8R/P2Tkqz1+0/ynPF8IwlD/5kz+RG2+8US699FL5tV/7NVleXobPHDx4UN72trfJFVdcIVdccYW8853vlMnJSfhMsViU//Jf/otcd911sm/fPnnta18r+/fvh8/s3r1bbr31VnnNa14jV155pfzJn/zJOT8/5Uen0WjIRz7yEXnZy14mF198sVxxxRXy5je/WQ4cOCAisuo8dfLkSXnpS18qIiIf+MAH4LOr3dN97nOfk3379sl9990nr3nNa2Tfvn3y8pe/XL71rW/JkSNH5I1vfKNceuml8tM//dNy2223QR2OHTsm7373u+X666+Xyy67TN7whjd0nRdnZmbkbW97m1xyySVyww03yMc//nEJgnZ2+U7pVDempqbkPe95j1x99dVy6aWXyhvf+EZ5/PHHn0ULrx8/sQ8at956q9xwww0yPDwsn/3sZ+Xf/bt/JyIiH/vYx+R973ufvO9975PLLrtMvvjFL8qv/MqvyOjoqHz0ox+VD3zgA/LAAw/IL/3SL8nCwoKIiDz11FPypje9SUREPvrRj8q73vUu+V//63+dddFVfvL4f//f/1f27t0re/fulc9+9rNSqVRExOxza6FWq8nrXvc6ueuuu+Q3f/M35dZbb5VMJiNvectb5KmnnjI+/xd/8Rfyp3/6p/Jf/+t/Xenryk8W2v+U5wu33HKL/PEf/7G85jWvkVtvvVX6+/vlIx/5yMr7R48elde97nWysLAgf/AHfyAf+tCHZHJyUv79v//3K+tus9mUN77xjfLNb35TfuM3fkNuvfVWGRsbk7e85S3Gw8af/umfystf/nL56Ec/unLzqTy/ee973yv/+I//KL/6q78qf/mXfynvf//75eDBg/Ibv/EbazJ3j4yMyK233ioiIu94xztW/r+WezoREd/35T3veY+87nWvkz/5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xLKs83wWyvOJvr4+OXr0qOzfv9/4i8bT3HTTTdJsNuWDH/yg3H333fKZz3xG/vzP/xwmj1e/+tWyadMmecc73iFf/OIX5Y477pB3v/vd0mg05A1veINxzF27dskb3/hG+exnPys/+MEPztn5Kc9vtP8p55tMJiO/9mu/Jn/zN38jH/7wh+V73/uefOhDH4IHjV/7tV+TEydOyNve9jb5xje+IXfccYe8613vkttuu23FF/TqV79aJiYm5M1vfrN8/vOfl7vvvls++tGPysc+9jEZGRmRWCx2vk5R+RG56KKLxHVdueWWW+TOO++U22+/Xd71rnfJt7/9bRE588vFWuapp70S+/fvl4ceemjN93TPlV//9V8Xz/Pkl3/5l+WrX/2qfPOb35S3vOUtMjk5afhCvva1r8lHPvIR2b9/v9xyyy3y2c9+Vt72tret6RffN73pTRKGobzpTW+Sr3zlK7J//375nd/5Hfn0pz8NvxI+X9AHjVV49atfLR//+Mfl+PHj8s53vlP+4A/+QC6//HL5x3/8xxVN6ZYtW+Qv/uIvpNlsyrvf/W752Mc+Jm9961tleHh4RVOoKCIir3/96yUWi8lb3/pWaTQaXT9z/fXXy/ve9z65//775a1vfavcdtttcuutt8IEms1m5a/+6q/k8ssvlw996EPyn/7Tf5Jmsymf+cxn4C9Anfz6r/+6TExMyG//9m/DX4GUnxy0/ynPB972trfJBz/4QfmXf/kXecc73iFPPvmkvO9971t5/8ILL5S//uu/Fsuy5L3vfa+8+93vlrm5OfnjP/5jednLXiYiIul0Wv76r/9arrzySrnlllvkrW99q3zta1+T3/zN35QPfOAD5+vUlB6wZcsW+chHPiIzMzPyjne8Q/7Lf/kvIiLymc98RizLknvvvXfN89Sb3/xm+cY3viFvectbxPO8Nd3TPVd27twpf/M3fyNDQ0PywQ9+UH7rt35LoiiST3/603LdddfBZ9///vfLI488Ir/6q78qX/3qV+UDH/iAvOMd71hTOaOjo/J3f/d3smHDBvnd3/1defvb3y4PP/ywfOhDH1pJtfB8woqeq6tGWWH//v0Si8XkqquuWnlteXlZrr/+ennve98rv/zLv3wea6coiqIoiqIo64+awXvAY489Jh//+MflPe95j1x00UWytLQkf/mXfym5XE5e+cpXnu/qKYqiKIqiKMq6ow8aPeBXfuVXxPM8+du//Vs5ffq0pNNpufrqq+W///f/bmzhpyiKoiiKoig/Cah0SlEURVEURVGUnqNmcEVRFEVRFEVReo4+aCiKoiiKoiiK0nP0QUNRFEVRFEVRlJ6jDxqKoiiKoiiKovQcfdBQFEVRFEVRFKXnrHl72zAIpLq4uBKbm1VZdGRHmNDCz8RtjH0Ps8XWmh5+f7Uyu2BRmbaDz1Y2vR+jeqeSCYi7bdIVhCGWaeMxWi0f4vozZORd+b5lnhc1lXHmkWC9VttLzOrSdnyMkI/REQ+Njorrrt/uyGHkS9VbWImb9QDet6wYxLa9+jM0X3vHxvOx6TryMYMAr6uISCvAPmu72IiOg31FLL5u1JeM626OK75uQsew6by4f1l83Y0LLxJgc0sUYltE0dnbOwixrbqNo5DG0dneH+wbFcdZ3925W74vU1OnV2JjDFETuDHzWjF+Kzjr+xb1OZsmAu7DIgKZcUXMduX5yqE5MaLrHwb0+W5l0lwQcp+iDrTaZofd3ubzsHhSNI6xyiTY7X1eLyh++phjo2MSBIEkErg+nEuCMJJSw5xzng1mi9H50btGGxoLjzlmuc24z/Iho2iV62jUavV1f304vxt29iVdcVYZA70kCAJZXi6uxKuN6W73MYwbw3U75sae4ZNn8H3s/61ms8tnWlgv/gCvf0Z/5Tn37HH3z5z93sGyzj6vd2s7/o5xc7AKqwyzH35o7ceLx2Nd159urHmlri4uyj/99v+zEtereEPluNSQm8aNYxTTKYgvycchPvHwAxD/8/4H8ftN7EC8QIqYFyiWSEI8MDwEcV8Kj7FzM6agv/H6qyH2W1gHEZH55QqWmeuH+MDh4xB/89v78QDUdomYeV55GpBxFwe5R/XyW9QBaEFIOOYCWYvwmi41sNfZHUX877//JxnbsME4xrmi6i3Ilx7/9ZX4zm/NwPu55IUQZ9J9xjFiFnb3bAbbdCg/AXF/eiPEhXwe4tPzJ4wyjsw9BHHfBuwbgxuqWKdEDeJ6tQhxMoljxLEKRpkhPfAEQRni/j48j0QiDbEr+Pnlkjl5L8xg2zUq2Ba1ZhZivjlYWjwNca1mllGqLNMx8LyWFttt+dF3/YOM9K9f/xMRmZo6LS+6+adXYjvC/uOkcXHZtNucA3lePvbUFMRhiO2cy+coxvksGzcfZsbHxyAuVvD6LhSXIB4YxDnRW6pDXJlZgLg/h3USERnbgtei4uMfU5YX8BiVMo4Dh5aiVtN8AFsuYf9I9eN60gpwDmzRnBiEdGMUmmXEY1iPVBLb2/POzJG3/f2XRURk4wYcW+eSUsOXP7vz1ErM58MPkN1u2eJ8w+Pg/OKF2EHLHvYFY8lt1ITpS+Pa0pfFNqR7RSm36KaMBklL8DzDLndM1pruon40+EY6kpA/AOFz+cPoajd6nfc3775hg/Snz35j3kuWl4vyP//nH7TjaZzTG1Uc824iYx6E+t+OC3ZAvH0Hxtymp05OQvz4D35gFHHsyBGIA+qzNo3xRArXw0IO7x36aN3nWESkfwDv+fJ5zJ+WzuL7uRweI5XFOiTTGIuIJFPYnk4c57+Q+hf/CWCVvwWeIeA/OtIfLTsmgH0X7pBkAuePZ0KlU4qiKIqiKIqi9Bx90FAURVEURVEUpec8C4+GL0unjra/SLrdGGnRT0WmNOJQHX/KvmTPdiyDPBqjQ/iTfqrOsiXzd0aWTtVIw7e8iLKBioU/yzYb+FPxpVdcA3GrZvor5hfwmKNJ+knLK0GcStDPU/Qj10gOZSgiIhdvvwDiudlTENfrKI+oVFCyIzb+xJpwTa3vxBj+nNeKj0B8+PFjK/9fTR/dayxLpFPtlRnC83v4vrsg3jR2hXGMXAavS8PDn+zrZbwu9QJ5iCyUCfRPmMNn5yZ8rZ5EiVc5LEIclvCnx0SAP49G1FdagSlVcB3sLwN9OG7ScTpGFaUvpSpKfMoL2F9FRE4cRPmfk6AfZmM4Nk+emoY4l8XzrJRN2Yrv88+w/DOu8ZV1J2q168TSlTpJd6ZP47wgIjIyhNc3SbJJ28I+GguxjzaXqA8Omz+xbxwdhDiTwj5ZKy1CLE0cS3v2oAxq7DqUJWZTpuwykcXXmiHKMJtNlBiVijhfsaxxbmrOKOPocewA8QGUODhJbKvAwjqk+lDC0+1n/1wSr0+MvSc/9K+kMuvnzVjBsiRy2vM4SyX4z4b1pjnHNwLySZIfh+d1l/1dIR/T/FslS5uq5El0LGx3yz67v87m8+wyD3TzHP4odFMw8ZmyP8ImiVeL/FetNcxfqyrA4P5mfddgx3Glf7gtLx4eHIX3N2/cAnH/AK5DIiIeeSktF/sCy9MadD+2e2wrxDsuvMQo48jBgxAvL+F8V1zE+MTxoxBPnsDYpWZOxU25WuDhvMxe32QSpVMuSfqTOZx3Ul3uAQuDKOsvDKDUO1/AMrJ5nB9zFKeypgTWIVk1e+/cDv/fs7GI6C8aiqIoiqIoiqL0HH3QUBRFURRFURSl5+iDhqIoiqIoiqIoPWfNHo1WZMnRRluXWqvjVoNxi7wLgbkFmE3azPnjqF+/b+okxE/MosY5Is1pt72Gk7QdYcsnLTjpP5OkNy7WUUh5zyOHIB4fNM+r6ZtZLTpJUCvHYmfXnO7mLd5EZOtm1D8Wcqilmz59DA/ZwuuR7UcdfhBDLbiISDqBWu2JIdQJTjrtMnutiV0NPwjk1Gx7i8yJbahHdBzUGw5k0f9zBtTQnzqK2+AdPYXb9W2YQN1lNcIy+l1Tg+/3PQGxncVtPZst1HeWi9inB1y8rnHyV/TlTe1mLoX69yZt6+n55LnwscMtz6D2c+mIOS0cvPdBiDObsN4bLkA/T5K2Di6VsQ7NbvkASL87v4A6fa+jT3fL9XGusSyRRLzdNhHp3QPaGlB8c+vZkX7ULTcWaXvjCrZL0sFxmqZtD/fsRu+WiMjOXVshXqbtbWNJ3u8R6713H35/21bUAntN3JpWRCSysd60jbyxX37okX6dtkv3qrhFr4jICxt7ILZiONfbtL1wEG/R+3g8m+dhEYlzPp5nyKORTK1tW8eeEom0OsZuRP2Nz4b38hfB74uIhCG1EbsTeD9b8mbG46ZXxaet02uURypF27fbLh4zMjwZ9H7X/Ch89ry9e5evwMdpa9AuhjAj3wLlNTC3v312ua26HeNs75v5Rc4tsVhMdu1uj8FDT+K90fwyzjPpnHmvlEjh+Go08J4jHsdxFdL2ytUmzpfDI+YW4tdu2ArxqRPHIK515AIREbn2+hdBfHoG/a/xGPbnQhdvw6MP4za73/nmVyAOZvFew8gtwzm9uvjHuG0c2oo6Ru+7lOMnTR7VPHlsRERyA3gv0d+P2/QODrb9f7s2TUgirtvbKoqiKIqiKIpyntAHDUVRFEVRFEVReo4+aCiKoiiKoiiK0nPW7NGIRKTutDVhizZqbK0A81UMuuahs32oq29U0edRLOMxSg3Uj0ZUZhCYe/E79B2Xn6VaqGusUu6OLGkk73noYYh3XWBqoi/csRnLjKMYeOtW9FxUQ9QpzpxGLXqpjLpEERGh/d2vegnuH/3gD74Dcd1HXWy5hXVaqOK1EBEZqKOvY4ODmstGpX3916I37SWtViQHD7brs3U7+gq27cZrcOTQYeMY1RrqQTPkcymT7+jRJx+BODuxE+LBHOrKRUR8G7W9J4+gR0MiLLM/jvr3SEijH8fzHMibusrKMuoknziAx+jPoN4914djojWIWu7qKVMfPz1TgHjbRvxOOovH9EM8T4+0uG7c/BvH0iL2t1oV+6NlSs7XFdu2JFNoz2tuiOeQC9AzkKK90kVEKLWDpF38TKOBXpZaZR7iKI1lzk6ZZTxAuVYaNMcNjqCfZnwjXu/xCcpfVMAyuqlyWVKcjOPFYj9Bq0p5lsjz0OzSP6Imji07oDUmgZrl1AhqxP0U1qHJF0NEIotzt5CnIToTW+fpT3Sg0X8Ok7BlreJ3cJyzvs8+hVbTXKvigu0apz5uZiFAWsKeDWRN+/c/py+dHe4LLW4b/nzEnWT1RBrdfKedrL8zrY1t29Kfa/sTtl+A6+HJScy1tLiIHlwRkT7ybSQo51jcwTPM0DxQb2DfYp+ciAjd+kg+j/c6HvVZP8BjbiKPbCpZgDibxlhEZGjTNohr1De+9vnPQuz4+H7cwVERC825KazjazblbWqQ7yOkvjTH4+owemzOVIzyaJDPK9Hh+/iZV/28kZvjmdBfNBRFURRFURRF6Tn6oKEoiqIoiqIoSs/RBw1FURRFURRFUXqOPmgoiqIoiqIoitJz1mwGtySQhLW4Eo+n0XFTIIvXQL+ZEO5ohGbPTArNKQky4qUtrF4rgwlIWj6aYUREGk00GQb0LJWihFfxBNZ7bBMmgJnYuAni+QolJhSR6RKai6655mqIF2emIX71a66H+Ctf/leI9991t1HG5ouvgPjmS66E+KlTlHzuTkwgs+xhkpmKbxrT9rwAy6i3MCHd0FDb1OfYa+46PcH3I5k80Tb/R4JtXhqchNiz0dgtIhK42F8KlIxm5240dM3M4jGqlATx4cfI6C0iPm1YUBhCw5zQGIgl8Jj9A1inbBqNueWSaX6bn8E+H3p4bZJ9eO1LHprjHmlgcsPmwKAw9gga/dJJPPel4iLEp6fwPH1KttlqmuOoUkUjtO+zMb5z/K9vwkgRETfmyNaL2mb8RAPHkF/G+evUqaJxjCcfxnazI7xWzRIauS0f+7lNhuij95r9/EQcj+lH+J2hUTSDL5EZPBPiRhMjfZgob2zc3CwgnaAkpTSXe7TBRcXDa+uV0OhYOYYbZIiIlCiBq1fGPlSnhJxDu3DutmlNSo6YyS+tApofLTJYxn5ojuyBt/hZE0kkrQ47sLWKGblbFTkBYYuS6TkOnz+un4Hg/Mb5/ERE0pQIkfKEiV/DPt6kTIpNOfuuD93OK4p4PTv3O0eYCfrO/n5vOA8d74d4XlMOPPLQStw3iPNIysXOsLQwaxyjTobmkbEN+AFaP1tkqPfIRG11Sdxq02uxGM6H/f1oYL7zztshzlES570X4f1ckwzTIiKUf1T6hnGObLk4CJaWcC5LU9LKtGNumZCgDZYsF+vJLcFNE3EOS2PMiIhXps/gQcq1dhyGXZLuPgP6i4aiKIqiKIqiKD1HHzQURVEURVEURek5+qChKIqiKIqiKErPWbtHw7Yknml/fHsO9XnbSGucj5uJpGT5JITpAmrMqnHUboYxFL5ddRl6CEYp8ZSIyJHDmKht8sQpiG3SvkU+6nyTpBG89hoscw6rKCIi93zn2xA/+SQmjwvq9KUMauSLlLyq0jKf/w6fRm13NaQkaz4l8iriMZtJ1CPv3IK6fBGRwigmj5tbwDJvvvmilf8nU12u77kkssRvtq9dcRa1nq0aah4TGVO72T+G/ocogRrDkQuwjUohJpmrkL40JXg8EZGFBexPuTgmKJrYWIC4JahjXQ7x+9VFTNiWdPB4Z+qFca4Px5Ufx7aZreK4+crn8bzCaMooY0ccv+NE2P/mp9Bf4TWw/R0XBaKNlumvikg/nqXkTlaHyNQ6D1rlVCYpP/OqF6/E1WN47fZ/Fb1VTrNqHKNW4qSj5CEjpW0+jfNVhubEwS564UKa+ohLevUWxvYpvHYPfvlOiI8/+DjEN77sOqPMiy/cSvXEMuLLONaseTyPhRPo8Wk8cdooozqNvo0GJd6aKhUhPn4IfVvuILZLerOZtHTvT++DOJYmX2BwRtfcTd68HnTqrMk+Ig6NCdZkn/mOfdbPRNT/XNK321SG45jzbCvAa92ooO67MoXXdmjXxfh9+vsn2wnDLrp8Pg8rpLagr6zFz2KUwTF7NFbzZDwnywYL7c9fyr4wDGWx2B6Djz74fXg/RhdqbNsW4xgefSadxUTE6TR6ZKNV+kKtjn1LRMTm6Y4Slj7x0H0Q3//tr0GcyWCdxoexTqObTP9xnMbJvr2XQuy+4dcgPkXJDZeLuM6XSzgfiohUaH6rVnF9qddxPmzRGstj2+qSdTROXpJ4DNefdIfH2XLW7tPVXzQURVEURVEURek5+qChKIqiKIqiKErP0QcNRVEURVEURVF6zppFVmFkScVr67XyDurYWvOoA58sojdCRORFl14Icd1DjdkG0t8l06gpe2EBy9w7jDkGRERqpN+cT6DGtraM9QxQni4u7SO85cRRiFNFc+/ggeECxK1HH4CYfSH7Hz8A8ZNTqIlv+KgpFBE5dQL9LbMLqFe++vIXQrylgHvIf/xvvgCxV8fcHiIi9/0AdYIzM09BfMVL29fPjta+h3IvsMSShNVux1ad8k+M4b7Vp2ZmjGOUGtgnI/sgxJdevAvia19O+QXimI+iVcNYROTgQcrvsYTXKUV7dAdx1KqfLJ2AeDCHOsuJ/rhRZm6AdJX094Mq7T3+1EnUhx75HuZi8Mp43UVErE34mdos6vrHt6BXIFWgetp4vWzHPI80+RE88sTEYL/99f8bSTzuysWXtfd9P1zHcbq8hF6swbTZP3zSzc6XUYs7Tu12QQGP4VIeg5hlTuH9feifiqdw3uTcQskk9p9MBhXry7NYxye/jPvOi4gUpin3Bu1V7zfIB+RRfoo65eHoosOvkY5ZaL0IlrH9i/M4l6fncL1pFU19d/Ny9K45W7F9A9NatG74vi+njrbnB8fCBoiRF8eKm3vxW5T4IhHD/maH1L+a+PmQ9vJPOl3cDT4ew4+wjMTYVoiXajiOqqQdd2muiCyzb4RkmrGoj9uUD8RMMsDHNM8rYg+M8f7Z4ZwsXZ0hlDeCdfWhdf46oG3b0pdv+5yO1tDDOD+Na249NOuaG0Kvn0W+vFQS567BYfSNui726Sb7X0UklcL+cugg3m/t/94dENsB9tfiPM4zUyfR65XImXmm4mn0dxby6P968Y03Y5nUF+oNnJtqNXNuqpZxDZ6hdfzYUbxXPUR+ZfaebKQccSIig4OjEKdSuDYMdOT5yuVwjj8b+ouGoiiKoiiKoig9Rx80FEVRFEVRFEXpOfqgoSiKoiiKoihKz1mzR8MRS4adtn5ug6AetK8PtcQPLqGnQERkqYkasy1juD/xv5vdBnGshLq1wUN4zMRT5l7rAekCt5IMMhbgC7aLmsDAIg3gPfdDnO/inwiHSAPNmz3T3vl9Dur5mrQf8gDtAy0iko5I+z+N+rwNe9BfkMvgeV29YwPEs8tkThGR6QrqHWs11GYfOXRo5f/XdMmDcC4Jw1DKS21NaN8QalcXStgXkllT/1qpoq+kRVriJx5HjePpU+iXyOWwTUdHTY3jyFbUh9aO47WdnEP/QyqHfWVwGHWP/X3kbbDNceVSzpq4jfkCfA+9TGGL2iZE39KefThORUQu3Iav5dI4DvqH8TxqNRwTnoftUl4wPTSBh8dIxSlHRNB5zdd/P3nbFsnn2/PD/DzmmYnZeM5Zx8w1sxRS0pMIr2+cEgJszuExUwmcHLwufypqelhGmbwL8RTO1VEMy0xbWO+RIew/cbeLf2ISPV+nZ9Gb5JMZzrZpL3rKy+ImzPHLXqRmCftgOoH1XqyQr2gG57N8ztwPP2uRh8rGOcP74amzdn498PxA7j/RMc9FOH+xDyHWZZ98l3wBrHmPkf+B0qFIgy7LSN7UaW8dwNfGknibkU1jn643cAxYlCNqqYTXse7h50VEAh+vk0Pek3gcrytfP4e8J82Guc5z7h6b/AVND/s418mlnASppNn/bPJccS/rTJe1at6OnmOJuO12LPRjHqmZI8cgTnbxT5RO4po6Q17K++7H+629lI8incG+5TXNvsBWmIfvvwfiZcpH4dN9QBiw3wfp1u4tD++HKhGu+2layhIxvPYpOq98v5kjLkmeq7iNcYnm+Ztv3gHx6Cj6L7JdPBZuEisahtgWyQ4PjetqHg1FURRFURRFUc4j+qChKIqiKIqiKErP0QcNRVEURVEURVF6zppFVjHbkgtzbf1WZgH3GnZs1HLt2rjROEZ5BnW7QnrkDaQPTcfxfYc8A1aXvdbZedDk/bNJqxkjvZ1L/oqYjdq7Vs40UES0D7jfxGMGpPIbtbGWN9M+955l5hgIJlBflzx2DOIaf4U8MxddeAHE4zXTozHeQk3prh24h/UFQ21vSSxh6s/PNVbYbkfbxTat1IsQj46aGkdH0LswNYXXthThOZWWsI3cJPbfhSr1ZxHJ53D/7GQWtZh9gzguUgkcgqP94/Q+9zfTG9NqBRSjdyCK4RgoLQ1jnUiqeeNPm/uEJ2QW4vEx9BnFqZ4HH8FxtEg5Jhol8iqISERa2fwQlhHQ++uNZVmS6pg/LKpPeakIsd3Fo+HSPviRj9fG9/GcWy3U4WbSND855t+KymXUB8dJC57LYr1icbx21Srujy8B9tEBymckItJo4hxIW9NLq0nXv4pzebmM76cz5hzYn8W2mS3h+EySvjgKcS/6BumoJ0+YuYS2TeKYHtmK4zUITe3+umHZYmUK7ZjWLl4Nm10k/DzrB/wtyo+UpjW2RYlEMjVTIx9lcY0tDGD/Gc/Rul7A6zq/jP33qVnsG4cX8H0REcvheRK/Y9G9RYJyW8Vs8j510f6TJcPQ7rNHo0U+RvbQcP4aERHbwnpElB+kc6j6/jYRMcfJuSKSSBod90dxGm/sc/Fb5j1GRLlepqdwXXnqKOas2L//bog5J5nrmLewwwMFfKGF19KlKbNcwnliMMdrG7axxfeUIhJQ/pnQo3w05BnKF/A+gX0hjYbZ/w4+iflA7vz2tyA+duwIxBMT6MudX6L7gi55XNwkzu3sK+rMA3X5C66UFJtPngH9RUNRFEVRFEVRlJ6jDxqKoiiKoiiKovQcfdBQFEVRFEVRFKXnrNmjEfotWZxqa8CaPuq76g7to59HnZuISKqGmsXGAcwpEDioa/MzWD3bQc1fgvNViIglqD/2yQcS0L7AEWnQWNbKsTuy3SgzV8TntQZJs70tqMfr91EDnWngeflF1MmKiFRmaU/4qTshPn3vQxD3XYR5NRamUXvspXEPbBERn2TztQXMr1CKtesZhuurl4/CUCrltpbSqWKb52LYV1o1cw9vm3S7qQTqrW3KH5DrL0AcOHhd6p7p0ajN4LXctuEiiPMp9EdIizTQyzhu+jOkgYyZutdagzTLLtYzJB3rkcPY5/tHUVN9xZWmRyMlO7GeAfbhRhXHmd/C/dG9OupgEw6WKSKSyuBrLLu2Onxgprp0HYhEpMPHFKMhEKO/2xTy6JMSEUmH2McmKVdQk/wQ5QZrfbEPuwmzHVkbvXET+gzygzj25xdQu9ui7/u0SrQ8sw8mSIPcqJNng/bUr1EOjNJiCeLI75LjYhjn0RZ5yipVXF9qTfIu+TjWGvPYJ0VEjh5EjfjQtehTczmxxHoSRRJ1eGEi8k9YZCIIu+b6YKMBjyRcH32L9tHn3B2huVZNL+NCEtJnjhWxLzQpb0aRruNyDb9fC8zzKlFfsGksclu5Nh+D/BRd/gZrkV/CSKcQ4RgIQ8qJwfXu4jmLqH25kM7L1eriUT2X2I4jhaG293HmEHoGXJqwG13yaEgc2yRGXkv2LFbY/0q+l9A1PSqlIvqHA1of84UCxB61I/vNKhVc67r5QiqUd6WPclSELew789O4PlarOBc9eRDbVkTk3h98H+IjR57EY1A9jx7H++sY3SOFkbmK2g62p0PX1O/IDfPWX/3/ycAAzsnPhP6ioSiKoiiKoihKz9EHDUVRFEVRFEVReo4+aCiKoiiKoiiK0nP0QUNRFEVRFEVRlJ6zZjN4EIWyUCmuxJNVTCjik+Erbo0Zx0j3D0G8QAbRMTKIphr4HBSU0AjU9MzkZTKEZWR2YaK6BhmxK/NoQkyElEyIjEHNOdNAKAk0xFiUgMilZEFhCdsudREZzOOmkT49iwa76qlTEBefOIxlnECzUW4AjamLBdNIvzCNbXN69iTE2+LtZHIhZ+Q611iWOIl2f6g38NpXjuN1ac6bCeFGJvA6ZFLY35Yp6V/OxWs/MIrGqLk504jrBJRkrkkGuQoa5BIWJsixnQLEi/Nk/s2Y7b5QxnrWyRQmLh5z8hQl0NqIGw0kszgmRERc2rCgXqfkaE0sY+MG/HyeTO3Tx82kW5ksHZMSW1odHnZO2LgeRGEgpY4NEqq0WUJ/GsdYMm72D6/JZka8njUL++1SkzY96KNEY4aZV6Qvg0bqQh7bNZdFw99yEeuwUML+4Aj26eEB0+TONMgcKR6OPc/D+adSwTmxwkkDRSRBibMCG899voxzwBLVoUGGzEbLTL43dQqNpOb1Wl8DbieRiAS+T6+0sag9wtCc4w1zMSUfs8gs7tPalbOxryS7/Klynua4BiWdtGnzlBr1jaRD50F9PGObc6BHSUuDgBLzsjlcKMEalxmZbReRMd74CJlr2SweGu7xLlhn346ms8y1HK6XuI4rmzZtXYkP/uAueH9hGeeN+pI5vjZu3QyxTdeWkxry9MYJDMPI3IzAp2R5mRQl4qV5olzFeqaoDvfdfz/Ex2hjHhGRXB7vATNpXNfjFo6BgwefgHipiBvLHDt2yChjqYibdgS0cQBveMD7PgQBf94oQqKQ+zAes/P6PJsEuvqLhqIoiqIoiqIoPUcfNBRFURRFURRF6Tn6oKEoiqIoiqIoSs9Ze8K+KJKlRltHO11DDW2LEk8NjVJiMhGJNo1AnOhHrW+ihHo7d4qSzJH2syKmyCzIoj45tgU1ga5F+r0CHrN18ATG5ANp2KYvJPeSvRDXKGGMPIl6PPHp+e40fr4ZFo0yYmOYOGrshhdCnEihF2DxICZrKdTw/fwWUz9+gpLIpBzU58U6knJ1kYafYyKxOvSYESUyG+5Db45T76LdLKNOMqTkQF4DtZvz89inoxhphWOowxQRGR7B6zQyiPUaLuAYkBZelxglzGk5OM5KVTNJ4MmZoxBPn8TruIih+M1LIM4V8JjT848bZeQt1Pmn49jnRyYwQeTEBhzblo862fIeMyGbR/6pwKIkb822fyEeMxM1nWuiSCTsmA9aZazfQBbPebloel3m6qjvHeJknhnso9MnpyHua4xDnHDx8yIigwMFiLNpbHuXkqv29eH7UyfQL1Gtrq79r7AunxJmhpTjb4l8asUyfiCMzKSA7jTOk/Ecjr8K+QSXfYybpKFvhuYk1qDkcT7pnoOVZIbnx6thd/gwOEEfT8rG+2Jqrs1jcEg+yQjjhN2lL7g4tkvkjcmksBA3jnVKUGKx5TquuZkuSROzlAju2BL2nxqdR4w8GXyeVrc/wbIpgpuXuwS9z4fkayFyxgf2fMWybEk77blivMOvISLSIs+j3zTvlZrkxynSPNCiMRojf4UVYF8K2AsmIr5NSZjJ++sm8H2XEns2qY8/egj9Egv3PWiUmU6hjy3uUrJGOq86JTMM2W/RxUDhODzX0zigJJSGv4ITDTpdbuKisx8DOvWzuAfUXzQURVEURVEURek5+qChKIqiKIqiKErP0QcNRVEURVEURVF6zpo9Gq7ryqZNG1di+yjmcUhR2oLAM/WHCdpLeKmKGua7JjFvwwRp5i8ULKRbHo065Zfw7ke9eZ33Ht+wAeLGLsz/UfNRm37JDtSmi4hUbdTn1aeOQRxfppwjfagv906QL2TGzDEQG5nFeo2i1j82kIe4/6VXQFycPA1xYcjUuV6R3QLx17+HeQIShbbvxrLN759Tokik1W7HOGnTs5SzIBaYXZv317YSeF3SSTzGwiz2rwA/Lnu2bzLK2DC4DWLXxWvdqFIeBEE9s0W6yQqNoyePYl8RETldxNds2lM+LGKZAxGOo139+PcGv0YnKiKei1pZp4V6ed6PP57CY4wO7YR4qA+9UyIipSr2tyblOci4g+3jU33WA0tE3I6/zcQs8vjUsb6lspkLoh5hn3rRT18H8UV70YPxvb/+CsTzp/Dajef7jDLyOZyPPA+vRZO8C2FA+Yma5I8gXfTC4qJRpoR47qw1r1bwGEWaEwMLx57dxXsyvYDrxXiBzj2NY6kcUm6dkPq5Zc5hTpry4Bg2iPOXR+OHNVj5XzcddyfdPACrfoY9KeThaFBf8CvkRxSRyMK1KJbANh2l9S/l4HXZQrmwto3gGpzpkryDbEdyx2H0Nn37ENZz0aN8WXxf0MXf4vusX8f3je8YevfVRe2cCoFZf29kmygMpdHhS9swgetftjAAcX3GzGW1uIQetWoN5w2f5ibh3DA0V4WB6cX06FoulXDeiMdxbuH8M3Wa/ypNmj+75N/xKaeEw3lbeB6h9ZLziXTzwXHfsFeZi4Lg7PPDWnxmpqdr1a90RX/RUBRFURRFURSl5+iDhqIoiqIoiqIoPUcfNBRFURRFURRF6Tlr9mg4jiNjE6MrcfkUah7T/SxCM/M0xEgLd3p+AeJPPPQYxLsHUdv57iTum57u8pgUVVEXvfgIejQWh1E/eqSJfgjW903swrwIm/vx+yIi3mlMVJAlP4TFm8iXsR0SNu07Tnssi4gER45AHE2hBnUph+2d2b0R4oltOyBuUM4MEZHhNLbv5RdfAPGmbe1jOu6au05PsG1L+vJtrW4yg20WuZTjooB9R0TED1gPite+sozt7lRof3faH17qpo5c6qgvtlzMJxP4WK9EDOMWaVCX0bYgUWmPUWSqhdrYVIT1SjjoQ5ou3gvxVhf9PhuTFxtltCh/TJ3y6Cx72OfDRdTiWiHqZAsZM8dEaGMfLpdQ9xrPtHNOnA+lvCWWJKJ2HxwbxjF1X4BjaknMcTxxEbb1dTei5+vCPTjfDKZxnP3L334T4lLR9IHUqjiOF+exrT3SGEcuTqTlJvuE8Nr3102NckLwWgWktS5SzhGP9O6xOHpuGi3Tf7fUQM1xjPxLdYe8csJzO36/5ptt59A8ms5gvYIfapa7afjPPRHMD7z82ZT8YS0eDUN0zb4CKoStbzEx2/CqArbhpVdeBfFIHx4kpELi5P/bNIzzmd0l14Tv43fc3aMQl+r4nX99qghxRHkMOF+DiIhLnp7IZh0+tyUdg/wEQZfzMHJt8Ey3Bp/HuSKKImk22r4Ll/Iy9PdhTiC/YXo0+HRqdfxM3MU2rjfQHxHSvOB2yQXBl8Gm/BKNBs5FPG74AJ5n5vRheKwZeTG4UuTBWEv2FKMMakyb7q+fyxxlzBk8HzzrI55Bf9FQFEVRFEVRFKXn6IOGoiiKoiiKoig9Rx80FEVRFEVRFEXpOWsW2ocSynLQFoy7EWqwY6TZ9xxTzVX0UY+3WMfP+BEeoxRDTfypGO6nXYi67KFs42tRhHri5RD1eSdnUcfbZ6Mmd4lk+V869SWjzN2Ui2PHAB5jMIG5OarHMNdHUMc6RF32hl5amqPPYNt5lAOitYweGu/hQxCnu6jtmknUwm7ZexEec+p4R6XNOp5TIhGn2a5zYGH5LcpPUOsiJqxVsJ1jcfxQn4X9K0Fa4biP+/ZnHMw7IiLiNFG3H9ZRK5yKFfALAT7rWwGqNcdzWMZY4YVGmfUA8wVUF3GcHZ09DnG/i16ofITnvXkEz0FE5MD0UxDbFupxYxa2v9fE82iQRrqe/b5RRhAnr1IDx1G52PaBXLXjWpE41vtcE4YitVKHRj6B/aFJc8XEFjPPys/8El6/C3ajpyeewj550YvQw+HTjP29//3PRhkPPoV+LquJXwp80o7HsZ8vkgdjoB+vg5vCPAgiIvUS9sHyMmr3qyRzdkjf3fTxA8sNM5dLjcbjgVM4J56Yx2OUSWcfkt64KaaGuW8IPXjZDPaxxR/OIYZ2fj2IRKKOc2Ldd2SvXifWYEekFbeoTSLytTicTye31SjDIvNks4r3CosueohyaTzmoTn0FP3giSLE1YUpo8z0GOYvsikBSquG81PWxvNqhHTelnlrZOjoac0JOPcBa+p9ygHRJVcCew64h0bR+nojsexQarX2PeDxY3hPkUrivFDoyxnHaJLHwi7i+8OD6Ddkf0S9Rl6vLl4ujzxlLvk+HMrb0mrhvQTnxFjtuoqY84FxaTnnBY9dI1+FOTcZY9XuvV/HmB/MDzyn4+ovGoqiKIqiKIqi9Bx90FAURVEURVEUpefog4aiKIqiKIqiKD1nzYI/S0TiHftCuyHq4IZs1Pd7jqnhd1uot6vRvugbhjHnwMZtqHE+VaF9mbvoxeLkM7BI1OyFqD8eH0SNtEvVLs1hvopo0dwbf2oBtf/LadQqbm6SLnEePRpSx0Jt33z+q1POh1qAbRmRtyRdp5wlp07i+100gFXa+77QxHjokl3tIFjLzs89JBAJZ9vXO0xh3/Fs1HTHu+jI47FBiG0PjxGRTjykvjMycRnEsWC3UcbcFAr12bvkp2gvdQ/7Y72OdUim8LraXUZsvjAOcbyPNPfDeJ5x0p2XGpisY6b+qFFGdgz7ZDJAj0azgTkMnADzQUSkNp5efMAoIxFDTe/AwCUQ2612GXaX/dPPNUHoy8mF9nxw1yN3wfvDO1Df/9pffbVxjO17Oc8KzmlNzuvj4Ti7+ErMo3L8fvTOiIh847PfgjjuoSa+Rf6ZkLxu+SS27aZx9KAZemMRqVA/5pwXxSZ6yHiGi8XwmOWYmasjVsB+O3kS8zBNl/E7Q5sxZ8nUSfR0+C0cJyIitoXzRmkJvScN/0wZa8pRcQ5wOsaRsa8+abi71dHQYK+mDef3Q1xfJ2tmLqEnlnG9e3xhEuL8AI7zkPyGxWUcE62TmAvLXTpmlPmq16NHY+4U+jh25HEM2Emsw13HcQ7sYjGVfBwn31wC+08ijn3HcvD9pse5iMw8E8sNHJtzzfPnyWCazbrc84PvrMSnThyF92MuNlq1UjSO4SZxfcxmcd3YOI5r2fIiHmOJ7jtSKTNf21IRv0PpTsQn71adPLKO0L3Dcxjrxu0Vv7CKR6Mbz7YWPJZXG/trAb7zLL6uv2goiqIoiqIoitJz9EFDURRFURRFUZSeow8aiqIoiqIoiqL0nLV7NEJLUvW2RnbKRz3yCGnk++tFs7DZ0xD7ZdRF7tmLOsvNu3dCvPjQkxCPW6bGVkjrG4vwWSpFuRRcEpql06ghPPjUMYiHquaz2fatuPfzyThqMWcO43mnyosQWz7pYAPzvBrkefFIeOhV8f1Fyq2QTuOe/2XP1EBXm1iPxVMzELub2/lAjL2lzzFxNyF7N17ZLj+N2swghlrh8QJq4UVEknlsA4v2Tp+bOwHxIrWpk7wA4kajYJRRb+E4SKZwD3nPw/frVfT8VKvYPwPSpAZd8pf05VBvnMpS/pk57G8NB7Xup6uoXc8umOJLpx+P2Sodgzhto661P7UVYjeObe03TQ9NJoEemo1jOP5j0vYKuK75/XON47oytmPjSuxn0U9z2VWXQnzBpZg/R0QkiDC/RCvA/uAFtC88eVHiWZyyN+/DNhIRqXz+dojdFl7PUhXHftzFueSyC7dDvHUbxstVPAcRkeos6s2nKW/BTI3yMTjYrx0X56vsmDkHXv+K6/CY/3wPxFMt1OX/wut/CuLvfms/xHd/B/PLiIicIh9Hq7kZYuuHaw7nm1gvnA6NdEhrV5xyk/iROUc3fc4zxWOdYlo/Lcom0QzNdlggf06c+nCuQXMcTWnZBuaAakSYV6PV5bz8JVxjpyfxXsEnH9K1N/0MxEPkhRvJmt6TTYM0z9K9RjKBc5JL/jxeM/2muQYfnS5C/InvHYP4dKeHY519Qi2vJU892fbvLc7jddq+HXM+JahNRUQaHt3H0HoYc8/e3xzyHZS7+FwiyreTIF+IX8W5JqI11guxjqHRzKuPff4K+yVWi9eD5+LRsDvvO59FlfUXDUVRFEVRFEVReo4+aCiKoiiKoiiK0nP0QUNRFEVRFEVRlJ6jDxqKoiiKoiiKovScNZvBwyiS5Wrb4PftZTTM+OjjlOtDNEqKiKRmMfldsoVG2MuvvBniiU1ovv3nex6BeLmJRiIRkcBFE2KLDOOpCB0sjZNYJ2cAjd3b+9FU3AjQ3Csi4mbQBHbJi66GeJE8X4v3zULcJLdR6JpJaOpU70yGGjyFCYnqcTzvcBATrDXENFtOk2l4uYhmr6UnDq38/zqvJVjiuSUeT8oll964Ett5NObZWaxNIYmGZxERJ4Ht6gga/h578l6IF06gGf7oNPbXmGv2v1QW2zXeIuNZC/tKlZJT+REZdeNYx1oFjycicuQYJm3LJrGMIMRhXqHEmXNlTHy2o7XVKGPxFI6rE8cOQBzz8LwLWWy7ia24ecSyj31NRCSkhGwDMTKpJzqueRdD6LnGdh0pjLfnh7f8xpvg/XgK/27Tss1rZZO50aYpOJXCfh1F+HmfEo5ObDEN57v2oEH85CPYjlGAx3BiaJb0XDRxPvgUmqZni+YcOD2HBvG5ZexjJZqHbQf7fTaJ/euam15slHH1z14D8f6HMGFY7TAmhssUcBz8/KtfAvHBxz5vlPHgvZis8safx7Yc23pmHrWs9f8bnWVZEo+1+4tlY9/IU/Kymm+aPesl7JN8Fqv5Q+MOfoMTcYqIuDQ2N/dhvfaOFiBeXCpCvFzGebYV4nnOlszNCL79ne9AfPFV10KcSOA468/iXLNpFJMFD3cxgxdoAxLbwvNM07xrU1t5lLCvWDGT/z45iRsaBLS5iBV22QBnnQgCX+ZPtpMNhwFde1pnUumCcYzZOUwcnE1hwr5yBTcIitEmIo0GbaZi3mZKija+WV7GY0Y+Xoc03TuV6pTQlMaR3dW4TcnxyA5u5u979ubv1czbNpnge5Ggr1emdf1FQ1EURVEURVGUnqMPGoqiKIqiKIqi9Bx90FAURVEURVEUpees2aMRhYF4pbZ+8PACarDrpD0vbDQTpl0aQ21czkWfx7ZNmyDuy6JfohmgIK9ZMwV68Rjq6xoRfiZOicXilECmvojacZuS7oSOqXObWUCfx9KBxyFOJ1E7V06SLjGFetFmFnXaImYit/QQts0iJb4p+6QFb6Em+vS0qXO1k6RVJC1/ptTWZofrnLAvFk/IBZe8YCWOYqgjZ2+O62B7iYg4AX7HSuF1qT2KbXZqEr0Liw2Mc1m8jiIi/jTpPxP4mZGBEYgH+9C7UKlhvTmhUath9vlKERNaNSjhkE1+qUoDtewV+nwpNL0Flk2JMK1RiB8/jD6R/BAeY8nFPh3LUGI6EamQn2VhCfvottGrVv6/u/9nJCHmODmXRFEo1Wa7jpkB7E+htOjz2J9ERCzSbftNHEdRZKjmIfJIs10YNdvg51/zsxD/3fSXIK4VeeziOFiwsb8MjVAf9U2PRrOFx3AzOKelKOHoyDD2n2uu3QvxC3/qSmGsArbNxDacA8MQdfWHD6OH4+d/Dr1zu3ePG2Xcdz8mejt5DBPBbblg4kxdzkPCPtuyJNPRrg6tRYukRa955loVBPQaJX41NNjkt7DJLxGEZgLRKzYWIH7JTrpOTfzOMt2FBD72v1oZ+1uW5kwRkUuvvAriq174IvwO+Su8JpZh8+WMulxfeilOnr9WC8f/yWPoR/juvQ9BfO9pc549UMT2XfZwTbbd85MoUuSMT7dUb88/aVqDS8UixG6XhH1pei1G177ZQP9YNo3n32jgfUzUNNeRFt3zRdSf2KoQ0At+wPMj+xTMv88/W//Dc/FLrHYMh8ZySO9z8t/nwnO979NfNBRFURRFURRF6Tn6oKEoiqIoiqIoSs/RBw1FURRFURRFUXrOmj0aadeSl21p6+XmFlF7/oOjuCf014+ZOt7UdtTbpbOoccw5qOttlVGPHFioMat2yaORdPCUAtJEC+nrQtK1LVZRFx41UE8ar5pltoqkAXzqBMRpep7zaJ/nR3zUJR6bxzwbIiJJksbFQ9QqxpJ43laL9p8uovekGpnabpf2Dg9ieIwt/YX2Z7ldzzGWbUs639bm+iGWz1t6S8zUDocR9tEk5bxoVTHfwMwh9NpElKtjeOwio4zDT+I+6HULcxRYVbzW7gbebxvj0yeOQVytoR9DRKRWwz7rkBbTisivkixCGMXwuk9Oo4dDRKQ/j+e+afNGiJtNPM+6h3XymhjnBsx96hvkV/BKOIckpO0DCXaY1/dcE0WR+B1639CwU2C7uy1zz3uf9zanKTiKMG75ON9ENraRH6MkPSKy6ZKtEKfGaF/5A6cgtly8Fpuu2Qbxv3ntyyA+PYO+BRGR2dkixOUqaqd9C6/XhnH08G3ejN4lzzW110t19Eht3ILaf9fGPnrkIJ5n5hex7a66AvM0iYg8cP8hiOtVnNuD1vrnb3maMAylVGqPf66Lx3v52+YcHV9lxef9//kIjoXvXzBqZlN6/Q04Ly7Tmrm0XIS4n3JcnKrguL/kYvTvXPMizLclItI/gHmiUtSnExH2p/4+9AokqWHitjm/LMzj+vDYE+jnuWP/3RDfecedEC+5BYgHrnulUUbNx3qHdM8j4In50XX+z4YoiqTekQvEEWyjxXlc+4ZHzRw/GyZwnCcT6JldXMDcXfNzOObDgDyQtjlPxCmfxMgE1mN6HvvXEuVlWd2jsbpPZrX8E+fCoxGQf8JexX/VzbPB32E0j4aiKIqiKIqiKM8b9EFDURRFURRFUZSeow8aiqIoiqIoiqL0nDV7NGKuJbsm2h//lfRmeH9TAvWw33rSzNPwzWOop7tsywTEladw3/MiPQc5pEEreqi5FxEZTqP3IIhIhx9iHeZon/D5NHpPGpTrI2eZTZbJY5kh5eaQBdTVJxKoaz1Je0Mv8F7nIjJGOvp0BuuZy+AxozrqYuc9LMN1zLZzFvG1iyPUT2bL7bazwvXVh4ol0im9jAJs4xbl/PAD00sTxlHPHpaxL1gV1IP6FcwV0z+M2vXmHL4vIlKdRX+DH6KmsVXBvrBAx3AS2F/r9TLFpkejXMN6Ozb1UQfbYuM2fH9kHDX8tOW8iJh60GoLc8ds24rzgRtsgLjmPQax7eIe8yIiXoA+j0wWfSAwdNe5+z1NZ/4En/bNd128dt22HK/VsA+yJ0MEvxT4WEYsifOA1+VPRakC1iM7UYB4uop9Kp/H6z+yA/Xu+a041yQnthhlXmDha606526hsUfj17bZV2Q2XsLBjjk0PAhxjnT38Rh5AnOYf+HSq3caZfR//jtYT5KAp37oJ3iOUuUfiUhEvA5ddURt5FKOBcsxK8mpXXxaY+OsJad8TKNZXBP+7dXbjTI2FvAzNdLAjxZwveynOW8ocy3Ee3bvgbgvj94cERHPw/6VcCiPFHk0FmfRZ3T8GOYBuufe+40yfnA/5sE4/NQRiMs0tweUn6b/mldBXA/MPBMW5XyIsRcS8uyscyeMQvHrHbm0+O/UAXkCItPn4rrYZ8fG0T8xMoT5db761FcgnhjHe8aUafWTGuWaqrawL/h078LnYVPOqLXYKVbzZDCcj4LX1+7fZ3/f2Y+5mt+i2/v8GtfruXpL9BcNRVEURVEURVF6jj5oKIqiKIqiKIrSc/RBQ1EURVEURVGUnrNmj0YUhdLs8EQMJFFDdu0u3Bd9vmpqbO87hfsXH5hZgngneRU82ts6oo3ryw1zD/moifpQzi8RsbeA4lQCdZPlCPXtpc2oIRQRGbzoQogdOvVH/hV1v5uo3hv7h/ELTdQYiogkSdu43MK2qi6gv2KMvCYTQ6hnjrOOX0Rii3h9tpRRW7upUFj5v2uvrz70zB7e7Wvh1VF32SAPShBhLCLi+5hLxBds59oyatftBJ6jm8E2K86bfon50+g98Kj/+AFep2xhHN9vkM6ffEi1Ou7lLiLSCDDvihVH4aobwz4+tBHLvGAXek+mF0zvSRxl/GLZ+Bmvim071r8Pv2CjtjbKmm335BM4H4wP41jLJNp5duwu/fdcE0Uida/dlg7pp+Mu1snvYiSp0diuN6jPGbpZPEbGwXEdWN10ttjnCuPoufAd7B92DL0PA5SToEV+Ck/MvettygVk8WfIg+GRp8qKyBvQpe3iDnnG+nBO6x/C8xrfgH0uoDwbg5vNMjbvwGNGlKDHPR/mjA4wzw5eFyviXBDmGMmnsQ2bpPP3fTymQ/r2jVnsb7upb4mI1EkjbwXYNzJJvA5btqG/x96O/q5EHPtn4Jlze3kePWP3HT4M8WOPoUfsgYfQb/HUEfJblM35KaC2CSkPgUPdKTmI81duGM8r8rvkegrxtUg4F0/HfUAPcjE8G1zbls1D7Tl4cADznhX68XxjlC9MRKQRYN+Yo5xhWzbsgHjTBvT+DQ8VIPYDcy6aeuwAxPNFnGM9uj+zjHwT3K7Pvp1X8zKYHgz2eHT9FkU/Wr6Pbh4Nx8H+xvPBc0V/0VAURVEURVEUpefog4aiKIqiKIqiKD1HHzQURVEURVEURek5z0LobInltD9ukSZ3vIDehuu24Z7lIiIlD7XDx4qkP6d9v0c2bYLYiaMmsOGbOrhGGfV4LmlM4zHcq59r6c+gBr6P9MnNkpl/YrGFWrlCP+pWC6SjjjXwGBsoB0a8y/OflUGdqkV7xNsV1D6OuthWZKkRu0kbqotIjdouT7k2dmxuX+OYu/5a5aAjJwVbbZJx3Ju91awa3/eKuHf6YqsIcXqwAPENL3sxxFM19BBMLmLuGBGR4R14nUK69kEL29QT9MFk+lBXPjuJdW54pkdj52W0r3wKG2dhGfNsFEZwDIiF2vZ6xby2A8PY3/wI22JoFEfS8DDvTY4ermId+6eIyHABv5Nw8DOzU21tdnDJ+ifSiESk0SEJtmnf8hZ5flot00PG+t94AjXzAeUtCKmjN8jj0WDBsYi0aFbP5dHX4cRRhxtLYn9IxPBaNWtYhm+b5xU2sV+7IXmNaLqJ2BvQwnm2Vjfn2aaNbbW4iGO8Tn6mdAbPa548aH7LnAMzlGujWsXP1GpnOkCXNB/nHEtEEp3+GpLv75oYgXjHOHn/RGTLAK7TxQq24TLFcR/X7FwLx73XMNuw2aTcUzkcx+kExha1ZSaDdVxaQh3/7bffYZR5113fh/jAE5gXY36B6k33LwEnvemSy4q1+o6DA43vT2KD6C+w6H07NL2YFh2Tc6VEXXJTrBeua8uOTe25IZ3DeSWWKUB8fGreOMYCeV9qVfJsbCav3wb0E87NoRfnyDHMWyUicmqa1kgLB0rEMc2xq3kbngvs2bDtVTxpXZIwmbYOfCGkJDlRdHa/X9c8LKud+nNsGv1FQ1EURVEURVGUnqMPGoqiKIqiKIqi9Bx90FAURVEURVEUpefog4aiKIqiKIqiKD3nWWW9ijqSKkXk7ouHaK7aO2Aeem4czUPVJn7Hr6PxbGgQzWzJLBr1iuwIFpGWhwlcfIqbDpZhkzGojx690JYm4pWWxaCBx4ym0by2kRw0MYfMcnU85ohDZl0RWSLjfCKHhvOwhRX3a0WIS2TW7OIFl5AM1ON70Vy4bXP7erguJxI6t0SRiNdhfLWo61qUzFGCLgkJk2jUThbQQJ6tYlw+gkazqy7C/rjjoi5tYGPSIq+O9frBd/GY8/NoxE7lsA61OprF8wP4eRGRS16ACa+Ozj6JH8hh/5vYPAZxfz8a7rIZNKSLiNR9TNBXruHYDSOs18n5RyEeKLDB2NwsIp+iRHGUlLHZkehytYRI54IoiqTqtceuT0nn3BglFC0XjWPkyOg6PEgJ4ii5Ip8nJ0Or18zkZQFlDA0oCZgdx/5QrKBB8/hRNM72j2OfdFLYJ0VEIkqcFbZwbJQpGWvDw/7D59lqmYm4fGqbE7RRwjIZTW26HqUK1tuO0FwuIlJvYBmHDuOGD8ulM/UKz0P/SyZicsMlO1fiQhrrsGMYE6RlAnOSz7vYF1o0j9czOI79Kq4JzRrNs12SfglteJCO02YoNr5fmZ/CeAqv4ze//wDEf/WPtxlFzs+iAZi9tCH9TTWkdd+OsL9FRjI0EYsSW8bJ1B7nRKkjmKBPXLqb4B0SRCQUSnzJDmAw/K5vH7RtWzL59qYgdqIA79cCamPH7BuuhWMulaB5oor3QlXaPOXIsaMQLy6aiRV9476QE92REdsYy/ZZ3++29qxqIKcxQflJjQTIYZdrG1GnDo0EfVhvTrQa0MYC3XIu23RfZdbjufU5/UVDURRFURRFUZSeow8aiqIoiqIoiqL0HH3QUBRFURRFURSl56zZoxEJJh8LOFuQjxrHfJeEbpdvQp32QhmTs3gzqLltkT40TgmYGpb5nNSiJCV2iPUKKEmTFVDiKDqmF+PzMBPmWJRkK3BI+0tiuMDHY0Tk8UgGpg4/Ij34dLIIcYsSf4UoJ5UYaW9rNTNZUJw0fMOk5U+67TLOQU6bsxJFIoHXbueA2sx1KemOa2rXc33Yf4J6EeJTJw5AfOjRw/j95IUQNwYweZCISJ2u02AKkzbZIdZ7uH8XxIkUJsZrUjLI/FDBKLPlY5nlMiZK2rARvSVWgHX4zrcw2VUsbeqTRzaTJ8vBDjY9hRppL8AkgYsV9H0MJEm/LCL5LGrMfZd8Rx0aVdtZ5w4oZ5LnlTt0/vEYjrmEi2MsHqdBKCK2Rd4iij1KalqroUa5xUnmukhm+aUWJflyktiuxSJ6Mm77yjcg7ht8BcRbt6PXTkQkEPLGBZyAD7XnZfJL+DQnxuLmHGiH+NrpGexjHs3DbsI96/uBZyYe9EkHPXUC/QMLC2fqHQbrn7Evm4jJa1+wbSWOJ/BKHz+NY/Cu75iJ7S6iZJ0W9WGPtORPPYleqwt24nxld1kPi6cwWV51CXX306fRw3joKfz85DxeVz+N69DAhm3CRDQfBR7Wy6dbhSbN034Nk9WmjHVfxKaEaI0a3p8ESby/SfWjx5F9TH4Xj0YkdH9CC23QMa7W26dmO47kh9rX4sRpbDPuf0GXmwSvjtelUcfrUKzi/GfFcAw3af7rYtMV1yWfAd3jhex14KHMGSSJbu3Or/Gpu+RXCTkRI3tOY+baEdGc43DCPvJk+QF7S8jTYST0M9cji9vC6mLuXQP6i4aiKIqiKIqiKD1HHzQURVEURVEURek5+qChKIqiKIqiKErPWbNHw7JsiXfox50k7iHtFVFzy14IEZGJAn5n3zLq8Q4Uca/+6akTEJfquGdyxRDXiTRoX+8Yifh80lnaETZBlXRvNdK1uV2ezcImaf6apDPkDYupTg2XdIe+qXut8ncSpC+28RhJ0viFAWohM6GpT75gFPfL749jmbWFYvv7Ae/ifG6xrEhisbbGtVVB7bobR89QI0CfgojI1MzDED9x7yMQ5xzUnmdauO/5gW8/CHFiq9kCC+QdSe8oQLx1I46BkzN4HVhb7MZRQz26ucve6xGOvbCG30nb2BeOPnkI4ru+fxLijXvNaSHM0bjyMf+DX8IyB4bxGMeOog77iWX0Z4mIvOymF0M8thH15FW/rd22rPXPY2BZlqQ6vFDJJJ5znPI2JPvNXCEJF79Tp9xBy8Vleh/7eZZ8LJzPSMT0dfCUlcljH7z8BVdAfGwS+8f//uPPQHzDS642yrzwkk0Q50exz0URjk/XwbFlkTbd98w5cG65CPHhp47hBziVDnlTghDHa90zfWqpLPXzMq0PP9SUd9OGn2uiSKTesV4tkp79CdLM3/no48YxTpL/ajCLYywfwzbro7w+qRz26ZOnzXn20HH0WNz34P34/kn0vZQbtI672HduvnwvxK/Ys90ok2xHkiR/1KlZ9IWcnMV6lyro6Tv4GHpTRESevO8uiFkTHx/fie+zb6RGc55l5mGyyTNjejSem0a+F0SRSLOje5ycojadJp9et0FC+a54nKcz6FF0fcoJ1CLfQZcyOH9OxDlVQvZHIBZNJHa3XDFEGJ7do2FxKeTp4Ovq2GbfsKgecc734Zw9P4jhTeniMwvJt2Zz7g1H82goiqIoiqIoivI8QR80FEVRFEVRFEXpOfqgoSiKoiiKoihKz1mzR0MsEenQjVkW7mnuotRTGjbuGS0iEiPN/+Zx1AofPYmaWa9J+1SHtOeyb2ps52kf4JyDWjfL2O8YdW3LJFub9sjT0SV3hxOd3a3A34hRDpIZyvWxLKYOs0L12kC+jwJ5YpxF1OuOuqiJvnIT7k0uIrJjE17EdB21/80On0e6iz/mXBJGviy1Jldir4ma2irJ0meK6L8QEZla+g7E89NFiMdiF0E8SBraEuXdiE2jXl5EJE77hJ8MDkK8++YtEC+EeMylKey/w+N4XS95gdn/khm8tvPzmLtjbg61wZks6q737NkIcd9GakwRiQJs76CF9Zw+hWO1ukg5DMi3VKygF0FE5NQe3Ic+k8N96E/Ptz02PBesB5ZEEusYmzb5npIOjp+oS5KLyNDJ4mcSCbyWcfLopCjPSrmMY1REJAjw+iXTeEyfch/s2I19cte+UYhv+yyOm8//zZ1GmS+ros/jqpfiMUMb+4PP+YxoXuU930VEZmdR+1+uYJ/atGUzvY9z4PQsashd21z+8oP4mh3DPlj5YW4n1juvB40glLun2jlPmg3UU5+ewfNN4/IqIiKLlC/i6DTq7Cdy6FN79avQN7V336UQx1M4l4iIDP7/2XvzaEvK+tz/qao97zNPPTfdDXQDzdQgIKAiajSD0XvRKA6IcHNDBM0NeAX0RkL8iXFJhBWDYhKvEZU4Bodc0TgryCQIygxNz/Nw5rPnqvr90XDOfp63+pzTuPt0K9/PWr1Wf/dQw1tvvVV19vO8zwL26wwcs4rqc0WXP9DDvo+uPB+DzjzvSDbH/RkAivJaWvTs41Vuq0HJkdo+zH3p5/08FgFAWXT42/Zyf4xFv14aZC+KxDkgX3DzaGLR5uv9Cevu59YoFMcxyk0X2nqd71v03iisJ43RfN5ovkQg92cSj4WMOEOjrJs3oXk5cNyk6peQT8vHfV9zOJxVOuh3PNnvQO7xfNkIX7KuACCQZeYlLySV0r7DdaOuWUdJO6L37bLdTT4QtR5Ph/2iYRiGYRiGYRhGy7EHDcMwDMMwDMMwWo49aBiGYRiGYRiG0XJm79GIQXMgV2V+d/UpONkRAOIa67/aZM7kvg7W9A3uZv3omOhJRwL3Oeku8Tt0i/6uQ7wlRRHk1X3+wmhD8isS/BO6p4HOdyw+kYL7DapSnqudK8h2RXXWudZEAJqX7exsk3np65xJAgDjQ7ze0Q5uK68x1badcQx3pueDRxSFGBrfPllPjO6g98MyewSGxzm3AQCiCvsMOguiqR1ZS3Wxh/fQlwyDdM7V2HbUWW/sz2N9cXc/a4k7Ovm4bXpymGpPWnlwp9vnqw2eE37efPZcbN7K5+rePdxWcZrPuwFXAo1sVs5vOW+qkiWz/SnuX8U0L3TlycuddYyLb2PPEB+fdLapT89liMuzxHGMRm1KO9uoiZ5YTohCQYxrANIyT34gPoGMvK9zoasuP6q545Ef8nnbqPJn6nXRqw+x1vzMlx1L9RkveRHV9/zsUWed6zdyFsv8zaydzrbxudLZ2UN1TfTco6PcRwFgTLJzjj7uSKq7uth31tHNB2R4hPtk0lz1S49eRHWlxOdbqbZvu5L8NwebKIowNDjl0dC4JS/ka1/G474EADXJ1Jnfw/ux+KiTqV5x0mlUt3exJyMpY6CjjU/Oeb3s0cioBl7m6tfMAU9O9jBOaPuQ+3RN8hd80asXMnyOzOvk8/CMF3GfB4BsWxfV/+/HP6J607aNvEkRX28aMgb6AW8DAKTAx8yfwbMxl8RRhEqT76lR5v3zQvUhuMcpDLnTqo8glrEppfeRUsZZ92LViLUv8DrjGS4eofropL8ldT9FPWaaOqZnTSHF6yyk3W3sKPC5Wyhof5L7SPFw6Lkaa8AIXH+KemjSmak6k579HaD9omEYhmEYhmEYRsuxBw3DMAzDMAzDMFqOPWgYhmEYhmEYhtFyZu/RABA2zSMdy5zSnmi5MilXHxqXZY5e0boNFPk7v3r4Ear3buN50Bueu/m7RQs3KlkbBdERFkSTlpX9iDOqmXSfzVQ3mUqx9jIULdyoaGkbMu9zknYuo6sVj0Yk2+3LBNSRzI88PD7srCOIeZlZn/W4XjTV3lE0txrlKA5RHpvyZXgB94V0O8873akHFkB1Hfsl2vu5Tep9nDfhpVlHvrDneKq3bGWfCACMPM0+g+MWHUd1Wxu325LF3D/3buNtWPcYf7486uoigwJr1zN51s7OW8j7sWMLezqqkejhE0SoOg94RxfrRZcf2U317rWbqW7UWU86Osg6WgDYsZ019NVwmOrevq6p7TkEWuU4BiZKU32m3pD+0+BzsFZzt7GQ57YNQ/FYiLY3CHiMC8WTUdcxFUBpnM/jnVvZgzFPMgK6O7v4+6KTPuKEfqqHKlwDQCYluQViAav7vE2ZPNeheOFSWTcEYt4i9h4tW8F9sCb5DBp5VKvzuTMy6ma5FNvYV5PPyXYV9o3th0IqH/geFnRO+Rrr0nfqXhfV2SLXALBJTrtMJ/eFl77sVKp7JFej3lD9+syZT9o32t1bAyIl54CvWQtJE/jrwY7kmhpNl0cB516kq8PNB1l1JPvKHntyAdVbt7JHoyHboJ6gpKwYJ+JB/AKUojHHNqEYMaLG1HW2RzycKfEZVMVDBABxxAc/LT6VjNw7ZaTNwojfH1GjEoBcWjJ7ctzOtRpvZ6Mu90rSf9Wz4fQduD6iQDJVMinxzEr21TzJkunMu/e2uYx4RuW80muiXjv0vjTpGuqJFzgQ30fQdC6mAvNoGIZhGIZhGIZxCLEHDcMwDMMwDMMwWo49aBiGYRiGYRiG0XLsQcMwDMMwDMMwjJYzezO458FPT5lJ0uKH8bQOEhYt5rVwYpzqBe1sAOxN8+fTErjWEblmloqYwnypG2JYmhCjT1l9PmLcDhozG4F8MaCreSj2NKCISXuuySYt7ZmX/WqTR8aiJ23nePZcE19VQu/k8KDgTx2fOTeihTWUB5+YrIMsuxqr0qaZdjfIZ8HqhVTX69wGjSw3YjTCAX2ju9h0PT7MNQCUt3MfffiXT1Hd2yEhOmk2W7745XwOLFs+j+qeftdE3THApth8rwT5+Bxktmcrmxp3DXJQYZTd5KwDdQmXElNfpsC1x5uE9jYxkUZjUMbFxNwQA3EuN2XUnevJCPatM8LwSHm/74chn/elckK4Z8T7VJUxTQ182Rwfy0yGG3a8xJMgAEBdxqj2Hja2nnkOG36XLmNTq5/mbWzv4WDVk0/jCQ4AoJDhftvRwedOFbKfElToibExmxCmp0bZSo33vV7nsTqXZ2N3ezu3QyYrnRRAkOHtqlX5fJv8ziFwg6d9Hyv6pto1jLi/Dcu1rSQmfwA4upsnbTjy1JOoXrRoKdU1adMgEFN10obKi3quxrEEi6nZW/7+6Yb/umudydytRBrKJtuY1fRNAB0SkHbUUm6rZ9ato3rLIM+IEKdkXPbcwD416Pqy7zoJz1ziIYbXNKlMfw+P+f29vD9RlBAmCj7ndBxQ3OMkk5KU+BwAgHSWxyttw2qFt6sml9SZzN9JZnANVsykuQ/nMxJWreF7eR4/g4Qwag2C9uVc1Lb0fe1fMtFR0knirFa+09T/DmRCFvtFwzAMwzAMwzCMlmMPGoZhGIZhGIZhtBx70DAMwzAMwzAMo+UcQGCfBz819fEglmcUDZlL9GhIwIto59o81tu9TDT1I6LHe3ATB48BwB5JiamIprEqjohItjOSZ69Qvu+rGQWuXNf3p9dRBuKvkGw95BN0iwXR27WneKXtPrd/ryyiIBuZhht0k5HtjkNpyyY9eVKo4MEk8D3MbwqxKWUlJBGsf41T7jN0ppt14rUh1myXdvHnhx7noLPMOPspOqq9zjoaos2sxtxno5C1mEM7WWc+VufPr1jOgVrVunvcBjfzdvrjvCM5MfAsX8667HmLWMs+VHG167t3s6ciqnF7Bxk+HiedsYzfD4f4+0jwtzT4+HhyTJvDhA5BXhpieIgwpUtOSwAS5Bwdn3D9HKEIgifG2RcVSL/t7pLAJNF5I8FnkCvwdswX30Gxj81X+XYd82R8ingdqW5XW14UXXQ6xeusl3m//ZCPYEP8UqNjbpheVdpOfR0p2U8dorI52Y+0ux8TJdlOXzwxY5Vnlz33Wnnf99DXPnWu1mu8v+MlHhsKx7MXBwCW9LF3ZtUKDl/MyPXPl/CztJx46QQrjdob1MOY8vSaKp93rqeyTQmBfXo8YvEgShYt6vJCLMsM4O5YMc994cQTjqW6Kpr37995P9W7Rnis9xM07npvoCNdsy5+zsfAGGTOTOn5J3U67fok04GOV9MHKWqgqYZyJnk82jv4GhvJNdhzji3Xns/r9Jx7voSgO/XWaO18fvrve04/SArk4/FLAyHVo+F56uFICuxTD5be50+9n/T9/WG/aBiGYRiGYRiG0XLsQcMwDMMwDMMwjJZjDxqGYRiGYRiGYbScA8rRQKZZc8daOU/nFk65i240eC7hSFavnoAFLLXDa09aRPW8tOsTWLuT567eOcHrHGqwrqwSsa6tKrvR8ETLmaCd8wPRUUvt5GSInlSmP0cxwd+SlfVmJTeiI2BdYbd4OIoyL3Mu7a5DtbU6L32pKZsjaS7pg0kQ++hrTM0BX13AWuNdW4al3ukso1Fg/XWq1km1v5XbMDcowl7Ra6PB2wAAxaMkC+ZIbqdA1oldw1TuWMfbHQ6xl2FguXwfgC99OF/lXITBEfYBpEPOyeidx1kd83vcnISwspXqzVt5O/NtvN/d/dxWjQrrdVMq9gaAPeKnGuHjUa9MHY+5znF5bp21+tSKG3J+lMtcT0y4PpRsmueeD1JFqWWdkqlTbXCbVEN3DKzX+HirXj0rWS4Nj7XjNZlnPqzyOqoTbpZLLWAdtPpX9gyyb6inu4vqSA7onu27nXVUaryOvgWcDxOKhnlwlH1BGq7gJ4yz27eJl0jG6vDZbIAwod0POnGMuDHV9hXJ+MiLP2z1UZzzAAALu/k8zIse3ZmbX/XpUvoJJ6J+RfXqeq8QS9xCpF5B+XwjdK/BquWvh/ydiRofr/EKt11Z+ngYu32jLOdeKBr5BYuPoLq3ewPVe0c3U+20LQBPjEVerOPkoXCnTa3aa/LL6H1OJsPtkcu5HqiUtJn6dzQnQ49rLO8X0uwvBIC09OGGLMMTP6tGVqj3wBOPkG7zsy8yetpozpzjQxJ/RVJGhd57Op4MXcYM7/vueaQ5OYh13/2m/5tHwzAMwzAMwzCMQ4g9aBiGYRiGYRiG0XK8eJYamDhsIB5rmkZzpq8l/aqiU9BF+vPz9L8vNeTj1Zo71Wc91J9AeZlRrNN3TbsFCb95Oavc34v7ZaYfQ5N+knI+oz+9qSxA359hurWkZU63zty8RfB1es+DSBSFqIwPTtY6fW0oneM5iQPhyABkD+Un1siRR+hUb24r6iK9NK9Tp61ztlum+QxEYqTTnz67Vl6H/CQays/xgUhGHKlfwvTMjQafa87P0c5PvVLruZ4gG4jC6c/GVNNcmp2F+YlTGx5MwijEaGlq2tWZznqVAwEJ7TTD+KI/b8/0dSBhDEt4ZVqcn/113J55v3QM0/MxkP3SJYYN9/yNHemT9FttG52aXDUSCcwkiXquLXraexHGITKpzLSfbyVRHKNan9o+PS56WNxzct804fwZGTt+y2vZvmUe0CJmtcyZPqF9Q9G20XPT6eNJ63CWodccrkslliTWGyrFTZjC9ADaf2FvO1JBwvzCB4mw0cDQ3u1Nr2hfgtQzTwOruOPZ9McpcapZd6nTrnOmDjs3YrUZbr5m8x3n3QNf5oH0v/au3kT5aeJyZ/ugYRiGYRiGYRiGMVtMOmUYhmEYhmEYRsuxBw3DMAzDMAzDMFqOPWgYhmEYhmEYhtFy7EHDMAzDMAzDMIyW83v/oGFed8MwDMMwDGMusPtO5vf2QaNWq+Hv//7v8Z//+Z+HelMm2bJlC1atWoXbbrtt2s+94hWvwNVXX31A3zF+N2k+1klcffXVeMUrXvG8ln3BBRfgggsueL6bZvyeMFMfM4zDkdmMfbfddhtWrVqFLVu2zNFWGcb+GR0dxVVXXYX777//UG/KYcXv7YPGrl278LnPfc6Z//93gZtuugmXXnrpod4M4zDg0ksvxU033XSoN8MwDOOw4+Uvfzm+8pWvYGBg4FBvimHg8ccfxze/+U1ETkbcC5u5TbwyZsVxxx13qDfBOExYunTpod4EwzCMw5Kenh709PQc6s0wDGMaDstfNCqVCj7+8Y/j1a9+NY4//niccsopuOiii/D4448DSP5JtVlitGXLFrzyla8EALz//e+nz/7iF7/AW9/6Vpx66qk444wz8N73vhfbt0+lXd5222044YQT8MADD+ANb3gDTjjhBLzmNa/Bj3/8Y6xbtw4XXnghTjrpJPzBH/wBvvOd79A2bNiwAX/1V3+Fs88+GyeffDIuuOACPPDAA87+7dy5E5dccglOPPFEnHPOOfjEJz6BsClpeSapw7Zt23DFFVfg9NNPx0knnYQLL7wQjz322AG0sHE4Ua/X8eEPfxinnXYaTjvtNFx11VUYHNyXgq59/RWveAU+8pGP4MILL8Qpp5yCa665BsC+PvHud78bp556Ks4++2z827/92yHZF+PwpF6v42Mf+9jk2HTxxRdj48aNk+/PZlw87rjj8LWvfQ0veclL8LKXvQxPP/00Nm/ejHe9610444wzcNJJJ+HNb34zfvazn9G6n3rqKVxyySU45ZRTcMopp+Cyyy7D5s2b52zfjcOXRx99FBdeeCFOPfVUrFmzBu985zvx61//mj5z22234TWveQ1OOOEEvO51r8PPf/5zeq9ZOnX11VfjggsuwNe//nWce+65WLNmDd7xjnfY9dGYFXEc49Zbb8Wf/Mmf4MQTT8Qf/MEf4F//9V8nPRdf+9rXcN555+Hkk0/GiSeeiNe//vW4/fbbAQD33nsv3vGOdwAA3vGOd5hsuYnD8kHjyiuvxNe//nX8xV/8BT772c/i6quvxlNPPYXLL798ViabgYGBSbnJu971rsn/f+tb38LFF1+MefPm4YYbbsD73/9+PPjgg3jzm9+MvXv3Tn6/0WjgiiuuwPnnn49PfepTyGaz+N//+3/jL//yL/Hyl78c//iP/4j+/n5cddVV2LFjBwBg7dq1OO+887B582b8zd/8Df7hH/4BnufhwgsvxH333Ufb90//9E/o6enBJz/5SbzhDW/Apz/9aXziE5+YVdsMDg7i/PPPx6OPPooPfvCD+PjHP44oivC2t70NzzzzzKyWYRxefPe738UjjzyCj370o7jyyivx05/+dFrp3K233opVq1bhn/7pn/D6178epVIJb3/72/HEE0/gQx/6EK655hp87Wtfw4MPPjiHe2Ecztx+++14+umn8dGPfhTXXHMNHn74YVx++eUAZj8uhmGIT3/60/jwhz+Mv/7rv8aKFStwySWXoFQq4WMf+xg+9alPoaurC5deeunkQ8z69etx/vnnY+/evfjoRz+K6667Dps3b8Zb3vIWWrbxwmN8fBx//ud/ju7ubnziE5/AjTfeiHK5jP/xP/4HxsbGAADbt2/Hv/zLv+B//a//hU984hOI4xjvec97pu07jz/+OG688Ua8+93vxvXXX4/h4WFccMEF2Llz51ztmvE7yg033IDrrrsO55xzDm6++Wb82Z/9GW688UZ86lOfwq233oprrrkGr3zlK/HP//zPuP7665FOp/G+970P27Ztw+rVqyf/8HfNNdfgb//2bw/x3hw+HHbSqVqthomJCXzwgx/EH//xHwMATj/9dExMTOCjH/0odu/ePeMyMpkMjj32WAD7pCfHHXccoijC9ddfj7POOgs33njj5GdPOeUU/PEf/zE++9nP4n3vex8AIIoi/OVf/iX+7M/+DMA+g88VV1yBCy+8EBdddBEAoK+vD294wxvwyCOPYP78+bjpppuQTqfx+c9/Hu3t7QD26Udf+9rX4vrrr8fXvva1yXWeeeaZ+Pu//3sAwEtf+lKMj4/j85//PC6++GJ0dnZOu2+33HILhoeH8aUvfQmLFi0CALzsZS/DH//xH+Mf//EfZ/3AYhw+dHR04DOf+Qza2toAAN3d3bjssstw5513Jn5+YGAAV199NXx/398Jbr31Vmzbtg3f+ta3sGrVKgCY/GuMYQDAvHnz8KlPfQrpdBoAsHHjRnz605/G+Pj4rMdFAJN/bAGA3bt345lnnsFf/uVf4pxzzgGwr9/ddNNNqFarAPb5zXK5HD73uc9N9u8zzzwTr3rVq/CZz3wGV1111VzsvnEYsnbtWgwODuKCCy7AqaeeCgBYsWIFvvzlL2N8fBzAvmvxJz/5SRx55JEAgGw2i4suuggPPfTQpGpBGRsbw80334zTTjsNwL4++apXvQqf+9znrL8Z+2V0dBT/9m//hgsuuABXXnklAODss8/G4OAgHnjgAaxcuRIXX3wxLrvsssnvLF68GOeddx5+9atf4bWvfS2O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y8bvP9b/jMOZc845B21tbZP1K17xCqTT6f32kSOPPBK+PyXIuP/++7FkyRKsWrVq8rUFCxbM+q/Txgub5n4zW+6//34sXrwYxxxzzORr2WwW3/3ud+lzP/nJT/D444/j1FNPxZvf/Obfelt/F3nBPWg858Xo6emh1/v7+yf/Pzw8jNtvvx2333678/3nvjc8PIzdu3dj9erVievZvXv35INGX19fS7bd+N2lUChQ/dxFMggCAMl9pK+vD4899hi91tvbO/l/z/Pw2c9+FjfffDN+8IMf4Bvf+AbS6TRe9apX4dprr0VXV9es+rLx+4/1P+NwRvuf7/vo6urC6OjorD4/MjKS2J/6+/uxZ8+e1m2o8XtJ87g2W4aHh2f1vUcffRTnnnsufvKTn+DHP/7x856q+XeZF9yDRnd3N4B9Jp4VK1ZMvj48PDz5//b2dpx11lm46KKLnO+nUqnJzyxbtgz/8A//kLiexYsXt3Crjd9Xurq6ACDxYrh79+7J/ro/5s2bh2uvvRZ/+7d/iyeeeALf+9738K//+q/o7OzE3/3d382qLxsvXKz/GYcD+kARhiGGhobQ29uLnTt3zvj97u5umtzgOZqv64YxWzzPQxiG9FqpVKK6vb09MXftwQcfRFtbG44++mgAwJvf/Gb83d/9Hd72trfh2muvxemnn06/3r0QeMGZwdesWYNcLofvfe979PpPfvKTyf+ffvrpWLt2LY499liccMIJOOGEE3D88cfjc5/7HH7wgx9Mfmb79u3o7e2d/MwJJ5yAu+++G5/5zGcm/1JoGNORyWTQ39+P//zP/6TXN2/ejIceeginnHLKfr/74IMP4qyzzsJvfvMbeJ6HY489FpdffjlWrlyJHTt2AJhdXzZeuFj/Mw4H7rrrLpIg/9d//RcajQbOOOOMWX3/xS9+MbZs2YKHH3548rXBwUE89NBDrd5U43ecZsnd/igWixgaGkK1Wp187Ve/+hV95kUvehE2b96MJ598cvK1Wq2G97znPfjqV786+Vp/fz88z8O1116LwcFBXH/99S3Yi98tXnAPGsViEZdeein+/d//Hf/wD/+AO++8E9dddx09aFx66aXYtGkTLrnkEvzwhz/EHXfcgfe85z34zne+M6nHO++887Bw4UJcdNFF+MY3voF77rkHN9xwA2688UYMDAyQHtow9ofnebjiiitw11134fLLL8fPfvYzfPOb38RFF12Ezs7OxL8EP8dxxx2HXC6HK6+8Et/5zndw77334sYbb8Tjjz+O17zmNQBm15eNFy7W/4zDgT179uA973kP7rrrLvz7v/87rrnmGpx99tk488wzZ/X917/+9Vi5ciXe/e5345vf/CZ++MMf4n/+z/+JKIoO8pYbv2t0dHRg/fr1uPvuu/crzTv33HNRrVbxgQ98APfccw++8IUv4J//+Z/pD8jnnXcelixZgne961341re+hTvuuAN/9Vd/hUqlkphGv3LlSlx44YX4yle+gl/+8pcHbf8OR16Qv11fcsklKBQKuOWWW3DLLbdgzZo1uOqqq3DttdcCAI455hjceuutuPHGG3HllVcijmOsXLkSn/zkJydN5IVCAbfeeis+/vGP4/rrr8fY2BgWLVqE9773vbj44osP4d4Zv2ucd955KBaL+Od//mdcdtllaGtrw0tf+lJcccUV5B1SstksPvvZz+LjH/84rrvuOoyOjmLZsmX40Ic+hPPOOw/A7Pqy8cLG+p9xqHnTm96ESqWCyy67DJlMBn/6p3+K973vffA8b1bfz2QyuOWWW/CRj3wE1113HTzPw5ve9CYsWbLEplE2iLe97W145JFH8D//5//E3//93yd+5uyzz8ZVV12FL3zhC/j+97+P1atX46abbsL5558/+Zm2tjZ88YtfxMc+9jFcd911aDQaOOmkk/CFL3xhvyGT7373u/Hd734Xf/M3f4Nvf/vbyGazB2UfDze8OI7jQ70RhmEYhmEYhmH8fvGCk04ZhmEYhmEYhnHwsQcNwzAMwzAMwzBajj1oGIZhGIZhGIbRcuxBwzAMwzAMwzCMlmMPGoZhGIZhGIZhtBx70DAMwzAMwzAMo+XYg4ZhGIZhGIZhGC1n1oF9YRRjsBQezG2BRvPECa8Y+zjULdFbCBD4swtTagVxHM+Q8upNW+7npelpye5501Qz87yO828ZjTOrb//WHXDmBehuxE3fSQXBrMO8WkUYhhgaGpys0yn+O41uTxi5+1ir1aluNHhMdWKNZtjHpHedwz9DM83cirMZh1t9LNx1zNytp/9AKyOjFixYgEajgVwu17JlzkQURahVqlMvPI8md79yYJ1jNqv8bVv5wPvjjKfJATMX11cvYSUHst50JgNvDq/B9Xod27Ztm6yDQMY/2XodHwEg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O+5As9mcj3/wgx+g2WwuekOB888/H/v27cMDDzww/7epqSncf//9na6qcYKxfv16DA0N4e///u/p73v37sX999+Ps88+GwCwfft2/PSnP6V1++GHH8a+ffuWtL4vRE64B42enh489dRT2LFjx7P+LPuqV70KtVoNH/rQh/Dzn/8cX/3qV/G5z32OFtHLL78cq1evxn/5L/8Ft956K26//Xb8wR/8AarVauS2jps2bcLv/d7v4W/+5m9w1113HbPzM17YWP8zXqj09/fjrW99K77yla/gU5/6FHbs2IH/83/+D772ta/hmmuuwcqVK3HLLbfgBz/4AXbs2IEbbrgBn/zkJwFg3k23u7sbAPDjH/8YjzzyyHE7F+PFxcTEBN773vfijjvuwF/91V/h+uuvx0UXXYQLLrhgUZ9/3eteh02bNuHqq6/Gd77zHfzwhz/EO97xjvkHYMN4vvi+j/e///2444478L73vQ8/+clP8J3vfAdvf/vb0dvbi7e//e0AgHe/+92YnZ3F7//+7+NHP/oRbr31Vlx11VXwPA+e5x3nszi+nHAPGm9+85uRSCTwjne8A9VqNfI9F110Ea699lrce++9eMc73oH/+3//L2688Ua60evq6sLXvvY1bNu2DR/96Efxh3/4h6jVavjqV7/6rAZDV199NVasWIH//t//Oz31GicO1v+MFzIf/OAH8YEPfADf//738c53vhPf/va38aEPfQhXXnkl/uIv/gLLli3Dddddhz/6oz/C/fffj5tuugkbNmzA3XffDQA4+eSTcdlll+GWW27Bf/2v//U4n43xYuGNb3wjBgcHcdVVV+Ezn/kMfvM3fxM33njjom/Qkskkbr75Zmzfvh0f/ehH8aEPfQgXXHABXvWqVx3jmhsnApdffjk++9nPYvfu3bjqqqvwp3/6p9i2bRu++c1vzmsw1q5diy9+8Yuo1Wr4gz/4A3zqU5/CO97xDgwNDSGXyx3nMzi+eKGp+AzDMAzDMAzjebFjxw4kEgmce+6583+bmZnBRRddhGuuuWbezPRExLa3NQzDMAzDMIznyYMPPojPfvazeP/734/TTz8d09PT+NKXvoTu7m5cdtllx7t6xxV70DAMwzAMwzCM58mVV16Jer2Ov/7rv8bo6Ciy2Sxe9rKX4eMf//izbhl+omCpU4ZhGIZhGIZhdJwTTgxuGIZh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\n",
|
||
"text/plain": [
|
||
"<Figure size 1000x1000 with 25 Axes>"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"class_names = ['airplane', 'automobile', 'bird', 'cat', 'deer',\n",
|
||
" 'dog', 'frog', 'horse', 'ship', 'truck']\n",
|
||
"plt.figure(figsize=(10,10))\n",
|
||
"for i in range(25):\n",
|
||
" plt.subplot(5,5,i+1)\n",
|
||
" plt.xticks([])\n",
|
||
" plt.yticks([])\n",
|
||
" plt.grid(False)\n",
|
||
" plt.imshow(train_images[i], cmap=plt.cm.binary)\n",
|
||
" # The CIFAR labels happen to be arrays, \n",
|
||
" # which is why you need the extra index\n",
|
||
" plt.xlabel(class_names[train_labels[i][0]])\n",
|
||
"plt.show()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "f069982f",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Set up the model\n",
|
||
"\n",
|
||
"The 6 lines of code below define the convolutional base using a common pattern: a stack of Conv2D and MaxPooling2D layers.\n",
|
||
"\n",
|
||
"As input, a CNN takes tensors of shape (image_height, image_width, color_channels), ignoring the batch size. If you are new to these dimensions, color_channels refers to (R,G,B). In this example, you will configure our CNN to process inputs of shape (32, 32, 3), which is the format of CIFAR images. You can do this by passing the argument input_shape to our first layer."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 10,
|
||
"id": "c125df30",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Model: \"sequential_49\"\n",
|
||
"_________________________________________________________________\n",
|
||
" Layer (type) Output Shape Param # \n",
|
||
"=================================================================\n",
|
||
" conv2d_49 (Conv2D) (None, 30, 30, 32) 896 \n",
|
||
" \n",
|
||
" max_pooling2d_49 (MaxPoolin (None, 15, 15, 32) 0 \n",
|
||
" g2D) \n",
|
||
" \n",
|
||
" conv2d_50 (Conv2D) (None, 13, 13, 64) 18496 \n",
|
||
" \n",
|
||
" max_pooling2d_50 (MaxPoolin (None, 6, 6, 64) 0 \n",
|
||
" g2D) \n",
|
||
" \n",
|
||
" conv2d_51 (Conv2D) (None, 4, 4, 64) 36928 \n",
|
||
" \n",
|
||
"=================================================================\n",
|
||
"Total params: 56,320\n",
|
||
"Trainable params: 56,320\n",
|
||
"Non-trainable params: 0\n",
|
||
"_________________________________________________________________\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"model = models.Sequential()\n",
|
||
"model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3)))\n",
|
||
"model.add(layers.MaxPooling2D((2, 2)))\n",
|
||
"model.add(layers.Conv2D(64, (3, 3), activation='relu'))\n",
|
||
"model.add(layers.MaxPooling2D((2, 2)))\n",
|
||
"model.add(layers.Conv2D(64, (3, 3), activation='relu'))\n",
|
||
"\n",
|
||
"# Let's display the architecture of our model so far.\n",
|
||
"\n",
|
||
"model.summary()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "77ee1873",
|
||
"metadata": {},
|
||
"source": [
|
||
"You can see that the output of every Conv2D and MaxPooling2D layer is a 3D tensor of shape (height, width, channels). The width and height dimensions tend to shrink as you go deeper in the network. The number of output channels for each Conv2D layer is controlled by the first argument (e.g., 32 or 64). Typically, as the width and height shrink, you can afford (computationally) to add more output channels in each Conv2D layer."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "a1c381c9",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Add Dense layers on top\n",
|
||
"\n",
|
||
"To complete our model, you will feed the last output tensor from the\n",
|
||
"convolutional base (of shape (4, 4, 64)) into one or more Dense layers\n",
|
||
"to perform classification. Dense layers take vectors as input (which\n",
|
||
"are 1D), while the current output is a 3D tensor. First, you will\n",
|
||
"flatten (or unroll) the 3D output to 1D, then add one or more Dense\n",
|
||
"layers on top. CIFAR has 10 output classes, so you use a final Dense\n",
|
||
"layer with 10 outputs and a softmax activation."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 12,
|
||
"id": "f0dbe0cd",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Model: \"sequential_49\"\n",
|
||
"_________________________________________________________________\n",
|
||
" Layer (type) Output Shape Param # \n",
|
||
"=================================================================\n",
|
||
" conv2d_49 (Conv2D) (None, 30, 30, 32) 896 \n",
|
||
" \n",
|
||
" max_pooling2d_49 (MaxPoolin (None, 15, 15, 32) 0 \n",
|
||
" g2D) \n",
|
||
" \n",
|
||
" conv2d_50 (Conv2D) (None, 13, 13, 64) 18496 \n",
|
||
" \n",
|
||
" max_pooling2d_50 (MaxPoolin (None, 6, 6, 64) 0 \n",
|
||
" g2D) \n",
|
||
" \n",
|
||
" conv2d_51 (Conv2D) (None, 4, 4, 64) 36928 \n",
|
||
" \n",
|
||
" flatten_49 (Flatten) (None, 1024) 0 \n",
|
||
" \n",
|
||
" dense_98 (Dense) (None, 64) 65600 \n",
|
||
" \n",
|
||
" dense_99 (Dense) (None, 10) 650 \n",
|
||
" \n",
|
||
"=================================================================\n",
|
||
"Total params: 122,570\n",
|
||
"Trainable params: 122,570\n",
|
||
"Non-trainable params: 0\n",
|
||
"_________________________________________________________________\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"model.add(layers.Flatten())\n",
|
||
"model.add(layers.Dense(64, activation='relu'))\n",
|
||
"model.add(layers.Dense(10))\n",
|
||
"# Here's the complete architecture of our model.\n",
|
||
"\n",
|
||
"model.summary()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "07b30e11",
|
||
"metadata": {},
|
||
"source": [
|
||
"As you can see, our (4, 4, 64) outputs were flattened into vectors of shape (1024) before going through two Dense layers."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "7398c3e5",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Compile and train the model"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 13,
|
||
"id": "233a4813",
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Epoch 1/10\n",
|
||
"1563/1563 [==============================] - 20s 11ms/step - loss: 1.5702 - accuracy: 0.4238 - val_loss: 1.2847 - val_accuracy: 0.5375\n",
|
||
"Epoch 2/10\n",
|
||
"1563/1563 [==============================] - 17s 11ms/step - loss: 1.1986 - accuracy: 0.5762 - val_loss: 1.1051 - val_accuracy: 0.6080\n",
|
||
"Epoch 3/10\n",
|
||
"1563/1563 [==============================] - 15s 10ms/step - loss: 1.0401 - accuracy: 0.6337 - val_loss: 1.0155 - val_accuracy: 0.6432\n",
|
||
"Epoch 4/10\n",
|
||
"1563/1563 [==============================] - 16s 10ms/step - loss: 0.9467 - accuracy: 0.6684 - val_loss: 0.9573 - val_accuracy: 0.6644\n",
|
||
"Epoch 5/10\n",
|
||
"1563/1563 [==============================] - 15s 9ms/step - loss: 0.8787 - accuracy: 0.6909 - val_loss: 0.9499 - val_accuracy: 0.6741\n",
|
||
"Epoch 6/10\n",
|
||
"1563/1563 [==============================] - 15s 9ms/step - loss: 0.8250 - accuracy: 0.7108 - val_loss: 0.8924 - val_accuracy: 0.6851\n",
|
||
"Epoch 7/10\n",
|
||
"1563/1563 [==============================] - 15s 9ms/step - loss: 0.7807 - accuracy: 0.7246 - val_loss: 0.8970 - val_accuracy: 0.6846\n",
|
||
"Epoch 8/10\n",
|
||
"1563/1563 [==============================] - 17s 11ms/step - loss: 0.7421 - accuracy: 0.7367 - val_loss: 0.8826 - val_accuracy: 0.6959\n",
|
||
"Epoch 9/10\n",
|
||
"1563/1563 [==============================] - 15s 10ms/step - loss: 0.7116 - accuracy: 0.7490 - val_loss: 0.8979 - val_accuracy: 0.7012\n",
|
||
"Epoch 10/10\n",
|
||
"1563/1563 [==============================] - 15s 10ms/step - loss: 0.6759 - accuracy: 0.7609 - val_loss: 0.8912 - val_accuracy: 0.7006\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"model.compile(optimizer='adam',\n",
|
||
" loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),\n",
|
||
" metrics=['accuracy'])\n",
|
||
"\n",
|
||
"history = model.fit(train_images, train_labels, epochs=10, \n",
|
||
" validation_data=(test_images, test_labels))"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"id": "5d4daa27",
|
||
"metadata": {},
|
||
"source": [
|
||
"## Finally, evaluate the model"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 23,
|
||
"id": "be679d5f",
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"plt.plot(history.history['accuracy'], label='accuracy')\n",
|
||
"plt.plot(history.history['val_accuracy'], label = 'val_accuracy')\n",
|
||
"plt.xlabel('Epoch')\n",
|
||
"plt.ylabel('Accuracy')\n",
|
||
"plt.ylim([0.5, 1])\n",
|
||
"plt.legend(loc='lower right')\n",
|
||
"\n",
|
||
"test_loss, test_acc = model.evaluate(test_images, test_labels, verbose=2)\n",
|
||
"\n",
|
||
"print(test_acc)"
|
||
]
|
||
}
|
||
],
|
||
"metadata": {
|
||
"kernelspec": {
|
||
"display_name": "Python 3 (ipykernel)",
|
||
"language": "python",
|
||
"name": "python3"
|
||
},
|
||
"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.9.16"
|
||
}
|
||
},
|
||
"nbformat": 4,
|
||
"nbformat_minor": 5
|
||
}
|