diff --git a/doc/pub/week42/html/._week42-bs001.html b/doc/pub/week42/html/._week42-bs001.html
index 03786cf02..9f139a758 100644
--- a/doc/pub/week42/html/._week42-bs001.html
+++ b/doc/pub/week42/html/._week42-bs001.html
@@ -296,6 +296,7 @@ MathJax.Hub.Config({
Readings and Videos:
- These lecture notes
+ - Video of lecture
- Aurelien Geron's chapters 10-11
- For a more in depth discussion on neural networks we recommend Goodfellow et al chapters 6 and 7.
- Neural Networks demystified
diff --git a/doc/pub/week42/html/week42-reveal.html b/doc/pub/week42/html/week42-reveal.html
index d92545289..030e01fc9 100644
--- a/doc/pub/week42/html/week42-reveal.html
+++ b/doc/pub/week42/html/week42-reveal.html
@@ -223,6 +223,8 @@ MathJax.Hub.Config({
- These lecture notes
+- Video of lecture
+
- Aurelien Geron's chapters 10-11
- For a more in depth discussion on neural networks we recommend Goodfellow et al chapters 6 and 7.
diff --git a/doc/pub/week42/html/week42-solarized.html b/doc/pub/week42/html/week42-solarized.html
index 87bc0bb33..9b724dbff 100644
--- a/doc/pub/week42/html/week42-solarized.html
+++ b/doc/pub/week42/html/week42-solarized.html
@@ -268,6 +268,7 @@ MathJax.Hub.Config({
- Readings and Videos:
- These lecture notes
+ - Video of lecture
- Aurelien Geron's chapters 10-11
- For a more in depth discussion on neural networks we recommend Goodfellow et al chapters 6 and 7.
- Neural Networks demystified
diff --git a/doc/pub/week42/html/week42.html b/doc/pub/week42/html/week42.html
index a08c937c1..09e04ef07 100644
--- a/doc/pub/week42/html/week42.html
+++ b/doc/pub/week42/html/week42.html
@@ -345,6 +345,7 @@ MathJax.Hub.Config({
- Readings and Videos:
- These lecture notes
+ - Video of lecture
- Aurelien Geron's chapters 10-11
- For a more in depth discussion on neural networks we recommend Goodfellow et al chapters 6 and 7.
- Neural Networks demystified
diff --git a/doc/pub/week42/ipynb/ipynb-week42-src.tar.gz b/doc/pub/week42/ipynb/ipynb-week42-src.tar.gz
index aad24838a..7bc3d65c1 100644
Binary files a/doc/pub/week42/ipynb/ipynb-week42-src.tar.gz and b/doc/pub/week42/ipynb/ipynb-week42-src.tar.gz differ
diff --git a/doc/pub/week42/ipynb/week42.ipynb b/doc/pub/week42/ipynb/week42.ipynb
index 1394920ca..bc386ef88 100644
--- a/doc/pub/week42/ipynb/week42.ipynb
+++ b/doc/pub/week42/ipynb/week42.ipynb
@@ -2,8 +2,10 @@
"cells": [
{
"cell_type": "markdown",
- "id": "50ce4eae",
- "metadata": {},
+ "id": "6450d25c",
+ "metadata": {
+ "editable": true
+ },
"source": [
"\n",
@@ -12,8 +14,10 @@
},
{
"cell_type": "markdown",
- "id": "f46bd6b4",
- "metadata": {},
+ "id": "2a438c63",
+ "metadata": {
+ "editable": true
+ },
"source": [
"# Week 42 Constructing a Neural Network code with introduction to Tensor flow\n",
"**Morten Hjorth-Jensen**, Department of Physics, University of Oslo and Department of Physics and Astronomy and Facility for Rare Isotope Beams, Michigan State University\n",
@@ -23,8 +27,10 @@
},
{
"cell_type": "markdown",
- "id": "8c0fa4d7",
- "metadata": {},
+ "id": "247eeef1",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Plan for week 42\n",
"\n",
@@ -46,6 +52,8 @@
"\n",
" * These lecture notes\n",
"\n",
+ " * [Video of lecture](https://youtu.be/0q5-PhovchQ)\n",
+ "\n",
" * [Aurelien Geron's chapters 10-11](https://github.com/CompPhysics/MachineLearning/blob/master/doc/Textbooks/TensorflowML.pdf)\n",
"\n",
" * For a more in depth discussion on neural networks we recommend Goodfellow et al chapters 6 and 7. \n",
@@ -63,16 +71,20 @@
},
{
"cell_type": "markdown",
- "id": "89b6b637",
- "metadata": {},
+ "id": "4e111b7c",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Lecture Thursday October 19"
]
},
{
"cell_type": "markdown",
- "id": "3a32ad82",
- "metadata": {},
+ "id": "352b28bc",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Review of the back propagation algorithm\n",
"\n",
@@ -84,8 +96,10 @@
},
{
"cell_type": "markdown",
- "id": "4f9291ee",
- "metadata": {},
+ "id": "a1524345",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Setting up the Back propagation algorithm\n",
"\n",
@@ -105,8 +119,10 @@
},
{
"cell_type": "markdown",
- "id": "7753981f",
- "metadata": {},
+ "id": "63f6ef16",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\delta_j^L = f'(z_j^L)\\frac{\\partial {\\cal C}}{\\partial (a_j^L)}.\n",
@@ -115,16 +131,20 @@
},
{
"cell_type": "markdown",
- "id": "8b093c71",
- "metadata": {},
+ "id": "4e197d24",
+ "metadata": {
+ "editable": true
+ },
"source": [
"Then we compute the back propagate error for each $l=L-1,L-2,\\dots,2$ as"
]
},
{
"cell_type": "markdown",
- "id": "96ca25bd",
- "metadata": {},
+ "id": "25fc6ecd",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\delta_j^l = \\sum_k \\delta_k^{l+1}w_{kj}^{l+1}f'(z_j^l).\n",
@@ -133,16 +153,20 @@
},
{
"cell_type": "markdown",
- "id": "a156d8bd",
- "metadata": {},
+ "id": "08005b37",
+ "metadata": {
+ "editable": true
+ },
"source": [
"Finally, we update the weights and the biases using gradient descent for each $l=L-1,L-2,\\dots,2$ and update the weights and biases according to the rules"
]
},
{
"cell_type": "markdown",
- "id": "f35c8afe",
- "metadata": {},
+ "id": "fcfb91d8",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"w_{jk}^l\\leftarrow = w_{jk}^l- \\eta \\delta_j^la_k^{l-1},\n",
@@ -151,8 +175,10 @@
},
{
"cell_type": "markdown",
- "id": "ffa6d322",
- "metadata": {},
+ "id": "6ae81f69",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"b_j^l \\leftarrow b_j^l-\\eta \\frac{\\partial {\\cal C}}{\\partial b_j^l}=b_j^l-\\eta \\delta_j^l,\n",
@@ -161,8 +187,10 @@
},
{
"cell_type": "markdown",
- "id": "7b6e59f6",
- "metadata": {},
+ "id": "405a2bd3",
+ "metadata": {
+ "editable": true
+ },
"source": [
"The parameter $\\eta$ is the learning parameter discussed in connection with the gradient descent methods.\n",
"Here it is convenient to use stochastic gradient descent (see the examples below) with mini-batches with an outer loop that steps through multiple epochs of training."
@@ -170,8 +198,10 @@
},
{
"cell_type": "markdown",
- "id": "e93ff00c",
- "metadata": {},
+ "id": "5ea667d5",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Setting up a Multi-layer perceptron model for classification\n",
"\n",
@@ -196,8 +226,10 @@
},
{
"cell_type": "markdown",
- "id": "3c437395",
- "metadata": {},
+ "id": "34e82f43",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"P(y = 0 \\mid \\boldsymbol{x}, \\boldsymbol{\\theta}) = \\frac{1}{1 + \\exp{(- \\boldsymbol{x}})} ,\n",
@@ -206,16 +238,20 @@
},
{
"cell_type": "markdown",
- "id": "3d7b1140",
- "metadata": {},
+ "id": "66741650",
+ "metadata": {
+ "editable": true
+ },
"source": [
"and"
]
},
{
"cell_type": "markdown",
- "id": "e3df5aec",
- "metadata": {},
+ "id": "a8853a67",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"P(y = 1 \\mid \\boldsymbol{x}, \\boldsymbol{\\theta}) = 1 - P(y = 0 \\mid \\boldsymbol{x}, \\boldsymbol{\\theta}) ,\n",
@@ -224,8 +260,10 @@
},
{
"cell_type": "markdown",
- "id": "63345646",
- "metadata": {},
+ "id": "5bd4bbc9",
+ "metadata": {
+ "editable": true
+ },
"source": [
"where $y \\in \\{0, 1\\}$ and $\\boldsymbol{\\theta}$ represents the weights and biases\n",
"of our network."
@@ -233,8 +271,10 @@
},
{
"cell_type": "markdown",
- "id": "6ac465b3",
- "metadata": {},
+ "id": "25080b35",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Defining the cost function\n",
"\n",
@@ -243,8 +283,10 @@
},
{
"cell_type": "markdown",
- "id": "cf06b4a0",
- "metadata": {},
+ "id": "85ff70e2",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\mathcal{C}(\\boldsymbol{\\theta}) = - \\ln P(\\mathcal{D} \\mid \\boldsymbol{\\theta}) = - \\sum_{i=1}^n\n",
@@ -254,8 +296,10 @@
},
{
"cell_type": "markdown",
- "id": "719f761f",
- "metadata": {},
+ "id": "4928fb35",
+ "metadata": {
+ "editable": true
+ },
"source": [
"This last equality means that we can interpret our *cost* function as a sum over the *loss* function\n",
"for each point in the dataset $\\mathcal{L}_i(\\boldsymbol{\\theta})$. \n",
@@ -277,8 +321,10 @@
},
{
"cell_type": "markdown",
- "id": "342de1d9",
- "metadata": {},
+ "id": "84914d0b",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"P(y_{ic} = 1 \\mid \\boldsymbol{x}_i, \\boldsymbol{\\theta}) = \\frac{\\exp{((\\boldsymbol{a}_i^{hidden})^T \\boldsymbol{w}_c)}}\n",
@@ -288,8 +334,10 @@
},
{
"cell_type": "markdown",
- "id": "211a69ba",
- "metadata": {},
+ "id": "a830cfb8",
+ "metadata": {
+ "editable": true
+ },
"source": [
"which reduces to the logistic function in the binary case. \n",
"The likelihood of this $C$-class classifier\n",
@@ -298,8 +346,10 @@
},
{
"cell_type": "markdown",
- "id": "5f0cd5a2",
- "metadata": {},
+ "id": "44efa9b2",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"P(\\mathcal{D} \\mid \\boldsymbol{\\theta}) = \\prod_{i=1}^n \\prod_{c=0}^{C-1} [P(y_{ic} = 1)]^{y_{ic}} .\n",
@@ -308,16 +358,20 @@
},
{
"cell_type": "markdown",
- "id": "fe018e32",
- "metadata": {},
+ "id": "52f18bf4",
+ "metadata": {
+ "editable": true
+ },
"source": [
"Again we take the negative log-likelihood to define our cost function:"
]
},
{
"cell_type": "markdown",
- "id": "9d48faca",
- "metadata": {},
+ "id": "1d177c5d",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\mathcal{C}(\\boldsymbol{\\theta}) = - \\log{P(\\mathcal{D} \\mid \\boldsymbol{\\theta})}.\n",
@@ -326,8 +380,10 @@
},
{
"cell_type": "markdown",
- "id": "897c8b0c",
- "metadata": {},
+ "id": "e3c0d631",
+ "metadata": {
+ "editable": true
+ },
"source": [
"See the logistic regression lectures for a full definition of the cost function.\n",
"\n",
@@ -336,8 +392,10 @@
},
{
"cell_type": "markdown",
- "id": "68347a7f",
- "metadata": {},
+ "id": "374f6782",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Example: binary classification problem\n",
"\n",
@@ -346,8 +404,10 @@
},
{
"cell_type": "markdown",
- "id": "8425d868",
- "metadata": {},
+ "id": "e286888d",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\mathcal{C}(\\boldsymbol{\\beta}) = - \\sum_{i=1}^n \\left(y_i\\log{p(y_i \\vert x_i,\\boldsymbol{\\beta})}+(1-y_i)\\log{1-p(y_i \\vert x_i,\\boldsymbol{\\beta})}\\right),\n",
@@ -356,16 +416,20 @@
},
{
"cell_type": "markdown",
- "id": "9108d4ac",
- "metadata": {},
+ "id": "43927182",
+ "metadata": {
+ "editable": true
+ },
"source": [
"where we had defined the logistic (sigmoid) function"
]
},
{
"cell_type": "markdown",
- "id": "77e0ec3b",
- "metadata": {},
+ "id": "31ab96db",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"p(y_i =1\\vert x_i,\\boldsymbol{\\beta})=\\frac{\\exp{(\\beta_0+\\beta_1 x_i)}}{1+\\exp{(\\beta_0+\\beta_1 x_i)}},\n",
@@ -374,16 +438,20 @@
},
{
"cell_type": "markdown",
- "id": "64ed867c",
- "metadata": {},
+ "id": "e42e36aa",
+ "metadata": {
+ "editable": true
+ },
"source": [
"and"
]
},
{
"cell_type": "markdown",
- "id": "51819578",
- "metadata": {},
+ "id": "ed96b765",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"p(y_i =0\\vert x_i,\\boldsymbol{\\beta})=1-p(y_i =1\\vert x_i,\\boldsymbol{\\beta}).\n",
@@ -392,8 +460,10 @@
},
{
"cell_type": "markdown",
- "id": "db6532a5",
- "metadata": {},
+ "id": "0ddc0d23",
+ "metadata": {
+ "editable": true
+ },
"source": [
"The parameters $\\boldsymbol{\\beta}$ were defined using a minimization method like gradient descent or Newton-Raphson's method. \n",
"\n",
@@ -403,8 +473,10 @@
},
{
"cell_type": "markdown",
- "id": "24e5e213",
- "metadata": {},
+ "id": "a1b4b635",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"a_i^l = y_i = \\frac{\\exp{(z_i^l)}}{1+\\exp{(z_i^l)}},\n",
@@ -413,16 +485,20 @@
},
{
"cell_type": "markdown",
- "id": "d398c961",
- "metadata": {},
+ "id": "df1e75cf",
+ "metadata": {
+ "editable": true
+ },
"source": [
"with"
]
},
{
"cell_type": "markdown",
- "id": "236d161c",
- "metadata": {},
+ "id": "d7c9540f",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"z_i^l = \\sum_{j}w_{ij}^l a_j^{l-1}+b_i^l,\n",
@@ -431,8 +507,10 @@
},
{
"cell_type": "markdown",
- "id": "25e3004d",
- "metadata": {},
+ "id": "2e883cb8",
+ "metadata": {
+ "editable": true
+ },
"source": [
"where the superscript $l-1$ indicates that these are the outputs from layer $l-1$.\n",
"Our cost function at the final layer $l=L$ is now"
@@ -440,8 +518,10 @@
},
{
"cell_type": "markdown",
- "id": "9440c725",
- "metadata": {},
+ "id": "71dec0a5",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\mathcal{C}(\\boldsymbol{W}) = - \\sum_{i=1}^n \\left(t_i\\log{a_i^L}+(1-t_i)\\log{(1-a_i^L)}\\right),\n",
@@ -450,16 +530,20 @@
},
{
"cell_type": "markdown",
- "id": "782f5282",
- "metadata": {},
+ "id": "3f559589",
+ "metadata": {
+ "editable": true
+ },
"source": [
"where we have defined the targets $t_i$. The derivatives of the cost function with respect to the output $a_i^L$ are then easily calculated and we get"
]
},
{
"cell_type": "markdown",
- "id": "0e8498a5",
- "metadata": {},
+ "id": "c648e459",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\frac{\\partial \\mathcal{C}(\\boldsymbol{W})}{\\partial a_i^L} = \\frac{a_i^L-t_i}{a_i^L(1-a_i^L)}.\n",
@@ -468,16 +552,20 @@
},
{
"cell_type": "markdown",
- "id": "68398b35",
- "metadata": {},
+ "id": "7a951b61",
+ "metadata": {
+ "editable": true
+ },
"source": [
"In case we use another activation function than the logistic one, we need to evaluate other derivatives."
]
},
{
"cell_type": "markdown",
- "id": "19887152",
- "metadata": {},
+ "id": "47f0cbdf",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## The Softmax function\n",
"In case we employ the more general case given by the Softmax equation, we need to evaluate the derivative of the activation function with respect to the activation $z_i^l$, that is we need"
@@ -485,8 +573,10 @@
},
{
"cell_type": "markdown",
- "id": "80e8dc5d",
- "metadata": {},
+ "id": "d4c56881",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\frac{\\partial f(z_i^l)}{\\partial w_{jk}^l} =\n",
@@ -496,16 +586,20 @@
},
{
"cell_type": "markdown",
- "id": "68d33776",
- "metadata": {},
+ "id": "6cf9a20c",
+ "metadata": {
+ "editable": true
+ },
"source": [
"For the Softmax function we have"
]
},
{
"cell_type": "markdown",
- "id": "3c86943c",
- "metadata": {},
+ "id": "d7729455",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"f(z_i^l) = \\frac{\\exp{(z_i^l)}}{\\sum_{m=1}^K\\exp{(z_m^l)}}.\n",
@@ -514,16 +608,20 @@
},
{
"cell_type": "markdown",
- "id": "efe53876",
- "metadata": {},
+ "id": "dc4256c7",
+ "metadata": {
+ "editable": true
+ },
"source": [
"Its derivative with respect to $z_j^l$ gives"
]
},
{
"cell_type": "markdown",
- "id": "fce5b9b2",
- "metadata": {},
+ "id": "f7e4bce3",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\frac{\\partial f(z_i^l)}{\\partial z_j^l}= f(z_i^l)\\left(\\delta_{ij}-f(z_j^l)\\right),\n",
@@ -532,16 +630,20 @@
},
{
"cell_type": "markdown",
- "id": "97210471",
- "metadata": {},
+ "id": "e39a9433",
+ "metadata": {
+ "editable": true
+ },
"source": [
"which in case of the simply binary model reduces to having $i=j$."
]
},
{
"cell_type": "markdown",
- "id": "4f515591",
- "metadata": {},
+ "id": "acb24d2a",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Developing a code for doing neural networks with back propagation\n",
"\n",
@@ -562,8 +664,10 @@
},
{
"cell_type": "markdown",
- "id": "ec34f212",
- "metadata": {},
+ "id": "c58c69da",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Collect and pre-process data\n",
"\n",
@@ -610,31 +714,12 @@
{
"cell_type": "code",
"execution_count": 1,
- "id": "e389e60e",
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "inputs = (n_inputs, pixel_width, pixel_height) = (1797, 8, 8)\n",
- "labels = (n_inputs) = (1797,)\n",
- "X = (n_inputs, n_features) = (1797, 64)\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
+ "id": "5dc0eb9a",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
+ "outputs": [],
"source": [
"%matplotlib inline\n",
"\n",
@@ -684,8 +769,10 @@
},
{
"cell_type": "markdown",
- "id": "9a264b82",
- "metadata": {},
+ "id": "819a2846",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Train and test datasets\n",
"\n",
@@ -703,18 +790,12 @@
{
"cell_type": "code",
"execution_count": 2,
- "id": "8750ea41",
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Number of training images: 1437\n",
- "Number of test images: 360\n"
- ]
- }
- ],
+ "id": "5a1ddf60",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
+ "outputs": [],
"source": [
"from sklearn.model_selection import train_test_split\n",
"\n",
@@ -747,8 +828,10 @@
},
{
"cell_type": "markdown",
- "id": "d3897eca",
- "metadata": {},
+ "id": "98be2914",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Define model and architecture\n",
"\n",
@@ -789,8 +872,10 @@
},
{
"cell_type": "markdown",
- "id": "ad593a03",
- "metadata": {},
+ "id": "a961ec80",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Layers\n",
"\n",
@@ -827,8 +912,10 @@
},
{
"cell_type": "markdown",
- "id": "e37b3844",
- "metadata": {},
+ "id": "ca2520ff",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Weights and biases\n",
"\n",
@@ -845,9 +932,12 @@
},
{
"cell_type": "code",
- "execution_count": 4,
- "id": "3d909fc7",
- "metadata": {},
+ "execution_count": 3,
+ "id": "ac07010c",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"# building our neural network\n",
@@ -869,8 +959,10 @@
},
{
"cell_type": "markdown",
- "id": "b89c2d9f",
- "metadata": {},
+ "id": "fec1d790",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Feed-forward pass\n",
"\n",
@@ -895,8 +987,10 @@
},
{
"cell_type": "markdown",
- "id": "435c0ced",
- "metadata": {},
+ "id": "445fb930",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Matrix multiplications\n",
"\n",
@@ -929,27 +1023,13 @@
},
{
"cell_type": "code",
- "execution_count": 5,
- "id": "3037d7ab",
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "probabilities = (n_inputs, n_categories) = (1437, 10)\n",
- "probability that image 0 is in category 0,1,2,...,9 = \n",
- "[5.41511965e-04 2.17174962e-03 8.84355903e-03 1.44970586e-03\n",
- " 1.10378326e-04 5.08318298e-09 2.03256632e-04 1.92507116e-03\n",
- " 9.84443254e-01 3.11507992e-04]\n",
- "probabilities sum up to: 1.0\n",
- "\n",
- "predictions = (n_inputs) = (1437,)\n",
- "prediction for image 0: 8\n",
- "correct label for image 0: 6\n"
- ]
- }
- ],
+ "execution_count": 4,
+ "id": "86991433",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
+ "outputs": [],
"source": [
"# setup the feed-forward pass, subscript h = hidden layer\n",
"\n",
@@ -990,8 +1070,10 @@
},
{
"cell_type": "markdown",
- "id": "61c33a3f",
- "metadata": {},
+ "id": "5fce84ef",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Choose cost function and optimizer\n",
"\n",
@@ -1019,8 +1101,10 @@
},
{
"cell_type": "markdown",
- "id": "665f44ff",
- "metadata": {},
+ "id": "40e059bd",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Optimizing the cost function\n",
"\n",
@@ -1055,8 +1139,10 @@
},
{
"cell_type": "markdown",
- "id": "2d0168d0",
- "metadata": {},
+ "id": "8fe412ef",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Regularization\n",
"\n",
@@ -1087,8 +1173,10 @@
},
{
"cell_type": "markdown",
- "id": "9c0a8db3",
- "metadata": {},
+ "id": "9d6c8872",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Matrix multiplication\n",
"\n",
@@ -1125,33 +1213,13 @@
},
{
"cell_type": "code",
- "execution_count": 6,
- "id": "0bf3739e",
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Old accuracy on training data: 0.1440501043841336\n"
- ]
- },
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_50729/953065564.py:4: RuntimeWarning: overflow encountered in exp\n",
- " return 1/(1 + np.exp(-x))\n"
- ]
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "New accuracy on training data: 0.10368823938761308\n"
- ]
- }
- ],
+ "execution_count": 5,
+ "id": "8ab1d38e",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
+ "outputs": [],
"source": [
"# to categorical turns our integer vector into a onehot representation\n",
"from sklearn.metrics import accuracy_score\n",
@@ -1225,8 +1293,10 @@
},
{
"cell_type": "markdown",
- "id": "33e198f3",
- "metadata": {},
+ "id": "7ab168e8",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Improving performance\n",
"\n",
@@ -1244,8 +1314,10 @@
},
{
"cell_type": "markdown",
- "id": "932f6c5e",
- "metadata": {},
+ "id": "c593ff95",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Full object-oriented implementation\n",
"\n",
@@ -1255,9 +1327,12 @@
},
{
"cell_type": "code",
- "execution_count": 7,
- "id": "91e351de",
- "metadata": {},
+ "execution_count": 6,
+ "id": "022c8f37",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"class NeuralNetwork:\n",
@@ -1363,8 +1438,10 @@
},
{
"cell_type": "markdown",
- "id": "e8c2feb6",
- "metadata": {},
+ "id": "5a00abd2",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Evaluate model performance on test data\n",
"\n",
@@ -1379,18 +1456,13 @@
},
{
"cell_type": "code",
- "execution_count": 8,
- "id": "1534af1b",
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Accuracy score on test set: 0.9444444444444444\n"
- ]
- }
- ],
+ "execution_count": 7,
+ "id": "7f5ac460",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
+ "outputs": [],
"source": [
"epochs = 100\n",
"batch_size = 100\n",
@@ -1412,8 +1484,10 @@
},
{
"cell_type": "markdown",
- "id": "85627e28",
- "metadata": {},
+ "id": "0d561a20",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Adjust hyperparameters\n",
"\n",
@@ -1423,559 +1497,13 @@
},
{
"cell_type": "code",
- "execution_count": 9,
- "id": "19382903",
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Learning rate = 1e-05\n",
- "Lambda = 1e-05\n",
- "Accuracy score on test set: 0.11666666666666667\n",
- "\n",
- "Learning rate = 1e-05\n",
- "Lambda = 0.0001\n",
- "Accuracy score on test set: 0.20833333333333334\n",
- "\n",
- "Learning rate = 1e-05\n",
- "Lambda = 0.001\n",
- "Accuracy score on test set: 0.12222222222222222\n",
- "\n",
- "Learning rate = 1e-05\n",
- "Lambda = 0.01\n",
- "Accuracy score on test set: 0.14722222222222223\n",
- "\n",
- "Learning rate = 1e-05\n",
- "Lambda = 0.1\n",
- "Accuracy score on test set: 0.17777777777777778\n",
- "\n",
- "Learning rate = 1e-05\n",
- "Lambda = 1.0\n",
- "Accuracy score on test set: 0.16111111111111112\n",
- "\n",
- "Learning rate = 1e-05\n",
- "Lambda = 10.0\n",
- "Accuracy score on test set: 0.20277777777777778\n",
- "\n",
- "Learning rate = 0.0001\n",
- "Lambda = 1e-05\n",
- "Accuracy score on test set: 0.5305555555555556\n",
- "\n",
- "Learning rate = 0.0001\n",
- "Lambda = 0.0001\n",
- "Accuracy score on test set: 0.5944444444444444\n",
- "\n",
- "Learning rate = 0.0001\n",
- "Lambda = 0.001\n",
- "Accuracy score on test set: 0.5888888888888889\n",
- "\n",
- "Learning rate = 0.0001\n",
- "Lambda = 0.01\n",
- "Accuracy score on test set: 0.6111111111111112\n",
- "\n",
- "Learning rate = 0.0001\n",
- "Lambda = 0.1\n",
- "Accuracy score on test set: 0.5222222222222223\n",
- "\n",
- "Learning rate = 0.0001\n",
- "Lambda = 1.0\n",
- "Accuracy score on test set: 0.5555555555555556\n",
- "\n",
- "Learning rate = 0.0001\n",
- "Lambda = 10.0\n",
- "Accuracy score on test set: 0.8055555555555556\n",
- "\n",
- "Learning rate = 0.001\n",
- "Lambda = 1e-05\n",
- "Accuracy score on test set: 0.85\n",
- "\n",
- "Learning rate = 0.001\n",
- "Lambda = 0.0001\n",
- "Accuracy score on test set: 0.85\n",
- "\n",
- "Learning rate = 0.001\n",
- "Lambda = 0.001\n",
- "Accuracy score on test set: 0.875\n",
- "\n",
- "Learning rate = 0.001\n",
- "Lambda = 0.01\n",
- "Accuracy score on test set: 0.8666666666666667\n",
- "\n",
- "Learning rate = 0.001\n",
- "Lambda = 0.1\n",
- "Accuracy score on test set: 0.8638888888888889\n",
- "\n",
- "Learning rate = 0.001\n",
- "Lambda = 1.0\n",
- "Accuracy score on test set: 0.9555555555555556\n",
- "\n",
- "Learning rate = 0.001\n",
- "Lambda = 10.0\n",
- "Accuracy score on test set: 0.925\n",
- "\n",
- "Learning rate = 0.01\n",
- "Lambda = 1e-05\n",
- "Accuracy score on test set: 0.9305555555555556\n",
- "\n",
- "Learning rate = 0.01\n",
- "Lambda = 0.0001\n",
- "Accuracy score on test set: 0.9416666666666667\n",
- "\n",
- "Learning rate = 0.01\n",
- "Lambda = 0.001\n",
- "Accuracy score on test set: 0.9416666666666667\n",
- "\n",
- "Learning rate = 0.01\n",
- "Lambda = 0.01\n",
- "Accuracy score on test set: 0.9305555555555556\n",
- "\n",
- "Learning rate = 0.01\n",
- "Lambda = 0.1\n",
- "Accuracy score on test set: 0.9555555555555556\n",
- "\n",
- "Learning rate = 0.01\n",
- "Lambda = 1.0\n",
- "Accuracy score on test set: 0.9388888888888889\n",
- "\n",
- "Learning rate = 0.01\n",
- "Lambda = 10.0\n",
- "Accuracy score on test set: 0.21388888888888888\n",
- "\n"
- ]
- },
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_50729/953065564.py:4: RuntimeWarning: overflow encountered in exp\n",
- " return 1/(1 + np.exp(-x))\n"
- ]
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Learning rate = 0.1\n",
- "Lambda = 1e-05\n",
- "Accuracy score on test set: 0.125\n",
- "\n"
- ]
- },
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_50729/953065564.py:4: RuntimeWarning: overflow encountered in exp\n",
- " return 1/(1 + np.exp(-x))\n"
- ]
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Learning rate = 0.1\n",
- "Lambda = 0.0001\n",
- "Accuracy score on test set: 0.08888888888888889\n",
- "\n"
- ]
- },
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_50729/953065564.py:4: RuntimeWarning: overflow encountered in exp\n",
- " return 1/(1 + np.exp(-x))\n"
- ]
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Learning rate = 0.1\n",
- "Lambda = 0.001\n",
- "Accuracy score on test set: 0.11666666666666667\n",
- "\n"
- ]
- },
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_50729/953065564.py:4: RuntimeWarning: overflow encountered in exp\n",
- " return 1/(1 + np.exp(-x))\n"
- ]
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Learning rate = 0.1\n",
- "Lambda = 0.01\n",
- "Accuracy score on test set: 0.11666666666666667\n",
- "\n"
- ]
- },
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_50729/953065564.py:4: RuntimeWarning: overflow encountered in exp\n",
- " return 1/(1 + np.exp(-x))\n"
- ]
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Learning rate = 0.1\n",
- "Lambda = 0.1\n",
- "Accuracy score on test set: 0.10555555555555556\n",
- "\n"
- ]
- },
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_50729/953065564.py:4: RuntimeWarning: overflow encountered in exp\n",
- " return 1/(1 + np.exp(-x))\n"
- ]
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Learning rate = 0.1\n",
- "Lambda = 1.0\n",
- "Accuracy score on test set: 0.07777777777777778\n",
- "\n"
- ]
- },
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_50729/953065564.py:4: RuntimeWarning: overflow encountered in exp\n",
- " return 1/(1 + np.exp(-x))\n"
- ]
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Learning rate = 0.1\n",
- "Lambda = 10.0\n",
- "Accuracy score on test set: 0.09166666666666666\n",
- "\n"
- ]
- },
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_50729/953065564.py:4: RuntimeWarning: overflow encountered in exp\n",
- " return 1/(1 + np.exp(-x))\n",
- "/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_50729/1630775253.py:43: RuntimeWarning: overflow encountered in exp\n",
- " exp_term = np.exp(self.z_o)\n",
- "/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_50729/1630775253.py:44: RuntimeWarning: invalid value encountered in true_divide\n",
- " self.probabilities = exp_term / np.sum(exp_term, axis=1, keepdims=True)\n"
- ]
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Learning rate = 1.0\n",
- "Lambda = 1e-05\n",
- "Accuracy score on test set: 0.07777777777777778\n",
- "\n"
- ]
- },
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_50729/953065564.py:4: RuntimeWarning: overflow encountered in exp\n",
- " return 1/(1 + np.exp(-x))\n",
- "/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_50729/1630775253.py:43: RuntimeWarning: overflow encountered in exp\n",
- " exp_term = np.exp(self.z_o)\n",
- "/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_50729/1630775253.py:44: RuntimeWarning: invalid value encountered in true_divide\n",
- " self.probabilities = exp_term / np.sum(exp_term, axis=1, keepdims=True)\n"
- ]
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Learning rate = 1.0\n",
- "Lambda = 0.0001\n",
- "Accuracy score on test set: 0.07777777777777778\n",
- "\n"
- ]
- },
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_50729/953065564.py:4: RuntimeWarning: overflow encountered in exp\n",
- " return 1/(1 + np.exp(-x))\n",
- "/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_50729/1630775253.py:43: RuntimeWarning: overflow encountered in exp\n",
- " exp_term = np.exp(self.z_o)\n",
- "/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_50729/1630775253.py:44: RuntimeWarning: invalid value encountered in true_divide\n",
- " self.probabilities = exp_term / np.sum(exp_term, axis=1, keepdims=True)\n"
- ]
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Learning rate = 1.0\n",
- "Lambda = 0.001\n",
- "Accuracy score on test set: 0.07777777777777778\n",
- "\n"
- ]
- },
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_50729/953065564.py:4: RuntimeWarning: overflow encountered in exp\n",
- " return 1/(1 + np.exp(-x))\n",
- "/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_50729/1630775253.py:43: RuntimeWarning: overflow encountered in exp\n",
- " exp_term = np.exp(self.z_o)\n",
- "/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_50729/1630775253.py:44: RuntimeWarning: invalid value encountered in true_divide\n",
- " self.probabilities = exp_term / np.sum(exp_term, axis=1, keepdims=True)\n"
- ]
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Learning rate = 1.0\n",
- "Lambda = 0.01\n",
- "Accuracy score on test set: 0.07777777777777778\n",
- "\n"
- ]
- },
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_50729/953065564.py:4: RuntimeWarning: overflow encountered in exp\n",
- " return 1/(1 + np.exp(-x))\n",
- "/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_50729/1630775253.py:43: RuntimeWarning: overflow encountered in exp\n",
- " exp_term = np.exp(self.z_o)\n",
- "/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_50729/1630775253.py:44: RuntimeWarning: invalid value encountered in true_divide\n",
- " self.probabilities = exp_term / np.sum(exp_term, axis=1, keepdims=True)\n"
- ]
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Learning rate = 1.0\n",
- "Lambda = 0.1\n",
- "Accuracy score on test set: 0.07777777777777778\n",
- "\n"
- ]
- },
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_50729/953065564.py:4: RuntimeWarning: overflow encountered in exp\n",
- " return 1/(1 + np.exp(-x))\n"
- ]
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Learning rate = 1.0\n",
- "Lambda = 1.0\n",
- "Accuracy score on test set: 0.08888888888888889\n",
- "\n"
- ]
- },
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_50729/953065564.py:4: RuntimeWarning: overflow encountered in exp\n",
- " return 1/(1 + np.exp(-x))\n",
- "/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_50729/1630775253.py:43: RuntimeWarning: overflow encountered in exp\n",
- " exp_term = np.exp(self.z_o)\n",
- "/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_50729/1630775253.py:44: RuntimeWarning: invalid value encountered in true_divide\n",
- " self.probabilities = exp_term / np.sum(exp_term, axis=1, keepdims=True)\n"
- ]
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Learning rate = 1.0\n",
- "Lambda = 10.0\n",
- "Accuracy score on test set: 0.07777777777777778\n",
- "\n"
- ]
- },
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_50729/953065564.py:4: RuntimeWarning: overflow encountered in exp\n",
- " return 1/(1 + np.exp(-x))\n",
- "/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_50729/1630775253.py:43: RuntimeWarning: overflow encountered in exp\n",
- " exp_term = np.exp(self.z_o)\n",
- "/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_50729/1630775253.py:44: RuntimeWarning: invalid value encountered in true_divide\n",
- " self.probabilities = exp_term / np.sum(exp_term, axis=1, keepdims=True)\n"
- ]
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Learning rate = 10.0\n",
- "Lambda = 1e-05\n",
- "Accuracy score on test set: 0.07777777777777778\n",
- "\n"
- ]
- },
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_50729/953065564.py:4: RuntimeWarning: overflow encountered in exp\n",
- " return 1/(1 + np.exp(-x))\n",
- "/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_50729/1630775253.py:43: RuntimeWarning: overflow encountered in exp\n",
- " exp_term = np.exp(self.z_o)\n",
- "/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_50729/1630775253.py:44: RuntimeWarning: invalid value encountered in true_divide\n",
- " self.probabilities = exp_term / np.sum(exp_term, axis=1, keepdims=True)\n"
- ]
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Learning rate = 10.0\n",
- "Lambda = 0.0001\n",
- "Accuracy score on test set: 0.07777777777777778\n",
- "\n"
- ]
- },
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_50729/953065564.py:4: RuntimeWarning: overflow encountered in exp\n",
- " return 1/(1 + np.exp(-x))\n",
- "/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_50729/1630775253.py:43: RuntimeWarning: overflow encountered in exp\n",
- " exp_term = np.exp(self.z_o)\n",
- "/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_50729/1630775253.py:44: RuntimeWarning: invalid value encountered in true_divide\n",
- " self.probabilities = exp_term / np.sum(exp_term, axis=1, keepdims=True)\n"
- ]
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Learning rate = 10.0\n",
- "Lambda = 0.001\n",
- "Accuracy score on test set: 0.07777777777777778\n",
- "\n"
- ]
- },
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_50729/953065564.py:4: RuntimeWarning: overflow encountered in exp\n",
- " return 1/(1 + np.exp(-x))\n",
- "/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_50729/1630775253.py:43: RuntimeWarning: overflow encountered in exp\n",
- " exp_term = np.exp(self.z_o)\n",
- "/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_50729/1630775253.py:44: RuntimeWarning: invalid value encountered in true_divide\n",
- " self.probabilities = exp_term / np.sum(exp_term, axis=1, keepdims=True)\n"
- ]
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Learning rate = 10.0\n",
- "Lambda = 0.01\n",
- "Accuracy score on test set: 0.07777777777777778\n",
- "\n"
- ]
- },
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_50729/953065564.py:4: RuntimeWarning: overflow encountered in exp\n",
- " return 1/(1 + np.exp(-x))\n",
- "/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_50729/1630775253.py:43: RuntimeWarning: overflow encountered in exp\n",
- " exp_term = np.exp(self.z_o)\n",
- "/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_50729/1630775253.py:44: RuntimeWarning: invalid value encountered in true_divide\n",
- " self.probabilities = exp_term / np.sum(exp_term, axis=1, keepdims=True)\n"
- ]
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Learning rate = 10.0\n",
- "Lambda = 0.1\n",
- "Accuracy score on test set: 0.07777777777777778\n",
- "\n"
- ]
- },
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_50729/953065564.py:4: RuntimeWarning: overflow encountered in exp\n",
- " return 1/(1 + np.exp(-x))\n",
- "/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_50729/1630775253.py:43: RuntimeWarning: overflow encountered in exp\n",
- " exp_term = np.exp(self.z_o)\n",
- "/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_50729/1630775253.py:44: RuntimeWarning: invalid value encountered in true_divide\n",
- " self.probabilities = exp_term / np.sum(exp_term, axis=1, keepdims=True)\n"
- ]
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Learning rate = 10.0\n",
- "Lambda = 1.0\n",
- "Accuracy score on test set: 0.07777777777777778\n",
- "\n"
- ]
- },
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_50729/953065564.py:4: RuntimeWarning: overflow encountered in exp\n",
- " return 1/(1 + np.exp(-x))\n",
- "/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_50729/1630775253.py:43: RuntimeWarning: overflow encountered in exp\n",
- " exp_term = np.exp(self.z_o)\n",
- "/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_50729/1630775253.py:44: RuntimeWarning: invalid value encountered in true_divide\n",
- " self.probabilities = exp_term / np.sum(exp_term, axis=1, keepdims=True)\n"
- ]
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Learning rate = 10.0\n",
- "Lambda = 10.0\n",
- "Accuracy score on test set: 0.07777777777777778\n",
- "\n"
- ]
- }
- ],
+ "execution_count": 8,
+ "id": "ae5470ba",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
+ "outputs": [],
"source": [
"eta_vals = np.logspace(-5, 1, 7)\n",
"lmbd_vals = np.logspace(-5, 1, 7)\n",
@@ -2001,55 +1529,23 @@
},
{
"cell_type": "markdown",
- "id": "12bc42df",
- "metadata": {},
+ "id": "66569562",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Visualization"
]
},
{
"cell_type": "code",
- "execution_count": 10,
- "id": "ec0dc239",
- "metadata": {},
- "outputs": [
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_50729/953065564.py:4: RuntimeWarning: overflow encountered in exp\n",
- " return 1/(1 + np.exp(-x))\n",
- "/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_50729/953065564.py:4: RuntimeWarning: overflow encountered in exp\n",
- " return 1/(1 + np.exp(-x))\n",
- "/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_50729/953065564.py:4: RuntimeWarning: overflow encountered in exp\n",
- " return 1/(1 + np.exp(-x))\n",
- "/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_50729/953065564.py:4: RuntimeWarning: overflow encountered in exp\n",
- " return 1/(1 + np.exp(-x))\n",
- "/var/folders/td/3yk470mj5p931p9dtkk0y6jw0000gn/T/ipykernel_50729/953065564.py:4: RuntimeWarning: overflow encountered in exp\n",
- " return 1/(1 + np.exp(-x))\n"
- ]
- },
- {
- "data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkIAAAJgCAYAAABmwww9AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAAsTAAALEwEAmpwYAABTyUlEQVR4nO3deZxN9R/H8fe9sw8z1pmxVkQou6xlzTpkCSWFhJKtSFGplESIhEghIltlTfbIMhIKKUshuxkGw8yY5d77+2P8LodhyMy9M/e8no/HfdQ599x7Pp/5njvz8Tnfc67F4XA4BAAAYEJWdwcAAADgLhRCAADAtCiEAACAaVEIAQAA06IQAgAApkUhBAAATMvb3QEAZvPBBx/o119/lST9888/KliwoPz9/SVJc+fOdf5/Wrp166YBAwaoWLFiN91m7Nixuvfee9WyZcu7jvv/evfura1bt2rdunUKCAhIt/cFAHewcB8hwH3q1aunsWPHqkyZMu4O5bacPn1aLVq0ULly5VSnTh09/fTT7g4JAO4Kp8aATGTcuHHq0qWLHn/8cfXv319nzpxRjx499NRTT6levXrq0KGDzp49KymliNq9e7d++eUXtWvXTq+99ppatmyp8PBwbdmyRZI0cOBATZkyRZJUpkwZjRs3Tu3atVO9evX01VdfSZJsNpuGDRumBg0a6IknntDgwYPVoUOHVOObN2+eqlevrlatWmnGjBm69t9RO3fuVNu2bdWsWTO1atVKERERt1xfokQJRUdHO1///+VffvlFzZs3V7t27dS8eXMlJibqgw8+UNu2bRUeHq4mTZpo+/btkqTY2Fi98cYbatSokcLDwzV69GjFxcWpcuXKOnTokPO9O3furNWrV6fHEAHwMBRCQCZz/PhxLViwQKNGjdIPP/yg8uXLa+7cuVqzZo38/f21aNGiG16za9cuPf/881q4cKHatGmj8ePH37BNYmKicuXKpTlz5ujTTz/Vxx9/rISEBM2fP1979uzR0qVLNWfOHB09ejTVuJKTkzVv3jw1b95c9erV09mzZ/Xzzz9LkpKSktSzZ0/17NlTS5cu1ZAhQ/Thhx8qMTEx1fV2u/2WP4MDBw7o448/1uLFi7Vnzx5FRkZq7ty5WrZsmVq1aqUvvvhCkvTpp58qISFBy5Yt08KFC7Vjxw7t3r1bLVu21Pz58yVJR44c0aFDh1S3bt07GgcA5sAcISCTKV++vLy9Uz6anTp10rZt2zRt2jQdPnxYBw4cULly5W54TYECBVSqVClJ0oMPPqgFCxak+t6PPfaYJOmhhx5SYmKi4uLitH79erVo0UJ+fn6SpKeeekpff/31Da9ds2aN7Ha7atasKW9vb4WHh2v69OmqXbu29u/fL6vVqjp16kiSSpcurSVLlmjPnj2prk9L/vz5VbBgQUlShQoVlCNHDmeR9ssvvyhbtmySpM2bN+uNN96Ql5eXvLy8NHPmTElSaGionn32WfXt21dz585VmzZt5OXlleZ+AZgPhRCQyQQGBjr/f+TIkdq1a5dat26tqlWrKjk5WalN67t2grXFYkl1G0nOYsdisUiSHA6Hs+j6P6s19Ubx7NmzdfnyZTVs2FBSSocpKipKBw4ckJeXl/M9/2///v03XV+0aFHDusTERMPytT+DdevWaejQoercubMee+wxFS1aVIsXL5YkeXt7G97/5MmT8vf3V5EiRVSiRAmtWbNGS5YscXaHAOB6nBoDMrGNGzeqU6dOatmypfLkyaPNmzfLZrOl6z5q166txYsXKzExUcnJyal2kw4dOqStW7dqwYIFWrt2rdauXauNGzfq4Ycf1vTp01W0aFFZLBZt2rRJkrRnzx516tTppuvtdrty586t3bt3S5JWrVp10/g2bdqkunXrqn379ipTpoxWr17t/BlUr15dCxYskN1uV2Jiovr06eO8Iq99+/YaMWKEypUrp7CwsHT9mQHwHHSEgEysZ8+eGjFihD777DN5eXmpYsWKOnLkSLru44knntChQ4fUsmVLBQYGqlChQjdcFj979mzVr19f99xzj2F9r1699OKLL6pfv34aN26cPvzwQ40YMUI+Pj4aN26cfH19b7p+0KBBev/99xUcHKwaNWooJCQk1fjatWun/v376/HHH5eXl5cefvhhrVy5Una7Xb169dLQoUPVokUL2Ww2hYeHOztWdevW1aBBg9SuXbt0/XkB8CxcPg+Y3MaNG3X27Fm1aNFCUsp9jvz8/PTaa6+5ObK7s2PHDr399ttaunTpDafnAOD/KIQAkzt9+rQGDhyos2fPymazqWTJkho8eLCCgoLcHdp/NmDAAG3dulUfffSRqlSp4u5wAGRiFEIAAMC0mCwNAABMi0IIAACYFoUQAAAwrSx5+XzjXF3d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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkIAAAJgCAYAAABmwww9AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAAsTAAALEwEAmpwYAABruElEQVR4nO3deZyN5f/H8dc5s5nBjDAz9hBFMrasZc++L/2SipCSkFGhrKWkyOhLiUQSki9C9rIkpoTKTrJkn2GYwQyznPv3x/E93IYMZs4xc7+fj8d5cN/nOvd9feY+y+d8ruu+j80wDAMRERERC7J7ugMiIiIinqJESERERCxLiZCIiIhYlhIhERERsSwlQiIiImJZSoRERETEspQIidyj3n33XVq1akWrVq145JFHaNSokWv50qVLt7Wtbdu2MXTo0Jvev3fvXh566CEmT558t90WEclUbLqOkMi9r169enz88ceULVv2jh4/f/58VqxYwaRJk254//Dhw7lw4QK//fYbP/74I97e3nfTXRGRTEPvdiKZ0Ny5c5k9ezYOh4NcuXIxZMgQHnjgATZv3syoUaNwOBwAvPTSS4SFhfGf//yH8+fP8+abb/L++++btnXhwgUWLVrE3Llz2bNnD8uXL6d58+YAJCcnM3r0aNauXYuXlxcVKlRg2LBh2O32G66fNGkSZ8+edVWfxo8f71p+7rnnCAoK4sCBAzz99NOULVuW0aNHk5iYSHR0NDVq1GDkyJEArFmzhnHjxuFwOAgICODtt99mzZo17N+/n48++giALVu2MGLECL777js3/dVFJCtSIiSSyWzatInvvvuOmTNn4u/vz88//0zv3r1ZunQp48ePp0uXLjRr1ow9e/YwZ84cGjVqRJ8+fVixYkWqJAhg0aJFFC1alAceeIDWrVszffp0VyI0a9Ysdu7cycKFC/H19aVfv34sXbqUuLi4G66/lcDAQFe7fv360adPH6pWrcrFixepX78+O3bsIF++fLzxxhvMmDGD0qVLs3LlSsaMGcMHH3xAw4YNOXfuHLly5WLOnDl06NAhff+4ImI5SoREMpm1a9dy+PBhUxIQGxvLuXPnaNKkCe+88w6rV6+mRo0a9OvX75bbmz17Nv/3f/8HQMuWLRk7dixbt26lYsWKbNy4kVatWpEtWzYAxo0bB0CPHj1uuH78+PH/uq9HH33U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iAWoIiQiIiImOmtMRERExAJUERIRERETh+YIiYiIiGR9qgiJiIiISYqF6iTWiVRERETkOqoIiYiIiInOGhMRERGxAFWERERExES/NSYiIiJiAUqERERExLI0NCYiIiImKYYuqCgiIiKS5akiJCIiIia6oKKIiIiIBagiJCIiIiYOXVBRREREJOtTRUhERERMNEdIRERExAJUERIRERETXUdIRERExAJUERIRERETK/3oaqZMhPaMKOXpLniM/b7Lnu6CRxlGMU93waO8fVM83QWPSj7p7+kueJTD3+HpLnhM38dWeboLkkVlykRIREREMk6KriMkIiIikvWpIiQiIiImDnTWmIiIiEiWp0RIRERELEtDYyIiImKiydIiIiIiFqCKkIiIiJjoR1dFRERELEAVIRERETFx6EdXRURERLI+VYRERETERHOERERERCxAFSERERExceg6QiIiIiJZnxIhERERMUnB5rbb7Vi8eDFNmzalQYMGzJw5M9X9O3fupF27drRs2ZKXXnqJuLi4W25TiZCIiIjc806dOkVERASzZs1i4cKFzJkzh/3795vavPfee/Tp04dFixZRrFgxvvjii1tuV3OERERExMSdc4Ti4uJuWLkJDAwkMDDQtbxx40aqVatGrly5AGjUqBHLly+nV69erjYOh4OLFy8CkJCQQFBQ0C33r0RIREREPGb69OlMmDAh1fpevXrRu3dv13JUVBTBwcGu5ZCQELZt22Z6zMCBA+nSpQsjR47E39+fb7/99pb7VyIkIiIiJrc7d+dudO7cmTZt2qRaf201CMAwjFRtbLar/bx06RKDBg1i+vTphIWFMW3aNAYMGMDkyZP/df9KhERERMRjrh8Cu5nQ0FA2b97sWo6KiiIkJMS1vG/fPvz8/AgLCwPgqaee4uOPP77ldjVZWkRERO55NWrUIDIykpiYGBISEli5ciW1atVy3X///fdz8uRJDhw4AMCPP/5I2bJlb7ldVYRERETE5F68oGJoaCjh4eF06tSJpKQk2rdvT1hYGN27d6dPnz6ULVuW999/n759+2IYBnny5GHkyJG33K4SIREREckUWrRoQYsWLUzrPv/8c9f/a9euTe3atW9rm0qERERExCTlHqwIZRTrRCoiIiJyHVWERERExMThxtPnPU0VIREREbEsVYRERETERHOERERERCxAFSER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J+yMGu3Hl1MSAJi3wIf53/ngMCDskRT6vXoZPz84fwHGjPXjwEE7NhvUfDyFbs8nmobW0ktwgWPpv9F/UXbRMLfta3tLz15rwy2JEEBkZCQhISE88MADrnUnTpxg6tSpDBo06La2lRGJkGQOGZUIZRYZlQhlFhmRCGUmGZEIZRYZlQhlFu5OhMosHO62fe1s5b593YjbZnJUr1491br8+fPfdhIkIiIikl4y0ZRWERERcYd74Dwmt7F2nVlEREQsTRUhERERMbkXzuZyF1WERERExLKUCImIiIhlaWhMRERETDQ0JiIiImIBqgiJiIiIiYXOnldFSERERKxLFSEREREx0RwhEREREQtQRUhERETMLDRJSBUhERERsSxVhERERMREc4RERERELEAVIRERETExNEdIREREJOtTIiQiIiImhmFz2+12LF68mKZNm9KgQQNmzpyZ6v4DBw7w3HPP0bJlS7p160ZsbOwtt6lESERERO55p06dIiIiglmzZrFw4ULmzJnD/v37XfcbhsHLL79M9+7dWbRoEaVLl2by5Mm33K4SIRERETEzbO67pdHGjRupVq0auXLlIiAggEaNGrF8+XLX/Tt37iQgIIBatWoB0KNHD5555plbbleTpUVERMRj4uLiiIuLS7U+MDCQwMBA13JUVBTBwcGu5ZCQELZt2+Za/ueff8ibNy8DBgxg165dPPjggwwZMuSW+1dFSERERDxm+vTp1K9fP9Vt+vTppnbGDU5ls9muVpSSk5PZtGkTzz77LIsXL6Zw4cKMGjXqlvtXRUhERERM3Hn6fOfOnWnTpk2q9ddWgwBCQ0PZvHmzazkqKoqQkBDXcnBwMPfffz9ly5YFoHnz5vTp0+eW+1dFSERERDwmMDCQQoUKpbpdnwjVqFGDyMhIYmJiSEhIYOXKla75QAAVKlQgJiaGPXv2ALB69WrKlClzy/2rIiQiIiJm9+AFFUNDQwkPD6dTp04kJSXRvn17wsLC6N69O3369KFs2bJ88sknDB48mISEBPLly8eHH354y+3ajBsNut3jFh4o7+kuiIfktl/wdBc8KgkvT3fBo1IMaxex6/uneLoLHnPGcdHTXfCo4ALH3Lq/4rNGum1fBzq+5bZ93YgqQiIiImKiH10VERERsQBVhERERMQs002auXOqCImIiIhlqSIkIiIiJpojJCIiImIBqgiJiIiImeYIiYiIiGR9mbIi9Hi2057ugsdks1n7gnpWd8m45OkueNR99gBPd8GjEozLnu6CxzzT+iVPd8GjVm5y9x41R0hEREQky8uUFSERERHJQJojJCIiIpL1KRESERERy9LQmIiIiJhpaExEREQk61NFSERERMz0ExsiIiIiWZ8qQiIiImJiaI6QiIiISNanipCIiIiYqSIkIiIikvWpIiQiIiJmOmtMREREJOtTRUhERERMbJojJCIiIpL1qSIkIiIiZqoIiYiIiGR9qgiJiIiImc4aExEREcn6lAiJiIiIZWloTERERMw0WVpEREQk61NFSERERMxUERIRERHJ+lQREhERETNVhERERESyPlWERERExEwXVBQRERHJ+lQREhEREROb5giJiIiIZH2qCImIiIiZKkIiIiIiWZ8qQldsiPTisym+JCXBA8UdvPXGZbJnN7eZO9+bed/54OdrcP/9Bq+/epnAQLhwAUaO9uPwP3YMA5o0Sua5p5M8E8gdWh9pZ/zn3iQlQcniBkP7J5Hjuvi/me/FnAVe+PlCsfsNBvZNIijQ3Oa1IT4E5zEY2DfZfZ1PB1aP38rP/7WREDEZEpPgoeLw7gBSHfuv58HMBZDND4oXgSHhkOvKsZ+1AP67BC5fhjIPwbv9wdfX/XHcKas/96s8VpKuPevh4+vFwf1RjH13EfEXE01t6jcuS/vnqoMBly4l8elHy/lr9wnX/dlz+PHRpOf56N1FpvWSOagiBJw9B+996MfIty/xzVcJFMjv4NPJ5neyLb/b+Xq2D//56BLTp1yietUURn3kB8Dkqb6EBBvMnJbAFxMTWLDQm+07M8+f9uw5GP6BD2PeSWLBjEQKFjAYP9mcI//2u50vZ3nz2UeJfPNFIo9VS+HdMT6mNl/O9uL3bZkn7v9R/NZ9/secg0Gj4OMRsOxrKFQAPppkbvPrVpgyG6aNhQVfQK1qMGyM876VP8HM+TB1LCyeDpcuw/S5bg/jjln9uR+UK4DXh7TknYFz6fbkp5w4dpZur9Q3tSlUJA8v9HmCQX1m8fKzk5k1dT3DPvg/1/2Va5Rg/JcvULhoXnd3X9JJ5nvmZoBNv3lR+qEUChdyDoq2bZXMyh+9Ma4ZI927z07lSimEBDtX1qmZzIZIL5KSILx3Ir1edn6DOBNjIykJcmTPPAOskb/ZKVPKQZEr8T/ZMoVlP3iZ4t+910bVSg5CQ5zL9Ws6+CnSTtKVL/6//W5n4yY77VumuLn3d8/q8Vv5+b/hN3ikFBQt5Fx+uhV8/wOm2Hfug+qVIN+VY9+gFqzZ6KwgLVoBzz/lrA7Z7TD8NWjZ0P1x3CmrP/crVS3O3l3HOX4kBoDv522mXuOypjZJSclEvPc9MWcuAPDX7uPclycH3t7Oj8/WT1Vh9NsLORN93r2dz2A2w303T7tlIjR16lQqVqxIuXLlaNKkCX379mXixImsXr2ao0ePpnlHhw4d4tSpUwDMnTuXd999l6VLl955z9PRqWg7oSFXj0ZwsMHFizbi46+2KV3KwZbfvThx0nmRqSXLvUlKshEbZ8NmA28vGP6eH8928adCeQdFCt8DRzeNTkXZCA2+2t+QYIMLF21cvCb+MqUd/Pa7neMnncsLl3mRlGTjXBxEn4bR4715b3AS9kyYWls+fgs//09GQf6Qq8uhwaQ69mVLO6tCx64c+wXLcB37Q0cg5ix0fwNadYEJ0yBnDvfGcDes/twPDg0iOirWtRwdFUf2HNkIyH61InrqRCybNvzlWn6pb0N++WkvyckOAAa9Oovd29P+WSj3nlvOEZo0aRIffvghYWFhHDlyhH379rF3715++ukn/vrL+eQoWbIks2fPvuk2vvzyS2bMmIHD4aBatWqcOHGCBg0aMG/ePA4ePMgrr7ySfhHdAcNx4/XXvrArlHPQtVMSbw71w26DZk2SCQw08PG++iYyfNBl4vvBW0P9mPaVDy90yRzzJBw3+czyuib+SuUMXuyczOtDfLHZoFXTFIICDew26P+2L6/3SiY4j3v6m96sHr+Vn/+ONMReuRz0fB56D3aub9sEggINfLwhKRk2boZPRjrnBb05EsZNgbd6u6X7d83qz32b/cZXT3akpP7DZMvmw+vDWhEcEshbr87M6K55noWuLH3LRChHjhzUqVMHb29vQkJCqFSpkun+o0ePuhKim5k3bx5Lly7l9OnTNG/enF9++QU/Pz+efPJJ2rdv7/FEKDTUwc7dV/8U0dE2cuY08Pe/2uZiPFQon0KLZs6JgDEx8Pk0XwID4ZdNXjxQ3EFwXoMAf2hQP4W1P3m5O4w7li/EYMfuq+98Uach8AbxVyznoHUzZ/n7TAxMnOrN0RM2jp+wMfYT7yvrbaQ4IDERhvbPHJMmrR6/lZ//+UNh2+6ry6dOQ1BOZxz/czHemQy1b+ZcPh0D/5nqHA4LyQtP1Lw6ubpFQ5g43X39v1tWf+5Hn4ylVJmCruW8wYHExSZw6ZI5iQ8ODeSdsR04cvA0b/T8isTLmSM+SZtbFjNffPFF5s69+ey/QoUKUbdu3X/dhsPhwNfXl4IFC9K1a1f8/Pxc96WkeH5cucqjKezc7cWRo84M+LvF3tR8zPxEP33axit9s3HxonN52gxfGtRLxmaD1Wu9mDrdB8NwvgmsXutFpQqejyutqld2sH2XnX+uxD9vkTe1HzP3P/q0jRf7+nLhSvyff+VNo3oplCtjsGzuZb75wjmRsl3LFBrWTck0b4Sg+K38/H+sMvy5Cw5dGdmYswjqPWZuE3UaOvfFdewnfgXN6oPNBo1qw4q1zknShgE/rnfOOcosrP7c3/Lr35R+pCAFCucGoHnbSkT+tNfUJmdgNj6a1JkNa/YwcvB8JUFZ0C0rQqNGjSIpKYn169dTs2ZNSpcuzUMPPYT/tV8ZbqFhw4Y8++yzfPXVV/Tu7awZ79mzh8GDB9OkSZM77306yX0fDOp/mUHD/EhKtlGwgIOhb15m9147o0b7Mn3KJe4vYvBcxyRe6OmPYUDYIym89qpzgmjvnol8ONaPZ7v6Y7NBrceT+b92mefFkvs+GD4giTeG+ZCUBIUKGIx4K4lde2y8M9qHb75IpGgRg+c7JtPpZV8MA8qXdTDg1cwT479R/NZ9/ue5D94bCH2HQlISFC4Io96CHXtgyGjnWWLFikD3jvBUD+dQUsWyMKSv8/FPt4bY89C+O6Q44OGSMMCzBe7bYvXn/rmz8YwZsYgho9rj4+3F8WNnGT38O0qWzk+/QS14+dnJNG/3KMGhQTxWpxSP1bma5fZ/ZQbnYxM82PsMljmm+aULm2EY/xrukSNH2LNnD3v37mXv3r3s2bOH48ePU6hQIVasWJHmHf32229UrlzZtXzgwAGOHDlC7dq1b7vTZ44Xuu3HZBXZbJljyEEyxiUjc1RaMsp99gBPd8GjEozLnu6Cx7Rp1c3TXfColZuGunV/xceNddu+DvTt57Z93cgtK0KFCxemcOHCNGjQwLUuPj6effv23daOrk2CAIoXL07x4sVvaxsiIiLiBhaqCN3RCY8BAQGUL18+nbsiIiIi4l6Z8MoPIiIikpHu1QsqLl68mKZNm9KgQQNmzkx9GYMJEyZQt25dWrVqRatWrW7Y5nr6rTERERG55506dYqIiAjmz5+Pr68vHTp0oGrVqpQoUcLVZseOHYwdO5YKFSqkebuqCImIiIiZ4cZbGm3cuJFq1aqRK1cuAgICaNSoEcuXLze12bFjB59//jktWrTgnXfe4fLlW59goERIREREPCYuLo6jR4+musXFxZnaRUVFERwc7FoOCQlx/XQXwMWLFyldujQDBgxgwYIFxMXF8emnn95y/0qERERExMyNFaHp06dTv379VLfp082Xab/R1X5stqs/BZI9e3Y+//xz7r//fry9venatSvr1q27ZaiaIyQiIiIe07lzZ9q0aZNqfWBgoGk5NDSUzZs3u5ajoqIICbn6q8nHjx9n48aNtG/fHnAmTt7et05zVBESERERE3eeNRYYGEihQoVS3a5PhGrUqEFkZCQxMTEkJCSwcuVKatWq5bo/W7ZsjB49miNHjmAYBjNnzjRdA/FmlAiJiIjIPS80NJTw8HA6depE69atad68OWFhYXTv3p3t27eTO3du3nnnHV5++WUaN26MYRh06dLlltu95U9s3Iv0ExtiVfqJDf3EhlXpJzbc+xMbJT6McNu+9vcPd9u+bkQVIREREbEsTZYWERERs0w3VnTnVBESERERy1IiJCIiIpaloTERERExud0fQ83MVBESERERy1JFSERERMxUERIRERHJ+lQREhERERPNERIRERGxAFWERERExEwVIREREZGsTxUhERERMVNFSERERCTrU0VIRERETHTWmIiIiIgFKBESERERy1IiJCIiIpalOUIiIiJipjlCIiIiIlmfEiERERGxLA2NiYiIiIlOnxcRERGxgExZEXq2XHNPd8FjUmLjPN0Fj7LnyO7pLognJSd7ugcelXLhgqe74DF2372e7oK1qCIkIiIikvVlyoqQiIiIZCBVhERERESyPlWERERExERnjYmIiIhYgCpCIiIiYqaKkIiIiEjWp4qQiIiImGiOkIiIiIgFqCIkIiIiZqoIiYiIiGR9qgiJiIiImSpCIiIiIlmfEiERERGxLA2NiYiIiIlOnxcRERGxAFWERERExEwVIREREZGsTxUhERERMVNFSERERCTrU0VIRERETHTWmIiIiIgFqCIkIiIiZqoIiYiIiGR9qgiJiIiIieYIiYiIiFiAKkIiIiJipoqQiIiISNanipCIiIiYqSIkIiIicm9ZvHgxTZs2pUGDBsycOfOm7dauXUu9evXStE1VhEREROSed+rUKSIiIpg/fz6+vr506NCBqlWrUqJECVO706dP88EHH6R5u6oIiYiIiInNjbe02rhxI9WqVSNXrlwEBATQqFEjli9fnqrd4MGD6dWrV5q3q4qQiIiIeExcXBxxcXGp1gcGBhIYGOhajoqKIjg42LUcEhLCtm3bTI/56quvePjhhylXrlya969ESERERMzcOFl6+vTpTJgwIdX6Xr160bt376tdMlJ3yma7WlPat28fK1eu5Msvv+TkyZNp3r8SoSsqN3iELoNa4+PnzcFdxxj36gziL1y6Ydt+4ztzePdx5n26CgDfbD688kEHSpYvit1uY+/Wg3wy4BsSLyW5M4TbVqVJebq+28EZ8/YjjH1xMvHnE9LUxm638crHXQirVQqATcv+4POBswAoV/thXvzwGby8vYg7c57PXp/BgW3/uD2+21GlQVm6DG2Lj683B3cdJaLPdOLP3/j4vzahC4f2HGPehJXAleM/uiMPViiK3W5nz5YDfPLGrHv++F/L8vE3CqPLsPbO5/mOo0T0mnrz+Cd249CuY8wbf7Uknz3InzHL3mTsK1P56/dDbur1navStCLdRnbEx8+Hg9sO89ELE1O/9m/SZsi3r1GwRD5Xu3zFQti2bhdDW39AkdKFCJ/0Ev45smEYBl+8OZPNK/90d3i3VKVxebqMeMr1vhbR4/PU8d+kTc77stP7P10pXq4Ily5eZuVXP7FoovO18GCl4vQY8xzZAvywe9n59qPFrJ69wRMhZiqdO3emTZs2qdZfWw0CCA0NZfPmza7lqKgoQkJCXMvLly8nOjqadu3akZSURFRUFB07dmTWrFn/un/NEQKC8uSg38edeLfrZLpXH87JQ6fpMiT1QSlcMh/vz+9LzZaVTOs7hDfB7uXFK3XepWftEfhm8+WpVxu7q/t3JChvTl7//CXeeWoc3R55nRMHT9HtvQ5pblP/mZoUfjA/L1UYQI9KbxJWqzQ121UlINCfod+G8/nAWfSoNJDxvacxaFYffHzv3Zw7KE8O+k14nhGdJ/JC1SGcOHSaLkPbpmpX+MF8jPruNWq2Nh//p/s1w8vLi5413+Hlx4fjl82Xp8KbuKv7d03x56Tfp90Y8dwnvFDpLU4ciqbL20+malf4wfyMWtyfmm0qm9ZXbhjGx2uGUujB/O7q8l0JyhvI61N78k77MXQt/arzdT3qmTS3GfF/H9Gj4hv0qPgGY1/8jAvnLjK+1xQA+nzyAsunraZHxTcY0+1TBs/ph93r3vqYCcqbk9cmv8iIDuN4IewNTh6Mouu7T6W5zUujnyXh4iVeLN+fvrWGUblROao2qQDAkG9eZcaI/9Kz6lsMbvUhL33wDAUeCHV7jOnBZrjvFhgYSKFChVLdrk+EatSoQWRkJDExMSQkJLBy5Upq1arlur9Pnz6sWLGChQsXMnnyZEJCQm6ZBIESIQAq1nmYfX8c5viBKAC+//In6ravkqpd8251WDU7kvWLtpjW74j8i2/GLsUwDBwOg7+3HyGkcG639P1OVWoQxt7NBzi+31k+/H7SD9R7+rE0t/HyspMtux8+fj74+Hnj7etN0qUkCpbIx8XYeP5YsxOAI3uPEx+XQOlqJd0Y3e2pWLcM+34/5Dr+S6aupd6TVVO1a9GtLqtmbWD9d+bjvz1yH7M/WuI6/vu3/UNIoTxu6Xt6sHz89cuwb+tBjv99CoAlX6ym3pPVUrVr8WJ9Vs1cz/oFv5nWt+rxBB/1mELMiXPu6O5dq9QwjH2//c2xK6/rxRNXUr9jzdtu4+3jTf8vezEx/Euij54BwO5lJ+d92QEIyOlP4qXEjA7ntlV8oix7txxwHe/vP/+Beh0eS3ObkhWK8eOsn3E4DJKTUti07A8eb1sFHz8fvn5vPr+vdr73nT4WQ+yZCwRnotfCvS40NJTw8HA6depE69atad68OWFhYXTv3p3t27ff8XY98jV91KhRDBw40BO7vqG8Be8j+thZ1/Lp42fJHuhPQI5spuGxiQO/AaD8leGg/9m6drfr/yGFctP6pXr8p9/Nr29wLwgulNv15gUQfTSG7EEBBOT0d5WI/63Nyq/WUbNdVWYd+gQvbztbftjOL0u2EpDTH/8c2aj0RFm2/LCdBysV5/6HC5E7fy53h5hmwdcd/+jjZ8keGEBAzmym4ZFPB8wGoHyt0qbHb12zy/X/kEK5adPjCT4On5HBvU4/ij830UdjXMvRx85eeZ5fF//rXwNQvvbDpscPbjvWPR1NJ8GF8xJ99LRrOfromdSv/TS0adytHmeOx7Dhu02uduN7TWH0j8No27c5uUKCGPl0BI4Uh5siS5vgQnk4fe3xvuF7383b7Pntb+p3fJydG/fh4+fN420qk5yUQtLlJFZ8uc71mCbd6uKfw4/dv/7lvuDS0z16QcUWLVrQokUL07rPP/88VbtChQqxevXqNG0zwxOhN998M9W61atXExsbC8D777+f0V24Jbv9xifwpThu7wVcIqwIQ6b3YPEXa9m06s6zU3ew2W9cDLz2Tevf2jw7pB2xp+N4qlAPfP19Gf7ffrTr25R545YyrN1HdHnn/3hhVEe2r9/DH2t2kpyYnCFxpIebxZlym2/gJcoVYeiMniyasoZNK7fd+gH3CMV/k9f/PfYBnl5u9n537Ws/LW3a9W1GxEuTXMs+fj4M/iac0V0+4dclWyldtSTvLBrI3t/+Nn2h8rSbvt+nIf6UFAeTB8yk+6iOfPrre8ScPMfWH3fw8HUV7/97vQWtX2nE4JYfZqq5claV4UNjuXLlYu3atZQqVYoqVapQpUoVAgICXP+/F0QdjSF3aJBrOW/+XJw/e5HL8Wkv69Zu/Sgj//sq00YsYM641Nc1uNdEHzltqtLkLZibuJgLXIq/nKY2j7euzIov15GclEJ8XAKrZqynXO2HsdlsXLp4iTcavMvLj77Jp+HTKfBAqKvEfC+KPnrm7o9/28q8P78fU9+ez5yIpRnRzQyj+GPInS+Xazlvgfs4f/bCbcWfmUT9c5rc+e5zLd/otX+rNg+UL4qXtxfb1l2tBhZ7pDB+AX78umQrALt//YvDO49Qquq9NSwedeSM+XgXzM35mAtcvjb+f2kTEOjPF2/N5qVKA3mz2SgMh8P1/ubj683Ar16h7v9VJ7zOcA5sv7dPEvlXhhtvHpbhidCAAQMYO3YsS5cupUCBArRp04agoCDatGlzw1ninrB17W5KVSpGgeLO2edNn69F5PK0n+nweIuK9Bj5fwx68mPWzv/t1g+4B2xZtZ3SVUpS4MrZH81frE/k4i1pbvPX74eo1d45j8LL24vqLSqyZ9N+DMPg3YX9KVmxGAA121UlOSnlnj5rbMuaXZR6tLjr+DfrUpvIZX+k+fGPt6zIy+934K12Eaydt+nWD7jHWD7+H3dQqnJx16TWZl3rErnkdw/3KuNsWfknpauVdJ351bxHQyIX/nZbbcJqP8wfa3aYHnNs/0myBwXwcPUHAchfPJQipQuy//eDGRnObdvyw3ZKVSlx9Xh3r0/k91vS3KZ59/p0GtoegFwhgTTpWpc1czYCMGhWHwJy+tO3ztucOnwayRzcMkeoevXqlC5dmmHDhrF27VpSUlLcsds0iz19nohXv2LQFy/i7evFiUPRjHnlS0qWK8Kr456jV933/vXxzw9ujc1m49Vxz7nW7dr0N58O+Caju37HzkXHMab7JIZ88yo+vt4c//sUo7tOpGTFYvSb1J2XK7910zYAn70+g1fGdeaL7WNISXHwx+odzBm9GID3O00g/LPuePt6E3PiHMPb39tzKGJPn2dsr2kM/rIH3r7enDgYzeiXv6Bk+fvp+3FnXqn9zr8+vsuQtmCz0ffjzq51u37dzyf9b322wr1A8Z9nbM+pDP6q55X4oxj90hRKVihK3/FdeOXxYZ7uYro6Fx3HmK6fMmTua67X9YedJ/BgpeL0+/xlelR846Zt/qdQyfycPBRl2u7F2HiGtx1Nz3Fd8M3mS3JSMuN6TObEgXurGhwbHcdHL05iyOxXncf7QBSjuznf+8Indqdn1bdu2gbgmw8X0X/qy0zaMgqbzcaMd+ezb8sBHq7+INWbV+LIvuNErLn6nPli0Gy2/HBvT5W4Eds9UKlxF5txoysUZaC5c+eybNkypk6desfbaBLcIx17lLmkxKa++qaV2HNk93QXxJOS7925Zu6QcuGCp7vgMXZfX093waNWXHLvCTjle0e4bV9/jA93275uxO1njT355JM8+WTqa3SIiIjIPcJCFSFdR0hEREQs69693K+IiIh4hJXmCKkiJCIiIpalREhEREQsS0NjIiIiYqahMREREZGsTxUhERERMdFkaRERERELUEVIREREzFQREhEREcn6VBESERERM1WERERERLI+VYRERETERGeNiYiIiFiAKkIiIiJipoqQiIiISNanipCIiIiY2AzrlIRUERIRERHLUkVIREREzKxTEFJFSERERKxLiZCIiIhYlobGRERExEQXVBQRERGxAFWERERExEwVIREREZGsTxUhERERMdEcIRERERELUEVIREREzFQREhEREcn6VBESERERE80REhEREbEAVYRERETETBUhERERkawvU1aEks+c8XQXxENSzp3zdBdEPMbm7ePpLniMIzHR012wFM0REhEREbGATFkREhERkQxkWKckpIqQiIiIWJYSIREREbEsDY2JiIiIiSZLi4iIiFiA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nTh48CA2m40aNWowatQoIiMjGT16NHXq1KFPnz63tb30OGsMoEqTCnQd2REfX2+O/32KDztPIH/xEPp9/jI9Kr5x0zbnz14AoPeEbpw5cZZZ7803bbdcnTJ0/+BZfLP5kpyUzNcj/svG615o9wLFb934rRw7ZN740+OsMYDKjcvT9d2nXLGN7jqRfMVC6DepOy9Xfuumbc6fvUjO3Dl4ZVxnSlYoRkqKgz9W72BS/5mkJKdQtmYpXv6oE96+3sScOMe4nlM4eTAqXfqcXmeNQeY8/u4+a6xuow/ctq81Kwa4bV834tbT5w8cOEBcXBzly5dny5YtnD9/njp16tz2dtIrERIRyUzSKxHKjNIzEcqMlAhlHLdeULF48eKu/1eqVMmduxYREZG08vzUHbex7HWERERERCz9ExsiIiKSmu0eOJvLXVQREhEREctSRUhERETMLHRBbFWERERExLJUERIRERETzRESERERsQBVhERERMTMOgUhVYRERETEulQREhERETPNERIRERHJ+lQREhERERObdQpCqgiJiIiIdSkREhEREcvS0JiIiIiYabK0iIiISNanipCIiIiY2PSjqyIiIiJZnypCIiIiYqY5QiIiIiJZnypCIiIiYmadgpAqQiIiImJdqgiJiIiIiU1zhERERESyPlWERERExEwVIREREZGsTxUhERERMdOVpUVERESyPlWERERExERnjYmIiIhYgBIhERERsSwNjYmIiIiZhsZERERE7i2LFy+madOmNGjQgJkzZ6a6/4cffqBVq1a0bNmSnj17Ehsbe8ttKhESERERM8Nw3y2NTp06RUREBLNmzWLhwoXMmTOH/fv3u+6/cOECw4cPZ/LkySxatIiHHnqI8ePH33K7GhoTEckkjOQkT3dBxGM2btxItWrVyJUrFwCNGjVi+fLl9OrVC4CkpCSGDx9OaGgoAA899BCLFy++5XaVCImIiIiZGy+oGBcXR1xcXKr1gYGBBAYGupajoqIIDg52LYeEhLBt2zbX8n333ccTTzwBwKVLl5g8eTLPPffcLfevREhEREQ8Zvr06UyYMCHV+l69etG7d2/XsnGDYTSbzZZq3fnz5+nZsyelSpWiTZs2t9y/EiERERExcecFFTt37nzDhOXaahBAaGgomzdvdi1HRUUREhJiahMVFUW3bt2oVq0ab731Vpr2r0RIREREPOb6IbCbqVGjBuPHjycmJgZ/f39WrlzJiBEjXPenpKTQo0cPmjRpQs+ePdO8fyVCIiIiYnYPXkcoNDSU8PBwOnXqRFJSEu3btycsLIzu3bvTp08fTp48ya5du0hJSWHFihUAPPLII7z33nv/ul2bcaNBt3tcA/uTnu6CiIiI26xyzHXr/hqXG+K2fS3/c8StG2UgVYRERETELPPVSO6YLqgoIiIilqWKkIiIiJipIiQiIiKS9akiJCIiImZuvLK0p6kiJCIiIpalREhEREQsS0NjIiIiYuLOn9jwNFWERERExLJUERIREREzVYREREREsj5VhERERMTMoYqQiIiISJanipCIiIiYaY6QiIiISNanipCIiIiYqSIkIiIikvWpIiQiIiJmqgiJiIiIZH2qCImIiIiZriMkIiIikvWpIiQiIiJmhsPTPXAbVYRERETEspQIiYiIiGVpaExERETMdPq8iIiISNanipCIiIiYWej0eUsnQlWaVqTbyI74+PlwcNthPnphIvHnE9LUZsi3r1GwRD5Xu3zFQti2bhdDW39AkdKFCJ/0Ev45smEYBl+8OZPNK/90d3i3pPitG7+VYwfFr/itHb+Y2Qwj8w0ENrA/edfbCMobyOc7xhL++GCO7T/JC6OewT+nP+NfmXJbbQAefPQBhs59jfCaQ4g+eoYxq4ezasY6VkxbwwPli/LRmrdpm7cLjpR753RExW/d+K0cOyh+xZ8541/lmHvX27gdTQq/6rZ9LTvysdv2dSOWnSNUqWEY+377m2P7TwKweOJK6nesedttvH286f9lLyaGf0n00TMA2L3s5LwvOwABOf1JvJSY0eHcNsVv3fitHDsofsVv7fglNbcNja1fv55y5coRGBjId999x7Zt2yhTpgzt2rVzVxdMggvnJfroaddy9NEzZA8KICCnv6tEmpY2jbvV48zxGDZ8t8nVbnyvKYz+cRht+zYnV0gQI5+OuKe+EYHit3L8Vo4dFL/it3b8aZb5BovumFsSoffee4/du3cTERHBuHHj2L59O/Xr12fVqlXs3r2bwYMHu6MbJna77Ybrr33SpqVNu77NiHhpkmvZx8+Hwd+EM7rLJ/y6ZCulq5bknUUD2fvb365vDfcCxW/d+K0cOyh+xW/t+CU1twyNbdiwgenTpxMcHMzatWuZOHEiHTt25JNPPmHDhg3u6EIqUf+cJne++1zLeQvmJi7mApfiL6e5zQPli+Ll7cW2dbtcbYo9Uhi/AD9+XbIVgN2//sXhnUcoVbVkRod0WxS/deO3cuyg+BW/teNPM8Nw383D3JIIZcuWjTNnnBlxnjx5iI+PByAhIQFvb8+cuLZl5Z+UrlbSNfu/eY+GRC787bbahNV+mD/W7DA95tj+k2QPCuDh6g8CkL94KEVKF2T/7wczMpzbpvitG7+VYwfFr/itHb+k5pYspFevXrRv355mzZpRvHhxnnvuOapXr87PP//MCy+84I4upHIuOo4xXT9lyNzX8PH15vjfp/iw8wQerFScfp+/TI+Kb9y0zf8UKpmfk4eiTNu9GBvP8Laj6TmuC77ZfElOSmZcj8mcOHDK3SH+K8Vv3fitHDsofsVv7fjTzJFJ5zbdAbedPn/kyBF++OEHDh8+TEpKCnnz5qVu3bqEhYXd9rbS4/R5ERGRzMLtp8/nf8Vt+1p24hO37etG3DYuVbhwYbp06eKu3YmIiMidugfm7riLZa8jJCIiImLpn9gQERGRG1BFSERERCTrUyIkIiIilqWhMRERETFzaGhMREREJMtTRUhERERMDMM6F1RURUhEREQsSxUhERERMdMcIREREZGsTxUhERERMdMFFUVERESyPlWERERExMyhs8ZEREREsjxVhERERMRMc4REREREsj4lQiIiImJiOBxuu92OxYsX07RpUxo0aMDMmTNv2m7AgAHMnz8/TdtUIiQiIiL3vFOnThEREcGsWbNYuHAhc+bMYf/+/ana9OjRg+XLl6d5u0qERERExMww3HdLo40bN1KtWjVy5cpFQEAAjRo1SpXwLF68mPr169OkSZM0b1eTpUVERMRj4uLiiIuLS7U+MDCQwMBA13JUVBTBwcGu5ZCQELZt22Z6zAsvvADAli1b0rx/JUIiIiLiMdOnT2fChAmp1vfq1YvevXu7lo0bVI9sNttd71+JkIiIiJi58UdXO3fuTJs2bVKtv7YaBBAaGsrmzZtdy1FRUYSEhNz1/pUIiYiIiMdcPwR2MzVq1GD8+PHExMTg7+/PypUrGTFixF3vX5OlRURExMxwuO+WRqGhoYSHh9OpUydat25N8+bNCQsLo3v37mzfvv2OQ7UZNxp0u8c1sD/p6S6IiIi4zSrHXLfur1G2Z9y2rxWXbn49IHfQ0JiIiIiYGG6cI+RpGhoTERERy1JFSERERMxuY+5OZqeKkIiIiFiWKkIiIiJiojlCIiIiIhagipCIiIiYaY6QiIiISNaXKS+oKCIiIpIeVBESERERy1IiJCIiIpalREhEREQsS4mQiIiIWJYSIREREbEsJUIiIiJiWUqERERExLKUCImIiIhlKRESERERy1IidBsWL15M06ZNadCgATNnzvR0d9zuwoULNG/enKNHj3q6K243YcIEmjVrRrNmzfjwww893R23+/jjj2natCnNmjVj2rRpnu6Ox3zwwQcMHDjQ091wu06dOtGsWTNatWpFq1at+PPPPz3dJbdavXo1bdu2pXHjxrz77rue7o6kM/3oahqdOnWKiIgI5s+fj6+vLx06dKBq1aqUKFHC011ziz///JPBgwdz6NAhT3fF7TZu3MjPP//MggULsNlsvPDCC6xatYoGDRp4umtusWnTJn755RcWLVpEcnIyTZs2pXbt2hQvXtzTXXOryMhIFixYQJ06dTzdFbcyDIMDBw6wdu1avL2t95Fx5MgRhg0bxty5c8mTJw+dO3dm3bp11K5d29Ndk3SiilAabdy4kWrVqpErVy4CAgJo1KgRy5cv93S33Obbb79l2LBhhISEeLorbhccHMzAgQPx9fXFx8eHBx54gOPHj3u6W25TpUoVvvrqK7y9vTlz5gwpKSkEBAR4ultude7cOSIiIujRo4enu+J2Bw4cwGaz0b17d1q2bMnXX3/t6S651apVq2jatCn58uXDx8eHiIgIypUr5+luSTqyXnp/h6KioggODnYth4SEsG3bNg/2yL3ee+89T3fBY0qWLOn6/6FDh1i6dCnffPONB3vkfj4+PvznP/9h6tSpNG7cmNDQUE93ya2GDh1KeHg4J06c8HRX3C4uLo7q1aszfPhwLl26RKdOnShWrBiPPfaYp7vmFocPH8bHx4du3boRHR1N3bp16du3r6e7JelIFaE0Mgwj1TqbzeaBnoin/PXXX3Tt2pUBAwZQtGhRT3fH7fr06UNkZCQnTpzg22+/9XR33Gbu3Lnkz5+f6tWre7orHlGhQgU+/PBDAgICyJ07N+3bt2fdunWe7pbbpKSkEBkZyejRo/n222/Zvn07CxYs8HS3JB0pEUqj0NBQTp8+7VqOioqy5DCRVW3ZsoXnn3+e1157jTZt2ni6O271999/s3v3bgD8/f1p2LAhe/fu9XCv3Gfp0qVs2LCBVq1a8Z///IfVq1czcuRIT3fLbTZv3kxkZKRr2TAMS80Vyps3L9WrVyd37txky5aN+vXrW2o0wAqUCKVRjRo1iIyMJCYmhoSEBFauXEmtWrU83S1xgxMnTvDKK68wZswYmjVr5unuuN3Ro0cZPHgwiYmJJCYm8uOPP1KpUiVPd8ttpk2bxvfff8/ChQvp06cP9erV46233vJ0t9zm/PnzfPjhh1y+fJkLFy6wYMECy5woAFC3bl1+/vln4uLiSElJYf369ZQpU8bT3ZJ0ZJ20/i6FhoYSHh5Op06dSEpKon379oSFhXm6W+IGX3zxBZcvX2bUqFGudR06dODpp5/2YK/cp3bt2vz555+0bt0aLy8vGjZsaMmE0Krq1q3rOv4Oh4OOHTtSoUIFT3fLbcqVK8cLL7xAx44dSUpK4rHHHqNdu3ae7pakI5txo8kvIiIiIhagoTERERGxLCVCIiIiYllKhERERMSylAiJiIiIZSkREhEREctSIiQiIiKWpURIRERELEuJkIikSZMmTahVqxZ//fWXp7siIpJulAiJSJp8//33FC1alBUrVni6KyIi6UaJkIikiZeXF5UqVbLUD66KSNan3xoTkTS5dOkSS5YsQb/KIyJZiSpCIpImERERhIaGcuTIES5evOjp7oiIpAslQiJyS7///jvLly9n/Pjx5MyZk3379nm6SyIi6UKJkIj8q8uXL/Pmm2/y9ttvkytXLkqVKqV5QiKSZSgREpF/9fHHH1OhQgXq1KkDQKlSpdizZ49nOyUikk6UCInITW3bto3ly5fz1ltvudaVLl1aFSERyTJshk4BEREREYtSRUhEREQsS4mQiIiIWJYSIREREbEsJUIiIiJiWUqERERExLKUCImIiIhlKRESERERy1IiJCIiIpb1/+N4MMUUD85zAAAAAElFTkSuQmCC\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
+ "execution_count": 9,
+ "id": "1ee2c09f",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
+ "outputs": [],
"source": [
"# visual representation of grid search\n",
"# uses seaborn heatmap, you can also do this with matplotlib imshow\n",
@@ -2088,8 +1584,10 @@
},
{
"cell_type": "markdown",
- "id": "4dd39506",
- "metadata": {},
+ "id": "206f6d24",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## scikit-learn implementation\n",
"\n",
@@ -2108,515 +1606,13 @@
},
{
"cell_type": "code",
- "execution_count": 11,
- "id": "d9dbb807",
- "metadata": {},
- "outputs": [
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "/opt/homebrew/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n",
- " warnings.warn(\n"
- ]
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Learning rate = 1e-05\n",
- "Lambda = 1e-05\n",
- "Accuracy score on test set: 0.18333333333333332\n",
- "\n"
- ]
- },
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "/opt/homebrew/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n",
- " warnings.warn(\n"
- ]
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Learning rate = 1e-05\n",
- "Lambda = 0.0001\n",
- "Accuracy score on test set: 0.18611111111111112\n",
- "\n"
- ]
- },
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "/opt/homebrew/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n",
- " warnings.warn(\n"
- ]
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Learning rate = 1e-05\n",
- "Lambda = 0.001\n",
- "Accuracy score on test set: 0.13055555555555556\n",
- "\n"
- ]
- },
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "/opt/homebrew/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n",
- " warnings.warn(\n"
- ]
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Learning rate = 1e-05\n",
- "Lambda = 0.01\n",
- "Accuracy score on test set: 0.24444444444444444\n",
- "\n"
- ]
- },
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "/opt/homebrew/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n",
- " warnings.warn(\n"
- ]
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Learning rate = 1e-05\n",
- "Lambda = 0.1\n",
- "Accuracy score on test set: 0.23333333333333334\n",
- "\n"
- ]
- },
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "/opt/homebrew/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n",
- " warnings.warn(\n"
- ]
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Learning rate = 1e-05\n",
- "Lambda = 1.0\n",
- "Accuracy score on test set: 0.12777777777777777\n",
- "\n"
- ]
- },
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "/opt/homebrew/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n",
- " warnings.warn(\n"
- ]
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Learning rate = 1e-05\n",
- "Lambda = 10.0\n",
- "Accuracy score on test set: 0.1527777777777778\n",
- "\n"
- ]
- },
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "/opt/homebrew/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n",
- " warnings.warn(\n"
- ]
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Learning rate = 0.0001\n",
- "Lambda = 1e-05\n",
- "Accuracy score on test set: 0.9111111111111111\n",
- "\n"
- ]
- },
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "/opt/homebrew/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n",
- " warnings.warn(\n"
- ]
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Learning rate = 0.0001\n",
- "Lambda = 0.0001\n",
- "Accuracy score on test set: 0.8888888888888888\n",
- "\n"
- ]
- },
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "/opt/homebrew/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n",
- " warnings.warn(\n"
- ]
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Learning rate = 0.0001\n",
- "Lambda = 0.001\n",
- "Accuracy score on test set: 0.8722222222222222\n",
- "\n"
- ]
- },
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "/opt/homebrew/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n",
- " warnings.warn(\n"
- ]
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Learning rate = 0.0001\n",
- "Lambda = 0.01\n",
- "Accuracy score on test set: 0.8305555555555556\n",
- "\n"
- ]
- },
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "/opt/homebrew/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n",
- " warnings.warn(\n"
- ]
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Learning rate = 0.0001\n",
- "Lambda = 0.1\n",
- "Accuracy score on test set: 0.8888888888888888\n",
- "\n"
- ]
- },
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "/opt/homebrew/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n",
- " warnings.warn(\n"
- ]
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Learning rate = 0.0001\n",
- "Lambda = 1.0\n",
- "Accuracy score on test set: 0.8805555555555555\n",
- "\n"
- ]
- },
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "/opt/homebrew/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n",
- " warnings.warn(\n"
- ]
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Learning rate = 0.0001\n",
- "Lambda = 10.0\n",
- "Accuracy score on test set: 0.8944444444444445\n",
- "\n"
- ]
- },
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "/opt/homebrew/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n",
- " warnings.warn(\n"
- ]
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Learning rate = 0.001\n",
- "Lambda = 1e-05\n",
- "Accuracy score on test set: 0.975\n",
- "\n"
- ]
- },
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "/opt/homebrew/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n",
- " warnings.warn(\n"
- ]
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Learning rate = 0.001\n",
- "Lambda = 0.0001\n",
- "Accuracy score on test set: 0.9777777777777777\n",
- "\n"
- ]
- },
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "/opt/homebrew/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n",
- " warnings.warn(\n"
- ]
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Learning rate = 0.001\n",
- "Lambda = 0.001\n",
- "Accuracy score on test set: 0.9805555555555555\n",
- "\n"
- ]
- },
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "/opt/homebrew/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n",
- " warnings.warn(\n"
- ]
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Learning rate = 0.001\n",
- "Lambda = 0.01\n",
- "Accuracy score on test set: 0.9861111111111112\n",
- "\n"
- ]
- },
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "/opt/homebrew/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n",
- " warnings.warn(\n"
- ]
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Learning rate = 0.001\n",
- "Lambda = 0.1\n",
- "Accuracy score on test set: 0.9805555555555555\n",
- "\n"
- ]
- },
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "/opt/homebrew/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n",
- " warnings.warn(\n"
- ]
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Learning rate = 0.001\n",
- "Lambda = 1.0\n",
- "Accuracy score on test set: 0.9777777777777777\n",
- "\n"
- ]
- },
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "/opt/homebrew/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n",
- " warnings.warn(\n"
- ]
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Learning rate = 0.001\n",
- "Lambda = 10.0\n",
- "Accuracy score on test set: 0.9444444444444444\n",
- "\n"
- ]
- },
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "/opt/homebrew/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:692: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (100) reached and the optimization hasn't converged yet.\n",
- " warnings.warn(\n"
- ]
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Learning rate = 0.01\n",
- "Lambda = 1e-05\n",
- "Accuracy score on test set: 0.9861111111111112\n",
- "\n",
- "Learning rate = 0.01\n",
- "Lambda = 0.0001\n",
- "Accuracy score on test set: 0.9888888888888889\n",
- "\n",
- "Learning rate = 0.01\n",
- "Lambda = 0.001\n",
- "Accuracy score on test set: 0.9888888888888889\n",
- "\n",
- "Learning rate = 0.01\n",
- "Lambda = 0.01\n",
- "Accuracy score on test set: 0.9861111111111112\n",
- "\n",
- "Learning rate = 0.01\n",
- "Lambda = 0.1\n",
- "Accuracy score on test set: 0.9888888888888889\n",
- "\n",
- "Learning rate = 0.01\n",
- "Lambda = 1.0\n",
- "Accuracy score on test set: 0.9722222222222222\n",
- "\n",
- "Learning rate = 0.01\n",
- "Lambda = 10.0\n",
- "Accuracy score on test set: 0.9527777777777777\n",
- "\n",
- "Learning rate = 0.1\n",
- "Lambda = 1e-05\n",
- "Accuracy score on test set: 0.8805555555555555\n",
- "\n",
- "Learning rate = 0.1\n",
- "Lambda = 0.0001\n",
- "Accuracy score on test set: 0.9\n",
- "\n",
- "Learning rate = 0.1\n",
- "Lambda = 0.001\n",
- "Accuracy score on test set: 0.9083333333333333\n",
- "\n",
- "Learning rate = 0.1\n",
- "Lambda = 0.01\n",
- "Accuracy score on test set: 0.9138888888888889\n",
- "\n",
- "Learning rate = 0.1\n",
- "Lambda = 0.1\n",
- "Accuracy score on test set: 0.9055555555555556\n",
- "\n",
- "Learning rate = 0.1\n",
- "Lambda = 1.0\n",
- "Accuracy score on test set: 0.9138888888888889\n",
- "\n",
- "Learning rate = 0.1\n",
- "Lambda = 10.0\n",
- "Accuracy score on test set: 0.8305555555555556\n",
- "\n",
- "Learning rate = 1.0\n",
- "Lambda = 1e-05\n",
- "Accuracy score on test set: 0.20277777777777778\n",
- "\n",
- "Learning rate = 1.0\n",
- "Lambda = 0.0001\n",
- "Accuracy score on test set: 0.09722222222222222\n",
- "\n",
- "Learning rate = 1.0\n",
- "Lambda = 0.001\n",
- "Accuracy score on test set: 0.25555555555555554\n",
- "\n",
- "Learning rate = 1.0\n",
- "Lambda = 0.01\n",
- "Accuracy score on test set: 0.10555555555555556\n",
- "\n",
- "Learning rate = 1.0\n",
- "Lambda = 0.1\n",
- "Accuracy score on test set: 0.16111111111111112\n",
- "\n",
- "Learning rate = 1.0\n",
- "Lambda = 1.0\n",
- "Accuracy score on test set: 0.09166666666666666\n",
- "\n",
- "Learning rate = 1.0\n",
- "Lambda = 10.0\n",
- "Accuracy score on test set: 0.10555555555555556\n",
- "\n",
- "Learning rate = 10.0\n",
- "Lambda = 1e-05\n",
- "Accuracy score on test set: 0.08888888888888889\n",
- "\n",
- "Learning rate = 10.0\n",
- "Lambda = 0.0001\n",
- "Accuracy score on test set: 0.11388888888888889\n",
- "\n",
- "Learning rate = 10.0\n",
- "Lambda = 0.001\n",
- "Accuracy score on test set: 0.08888888888888889\n",
- "\n",
- "Learning rate = 10.0\n",
- "Lambda = 0.01\n",
- "Accuracy score on test set: 0.09166666666666666\n",
- "\n",
- "Learning rate = 10.0\n",
- "Lambda = 0.1\n",
- "Accuracy score on test set: 0.1\n",
- "\n",
- "Learning rate = 10.0\n",
- "Lambda = 1.0\n",
- "Accuracy score on test set: 0.1111111111111111\n",
- "\n",
- "Learning rate = 10.0\n",
- "Lambda = 10.0\n",
- "Accuracy score on test set: 0.07777777777777778\n",
- "\n"
- ]
- }
- ],
+ "execution_count": 10,
+ "id": "d842d414",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
+ "outputs": [],
"source": [
"from sklearn.neural_network import MLPClassifier\n",
"# store models for later use\n",
@@ -2638,39 +1634,23 @@
},
{
"cell_type": "markdown",
- "id": "214af3ab",
- "metadata": {},
+ "id": "b09841d2",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Visualization"
]
},
{
"cell_type": "code",
- "execution_count": 12,
- "id": "d57415ac",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkIAAAJgCAYAAABmwww9AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAAsTAAALEwEAmpwYAABhVklEQVR4nO3deZxN9R/H8fe5c2eGwVhnxl5klz1CUUiyZClKyholW1HSQkRKCJUWFUXIUtnLllIYlAo/2QpFlhkGgzEzdzm/P66G04y1mXvNnNfz8ZgH59zvPefzmbPc73zO95xrmKZpCgAAwIYcgQ4AAAAgUOgIAQAA26IjBAAAbIuOEAAAsC06QgAAwLboCAEAANtyBjoAwG5eeeUV/fjjj5KkP/74Q0WKFFG2bNkkSbNnz075/+X06NFDgwYNUqlSpS7a5s0339QNN9yg1q1b/+e4/9G3b19t3LhR3333nbJnz55uywWAQDB4jhAQOA0bNtSbb76pSpUqBTqUK3LkyBG1atVKVapU0Z133qmHHnoo0CEBwH/CpTHgOvL222/r0Ucf1b333qtnnnlGR48eVa9evfTggw+qYcOG6tixo44dOybJ14naunWrNmzYoPbt22vgwIFq3bq1mjVrpvXr10uSnnvuOU2ePFmSVKlSJb399ttq3769GjZsqE8++USS5PF49Nprr6lx48a67777NGzYMHXs2DHN+ObMmaM6deqoTZs2mjZtmi78O2rz5s1q166dWrRooTZt2ig6OvqS88uWLau4uLiU9/8zvWHDBrVs2VLt27dXy5YtlZycrFdeeUXt2rVTs2bN1LRpU23atEmSdObMGT3//PNq0qSJmjVrpnHjxikhIUE1a9bU3r17U5bdtWtXrVy5Mj02EYAsho4QcJ35+++/NW/ePI0dO1ZLlixR1apVNXv2bH3zzTfKli2bFixYkOo9W7ZsUbdu3TR//ny1bdtWEydOTNUmOTlZefPm1axZs/TWW2/pjTfeUFJSkubOnatt27Zp8eLFmjVrlvbv359mXG63W3PmzFHLli3VsGFDHTt2TN9//70kyeVyqXfv3urdu7cWL16sESNG6NVXX1VycnKa871e7yV/B7t379Ybb7yhhQsXatu2bYqJidHs2bP11VdfqU2bNvrwww8lSW+99ZaSkpL01Vdfaf78+fr555+1detWtW7dWnPnzpUk/fXXX9q7d68aNGhwVdsBgD0wRgi4zlStWlVOp+/Q7Ny5s3766Sd9/PHH2rdvn3bv3q0qVaqkek/hwoVVvnx5SVKFChU0b968NJfdqFEjSVLFihWVnJyshIQErV69Wq1atVJoaKgk6cEHH9Snn36a6r3ffPONvF6v6tWrJ6fTqWbNmmnq1Km64447tGvXLjkcDt15552SpJtvvlmLFi3Stm3b0px/OYUKFVKRIkUkSdWqVVPu3LlTOmkbNmxQjhw5JEnr1q3T888/r6CgIAUFBWn69OmSpMjISD3yyCPq37+/Zs+erbZt2yooKOiy6wVgP3SEgOtMWFhYyv/HjBmjLVu26P7779ett94qt9uttIb1XTjA2jCMNNtISunsGIYhSTJNM6XT9Q+HI+1C8WeffabExETdfffdknwVptjYWO3evVtBQUEpy/zHrl27Ljq/ZMmSlnnJycmW6Qt/B999951Gjhyprl27qlGjRipZsqQWLlwoSXI6nZblHzp0SNmyZVOJEiVUtmxZffPNN1q0aFFKdQgA/o1LY8B1bM2aNercubNat26t/Pnza926dfJ4POm6jjvuuEMLFy5UcnKy3G53mtWkvXv3auPGjZo3b55WrVqlVatWac2aNbrllls0depUlSxZUoZhaO3atZKkbdu2qXPnzhed7/V6lS9fPm3dulWStGLFiovGt3btWjVo0EAdOnRQpUqVtHLlypTfQZ06dTRv3jx5vV4lJyerX79+KXfkdejQQaNHj1aVKlUUFRWVrr8zAFkHFSHgOta7d2+NHj1a7777roKCglS9enX99ddf6bqO++67T3v37lXr1q0VFhamokWLprot/rPPPtNdd92l4sWLW+b36dNHjz/+uAYMGKC3335br776qkaPHq3g4GC9/fbbCgkJuej8wYMHa/jw4QoPD1fdunUVERGRZnzt27fXM888o3vvvVdBQUG65ZZbtHz5cnm9XvXp00cjR45Uq1at5PF41KxZs5SKVYMGDTR48GC1b98+XX9fALIWbp8HbG7NmjU6duyYWrVqJcn3nKPQ0FANHDgwwJH9Nz///LOGDBmixYsXp7o8BwD/oCME2NyRI0f03HPP6dixY/J4PCpXrpyGDRumXLlyBTq0azZo0CBt3LhRr7/+umrVqhXocABcx+gIAQCATOP06dNq37693n//fRUtWtTy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ww+qV6+eypcvr7Jlyyr7hV3my7j77rv1yCOPaNq0aerbt68kaceOHRo8eLCaNm167dEDAK5Z/rzSK8959dRLDrldUrEi0qsvePW/HdJLYxz6crJXJYpLj3Yw9VBPh7ymVL2SqRef8nV2ejxi6rmRDrXq4htg3buLqUrlA5zUVcib19TAgYkaPiy73G6pUGGvBj13Vjt3OjRubHZN+vCMihX3qv1DSerbO4e8XunmSh717ecbB9SylUunThl6omcOeT1S6dJe9XzibICzSieZpz/7nxmmebGrpD779+/Xjh07tHPnTu3cuVM7duzQwYMHVbRoUS1btuyKV/Tjjz+qZs2aKdN79uzR/v37dccdd1x10N7DZa76PQCQ2Xl1kUE9NnDIcybQIQRUsSKH/Lq+khPG+W1de54a4Ld1peWyFaFixYqpWLFiaty4ccq8hIQE7dq166pWdGEnSJJKliypkiVLXtUyAACAH9ioInRNzxEKCwtT1apV0zkUAAAA/+IrNgAAgMX18KBDf+HJ0gAAwLaoCAEAACsqQgAAAFkfFSEAAGBFRQgAACDroyIEAAAsuGsMAADABqgIAQAAK9MIdAR+Q0UIAADYFhUhAABgxRghAACArI+OEAAAsC0ujQEAAAtunwcAALABKkIAAMCKihAAAEDWR0UIAABYMEYIAADABqgIAQAAKypCAAAAWR8VIQAAYEVFCAAAIOujIgQAACy4awwAAMAG6AgBAADboiMEAABsizFCAADAijFCAAAAWR8dIQAAYFtcGgMAABbcPg8AAGADmbIitDbRG+gQAibckRToEAIqWUGBDiGgQuQJdAgBlWhmylNWuvHICHQIAbM1sUygQwiox/29QipCAAAAWZ+9/7wCAACpURECAADI+qgIAQAAC+4aAwAAsAEqQgAAwIqKEAAAQNZHRQgAAFgwRggAAMAGqAgBAAArKkIAAABZHxUhAABgRUUIAAAg66MjBAAAbItLYwAAwILb5wEAAGyAihAAALCiIgQAAJD1URECAABWVIQAAACyPipCAADAgrvGAAAAbICKEAAAsKIiBAAAkPVREQIAABaMEQIAALABKkIAAMCKihAAAEDWR0UIAABYURECAADI+ugIAQAA2+LSGAAAsDACHYAfURECAAC2RUUIAABY2WiwNB2hc7ZskL742CG3SypaQurS36vsOaxt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aKZ/pWnzRuPctjcUWdjU4wPdijlsaMq4IL3yvu8DcsUC37Y3TalMRa86nbtFfGCX4HPH/vljvXRFU537Zsx28mTA8343bzT0xQX7fveBHsUeNvTxuCANP5f/ygUOrVroSDn3PXIu/0FdnKnOfaUretWxb/p3CrcmFkv3ZUrSnp+StGbaKXndpnIXdOqe/rl18rBHKyaeVMc3C0iSfl1yRr8uSZDDaShbLocaPp5LBYoHy+sxtWHOGe1cc1amV4osGay7eoenuv0+PTxednW6L/NSqvYd77d1/fp2f7+tKy1+6wj9Y+7cufr66681ZcqUa15GRnSEMouM6ghlFhnVEcosMqojlFlkREcoM8mIjlBmkVEdocyCjpDPokWL9N5778nlcqlLly56+OGH02z33Xffafjw4Vq1atVll+n3s0q7du3Url07f68WAABcqevwSueRI0c0fvx4ffnllwoJCVH79u116623qlQpa3Hk6NGjev311694uZlnRCcAAMhy4uPjdeDAgVQ/8fHxlnbr1q1T7dq1lSdPHoWFhalJkyZaunRpquUNHjxYffr0ueL127vODAAAUvHnE5+nTp2qiRMnpprfp08f9e3bN2U6JiZGERHnH/oWGRmpLVu2WN4zbdo0VahQQVWqVLni9dMRAgAAAdO5c+c07yL/55E7/0hrSLNhnB83t2vXLi1fvlyffPKJDh8+fMXrpyMEAAACJjw8PFWnJy1RUVH66aefUqZjYmIUGRmZMr106VLFxsbq/vvvl8vlUkxMjDp06KCZM2decrmMEQIAAFbX4Vds1K1bV9HR0YqLi9PZs2e1fPly1a9fP+X1fv36admyZVqwYIE++OADRUZGXrYTJNERAgAAmUBUVJT69++vTp06qXXr1mrRooUqV66sHj16aOvWrde8XL8/Ryg98Bwh++I5QjxHyM54jpB9+fs5QtWf8N9zhH5+L7APVKQiBAAAbMvef14BAIDUMt21omtHRQgAANgWFSEAAGBFRQgAACDroyIEAAAs/PkVG4FGRQgAANgWFSEAAGBFRQgAACDroyIEAAAsjMz3pRPXjIoQAACwLSpCAADAyj4FISpCAADAvugIAQAA2+LSGAAAsOCBigAAADZARQgAAFhREQIAAMj6qAgBAAALxggBAADYABUhAABgRUUIAAAg66MiBAAALBgjBAAAYANU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XqDDQjqiI3SFoqKidPTo0ZTpmJgYW14msqtNmzapS5cuevrpp9WmTZtAh+NXf/zxh7Zv3y5Jyp49u+6++27t3LkzwFH5z1dffaW1a9eqVatWeuutt7Rq1Sq9+uqrgQ7Lb3766SdFR0enTJumaauxQgUKFFCdOnWUL18+ZcuWTY0aNbLV1QA7oCN0herWravo6GjFxcXp7NmzWr58uerXrx/osOAHhw4dUu/evTV27Fg1b9480OH43YEDBzR48GAlJycrOTlZ33zzjWrUqBHosPzm448/1uLFi7VgwQL169dPDRs21AsvvBDosPzm1KlTGj16tJKSknT69GnNmzfPNjcKSFKDBg20Zs0axcfHy+Px6IcfflDFihUDHRbSkX269f9RVFSU+vfvr06dOsnlcqlt27aqXLlyoMOCH0yePFlJSUkaNWpUyrz27dvroYceCmBU/nPHHXdo8+bNat26tYKCgnT33XfbskNoVw0aNEjZ/l6vVx06dFC1atUCHZbfVKlSRd27d1eHDh3kcrl022236f777w90WEhHhpnW4BcAAAAb4NIYAACwLTpCAADAtugIAQAA26IjBAAAbIuOEAAAsC06QgAAwLboCAEAANuiIwTgijRt2lT169fX7t27Ax0KAKQbOkIArsjixYt14403atmyZYEOBQDSDR0hAFckKChINWrUsNUXrgLI+viuMQBXJDExUUuWLBHfygMgK6EiBOCKjB8/XlFRUdq/f7/OnDkT6HAAIF3QEQJwWb/88ouWLl2qt99+W7ly5dKuXbsCHRIApAs6QgAuKSkpSc8//7xefvll5cmTR+XKlWOcEIAsg44QgEt68803Va1aNd15552SpHLlymnHjh2BDQoA0gkdIQAXtWXLFi1dulQvvPBCyrzy5ctTEQKQZRgmt4AAAACboiIEAABsi44QAACwLTpCAADAtugIAQAA26IjBAAAbIuOEAAAsC06QgAAwLboCAEAANv6P6+71O37Q746AAAAAElFTkSuQmCC\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkIAAAJgCAYAAABmwww9AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAAsTAAALEwEAmpwYAABoU0lEQVR4nO3debyM5f/H8dc9c+ZsONZz7IWyZ4+o7CF70qIFEZIkRFS2QimypBJZksjylV0iSslRtiJZQ9mPYzs4jjPL/ftj/A53yHbOjDnzfj4e8+C+55q5P5+573vONZ/rumcM0zRNRERERIKQzd8BiIiIiPiLOkIiIiIStNQREhERkaCljpCIiIgELXWEREREJGipIyQiIiJBSx0hkdvUoEGDaNq0KU2bNuWee+6hXr16KctJSUk39FybNm2iX79+V71/+/btFC1alHHjxt1q2CIiAcXQ9wiJ3P5q1arFqFGjKFWq1E09/uuvv+bbb79l7NixV7x/wIABnDlzhrVr17J8+XJCQkJuJVwRkYChdzuRADRr1iy++uorPB4PWbJkoW/fvtx1112sW7eOIUOG4PF4AHjhhRcoXbo0H374IadPn+b111/n3XfftTzXmTNnmD9/PrNmzWLbtm0sWbKERo0aAeByuRg6dCg//PADdrudcuXK0b9/f2w22xXXjx07lhMnTqRUn0aPHp2y3LJlSzJnzszu3bt56qmnKFWqFEOHDiU5OZmjR49y//3388477wDw/fffM3LkSDweD5GRkbz11lt8//337Nq1iw8++ACA9evXM3DgQObOneujV11E0iN1hEQCzK+//srcuXOZOnUqERERrFq1ipdffpnFixczevRo2rRpQ8OGDdm2bRszZsygXr16dOnShW+//fayThDA/PnzKVCgAHfddRePPPIIkydPTukITZs2jS1btjBv3jxCQ0Pp3r07ixcvJiEh4YrrryUqKiqlXffu3enSpQv33XcfZ8+epXbt2vzxxx/kypWLnj17MmXKFIoXL87SpUsZNmwY7733HnXr1uXkyZNkyZKFGTNm0KJFi9R9cUUk6KgjJBJgfvjhB/7++29LJ+DUqVOcPHmS+vXr8/bbb7NixQruv/9+unfvfs3n++qrr3jiiScAaNKkCcOHD2fDhg2UL1+e1atX07RpU8LDwwEYOXIkAB07drzi+tGjR//ntu69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R735HzjBe+8soEjRXHTv2ZCO7SbQuGl5YmKieKBqUR6oevGKwNe6TyMhgCbH/tvJk4kMe2cBfQc9hsNh5+CBE7w/cB5FiuWme++GdHxuPI2bVSAmZxQPVi/Kg5dcDdmzy1RmfLmaF1+py9jJHTA9Jn9s2seET1f4MaMbE+zH/qljZxjR8yveHPMcIY4Qb/7dp1G4VH5eee9JOjcY9p+PnzryWzq93Zwx376GPcTOT4t/Y8n0wPrqEAHDNE2ffOHFkSNHiI2NJS4uDtM0yZkzJ1WqVCFnzpw3/Fz1S7yRBhEGBvMqY9rBwog/7u8Q/MpZLHCGHdKCEUCT8NNCyK7A+YCR6iLC/R2BX32zd4RPt7f2nwI+21bFO/b6bFtX4rOrxnLmzMkjjzziq82JiIiIXJO+WVpEREQsboeruXxFX6goIiIiQUsVIREREbG4Ha7m8hVVhERERCRoqSMkIiIiQUtDYyIiImLhNoOnThI8mYqIiIj8iypCIiIiYuEJojpJ8GQqIiIi8i+qCImIiIiFLp8XERERCQKqCImIiIiFrhoTERERCQKqCImIiIiFR3OERERERNI/VYRERETEwh1EdZLgyVRERETkX1QREhEREQtdNSYiIiISBFQREhEREQv91piIiIhIEFBHSERERIKWhsZERETEwm3qCxVFRERE0j1VhERERMRCX6goIiIiEgRUERIRERELj75QUURERCT9U0VIRERELDRHSERERCQIqCIkIiIiFvoeIREREZEgoIqQiIiIWATTj64GZEdowDdf+TsEvznmyeDvEPzqrCfM3yH41d/Ju/0dgl+VCD/g7xD8ymkG5Ft2qog0zvs7BD8b4e8A0q3gPatERETkitz6HiERERGR9E8VIREREbHwoKvGRERERNI9dYREREQkaGloTERERCw0WVpEREQkCKgiJCIiIhb60VURERGRIKCKkIiIiFh49KOrIiIiIumfKkIiIiJioTlCIiIiIkFAFSERERGx8Oh7hERERETSP1WERERExMKtH10VERERSf9UERIRERELzRESERERCQKqCImIiIiF5giJiIiIBAF1hERERCRoaWhMRERELDRZWkRERCQIqCIkIiIiFm5VhERERETSP1WERERExMKjy+dFRERE0j9VhERERMRCc4REREREgoAqQiIiImLhMTVHSEREROS2smDBAho0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IiIWmiMkIiIiEgRUERIRERELU3OERERERNI/VYRERETEQnOERERERIKAKkIiIiJipYqQiIiISPqnjpCIiIgELQ2NiYiIiIUunxcREREJAqoIiYiIiJUqQiIiIiLpnypCIiIiYqEvVBQREREJAqoIiYiIiJXmCImIiIjcXhYsWECDBg2oU6cOU6dOvez+3bt307JlS5o0acLzzz/PqVOnrvmc6giJiIiIhWkaPrtdryNHjjBixAimTZvGvHnzmDFjBrt27bokZpMXX3yR9u3bM3/+fIoXL864ceOu+bzqCImIiMhtb/Xq1VSuXJksWbIQGRlJvXr1WLJkScr9W7ZsITIykmrVqgHQsWNHnnnmmWs+r+YIiYiIiJUP5wglJCSQkJBw2fqoqCiioqJSluPi4oiOjk5ZjomJYdOmTSnL//zzDzly5KBXr178+eefFClShL59+15z+6oIiYiIiN9MnjyZ2rVrX3abPHmypZ15hd/9MIyLQ2sul4tff/2VZ599lgULFpA/f36GDBlyze0HZEUozHD4OwQR8QOHEZBvWanmnHne3yH4TagRPN9rc3vw3evdunVrmjVrdtn6S6tBADlz5mTdunUpy3FxccTExKQsR0dHc+edd1KqVCkAGjVqRJcuXa65fVWERERExG+ioqLIly/fZbd/d4Tuv/9+YmNjOX78OOfOnWPp0qUp84EAypUrx/Hjx9m2bRsAK1asoGTJktfcfnB/vBIREZHL3YbfI5QzZ066detGq1atcDqdPPbYY5QuXZr27dvTpUsXSpUqxccff0yfPn04d+4cuXLl4v3337/m8xrmlQbdbnOew0X8HYKIiM8F89DYKY/T3yH4VZ68B326vQKT3/PZtva27uWzbV2JhsZEREQkaGloTERERKwCbqzo5qkiJCIiIkFLFSERERGxuoGfvgh0qgiJiIhI0FJFSERERCwC73rym6eKkIiIiAQtVYRERETEShUhERERkfRPFSERERGx0lVjIiIiIumfKkIiIiJiYWiOkIiIiEj6p4qQiIiIWKkiJCIiIpL+qSIkIiIiVrpqTERERCT9U0dIREREgpaGxkRERMRKk6VFRERE0j9VhERERMRKFSERERGR9E8VIREREbFSRUhEREQk/VNFSERERKz0hYoiIiIi6Z8qQiIiImJhaI6QiIiISPqnipCIiIhYqSIkIiIi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vnx8++23172htWvXUrFixZTl3bt3s2/fPqpXr37DQadFR0hE5HaXFh2hQJFWHaFAoY5Q2rnmaGb+/PnJnz8/derUSVmXmJjIjh07bmhDl3aCAAoVKkShQoVu6DlERETEB26Dy9p95aa+RygyMpKyZcumcigiIiIivqX57SIiImJxO3zRoa/om6VFREQkaKkiJCIiIlaqCImIiIikf6oIiYiIiJUqQiIiIiLpnypCIiIiYqGrxkRERESCgCpCIiIiYmUG4K/o3iRVhERERCRoqSIkIiIiVpojJCIiIpL+qSMkIiIiQUtDYyIiImKhy+dFREREgoAqQiIiImKlipCIiIhI+qeKkIiIiFhojpCIiIhIEFBFSERERKxUERIRERFJ/1QREhEREStVhERERETSP1WERERExEJXjYmIiIgEAXWEREREJGipIyQiIiJBS3OERERExEpzhERERETSP3WEREREJGhpaExEREQsdPm8iIiISBAIyIrQgsRIf4fgN1lsif4Owa8chsvfIfiVPZhmMF5Bsmn3dwh+FWoE72fXnxJL+TsEv+qR18cbDKK3muA9q0RERCToBWRFSERERNKQKkIiIiIi6Z8qQiIiImKhq8ZEREREgoAqQiIiImKlipCIiIhI+qeKkIiIiFhojpCIiIhIEFBFSERERKxUERIRERFJ/1QREhEREStVhERERETSP3WEREREJGhpaExEREQsdPm8iIiISBBQRUhERESsVBESERERSf9UERIRERErVYRERERE0j9VhERERMRCV42JiIiIBAFVhERERMRKFSERERGR9E8VIREREbHQHCERERGRIKCKkIiIiFipIiQiIiKS/qkiJCIiIlaqCImIiIikf+oIiYiISNDS0JiIiIhYGP4OwIdUERIREZGgpYqQiIiIWAXRZGl1hC7Y+qubbyY5cTkhd0GDx7uGEp7BWhz842c3S790YtggIqPB4684yJ7HhsdtMvcTJ7s3ewAoVtFOw3YhGEbgFhc3/QJzJoHLCXkLQutuEJHB2mbFPPh+PjhCIfcd8PRLkCHKP/Heqt9/MfjfRDsuJ+QraNK2u/uyfL+ba2P5fBuOUMhzh8mznd1kvCTfY3Ew6JUQ3v7URabMvo3/Vv32i8GsiXacToP8BU3adXddlv/SuTa+m28nNNQkzx0mra6Q/9uvOBj0qTPg8t/0C8yeZLuw/+G5bp7L8l8+z2DFfIPQUMh9h8nTL5mW/I/HwTtdbfQf4wmo/IN93/+zLpG1U07gdppkKxBKtc45CI20DpbsWXOWDV+dBAPCMtqp9lJ2onI7SD7r4ceP4jl5wInpgcK1MlL20QB7AURDYwBnTprMHJ5Myz6hvDY+nOy5bHwzyWlp4zxv8tXQZFr1DaXbx+GUqGxn3qfeNhtWuDl6wKT7mDC6fRLG7s1uNq/y+COVVHH6JEz+ADr2hYETIDoXfD3R2mbbb7BkJnQfAv3GwD0VYcoof0R76xJOwoRhdl7q5+LdiS6ic5vMmmA9Nbb+ZrB4po2e77l4+1MXpSt5mDzSnnL/z8sM3n01hJPHAq/zm3ASPhsWwsv9XLw/0UlMbpMZE+yWNn/+ZrBopp3e7zkZ9KmLMpVMJo28+Dlq1TIbg191cCIA8z99EiZ9YKNTXw+DJ3iIzmUye6I1D+/xbvDqEA/9x3goVRGmjLp4jKxeZvBeD1vA7f9g3/fnTrlZOTqeh3rF8MQn+ciUM4RfvzhhaeM67+GHEfE81DuG5iPzcmelCFaPPw7AumknyJDdzmMf5uWRYbnZ+k0CR7Yl+SOVVGeYvrv5mzpCwI4NbvIXsRGd1/tyVG5kZ+P3bkzz4h7yXOjXJJ31/pt8ziQk9OJ9yUkmLqe3guJ2QYjDlxmkrj83wJ1FIWde73L1RvDLCrjk5eCfnVC8HGSN9i6Xf9D7qdrlvPz5bndb1hsULGqS60K+tRp5WLPCZsl3706DEuVMsl3It8IDJr/9YuBywoljsGG1jW6DXL4PPhX8sd5GIUv+bmKvkH/Jcp6U/O99wMPGS/Jfv9rGq4MCcOcDWzYYFLjkeK/RyOSXFYYl/793GhS/ZP+Xf9Dk9wvH+8ljsDHW4JWBgffhJ9j3/YHfzhF9dxiZ83jfsEs8nIldP56xvPebHu97X/JZ7/51njOxO7ydvirtsnFfm2wAJJ5w43ZBaAb9WQ00ftljQ4YM8cdmr+pUvEnm6IufZjLnMEhKhPOJF9uERRg82tnBx93PM/CZc6xe4KJBW+/Jc+9DdiIyGgxumcTAZ5LInsegRGX7vzcTMI4fhWw5Li5njYakRO9r8v8KFPN+Sj52xLv887fgchqcSfBpqKni+FGDbNEX3/iyRsO5f+VbqKjJ1t8M4i/k+9NSW0q+WbPDy/3d5L3Tx4GnkmNHseSf7Sr5//mbLSX/H/+V/yv9XQGbv/d4/+/9X7CYybbfjEuOdyMl/yzZ4aV+HvIEYP7Bvu/PxLvIkOPie3WGHCE4E02c5y6+Jo4IGw++mJ35vQ8xtc0+/lycQKXWWQEwDAOb3eD7EUeZ3eUAee4JT+lUBTzTh7cbsGDBAho0aECdOnWYOnXqVdv98MMP1KpV67qeM83nCL3++uuXrVuxYgWnTp0C4N13303rEK7JvMoHOdslfZlDezx8N81Fj7FhZM9jY9U8F1MGJdP14zCWTXWRMbNB32nhOJNh8tvJrJztpHrzwDwhruf1KFIKGj8Ln7wNNgMeqAcZMpkBWQkzr3Ii2i75mFC0tEnTZ92MfisEm2FStZ4ZsPn+2/XkX6y0SbNn3Yx6KwTDgGr1PGTIZGJPD/lf9/Fu8vHbNgwDHkwn+1/7/srrjUvyP743mY0zTvL46LxE5Xbwx8IEvnsvjkdH5EmZB1qzWzQPdszOsvfi2DjzJBWeyuqD6IPPkSNHGDFiBF9//TWhoaG0aNGC++67j7vvvtvSLj4+nvfee++6nzfNO0JZsmRh7ty5dOzYkago7+y6NWvWUKlSpbTe9HXLEmPwz/aLZ0RCvElERggNv1gl2rHeTYESNrLn8Z4h9zeys2Cck8QE+GO1m6YvOghxGIQ4vBWiTavcVG/u81RSRbYY2LPt4vLJeIjMaBIWfnFdUqL3j8ODD3uXE07AvMmQIZNvY00N2aJN/tp28Z3vRLy3UxcWcbHNuURvZ6hafe/w16kT8PVkW0Dm+2/Zo+GvbReP9avlX6y0h+r1vefJqRMwe7KdjOkgf+/xbvD/H02vfrybVH3Y2+bUCZg72Qj4/R/s+z5jdAhHd55PWT57zE1YRhuO8IvvB/t/O0fO4mFE5b4wfFY/E2smHuf8aQ9H/0om250OMmQLwRFh4+6qGdgTm3jZdgKSD+fuJCQkkJBw+XBCVFRUSr8BYPXq1VSuXJksWbIAUK9ePZYsWULnzp0tj+vTpw+dO3fmgw8+uK7tp/nQWK9evRg+fDiLFy8mT548NGvWjMyZM9OsWTOaNWuW1pu/LkXK2/lnm4ejB7wn+prFbkpWsQ5t5b3bxu7NHk6f8B4dW2I9ZMtpkCGzQd67bWz60Q2A22Xy5xo3dxYL3HHiEhVg9zY4csC7vHIRlK1ibXPyGAx7Dc5dmDO1cCpUrAGBeKHcPRVMdm81OHwh3+8X2ihXxfoucPIYvNczJCXf+VNt3FfTE5D5/lupCh7+uiT/FQvtlK9i/ah88hi809ORkv+8qXaqpJP8S1Yw+euS4/2HRQZlr7D/h71mu+R4N6hUwwz4/IN93+crG0Hc9vOcOuid47T129PcWSnS0iZ7oVAO/ZFE4knve/zfvySSKSaE8Cg7u1edZcP0k5imidtpsvvnRPKUDr9sO/LfJk+eTO3atS+7TZ482dIuLi6O6OjolOWYmBiOHDliafPFF19QokQJypQpc93b98nl81WqVKF48eL079+fH374Abfb7YvNXreMWQwe7xbKl4OTcbsgW26DFj1C2bfDw/9GJdPt43DuLmun+mMmY3udxx4CEZkMWvf3zpZu3MHBvDFOhrZPwmaDu8vaqPF44H4zQVQWeO5VGDsQXC6Izg1te8LeHfDFCO9VYrnyw8NPwLuveMvrd5eEp17yd+Q3JyortO3h5pOBIbicEJPHpF1PN3t2GEwabuftT13kzg8NnvQwsEsIpgmFS3ovn08PorJC+x4uRg8MweU0iMlj8kJPF7t3GEwcbmfQhfwbPelmQBcHpglFSnpolV7yzwJtXvUwZqANlwtickPbnh727oDJI7yXw+fKD/WfMBn8ii1l/z/90m1wucstCvZ9H5HFTrWXc/Dd+3F4XJApVwg1XsnB0V3n+fGjeJqPzEve0hGUbpaZRX0OYwvxXj5f540YACq3ycqqT48x+5WDABS4L5J7GgXod4j8iy+v5mrduvUVCyOXVoMAyyT2/3fp19Ts2LGDpUuX8vnnn3P48OHr3r5hXumZ09CsWbP45ptvmDhx4rUbX8W83WVTL6AAk8WWTsquN8lhBOaVWanFHkzfcnYFyWbgXoSQGkKN9NEBuRk/JRbxdwh+1aP4tz7dXtmXR/hsW7+N7nZd7ebMmcO6desYPHgwAB9//DGmaaYMjX344YcsWrSI8PBwnE4n//zzD6VLl2batGn/+bw+H795/PHHb6kTJCIiImnsNrxq7P777yc2Npbjx49z7tw5li5dSrVq1VLu79KlC99++y3z5s1j3LhxxMTEXLMTBPoeIREREQkAOXPmpFu3brRq1YpHHnmERo0aUbp0adq3b8/mzZtv+nkDdyKLiIiIpInb4Rufr6Rx48Y0btzYsu6zzz67rF2+fPlYsWLFdT2nKkIiIiIStNQREhERkaCloTERERGxuk2HxtKCKkIiIiIStFQREhEREYvbdbJ0WlBFSERERIKWKkIiIiJipYqQiIiISPqnipCIiIhYqSIkIiIikv6pIiQiIiIWumpMREREJAioIiQiIiJWqgiJiIiIpH+qCImIiIiFYQZPSUgVIREREQlaqgiJiIiIVfAUhFQREhERkeCljpCIiIgELQ2NiYiIiIW+UFFEREQkCKgiJCIiIlaqCImIiIikf6oIiYiIiIXmCImIiIgEAVWERERExEoVIREREZH0TxUhERERsdAcIREREZEgoIqQiIiIWKkiJCIiIpL+BWRF6JPmTf0dgv9s2+3vCPzKVaWEv0Pwq5Bft/k7BL+yxUT7OwS/cu8/6O8Q/MYIdfg7BL/qcca329McIREREZEgEJAVIREREUlDZvCUhFQREhERkaCljpCIiIgELQ2NiYiIiIUmS4uIiIgEAVWERERExEoVIREREZH0TxUhERERsTA8/o7Ad1QREhERkaClipCIiIhYaY6QiIiISPqnipCIiIhY6HuERERERIKAKkIiIiJipR9dFREREUn/VBESERERC80REhEREQkCqgiJiIiIlSpCIiIiIumfOkIiIiIStDQ0JiIiIhaaLC0iIiISBFQREhERESt9oaKIiIhI+qeKkIiIiFhojpCIiIhIEFBFSERERKxUERIRERFJ/1QREhEREQvNERIREREJAqoIiYiIiJUneEpCqgiJiIhI0FJF6CoqPViYNi8/hCM0hD07jzDirXkknj1vaVOrQWkeb/0ApmlyPsnJJ+9/w84/D/op4htX6eEytHn7CRxhDvb8sY8RHT8j8XTSdbXJlDUDL3/4HIVK30nS2fMsnfIj88cs445ieej9eaeUx9vsNgrek5+3W4zi53nrfJ3idbvvvrto164GjlA7u3fHMWzoYhITky1tHnqoJE88eR+mCefPO/lo9DJ27DgMQNWqRXn6mSo4HCEcOXKK94YsJCHhnD9SuSmV6pWhzVuPe4/3LfsY0WnCZcfC/3v103b8/ecB/vfhNynrMmSOZNi3bzD8xfHs3LjXR1Gnjoo1i9OmZ31v7tsOMbL3TBLPnL9i2+7vP8nfOw4ze/zKlHUNn72fh5+oRGi4g11/7Gdk75k4k92+Cv+mVKpflraDWuAIC2HP5n0M7zCOxNPn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RUhERESCljpCIiIiErQ0NCYiIiJWmiwtIiIikv6pIiQiIiIWhn50VURERCT9U0VIRERErDRHSERERCT9U0VIRERErIKnIKSKkIiIiAQvVYRERETEwtAcIREREZH0TxUhERERsVJFSERERCT9U0VIRERErPTN0iIiIiLpnypCIiIiYqGrxkRERESCgDpCIiIiErQ0NCYiIiJWGhoTERERSf9UERIRERGrIKoIBWRHyNyy098h+I0tQ6S/Q/Ar+6rN/g7Br4LnrenKPEfi/B2CX9kiwv0dgt+4T5/2dwiSTmloTERERKw8PrzdgAULFtCgQQPq1KnD1KlTL7v/u+++o2nTpjRp0oROnTpx6tSpaz6nOkIiIiJy2zty5AgjRoxg2rRpzJs3jxkzZrBr166U+8+cOcOAAQMYN24c8+fPp2jRoowePfqaz6uOkIiIiFgYpumzW0JCAvv377/slpCQYIlp9erVVK5cmSxZshAZGUm9evVYsmRJyv1Op5MBAwaQM2dOAIoWLcqhQ4eumWtAzhESERGR9GHy5Ml89NFHl63v3LkzL7/8cspyXFwc0dHRKcsxMTFs2rQpZTlr1qw89NBDACQlJTFu3Dhatmx5ze2rIyQiIiJWPrxqrHXr1jRr1uyy9VFRUZZl8woxGYZx2brTp0/TqVMnihUrdsXn/Td1hERERMRvoqKiLuv0XEnOnDlZt25dynJcXBwxMTGWNnFxcTz//PNUrlyZN95447q2rzlCIiIiYmWavrtdp/vvv5/Y2FiOHz/OuXPnWLp0KdWqVUu53+1207FjR+rXr8+bb755xWrRlagiJCIiIre9nDlz0q1bN1q1aoXT6eSxxx6jdOnStG/fni5dunD48GH+/PNP3G433377LQD33HMPgwcP/s/nNcwrDbrd5uqGPu3vEPwm2L9Q0XM20d8hiB8ZjuD+7GaEBG/+wf6Fiss8s3y6vYdLvemzbS3Z/N8dlbSmoTEREREJWsH78UJERESu7Aa/8TmQqSIkIiIiQUsdIREREQlaGhoTERERCyPwrqO6aaoIiYiISNBSRUhERESsVBESERERSf9UERIRERErjypCIiIiIumeKkIiIiJipTlCIiIiIumfKkIiIiJipYqQiIiISPqnipCIiIhYqSIkIiIikv6pIiQiIiJW+h4hERERkfRPFSERERGxMj3+jsBnVBES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ERGx0o+uioiIiKR/qgiJiIiIlanL50VERETSPVWERERExMLUHCERERGR9E8VIREREbHSHCERERGR9E8VIREREbHQHCERERGRIKCKkIiIiFhpjpCIiIhI+meYphk8A4EiIiIil1BFSERERIKWOkIiIiIStNQREhERkaCljpCIiIgELXWEREREJGipIyQiIiJBSx0hERERCVrqCImIiEjQUkdIREREgpY6QjdgwYIFNGjQgDp16jB16lR/h+NzZ86coVGjRuzfv9/fofjcRx99RMOGDWnYsCHvv/++v8PxuVGjRtGgQQMaNmzIpEmT/B2O37z33nv07t3b32H4XKtWrWjYsCFNmzaladOm/P777/4OyadWrFjBo48+ysMPP8ygQYP8HY6kMv3o6nU6cuQII0aM4OuvvyY0NJQWLVpw3333cffdd/s7NJ/4/fff6dOnD3v37vV3KD63evVqVq1axZw5czAMg3bt2rFs2TLq1Knj79B84tdff2XNmjXMnz8fl8tFgwYNqF69OoUKFfJ3aD4VGxvLnDlzqFGjhr9D8SnTNNm9ezc//PADISHB9ydj37599O/fn1mzZpE9e3Zat27NypUrqV69ur9Dk1SiitB1Wr16NZUrVyZLlixERkZSr149lixZ4u+wfGbmzJn079+fmJgYf4fic9HR0fTu3ZvQ0FAcDgd33XUXBw8e9HdYPlOpUiW++OILQkJCOHbsGG63m8jISH+H5VMnT55kxIgRdOzY0d+h+Nzu3bsxDIP27dvTpEkTvvzyS3+H5FPLli2jQYMG5MqVC4fDwYgRIyhTpoy/w5JUFHzd+5sUFxdHdHR0ynJMTAybNm3yY0S+NXjwYH+H4DeFCxdO+f/evXtZvHgx06dP92NEvudwOPjwww+ZOHEiDz/8MDlz5vR3SD7Vr18/unXrxqFDh/wdis8lJCRQpUoVBgwYQFJSEq1ataJgwYI88MAD/g7NJ/7++28cDgfPP/88R48epWbNmnTt2tXfYUkqUkXoOpmmedk6wzD8EIn4y86dO2nbti29evWiQIEC/g7H57p06UJsbCyHDh1i5syZ/g7HZ2bNmkXu3LmpUqWKv0Pxi3LlyvH+++8TGRlJtmzZeOyxx1i5cqW/w/IZt9tNbGwsQ4cOZebMmWzevJk5c+b4OyxJReoIXaecOXMSHx+fshwXFxeUw0TBav369Tz33HO8+uqrNGvWzN/h+NRff/3F1q1bAYiIiKBu3bps377dz1H5zuLFi/n5559p2rQpH374IStWrOCdd97xd1g+s27dOmJjY1OWTdMMqrlCOXLkoEqVKmTLlo3w8HBq164dVKMBwUAdoet0//33Exsby/Hjxzl37hxLly6lWrVq/g5LfODQoUO89NJLDBs2jIYNG/o7HJ/bv38/ffr0ITk5meTkZJYvX06FChX8HZbPTJo0iYULFzJv3jy6dOlCrVq1eOONN/wdls+cPn2a999/n/Pnz3PmzBnmzJkTNBcKANSsWZNVq1aRkJCA2+3mp59+omTJkv4OS1JR8HTrb1HOnDnp1q0brVq1wul08thjj1G6dGl/hyU+MGHCBM6fP8+QIUNS1rVo0YKnnnrKj1H5TvXq1fn999955JFHsNvt1K1bNyg7hMGqZs2aKfvf4/Hw9NNPU65cOX+H5TNlypShXbt2PP300zidTh544AGaN2/u77AkFRnmlSa/iIiIiAQBDY2JiIhI0FJHSERERIKWOkIiIiIStNQREhERkaCljpCIiIgELXWEREREJGipIyQiIiJBSx0hEbku9evXp1q1auzcudPfoYiIpBp1hETkuixcuJACBQrw7bff+jsUEZFUo46QiFwXu91OhQoVguoHV0Uk/dNvjYnIdUlKSmLRokXoV3lEJD1RRUhErsuIESPImTMn+/bt4+zZs/4OR0QkVagjJCLXtHHjRpYsWcLo0aPJlCkTO3bs8HdIIiKpQh0hEflP58+f5/XXX+ett94iS5YsFCtWTPOERCTdUEdIRP7TqFGjKFeuHDVq1ACgWLFibNu2zb9BiYikEnWEROSqNm3axJIlS3jjjTdS1hUvXlwVIRFJNwxTl4CIiIhIkFJFSERERIKWOkIiIiIStNQREhERkaCljpCIiIgELXWEREREJGipIyQiIiJBSx0hERERCVrqCImIiEjQ+j+UmfOMJgK0JwAAAABJRU5ErkJggg==\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
+ "execution_count": 11,
+ "id": "ca482ded",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
+ "outputs": [],
"source": [
"# optional\n",
"# visual representation of grid search\n",
@@ -2710,8 +1690,10 @@
},
{
"cell_type": "markdown",
- "id": "fe7af77c",
- "metadata": {},
+ "id": "1c79fb2b",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Testing our code for the XOR, OR and AND gates\n",
"\n",
@@ -2735,8 +1717,10 @@
},
{
"cell_type": "markdown",
- "id": "7e12b1cf",
- "metadata": {},
+ "id": "cd470da0",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## The AND and XOR Gates\n",
"\n",
@@ -2771,8 +1755,10 @@
},
{
"cell_type": "markdown",
- "id": "4b5002b4",
- "metadata": {},
+ "id": "3e55e1ba",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Representing the Data Sets\n",
"\n",
@@ -2781,8 +1767,10 @@
},
{
"cell_type": "markdown",
- "id": "a44df1a3",
- "metadata": {},
+ "id": "59b6b65d",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"\\boldsymbol{X}=\\begin{bmatrix} 0 & 0 \\\\\n",
@@ -2794,16 +1782,20 @@
},
{
"cell_type": "markdown",
- "id": "acdb4e08",
- "metadata": {},
+ "id": "f9215c15",
+ "metadata": {
+ "editable": true
+ },
"source": [
"while the vector of outputs is $\\boldsymbol{y}^T=[0,1,1,0]$ for the XOR gate, $\\boldsymbol{y}^T=[0,0,0,1]$ for the AND gate and $\\boldsymbol{y}^T=[0,1,1,1]$ for the OR gate."
]
},
{
"cell_type": "markdown",
- "id": "0567fd0f",
- "metadata": {},
+ "id": "eeea24e9",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Setting up the Neural Network\n",
"\n",
@@ -2813,8 +1805,11 @@
{
"cell_type": "code",
"execution_count": 12,
- "id": "412401df",
- "metadata": {},
+ "id": "66bdf9f6",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"\"\"\"\n",
@@ -2886,16 +1881,20 @@
},
{
"cell_type": "markdown",
- "id": "53c52dab",
- "metadata": {},
+ "id": "0e3d7912",
+ "metadata": {
+ "editable": true
+ },
"source": [
"Not an impressive result, but this was our first forward pass with randomly assigned weights. Let us now add the full network with the back-propagation algorithm discussed above."
]
},
{
"cell_type": "markdown",
- "id": "7d192a02",
- "metadata": {},
+ "id": "b8c14487",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## The Code using Scikit-Learn"
]
@@ -2903,8 +1902,11 @@
{
"cell_type": "code",
"execution_count": 13,
- "id": "766d5af6",
- "metadata": {},
+ "id": "fde916f3",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"# import necessary packages\n",
@@ -2968,8 +1970,10 @@
},
{
"cell_type": "markdown",
- "id": "9b182ae1",
- "metadata": {},
+ "id": "56e4db63",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Building neural networks in Tensorflow and Keras\n",
"\n",
@@ -2984,8 +1988,10 @@
},
{
"cell_type": "markdown",
- "id": "60683ec5",
- "metadata": {},
+ "id": "e30562f7",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Tensorflow\n",
"\n",
@@ -3017,8 +2023,11 @@
{
"cell_type": "code",
"execution_count": 14,
- "id": "8a0c6901",
- "metadata": {},
+ "id": "c63ec71a",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"pip3 install tensorflow"
@@ -3026,8 +2035,10 @@
},
{
"cell_type": "markdown",
- "id": "b66e0227",
- "metadata": {},
+ "id": "a8eba30d",
+ "metadata": {
+ "editable": true
+ },
"source": [
"and/or if you use **anaconda**, just write (or install from the graphical user interface)\n",
"(current release of CPU-only TensorFlow)"
@@ -3036,8 +2047,11 @@
{
"cell_type": "code",
"execution_count": 15,
- "id": "df994f58",
- "metadata": {},
+ "id": "b41f8614",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"conda create -n tf tensorflow\n",
@@ -3046,8 +2060,10 @@
},
{
"cell_type": "markdown",
- "id": "b9005559",
- "metadata": {},
+ "id": "0ae83030",
+ "metadata": {
+ "editable": true
+ },
"source": [
"To install the current release of GPU TensorFlow"
]
@@ -3055,8 +2071,11 @@
{
"cell_type": "code",
"execution_count": 16,
- "id": "7287b5eb",
- "metadata": {},
+ "id": "876a343e",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"conda create -n tf-gpu tensorflow-gpu\n",
@@ -3065,8 +2084,10 @@
},
{
"cell_type": "markdown",
- "id": "c066b083",
- "metadata": {},
+ "id": "8820da14",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Using Keras\n",
"\n",
@@ -3078,8 +2099,11 @@
{
"cell_type": "code",
"execution_count": 17,
- "id": "6582adea",
- "metadata": {},
+ "id": "5b0bd227",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"conda install keras"
@@ -3087,8 +2111,10 @@
},
{
"cell_type": "markdown",
- "id": "7d305596",
- "metadata": {},
+ "id": "b9128d4d",
+ "metadata": {
+ "editable": true
+ },
"source": [
"You can look up the [instructions here](https://keras.io/) for more information.\n",
"\n",
@@ -3097,8 +2123,10 @@
},
{
"cell_type": "markdown",
- "id": "a4508850",
- "metadata": {},
+ "id": "a94d524f",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Collect and pre-process data\n",
"\n",
@@ -3108,8 +2136,11 @@
{
"cell_type": "code",
"execution_count": 18,
- "id": "5f2256f6",
- "metadata": {},
+ "id": "ee59798f",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"# import necessary packages\n",
@@ -3160,8 +2191,11 @@
{
"cell_type": "code",
"execution_count": 19,
- "id": "a5dfa0e9",
- "metadata": {},
+ "id": "7f39c0c8",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"from tensorflow.keras.layers import Input\n",
@@ -3186,8 +2220,11 @@
{
"cell_type": "code",
"execution_count": 20,
- "id": "dd935ce0",
- "metadata": {},
+ "id": "1850d1c5",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"\n",
@@ -3213,8 +2250,11 @@
{
"cell_type": "code",
"execution_count": 21,
- "id": "67158cb2",
- "metadata": {},
+ "id": "c8d3b22c",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"DNN_keras = np.zeros((len(eta_vals), len(lmbd_vals)), dtype=object)\n",
@@ -3237,8 +2277,11 @@
{
"cell_type": "code",
"execution_count": 22,
- "id": "86d74ee3",
- "metadata": {},
+ "id": "06f5ccc5",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"# optional\n",
@@ -3276,8 +2319,10 @@
},
{
"cell_type": "markdown",
- "id": "563d3f68",
- "metadata": {},
+ "id": "f0c599ec",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## The Breast Cancer Data, now with Keras"
]
@@ -3285,8 +2330,11 @@
{
"cell_type": "code",
"execution_count": 23,
- "id": "34e6467a",
- "metadata": {},
+ "id": "89c9f4d3",
+ "metadata": {
+ "collapsed": false,
+ "editable": true
+ },
"outputs": [],
"source": [
"\n",
@@ -3459,8 +2507,10 @@
},
{
"cell_type": "markdown",
- "id": "09879108",
- "metadata": {},
+ "id": "7ca69396",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Fine-tuning neural network hyperparameters\n",
"\n",
@@ -3485,8 +2535,10 @@
},
{
"cell_type": "markdown",
- "id": "f8ec1769",
- "metadata": {},
+ "id": "b327e897",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Hidden layers\n",
"\n",
@@ -3506,8 +2558,10 @@
},
{
"cell_type": "markdown",
- "id": "43cc1fe5",
- "metadata": {},
+ "id": "3100d461",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Which activation function should I use?\n",
"\n",
@@ -3535,8 +2589,10 @@
},
{
"cell_type": "markdown",
- "id": "a9cbce9f",
- "metadata": {},
+ "id": "b1359953",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Is the Logistic activation function (Sigmoid) our choice?\n",
"\n",
@@ -3565,8 +2621,10 @@
},
{
"cell_type": "markdown",
- "id": "2dfb3f9a",
- "metadata": {},
+ "id": "3b445e65",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## The derivative of the Logistic funtion\n",
"\n",
@@ -3601,8 +2659,10 @@
},
{
"cell_type": "markdown",
- "id": "f806c047",
- "metadata": {},
+ "id": "947e5d19",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## The RELU function family\n",
"\n",
@@ -3624,8 +2684,10 @@
},
{
"cell_type": "markdown",
- "id": "ef9e2a08",
- "metadata": {},
+ "id": "0b044d73",
+ "metadata": {
+ "editable": true
+ },
"source": [
"$$\n",
"ELU(z) = \\left\\{\\begin{array}{cc} \\alpha\\left( \\exp{(z)}-1\\right) & z < 0,\\\\ z & z \\ge 0.\\end{array}\\right.\n",
@@ -3634,8 +2696,10 @@
},
{
"cell_type": "markdown",
- "id": "2e2750d8",
- "metadata": {},
+ "id": "0cc9dab7",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Which activation function should we use?\n",
"\n",
@@ -3655,8 +2719,10 @@
},
{
"cell_type": "markdown",
- "id": "4e566f13",
- "metadata": {},
+ "id": "c77901f3",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## More on activation functions, output layers\n",
"\n",
@@ -3673,8 +2739,10 @@
},
{
"cell_type": "markdown",
- "id": "03205666",
- "metadata": {},
+ "id": "2205190b",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Batch Normalization\n",
"\n",
@@ -3693,8 +2761,10 @@
},
{
"cell_type": "markdown",
- "id": "ad7c3e53",
- "metadata": {},
+ "id": "c24d6ed7",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Dropout\n",
"\n",
@@ -3709,8 +2779,10 @@
},
{
"cell_type": "markdown",
- "id": "c3b98a7c",
- "metadata": {},
+ "id": "d9c671c9",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Gradient Clipping\n",
"\n",
@@ -3726,8 +2798,10 @@
},
{
"cell_type": "markdown",
- "id": "e7f21477",
- "metadata": {},
+ "id": "5853720b",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## A very nice website on Neural Networks\n",
"\n",
@@ -3736,8 +2810,10 @@
},
{
"cell_type": "markdown",
- "id": "54968291",
- "metadata": {},
+ "id": "1b134770",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## A top-down perspective on Neural networks\n",
"\n",
@@ -3779,8 +2855,10 @@
},
{
"cell_type": "markdown",
- "id": "4500b85e",
- "metadata": {},
+ "id": "d1db044d",
+ "metadata": {
+ "editable": true
+ },
"source": [
"## Limitations of supervised learning with deep networks\n",
"\n",
@@ -3806,25 +2884,7 @@
]
}
],
- "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"
- }
- },
+ "metadata": {},
"nbformat": 4,
"nbformat_minor": 5
}
diff --git a/doc/src/week42/week42.do.txt b/doc/src/week42/week42.do.txt
index 1a0785c82..1e52e988a 100644
--- a/doc/src/week42/week42.do.txt
+++ b/doc/src/week42/week42.do.txt
@@ -17,6 +17,7 @@ DATE: October 16-20, 2023
* Building our own Feed-forward Neural Network and discussion of project 2
* Readings and Videos:
* These lecture notes
+ * "Video of lecture":"https://youtu.be/0q5-PhovchQ"
* "Aurelien Geron's chapters 10-11":"https://github.com/CompPhysics/MachineLearning/blob/master/doc/Textbooks/TensorflowML.pdf"
* For a more in depth discussion on neural networks we recommend Goodfellow et al chapters 6 and 7.
* "Neural Networks demystified":"https://www.youtube.com/watch?v=bxe2T-V8XRs&list=PLiaHhY2iBX9hdHaRr6b7XevZtgZRa1PoU&ab_channel=WelchLabs"