From 7bdc2267a926acff14a9b6922894a9955e630a31 Mon Sep 17 00:00:00 2001 From: tsb1995 <47466105+tsb1995@users.noreply.github.com> Date: Mon, 4 Nov 2019 13:32:44 -0800 Subject: [PATCH] Add courses 1 through 4 --- ...-8''Exercise_1_House_Prices_Question.ipynb | 1132 ++++++++++ Course1/Week2/utf-8''Exercise2-Question.ipynb | 163 ++ .../Week3/utf-8''Excercise-3-Question.ipynb | 166 ++ Course1/Week4/utf-8''Exercise4-Question.ipynb | 188 ++ Course2/Week 1/Gradient+Checking+v1.ipynb | 668 ++++++ Course2/Week 1/Initialization.ipynb | 1009 +++++++++ Course2/Week 1/Regularization_v2a.ipynb | 1133 ++++++++++ Course2/Week 2/Optimization_methods_v1b.ipynb | 1591 ++++++++++++++ Course2/Week 3/TensorFlow_Tutorial_v3b.ipynb | 1872 +++++++++++++++++ .../Convolution_model_Application_v1a.ipynb | 963 +++++++++ .../Convolution_model_Step_by_Step_v2a.ipynb | 1616 ++++++++++++++ 11 files changed, 10501 insertions(+) create mode 100644 Course1/Week1/utf-8''Exercise_1_House_Prices_Question.ipynb create mode 100644 Course1/Week2/utf-8''Exercise2-Question.ipynb create mode 100644 Course1/Week3/utf-8''Excercise-3-Question.ipynb create mode 100644 Course1/Week4/utf-8''Exercise4-Question.ipynb create mode 100644 Course2/Week 1/Gradient+Checking+v1.ipynb create mode 100644 Course2/Week 1/Initialization.ipynb create mode 100644 Course2/Week 1/Regularization_v2a.ipynb create mode 100644 Course2/Week 2/Optimization_methods_v1b.ipynb create mode 100644 Course2/Week 3/TensorFlow_Tutorial_v3b.ipynb create mode 100644 Course4/Week1/Convolution_model_Application_v1a.ipynb create mode 100644 Course4/Week1/Convolution_model_Step_by_Step_v2a.ipynb diff --git a/Course1/Week1/utf-8''Exercise_1_House_Prices_Question.ipynb b/Course1/Week1/utf-8''Exercise_1_House_Prices_Question.ipynb new file mode 100644 index 0000000..7c9232d --- /dev/null +++ b/Course1/Week1/utf-8''Exercise_1_House_Prices_Question.ipynb @@ -0,0 +1,1132 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "mw2VBrBcgvGa" + }, + "source": [ + "In this exercise you'll try to build a neural network that predicts the price of a house according to a simple formula.\n", + "\n", + "So, imagine if house pricing was as easy as a house costs 50k + 50k per bedroom, so that a 1 bedroom house costs 100k, a 2 bedroom house costs 150k etc.\n", + "\n", + "How would you create a neural network that learns this relationship so that it would predict a 7 bedroom house as costing close to 400k etc.\n", + "\n", + "Hint: Your network might work better if you scale the house price down. You don't have to give the answer 400...it might be better to create something that predicts the number 4, and then your answer is in the 'hundreds of thousands' etc." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import tensorflow as tf\n", + "import numpy as np\n", + "from tensorflow import keras" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "PUNO2E6SeURH" + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: house_model\n", + "def house_model(y_new):\n", + " xs = np.array([0,1,2,3,4,5,6], dtype=float)\n", + " ys = np.array([0.5,1,1.5,2,2.5,3,3.5], dtype=float)\n", + " model = keras.Sequential([keras.layers.Dense(units=1, input_shape=[1])])\n", + " model.compile(optimizer='sgd', loss='mean_squared_error')\n", + " model.fit(xs,ys,epochs=500)\n", + " return model.predict(y_new)[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/500\n", + "7/7 [==============================] - 0s 32ms/sample - loss: 54.5717\n", + "Epoch 2/500\n", + "7/7 [==============================] - 0s 348us/sample - loss: 28.7507\n", + "Epoch 3/500\n", + "7/7 [==============================] - 0s 277us/sample - loss: 15.1472\n", + "Epoch 4/500\n", + "7/7 [==============================] - 0s 248us/sample - loss: 7.9804\n", + "Epoch 5/500\n", + "7/7 [==============================] - 0s 287us/sample - loss: 4.2046\n", + "Epoch 6/500\n", + "7/7 [==============================] - 0s 245us/sample - loss: 2.2154\n", + "Epoch 7/500\n", + "7/7 [==============================] - 0s 247us/sample - loss: 1.1674\n", + "Epoch 8/500\n", + "7/7 [==============================] - 0s 285us/sample - loss: 0.6152\n", + "Epoch 9/500\n", + "7/7 [==============================] - 0s 12ms/sample - loss: 0.3244\n", + "Epoch 10/500\n", + "7/7 [==============================] - 0s 307us/sample - loss: 0.1711\n", + "Epoch 11/500\n", + "7/7 [==============================] - 0s 261us/sample - loss: 0.0904\n", + "Epoch 12/500\n", + "7/7 [==============================] - 0s 258us/sample - loss: 0.0478\n", + "Epoch 13/500\n", + "7/7 [==============================] - 0s 230us/sample - loss: 0.0254\n", + "Epoch 14/500\n", + "7/7 [==============================] - 0s 217us/sample - loss: 0.0136\n", + "Epoch 15/500\n", + "7/7 [==============================] - 0s 245us/sample - loss: 0.0074\n", + "Epoch 16/500\n", + "7/7 [==============================] - 0s 215us/sample - loss: 0.0041\n", + "Epoch 17/500\n", + "7/7 [==============================] - 0s 12ms/sample - loss: 0.0024\n", + "Epoch 18/500\n", + "7/7 [==============================] - 0s 265us/sample - loss: 0.0014\n", + "Epoch 19/500\n", + "7/7 [==============================] - 0s 289us/sample - loss: 9.6517e-04\n", + "Epoch 20/500\n", + "7/7 [==============================] - 0s 266us/sample - loss: 7.0770e-04\n", + "Epoch 21/500\n", + "7/7 [==============================] - 0s 289us/sample - loss: 5.6974e-04\n", + "Epoch 22/500\n", + "7/7 [==============================] - 0s 270us/sample - loss: 4.9477e-04\n", + "Epoch 23/500\n", + "7/7 [==============================] - 0s 12ms/sample - loss: 4.5301e-04\n", + "Epoch 24/500\n", + "7/7 [==============================] - 0s 341us/sample - loss: 4.2877e-04\n", + "Epoch 25/500\n", + "7/7 [==============================] - 0s 313us/sample - loss: 4.1378e-04\n", + "Epoch 26/500\n", + "7/7 [==============================] - 0s 281us/sample - loss: 4.0370e-04\n", + "Epoch 27/500\n", + "7/7 [==============================] - 0s 305us/sample - loss: 3.9623e-04\n", + "Epoch 28/500\n", + "7/7 [==============================] - 0s 12ms/sample - loss: 3.9016e-04\n", + "Epoch 29/500\n", + "7/7 [==============================] - 0s 294us/sample - loss: 3.8485e-04\n", + "Epoch 30/500\n", + "7/7 [==============================] - 0s 246us/sample - loss: 3.7996e-04\n", + "Epoch 31/500\n", + "7/7 [==============================] - 0s 296us/sample - loss: 3.7533e-04\n", + "Epoch 32/500\n", + "7/7 [==============================] - 0s 267us/sample - loss: 3.7085e-04\n", + "Epoch 33/500\n", + "7/7 [==============================] - 0s 253us/sample - loss: 3.6647e-04\n", + "Epoch 34/500\n", + "7/7 [==============================] - 0s 328us/sample - loss: 3.6217e-04\n", + "Epoch 35/500\n", + "7/7 [==============================] - 0s 239us/sample - loss: 3.5794e-04\n", + "Epoch 36/500\n", + "7/7 [==============================] - 0s 273us/sample - loss: 3.5377e-04\n", + "Epoch 37/500\n", + "7/7 [==============================] - 0s 274us/sample - loss: 3.4965e-04\n", + "Epoch 38/500\n", + "7/7 [==============================] - 0s 271us/sample - loss: 3.4558e-04\n", + "Epoch 39/500\n", + "7/7 [==============================] - 0s 12ms/sample - loss: 3.4155e-04\n", + "Epoch 40/500\n", + "7/7 [==============================] - 0s 265us/sample - loss: 3.3758e-04\n", + "Epoch 41/500\n", + "7/7 [==============================] - 0s 231us/sample - loss: 3.3365e-04\n", + "Epoch 42/500\n", + "7/7 [==============================] - 0s 273us/sample - loss: 3.2976e-04\n", + "Epoch 43/500\n", + "7/7 [==============================] - 0s 305us/sample - loss: 3.2593e-04\n", + "Epoch 44/500\n", + "7/7 [==============================] - 0s 288us/sample - loss: 3.2213e-04\n", + "Epoch 45/500\n", + "7/7 [==============================] - 0s 288us/sample - loss: 3.1838e-04\n", + "Epoch 46/500\n", + "7/7 [==============================] - 0s 264us/sample - loss: 3.1468e-04\n", + "Epoch 47/500\n", + "7/7 [==============================] - 0s 264us/sample - loss: 3.1102e-04\n", + "Epoch 48/500\n", + "7/7 [==============================] - 0s 266us/sample - loss: 3.0740e-04\n", + "Epoch 49/500\n", + "7/7 [==============================] - 0s 296us/sample - loss: 3.0382e-04\n", + "Epoch 50/500\n", + "7/7 [==============================] - 0s 287us/sample - loss: 3.0028e-04\n", + "Epoch 51/500\n", + "7/7 [==============================] - 0s 12ms/sample - loss: 2.9679e-04\n", + "Epoch 52/500\n", + "7/7 [==============================] - 0s 257us/sample - loss: 2.9334e-04\n", + "Epoch 53/500\n", + "7/7 [==============================] - 0s 271us/sample - loss: 2.8992e-04\n", + "Epoch 54/500\n", + "7/7 [==============================] - 0s 249us/sample - loss: 2.8655e-04\n", + "Epoch 55/500\n", + "7/7 [==============================] - 0s 261us/sample - loss: 2.8321e-04\n", + "Epoch 56/500\n", + "7/7 [==============================] - 0s 248us/sample - loss: 2.7992e-04\n", + "Epoch 57/500\n", + "7/7 [==============================] - 0s 12ms/sample - loss: 2.7666e-04\n", + "Epoch 58/500\n", + "7/7 [==============================] - 0s 271us/sample - loss: 2.7344e-04\n", + "Epoch 59/500\n", + "7/7 [==============================] - 0s 235us/sample - loss: 2.7026e-04\n", + "Epoch 60/500\n", + "7/7 [==============================] - 0s 274us/sample - loss: 2.6711e-04\n", + "Epoch 61/500\n", + "7/7 [==============================] - 0s 259us/sample - loss: 2.6400e-04\n", + "Epoch 62/500\n", + "7/7 [==============================] - 0s 259us/sample - loss: 2.6093e-04\n", + "Epoch 63/500\n", + "7/7 [==============================] - 0s 12ms/sample - loss: 2.5790e-04\n", + "Epoch 64/500\n", + "7/7 [==============================] - 0s 304us/sample - loss: 2.5489e-04\n", + "Epoch 65/500\n", + "7/7 [==============================] - 0s 293us/sample - loss: 2.5193e-04\n", + "Epoch 66/500\n", + "7/7 [==============================] - 0s 286us/sample - loss: 2.4899e-04\n", + "Epoch 67/500\n", + "7/7 [==============================] - 0s 289us/sample - loss: 2.4610e-04\n", + "Epoch 68/500\n", + "7/7 [==============================] - 0s 246us/sample - loss: 2.4323e-04\n", + "Epoch 69/500\n", + "7/7 [==============================] - 0s 12ms/sample - loss: 2.4040e-04\n", + "Epoch 70/500\n", + "7/7 [==============================] - 0s 310us/sample - loss: 2.3760e-04\n", + "Epoch 71/500\n", + "7/7 [==============================] - 0s 306us/sample - loss: 2.3484e-04\n", + "Epoch 72/500\n", + "7/7 [==============================] - 0s 281us/sample - loss: 2.3211e-04\n", + "Epoch 73/500\n", + "7/7 [==============================] - 0s 282us/sample - loss: 2.2941e-04\n", + "Epoch 74/500\n", + "7/7 [==============================] - 0s 12ms/sample - loss: 2.2674e-04\n", + "Epoch 75/500\n", + "7/7 [==============================] - 0s 325us/sample - loss: 2.2410e-04\n", + "Epoch 76/500\n", + "7/7 [==============================] - 0s 231us/sample - loss: 2.2149e-04\n", + "Epoch 77/500\n", + "7/7 [==============================] - 0s 250us/sample - loss: 2.1891e-04\n", + "Epoch 78/500\n", + "7/7 [==============================] - 0s 292us/sample - loss: 2.1636e-04\n", + "Epoch 79/500\n", + "7/7 [==============================] - 0s 256us/sample - loss: 2.1385e-04\n", + "Epoch 80/500\n", + "7/7 [==============================] - 0s 12ms/sample - loss: 2.1136e-04\n", + "Epoch 81/500\n", + "7/7 [==============================] - 0s 241us/sample - loss: 2.0890e-04\n", + "Epoch 82/500\n", + "7/7 [==============================] - 0s 240us/sample - loss: 2.0647e-04\n", + "Epoch 83/500\n", + "7/7 [==============================] - 0s 254us/sample - loss: 2.0406e-04\n", + "Epoch 84/500\n", + "7/7 [==============================] - 0s 251us/sample - loss: 2.0169e-04\n", + "Epoch 85/500\n", + "7/7 [==============================] - 0s 250us/sample - loss: 1.9934e-04\n", + "Epoch 86/500\n", + "7/7 [==============================] - 0s 379us/sample - loss: 1.9702e-04\n", + "Epoch 87/500\n", + "7/7 [==============================] - 0s 276us/sample - loss: 1.9473e-04\n", + "Epoch 88/500\n", + "7/7 [==============================] - 0s 263us/sample - loss: 1.9246e-04\n", + "Epoch 89/500\n", + "7/7 [==============================] - 0s 225us/sample - loss: 1.9022e-04\n", + "Epoch 90/500\n", + "7/7 [==============================] - 0s 278us/sample - loss: 1.8801e-04\n", + "Epoch 91/500\n", + "7/7 [==============================] - 0s 250us/sample - loss: 1.8582e-04\n", + "Epoch 92/500\n", + "7/7 [==============================] - 0s 305us/sample - loss: 1.8366e-04\n", + "Epoch 93/500\n", + "7/7 [==============================] - 0s 268us/sample - loss: 1.8152e-04\n", + "Epoch 94/500\n", + "7/7 [==============================] - 0s 262us/sample - loss: 1.7941e-04\n", + "Epoch 95/500\n", + "7/7 [==============================] - 0s 286us/sample - loss: 1.7732e-04\n", + "Epoch 96/500\n", + "7/7 [==============================] - 0s 308us/sample - loss: 1.7526e-04\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 97/500\n", + "7/7 [==============================] - 0s 12ms/sample - loss: 1.7322e-04\n", + "Epoch 98/500\n", + "7/7 [==============================] - 0s 285us/sample - loss: 1.7120e-04\n", + "Epoch 99/500\n", + "7/7 [==============================] - 0s 251us/sample - loss: 1.6921e-04\n", + "Epoch 100/500\n", + "7/7 [==============================] - 0s 269us/sample - loss: 1.6724e-04\n", + "Epoch 101/500\n", + "7/7 [==============================] - 0s 235us/sample - loss: 1.6529e-04\n", + "Epoch 102/500\n", + "7/7 [==============================] - 0s 273us/sample - loss: 1.6337e-04\n", + "Epoch 103/500\n", + "7/7 [==============================] - 0s 12ms/sample - loss: 1.6147e-04\n", + "Epoch 104/500\n", + "7/7 [==============================] - 0s 303us/sample - loss: 1.5959e-04\n", + "Epoch 105/500\n", + "7/7 [==============================] - 0s 314us/sample - loss: 1.5773e-04\n", + "Epoch 106/500\n", + "7/7 [==============================] - 0s 271us/sample - loss: 1.5590e-04\n", + "Epoch 107/500\n", + "7/7 [==============================] - 0s 238us/sample - loss: 1.5408e-04\n", + "Epoch 108/500\n", + "7/7 [==============================] - 0s 324us/sample - loss: 1.5229e-04\n", + "Epoch 109/500\n", + "7/7 [==============================] - 0s 269us/sample - loss: 1.5052e-04\n", + "Epoch 110/500\n", + "7/7 [==============================] - 0s 387us/sample - loss: 1.4877e-04\n", + "Epoch 111/500\n", + "7/7 [==============================] - 0s 322us/sample - loss: 1.4703e-04\n", + "Epoch 112/500\n", + "7/7 [==============================] - 0s 258us/sample - loss: 1.4532e-04\n", + "Epoch 113/500\n", + "7/7 [==============================] - 0s 266us/sample - loss: 1.4363e-04\n", + "Epoch 114/500\n", + "7/7 [==============================] - 0s 276us/sample - loss: 1.4196e-04\n", + "Epoch 115/500\n", + "7/7 [==============================] - 0s 12ms/sample - loss: 1.4031e-04\n", + "Epoch 116/500\n", + "7/7 [==============================] - 0s 240us/sample - loss: 1.3868e-04\n", + "Epoch 117/500\n", + "7/7 [==============================] - 0s 307us/sample - loss: 1.3706e-04\n", + "Epoch 118/500\n", + "7/7 [==============================] - 0s 280us/sample - loss: 1.3547e-04\n", + "Epoch 119/500\n", + "7/7 [==============================] - 0s 292us/sample - loss: 1.3389e-04\n", + "Epoch 120/500\n", + "7/7 [==============================] - 0s 12ms/sample - loss: 1.3233e-04\n", + "Epoch 121/500\n", + "7/7 [==============================] - 0s 308us/sample - loss: 1.3079e-04\n", + "Epoch 122/500\n", + "7/7 [==============================] - 0s 288us/sample - loss: 1.2927e-04\n", + "Epoch 123/500\n", + "7/7 [==============================] - 0s 323us/sample - loss: 1.2777e-04\n", + "Epoch 124/500\n", + "7/7 [==============================] - 0s 265us/sample - loss: 1.2628e-04\n", + "Epoch 125/500\n", + "7/7 [==============================] - 0s 12ms/sample - loss: 1.2481e-04\n", + "Epoch 126/500\n", + "7/7 [==============================] - 0s 275us/sample - loss: 1.2336e-04\n", + "Epoch 127/500\n", + "7/7 [==============================] - 0s 266us/sample - loss: 1.2192e-04\n", + "Epoch 128/500\n", + "7/7 [==============================] - 0s 242us/sample - loss: 1.2050e-04\n", + "Epoch 129/500\n", + "7/7 [==============================] - 0s 248us/sample - loss: 1.1910e-04\n", + "Epoch 130/500\n", + "7/7 [==============================] - 0s 236us/sample - loss: 1.1771e-04\n", + "Epoch 131/500\n", + "7/7 [==============================] - 0s 303us/sample - loss: 1.1634e-04\n", + "Epoch 132/500\n", + "7/7 [==============================] - 0s 382us/sample - loss: 1.1499e-04\n", + "Epoch 133/500\n", + "7/7 [==============================] - 0s 349us/sample - loss: 1.1365e-04\n", + "Epoch 134/500\n", + "7/7 [==============================] - 0s 326us/sample - loss: 1.1233e-04\n", + "Epoch 135/500\n", + "7/7 [==============================] - 0s 256us/sample - loss: 1.1102e-04\n", + "Epoch 136/500\n", + "7/7 [==============================] - 0s 295us/sample - loss: 1.0973e-04\n", + "Epoch 137/500\n", + "7/7 [==============================] - 0s 250us/sample - loss: 1.0845e-04\n", + "Epoch 138/500\n", + "7/7 [==============================] - 0s 12ms/sample - loss: 1.0719e-04\n", + "Epoch 139/500\n", + "7/7 [==============================] - 0s 301us/sample - loss: 1.0594e-04\n", + "Epoch 140/500\n", + "7/7 [==============================] - 0s 273us/sample - loss: 1.0471e-04\n", + "Epoch 141/500\n", + "7/7 [==============================] - 0s 330us/sample - loss: 1.0349e-04\n", + "Epoch 142/500\n", + "7/7 [==============================] - 0s 262us/sample - loss: 1.0229e-04\n", + "Epoch 143/500\n", + "7/7 [==============================] - 0s 12ms/sample - loss: 1.0110e-04\n", + "Epoch 144/500\n", + "7/7 [==============================] - 0s 281us/sample - loss: 9.9920e-05\n", + "Epoch 145/500\n", + "7/7 [==============================] - 0s 252us/sample - loss: 9.8757e-05\n", + "Epoch 146/500\n", + "7/7 [==============================] - 0s 278us/sample - loss: 9.7607e-05\n", + "Epoch 147/500\n", + "7/7 [==============================] - 0s 342us/sample - loss: 9.6472e-05\n", + "Epoch 148/500\n", + "7/7 [==============================] - 0s 12ms/sample - loss: 9.5349e-05\n", + "Epoch 149/500\n", + "7/7 [==============================] - 0s 283us/sample - loss: 9.4239e-05\n", + "Epoch 150/500\n", + "7/7 [==============================] - 0s 269us/sample - loss: 9.3143e-05\n", + "Epoch 151/500\n", + "7/7 [==============================] - 0s 298us/sample - loss: 9.2059e-05\n", + "Epoch 152/500\n", + "7/7 [==============================] - 0s 263us/sample - loss: 9.0988e-05\n", + "Epoch 153/500\n", + "7/7 [==============================] - 0s 279us/sample - loss: 8.9929e-05\n", + "Epoch 154/500\n", + "7/7 [==============================] - 0s 229us/sample - loss: 8.8882e-05\n", + "Epoch 155/500\n", + "7/7 [==============================] - 0s 293us/sample - loss: 8.7848e-05\n", + "Epoch 156/500\n", + "7/7 [==============================] - 0s 245us/sample - loss: 8.6825e-05\n", + "Epoch 157/500\n", + "7/7 [==============================] - 0s 309us/sample - loss: 8.5815e-05\n", + "Epoch 158/500\n", + "7/7 [==============================] - 0s 235us/sample - loss: 8.4816e-05\n", + "Epoch 159/500\n", + "7/7 [==============================] - 0s 255us/sample - loss: 8.3829e-05\n", + "Epoch 160/500\n", + "7/7 [==============================] - 0s 12ms/sample - loss: 8.2854e-05\n", + "Epoch 161/500\n", + "7/7 [==============================] - 0s 302us/sample - loss: 8.1889e-05\n", + "Epoch 162/500\n", + "7/7 [==============================] - 0s 336us/sample - loss: 8.0936e-05\n", + "Epoch 163/500\n", + "7/7 [==============================] - 0s 266us/sample - loss: 7.9995e-05\n", + "Epoch 164/500\n", + "7/7 [==============================] - 0s 288us/sample - loss: 7.9064e-05\n", + "Epoch 165/500\n", + "7/7 [==============================] - 0s 286us/sample - loss: 7.8143e-05\n", + "Epoch 166/500\n", + "7/7 [==============================] - 0s 12ms/sample - loss: 7.7234e-05\n", + "Epoch 167/500\n", + "7/7 [==============================] - 0s 268us/sample - loss: 7.6335e-05\n", + "Epoch 168/500\n", + "7/7 [==============================] - 0s 262us/sample - loss: 7.5447e-05\n", + "Epoch 169/500\n", + "7/7 [==============================] - 0s 316us/sample - loss: 7.4569e-05\n", + "Epoch 170/500\n", + "7/7 [==============================] - 0s 244us/sample - loss: 7.3701e-05\n", + "Epoch 171/500\n", + "7/7 [==============================] - 0s 239us/sample - loss: 7.2843e-05\n", + "Epoch 172/500\n", + "7/7 [==============================] - 0s 12ms/sample - loss: 7.1995e-05\n", + "Epoch 173/500\n", + "7/7 [==============================] - 0s 337us/sample - loss: 7.1158e-05\n", + "Epoch 174/500\n", + "7/7 [==============================] - 0s 346us/sample - loss: 7.0330e-05\n", + "Epoch 175/500\n", + "7/7 [==============================] - 0s 293us/sample - loss: 6.9511e-05\n", + "Epoch 176/500\n", + "7/7 [==============================] - 0s 274us/sample - loss: 6.8702e-05\n", + "Epoch 177/500\n", + "7/7 [==============================] - 0s 262us/sample - loss: 6.7903e-05\n", + "Epoch 178/500\n", + "7/7 [==============================] - 0s 12ms/sample - loss: 6.7113e-05\n", + "Epoch 179/500\n", + "7/7 [==============================] - 0s 328us/sample - loss: 6.6332e-05\n", + "Epoch 180/500\n", + "7/7 [==============================] - 0s 243us/sample - loss: 6.5560e-05\n", + "Epoch 181/500\n", + "7/7 [==============================] - 0s 246us/sample - loss: 6.4797e-05\n", + "Epoch 182/500\n", + "7/7 [==============================] - 0s 309us/sample - loss: 6.4043e-05\n", + "Epoch 183/500\n", + "7/7 [==============================] - 0s 12ms/sample - loss: 6.3298e-05\n", + "Epoch 184/500\n", + "7/7 [==============================] - 0s 308us/sample - loss: 6.2561e-05\n", + "Epoch 185/500\n", + "7/7 [==============================] - 0s 281us/sample - loss: 6.1833e-05\n", + "Epoch 186/500\n", + "7/7 [==============================] - 0s 251us/sample - loss: 6.1113e-05\n", + "Epoch 187/500\n", + "7/7 [==============================] - 0s 272us/sample - loss: 6.0402e-05\n", + "Epoch 188/500\n", + "7/7 [==============================] - 0s 259us/sample - loss: 5.9699e-05\n", + "Epoch 189/500\n", + "7/7 [==============================] - 0s 12ms/sample - loss: 5.9004e-05\n", + "Epoch 190/500\n", + "7/7 [==============================] - 0s 302us/sample - loss: 5.8317e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 191/500\n", + "7/7 [==============================] - 0s 250us/sample - loss: 5.7639e-05\n", + "Epoch 192/500\n", + "7/7 [==============================] - 0s 283us/sample - loss: 5.6968e-05\n", + "Epoch 193/500\n", + "7/7 [==============================] - 0s 237us/sample - loss: 5.6305e-05\n", + "Epoch 194/500\n", + "7/7 [==============================] - 0s 234us/sample - loss: 5.5650e-05\n", + "Epoch 195/500\n", + "7/7 [==============================] - 0s 344us/sample - loss: 5.5002e-05\n", + "Epoch 196/500\n", + "7/7 [==============================] - 0s 256us/sample - loss: 5.4362e-05\n", + "Epoch 197/500\n", + "7/7 [==============================] - 0s 281us/sample - loss: 5.3730e-05\n", + "Epoch 198/500\n", + "7/7 [==============================] - 0s 230us/sample - loss: 5.3104e-05\n", + "Epoch 199/500\n", + "7/7 [==============================] - 0s 311us/sample - loss: 5.2486e-05\n", + "Epoch 200/500\n", + "7/7 [==============================] - 0s 250us/sample - loss: 5.1876e-05\n", + "Epoch 201/500\n", + "7/7 [==============================] - 0s 235us/sample - loss: 5.1272e-05\n", + "Epoch 202/500\n", + "7/7 [==============================] - 0s 353us/sample - loss: 5.0675e-05\n", + "Epoch 203/500\n", + "7/7 [==============================] - 0s 299us/sample - loss: 5.0085e-05\n", + "Epoch 204/500\n", + "7/7 [==============================] - 0s 254us/sample - loss: 4.9503e-05\n", + "Epoch 205/500\n", + "7/7 [==============================] - 0s 254us/sample - loss: 4.8926e-05\n", + "Epoch 206/500\n", + "7/7 [==============================] - 0s 291us/sample - loss: 4.8357e-05\n", + "Epoch 207/500\n", + "7/7 [==============================] - 0s 12ms/sample - loss: 4.7794e-05\n", + "Epoch 208/500\n", + "7/7 [==============================] - 0s 292us/sample - loss: 4.7238e-05\n", + "Epoch 209/500\n", + "7/7 [==============================] - 0s 295us/sample - loss: 4.6689e-05\n", + "Epoch 210/500\n", + "7/7 [==============================] - 0s 358us/sample - loss: 4.6145e-05\n", + "Epoch 211/500\n", + "7/7 [==============================] - 0s 234us/sample - loss: 4.5608e-05\n", + "Epoch 212/500\n", + "7/7 [==============================] - 0s 291us/sample - loss: 4.5077e-05\n", + "Epoch 213/500\n", + "7/7 [==============================] - 0s 361us/sample - loss: 4.4553e-05\n", + "Epoch 214/500\n", + "7/7 [==============================] - 0s 242us/sample - loss: 4.4034e-05\n", + "Epoch 215/500\n", + "7/7 [==============================] - 0s 247us/sample - loss: 4.3521e-05\n", + "Epoch 216/500\n", + "7/7 [==============================] - 0s 260us/sample - loss: 4.3015e-05\n", + "Epoch 217/500\n", + "7/7 [==============================] - 0s 277us/sample - loss: 4.2514e-05\n", + "Epoch 218/500\n", + "7/7 [==============================] - 0s 12ms/sample - loss: 4.2020e-05\n", + "Epoch 219/500\n", + "7/7 [==============================] - 0s 292us/sample - loss: 4.1531e-05\n", + "Epoch 220/500\n", + "7/7 [==============================] - 0s 241us/sample - loss: 4.1047e-05\n", + "Epoch 221/500\n", + "7/7 [==============================] - 0s 303us/sample - loss: 4.0570e-05\n", + "Epoch 222/500\n", + "7/7 [==============================] - 0s 283us/sample - loss: 4.0097e-05\n", + "Epoch 223/500\n", + "7/7 [==============================] - 0s 227us/sample - loss: 3.9631e-05\n", + "Epoch 224/500\n", + "7/7 [==============================] - 0s 12ms/sample - loss: 3.9170e-05\n", + "Epoch 225/500\n", + "7/7 [==============================] - 0s 257us/sample - loss: 3.8714e-05\n", + "Epoch 226/500\n", + "7/7 [==============================] - 0s 255us/sample - loss: 3.8263e-05\n", + "Epoch 227/500\n", + "7/7 [==============================] - 0s 223us/sample - loss: 3.7818e-05\n", + "Epoch 228/500\n", + "7/7 [==============================] - 0s 240us/sample - loss: 3.7378e-05\n", + "Epoch 229/500\n", + "7/7 [==============================] - 0s 13ms/sample - loss: 3.6943e-05\n", + "Epoch 230/500\n", + "7/7 [==============================] - 0s 280us/sample - loss: 3.6513e-05\n", + "Epoch 231/500\n", + "7/7 [==============================] - 0s 270us/sample - loss: 3.6088e-05\n", + "Epoch 232/500\n", + "7/7 [==============================] - 0s 269us/sample - loss: 3.5668e-05\n", + "Epoch 233/500\n", + "7/7 [==============================] - 0s 280us/sample - loss: 3.5253e-05\n", + "Epoch 234/500\n", + "7/7 [==============================] - 0s 270us/sample - loss: 3.4843e-05\n", + "Epoch 235/500\n", + "7/7 [==============================] - 0s 299us/sample - loss: 3.4437e-05\n", + "Epoch 236/500\n", + "7/7 [==============================] - 0s 241us/sample - loss: 3.4036e-05\n", + "Epoch 237/500\n", + "7/7 [==============================] - 0s 260us/sample - loss: 3.3641e-05\n", + "Epoch 238/500\n", + "7/7 [==============================] - 0s 274us/sample - loss: 3.3249e-05\n", + "Epoch 239/500\n", + "7/7 [==============================] - 0s 280us/sample - loss: 3.2862e-05\n", + "Epoch 240/500\n", + "7/7 [==============================] - 0s 245us/sample - loss: 3.2479e-05\n", + "Epoch 241/500\n", + "7/7 [==============================] - 0s 300us/sample - loss: 3.2102e-05\n", + "Epoch 242/500\n", + "7/7 [==============================] - 0s 252us/sample - loss: 3.1728e-05\n", + "Epoch 243/500\n", + "7/7 [==============================] - 0s 339us/sample - loss: 3.1359e-05\n", + "Epoch 244/500\n", + "7/7 [==============================] - 0s 285us/sample - loss: 3.0994e-05\n", + "Epoch 245/500\n", + "7/7 [==============================] - 0s 288us/sample - loss: 3.0633e-05\n", + "Epoch 246/500\n", + "7/7 [==============================] - 0s 12ms/sample - loss: 3.0277e-05\n", + "Epoch 247/500\n", + "7/7 [==============================] - 0s 312us/sample - loss: 2.9924e-05\n", + "Epoch 248/500\n", + "7/7 [==============================] - 0s 237us/sample - loss: 2.9576e-05\n", + "Epoch 249/500\n", + "7/7 [==============================] - 0s 242us/sample - loss: 2.9232e-05\n", + "Epoch 250/500\n", + "7/7 [==============================] - 0s 238us/sample - loss: 2.8892e-05\n", + "Epoch 251/500\n", + "7/7 [==============================] - 0s 241us/sample - loss: 2.8555e-05\n", + "Epoch 252/500\n", + "7/7 [==============================] - 0s 12ms/sample - loss: 2.8224e-05\n", + "Epoch 253/500\n", + "7/7 [==============================] - 0s 277us/sample - loss: 2.7895e-05\n", + "Epoch 254/500\n", + "7/7 [==============================] - 0s 254us/sample - loss: 2.7571e-05\n", + "Epoch 255/500\n", + "7/7 [==============================] - 0s 231us/sample - loss: 2.7249e-05\n", + "Epoch 256/500\n", + "7/7 [==============================] - 0s 286us/sample - loss: 2.6932e-05\n", + "Epoch 257/500\n", + "7/7 [==============================] - 0s 237us/sample - loss: 2.6618e-05\n", + "Epoch 258/500\n", + "7/7 [==============================] - 0s 263us/sample - loss: 2.6309e-05\n", + "Epoch 259/500\n", + "7/7 [==============================] - 0s 12ms/sample - loss: 2.6003e-05\n", + "Epoch 260/500\n", + "7/7 [==============================] - 0s 270us/sample - loss: 2.5700e-05\n", + "Epoch 261/500\n", + "7/7 [==============================] - 0s 263us/sample - loss: 2.5401e-05\n", + "Epoch 262/500\n", + "7/7 [==============================] - 0s 280us/sample - loss: 2.5105e-05\n", + "Epoch 263/500\n", + "7/7 [==============================] - 0s 316us/sample - loss: 2.4813e-05\n", + "Epoch 264/500\n", + "7/7 [==============================] - 0s 290us/sample - loss: 2.4525e-05\n", + "Epoch 265/500\n", + "7/7 [==============================] - 0s 12ms/sample - loss: 2.4239e-05\n", + "Epoch 266/500\n", + "7/7 [==============================] - 0s 283us/sample - loss: 2.3957e-05\n", + "Epoch 267/500\n", + "7/7 [==============================] - 0s 233us/sample - loss: 2.3678e-05\n", + "Epoch 268/500\n", + "7/7 [==============================] - 0s 261us/sample - loss: 2.3402e-05\n", + "Epoch 269/500\n", + "7/7 [==============================] - 0s 289us/sample - loss: 2.3130e-05\n", + "Epoch 270/500\n", + "7/7 [==============================] - 0s 277us/sample - loss: 2.2861e-05\n", + "Epoch 271/500\n", + "7/7 [==============================] - 0s 12ms/sample - loss: 2.2595e-05\n", + "Epoch 272/500\n", + "7/7 [==============================] - 0s 264us/sample - loss: 2.2332e-05\n", + "Epoch 273/500\n", + "7/7 [==============================] - 0s 278us/sample - loss: 2.2072e-05\n", + "Epoch 274/500\n", + "7/7 [==============================] - 0s 344us/sample - loss: 2.1815e-05\n", + "Epoch 275/500\n", + "7/7 [==============================] - 0s 281us/sample - loss: 2.1561e-05\n", + "Epoch 276/500\n", + "7/7 [==============================] - 0s 231us/sample - loss: 2.1311e-05\n", + "Epoch 277/500\n", + "7/7 [==============================] - 0s 275us/sample - loss: 2.1062e-05\n", + "Epoch 278/500\n", + "7/7 [==============================] - 0s 337us/sample - loss: 2.0818e-05\n", + "Epoch 279/500\n", + "7/7 [==============================] - 0s 242us/sample - loss: 2.0575e-05\n", + "Epoch 280/500\n", + "7/7 [==============================] - 0s 249us/sample - loss: 2.0336e-05\n", + "Epoch 281/500\n", + "7/7 [==============================] - 0s 278us/sample - loss: 2.0099e-05\n", + "Epoch 282/500\n", + "7/7 [==============================] - 0s 249us/sample - loss: 1.9865e-05\n", + "Epoch 283/500\n", + "7/7 [==============================] - 0s 257us/sample - loss: 1.9634e-05\n", + "Epoch 284/500\n", + "7/7 [==============================] - 0s 361us/sample - loss: 1.9406e-05\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 285/500\n", + "7/7 [==============================] - 0s 351us/sample - loss: 1.9180e-05\n", + "Epoch 286/500\n", + "7/7 [==============================] - 0s 305us/sample - loss: 1.8957e-05\n", + "Epoch 287/500\n", + "7/7 [==============================] - 0s 275us/sample - loss: 1.8736e-05\n", + "Epoch 288/500\n", + "7/7 [==============================] - 0s 262us/sample - loss: 1.8518e-05\n", + "Epoch 289/500\n", + "7/7 [==============================] - 0s 12ms/sample - loss: 1.8303e-05\n", + "Epoch 290/500\n", + "7/7 [==============================] - 0s 280us/sample - loss: 1.8089e-05\n", + "Epoch 291/500\n", + "7/7 [==============================] - 0s 267us/sample - loss: 1.7879e-05\n", + "Epoch 292/500\n", + "7/7 [==============================] - 0s 287us/sample - loss: 1.7671e-05\n", + "Epoch 293/500\n", + "7/7 [==============================] - 0s 294us/sample - loss: 1.7465e-05\n", + "Epoch 294/500\n", + "7/7 [==============================] - 0s 254us/sample - loss: 1.7262e-05\n", + "Epoch 295/500\n", + "7/7 [==============================] - 0s 12ms/sample - loss: 1.7061e-05\n", + "Epoch 296/500\n", + "7/7 [==============================] - 0s 293us/sample - loss: 1.6862e-05\n", + "Epoch 297/500\n", + "7/7 [==============================] - 0s 248us/sample - loss: 1.6666e-05\n", + "Epoch 298/500\n", + "7/7 [==============================] - 0s 300us/sample - loss: 1.6472e-05\n", + "Epoch 299/500\n", + "7/7 [==============================] - 0s 239us/sample - loss: 1.6281e-05\n", + "Epoch 300/500\n", + "7/7 [==============================] - 0s 287us/sample - loss: 1.6091e-05\n", + "Epoch 301/500\n", + "7/7 [==============================] - 0s 12ms/sample - loss: 1.5904e-05\n", + "Epoch 302/500\n", + "7/7 [==============================] - 0s 325us/sample - loss: 1.5719e-05\n", + "Epoch 303/500\n", + "7/7 [==============================] - 0s 298us/sample - loss: 1.5536e-05\n", + "Epoch 304/500\n", + "7/7 [==============================] - 0s 249us/sample - loss: 1.5355e-05\n", + "Epoch 305/500\n", + "7/7 [==============================] - 0s 253us/sample - loss: 1.5177e-05\n", + "Epoch 306/500\n", + "7/7 [==============================] - 0s 12ms/sample - loss: 1.5000e-05\n", + "Epoch 307/500\n", + "7/7 [==============================] - 0s 349us/sample - loss: 1.4825e-05\n", + "Epoch 308/500\n", + "7/7 [==============================] - 0s 298us/sample - loss: 1.4653e-05\n", + "Epoch 309/500\n", + "7/7 [==============================] - 0s 333us/sample - loss: 1.4483e-05\n", + "Epoch 310/500\n", + "7/7 [==============================] - 0s 293us/sample - loss: 1.4314e-05\n", + "Epoch 311/500\n", + "7/7 [==============================] - 0s 12ms/sample - loss: 1.4147e-05\n", + "Epoch 312/500\n", + "7/7 [==============================] - 0s 276us/sample - loss: 1.3982e-05\n", + "Epoch 313/500\n", + "7/7 [==============================] - 0s 237us/sample - loss: 1.3820e-05\n", + "Epoch 314/500\n", + "7/7 [==============================] - 0s 252us/sample - loss: 1.3659e-05\n", + "Epoch 315/500\n", + "7/7 [==============================] - 0s 356us/sample - loss: 1.3500e-05\n", + "Epoch 316/500\n", + "7/7 [==============================] - 0s 265us/sample - loss: 1.3343e-05\n", + "Epoch 317/500\n", + "7/7 [==============================] - 0s 12ms/sample - loss: 1.3188e-05\n", + "Epoch 318/500\n", + "7/7 [==============================] - 0s 314us/sample - loss: 1.3034e-05\n", + "Epoch 319/500\n", + "7/7 [==============================] - 0s 255us/sample - loss: 1.2883e-05\n", + "Epoch 320/500\n", + "7/7 [==============================] - 0s 323us/sample - loss: 1.2733e-05\n", + "Epoch 321/500\n", + "7/7 [==============================] - 0s 265us/sample - loss: 1.2584e-05\n", + "Epoch 322/500\n", + "7/7 [==============================] - 0s 298us/sample - loss: 1.2438e-05\n", + "Epoch 323/500\n", + "7/7 [==============================] - 0s 12ms/sample - loss: 1.2293e-05\n", + "Epoch 324/500\n", + "7/7 [==============================] - 0s 306us/sample - loss: 1.2150e-05\n", + "Epoch 325/500\n", + "7/7 [==============================] - 0s 266us/sample - loss: 1.2009e-05\n", + "Epoch 326/500\n", + "7/7 [==============================] - 0s 310us/sample - loss: 1.1869e-05\n", + "Epoch 327/500\n", + "7/7 [==============================] - 0s 268us/sample - loss: 1.1731e-05\n", + "Epoch 328/500\n", + "7/7 [==============================] - 0s 12ms/sample - loss: 1.1594e-05\n", + "Epoch 329/500\n", + "7/7 [==============================] - 0s 329us/sample - loss: 1.1459e-05\n", + "Epoch 330/500\n", + "7/7 [==============================] - 0s 237us/sample - loss: 1.1326e-05\n", + "Epoch 331/500\n", + "7/7 [==============================] - 0s 322us/sample - loss: 1.1194e-05\n", + "Epoch 332/500\n", + "7/7 [==============================] - 0s 263us/sample - loss: 1.1064e-05\n", + "Epoch 333/500\n", + "7/7 [==============================] - 0s 221us/sample - loss: 1.0935e-05\n", + "Epoch 334/500\n", + "7/7 [==============================] - 0s 12ms/sample - loss: 1.0808e-05\n", + "Epoch 335/500\n", + "7/7 [==============================] - 0s 330us/sample - loss: 1.0682e-05\n", + "Epoch 336/500\n", + "7/7 [==============================] - 0s 267us/sample - loss: 1.0558e-05\n", + "Epoch 337/500\n", + "7/7 [==============================] - 0s 262us/sample - loss: 1.0435e-05\n", + "Epoch 338/500\n", + "7/7 [==============================] - 0s 302us/sample - loss: 1.0313e-05\n", + "Epoch 339/500\n", + "7/7 [==============================] - 0s 320us/sample - loss: 1.0193e-05\n", + "Epoch 340/500\n", + "7/7 [==============================] - 0s 12ms/sample - loss: 1.0075e-05\n", + "Epoch 341/500\n", + "7/7 [==============================] - 0s 296us/sample - loss: 9.9576e-06\n", + "Epoch 342/500\n", + "7/7 [==============================] - 0s 335us/sample - loss: 9.8416e-06\n", + "Epoch 343/500\n", + "7/7 [==============================] - 0s 235us/sample - loss: 9.7270e-06\n", + "Epoch 344/500\n", + "7/7 [==============================] - 0s 228us/sample - loss: 9.6141e-06\n", + "Epoch 345/500\n", + "7/7 [==============================] - 0s 238us/sample - loss: 9.5021e-06\n", + "Epoch 346/500\n", + "7/7 [==============================] - 0s 12ms/sample - loss: 9.3915e-06\n", + "Epoch 347/500\n", + "7/7 [==============================] - 0s 358us/sample - loss: 9.2823e-06\n", + "Epoch 348/500\n", + "7/7 [==============================] - 0s 283us/sample - loss: 9.1742e-06\n", + "Epoch 349/500\n", + "7/7 [==============================] - 0s 306us/sample - loss: 9.0674e-06\n", + "Epoch 350/500\n", + "7/7 [==============================] - 0s 224us/sample - loss: 8.9617e-06\n", + "Epoch 351/500\n", + "7/7 [==============================] - 0s 227us/sample - loss: 8.8575e-06\n", + "Epoch 352/500\n", + "7/7 [==============================] - 0s 12ms/sample - loss: 8.7546e-06\n", + "Epoch 353/500\n", + "7/7 [==============================] - 0s 375us/sample - loss: 8.6527e-06\n", + "Epoch 354/500\n", + "7/7 [==============================] - 0s 261us/sample - loss: 8.5519e-06\n", + "Epoch 355/500\n", + "7/7 [==============================] - 0s 268us/sample - loss: 8.4523e-06\n", + "Epoch 356/500\n", + "7/7 [==============================] - 0s 297us/sample - loss: 8.3540e-06\n", + "Epoch 357/500\n", + "7/7 [==============================] - 0s 257us/sample - loss: 8.2568e-06\n", + "Epoch 358/500\n", + "7/7 [==============================] - 0s 377us/sample - loss: 8.1606e-06\n", + "Epoch 359/500\n", + "7/7 [==============================] - 0s 240us/sample - loss: 8.0654e-06\n", + "Epoch 360/500\n", + "7/7 [==============================] - 0s 264us/sample - loss: 7.9719e-06\n", + "Epoch 361/500\n", + "7/7 [==============================] - 0s 245us/sample - loss: 7.8791e-06\n", + "Epoch 362/500\n", + "7/7 [==============================] - 0s 275us/sample - loss: 7.7874e-06\n", + "Epoch 363/500\n", + "7/7 [==============================] - 0s 285us/sample - loss: 7.6967e-06\n", + "Epoch 364/500\n", + "7/7 [==============================] - 0s 339us/sample - loss: 7.6070e-06\n", + "Epoch 365/500\n", + "7/7 [==============================] - 0s 262us/sample - loss: 7.5186e-06\n", + "Epoch 366/500\n", + "7/7 [==============================] - 0s 273us/sample - loss: 7.4310e-06\n", + "Epoch 367/500\n", + "7/7 [==============================] - 0s 252us/sample - loss: 7.3446e-06\n", + "Epoch 368/500\n", + "7/7 [==============================] - 0s 313us/sample - loss: 7.2592e-06\n", + "Epoch 369/500\n", + "7/7 [==============================] - 0s 262us/sample - loss: 7.1746e-06\n", + "Epoch 370/500\n", + "7/7 [==============================] - 0s 382us/sample - loss: 7.0912e-06\n", + "Epoch 371/500\n", + "7/7 [==============================] - 0s 348us/sample - loss: 7.0086e-06\n", + "Epoch 372/500\n", + "7/7 [==============================] - 0s 239us/sample - loss: 6.9272e-06\n", + "Epoch 373/500\n", + "7/7 [==============================] - 0s 249us/sample - loss: 6.8464e-06\n", + "Epoch 374/500\n", + "7/7 [==============================] - 0s 321us/sample - loss: 6.7667e-06\n", + "Epoch 375/500\n", + "7/7 [==============================] - 0s 12ms/sample - loss: 6.6880e-06\n", + "Epoch 376/500\n", + "7/7 [==============================] - 0s 269us/sample - loss: 6.6101e-06\n", + "Epoch 377/500\n", + "7/7 [==============================] - 0s 243us/sample - loss: 6.5331e-06\n", + "Epoch 378/500\n", + "7/7 [==============================] - 0s 289us/sample - loss: 6.4572e-06\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 379/500\n", + "7/7 [==============================] - 0s 247us/sample - loss: 6.3819e-06\n", + "Epoch 380/500\n", + "7/7 [==============================] - 0s 270us/sample - loss: 6.3079e-06\n", + "Epoch 381/500\n", + "7/7 [==============================] - 0s 242us/sample - loss: 6.2343e-06\n", + "Epoch 382/500\n", + "7/7 [==============================] - 0s 12ms/sample - loss: 6.1619e-06\n", + "Epoch 383/500\n", + "7/7 [==============================] - 0s 333us/sample - loss: 6.0901e-06\n", + "Epoch 384/500\n", + "7/7 [==============================] - 0s 241us/sample - loss: 6.0192e-06\n", + "Epoch 385/500\n", + "7/7 [==============================] - 0s 301us/sample - loss: 5.9491e-06\n", + "Epoch 386/500\n", + "7/7 [==============================] - 0s 281us/sample - loss: 5.8799e-06\n", + "Epoch 387/500\n", + "7/7 [==============================] - 0s 260us/sample - loss: 5.8115e-06\n", + "Epoch 388/500\n", + "7/7 [==============================] - 0s 388us/sample - loss: 5.7438e-06\n", + "Epoch 389/500\n", + "7/7 [==============================] - 0s 261us/sample - loss: 5.6769e-06\n", + "Epoch 390/500\n", + "7/7 [==============================] - 0s 254us/sample - loss: 5.6108e-06\n", + "Epoch 391/500\n", + "7/7 [==============================] - 0s 247us/sample - loss: 5.5454e-06\n", + "Epoch 392/500\n", + "7/7 [==============================] - 0s 248us/sample - loss: 5.4809e-06\n", + "Epoch 393/500\n", + "7/7 [==============================] - 0s 12ms/sample - loss: 5.4172e-06\n", + "Epoch 394/500\n", + "7/7 [==============================] - 0s 271us/sample - loss: 5.3542e-06\n", + "Epoch 395/500\n", + "7/7 [==============================] - 0s 259us/sample - loss: 5.2919e-06\n", + "Epoch 396/500\n", + "7/7 [==============================] - 0s 234us/sample - loss: 5.2303e-06\n", + "Epoch 397/500\n", + "7/7 [==============================] - 0s 277us/sample - loss: 5.1693e-06\n", + "Epoch 398/500\n", + "7/7 [==============================] - 0s 303us/sample - loss: 5.1092e-06\n", + "Epoch 399/500\n", + "7/7 [==============================] - 0s 12ms/sample - loss: 5.0497e-06\n", + "Epoch 400/500\n", + "7/7 [==============================] - 0s 344us/sample - loss: 4.9910e-06\n", + "Epoch 401/500\n", + "7/7 [==============================] - 0s 290us/sample - loss: 4.9329e-06\n", + "Epoch 402/500\n", + "7/7 [==============================] - 0s 257us/sample - loss: 4.8755e-06\n", + "Epoch 403/500\n", + "7/7 [==============================] - 0s 272us/sample - loss: 4.8186e-06\n", + "Epoch 404/500\n", + "7/7 [==============================] - 0s 289us/sample - loss: 4.7626e-06\n", + "Epoch 405/500\n", + "7/7 [==============================] - 0s 12ms/sample - loss: 4.7072e-06\n", + "Epoch 406/500\n", + "7/7 [==============================] - 0s 345us/sample - loss: 4.6525e-06\n", + "Epoch 407/500\n", + "7/7 [==============================] - 0s 272us/sample - loss: 4.5983e-06\n", + "Epoch 408/500\n", + "7/7 [==============================] - 0s 298us/sample - loss: 4.5448e-06\n", + "Epoch 409/500\n", + "7/7 [==============================] - 0s 341us/sample - loss: 4.4918e-06\n", + "Epoch 410/500\n", + "7/7 [==============================] - 0s 12ms/sample - loss: 4.4395e-06\n", + "Epoch 411/500\n", + "7/7 [==============================] - 0s 346us/sample - loss: 4.3880e-06\n", + "Epoch 412/500\n", + "7/7 [==============================] - 0s 281us/sample - loss: 4.3370e-06\n", + "Epoch 413/500\n", + "7/7 [==============================] - 0s 246us/sample - loss: 4.2865e-06\n", + "Epoch 414/500\n", + "7/7 [==============================] - 0s 249us/sample - loss: 4.2365e-06\n", + "Epoch 415/500\n", + "7/7 [==============================] - 0s 236us/sample - loss: 4.1873e-06\n", + "Epoch 416/500\n", + "7/7 [==============================] - 0s 12ms/sample - loss: 4.1386e-06\n", + "Epoch 417/500\n", + "7/7 [==============================] - 0s 269us/sample - loss: 4.0903e-06\n", + "Epoch 418/500\n", + "7/7 [==============================] - 0s 247us/sample - loss: 4.0427e-06\n", + "Epoch 419/500\n", + "7/7 [==============================] - 0s 274us/sample - loss: 3.9956e-06\n", + "Epoch 420/500\n", + "7/7 [==============================] - 0s 266us/sample - loss: 3.9491e-06\n", + "Epoch 421/500\n", + "7/7 [==============================] - 0s 276us/sample - loss: 3.9032e-06\n", + "Epoch 422/500\n", + "7/7 [==============================] - 0s 12ms/sample - loss: 3.8578e-06\n", + "Epoch 423/500\n", + "7/7 [==============================] - 0s 283us/sample - loss: 3.8129e-06\n", + "Epoch 424/500\n", + "7/7 [==============================] - 0s 245us/sample - loss: 3.7686e-06\n", + "Epoch 425/500\n", + "7/7 [==============================] - 0s 242us/sample - loss: 3.7248e-06\n", + "Epoch 426/500\n", + "7/7 [==============================] - 0s 263us/sample - loss: 3.6813e-06\n", + "Epoch 427/500\n", + "7/7 [==============================] - 0s 265us/sample - loss: 3.6384e-06\n", + "Epoch 428/500\n", + "7/7 [==============================] - 0s 12ms/sample - loss: 3.5961e-06\n", + "Epoch 429/500\n", + "7/7 [==============================] - 0s 308us/sample - loss: 3.5543e-06\n", + "Epoch 430/500\n", + "7/7 [==============================] - 0s 282us/sample - loss: 3.5129e-06\n", + "Epoch 431/500\n", + "7/7 [==============================] - 0s 244us/sample - loss: 3.4720e-06\n", + "Epoch 432/500\n", + "7/7 [==============================] - 0s 251us/sample - loss: 3.4316e-06\n", + "Epoch 433/500\n", + "7/7 [==============================] - 0s 12ms/sample - loss: 3.3918e-06\n", + "Epoch 434/500\n", + "7/7 [==============================] - 0s 298us/sample - loss: 3.3522e-06\n", + "Epoch 435/500\n", + "7/7 [==============================] - 0s 273us/sample - loss: 3.3132e-06\n", + "Epoch 436/500\n", + "7/7 [==============================] - 0s 246us/sample - loss: 3.2746e-06\n", + "Epoch 437/500\n", + "7/7 [==============================] - 0s 249us/sample - loss: 3.2365e-06\n", + "Epoch 438/500\n", + "7/7 [==============================] - 0s 254us/sample - loss: 3.1988e-06\n", + "Epoch 439/500\n", + "7/7 [==============================] - 0s 12ms/sample - loss: 3.1616e-06\n", + "Epoch 440/500\n", + "7/7 [==============================] - 0s 285us/sample - loss: 3.1248e-06\n", + "Epoch 441/500\n", + "7/7 [==============================] - 0s 297us/sample - loss: 3.0885e-06\n", + "Epoch 442/500\n", + "7/7 [==============================] - 0s 256us/sample - loss: 3.0525e-06\n", + "Epoch 443/500\n", + "7/7 [==============================] - 0s 315us/sample - loss: 3.0170e-06\n", + "Epoch 444/500\n", + "7/7 [==============================] - 0s 276us/sample - loss: 2.9819e-06\n", + "Epoch 445/500\n", + "7/7 [==============================] - 0s 12ms/sample - loss: 2.9472e-06\n", + "Epoch 446/500\n", + "7/7 [==============================] - 0s 261us/sample - loss: 2.9128e-06\n", + "Epoch 447/500\n", + "7/7 [==============================] - 0s 229us/sample - loss: 2.8790e-06\n", + "Epoch 448/500\n", + "7/7 [==============================] - 0s 302us/sample - loss: 2.8455e-06\n", + "Epoch 449/500\n", + "7/7 [==============================] - 0s 290us/sample - loss: 2.8123e-06\n", + "Epoch 450/500\n", + "7/7 [==============================] - 0s 237us/sample - loss: 2.7796e-06\n", + "Epoch 451/500\n", + "7/7 [==============================] - 0s 12ms/sample - loss: 2.7473e-06\n", + "Epoch 452/500\n", + "7/7 [==============================] - 0s 321us/sample - loss: 2.7153e-06\n", + "Epoch 453/500\n", + "7/7 [==============================] - 0s 329us/sample - loss: 2.6837e-06\n", + "Epoch 454/500\n", + "7/7 [==============================] - 0s 321us/sample - loss: 2.6525e-06\n", + "Epoch 455/500\n", + "7/7 [==============================] - 0s 256us/sample - loss: 2.6215e-06\n", + "Epoch 456/500\n", + "7/7 [==============================] - 0s 365us/sample - loss: 2.5911e-06\n", + "Epoch 457/500\n", + "7/7 [==============================] - 0s 326us/sample - loss: 2.5609e-06\n", + "Epoch 458/500\n", + "7/7 [==============================] - 0s 321us/sample - loss: 2.5311e-06\n", + "Epoch 459/500\n", + "7/7 [==============================] - 0s 304us/sample - loss: 2.5017e-06\n", + "Epoch 460/500\n", + "7/7 [==============================] - 0s 239us/sample - loss: 2.4726e-06\n", + "Epoch 461/500\n", + "7/7 [==============================] - 0s 259us/sample - loss: 2.4437e-06\n", + "Epoch 462/500\n", + "7/7 [==============================] - 0s 281us/sample - loss: 2.4153e-06\n", + "Epoch 463/500\n", + "7/7 [==============================] - 0s 347us/sample - loss: 2.3873e-06\n", + "Epoch 464/500\n", + "7/7 [==============================] - 0s 275us/sample - loss: 2.3595e-06\n", + "Epoch 465/500\n", + "7/7 [==============================] - 0s 257us/sample - loss: 2.3321e-06\n", + "Epoch 466/500\n", + "7/7 [==============================] - 0s 291us/sample - loss: 2.3048e-06\n", + "Epoch 467/500\n", + "7/7 [==============================] - 0s 280us/sample - loss: 2.2780e-06\n", + "Epoch 468/500\n", + "7/7 [==============================] - 0s 12ms/sample - loss: 2.2515e-06\n", + "Epoch 469/500\n", + "7/7 [==============================] - 0s 300us/sample - loss: 2.2253e-06\n", + "Epoch 470/500\n", + "7/7 [==============================] - 0s 243us/sample - loss: 2.1995e-06\n", + "Epoch 471/500\n", + "7/7 [==============================] - 0s 239us/sample - loss: 2.1738e-06\n", + "Epoch 472/500\n", + "7/7 [==============================] - 0s 250us/sample - loss: 2.1486e-06\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 473/500\n", + "7/7 [==============================] - 0s 262us/sample - loss: 2.1236e-06\n", + "Epoch 474/500\n", + "7/7 [==============================] - 0s 267us/sample - loss: 2.0988e-06\n", + "Epoch 475/500\n", + "7/7 [==============================] - 0s 237us/sample - loss: 2.0744e-06\n", + "Epoch 476/500\n", + "7/7 [==============================] - 0s 11ms/sample - loss: 2.0502e-06\n", + "Epoch 477/500\n", + "7/7 [==============================] - 0s 334us/sample - loss: 2.0265e-06\n", + "Epoch 478/500\n", + "7/7 [==============================] - 0s 310us/sample - loss: 2.0028e-06\n", + "Epoch 479/500\n", + "7/7 [==============================] - 0s 275us/sample - loss: 1.9796e-06\n", + "Epoch 480/500\n", + "7/7 [==============================] - 0s 234us/sample - loss: 1.9566e-06\n", + "Epoch 481/500\n", + "7/7 [==============================] - 0s 257us/sample - loss: 1.9337e-06\n", + "Epoch 482/500\n", + "7/7 [==============================] - 0s 12ms/sample - loss: 1.9113e-06\n", + "Epoch 483/500\n", + "7/7 [==============================] - 0s 278us/sample - loss: 1.8890e-06\n", + "Epoch 484/500\n", + "7/7 [==============================] - 0s 232us/sample - loss: 1.8669e-06\n", + "Epoch 485/500\n", + "7/7 [==============================] - 0s 241us/sample - loss: 1.8453e-06\n", + "Epoch 486/500\n", + "7/7 [==============================] - 0s 249us/sample - loss: 1.8238e-06\n", + "Epoch 487/500\n", + "7/7 [==============================] - 0s 13ms/sample - loss: 1.8026e-06\n", + "Epoch 488/500\n", + "7/7 [==============================] - 0s 281us/sample - loss: 1.7815e-06\n", + "Epoch 489/500\n", + "7/7 [==============================] - 0s 244us/sample - loss: 1.7608e-06\n", + "Epoch 490/500\n", + "7/7 [==============================] - 0s 222us/sample - loss: 1.7404e-06\n", + "Epoch 491/500\n", + "7/7 [==============================] - 0s 286us/sample - loss: 1.7201e-06\n", + "Epoch 492/500\n", + "7/7 [==============================] - 0s 228us/sample - loss: 1.7001e-06\n", + "Epoch 493/500\n", + "7/7 [==============================] - 0s 12ms/sample - loss: 1.6803e-06\n", + "Epoch 494/500\n", + "7/7 [==============================] - 0s 341us/sample - loss: 1.6607e-06\n", + "Epoch 495/500\n", + "7/7 [==============================] - 0s 240us/sample - loss: 1.6414e-06\n", + "Epoch 496/500\n", + "7/7 [==============================] - 0s 256us/sample - loss: 1.6224e-06\n", + "Epoch 497/500\n", + "7/7 [==============================] - 0s 238us/sample - loss: 1.6034e-06\n", + "Epoch 498/500\n", + "7/7 [==============================] - 0s 232us/sample - loss: 1.5848e-06\n", + "Epoch 499/500\n", + "7/7 [==============================] - 0s 235us/sample - loss: 1.5663e-06\n", + "Epoch 500/500\n", + "7/7 [==============================] - 0s 329us/sample - loss: 1.5481e-06\n", + "[4.0014544]\n" + ] + } + ], + "source": [ + "prediction = house_model([7.0])\n", + "print(prediction)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "coursera": { + "course_slug": "introduction-tensorflow", + "graded_item_id": "jRjw8", + "launcher_item_id": "YoQKl" + }, + "kernelspec": { + "display_name": "Python 3", + "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.6.8" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Course1/Week2/utf-8''Exercise2-Question.ipynb b/Course1/Week2/utf-8''Exercise2-Question.ipynb new file mode 100644 index 0000000..bd4660a --- /dev/null +++ b/Course1/Week2/utf-8''Exercise2-Question.ipynb @@ -0,0 +1,163 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "tOoyQ70H00_s" + }, + "source": [ + "## Exercise 2\n", + "In the course you learned how to do classificaiton using Fashion MNIST, a data set containing items of clothing. There's another, similar dataset called MNIST which has items of handwriting -- the digits 0 through 9.\n", + "\n", + "Write an MNIST classifier that trains to 99% accuracy or above, and does it without a fixed number of epochs -- i.e. you should stop training once you reach that level of accuracy.\n", + "\n", + "Some notes:\n", + "1. It should succeed in less than 10 epochs, so it is okay to change epochs= to 10, but nothing larger\n", + "2. When it reaches 99% or greater it should print out the string \"Reached 99% accuracy so cancelling training!\"\n", + "3. If you add any additional variables, make sure you use the same names as the ones used in the class\n", + "\n", + "I've started the code for you below -- how would you finish it? " + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import tensorflow as tf\n", + "from os import path, getcwd, chdir\n", + "\n", + "# DO NOT CHANGE THE LINE BELOW. If you are developing in a local\n", + "# environment, then grab mnist.npz from the Coursera Jupyter Notebook\n", + "# and place it inside a local folder and edit the path to that location\n", + "path = f\"{getcwd()}/../tmp2/mnist.npz\"" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "9rvXQGAA0ssC" + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: train_mnist\n", + "def train_mnist():\n", + " # Please write your code only where you are indicated.\n", + " # please do not remove # model fitting inline comments.\n", + "\n", + " # Setup callback such that it stops training after hitting 99% accuracy\n", + " class myCallback(tf.keras.callbacks.Callback):\n", + " def on_epoch_end(self, epoch, logs={}):\n", + " if logs.get('acc')>0.99:\n", + " print(\"Reached 99% accuracy so cancelling training!\")\n", + " self.model.stop_training=True\n", + "\n", + " # Call your callbacks\n", + " callbacks=myCallback()\n", + "\n", + " mnist = tf.keras.datasets.mnist\n", + "\n", + " (x_train, y_train),(x_test, y_test) = mnist.load_data(path=path)\n", + " \n", + " # Normalize our features\n", + " x_train = x_train / 255.0\n", + " x_test = x_test / 255.0\n", + "\n", + " model = tf.keras.models.Sequential([\n", + " # Flatten our input to be a vector as opposed to a 28 x 28 matrix\n", + " tf.keras.layers.Flatten(),\n", + " \n", + " # Setup first (and only) hidden layer with relu activation so that only positive values are accepted\n", + " tf.keras.layers.Dense(1024, activation=tf.nn.relu),\n", + " \n", + " # Setup final output layer with size corrosponding to our 10 classes and softmax activation to\n", + " # expedite our code for deciding which class a sample should be attributed to\n", + " tf.keras.layers.Dense(10, activation=tf.nn.softmax)\n", + " ])\n", + "\n", + " model.compile(optimizer='adam',\n", + " loss='sparse_categorical_crossentropy',\n", + " metrics=['accuracy'])\n", + " \n", + " # model fitting\n", + " history = model.fit( \n", + " # Fit model to the training set (not our test set) and run for a maximum of 10 epochs\n", + " # We include callbacks to stop the training when we hit our accuracy threshold\n", + " x_train, y_train, epochs=6, callbacks=[callbacks] \n", + " )\n", + " # model fitting\n", + " return history.epoch, history.history['acc'][-1]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "9rvXQGAA0ssC" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "WARNING: Logging before flag parsing goes to stderr.\n", + "W0930 19:29:01.265596 139898245306176 deprecation.py:506] From /usr/local/lib/python3.6/dist-packages/tensorflow/python/ops/init_ops.py:1251: calling VarianceScaling.__init__ (from tensorflow.python.ops.init_ops) with dtype is deprecated and will be removed in a future version.\n", + "Instructions for updating:\n", + "Call initializer instance with the dtype argument instead of passing it to the constructor\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/6\n", + "34016/60000 [================>.............] - ETA: 7s - loss: 0.2347 - acc: 0.9305" + ] + } + ], + "source": [ + "train_mnist()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "coursera": { + "course_slug": "introduction-tensorflow", + "graded_item_id": "d6dew", + "launcher_item_id": "FExZ4" + }, + "kernelspec": { + "display_name": "Python 3", + "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.6.8" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/Course1/Week3/utf-8''Excercise-3-Question.ipynb b/Course1/Week3/utf-8''Excercise-3-Question.ipynb new file mode 100644 index 0000000..de0e774 --- /dev/null +++ b/Course1/Week3/utf-8''Excercise-3-Question.ipynb @@ -0,0 +1,166 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "iQjHqsmTAVLU" + }, + "source": [ + "## Exercise 3\n", + "In the videos you looked at how you would improve Fashion MNIST using Convolutions. For your exercise see if you can improve MNIST to 99.8% accuracy or more using only a single convolutional layer and a single MaxPooling 2D. You should stop training once the accuracy goes above this amount. It should happen in less than 20 epochs, so it's ok to hard code the number of epochs for training, but your training must end once it hits the above metric. If it doesn't, then you'll need to redesign your layers.\n", + "\n", + "I've started the code for you -- you need to finish it!\n", + "\n", + "When 99.8% accuracy has been hit, you should print out the string \"Reached 99.8% accuracy so cancelling training!\"\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "import tensorflow as tf\n", + "from os import path, getcwd, chdir\n", + "\n", + "# DO NOT CHANGE THE LINE BELOW. If you are developing in a local\n", + "# environment, then grab mnist.npz from the Coursera Jupyter Notebook\n", + "# and place it inside a local folder and edit the path to that location\n", + "path = f\"{getcwd()}/../tmp2/mnist.npz\"" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "config = tf.ConfigProto()\n", + "config.gpu_options.allow_growth = True\n", + "sess = tf.Session(config=config)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "# GRADED FUNCTION: train_mnist_conv\n", + "def train_mnist_conv():\n", + " # Please write your code only where you are indicated.\n", + " # please do not remove model fitting inline comments.\n", + "\n", + " # Setup callback to stop when we hit 99.8% accuracy\n", + " class myCallback(tf.keras.callbacks.Callback):\n", + " def on_epoch_end(self, epoch, logs={}):\n", + " if (logs.get('acc')>0.998):\n", + " print(\"Reached 99.8% accuracy so cancelling training!\")\n", + " self.model.stop_training=True\n", + " \n", + " callbacks=myCallback()\n", + "\n", + " mnist = tf.keras.datasets.mnist\n", + " (training_images, training_labels), (test_images, test_labels) = mnist.load_data(path=path)\n", + " # Format inputs to be 4D vectors and normalizing \n", + " training_images = training_images.reshape(60000, 28, 28, 1)\n", + " training_images = training_images / 255.0\n", + " test_images = test_images.reshape(10000, 28, 28, 1)\n", + " test_images = test_images / 255.0\n", + "\n", + " model = tf.keras.models.Sequential([\n", + " # Add a couple layers of convolution and a single layer of pooling\n", + " # Only one layer of pooling due to such a high goal for accuracy\n", + " tf.keras.layers.Conv2D(64, (3,3), activation='relu', input_shape=(28,28,1)),\n", + " tf.keras.layers.MaxPooling2D(3,3),\n", + " tf.keras.layers.Conv2D(64, (3,3), activation='relu'),\n", + " \n", + " # Flatten out input data\n", + " tf.keras.layers.Flatten(),\n", + " \n", + " # Add two hidden layers of size 128 to provide complexity needed to reach goal accuracy\n", + " tf.keras.layers.Dense(128, activation='relu'),\n", + " tf.keras.layers.Dense(128, activation='relu'),\n", + " tf.keras.layers.Dense(10, activation='softmax')\n", + " ])\n", + "\n", + " model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])\n", + " # model fitting\n", + " history = model.fit(\n", + " training_images, training_labels, epochs=20, callbacks=[callbacks]\n", + " )\n", + " # model fitting\n", + " return history.epoch, history.history['acc'][-1]\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/20\n", + "11104/60000 [====>.........................] - ETA: 17s - loss: 0.3921 - acc: 0.8788" + ] + }, + { + "ename": "KeyboardInterrupt", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0m_\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0m_\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtrain_mnist_conv\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m\u001b[0m in \u001b[0;36mtrain_mnist_conv\u001b[0;34m()\u001b[0m\n\u001b[1;32m 40\u001b[0m \u001b[0;31m# model fitting\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 41\u001b[0m history = model.fit(\n\u001b[0;32m---> 42\u001b[0;31m \u001b[0mtraining_images\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtraining_labels\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mepochs\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m20\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcallbacks\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mcallbacks\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 43\u001b[0m )\n\u001b[1;32m 44\u001b[0m \u001b[0;31m# model fitting\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training.py\u001b[0m in \u001b[0;36mfit\u001b[0;34m(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_freq, max_queue_size, workers, use_multiprocessing, **kwargs)\u001b[0m\n\u001b[1;32m 778\u001b[0m \u001b[0mvalidation_steps\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mvalidation_steps\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 779\u001b[0m \u001b[0mvalidation_freq\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mvalidation_freq\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 780\u001b[0;31m steps_name='steps_per_epoch')\n\u001b[0m\u001b[1;32m 781\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 782\u001b[0m def evaluate(self,\n", + "\u001b[0;32m/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training_arrays.py\u001b[0m in \u001b[0;36mmodel_iteration\u001b[0;34m(model, inputs, targets, sample_weights, batch_size, epochs, verbose, callbacks, val_inputs, val_targets, val_sample_weights, shuffle, initial_epoch, steps_per_epoch, validation_steps, validation_freq, mode, validation_in_fit, prepared_feed_values_from_dataset, steps_name, **kwargs)\u001b[0m\n\u001b[1;32m 361\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 362\u001b[0m \u001b[0;31m# Get outputs.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 363\u001b[0;31m \u001b[0mbatch_outs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mf\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mins_batch\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 364\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mbatch_outs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlist\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 365\u001b[0m \u001b[0mbatch_outs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mbatch_outs\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/backend.py\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self, inputs)\u001b[0m\n\u001b[1;32m 3290\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3291\u001b[0m fetched = self._callable_fn(*array_vals,\n\u001b[0;32m-> 3292\u001b[0;31m run_metadata=self.run_metadata)\n\u001b[0m\u001b[1;32m 3293\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_call_fetch_callbacks\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfetched\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_fetches\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3294\u001b[0m output_structure = nest.pack_sequence_as(\n", + "\u001b[0;32m/usr/local/lib/python3.6/dist-packages/tensorflow/python/client/session.py\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1456\u001b[0m ret = tf_session.TF_SessionRunCallable(self._session._session,\n\u001b[1;32m 1457\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_handle\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1458\u001b[0;31m run_metadata_ptr)\n\u001b[0m\u001b[1;32m 1459\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mrun_metadata\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1460\u001b[0m \u001b[0mproto_data\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtf_session\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mTF_GetBuffer\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrun_metadata_ptr\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mKeyboardInterrupt\u001b[0m: " + ] + } + ], + "source": [ + "_, _ = train_mnist_conv()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "coursera": { + "course_slug": "introduction-tensorflow", + "graded_item_id": "ml06H", + "launcher_item_id": "hQF8A" + }, + "kernelspec": { + "display_name": "Python 3", + "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.6.8" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/Course1/Week4/utf-8''Exercise4-Question.ipynb b/Course1/Week4/utf-8''Exercise4-Question.ipynb new file mode 100644 index 0000000..7009b78 --- /dev/null +++ b/Course1/Week4/utf-8''Exercise4-Question.ipynb @@ -0,0 +1,188 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "UncprnB0ymAE" + }, + "source": [ + "Below is code with a link to a happy or sad dataset which contains 80 images, 40 happy and 40 sad. \n", + "Create a convolutional neural network that trains to 100% accuracy on these images, which cancels training upon hitting training accuracy of >.999\n", + "\n", + "Hint -- it will work best with 3 convolutional layers." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "import tensorflow as tf\n", + "import os\n", + "import zipfile\n", + "from os import path, getcwd, chdir\n", + "\n", + "# DO NOT CHANGE THE LINE BELOW. If you are developing in a local\n", + "# environment, then grab happy-or-sad.zip from the Coursera Jupyter Notebook\n", + "# and place it inside a local folder and edit the path to that location\n", + "path = f\"{getcwd()}/../tmp2/happy-or-sad.zip\"\n", + "\n", + "zip_ref = zipfile.ZipFile(path, 'r')\n", + "zip_ref.extractall(\"/tmp/h-or-s\")\n", + "zip_ref.close()" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "# GRADED FUNCTION: train_happy_sad_model\n", + "def train_happy_sad_model():\n", + " # Please write your code only where you are indicated.\n", + " # please do not remove # model fitting inline comments.\n", + "\n", + " DESIRED_ACCURACY = 0.999\n", + "\n", + " class myCallback(tf.keras.callbacks.Callback):\n", + " def on_epoch_end(self, epoch, logs={}):\n", + " if logs.get('acc')>DESIRED_ACCURACY:\n", + " print(\"Reached 100% accuracy so cancelling training!\")\n", + " self.model.stop_training=True\n", + "\n", + " callbacks = myCallback()\n", + " \n", + " # This Code Block should Define and Compile the Model. Please assume the images are 150 X 150 in your implementation.\n", + " model = tf.keras.models.Sequential([\n", + " # First conv layer taking in 150 x 150 image input\n", + " tf.keras.layers.Conv2D(16, (3,3), activation='relu', input_shape=(150,150,3)),\n", + " tf.keras.layers.MaxPooling2D(2,2),\n", + " # Second conv layer\n", + " tf.keras.layers.Conv2D(32, (3,3), activation='relu'),\n", + " tf.keras.layers.MaxPooling2D(2,2),\n", + " # Third conv layer\n", + " tf.keras.layers.Conv2D(64, (3,3), activation='relu'),\n", + " tf.keras.layers.MaxPooling2D(2,2),\n", + " # Flatten results\n", + " tf.keras.layers.Flatten(),\n", + " # First hidden layer\n", + " tf.keras.layers.Dense(512, activation='relu'),\n", + " # Output layer\n", + " tf.keras.layers.Dense(1, activation='sigmoid')\n", + " ])\n", + "\n", + " from tensorflow.keras.optimizers import RMSprop\n", + "\n", + " model.compile(loss='binary_crossentropy', # Binary Crossentropy loss function to deal with two categories\n", + " optimizer=RMSprop(lr=0.001),\n", + " metrics=['acc'])\n", + " \n", + "\n", + " # This code block should create an instance of an ImageDataGenerator called train_datagen \n", + " # And a train_generator by calling train_datagen.flow_from_directory\n", + "\n", + " from tensorflow.keras.preprocessing.image import ImageDataGenerator\n", + " \n", + " # Rescale by a factor or 255\n", + " train_datagen = ImageDataGenerator(rescale=1/255)\n", + "\n", + " # Please use a target_size of 150 X 150.\n", + " train_generator = train_datagen.flow_from_directory(\n", + " '/tmp/h-or-s', # Location of our happy/sad images\n", + " target_size=(150,150), # resize images to 150 x 150\n", + " batch_size=128, \n", + " class_mode='binary')\n", + " # Expected output: 'Found 80 images belonging to 2 classes'\n", + "\n", + " # This code block should call model.fit_generator and train for\n", + " # a number of epochs.\n", + " # model fitting\n", + " history = model.fit_generator(\n", + " train_generator,\n", + " steps_per_epoch=8,\n", + " epochs=15,\n", + " verbose=1,\n", + " callbacks=[callbacks])\n", + " # model fitting\n", + " return history.history['acc'][-1]" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Found 80 images belonging to 2 classes.\n", + "Epoch 1/15\n", + "8/8 [==============================] - 5s 565ms/step - loss: 2.2942 - acc: 0.5000\n", + "Epoch 2/15\n", + "8/8 [==============================] - 3s 322ms/step - loss: 0.4900 - acc: 0.7937\n", + "Epoch 3/15\n", + "8/8 [==============================] - 3s 315ms/step - loss: 0.2577 - acc: 0.9047\n", + "Epoch 4/15\n", + "8/8 [==============================] - 2s 312ms/step - loss: 0.0923 - acc: 0.9734\n", + "Epoch 5/15\n", + "8/8 [==============================] - 3s 322ms/step - loss: 0.0560 - acc: 0.9766\n", + "Epoch 6/15\n", + "7/8 [=========================>....] - ETA: 0s - loss: 0.0178 - acc: 1.0000Reached 100% accuracy so cancelling training!\n", + "8/8 [==============================] - 2s 312ms/step - loss: 0.0169 - acc: 1.0000\n" + ] + }, + { + "data": { + "text/plain": [ + "1.0" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# The Expected output: \"Reached 99.9% accuracy so cancelling training!\"\"\n", + "train_happy_sad_model()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "coursera": { + "course_slug": "introduction-tensorflow", + "graded_item_id": "1kAlw", + "launcher_item_id": "PNLYD" + }, + "kernelspec": { + "display_name": "Python 3", + "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.6.8" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/Course2/Week 1/Gradient+Checking+v1.ipynb b/Course2/Week 1/Gradient+Checking+v1.ipynb new file mode 100644 index 0000000..652d44e --- /dev/null +++ b/Course2/Week 1/Gradient+Checking+v1.ipynb @@ -0,0 +1,668 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Gradient Checking\n", + "\n", + "Welcome to the final assignment for this week! In this assignment you will learn to implement and use gradient checking. \n", + "\n", + "You are part of a team working to make mobile payments available globally, and are asked to build a deep learning model to detect fraud--whenever someone makes a payment, you want to see if the payment might be fraudulent, such as if the user's account has been taken over by a hacker. \n", + "\n", + "But backpropagation is quite challenging to implement, and sometimes has bugs. Because this is a mission-critical application, your company's CEO wants to be really certain that your implementation of backpropagation is correct. Your CEO says, \"Give me a proof that your backpropagation is actually working!\" To give this reassurance, you are going to use \"gradient checking\".\n", + "\n", + "Let's do it!" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Packages\n", + "import numpy as np\n", + "from testCases import *\n", + "from gc_utils import sigmoid, relu, dictionary_to_vector, vector_to_dictionary, gradients_to_vector" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1) How does gradient checking work?\n", + "\n", + "Backpropagation computes the gradients $\\frac{\\partial J}{\\partial \\theta}$, where $\\theta$ denotes the parameters of the model. $J$ is computed using forward propagation and your loss function.\n", + "\n", + "Because forward propagation is relatively easy to implement, you're confident you got that right, and so you're almost 100% sure that you're computing the cost $J$ correctly. Thus, you can use your code for computing $J$ to verify the code for computing $\\frac{\\partial J}{\\partial \\theta}$. \n", + "\n", + "Let's look back at the definition of a derivative (or gradient):\n", + "$$ \\frac{\\partial J}{\\partial \\theta} = \\lim_{\\varepsilon \\to 0} \\frac{J(\\theta + \\varepsilon) - J(\\theta - \\varepsilon)}{2 \\varepsilon} \\tag{1}$$\n", + "\n", + "If you're not familiar with the \"$\\displaystyle \\lim_{\\varepsilon \\to 0}$\" notation, it's just a way of saying \"when $\\varepsilon$ is really really small.\"\n", + "\n", + "We know the following:\n", + "\n", + "- $\\frac{\\partial J}{\\partial \\theta}$ is what you want to make sure you're computing correctly. \n", + "- You can compute $J(\\theta + \\varepsilon)$ and $J(\\theta - \\varepsilon)$ (in the case that $\\theta$ is a real number), since you're confident your implementation for $J$ is correct. \n", + "\n", + "Lets use equation (1) and a small value for $\\varepsilon$ to convince your CEO that your code for computing $\\frac{\\partial J}{\\partial \\theta}$ is correct!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2) 1-dimensional gradient checking\n", + "\n", + "Consider a 1D linear function $J(\\theta) = \\theta x$. The model contains only a single real-valued parameter $\\theta$, and takes $x$ as input.\n", + "\n", + "You will implement code to compute $J(.)$ and its derivative $\\frac{\\partial J}{\\partial \\theta}$. You will then use gradient checking to make sure your derivative computation for $J$ is correct. \n", + "\n", + "\n", + "
**Figure 1** : **1D linear model**
\n", + "\n", + "The diagram above shows the key computation steps: First start with $x$, then evaluate the function $J(x)$ (\"forward propagation\"). Then compute the derivative $\\frac{\\partial J}{\\partial \\theta}$ (\"backward propagation\"). \n", + "\n", + "**Exercise**: implement \"forward propagation\" and \"backward propagation\" for this simple function. I.e., compute both $J(.)$ (\"forward propagation\") and its derivative with respect to $\\theta$ (\"backward propagation\"), in two separate functions. " + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: forward_propagation\n", + "\n", + "def forward_propagation(x, theta):\n", + " \"\"\"\n", + " Implement the linear forward propagation (compute J) presented in Figure 1 (J(theta) = theta * x)\n", + " \n", + " Arguments:\n", + " x -- a real-valued input\n", + " theta -- our parameter, a real number as well\n", + " \n", + " Returns:\n", + " J -- the value of function J, computed using the formula J(theta) = theta * x\n", + " \"\"\"\n", + " \n", + " ### START CODE HERE ### (approx. 1 line)\n", + " J = theta * x\n", + " ### END CODE HERE ###\n", + " \n", + " return J" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "J = 8\n" + ] + } + ], + "source": [ + "x, theta = 2, 4\n", + "J = forward_propagation(x, theta)\n", + "print (\"J = \" + str(J))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Expected Output**:\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + "
** J ** 8
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise**: Now, implement the backward propagation step (derivative computation) of Figure 1. That is, compute the derivative of $J(\\theta) = \\theta x$ with respect to $\\theta$. To save you from doing the calculus, you should get $dtheta = \\frac { \\partial J }{ \\partial \\theta} = x$." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: backward_propagation\n", + "\n", + "def backward_propagation(x, theta):\n", + " \"\"\"\n", + " Computes the derivative of J with respect to theta (see Figure 1).\n", + " \n", + " Arguments:\n", + " x -- a real-valued input\n", + " theta -- our parameter, a real number as well\n", + " \n", + " Returns:\n", + " dtheta -- the gradient of the cost with respect to theta\n", + " \"\"\"\n", + " \n", + " ### START CODE HERE ### (approx. 1 line)\n", + " dtheta = x\n", + " ### END CODE HERE ###\n", + " \n", + " return dtheta" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "dtheta = 2\n" + ] + } + ], + "source": [ + "x, theta = 2, 4\n", + "dtheta = backward_propagation(x, theta)\n", + "print (\"dtheta = \" + str(dtheta))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Expected Output**:\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + "
** dtheta ** 2
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise**: To show that the `backward_propagation()` function is correctly computing the gradient $\\frac{\\partial J}{\\partial \\theta}$, let's implement gradient checking.\n", + "\n", + "**Instructions**:\n", + "- First compute \"gradapprox\" using the formula above (1) and a small value of $\\varepsilon$. Here are the Steps to follow:\n", + " 1. $\\theta^{+} = \\theta + \\varepsilon$\n", + " 2. $\\theta^{-} = \\theta - \\varepsilon$\n", + " 3. $J^{+} = J(\\theta^{+})$\n", + " 4. $J^{-} = J(\\theta^{-})$\n", + " 5. $gradapprox = \\frac{J^{+} - J^{-}}{2 \\varepsilon}$\n", + "- Then compute the gradient using backward propagation, and store the result in a variable \"grad\"\n", + "- Finally, compute the relative difference between \"gradapprox\" and the \"grad\" using the following formula:\n", + "$$ difference = \\frac {\\mid\\mid grad - gradapprox \\mid\\mid_2}{\\mid\\mid grad \\mid\\mid_2 + \\mid\\mid gradapprox \\mid\\mid_2} \\tag{2}$$\n", + "You will need 3 Steps to compute this formula:\n", + " - 1'. compute the numerator using np.linalg.norm(...)\n", + " - 2'. compute the denominator. You will need to call np.linalg.norm(...) twice.\n", + " - 3'. divide them.\n", + "- If this difference is small (say less than $10^{-7}$), you can be quite confident that you have computed your gradient correctly. Otherwise, there may be a mistake in the gradient computation. \n" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: gradient_check\n", + "\n", + "def gradient_check(x, theta, epsilon = 1e-7):\n", + " \"\"\"\n", + " Implement the backward propagation presented in Figure 1.\n", + " \n", + " Arguments:\n", + " x -- a real-valued input\n", + " theta -- our parameter, a real number as well\n", + " epsilon -- tiny shift to the input to compute approximated gradient with formula(1)\n", + " \n", + " Returns:\n", + " difference -- difference (2) between the approximated gradient and the backward propagation gradient\n", + " \"\"\"\n", + " \n", + " # Compute gradapprox using left side of formula (1). epsilon is small enough, you don't need to worry about the limit.\n", + " ### START CODE HERE ### (approx. 5 lines)\n", + " thetaplus = theta + epsilon # Step 1\n", + " thetaminus = theta - epsilon # Step 2\n", + " J_plus = forward_propagation(x, thetaplus) # Step 3\n", + " J_minus = forward_propagation(x, thetaminus) # Step 4\n", + " gradapprox = (J_plus - J_minus)/(2*epsilon) # Step 5\n", + " ### END CODE HERE ###\n", + " \n", + " # Check if gradapprox is close enough to the output of backward_propagation()\n", + " ### START CODE HERE ### (approx. 1 line)\n", + " grad = backward_propagation(x,theta)\n", + " ### END CODE HERE ###\n", + " \n", + " ### START CODE HERE ### (approx. 1 line)\n", + " numerator = np.linalg.norm(grad - gradapprox) # Step 1'\n", + " denominator = np.linalg.norm(grad) + np.linalg.norm(gradapprox) # Step 2'\n", + " difference = numerator / denominator # Step 3'\n", + " ### END CODE HERE ###\n", + " \n", + " if difference < 1e-7:\n", + " print (\"The gradient is correct!\")\n", + " else:\n", + " print (\"The gradient is wrong!\")\n", + " \n", + " return difference" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The gradient is correct!\n", + "difference = 2.91933588329e-10\n" + ] + } + ], + "source": [ + "x, theta = 2, 4\n", + "difference = gradient_check(x, theta)\n", + "print(\"difference = \" + str(difference))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Expected Output**:\n", + "The gradient is correct!\n", + "\n", + " \n", + " \n", + " \n", + " \n", + "
** difference ** 2.9193358103083e-10
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Congrats, the difference is smaller than the $10^{-7}$ threshold. So you can have high confidence that you've correctly computed the gradient in `backward_propagation()`. \n", + "\n", + "Now, in the more general case, your cost function $J$ has more than a single 1D input. When you are training a neural network, $\\theta$ actually consists of multiple matrices $W^{[l]}$ and biases $b^{[l]}$! It is important to know how to do a gradient check with higher-dimensional inputs. Let's do it!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3) N-dimensional gradient checking" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "The following figure describes the forward and backward propagation of your fraud detection model.\n", + "\n", + "\n", + "
**Figure 2** : **deep neural network**
*LINEAR -> RELU -> LINEAR -> RELU -> LINEAR -> SIGMOID*
\n", + "\n", + "Let's look at your implementations for forward propagation and backward propagation. " + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def forward_propagation_n(X, Y, parameters):\n", + " \"\"\"\n", + " Implements the forward propagation (and computes the cost) presented in Figure 3.\n", + " \n", + " Arguments:\n", + " X -- training set for m examples\n", + " Y -- labels for m examples \n", + " parameters -- python dictionary containing your parameters \"W1\", \"b1\", \"W2\", \"b2\", \"W3\", \"b3\":\n", + " W1 -- weight matrix of shape (5, 4)\n", + " b1 -- bias vector of shape (5, 1)\n", + " W2 -- weight matrix of shape (3, 5)\n", + " b2 -- bias vector of shape (3, 1)\n", + " W3 -- weight matrix of shape (1, 3)\n", + " b3 -- bias vector of shape (1, 1)\n", + " \n", + " Returns:\n", + " cost -- the cost function (logistic cost for one example)\n", + " \"\"\"\n", + " \n", + " # retrieve parameters\n", + " m = X.shape[1]\n", + " W1 = parameters[\"W1\"]\n", + " b1 = parameters[\"b1\"]\n", + " W2 = parameters[\"W2\"]\n", + " b2 = parameters[\"b2\"]\n", + " W3 = parameters[\"W3\"]\n", + " b3 = parameters[\"b3\"]\n", + "\n", + " # LINEAR -> RELU -> LINEAR -> RELU -> LINEAR -> SIGMOID\n", + " Z1 = np.dot(W1, X) + b1\n", + " A1 = relu(Z1)\n", + " Z2 = np.dot(W2, A1) + b2\n", + " A2 = relu(Z2)\n", + " Z3 = np.dot(W3, A2) + b3\n", + " A3 = sigmoid(Z3)\n", + "\n", + " # Cost\n", + " logprobs = np.multiply(-np.log(A3),Y) + np.multiply(-np.log(1 - A3), 1 - Y)\n", + " cost = 1./m * np.sum(logprobs)\n", + " \n", + " cache = (Z1, A1, W1, b1, Z2, A2, W2, b2, Z3, A3, W3, b3)\n", + " \n", + " return cost, cache" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now, run backward propagation." + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def backward_propagation_n(X, Y, cache):\n", + " \"\"\"\n", + " Implement the backward propagation presented in figure 2.\n", + " \n", + " Arguments:\n", + " X -- input datapoint, of shape (input size, 1)\n", + " Y -- true \"label\"\n", + " cache -- cache output from forward_propagation_n()\n", + " \n", + " Returns:\n", + " gradients -- A dictionary with the gradients of the cost with respect to each parameter, activation and pre-activation variables.\n", + " \"\"\"\n", + " \n", + " m = X.shape[1]\n", + " (Z1, A1, W1, b1, Z2, A2, W2, b2, Z3, A3, W3, b3) = cache\n", + " \n", + " dZ3 = A3 - Y\n", + " dW3 = 1./m * np.dot(dZ3, A2.T)\n", + " db3 = 1./m * np.sum(dZ3, axis=1, keepdims = True)\n", + " \n", + " dA2 = np.dot(W3.T, dZ3)\n", + " dZ2 = np.multiply(dA2, np.int64(A2 > 0))\n", + " dW2 = 1./m * np.dot(dZ2, A1.T)\n", + " db2 = 1./m * np.sum(dZ2, axis=1, keepdims = True)\n", + " \n", + " dA1 = np.dot(W2.T, dZ2)\n", + " dZ1 = np.multiply(dA1, np.int64(A1 > 0))\n", + " dW1 = 1./m * np.dot(dZ1, X.T)\n", + " db1 = 1./m * np.sum(dZ1, axis=1, keepdims = True)\n", + " \n", + " gradients = {\"dZ3\": dZ3, \"dW3\": dW3, \"db3\": db3,\n", + " \"dA2\": dA2, \"dZ2\": dZ2, \"dW2\": dW2, \"db2\": db2,\n", + " \"dA1\": dA1, \"dZ1\": dZ1, \"dW1\": dW1, \"db1\": db1}\n", + " \n", + " return gradients" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "You obtained some results on the fraud detection test set but you are not 100% sure of your model. Nobody's perfect! Let's implement gradient checking to verify if your gradients are correct." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**How does gradient checking work?**.\n", + "\n", + "As in 1) and 2), you want to compare \"gradapprox\" to the gradient computed by backpropagation. The formula is still:\n", + "\n", + "$$ \\frac{\\partial J}{\\partial \\theta} = \\lim_{\\varepsilon \\to 0} \\frac{J(\\theta + \\varepsilon) - J(\\theta - \\varepsilon)}{2 \\varepsilon} \\tag{1}$$\n", + "\n", + "However, $\\theta$ is not a scalar anymore. It is a dictionary called \"parameters\". We implemented a function \"`dictionary_to_vector()`\" for you. It converts the \"parameters\" dictionary into a vector called \"values\", obtained by reshaping all parameters (W1, b1, W2, b2, W3, b3) into vectors and concatenating them.\n", + "\n", + "The inverse function is \"`vector_to_dictionary`\" which outputs back the \"parameters\" dictionary.\n", + "\n", + "\n", + "
**Figure 2** : **dictionary_to_vector() and vector_to_dictionary()**
You will need these functions in gradient_check_n()
\n", + "\n", + "We have also converted the \"gradients\" dictionary into a vector \"grad\" using gradients_to_vector(). You don't need to worry about that.\n", + "\n", + "**Exercise**: Implement gradient_check_n().\n", + "\n", + "**Instructions**: Here is pseudo-code that will help you implement the gradient check.\n", + "\n", + "For each i in num_parameters:\n", + "- To compute `J_plus[i]`:\n", + " 1. Set $\\theta^{+}$ to `np.copy(parameters_values)`\n", + " 2. Set $\\theta^{+}_i$ to $\\theta^{+}_i + \\varepsilon$\n", + " 3. Calculate $J^{+}_i$ using to `forward_propagation_n(x, y, vector_to_dictionary(`$\\theta^{+}$ `))`. \n", + "- To compute `J_minus[i]`: do the same thing with $\\theta^{-}$\n", + "- Compute $gradapprox[i] = \\frac{J^{+}_i - J^{-}_i}{2 \\varepsilon}$\n", + "\n", + "Thus, you get a vector gradapprox, where gradapprox[i] is an approximation of the gradient with respect to `parameter_values[i]`. You can now compare this gradapprox vector to the gradients vector from backpropagation. Just like for the 1D case (Steps 1', 2', 3'), compute: \n", + "$$ difference = \\frac {\\| grad - gradapprox \\|_2}{\\| grad \\|_2 + \\| gradapprox \\|_2 } \\tag{3}$$" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: gradient_check_n\n", + "\n", + "def gradient_check_n(parameters, gradients, X, Y, epsilon = 1e-7):\n", + " \"\"\"\n", + " Checks if backward_propagation_n computes correctly the gradient of the cost output by forward_propagation_n\n", + " \n", + " Arguments:\n", + " parameters -- python dictionary containing your parameters \"W1\", \"b1\", \"W2\", \"b2\", \"W3\", \"b3\":\n", + " grad -- output of backward_propagation_n, contains gradients of the cost with respect to the parameters. \n", + " x -- input datapoint, of shape (input size, 1)\n", + " y -- true \"label\"\n", + " epsilon -- tiny shift to the input to compute approximated gradient with formula(1)\n", + " \n", + " Returns:\n", + " difference -- difference (2) between the approximated gradient and the backward propagation gradient\n", + " \"\"\"\n", + " \n", + " # Set-up variables\n", + " parameters_values, _ = dictionary_to_vector(parameters)\n", + " grad = gradients_to_vector(gradients)\n", + " num_parameters = parameters_values.shape[0]\n", + " J_plus = np.zeros((num_parameters, 1))\n", + " J_minus = np.zeros((num_parameters, 1))\n", + " gradapprox = np.zeros((num_parameters, 1))\n", + " \n", + " # Compute gradapprox\n", + " for i in range(num_parameters):\n", + " \n", + " # Compute J_plus[i]. Inputs: \"parameters_values, epsilon\". Output = \"J_plus[i]\".\n", + " # \"_\" is used because the function you have to outputs two parameters but we only care about the first one\n", + " ### START CODE HERE ### (approx. 3 lines)\n", + " thetaplus = np.copy(parameters_values) # Step 1\n", + " thetaplus[i][0] += epsilon # Step 2\n", + " J_plus[i], _ = forward_propagation_n(X, Y, vector_to_dictionary(thetaplus)) # Step 3\n", + " ### END CODE HERE ###\n", + " \n", + " # Compute J_minus[i]. Inputs: \"parameters_values, epsilon\". Output = \"J_minus[i]\".\n", + " ### START CODE HERE ### (approx. 3 lines)\n", + " thetaminus = np.copy(parameters_values) # Step 1\n", + " thetaminus[i][0] -= epsilon # Step 2 \n", + " J_minus[i], _ = forward_propagation_n(X, Y, vector_to_dictionary(thetaminus)) # Step 3\n", + " ### END CODE HERE ###\n", + " \n", + " # Compute gradapprox[i]\n", + " ### START CODE HERE ### (approx. 1 line)\n", + " gradapprox[i] = (J_plus[i] - J_minus[i]) / (2*epsilon)\n", + " ### END CODE HERE ###\n", + " \n", + " # Compare gradapprox to backward propagation gradients by computing difference.\n", + " ### START CODE HERE ### (approx. 1 line)\n", + " numerator = np.linalg.norm(grad - gradapprox) # Step 1'\n", + " denominator = np.linalg.norm(grad) + np.linalg.norm(gradapprox) # Step 2'\n", + " difference = numerator / denominator # Step 3'\n", + " ### END CODE HERE ###\n", + "\n", + " if difference > 2e-7:\n", + " print (\"\\033[93m\" + \"There is a mistake in the backward propagation! difference = \" + str(difference) + \"\\033[0m\")\n", + " else:\n", + " print (\"\\033[92m\" + \"Your backward propagation works perfectly fine! difference = \" + str(difference) + \"\\033[0m\")\n", + " \n", + " return difference" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[92mYour backward propagation works perfectly fine! difference = 1.18855520355e-07\u001b[0m\n" + ] + } + ], + "source": [ + "X, Y, parameters = gradient_check_n_test_case()\n", + "\n", + "cost, cache = forward_propagation_n(X, Y, parameters)\n", + "gradients = backward_propagation_n(X, Y, cache)\n", + "difference = gradient_check_n(parameters, gradients, X, Y)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Expected output**:\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + "
** There is a mistake in the backward propagation!** difference = 0.285093156781
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "It seems that there were errors in the `backward_propagation_n` code we gave you! Good that you've implemented the gradient check. Go back to `backward_propagation` and try to find/correct the errors *(Hint: check dW2 and db1)*. Rerun the gradient check when you think you've fixed it. Remember you'll need to re-execute the cell defining `backward_propagation_n()` if you modify the code. \n", + "\n", + "Can you get gradient check to declare your derivative computation correct? Even though this part of the assignment isn't graded, we strongly urge you to try to find the bug and re-run gradient check until you're convinced backprop is now correctly implemented. \n", + "\n", + "**Note** \n", + "- Gradient Checking is slow! Approximating the gradient with $\\frac{\\partial J}{\\partial \\theta} \\approx \\frac{J(\\theta + \\varepsilon) - J(\\theta - \\varepsilon)}{2 \\varepsilon}$ is computationally costly. For this reason, we don't run gradient checking at every iteration during training. Just a few times to check if the gradient is correct. \n", + "- Gradient Checking, at least as we've presented it, doesn't work with dropout. You would usually run the gradient check algorithm without dropout to make sure your backprop is correct, then add dropout. \n", + "\n", + "Congrats, you can be confident that your deep learning model for fraud detection is working correctly! You can even use this to convince your CEO. :) \n", + "\n", + "\n", + "**What you should remember from this notebook**:\n", + "- Gradient checking verifies closeness between the gradients from backpropagation and the numerical approximation of the gradient (computed using forward propagation).\n", + "- Gradient checking is slow, so we don't run it in every iteration of training. You would usually run it only to make sure your code is correct, then turn it off and use backprop for the actual learning process. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "coursera": { + "course_slug": "deep-neural-network", + "graded_item_id": "n6NBD", + "launcher_item_id": "yfOsE" + }, + "kernelspec": { + "display_name": "Python 3", + "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.6.0" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/Course2/Week 1/Initialization.ipynb b/Course2/Week 1/Initialization.ipynb new file mode 100644 index 0000000..ee81e23 --- /dev/null +++ b/Course2/Week 1/Initialization.ipynb @@ -0,0 +1,1009 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Initialization\n", + "\n", + "Welcome to the first assignment of \"Improving Deep Neural Networks\". \n", + "\n", + "Training your neural network requires specifying an initial value of the weights. A well chosen initialization method will help learning. \n", + "\n", + "If you completed the previous course of this specialization, you probably followed our instructions for weight initialization, and it has worked out so far. But how do you choose the initialization for a new neural network? In this notebook, you will see how different initializations lead to different results. \n", + "\n", + "A well chosen initialization can:\n", + "- Speed up the convergence of gradient descent\n", + "- Increase the odds of gradient descent converging to a lower training (and generalization) error \n", + "\n", + "To get started, run the following cell to load the packages and the planar dataset you will try to classify." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import sklearn\n", + "import sklearn.datasets\n", + "from init_utils import sigmoid, relu, compute_loss, forward_propagation, backward_propagation\n", + "from init_utils import update_parameters, predict, load_dataset, plot_decision_boundary, predict_dec\n", + "\n", + "%matplotlib inline\n", + "plt.rcParams['figure.figsize'] = (7.0, 4.0) # set default size of plots\n", + "plt.rcParams['image.interpolation'] = 'nearest'\n", + "plt.rcParams['image.cmap'] = 'gray'\n", + "\n", + "# load image dataset: blue/red dots in circles\n", + "train_X, train_Y, test_X, test_Y = load_dataset()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You would like a classifier to separate the blue dots from the red dots." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1 - Neural Network model " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You will use a 3-layer neural network (already implemented for you). Here are the initialization methods you will experiment with: \n", + "- *Zeros initialization* -- setting `initialization = \"zeros\"` in the input argument.\n", + "- *Random initialization* -- setting `initialization = \"random\"` in the input argument. This initializes the weights to large random values. \n", + "- *He initialization* -- setting `initialization = \"he\"` in the input argument. This initializes the weights to random values scaled according to a paper by He et al., 2015. \n", + "\n", + "**Instructions**: Please quickly read over the code below, and run it. In the next part you will implement the three initialization methods that this `model()` calls." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def model(X, Y, learning_rate = 0.01, num_iterations = 15000, print_cost = True, initialization = \"he\"):\n", + " \"\"\"\n", + " Implements a three-layer neural network: LINEAR->RELU->LINEAR->RELU->LINEAR->SIGMOID.\n", + " \n", + " Arguments:\n", + " X -- input data, of shape (2, number of examples)\n", + " Y -- true \"label\" vector (containing 0 for red dots; 1 for blue dots), of shape (1, number of examples)\n", + " learning_rate -- learning rate for gradient descent \n", + " num_iterations -- number of iterations to run gradient descent\n", + " print_cost -- if True, print the cost every 1000 iterations\n", + " initialization -- flag to choose which initialization to use (\"zeros\",\"random\" or \"he\")\n", + " \n", + " Returns:\n", + " parameters -- parameters learnt by the model\n", + " \"\"\"\n", + " \n", + " grads = {}\n", + " costs = [] # to keep track of the loss\n", + " m = X.shape[1] # number of examples\n", + " layers_dims = [X.shape[0], 10, 5, 1]\n", + " \n", + " # Initialize parameters dictionary.\n", + " if initialization == \"zeros\":\n", + " parameters = initialize_parameters_zeros(layers_dims)\n", + " elif initialization == \"random\":\n", + " parameters = initialize_parameters_random(layers_dims)\n", + " elif initialization == \"he\":\n", + " parameters = initialize_parameters_he(layers_dims)\n", + "\n", + " # Loop (gradient descent)\n", + "\n", + " for i in range(0, num_iterations):\n", + "\n", + " # Forward propagation: LINEAR -> RELU -> LINEAR -> RELU -> LINEAR -> SIGMOID.\n", + " a3, cache = forward_propagation(X, parameters)\n", + " \n", + " # Loss\n", + " cost = compute_loss(a3, Y)\n", + "\n", + " # Backward propagation.\n", + " grads = backward_propagation(X, Y, cache)\n", + " \n", + " # Update parameters.\n", + " parameters = update_parameters(parameters, grads, learning_rate)\n", + " \n", + " # Print the loss every 1000 iterations\n", + " if print_cost and i % 1000 == 0:\n", + " print(\"Cost after iteration {}: {}\".format(i, cost))\n", + " costs.append(cost)\n", + " \n", + " # plot the loss\n", + " plt.plot(costs)\n", + " plt.ylabel('cost')\n", + " plt.xlabel('iterations (per hundreds)')\n", + " plt.title(\"Learning rate =\" + str(learning_rate))\n", + " plt.show()\n", + " \n", + " return parameters" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2 - Zero initialization\n", + "\n", + "There are two types of parameters to initialize in a neural network:\n", + "- the weight matrices $(W^{[1]}, W^{[2]}, W^{[3]}, ..., W^{[L-1]}, W^{[L]})$\n", + "- the bias vectors $(b^{[1]}, b^{[2]}, b^{[3]}, ..., b^{[L-1]}, b^{[L]})$\n", + "\n", + "**Exercise**: Implement the following function to initialize all parameters to zeros. You'll see later that this does not work well since it fails to \"break symmetry\", but lets try it anyway and see what happens. Use np.zeros((..,..)) with the correct shapes." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: initialize_parameters_zeros \n", + "\n", + "def initialize_parameters_zeros(layers_dims):\n", + " \"\"\"\n", + " Arguments:\n", + " layer_dims -- python array (list) containing the size of each layer.\n", + " \n", + " Returns:\n", + " parameters -- python dictionary containing your parameters \"W1\", \"b1\", ..., \"WL\", \"bL\":\n", + " W1 -- weight matrix of shape (layers_dims[1], layers_dims[0])\n", + " b1 -- bias vector of shape (layers_dims[1], 1)\n", + " ...\n", + " WL -- weight matrix of shape (layers_dims[L], layers_dims[L-1])\n", + " bL -- bias vector of shape (layers_dims[L], 1)\n", + " \"\"\"\n", + " \n", + " parameters = {}\n", + " L = len(layers_dims) # number of layers in the network\n", + " \n", + " for l in range(1, L):\n", + " ### START CODE HERE ### (≈ 2 lines of code)\n", + " parameters['W' + str(l)] = np.zeros((layers_dims[l],layers_dims[l-1]))\n", + " parameters['b' + str(l)] = np.zeros((layers_dims[l],1))\n", + " ### END CODE HERE ###\n", + " return parameters" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "W1 = [[ 0. 0. 0.]\n", + " [ 0. 0. 0.]]\n", + "b1 = [[ 0.]\n", + " [ 0.]]\n", + "W2 = [[ 0. 0.]]\n", + "b2 = [[ 0.]]\n" + ] + } + ], + "source": [ + "parameters = initialize_parameters_zeros([3,2,1])\n", + "print(\"W1 = \" + str(parameters[\"W1\"]))\n", + "print(\"b1 = \" + str(parameters[\"b1\"]))\n", + "print(\"W2 = \" + str(parameters[\"W2\"]))\n", + "print(\"b2 = \" + str(parameters[\"b2\"]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Expected Output**:\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "
\n", + " **W1**\n", + " \n", + " [[ 0. 0. 0.]\n", + " [ 0. 0. 0.]]\n", + "
\n", + " **b1**\n", + " \n", + " [[ 0.]\n", + " [ 0.]]\n", + "
\n", + " **W2**\n", + " \n", + " [[ 0. 0.]]\n", + "
\n", + " **b2**\n", + " \n", + " [[ 0.]]\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Run the following code to train your model on 15,000 iterations using zeros initialization." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Cost after iteration 0: 0.6931471805599453\n", + "Cost after iteration 1000: 0.6931471805599453\n", + "Cost after iteration 2000: 0.6931471805599453\n", + "Cost after iteration 3000: 0.6931471805599453\n", + "Cost after iteration 4000: 0.6931471805599453\n", + "Cost after iteration 5000: 0.6931471805599453\n", + "Cost after iteration 6000: 0.6931471805599453\n", + "Cost after iteration 7000: 0.6931471805599453\n", + "Cost after iteration 8000: 0.6931471805599453\n", + "Cost after iteration 9000: 0.6931471805599453\n", + "Cost after iteration 10000: 0.6931471805599455\n", + "Cost after iteration 11000: 0.6931471805599453\n", + "Cost after iteration 12000: 0.6931471805599453\n", + "Cost after iteration 13000: 0.6931471805599453\n", + "Cost after iteration 14000: 0.6931471805599453\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "On the train set:\n", + "Accuracy: 0.5\n", + "On the test set:\n", + "Accuracy: 0.5\n" + ] + } + ], + "source": [ + "parameters = model(train_X, train_Y, initialization = \"zeros\")\n", + "print (\"On the train set:\")\n", + "predictions_train = predict(train_X, train_Y, parameters)\n", + "print (\"On the test set:\")\n", + "predictions_test = predict(test_X, test_Y, parameters)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The performance is really bad, and the cost does not really decrease, and the algorithm performs no better than random guessing. Why? Lets look at the details of the predictions and the decision boundary:" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "predictions_train = [[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0]]\n", + "predictions_test = [[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]]\n" + ] + } + ], + "source": [ + "print (\"predictions_train = \" + str(predictions_train))\n", + "print (\"predictions_test = \" + str(predictions_test))" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nC363uAqGAFWIAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.title(\"Model with Zeros initialization\")\n", + "axes = plt.gca()\n", + "axes.set_xlim([-1.5,1.5])\n", + "axes.set_ylim([-1.5,1.5])\n", + "plot_decision_boundary(lambda x: predict_dec(parameters, x.T), train_X, train_Y)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The model is predicting 0 for every example. \n", + "\n", + "In general, initializing all the weights to zero results in the network failing to break symmetry. This means that every neuron in each layer will learn the same thing, and you might as well be training a neural network with $n^{[l]}=1$ for every layer, and the network is no more powerful than a linear classifier such as logistic regression. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "**What you should remember**:\n", + "- The weights $W^{[l]}$ should be initialized randomly to break symmetry. \n", + "- It is however okay to initialize the biases $b^{[l]}$ to zeros. Symmetry is still broken so long as $W^{[l]}$ is initialized randomly. \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3 - Random initialization\n", + "\n", + "To break symmetry, lets intialize the weights randomly. Following random initialization, each neuron can then proceed to learn a different function of its inputs. In this exercise, you will see what happens if the weights are intialized randomly, but to very large values. \n", + "\n", + "**Exercise**: Implement the following function to initialize your weights to large random values (scaled by \\*10) and your biases to zeros. Use `np.random.randn(..,..) * 10` for weights and `np.zeros((.., ..))` for biases. We are using a fixed `np.random.seed(..)` to make sure your \"random\" weights match ours, so don't worry if running several times your code gives you always the same initial values for the parameters. " + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: initialize_parameters_random\n", + "\n", + "def initialize_parameters_random(layers_dims):\n", + " \"\"\"\n", + " Arguments:\n", + " layer_dims -- python array (list) containing the size of each layer.\n", + " \n", + " Returns:\n", + " parameters -- python dictionary containing your parameters \"W1\", \"b1\", ..., \"WL\", \"bL\":\n", + " W1 -- weight matrix of shape (layers_dims[1], layers_dims[0])\n", + " b1 -- bias vector of shape (layers_dims[1], 1)\n", + " ...\n", + " WL -- weight matrix of shape (layers_dims[L], layers_dims[L-1])\n", + " bL -- bias vector of shape (layers_dims[L], 1)\n", + " \"\"\"\n", + " \n", + " np.random.seed(3) # This seed makes sure your \"random\" numbers will be the as ours\n", + " parameters = {}\n", + " L = len(layers_dims) # integer representing the number of layers\n", + " \n", + " for l in range(1, L):\n", + " ### START CODE HERE ### (≈ 2 lines of code)\n", + " parameters['W' + str(l)] = np.random.randn(layers_dims[l], layers_dims[l-1]) * 10\n", + " parameters['b' + str(l)] = np.zeros((layers_dims[l],1))\n", + " ### END CODE HERE ###\n", + "\n", + " return parameters" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "W1 = [[ 17.88628473 4.36509851 0.96497468]\n", + " [-18.63492703 -2.77388203 -3.54758979]]\n", + "b1 = [[ 0.]\n", + " [ 0.]]\n", + "W2 = [[-0.82741481 -6.27000677]]\n", + "b2 = [[ 0.]]\n" + ] + } + ], + "source": [ + "parameters = initialize_parameters_random([3, 2, 1])\n", + "print(\"W1 = \" + str(parameters[\"W1\"]))\n", + "print(\"b1 = \" + str(parameters[\"b1\"]))\n", + "print(\"W2 = \" + str(parameters[\"W2\"]))\n", + "print(\"b2 = \" + str(parameters[\"b2\"]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Expected Output**:\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "
\n", + " **W1**\n", + " \n", + " [[ 17.88628473 4.36509851 0.96497468]\n", + " [-18.63492703 -2.77388203 -3.54758979]]\n", + "
\n", + " **b1**\n", + " \n", + " [[ 0.]\n", + " [ 0.]]\n", + "
\n", + " **W2**\n", + " \n", + " [[-0.82741481 -6.27000677]]\n", + "
\n", + " **b2**\n", + " \n", + " [[ 0.]]\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Run the following code to train your model on 15,000 iterations using random initialization." + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/jovyan/work/week5/Initialization/init_utils.py:145: RuntimeWarning: divide by zero encountered in log\n", + " logprobs = np.multiply(-np.log(a3),Y) + np.multiply(-np.log(1 - a3), 1 - Y)\n", + "/home/jovyan/work/week5/Initialization/init_utils.py:145: RuntimeWarning: invalid value encountered in multiply\n", + " logprobs = np.multiply(-np.log(a3),Y) + np.multiply(-np.log(1 - a3), 1 - Y)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Cost after iteration 0: inf\n", + "Cost after iteration 1000: 0.6242434241539614\n", + "Cost after iteration 2000: 0.5978811277755388\n", + "Cost after iteration 3000: 0.5636242569764779\n", + "Cost after iteration 4000: 0.5500958254523324\n", + "Cost after iteration 5000: 0.544339206192789\n", + "Cost after iteration 6000: 0.5373584514307651\n", + "Cost after iteration 7000: 0.469574666760224\n", + "Cost after iteration 8000: 0.39766324943219844\n", + "Cost after iteration 9000: 0.3934423376823982\n", + "Cost after iteration 10000: 0.3920158992175907\n", + "Cost after iteration 11000: 0.38913979237487845\n", + "Cost after iteration 12000: 0.3861261344766218\n", + "Cost after iteration 13000: 0.3849694511273874\n", + "Cost after iteration 14000: 0.3827489017191917\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "On the train set:\n", + "Accuracy: 0.83\n", + "On the test set:\n", + "Accuracy: 0.86\n" + ] + } + ], + "source": [ + "parameters = model(train_X, train_Y, initialization = \"random\")\n", + "print (\"On the train set:\")\n", + "predictions_train = predict(train_X, train_Y, parameters)\n", + "print (\"On the test set:\")\n", + "predictions_test = predict(test_X, test_Y, parameters)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If you see \"inf\" as the cost after the iteration 0, this is because of numerical roundoff; a more numerically sophisticated implementation would fix this. But this isn't worth worrying about for our purposes. \n", + "\n", + "Anyway, it looks like you have broken symmetry, and this gives better results. than before. The model is no longer outputting all 0s. " + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[1 0 1 1 0 0 1 1 1 1 1 0 1 0 0 1 0 1 1 0 0 0 1 0 1 1 1 1 1 1 0 1 1 0 0 1 1\n", + " 1 1 1 1 1 1 0 1 1 1 1 0 1 0 1 1 1 1 0 0 1 1 1 1 0 1 1 0 1 0 1 1 1 1 0 0 0\n", + " 0 0 1 0 1 0 1 1 1 0 0 1 1 1 1 1 1 0 0 1 1 1 0 1 1 0 1 0 1 1 0 1 1 0 1 0 1\n", + " 1 0 0 1 0 0 1 1 0 1 1 1 0 1 0 0 1 0 1 1 1 1 1 1 1 0 1 1 0 0 1 1 0 0 0 1 0\n", + " 1 0 1 0 1 1 1 0 0 1 1 1 1 0 1 1 0 1 0 1 1 0 1 0 1 1 1 1 0 1 1 1 1 0 1 0 1\n", + " 0 1 1 1 1 0 1 1 0 1 1 0 1 1 0 1 0 1 1 1 0 1 1 1 0 1 0 1 0 0 1 0 1 1 0 1 1\n", + " 0 1 1 0 1 1 1 0 1 1 1 1 0 1 0 0 1 1 0 1 1 1 0 0 0 1 1 0 1 1 1 1 0 1 1 0 1\n", + " 1 1 0 0 1 0 0 0 1 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 1 1 1 1 1 1 1 0 0 0 1\n", + " 1 1 1 0]]\n", + "[[1 1 1 1 0 1 0 1 1 0 1 1 1 0 0 0 0 1 0 1 0 0 1 0 1 0 1 1 1 1 1 0 0 0 0 1 0\n", + " 1 1 0 0 1 1 1 1 1 0 1 1 1 0 1 0 1 1 0 1 0 1 0 1 1 1 1 1 1 1 1 1 0 1 0 1 1\n", + " 1 1 1 0 1 0 0 1 0 0 0 1 1 0 1 1 0 0 0 1 1 0 1 1 0 0]]\n" + ] + } + ], + "source": [ + "print (predictions_train)\n", + "print (predictions_test)" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.title(\"Model with large random initialization\")\n", + "axes = plt.gca()\n", + "axes.set_xlim([-1.5,1.5])\n", + "axes.set_ylim([-1.5,1.5])\n", + "plot_decision_boundary(lambda x: predict_dec(parameters, x.T), train_X, train_Y)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Observations**:\n", + "- The cost starts very high. This is because with large random-valued weights, the last activation (sigmoid) outputs results that are very close to 0 or 1 for some examples, and when it gets that example wrong it incurs a very high loss for that example. Indeed, when $\\log(a^{[3]}) = \\log(0)$, the loss goes to infinity.\n", + "- Poor initialization can lead to vanishing/exploding gradients, which also slows down the optimization algorithm. \n", + "- If you train this network longer you will see better results, but initializing with overly large random numbers slows down the optimization.\n", + "\n", + "\n", + "**In summary**:\n", + "- Initializing weights to very large random values does not work well. \n", + "- Hopefully intializing with small random values does better. The important question is: how small should be these random values be? Lets find out in the next part! " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 4 - He initialization\n", + "\n", + "Finally, try \"He Initialization\"; this is named for the first author of He et al., 2015. (If you have heard of \"Xavier initialization\", this is similar except Xavier initialization uses a scaling factor for the weights $W^{[l]}$ of `sqrt(1./layers_dims[l-1])` where He initialization would use `sqrt(2./layers_dims[l-1])`.)\n", + "\n", + "**Exercise**: Implement the following function to initialize your parameters with He initialization.\n", + "\n", + "**Hint**: This function is similar to the previous `initialize_parameters_random(...)`. The only difference is that instead of multiplying `np.random.randn(..,..)` by 10, you will multiply it by $\\sqrt{\\frac{2}{\\text{dimension of the previous layer}}}$, which is what He initialization recommends for layers with a ReLU activation. " + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: initialize_parameters_he\n", + "\n", + "def initialize_parameters_he(layers_dims):\n", + " \"\"\"\n", + " Arguments:\n", + " layer_dims -- python array (list) containing the size of each layer.\n", + " \n", + " Returns:\n", + " parameters -- python dictionary containing your parameters \"W1\", \"b1\", ..., \"WL\", \"bL\":\n", + " W1 -- weight matrix of shape (layers_dims[1], layers_dims[0])\n", + " b1 -- bias vector of shape (layers_dims[1], 1)\n", + " ...\n", + " WL -- weight matrix of shape (layers_dims[L], layers_dims[L-1])\n", + " bL -- bias vector of shape (layers_dims[L], 1)\n", + " \"\"\"\n", + " \n", + " np.random.seed(3)\n", + " parameters = {}\n", + " L = len(layers_dims) - 1 # integer representing the number of layers\n", + " \n", + " for l in range(1, L + 1):\n", + " ### START CODE HERE ### (≈ 2 lines of code)\n", + " parameters['W' + str(l)] = np.random.randn(layers_dims[l], layers_dims[l-1]) * np.sqrt(2./layers_dims[l-1])\n", + " parameters['b' + str(l)] = np.zeros((layers_dims[l],1))\n", + " ### END CODE HERE ###\n", + " \n", + " return parameters" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "W1 = [[ 1.78862847 0.43650985]\n", + " [ 0.09649747 -1.8634927 ]\n", + " [-0.2773882 -0.35475898]\n", + " [-0.08274148 -0.62700068]]\n", + "b1 = [[ 0.]\n", + " [ 0.]\n", + " [ 0.]\n", + " [ 0.]]\n", + "W2 = [[-0.03098412 -0.33744411 -0.92904268 0.62552248]]\n", + "b2 = [[ 0.]]\n" + ] + } + ], + "source": [ + "parameters = initialize_parameters_he([2, 4, 1])\n", + "print(\"W1 = \" + str(parameters[\"W1\"]))\n", + "print(\"b1 = \" + str(parameters[\"b1\"]))\n", + "print(\"W2 = \" + str(parameters[\"W2\"]))\n", + "print(\"b2 = \" + str(parameters[\"b2\"]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Expected Output**:\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "
\n", + " **W1**\n", + " \n", + " [[ 1.78862847 0.43650985]\n", + " [ 0.09649747 -1.8634927 ]\n", + " [-0.2773882 -0.35475898]\n", + " [-0.08274148 -0.62700068]]\n", + "
\n", + " **b1**\n", + " \n", + " [[ 0.]\n", + " [ 0.]\n", + " [ 0.]\n", + " [ 0.]]\n", + "
\n", + " **W2**\n", + " \n", + " [[-0.03098412 -0.33744411 -0.92904268 0.62552248]]\n", + "
\n", + " **b2**\n", + " \n", + " [[ 0.]]\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Run the following code to train your model on 15,000 iterations using He initialization." + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Cost after iteration 0: 0.8830537463419761\n", + "Cost after iteration 1000: 0.6879825919728063\n", + "Cost after iteration 2000: 0.6751286264523371\n", + "Cost after iteration 3000: 0.6526117768893807\n", + "Cost after iteration 4000: 0.6082958970572938\n", + "Cost after iteration 5000: 0.5304944491717495\n", + "Cost after iteration 6000: 0.4138645817071794\n", + "Cost after iteration 7000: 0.3117803464844441\n", + "Cost after iteration 8000: 0.23696215330322562\n", + "Cost after iteration 9000: 0.18597287209206834\n", + "Cost after iteration 10000: 0.15015556280371806\n", + "Cost after iteration 11000: 0.12325079292273546\n", + "Cost after iteration 12000: 0.09917746546525934\n", + "Cost after iteration 13000: 0.08457055954024278\n", + "Cost after iteration 14000: 0.07357895962677369\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "On the train set:\n", + "Accuracy: 0.993333333333\n", + "On the test set:\n", + "Accuracy: 0.96\n" + ] + } + ], + "source": [ + "parameters = model(train_X, train_Y, initialization = \"he\")\n", + "print (\"On the train set:\")\n", + "predictions_train = predict(train_X, train_Y, parameters)\n", + "print (\"On the test set:\")\n", + "predictions_test = predict(test_X, test_Y, parameters)" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.title(\"Model with He initialization\")\n", + "axes = plt.gca()\n", + "axes.set_xlim([-1.5,1.5])\n", + "axes.set_ylim([-1.5,1.5])\n", + "plot_decision_boundary(lambda x: predict_dec(parameters, x.T), train_X, train_Y)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Observations**:\n", + "- The model with He initialization separates the blue and the red dots very well in a small number of iterations.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "## 5 - Conclusions" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "You have seen three different types of initializations. For the same number of iterations and same hyperparameters the comparison is:\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + " **Model**\n", + " \n", + " **Train accuracy**\n", + " \n", + " **Problem/Comment**\n", + "
\n", + " 3-layer NN with zeros initialization\n", + " \n", + " 50%\n", + " \n", + " fails to break symmetry\n", + "
\n", + " 3-layer NN with large random initialization\n", + " \n", + " 83%\n", + " \n", + " too large weights \n", + "
\n", + " 3-layer NN with He initialization\n", + " \n", + " 99%\n", + " \n", + " recommended method\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "**What you should remember from this notebook**:\n", + "- Different initializations lead to different results\n", + "- Random initialization is used to break symmetry and make sure different hidden units can learn different things\n", + "- Don't intialize to values that are too large\n", + "- He initialization works well for networks with ReLU activations. " + ] + } + ], + "metadata": { + "coursera": { + "course_slug": "deep-neural-network", + "graded_item_id": "XOESP", + "launcher_item_id": "8IhFN" + }, + "kernelspec": { + "display_name": "Python 3", + "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.6.0" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/Course2/Week 1/Regularization_v2a.ipynb b/Course2/Week 1/Regularization_v2a.ipynb new file mode 100644 index 0000000..683ec38 --- /dev/null +++ b/Course2/Week 1/Regularization_v2a.ipynb @@ -0,0 +1,1133 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Regularization\n", + "\n", + "Welcome to the second assignment of this week. Deep Learning models have so much flexibility and capacity that **overfitting can be a serious problem**, if the training dataset is not big enough. Sure it does well on the training set, but the learned network **doesn't generalize to new examples** that it has never seen!\n", + "\n", + "**You will learn to:** Use regularization in your deep learning models.\n", + "\n", + "Let's first import the packages you are going to use." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Updates to Assignment \n", + "\n", + "#### If you were working on a previous version\n", + "* The current notebook filename is version \"2a\". \n", + "* You can find your work in the file directory as version \"2\".\n", + "* To see the file directory, click on the Coursera logo at the top left of the notebook.\n", + "\n", + "#### List of Updates\n", + "* Clarified explanation of 'keep_prob' in the text description.\n", + "* Fixed a comment so that keep_prob and 1-keep_prob add up to 100%\n", + "* Updated print statements and 'expected output' for easier visual comparisons." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# import packages\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "from reg_utils import sigmoid, relu, plot_decision_boundary, initialize_parameters, load_2D_dataset, predict_dec\n", + "from reg_utils import compute_cost, predict, forward_propagation, backward_propagation, update_parameters\n", + "import sklearn\n", + "import sklearn.datasets\n", + "import scipy.io\n", + "from testCases import *\n", + "\n", + "%matplotlib inline\n", + "plt.rcParams['figure.figsize'] = (7.0, 4.0) # set default size of plots\n", + "plt.rcParams['image.interpolation'] = 'nearest'\n", + "plt.rcParams['image.cmap'] = 'gray'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Problem Statement**: You have just been hired as an AI expert by the French Football Corporation. They would like you to recommend positions where France's goal keeper should kick the ball so that the French team's players can then hit it with their head. \n", + "\n", + "\n", + "
**Figure 1** : **Football field**
The goal keeper kicks the ball in the air, the players of each team are fighting to hit the ball with their head
\n", + "\n", + "\n", + "They give you the following 2D dataset from France's past 10 games." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "train_X, train_Y, test_X, test_Y = load_2D_dataset()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Each dot corresponds to a position on the football field where a football player has hit the ball with his/her head after the French goal keeper has shot the ball from the left side of the football field.\n", + "- If the dot is blue, it means the French player managed to hit the ball with his/her head\n", + "- If the dot is red, it means the other team's player hit the ball with their head\n", + "\n", + "**Your goal**: Use a deep learning model to find the positions on the field where the goalkeeper should kick the ball." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Analysis of the dataset**: This dataset is a little noisy, but it looks like a diagonal line separating the upper left half (blue) from the lower right half (red) would work well. \n", + "\n", + "You will first try a non-regularized model. Then you'll learn how to regularize it and decide which model you will choose to solve the French Football Corporation's problem. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1 - Non-regularized model\n", + "\n", + "You will use the following neural network (already implemented for you below). This model can be used:\n", + "- in *regularization mode* -- by setting the `lambd` input to a non-zero value. We use \"`lambd`\" instead of \"`lambda`\" because \"`lambda`\" is a reserved keyword in Python. \n", + "- in *dropout mode* -- by setting the `keep_prob` to a value less than one\n", + "\n", + "You will first try the model without any regularization. Then, you will implement:\n", + "- *L2 regularization* -- functions: \"`compute_cost_with_regularization()`\" and \"`backward_propagation_with_regularization()`\"\n", + "- *Dropout* -- functions: \"`forward_propagation_with_dropout()`\" and \"`backward_propagation_with_dropout()`\"\n", + "\n", + "In each part, you will run this model with the correct inputs so that it calls the functions you've implemented. Take a look at the code below to familiarize yourself with the model." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def model(X, Y, learning_rate = 0.3, num_iterations = 30000, print_cost = True, lambd = 0, keep_prob = 1):\n", + " \"\"\"\n", + " Implements a three-layer neural network: LINEAR->RELU->LINEAR->RELU->LINEAR->SIGMOID.\n", + " \n", + " Arguments:\n", + " X -- input data, of shape (input size, number of examples)\n", + " Y -- true \"label\" vector (1 for blue dot / 0 for red dot), of shape (output size, number of examples)\n", + " learning_rate -- learning rate of the optimization\n", + " num_iterations -- number of iterations of the optimization loop\n", + " print_cost -- If True, print the cost every 10000 iterations\n", + " lambd -- regularization hyperparameter, scalar\n", + " keep_prob - probability of keeping a neuron active during drop-out, scalar.\n", + " \n", + " Returns:\n", + " parameters -- parameters learned by the model. They can then be used to predict.\n", + " \"\"\"\n", + " \n", + " grads = {}\n", + " costs = [] # to keep track of the cost\n", + " m = X.shape[1] # number of examples\n", + " layers_dims = [X.shape[0], 20, 3, 1]\n", + " \n", + " # Initialize parameters dictionary.\n", + " parameters = initialize_parameters(layers_dims)\n", + "\n", + " # Loop (gradient descent)\n", + "\n", + " for i in range(0, num_iterations):\n", + "\n", + " # Forward propagation: LINEAR -> RELU -> LINEAR -> RELU -> LINEAR -> SIGMOID.\n", + " if keep_prob == 1:\n", + " a3, cache = forward_propagation(X, parameters)\n", + " elif keep_prob < 1:\n", + " a3, cache = forward_propagation_with_dropout(X, parameters, keep_prob)\n", + " \n", + " # Cost function\n", + " if lambd == 0:\n", + " cost = compute_cost(a3, Y)\n", + " else:\n", + " cost = compute_cost_with_regularization(a3, Y, parameters, lambd)\n", + " \n", + " # Backward propagation.\n", + " assert(lambd==0 or keep_prob==1) # it is possible to use both L2 regularization and dropout, \n", + " # but this assignment will only explore one at a time\n", + " if lambd == 0 and keep_prob == 1:\n", + " grads = backward_propagation(X, Y, cache)\n", + " elif lambd != 0:\n", + " grads = backward_propagation_with_regularization(X, Y, cache, lambd)\n", + " elif keep_prob < 1:\n", + " grads = backward_propagation_with_dropout(X, Y, cache, keep_prob)\n", + " \n", + " # Update parameters.\n", + " parameters = update_parameters(parameters, grads, learning_rate)\n", + " \n", + " # Print the loss every 10000 iterations\n", + " if print_cost and i % 10000 == 0:\n", + " print(\"Cost after iteration {}: {}\".format(i, cost))\n", + " if print_cost and i % 1000 == 0:\n", + " costs.append(cost)\n", + " \n", + " # plot the cost\n", + " plt.plot(costs)\n", + " plt.ylabel('cost')\n", + " plt.xlabel('iterations (x1,000)')\n", + " plt.title(\"Learning rate =\" + str(learning_rate))\n", + " plt.show()\n", + " \n", + " return parameters" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's train the model without any regularization, and observe the accuracy on the train/test sets." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Cost after iteration 0: 0.6557412523481002\n", + "Cost after iteration 10000: 0.16329987525724213\n", + "Cost after iteration 20000: 0.13851642423253263\n" + ] + }, + { + "data": { + "image/png": "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\nAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "On the training set:\n", + "Accuracy: 0.947867298578\n", + "On the test set:\n", + "Accuracy: 0.915\n" + ] + } + ], + "source": [ + "parameters = model(train_X, train_Y)\n", + "print (\"On the training set:\")\n", + "predictions_train = predict(train_X, train_Y, parameters)\n", + "print (\"On the test set:\")\n", + "predictions_test = predict(test_X, test_Y, parameters)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The train accuracy is 94.8% while the test accuracy is 91.5%. This is the **baseline model** (you will observe the impact of regularization on this model). Run the following code to plot the decision boundary of your model." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAcoAAAEWCAYAAADmYNeIAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsvXmUZPlV3/m5b4l9y60ya6/qRWwjNQiQ2JE8xhaMkeDM\nGMtokFiMEAdhz8EMYIwZ8GAj5BEjYcNoZKzBwGANYCw3WEKWZ5AAdws3CEkgyaBWd9eSlVm5xx7x\ntjt/vMjIiIyIrMjMyKUyf59z+nRlvOX3ey8y3333/u79XlFVDAaDwWAwDMc66QkYDAaDwXCaMYbS\nYDAYDIY9MIbSYDAYDIY9MIbSYDAYDIY9MIbSYDAYDIY9MIbSYDAYDIY9MIbScKYRkRsioiLijLHv\nt4vIHx5yvK8Wkb+YxHwedg57P0XkR0XkFyc5p8553yki/2jS5zWcXYyhNJwaROQFEfFEZHbX53/a\nMS43TmZm46Oqf6Cqn7P9c+ea/upxjC0ivyQiP3UcYx0HqvpPVfXvHOYcw4y1qr5JVf/Xw83OcJ4w\nhtJw2nge+NvbP4jIi4HMyU3n7HKavdrTPDfD+cMYSsNp41eA1/f8/Abgl3t3EJGiiPyyiKyKyC0R\n+TERsTrbbBH530RkTUSeA/67Icf+KxFZEpFFEfkpEbEfNCkR+dci8vc7/77c8XC/r/PzoyKyISKW\niLxCRO52Pv8V4Brw2yJSE5Ef6jnl60Tkdmee/7BnnKSIvF1E7nX+e7uIJDvbBryjzjweE5E3Aq8D\nfqgz1m+PuA4Vke8Tkc8An+l89rki8sHONfyFiHxLz/4zIvLbIlIRkWc69+sPO9sGwsgi8iERGeoF\nisg7RORO51x/IiJf3bPtJ0TkN0XkV0WkAnx757Nf7Wz/F53r2v4vEJGf6Gz7ERH5rIhUReRTIvLN\nnc8/D3gn8OWdY7Y6n/d53iLy3SLybOf6nxSRS7vu15tE5DMisiUiPy8iMuz6DGcXYygNp42PAAUR\n+byOAXst8Ku79vnnQBF4BPhaYsP6HZ1t3w38DeCLgC8B/oddx/4SEACPdfb5a8A44b0PA6/o/Ptr\ngeeAr+n5+Q9UNeo9QFW/DbgNfKOq5lT1rT2bvwr4HOC/BX6881AH+IfAlwFfCDwBvAz4sQdNTlXf\nBfzfwFs7Y33jHrt/E/By4PNFJAt8EPg14ALx/f4FEfn8zr4/D9SBBeKXljc8aC578AzxdU13xvsN\nEUn1bH8N8JtAqXMtvdf35s515Yjv3Sbw7zubPwt8NfHvxE8CvyoiF1X108CbgKc7x5Z2T0hE/grw\n08C3ABeBW8B7du32N4AvBV7S2e+vH+zyDQ8rxlAaTiPbXuXXAZ8GFrc39BjPf6CqVVV9AXgb8G2d\nXb4FeLuq3lHVDeKH4Pax88A3AP+TqtZVdQX43zvnexAfBr6q47l+DfBW4Cs72762s30//KSqNlX1\n48DHiY0ixF7hP1bVFVVdJX7wf9uokxyQn1bVDVVtEhuBF1T1/1LVQFX/FPi3wN/s3Ov/HvhfVLWh\nqp8C/vVBB1XVX1XV9c44bwOSxC8L2zytqu9V1agztwFEZA54L/D9nbmiqr+hqvc6x/0/xJ7yy8ac\n1uuAd6vqR1W1DfwDYg/0Rs8+b1HVLVW9DfwesbE3nCOMoTScRn4F+Fbg29kVdgVmAZf4zX+bW8Dl\nzr8vAXd2bdvmeufYpU4YbQv4P4k9qT1R1c8Se1ZfSOy9/A5wT0Q+h4MZyuWefzeAXM/8d1/bJSZL\n7/25Drx8+3507snriD3IOcDZtX/vv/eFiPygiHxaRMqdcYrE3+dY5xYRl9jj/DVVfU/P568XkY/1\nzP+/2XXevei736paA9bZ+X2C0d+V4ZxgFswNpw5VvSUizxN7f9+1a/Ma4BM/4D/V+ewaO17nEnC1\nZ/9rPf++A7SBWVUNDjC1DxOHchOquigiHyYORU4BHxt1Ofsc4x7xtX2y8/O1zmcQG+puYpOILBxw\nrN797gAfVtWv271Tx6MMgCvAX3Y+7r239c7/M0Cl8+/dc9o+11cDP0Qcav6kqkYisgn0rvc9aP7/\nvDNONxQtIteBf9k579OqGorIx3rO+6Bzbt/v7fNlgRl6ohgGg/EoDaeV7wL+iqrWez9U1RD4deCf\niEi+86D8AXbWMX8d+LsickVEpoAf6Tl2CfiPwNtEpNBJvnlURL52zDl9GHgz8Pudnz/U+fkPO/Ma\nxn3itdRx+TfAj4nInMRlMj/ec20fB75ARL6ws7b3E4ccC2LP+EUi8m0i4nb++1IR+bzONf0W8BMi\nkhGRz6Un0aoTGl4E/keJk6i+E3h0xDh5YqO7Cjgi8uNAYdxJisj3EHvur9u1FpwlNoarnf2+g9ij\n3OY+cEVEEiNO/W+A7+jc0yTwT4E/6oT0DQbAGErDKUVVP6uqfzxi8/cTezPPAX9InBjy7s62fwl8\ngNiofJT4Qd/L64EEsTe6SRzKuzjmtD5M/MDfNpR/SOxN/f7II+I10h/rhAV/cIwxfgr4Y+ATwJ91\nruGnAFT1L4F/DPwn4nW43cX8/4o4QWdLRN47zgWpapU4oem1xN7VMvAzxOuHEL8IFDuf/wqxYWn3\nnOK7gf+ZOFz5BcBTI4b6APC7xJ7pLaDF/sK4f5v4JeBeT+brj3bWTd8GPE1sFF8M/Oee4/4/Yu98\nWUTWhlz/fwL+EfG67BKxoR9nzdpwjhDTuNlgMIyLiPwMsKCqh8l+NRgeKoxHaTAYRiJxjeVLJOZl\nxCHxf3fS8zIYjhOTzGMwGPYiTxxuvUQc2nwbO/WLBsO5wIReDQaDwWDYAxN6NRgMBoNhD85k6NXN\nFDVVfGANucFgMDy0XJ33yThJorvLNMpGfvZB/EWrvKaqcwc59kwaylTxAl/8hnec9DQMBoPhyPjZ\nH1zmpbM3afzQz/Cx95/JR/lE+co//w+3HrzXcMzdNRgMhoeMn/3BZb7o+Wd56pW/hXmMHz3mDhsM\nBsNDwraBfPqVn+Dpk57MOcIk8xgMBoPBsAcnaihF5FUSN4p9VkR+ZMQ+r+h0BvhkR4TaYDAYzh1d\nb/I7P3HSUzl3nFjotdOZ4OeJew7eBZ4RkSc72o3b+5SAXwBepaq3RcSkshoMhnOFCbeePCfpUb4M\neFZVn1NVj7ir+Gt27fOtwG91GqbSabRrMBgM54InXr3FS2dv0vyNj570VM41J2koL9PfPeAu/c1S\nAV4ETInIh0TkT0Tk9YxARN4oIn8sIn/sN8pHMF2DwTBxIiXR9HHaB2kPevZ5w4ta6DMfNOUfJ8xp\nv/sO8MXETVnTwNMi8pFOu6E+VPVdwLsA8hcfN7p8BsMpJ1NuMXO/025UIXBtVq7kCRP2yU7shHni\n1Vu84ysuxvWRr3RMuPUUcJIe5SL93dKvMNhV/C7wAVWtq+oacd+/J45pfgaD4YhwWwEzy3WsiPg/\nBdcLmb9TgXOuP228yNPHSRrKZ4DHReRmp/v4a4End+3z74GvEhFHRDLAy4FPH/M8DYazhyoS6YkZ\npfxmC9k1tAB2EJFonZIwrCoSHu89MmuSp5MTe2VR1UBE3kzc+dwG3q2qnxSRN3W2v1NVPy0iv0vc\n7T0CflFV//yk5mwwPPSoUlppkN+KDVXgWmzMZ2nlEmMdm6r7OH6El7LxUg7IwTRG7SBi6JECdnDy\nHmV2q8XUagMrVNQStqZTVGfSB77eB7ETbv05nvoeh9O/Kna+ONFvQ1XfB7xv12fv3PXzPwP+2XHO\ny2A4q0wv18lW2lgdW+T6EXOLVe5fK+Cl3ZHH2X7I/O0KdhB1P2unHVauFMDav/FoZl1SDb87jy4a\nn/ckyVTaTN+vd+cmkVJabwJQnc1MdCxjIB8OzLdiMJwTrDAiV2kPhjwVimtNVq+ONpQz92o4fr8X\nmGwGFNeblOf2bzzqpRSFrRb4UdcgRQKV6TSRc7KCYcW1xoABtxSKG62JeZXGQD5cmG/HYDgn2H6E\niiC71tyEOJFmFBJGpJrBQKjUUsiVWwcylGoJS9dL5LeaZKoekWVRnUrRzI8RAj5iHD8a+rkVKaKg\npqPVucMYSoPhnBAk7KGJKQq0U6MfBXvZhd3e6X5QW6jMZKjMTDaceVj8hE2yPfjiENkyESPZ7fzx\n4l/DPIIfDsy3ZDCcE9QSKtNpChvNbmhRiT2kymx65HGRbeEnbdx22Gc0FaifAg/wQdheyPRKnXTd\nRwVqhSRbF7LoiLXVrQtZ5u5W+sKvkcDmXOZQYVcjRffwYrqHGAzniPJsms0LGXzXIhJoZRyWrxfx\nk3u/M69dzKGWEHXsRCRxxuxeYVeJFKIxXc7tcpUJI2HExVtl0jUf0bhmM1duc+FOZeQxrazL6pUC\n7aRNJOAlLNYv5qiXUhOfn+HhwHiUBsN5QoTaVJra1GgPchh+ymHx0RLZchvHC/HSbuxNDvHKHC9k\nZqlGshnXQ7YyLusXs4TuoOKORMrU/Tq5SjtW50lYrC/kaGdGJxbth1y5jUTa5wlbColWQKIZ4I3I\nsG1lXZZvliYyBzCdPx52jKE0GAxjEdkW1em9DaxEysKtMla4Y5xSDZ+FWxUWHy0NhC5nF6ukGn53\nrdP1Ii7cqbB0o0jwAC93HBLNYLAEhe2xRhvKSWHCrWcDE3o1GM46qiQbPsXVOvmNJlYwPKtzEmQr\ngx6cAFYUka75ffvaXji0llIUChuticzHT9ndcPHAtiPWlDUqO2cH41EaDGcZVeYWq6Tqfre0obTa\nYPVKnlZ28ok4jhcO9eAkAsfvzyR1/Ci2okOk7NwJdROplVIU1luo7hjvCPCTHWWhI8Rotp4dzDdo\nMJxhMlWPVH3Ha9sOcc4t1rjz+NTEJdm8lEMkDBhLFQYShvykPbS8RIH2HipB+yGyLZavF5lerpFq\nBiDQyCfYmM8eiRyd6fxxNjGG0nB+UCXZDBBV2ml3ZHnAWSK31R65RpdsBhNLmtmmkU9QWrWQHhWf\nSOIwZyvT/7iJHItaMUm23O4vV7GE6vTkMkyDpM3K9eJODekR6bWC8SLPKubbNJwL3FbAhbsVrFC7\n4b6N+eyZT/kfXSB/RMLjIizfKFJaaZCpeiBQLyTZmh1eg7gxn8V3bQqbLawoopVx2ZwbniE7ibkd\nJdtrko23/jrm0Xq2MN+m4eyjyvydyk4mZsdGTN+v46Uc/CNeqzpJ6sXk0IQZRY5MfDyyLTYu5ti4\nOMbOIlRn0rGG6kOK0W09+5isV8OZJ9XwBzIxIV6vy21NJrvytNLIJ2jkE0QSvx9EEv+3eiV/5B7W\neaBvTdKEW88s5ps1nHmscHiYUQB7xLYzgwjrl/JUWgHpuk9oC418ArXNO7LBMC7GUBrOPK2MO1TY\nO+pkQJ4GknWfwkYTO4hoZl2qE2435e8zxHzU8zk0qmTLbQobLewwop122JrLPFCKb1KYcOv5wny7\nhjNP5FiUZ9IU1ptIJ5cnEvCSzqkwlLnNJlMrje7cXC8kV2mzdKN0IsbptM1nGIX1JsX1HXH3dM0n\nVS+zdKNEkDx6IQETbj1fnI7feoPhiCnPZli9UqCRd2lmHDbms9y/XjjxdTqJlKmVuFHw9kwsBStQ\n8hvNyQ+oOrTV1onN5wBIpH1GEuK5ikJxvXHk47/hRWd7XdswiHkdMpwbWlmXVnanblBCxYpCQsc6\nMYPptoOh6jQWkKn7lCc1kCql1Qb5zRaiceePjYXsgDrPoeYTKblyi0zFI7KF2lRq3+o/Ekbktlpk\naj6hEzdz3l3r6fjhSEWfbSH2o6BXt/WpeCZHNpbhdGG+acO5QyJlZqlGpuZ1C9zX57M0C8ljn0tk\nWyNLGsMJhjmn79f7CvtdP2LubpX714p9wuAHnk9HDN3tkbBL130q0+k9W3H1ImHExRfK2EGEpfE0\n0jWPzQtZalM79a6hY41sGB0cRf0lpvvHeceEXg3njtnFKumaF/cn1DjzdXapRqLpP/jgCRMkbLyk\nM2CbIoHKhNRpJIzIlQcVekShuNYfqjzofLJVr89IQnxvi/sQYc9vtrpGEjpi6gpTK/W+XpWRbVHv\nlLzsnmN5jwbUBsNBMR6l4Vxh+3t0rFhvsnZlspJu47B6Jc+Fu9VO2FNAlc25zMREy50gQoUBL2w7\nUWcS80lXh0vlqcR1rI0xvPVMzRsutydCotUvt7e+kEOt2EsWILSEzflsf5hWlVQjIFX3CG2hXkzt\nOxnJtMkywAkbShF5FfAOwAZ+UVXfMmK/LwWeBl6rqr95jFM0nDHsIOo+/HsR4nDkSRA5Fss3inHn\njTDCTzoT1aENHHtoOFUBb0iG6EHmEzoWCkPKcCQO545BaFvAoOFGldDedWZL2FjIsXEhixUpkS39\n68yqzN3d6XWpAqW15thdU3YyW3+dpyec2ep5EYGvJJIWjmNEHx4GTsxQiogN/DzwdcBd4BkReVJV\nPzVkv58B/uPxz9Jw1vAT9tCsTwVaR9zE90EECZv4nXGyqC1Up1LkN1t9HptKnA08ifnUSily5Xaf\n17qtBLRbDH0U1enUgLevnXmMbOJsCdEQI54tt/vOtT2v2cUad4+ga8o4RKGyeMej2Yi672rFKZsL\nCy5iVJJONSe5Rvky4FlVfU5VPeA9wGuG7Pf9wL8FVo5zcoazidoWlel03/qWApElVB5ivdEHsTWX\nYWsuQ+AIKtBKOdy/VpiYzq2fiktuIoHIig1k6FjcvzZ+CU4rm2BrNtN3Dj9hsXIlv+/5ZIesyQII\n+sDM2J/9wWXe7v45T734bROtk1y+59NsRKhCFMWGsrwZsrVxdJm6hslwkq/Ql4E7PT/fBV7eu4OI\nXAa+GXgl8KV7nUxE3gi8ESBZmJvoRA1ni/JsmiBhU1hvYoVxx4ryXOZoOlYcBFXSNY/8VhtUqReS\n1IvJw3lBIlSn01SnH/AyoEqm6pEr73/seilFo5Ak2QyILMFL2fuec3UmTa2UJNkKCW3BT+7/HMCw\nGHCXUR1VjnI9MoqUWjUcCGaowuZGyNTM8a+NG8bntCfzvB34YVWNHhSaUNV3Ae8CyF98/IwLeBoO\nhQj1YscAnEJ2l3IkmwHZSpuVq0cvkDC9XCdb2T22x8rV8UTU1ZK+WtWDoLZFK3u4YFetlCLZrA1p\nIC14J9AtJtpj+Ts863rDZ4CTNJSLwNWen690PuvlS4D3dIzkLPANIhKo6nuPZ4qGh55IyW82yZU9\nAGrFZNwU+JSuCTntcCBsaGlssFJ1n1bu6CT33HbQZyR3xvaPfOxJ08gnSNcScU/M7SwjIQ7j7vru\njzJxZxvbBtsRAn/QKGazpySSYRjJSRrKZ4DHReQmsYF8LfCtvTuo6s3tf4vILwG/Y4zkMaGKHSgq\nnIi+p4QRVqSHU83p9KFMtILuw7+01iBd947FOzsIqcbwWk5L4wL+ozRWo8YW5aEzlL1dU1INn8i2\naOQSaE/27EGEzX1fqWwFRKGSzdukM9ZYiTgiwsIll8XbXl/41bJgdv60B/YMJ/YNqWogIm8GPkCc\nWvduVf2kiLyps/2dJzW3806iGTC7VMX2IwRoJx3WLueOZQ1PwojZpRrput9Nstm4mKN5gId0quH3\nGUnY8c6SzWBAGm1cbD/EDiL8hNP34J0EcZkDA+UcEQyWSEyY0LKGjq3b8zoOVHHbcYnIgdcne9hv\n15S9qFVD7t2J1ZzorC1mchaXrybGMpbZnM31R5JsrAV4XkQ6YzE94+K4p++FzdDPib7KqOr7gPft\n+myogVTVbz+OOZ13rCBi/k4Zq2dNJdkKWLhVYfHR0pF7YRfuVkk0g+1IGVaozC5WWb5e3PcDL9kM\nhkqdScdY7tdQSqjM3auSbPioCKJKZSZNeSY9sfsSvxAMFzI96jXVZj4B909mbIBE02dusdrtHxrZ\nwurlPF568oku++0AEkXKvbv93qAqNGoR1UpIoTje72YyZXHxykPkmRsAI2Fn2EW23BoqNm2FEen6\n0Uq8OV4Ye4C7PheFwgE6V4SONTTDUQXCAxR6zyzFRtJSsCPF6qj5ZKrevs81CrWE+1cLhLZ0yiTi\nOsG1y/kj9+jjsfMDY68ew9gSRszfqeAE8X21FJwgDp1b4eSEIJ549RYfekuan37vL++r/KPZiIYm\n0qpCZWuISILhTGGC44Y+HD8aLiMG2EesXOP40ciuEI63/7Hr+QRTK40+gQElznxs5PfnIUkYkan7\nAx7qtrEcR6JtXLy0w93Hpki0Yo+4nXaObT3VS7tHNrbtR+Q3myQbPkHCoTKT6jZazm4n3exGIVPx\n+kTRT4K9bsEpXOo2TBhjKA19eGmXaESxtnfEyjVecrjUWsT46i69qB0XvM8uVmPpOmIvc/Vyft8S\ncVaoIyTawJ6gx9NFZO+Qoyrpmk+61tExLaU6SjrHMPYBcLyQhRfKWJHG70KtkEy13ZWUs0IdGSaf\n1P09TMPldMYa+uWLQLFkHqNnHfMNG/qo5xMU1y3o8SxjGTL3yOvPIseiWkqR39qRWlM6EmwPKpQf\ngZdyuPdIKfZWifswHsQFCF0rNq67at6U+N4cK9vZvM2g246qsNli/WJuop7tJCmtNrpGEnYaLU8v\n17n3iEs77QwVbleB1iGNdm+LrIP2kRQRLl9NcPd2v+dbKNlk83uvYLVbEeurAa1mhJsQZuYcMqYk\n5KHCGEpDP5awdL1Icb1JtuKhArVSksoBDdV+2bqQwU/aFDZaWFHUkTVLH65EReTw3pYIG/NZZpZq\niO5EiCNL2NpDL/UoyJbbXSMJO0ZnZqlGM5eYqKD6pEjV/aHeuOPHZUDttEMr4/bps0YC7bRL+wDR\nBJi80k4ma/Poi1LUqiFRCJmsRTK19+9lqxlx+/l2N/rv+0qz4XHxiku+YB6/DwvmmzIMoLbF1oUs\nWxeyxz+4xGHEeulk16SG0SgkCVyLwnoT149opV0qM6mdRBdVclstCpstJFKa2UQsjTfhOtTdogBd\nJM7mPawyzlEQ2YIdDYutxmvGiLB6JU9uq9URh1BqxSS10v7FIY5SQMC2ZV+h1tX7/lDZupUln1ze\nNmLoDwnGUBoMvWw/1UY8wLy0O7Jn5W75t1y5Tabmce+R0titpvacV2dOIz1G3aVjqkpptRF39YiU\ndsZlYz57IO/aCiKmVupxhq9APZ9k80IGHfO6KlMpplYbfQY+klhBp3s9ItSm0tSmHn5x+kY9pLwV\n0qgPX18NgljWzjYR2IcCYygNBuJkk+nlGqlG3MmhmXXZWMgRuuMZAtsPBzw9ASRScpstKgcIz0qk\nlFbq3fZV7XTcoaNWSpGqDzafVkviLNUOs4tV0j37peo+Cy+UY8O9Hy83UhZulXE6AhRoHP5NNgOW\nbhbH8vhqUykSXkiu3I6NucZh1Y2F3PjzGIPtcOtTL/41TurxtrrssbkxKIDei0isymN4ODCG0nDu\nkY4hsMKdZJN03Wf+dmxUxjEEiVbYNQC9WBorBFUOMK+5u1WSTb9PoHzhdpl7N0rdpKf4AkCRPlk+\nxwv7jGRnN0SV/GaL8tz4hjtT87CD/jpCC3D8cHxpO4kbLW/NZnDbIaFrTS5Ll6Pt/LEfPC8ay0gW\np0zY9WHCGErDuSdTiUOTvY8tIS5LSNf8WLHmAQSuNbS8Qek0i94nTjvsM5Lbc9II8lsttuaz1KZS\nJBs+kS00swnoCcm67dGGO9ncn3DEbhnA7nwUEu2QVq9TqEqiHWL7IV7KGRAqiByL9gloBx8X9dre\npSwikC/aXJg/fevIhtEYQ2k497heONwQRPG2cTSB/JSDn7RJtMI+g6vCgUpbXG+EoYOuFmqQsEd6\nZX7CHmm491vm4ydsImFIqLf/JSCWP6zgeGE3LbheSLI1lyZdD0CVZi4xUZH94+j8sR/2CqcWp2zm\n5l3s49LNNUyMk//NMhjGwG0FpGtenBVbSExUUs1LOcMNgRA3Hx6TlasFZu/VSDU6gu62xfrF3IFC\njH5yuKGLOtseRJC0aacdks1+b1AFqvtUuWkUkkytNtCe0LQCoW3RzO14RrP3qrjtsLuOCXGGbrbc\n3inWv19n80Lm0Ak7B+n8cRzk8jb3GfTYRWB61jFG8iHldPx2GQx7UFqpk99sIZ3i+uJag4357L5K\nSKwwItEKCB2rK5u2TSOfoLRqIf7OOlxE7LHtR0wgsi1WrhYm0iJse+zeukIFsITqmEamUkpxoVHr\nc0pbGWff5SpqCUs3isws1butuJo5l/WFXPf6rDAi1RGz76VrpHsmMbXSoJVJEAwz+Kokm3FC1X7k\n87x2hO8riaSFe4LdOGxbuHwtwb07sf7vdqeR+UsuicTZDTmfdYyhNJxqEk2f/Garr7gehen79fHC\neKoU15oUNprdjh9+wmblamHnWBGWrxeZWm2QqcZtlOqFBFtzmQMZOrUtwgk4vKuX85RWG+TLLSSK\njdzmfHa8TNxImVuuDRiuVCMYe921l9C1WblWGFk+I9Foib/diMae5u6EomQj7h4iunOm1Uu5gWSh\nXim6j/6OzeKddixaLvH08kWbhUvuWMkyqkqtGlEth90km8Oq5mRzNo9+TopGPUI1FiYwnuTDjTGU\nhlNNtuINDUECpGveA73KTNWjsNGMDW3nIZ9oh8wtVrl/vdjdL3LiMOn6xUnNfAJYwtZ8lq35/Qs/\npEYk7Fgad4jZr6HsMsL4hI5FZFtYQX8yyyjjKbvSQiVULtyt9LR3i7fPLVa590iJ0LWHhlvvL3k0\nG7FB2j5ltRySSAgzc3tHA1SVe3c86rVo59hKyNSMw9whk20sS8jlTZHkWcHEAgynmj2y7Mciv9Ea\nWHsU4kxO2zftkSaGCOsXc0Sy851Fo3QROkIDvWRqI7qHEHufQ8+jSrUyWIqhClsbwQOn3KhHfUZy\n+9jN9QD/AN1qDGcXYygNp5pGMTm0pyRsNznem706T1jDJNXOCLGQ+OCNiwTqxaORB2xlXZZulqhO\npWhkXbZm02xNp7rGUzvj14rJge4ko3pOisadW4Z1/tCIkfWK0Rh2rlYdXe/4oDIPw/nChF4Npxov\n5VCZTlPYaMbJPJ1n//pCdqwyg0Y+EXuVuz5XkQPVNx4KVbIVj/xGEytSmlmX8mxmouUSXSxh9XKO\nubtVgO6+aHGnAAAgAElEQVS9qxeSfZmqkyZI2GzuChU3C0mylVhdqJFP0B6SINXKurA6eL5EUvmp\nV/0Fle/5yEDnD8sWEgnB8watXTr74Htqj5ICNKo5hl0YQ2kYwPZCnCDCS9pja3keJeW5DPVCkkzN\n64TtkmNLy1Wm03HoLtRuSyoV2FjIHnvH3dJKo6+FmLPVJlP1WJqEFuwQWtkEi49Nkal4XcPsH3Gr\ntGH4KYetB4zrJx3qHYPa2z3k8ouUz7/R4CMjjpu/5HL3ltfnGVoWYxX0F0o2G+vBUK/SrC8aejGG\n0tBFwoi5xVqs3NJJIaxMpynPpk+8jXuQtKkk9197FzkWSzdL5DZbpOs+gWtRnU4feW/N3VhBRGGr\n1ZeYJMTh34NqwY5DZFvU9lE3KZFSXG2Qq7Sh4wFuze3t9brtANuP4nrUQ3jHGwtZmjmX3FYbUeWb\n/naLv3XhM3zkuz4x8phM1ubGo0k21gO8tpJKC9MzLs4YJSKJpMX8RZf7S343Si3A5WsJLJOlaujB\nGEpDl9mlGsmGH4cpO6/ZhY0mQcKmXjydDYHHIbItKrMZKrMnN4dEKyASwd7lvlgai5Wf5Ny6qDJ/\nu4zbDvs6oKQaPvdulvok8iA2/hfuVDoqQnHpTXUqdeCyGkRo5pP8k5/c7DZa/qMxDkskLRYuHSyL\ntzjlkM1bNBuKSFzKYZ3Cfp6Gk8UYSgMQe5PpIc11LY2N5bEYSlVSdZ9k0yd0ber5xKkI/U6C0LEG\nSiIgDgWPUu5x2wHpaqxG1MgnJioiPoxkM+gzktDRvA0islVv4Hdg9l6VRFeJJz4ov9nCSzo0Dvj7\n8sSrt3jp7E0ab/11jvrxVN4MWFvxCQKwHZidc7AsE3I1DHKihlJEXgW8A7CBX1TVt+za/jrgh4n/\nXqvA96rqx499oucAKxxdMD4qI3GSSLTjzWwnnkytNFi+VjiRdbVR2H7cKsrxQtoZl3ohObo/ZA9+\nysFP2DuGpcMoSbniaqObwASxGtHmXIbaLt3Yg85nGInW8JIKS+NtvYbSCkYr8RQ2m3sayidevTVy\n2xte1EKf+WA3s/WoKG8F3F/aaaocBrCyHIBAaWrv9c0o1LiXpMPYHUBUlTAAy+ZQHmsUKpHGfSxN\n95Hj48SeQCJiAz8PfB1wF3hGRJ5U1U/17PY88LWquikiXw+8C3j58c/27BO6VvyADfu9HqWTkXjE\n5Deafd6MaPxwmbtXjcN+p+ChkGz4XLhTAY3rqjJVj8J6k+UbxbGScWIt2CqpZhAnFVnC+kJu4EXA\nbQc7IgkdRGFqtUEzv6Nze9j57GaUxxoJ+Lvk1/Z+sRpec7HdCqv5Gx8dOYePvd85ljZZ6yuDSTyq\nsLYSjDSUYagsL3rd0hHHEeYvuWRze3uhm+s+az3jlaZjcfT9GLowVJbuet1G0I4jLFx2D60iZBiP\nk3xVfxnwrKo+ByAi7wFeA3QNpao+1bP/R4ArxzrD84QI6/NZZpdqiHabPxBZwtYRJZr0kiu3hwoD\n2H6EHUQTFUE/EKrMLNX65mgp4EcU1ppjqedEjsXKtSJWEGvBBu5wLdjMHmpEmaoXdyM5xHyufuZZ\nXvyR/0K6XmP56lU+/pVfTq1Uopl14xBxj+ZtnCUs1Av9HmKQGP5iZTvw1/56mtf9nX7PV5/5YE+v\nyH12L/GVMFASSZnY+qHvD7/BYRC/oA0zYndvtWk1d47zfWXxtsf1R5Mkk8NfTCrlgNX7/UZ5ayOO\nKswtjL+uOmzsu7c8bjyaJDFibMPkOElDeRm40/PzXfb2Fr8LeP+ojSLyRuCNAMnC3CTmd+5oFpLc\ndy0KG00cL6KVcalOp8cuxTgUJ+8w7kmiFeD4gyFoC8hWvX3JzEWOxZ7B7D3uhXYe4HYQv0Dsdz6f\n98d/whf9wR/i+nGY9ZFPfZprzz7Lk9/+eurFIvevF5lZqpGqxxJ47bTD+kJucK1YYm/40mqF0AdV\nwY4Cki2fhX/xXp56x3A1nf0QBrHEXLPZ0XEFLsw7lKYPH+FwE4I/pP7SGRFObbci2q0ha8wdJZ9R\nyUSjPNfNzZDZ+eEGeb9jzx8wkckwPqdn8WcPROSVxIbyq0bto6rvIg7Nkr/4+NmVXDlivLTL2uXj\nbypbKyYprvWHGxUIXPvEvcnt7M5R6ITfI+r5JIX15lCvcluNSEVG2tNR87F9ny/6g//cNZIAliqO\n5/OSp/+Ixi+8jHd8xUX0mafwAkEVku7oP6Xmb3yU//cjs3yi+DhVN8eVxjKfX/ksqcgb91L3ZPFO\nrOMKOwo8K8sBiaR16JDj3LzL0t3++ksRmB1Rf+n72hVdH9g2xOBuEwTDt2kUqwfZnctQ1a5mbTrT\nn3m719jDxBYMk+ckDeUicLXn5yudz/oQkZcAvwh8vaquH9PcDEeMhBF2qASOBZZQmUqTrvkkWkG8\nPmmBIqxdzk1+cFUcPyKyZay1vO0WX8MMUyRQ3Ue7r3EIkjZbsxlKa42+zzd6OodEjkU7Ffeb7J3X\nXvPJb5W7HmkvlirXNm7xvV/xmj6JuAfjMMMWr1x9Zsz9x8f3IlrNQY9ZFTbWgkMbynzBhisJVu/7\n+J7iusLsBYdCafi1J1PWUEMlEhu2USRTVtfY92I7O+o/jXrI4u3+l4uLVxJd0YNkSkaOnRlDgchw\neE7SUD4DPC4iN4kN5GuBb+3dQUSuAb8FfJuq/uXxT9EwcVSZXq6Tq7S7GthbsxmqM2nuXyuQbAYk\nm3HfyEY+ceAMzlFkt1pMrTQQjZsQN7Iu6xfz6B4F5r09IfsuhVhib7+NkMehOpOmmU/EzaqJC/93\ne9Zrl3LM367Eerad+TWziZHzaWYz2OFwIfgNu8QrfqTJE9/0et7wQ62+bds1jcdJEDLSiwpGrC/2\n0m5HhIGSSo+ui8wX7NhgjoHrCoWiTaXcrw9rWVCaHv0YnZt3ufNCe8Bz3U7mCUPl7m0P3WVL793x\neOTxFI4ruK5FvmhTHTJ2ceqhCAo+9JzYXVbVQETeDHyAuDzk3ar6SRF5U2f7O4EfB2aAX+jE8gNV\n/ZKTmrPh8Ezfr3d1P7cfX6W1RmwYi0naGXeoFugkSNZ9pu/X+4xeuu4zu1Rl9Uph5HF+wibRDAb1\nYqGvefGkCRJ2nLgzgtC1ufdIiVQjwA5CvJQz0JS6l3Ymw91HbnL5uedxegym7zj82Ze9DICPP1ni\nBwaOXOBnf++xYzWYyeRwLwogkxvtRfm+snirjefthCvnFhymJrCuOX/JJZkSNjdColDJ5mxm5x0c\nZ/T3n85YXL2RZG3Fp92KcF1h5oLb9RZrlXBk15RKOWB6Np73Qmfsrb6x3T3HNkwO0VG/jQ8x+YuP\n6xe/4R0nPQ3DbiLl6mc2hnpnXsJm6ZHSkQ5/4U6FdH2wT6MK3H10aqT8mtMOuPhCuW/eEeClnb6e\nlmOjSqrhk2iFBK5FI5cYUL05KhzP5yvf/7tcffazRJZFZFk888qv5bMvefFYxw/r4nEQNhJF7qXm\nSIVtbjTu4eigp7u55rO6KxnGtuHGY6mhBkJVeeGzbbz2rl6XAleuJ05lKcXGms/q/eH1q9OzNnPz\nJlFnUnzln/+HPzmoo2X8dsOxYUU6MgFlWAbnpBnVf1IlHn+UoQySDqtXCkwv1XA64gvNrMv6xf2v\nnw4TVpi2hOXrxSNX3gEIEi4ffs03kmi1SDab1AoF1B5/3I8/WeIVT8Yh2ne8tb/LtT7zQT70dz7N\nZ3PXqDoZ5lvrXGssYfW4TAr83tzLeC4XpydYKH+gyjfe+z1mvX4hgqlZFzdpsbEeEPpKNm/FOq4j\nvCivrUMTa1Rhc+Pw65pHQSZnI0MyY0V4YH2m4fgwhtJwbES2EFmCPUTUwEsf4FexI3mXrvtEVtxn\ncS9j08q4uF570Fjr6GL77rFZl3uPluJCe0sOvHZaXGsMCiuEyuy9Gss3DuCdHhAvlcJLHXxtddtg\n9uK2voybX/C5qB/h+TZJ8bmQqPIDVz/If/1AvM+zuWs8n7tKaMXf9/ary+8ufDWvu/3bA99NLm+P\n3ckjDEdnh4aDgYRTQSo1uP4YG0lrzyQhw/FivgnD8SHCxoUMUc/TcLvt1ebcPkUNVJlbrDK3WCW/\n2aK43uLi81tkyq2Rh1Rm0kSW9C0JRRInE41l+ESIHOtQCUa9baS6pyWu0zwOqcBtHC9karnG/K0y\npZX6SG97P8zeq9JqCJ4fG7a2utwJpvmRudfyFX/29/nCrw/4dOFRAmvwpahtu6wnDhd63yszNZs/\nvY+6hUsuF68kyOYssjmLhcsul64mjETdKcJ4lIZjpVFMETk2xfUGjhfRTjuUZ9N7JqEMI1P1SNX9\nAZm3meU6zfxwvdPQtVm6UaS03iRV9wkdi3Inu/Q8sS19t51QlWwG5LfaLF0vEiQPFu6z/QinR9Gn\nSwi1Pxb+3lNLvOOtP0z6tX8KQ95lBIjkcMbMtuMSj165OJFY7m2vzNT94PvK+qpPox7hOML0rHPo\n3pUisq8MXMPxYwzlKSXRCiitNEi0AkLXYms2TTP/8La66qWVdWllDxdmzAzxzAAQIdXwu4X5uwkT\n9oHWFidFvZAkv9kaEFbwUvaRNG8exu7MXwGIlKmVOqtXR2f/7oXKeOJKLy88x+3G1IBXaWnEbHvz\nQGP3Mj3rkkxZbK4HhKGSy9uUph3sCfSX9H3lhc+2iDrOt+/FykFz8w5TM8cv0mE4Pk5vPOIck2gF\nzN8qk2r42JGSaIfM3quR22w++OBzgu4KofZsQU9rxKrTrzFI2EQdSbZIYj3dtYv5Y5mCRIrbHgyz\nCnG96EGJHAsvYQ98J5HEqkvbfEXxOebaG7hRPJYdhThRwF+9/3Rf0s9hyOZsrlxPcv2RFDNz7kSM\nJMDGqt81ktuowupKQBSdveoBww7GozyFlFYbA0owlkJptUmtlDoVnTROmnoxRaY6KB6uCK0jqsM8\nMKoU1psUN5pIBJEFtWKCyLbj8pBDtMba91SEHcX7XUSHnMPa5TwLt8pIpN2MXi/lUJlOA7FwgiMR\nf+Peh7iTWWAxPU86bPGi6gtkw9Fry6eF7c4duxHijNtU2vxdnlWMoTyFJFqDff4ARBU7UELX/EG2\nsi7VqRT5zc4DtnNLVq/kT92LRGG9SXF9R8fWjiBX9lhfyNIoTl7VZ09EqBWSA0lFUU9fTAkjEu2Q\n0Lb2tWYZJGzuPjpFpubh+PH6czvtDHwfFsr1xhLXG0sTuaTjwnFlqLaqKqbw/4xjDOUpJHCskVJj\n4YTCSGeBrQtZaqUUqYZPZAnN3OQl7w6NKsWN1sB6qqVQWmtO3lB2xAzSVY/IkrhkZpex25zP4gQR\nyYaPimCp0sgnqMykKaw1KK43u16nn7RZuVIYWWM6gCU0CmdjLX0307MOzUa/kDodrVdn18urqlKr\nRtRrIY4jFEs2bsKsdD2sGEN5CinPZpi9Vx184y8lj17BRZV0j0fgpQY9gt04Xkiq7qMCzXzi2JJS\nIPZiasdQqH9QRON1wWFMXGRBldnFGun6Tki6sNliYz5LvUcoXS1h5WoBxwtx/BA/EXdoSVe9Hc+3\nc3yiFTK3WD2YAtEDp9vpmBF1Omac8pfAbM7mwoIT95cEUEhnLS5d6U8c00i5c6tNq6VdDdeNtYBL\nVxOHzpA1nAzGUJ5CmvkEG/NZplYb3YdstZRi68LRNlB2vJD5Wx2ptiheJG2nHVauFkYay+Jqg8JG\nT5LR/Tqrl/O0RmSdnjdU4iiAEw4aS/+ApRijSNd80nVvoGRm+n49FpjveYGRSEk2fFwvxAqVhh33\nIR1V42n74UTbnbWaEXdvtbd/zVCF+YvuqRf5Lk27FEoOnqc4tgx4kgBbWwGtpvZ5nqqwdNfjsc9N\nmfrIh5DT/Vt5jqmXUtSLSaxQ4ySLYwgpzt6rYoc9MnMa19gV1ptUZgeNdKLpD324zi1Wufv49OkL\ng54EImxeyDCzXB+IEGzOjd/seRwy1VElM7H4+3ZI1PHCbtKNpfFcSo6F7pF1aoVKOKEcqW2PazuD\ndHvU+0s+qbRFMhUb9NXEFP+1cBPPcrlZv8uN+r2JZMY26iGVrVgJp1C0yeSsfRkvyxJSqdH7V7ei\nkYLurWZEOtP/wqGq1GsRQaCke67fcHowhvI0I0J0TEkCVhAncOwezVLIldtDDWWu3B7aXBggXfPO\n7FrVfmkUU6hlUVpr4PgRXsJm60IGiZS5OxWsSKnnE3FG8yFeLlTikplhZ+h9aZleqmH1vBBZCuJH\n+AmLCB2sGROZqPdbrw83JKpQ3gq4sJDgzwqP819mXkIoFioWL2Qvc7G5xquW/+BQxnL1vs/m+o4g\nQbUSkivYXLzsTszTG6WboDAwhudF3Hm+TRjRfWPI5S0uXjHKPKcJYygNQJxRO+ohO8oYjnxemb/v\nAZr5RFcByGkHzC5WSXg7SjaJVkCu0mb5evHAWbv1YrLbwqwfobldMhMpqeZgVrUAThDFL2Zh7Glu\nywtuXMggCvmNBtmyB53ayOrUwUqVwiFh6O62AFpWgj+aeYLQ2jHOgeWylJ7lhewlHqkP9HcfC8+L\n+owkxMa5VglpTtkTE00vTQ9J+gFsK27C3Mu9Ox7BruYhtWrE1kZgRAxOEcbHNwCxvFvoDv46RAK1\nwvD1xkYhMby4X+PyDcMgbivg4vPlPiMJsVfntkOyFW/ksQ+inXGpTKdjEQOJ6zUjC1au5Hc81T3s\nmiIs3SxRmUnTStk08i73rxWoF5NcuF2muNYk4YUk2iGl1QZzd6vDFcgfQCZrD33JEoFcwWYxfQFr\ndydjYmP5XPbqvsfbpl4dnjylCrXq4bVut8nlLQolG5H4miwLLBsuX0v2eYm+rwMtwbbns7U5ufkY\nDo/xKA1dVi/lWbhdAd1ZuwoSNpWZ4UlErYxLI5/oK/xXgY357LFmvu4bVYprzVhKLlK8lM3GfBYv\nPRnjnmgGTN+vk2gFRJZQKyXZmsuACFMrDbZr/ndjaRyyrhcPHrIuz2WolZKdjipDSmZEaGVdUnW/\nbw6RQL0QZyyXZzOUe0Lt6ZpHoqfjyfZc456awZ73bad/5c/x1Pc4gIPrxqUWG2v9mqyptEUub7Gp\nIcMsqWhEIjq4epC1x6+kNcH1dBFh4VKC6ZmIRj3CdoRszhoYQ/dQ8zmDbYIfaoyhNHTxUw6Lj5bI\nltvYfoSXdmjkE6PDayKsX8xRKwWkax5qCfVC8lj6KgK47QDHi/CSNuE+xpxervcV3CdbIfO3Kyzd\nKBLsU5x9N44XMn+73CMuoOQ3W9hBxPqlPMmWP9KpUyCcwAtG6NrUSqPvx/pCjvnbZewwQqL45cZP\n2LExH0Ky4Q9NEhKFZGO0ofzZH1zmi55/lqde/GvsftTMXnBJZyzKmyFRpOSLNoWijYhwuXF/6D2y\nNeJzq8+PvK4HkSvY3F8aNLQiUNjjfh2URNIikRz9fboJwbYZCL2KYATSTxnGUBr6iGyL6nR6/ANE\naGdc2scoGydhxIW7VRKtIBbjVmjkEqxfyj1wzcwKInJD1vFEobjeZP3S4TRXC+vNgXNbCtmqx2YQ\nEdoWVjQiBChQmxrhTaqSrvlkO23E6sUUzZx7sDVC1+LeIyXSNR/HC/FTdiz7N+JcgRtr0+42lioQ\njitEMIRszh7anNgm4huWfp/3XfwalFhtPcLiSzb+jAvtjQOPZ9vC5WsJFm973UvdLktJnIAYgIhw\n8UqCu7e8bl2mWOC6cVcSw+nBfBuGh46Z5TqJZhAvsHce3pmahz+ijKUXxw9REWRXbEuAxBCx8P0y\nSn4wEsH1QirTKaZWGgPdQwDWF7Ij243NLNXIVHdqJNN1n0Y+cXDDLjJ2e7FGIcHUar0vGhon+gw/\nx7Yn+fQrP8HTB5sd8+11Xv/Cv+duZh5fHC63VkiH7QOebYdszuaxz01Rr0UdwQCh3VQq5YBMxh5a\nF3mUZLI2Nx9PUd4MCHwlnbXIF+yJhoINh8cYyvNAj9qOlxquv/nQECmZmje0jCW/NbyMpZfAtQeM\nJHRaXU2gBMJLOSPKbBQ/YdNOO9iBdkUaRKGZdVm7lOsTBOgl0Qz6jGR8vrgnZ7UVxOpJR0hkW9y/\nWmD2Xq2rJhS6FquX833rnzvrkb/O0+93uvWBXjsimbLIZPdXr2gTHYkerGXF/R9bzYgXnm2jnQxf\n1Gd6zmF2bvzoyBd+fUDmrT/M33tqiTe8qMVLZ2/S+KGf4WPvH/87cV1h9oJJfjvNGEN5xrH9uLjc\nCns6OiQdVq4Vjl8QQJVkM17PjHVIk/tWe5HuU20Qa4xWR5FjDRUFV4HyzD5CziOozKQHSjQigUY+\n0dVLLc9lqMykcfyQ0LEemPiUqg92SYHYyKbq/pEbSgAv7XLvkRKOHxvKwLX2fNkKAuX2822CIJZx\n2w4pXruZnFjbq8Ogqty91Wa3pPLGakAmY41dKpL+my/lo2vP8/EnF/gBAJo88U2v5x1vvbhvg2k4\nvZhv8YwTewE7xeWikGgHFNcabF2YrDLMnqgye69GuhY/9JXOmuDF3L6ECdS28BM2Ca//CafEntk4\nbCxkCR1rIOv1sIk8EBuQailFfqvVNW61YpLN+f57rZaMDLPuRm3prsX2fS6Hb421L0RGJmrtTtxZ\nWfLwezptaBS3olpZ8rl4ZTLyhlGkbKwFlLfi34VC0WJm1h1LM7bZiBj2XqUKWxvhoWoqP/5kiVc8\naQzmWeJEvz0ReRXwDsAGflFV37Jru3S2fwPQAL5dVT967BN9SJEwIjmkuNxSyFbax2oo0zWfdG0n\nfCgAGq+97bfrx/rFLPO3K92enZHE62WbI7I2BxChPJehPO7++2D3WqISr59uzWXQA3pS9XyS0kpj\n6LbGmOuMR8Ww9UhVpVoZvt5brYRcnMC4qsqdF9q0WzuaqpvrIfVaxPVHkg8M8UbRyLac+27C/NLZ\nmzzx6iU+/mSp7/Ntg4n1d3nL+5fZ+HcbfOh3LFJRmxeXP8Pl5sq+xjGcHCdmKEXEBn4e+DrgLvCM\niDypqp/q2e3rgcc7/70c+D86/zcckpFqO0dEtjLYaiqeiJBq+DT3IaLupV2WbpbIbbZIeCGtlENt\nKjV+K6gjwvHCgbVEIdZJzW21qR4wtBs58Xrg3L1q3+erl/L7vmYJIwrrTbLVuJynWko+lM3AG/WI\ndntQeNzz4nXRB3XpSGesobWKIpAvju9NPv2dnwA+wU/3rFXuNpgSKT/3A0lsfx4rDaAsphf4ko0/\n44nyX449luHkOMkny8uAZ1X1OVX1gPcAr9m1z2uAX9aYjwAlEZnEC+m5QG0LL2UPvDVHxF7Ksc6l\no0M6ZMuBlDuDhM3WfJaVqwUqc5kTN5IQZ7wOS3m1FFLNgxfKA7RyCe48Ns3q5Tyrl/PceWx63x1a\nJFIu3ipT2Gzh+rG279RKg5ml2oHm1PUmv/MT/eNIXGA/jFRaWF70uPNCm401f085u71oNSOGiPeg\nETQbD85etm3hwkWn7/1ArHh+hX0Yym0+9n6Hp178Nn76vb/Mh96S5olXb3W35bZa2H7U8wIlBJbD\nnyw8QdsySTwPAycZer0M3On5+S6D3uKwfS4DA6lwIvJG4I0AycLcRCf6MLN2McfCrQrSo7YTuhZb\nc4dPXNkP9WKyT8FnB4lr+M4AgTtcmk0BfxItqiyhlT14qDVTae96YO9kz5a9cCyhiCdevcUbXtR6\nYPnH/CWXW8+1iaLYeG3LubWa2jVkzUbE5kbIjUeS2PsU/3cTglgMGEsRxm6QXJpySaVtyhsBYQi5\nQlyacRgx8o+934H3v42/Bbz93S/hT28+xlu+Pz00muIkbPJfVcT7/bUHntdr763yYzhazswKs6q+\nC3gXQP7i40YAqkOQ7KjtVDwcP8RLPUBtZzeqOH5EaMvI8oVxaGVcqqUk+a3+WrjVy/ljaSE2Fp1r\nhQdndQ7DS9kECRt3V3lILCSQGnnccZEaobADcTu1SSoqua7FI4+nqFZC2q2IRFJYXR4UJA8DZWPd\nZ25+fy8AubyNJT67fUcRKOxD1SaVskhdOpp13u2w7Cu+8VX80acK7A43RBHk7DZ7SSioKivLPuVt\n7ddYf4GrN5Kk0icfRTkvnKShXAR6FY6vdD7b7z6GB6C2daAHdXarFWuTapw1W88n2FjIHaysRISt\n+Ry1Upp03SOyhUYucSjjO0kSTZ+5xRpW2KkTdCxWr+THzkwFQKRbb5hq+rEknWOxvpDrN0KqpOux\nTmrgWjTyycOX6kRKsqNU5KWG18kGjjWyQ8w4Cjs7dZI/w9NjZHFallAsxfu1WxFKMLBP3L0jYm7+\ngacbOPe1m0nu3fW6wuJuQrh0JTFW1utxsvAfn8G59AoCa+eeiSipSoX1T1b3bLZTq0aUN8OdF4xO\nxvjd220efZFpAn1cnKShfAZ4XERuEhu/1wLfumufJ4E3i8h7iMOyZVWdfAWyYYBU3Wf6fn+z4Th0\nWmPt8sFl3oKkTTV5vGHfB2GFEfN3Klg9YTzxI+ZvVVh8bGpfRixyLFauFbDCCIk0NkA9DzOJlPlb\nZVwv7Na1Tq00WL5WJDig4EG66jG7VAUEVFFLWLlSwEv3/3nXSkkKm62+8Pe2MW9lRj8Khgmb7xfL\nYnT96wEd2UTS4sajKYIgth7HraozLgvtdb587U95evaLEI1QscgFdb5h6fcf2JGuvBkMTTqKojiM\nnc6czms+a5yYoVTVQETeDHyAuDzk3ar6SRF5U2f7O4H3EZeGPEtcHvIdJzXf80ZhvTEQprM0LnWw\nguhUJM9MikzFG3iIxx0+9MANqCPbin+rd1Fca+B6O504REFDZXapyvKN0uABD8D2QmbvVTvn65w0\nVC7c6Tfythcyf7va9Ui28ZI2q5dznU4gIX7CijOQJ+ypuAmLZEpoNXdJBwpMzRxSiP6Ympsfhs+v\nPsfjtVusJqdJRh7TXnmstq0jZIHj0pYDthgJQ6VWCQlDJZO19wzh7uwL2ZxFMnV2/u73w56/oSJS\nACVVOHEAACAASURBVOZU9bO7Pn+Jqn5ixGFjo6rvIzaGvZ+9s+ffCnzfYccx7J/ttbrdqIAdni1D\n6fjh8O4YEdgj7sNB2a0IBB2d2VaIFUb7bk82TOAdYgWjXiM/t1jFCfp7YEZAtZhkbrHW5+FGtsXy\n9QKha/eFWw9bNH/5apI7t9r4niKx88vUtL2vThnVSsjqfR/fV1xXmJt3H5pOG66GXGqt7uuYYimW\n2htmEw+yRtlshLEIu8b3XyQgV7C5eNkdCOM26vG+EL9cra3EXVbmLw7ue9YZ+ZsvIt8CvB1YERGX\nuNj/mc7mXwJeevTTM5wU7bSD4w9qqqITyuA8RbQybqzSM0T5pr1HSPI0YO0yfn3bOqUXth/GhnD3\ndqC0FkcOej1cCSJuBFv8q7ddOVS4dTeOK9x4NEm7pQSBkkpb+/IGK+WA5UW/azR8T1m666GXXQrF\n0/09HZRCyaa8FfYZSxFYuJzYd+arqrJ42+vzUuM14pBq3uq7hxrF+/YlXwGVrZBc3n5gnepZY69X\nkh8FvlhVv5A45PkrIvLNnW3n63XiHFKezaBWf+1jJLA1mznaLFVVkg2f3GaLVN07lg62rayLl3SI\nei4rktiATlpHtV5I9o0DHUH2lH2gZtetXGLgfN1tHUk/2cMptqPB9lkCRHeU9lP/aeLSayLSadBs\n7ztkunZ/cL1ONf78tBGGSnkrYKvTFeSgiAhXbyS4dCVBccpmZs7hxmPJA3nRreZo2b5uVm2HRmNE\nREnjddPzxl5/BfZ24oyq/hcReSXwOyJylZHL8oazQpCwWbpRpLjaINX0CR2L8kya5hEKFUikXLhd\nIdHe+UMMXYvla8WjDfWKcP9agfxmk1zZA4lDkrWpySvWlGczpBp+XELSCXWqJawdsF1WM+vSTjsk\nm0HX4EUS68tuZ9oGCYvIkq6Huc22gR2q0iRC47c+xml6J/ZHGJxRnx+GRj1kfTXA85RUSpi54JIa\nc31u2/PdZgWfuXmHqZmD1QuLCLmCTe6QIea97tIxvI8+1OxlKKsi8uj2+qSqLonIK4D3Al9wHJMz\nnCxBwmb9EBmu+6W42iDRDvol4LyImeUaq1cKRzu4JVRnMlRnJqj/2hsr2/7IEpavF+PkmWZA4No0\n8/1at5lKm+JaAyeI8JIOW3OZ0Y2xRVi5WiBbbpOttFERaqVOU+eefdYv5Zi7W+3Txw1di1bKIVfp\nD7GLRlyorfPpD4w2kqp67OtUjgPBEGfGmXDUtVYNuXdnJ+xY85V6rc3Vm0nSu9YFd9+HMNC+8PA2\nq/cDMjmbZHKyL3zbCT3jfBfptDVU31YEilP9RjidsYYaVhEolM5mmHsv9rri7wUsEfn8bf1VVa12\nhMxfeyyzM5wrciMSXdI1fzvzoH+jKlaocQeN0yJaQFyTOb1cJ9EO///23jxI2r2q8/ycZ8k9a1/f\nfbmLYjcXEdxABcSxQQM0bJ2eaZUYjUDDaaXDNhDH6OnZYgTaYYSI6Z6mXYJumWjRduT2KNgs4tJX\nAUEuKJflct+93tqrsnLPZznzx5NZVVn5ZFZWVWZt7+8T8cZbmflk5i9/+eTvPOf8zvkeVKA4nmJz\nOrMzfokUduJUdnIb1bbGzqmqz8y9LZaujNBIdzeW5bEU5bHutbK1bIKH18fIbkbyddWsS2Ukiahy\nOV2nthFSa9g4oYejAa9a+VTs6xQ2fVaXo3Ci7cDUtMPYRH+eUq0asrLsUa+GuG7kpR1kr2tqxmXp\nYbsREoHJAfZyVI06nMSFeFcWPa5cT6KqrC57bK4HhCEkU8LsvEs6Y1MqBrFq66pQLAQkZwZjKMMg\nEiLYKkQ1lumMxewFt6chFhEuXE7w4G5je0wikMlaHbJ9lhXVpC7caz82m7fI5c9PIl+/dDWUqvos\ngIj8rYj8e+CdQKr5/8uAf38sIzQ8MvQSam+FKVvsFkMAKI4lo24oJ5yN59QDZu9utSXH5Ddq2H7I\n2n7hVVXGVqqxZTnjyxWWro4eaWx+wqbQ7BgTZbOOU3nrO/jMMy63sxdZTY4z6pW4WbqHq52u21bB\nZ2lhx4gEPiwvRsftZyxr1ZC7t+o7zw2UhXsNZuddRsf781BGxx0UZXXZJ/DZMdR9Pr8fVLuHcmvV\naN9uccGjWNgRAajXlHu3G1y9kYzu63IeH7QrSS/u3a1Tr+6IwlcrIXdfqHP98VTPvd9szubGEym2\nNgOCICSbs0ln4htq5/I2Nx5PsVXwCQLteex5p58z7FuAdwDPAHng/cArhjkow6NJJeeS3RMGVKCe\nctpCk+lio0MMIb9ZR4CN2dzQxmcFIeNLZTLF6Cq7kk+wMZNt2z8dWa92GPyWnuqmH/ZUwImaa8cv\npm59f6HvbrTEy6u/u6tD3R+wnc1qo9ws3+dm+X7P11ld7pJMs+zvayhXlrp4aUseI2P966uOjbuM\njbtDC/22NGnjvgbbEXxf24xkC1VYW/WZnolfUkUgPzIYg16rhm1GcvcYCuv+vh624wgTU/2NxXGF\nianzocV8FPqZLQ+oAmkij/KWapxuv8FwNDZmsqQqPlYQbgu4qwhr8+3Gb3Q1Xgwht1lnYzo7nDCs\nKnO3CzjeTjlGdqtBsuqzcGNs25NN1Dr7f0L0OZxG0NNQhj2k13z34OGuzl6RR1uodzdi3k0Q7L9n\n2fLG9hKG0fMPus84LK9GRBifsNlYDzpCvBNTdlsN6F4atRA3YTE57bC2snNREe3rRd7YIGg0wtgx\nqEKtZpbmYdDP6flp4IPAy4Ep4P8WkR9S1R8e6sgMjxyhY7FwY4zMVj3SQU3YlEaTHXqwjt99MbAD\nJRiCoUyXPOygvWZRANsPSZca29nAjZRDoh5Ts6iKt5/ouAhbE2lG1tvDr6FE2bL9EtdMeRAkEkIj\nxljazv6Gy3FlW5O14/mnbMtratYlDKGwubPfODEVhXiji4L457VUayanXbJ5m61NHzTqb5nODK7u\nMJHs3kvTCKUPh34M5U+q6l83/34IvFFEfmyIYzI8wqjVTEzpcUwj5ZAqex3GSEUIhiRn5tb92HpE\nUUjUA6rN7cetyTTZPWo5oUAln+yrxKUwFengtkK4oS1szGSo5jsTf1oGcTfV3/0sn3u1M1AD2WJq\n1o0K/Pd4WlN9JNNMTbs8fND53LEJGzlFiVgQGf3ZCwmmZiNhBNeV7eJ+x4GRUXs7iWbnOTAxvbOc\nplIWqbnhdCVJpSxSaatDsUcs+t7vNRyMfWd1l5HcfZ9J5DnPNOXPtssNRlPUs6dnn2JjOsNcpQC6\nU+UXClGPzSGF5PyEjVqdxfsqtHmKfsJm6eoo40tlklWf0BKK46ltA9gLCQKufekrXP3KV6ilUjz/\n1ItZnZ/r+Ey9Pcb4n3QYRpqd9XpIMhUV/O+n7FK2U3wtd4WG5XKpssjsyBrzlxKRhFxDcVxhasbZ\n7hDSi/yojR84baIBo+M207ODOa8WUtN8OX8d37K5WbrHtfID4gsc+se2BTsmHD57wcVxhc1mH8tU\nWpidTwy89KMXl65G38PWZpR5m8lZzM65Z0L39iwihxXWPc3k5x/Xb3rTu096GGcTVaYfFEmVo96F\nSmQMtibSFKYHWGN4RBI1n7HlqO7SdywKU8MVQ0CVi1/bxG5KxiWrZZKVEsWxcW5//dyR90UlCPje\n3/ldJpaWcT2PUITQtvnMd30HX/qmSC1y20D+xMFkln1PufNCjaDVRNkC24ar11NdO27czlzgo7Pf\nBkAgNo4GXCvf5zXLnzySBIGq4vvR+w+q+fCnx7+Bz499Hb5YIBZO6HGhusw/WPyLUySXYDhpXvG3\nf/gZVX3ZYZ5r/HRDG6mKt20kodlFQ6NQYGk0STDA5r5HoZFyWL7SXYQgWfGanTpCGimbzakM3lHk\n6CQSCph6sMk3/elHmVhZILQtJAyZXnwxn37Nq4/kzV770le2jSREe5qW7/Ptf/4Jfu1tW4R//PlD\nh1SXHjbaCvU1BD+E5cUGFy53Xlx4YvOx2W8l2NU/0ReH29mL3Mlc4Fpl4RCjiBAR3AEGJ0p2mmfH\nvp5gV68u33JZSM9wLzPHlcri4N7M8MhiDKWhjXTJi69nVJi9t4XdLHEoTKUpjx68GfRxkC42drWe\nArsUkioXehft90HgWtz84qcYX13ADgPsMCrZePzZL1AcG+dL3/SNh37ta1/+8raR3E3oK3/6E184\ndGmBqlIqxic/dbv/YXo69hzwLZev5K8dyVAOmvuZOYSQvT3NfMvlduaiMZSGgWBSpAxthF3OCAFc\nLyrbcL2QicUyufXqsY6tL1QZ31NjKewU7R8Fy/e5/tyXcIL2mkbX93nRX3/m0K/7rl9Y5DVPFmIf\nE5pNj4+RyEjGb8l0q/M8KRJhZ1IXRDJ8ibDzwuOsEYaK7+mhe08aBoPxKA1tlEdTjKzXeqrkQNPw\nrFYPLRz+rl9Y5KVT1zvu9ysehS+vkZ7LkpmPV7J5yzMPefbp+CbHot3LRxK1o3U9cDyvq6FI1GqH\nes2n3rDJS6euc3d0g6/F1Ma1JMYOi4iQH7EobnXOSTeR7fnacux36oQeT5ZuHXosw+By5WGsTbc0\n5Mni6RrrQQhDZelhpAAE0cXSzJz7SOqsngbMrBva8BM263NZJhbL2ymlEnbpIaGK7StBl4SQOHYa\nAX+AZ/a0cFpb9Vhb9reLqTNZiwuXElh7Mg9/5XU+mXf+Im955mHMkJTCrxHJZOyhV7F/PzRSKSr5\nPPlCu/cXAouXLx3qNd/0RA399Ee4/2yCqRmP1ebnh8hWXbqaPHJx/cx8glqtju/rdjKP4wgzc/Fh\naEdDvmfxv/Cf514JKCEWgvJ48Q6XDxHKrFVD1lY86nUllYoK8pN9duLYi6riNRTLFhxHcDXg9Yt/\nxofmvqNpL4VQhFeufoZxr3io9zgNLD7wKBV3SlCCIJLOc1whk90TZvaVWjXEcYRkSh5JiblhYwyl\noVkO4mGFIbW0S3k0RSWXIFXxUYma+yZr8RJqQQ81mYNQ3ApYa0qktRaHSjnk4YMGF6+0J5x87kMO\nfOj/4FdeF+8h/r+5l/CJzSdp6M7pnXBDXvOPfH7r07FP6Q8R/vJ7X8trfv+DWEGApUpgWQSuw2df\n9Z19v8zOxcI72hJ0JqZcRsccKpUQy4ouFAax6DmOcP2xJKViSKMekkxaZPO9X/tydYl/fOc/8UL2\nEp7lcqm6yGQjPjzci0o54P6dnfpJrxFQKgZcvpY8sFJNqRiw+GCn8XA6YzF/KcFcbZUfv/1BFtIz\nBGIxX1sheYbDroGvbUayhSqsrfjbhjISZ/fZWNu5uHQTwuWrya7ZzINCValWQryGkmzWdZ5njKF8\nxHFrPrP3tqKQYvOHWRxLsbmryH0TmH5Q7FCLKY6nBiYXt74arwVaLoUEvmLH1Id1ayp8lb/j8UmX\nL43cIGo9Lbx48Tke+5++yJ/85ouRl39P13F8dvUWP/+rc10ff3jtGn/0o/8t3/CpTzG6tsHyxQt8\n8ZtfRnlk/zZgOwbyPds6q3uxHTlUU95uhKGyvupT2AhQVXIjNmPj/RngVNjgRcUXjvT+e7t9QPS9\nLi82uHqj/2SwWi1sa30F0YXU/Tt1rt1MYRNyuXo+End8X2M7kEC7jGCpGLKx1n5x2agrD+7VDzS3\nByXwlXu3620qTam0xaWriYGV/Jw2jKF8lFFl5n4xEuPedXd+s0Y9424bylouwdpclvGVCravO3WV\nfRTR90tcn8EWQRBvKLthobxy7W/4lvUvUHFSZP0qjkYecVSD2FmH+G2/+WL+5vpj/PyvziGhkt2q\nkyx7+K5FaTxF4O4Yr42Zaf7i+7+v7/H0YyCHxYO7DaqVHQWXwkZApRRy7bHk0Bc1Ve0qW1erHiw5\nZXOtU5AdIsNQr4WHDuWeRtyEdO1AstsLX+8yJ/Wa4jUi3dlhsLjQoL7ne61VQ1aXPWaGpEZ00hhD\n+QiTqAVYe/RLoSUwXmuTTauMpqL+haFGnTwGvA+SyVpsbXaGd0WaC8chcNVn1Cv1PKZlIF/d9CIl\nCJm/XcD2w23BhZGNGsuXRg6sTrRbIOAZ4PnsdT515cWUnAw5v8I3r32ex8r3DvXZ+qFaDduMZAvf\nV4pbQV+KOkdBRLAstkOlu7EP6DTHacxG7xEJKiRPZ6XSobAs6RBWh2hveXKXTF4YdLGmAkEIw9DS\n6lZupApbmwEz3YMxZxpjKB9hpNWNNeay1IrrnSeCDmhPci9T0w6lraBtURWJMv2GkZyw10C2GF2r\nbhtJ2BFcmHpY4sHNsb4uEOIk5p7PXuZPZ74Zv1nEX3RzfGLmm2GZoRnLepeOHapR/8LR+MThgTI2\n4WyHB1uIwPjkwZaebK5T2xSiz5LssT9WrYSsr0WSe5mMxcSUO/T9u0EwOe3iJoS1FZ/AV9IZi6lZ\nl8Qumbxc3mKj0bmXKUAy2d9nPOj89KpSGWC7zVPHiRhKEZkAfge4BtwGfkRVN/Yccxn4d8As0YX9\ne1XV6NINkHrKIS7GEwqUR4YTQnn26TFe9XQVrJ/jXX+y43G5CYtrjyVZW/GpVqIMvslppyPDb9hk\nio2OFl4Q9aJ0vBC/hzJRLw3WT02+eNtItggsh09NvnhohtJNSOx1kEjUCeQ4mJpxCAJlazPYHsvo\nuN13P8QWY+MOG+tRw+YWLVH1bvqmWwWfxQc7e6T1WkChEHDtRnJoYclBMjLqMDLafZ4mJl22CgGB\nv/Mdi0RatP1cXB5mfixLSKUlNnSey50O1a5hcFIe5duAj6nq20Xkbc3bv7jnGB/4Z6r6WRHJA58R\nkY+o6hePe7DnFktYncsx9bCENPMHQoFG0qF0DKo7P/+rc7zrF+DbfjPaO3Rdi7kLgzXQARZ/O/oY\nX8lfB5SvK97iJ341vb0fuRftsW/XeszyQ8aXy2RKHgqUR5Ns7qODW3SyB7p/EGSyFrYthHsu9aP+\niMfz0xcR5i4kmJ6NyjrcRLzQ+H7YjnDtZoq1FY9SMcS2I690ZDR+cVZVlmMSicIgajQ9f+ng51mr\n6P+0lF+05mRzw6dSii4uxyedvjJQDzI/9VrI8qJHtRLNe37Ept7Mgm8FpSwbpruUG50HTspQvhF4\nVfPv9wGfYI+hVNWHRG29UNWiiDwHXASMoRwg1ZEkD1MOuc0atq9Ucy6VfGJoXTiOEwX+8MJ3sZyc\n2NYtfSY7zsfe47B8eSS2OLQ4lmR8ub0xtAJe0iZwLCTU7T3M1tNzmzWeGK/wkhee5y9/Ml6wPOdX\nKLmdRjHnH00tqBciwuXrSRbvN6g0w7CJhDB/MXHsXSZsW7DT/b2n70eTv3eMjhN16Zid7+M1PI3d\nG4WoZOUgbBV8VpZ8fE+xbJicchifdA5tMMNQCQLFcY5e82jbwuSUy+TUwZ7X7/w0GiF3b9W3j/V9\n2NwIyI/YJJJRj9FUWhgdczrqnc8TJ2UoZ5uGEGCRKLzaFRG5Bnwj8Mkex7wZeDNAcmR6IIN8VPAT\nNpszw/NsehF5dXO8608eO1RnjF48SM+ynhkn2FVPiQ/JwCdZ9alnOq+AS2MpklWfTLGxfV/gWKxc\njFSCMlv1jgQoS2H1+YA/+JkHdMtlePn6F/jz6Ze1hV+d0Ofl6184ykfcF9eNjGUQRJlJB8kePm4a\n9ZCF+43tTNlEUpi/dLj2Vb0W7YPMQVS7ueN5tTwu1Wgf8SBoU21nq6m2IxZMzzqMjQ/eE/O9Zi/N\nLh58v/Ozvup3GFTVqO75xhOpR6at19AMpYh8FGLXjV/efUNVVaS7YJqI5ID/CPxTVd3qdpyqvhd4\nL0Rttg41aMOJMQyD6f7X30D9zztPcVG6GkpEWJ/L4blV0uUGvmuzOZ3eLg9J1PzYPUwQ1pJjzNXX\nYsfyROkOEO1Vlp0MWb/Cy9c+v33/QVBVatXIK0mnrb4W/sOEO4+TMFTu3qqzW0a3Xovuu/lE6sCl\nLLYtZHMW5VLYkUg0cYBEotWl+DrQ9VWfiamDeZWLTUm61utpAMsPfRwn6g86CMJQefigQbkYbu8J\nj086TM20j7Xf+al1SQgTiS5sHOf87kvuZmiGUlVf2+0xEVkSkXlVfSgi88Byl+NcIiP5flX9/SEN\n1XCKaBnMp/7N39tRr+kiLLAfYzkfJwF+o/1+le6KQlYQMre7PKQWkCk1WL40wq/8izVWP7DG73x4\nqiMxR9B9S1GeKN3hidKdpgTC4Wg0Qu7fbuA3a18jz8Y5sHfTiw03z1JqikxQ41Jl8cgNkPuhuBXE\nZk1qCMVCwOj4wc+BuYsJFu5FdaQtozEx5ZDvsq8ZR8OL/+yhRmUv/Za5hIG2GckWkdqONzBDufTQ\no1wM20QINtZ8XBfGJtrPkX7mJ5m0tvcj9477LCREDYqTCr0+DbwJeHvz/w/uPUCiy5/fAJ5T1Xcd\n7/AMJ00rO/apH/hx3v3O9k0p/fRHenqcL2lqwf7cnyzQ+GNtW+ijRtRCZSS+yfNIl/KQr99co/rq\n38e1XOwr34evUZNgANGAjF/lYnWpr892WCOpqty/08BrLt6tT7W24pNKW2SPmHWowCemv5mv5S4j\nKKKKqwFvWPj4vhcBR8X3Ih3ajjEp25/3oNi2cPlaEq8R4vtKImkd2LNOJIR6LaZ8yjpYVxe/W80j\nh/98ewnD7sZ4fS3oMJT9zM/ElENxK+jwOrM5C/cMlNkMipMylG8HPiAiPwncAX4EQEQuAL+uqq8H\nXgH8GPAFEflc83n/g6r+0UkM2HAybJeTtPHK2BDtS3aJpT/7tiowTuKKz9SDInazo0hrv7Fbdmu3\n8pBiQdhysoz6ZX7gwcf40+mXs5SaRIg6WHzXyl8f2gD2S70WtVzaiypsrvtHNpRfyV/jhdzltobN\nnob88dwr+ZF7Hz7Sa+9HKm0hFh3GUoQj64i6CQv3kMnU07MuD+42OgzF3lDmvmNw40t1ANID0knt\nlpwDkbpVN3rNTzIVSdMtLXg0GtrMmLa7CuqfV07EUKrqGvDdMfcvAK9v/v0XHP7i23DOiQvRxtFI\nOSzcGMPxolXEd62eGb3dDKgi2zJ4Y16RNy58HF8sRMGmxwoV91rNDhiR6lD/i2QYatfFNjhYImcs\nfzfyWEdIGbHYcrIUnByj/vC8ykzWIpkQ6nVtqwlMJKO9tJMim7O5eCXBymJkKFr1vQcNBYsIU7MO\nK4ud4gtTM4MxOrYd/YuTg8wcUIC+7blZm+uP29vn32kpjzlOjDKP4UyzO0T7pidq/PzbqsAeyRmR\nnkIBuymOJZlcq0RVvK2na8hkY4Ns0N5z0omLFe5DpRzw8H5j27AlksKFywkSfRjMVNqKNZIikUrL\nUQkkfo4EJbCGm7TRKmVZW/GjrFCFkTGLyenhKDMdhGzOJvvY0T//+ISL41isrXj4npJKW0zPugPT\nqRURZi8kOsTjLQumZo9ujM+r4Hk/GENpOBc8+/QYP3/E13jqDZv8n986x79+09/ymcIVLI1UGFJB\nje9ZfObIY/Q9bWs5BVE49d6tOjeeSO1rECxLmJlzWN7llbS0cMcmjv5Tvlm6S8HNtYVeAdwwYPwQ\nLbYOimUJ07Mu0wNY1H1PWV32KJcCLFsYn7AZHT987eOgyI/YA+0Os5dc3ubytSTrq5EHnE5bTEw7\nfV2IGbpjDKXhkWd3d4+/+imHbwRuuM+xnJwk61eYr60MZA+gsBnfIiUMo3Zi/WQ+jk24JFM2m+s+\nvq/k8haj485Arvb/fuErvJC7TMHN4VsuVhhgobxm+S/P1B6I7yu3v1bbCUf7yvKiT72uzM6f3e4W\nQaCsLHoUt6IPlh+xmZ51O8qD0hmro4er4WgYQ2l4ZOnV/mrUKw0809NraGzoVJXYJJ1upDMW6czg\nF3xXA37w/ke5lbvE/fQsOb/Ck8Vb5IeoHjQMNtfji+QLGwGT03omi+RVo5rS3W3LCpsBlUrI9ceS\nJ+4pn3eMoTScOySMisjUjg837W1/dVw/g0zWYismfR/a+wyeJDYhj5Xu8ljp7kkP5dBUyp1dRiAK\nU9drIc4ZFO8ul8LYMhLfj9peDTOcazCG0nCOsL2AyYclUpUoxNlI2azN5/CS0Wneq7vHcZAfsVlb\n9ds8y1YiznlqPNwNVaVaCalVI2m1XN4aiieUSAjVGCdYtVM/9qxQr4XxdaZh9NhpM5S71aNSaevM\nznsLYygN5wNV5u5stYmVJ2oBFx8W+Kl3enzr0skZyBZiCVevJ1lb9SluBVgStZwaRCJOiyBQ1lc9\nilshlgXjEw4jY/bADFK0AIbUa0oiKaQz/Rm7MFTu3a5Tr0UXCWKBbcGV64NveTU+6cR67smUnNkL\nEjchXetMj6tlWr+USz4P73sE4U59X5yM3lnCGErDuSBd8rDCdrFyAexQKf/hGn/5rwYntn4ULHtw\nmZ17CUPlzgv1SOWmaSSWHkbtkeYuHn1PMwyUe3fqO0o1Agk3UnfZT292bdmjVtNtOSENwQ/h4QOP\nK9cHm3iSTFlcuJxgaWGnDCeTtZgfwBycFPm8zYrl4e8xlJYNuVPiTaoqDx9Eerbb9zX/31iL1KNO\nm+fbL8ZQGs4FjhcQV/fvN4SlDZfrRCGqwmaU6JHP22Rywwn9HQUNlWo13FakOcj4Cpt+m5GEKNy4\nVQiYnA6P7LmtLHnbHmH04lCvRx0xLlzubYQKzdrIvVQrIWGgA2/RlMvbZJ9INVtjHa4H5mlCLOHK\njRSLCw0qpehEz2Qt5i64sRnPrTB3sRBAs//ooBSAurG1GVDaile+UIWNdd8YSoPhJGmknMiF3LsY\nu3DjFY+T+7M/5Csf2Uny2NoMyOYizyPOGJVLAZsbARoqI6M2+dHBhS+7US4GLNyPFNwVsAQuXkn2\nnehTKcUnsSBQrR7dUHZLRIq0QLX3/PRI6h2W5LqI4J6ysORRcF3h8tVkXw2klxc9Chs731dhI2Bi\nyhmYClAcG+t+/PnXJOwho3faOZsBe4NhD/W0QyPpEO5aOxTwsPgXv1/jrz4uHZ5WuRRSLna6qL18\n4AAAIABJREFUoSuLDR7cbVDaCiiXQhYXvKZQwPB+6L6nPLjXIAyjukoNI1m6+3fqfS8wvYzCIJIp\njvLx8yN2rCBlMnX2vb1qNeTB3Tq3nq+xuNCg0Ti4YtNBEOnd8LlWDduMJOy0BmvUhze2/c6Ps+pN\ngjGUhvOCCMtXRiiOp/BtIbCF4liSxWujzN+9RxgjwdYKS+7Ga4RsrHcuMtVKSLk0vEWmmxiBAsVi\nbyHXIFCWFxtsbcYf59gykPKTbpqrmT4SeqZm3W1hcIiSUCwb5i+d3X1DiBo737tVp1QMadSVwkbA\nna/Vh2qQ9qO41d2zG+Y5PDJqd5VRdlwGmrR23JzdkRsMe1BL2JzJsjmTbbs/6NE0cG+rpEo5fiFR\njRbFQfUN3EsQxIsRoBD2sJOtBB7P044YpkjksXULLx+UmfkE1Uot8ng1en2xYPbC/uE82xau30xS\nLAbUqiGJhEV+1D52b1JVd8Z+xDlRVZYWGh3fWxhG+7knpY7TS6VpmLsH45NRS65Gvf1cHh23mJlN\nDHwf+jgxhtJw7lm4djX2fmmWZ+zGsru3Q+qiXzAQsjmbzfX4PcBMtvsbl7YCfL/TSAJcuJwYqGF3\nXeHG4ykKm35UHpISRsecvo2dWMLIqMPI6MCG1Deqyua6z9qKTxBEXTYmZxzGJw6/ZxcE3bu2VCon\n51HmR23WVuK9ymFmyFqWcPVGkuJWQKUU4rjC6LhzLvpWmtCr4WygSqLqMbZcZnSlgtPov69U6Dh8\n/Id+ECvn4OYT2G5kJCemHNKZ9oWjW3gxMqrDu67MZK1mTWL7e+ZH7Z61f5VKfCG6yMFk8frFsoXx\nSZe5iwkmJt0zs7+4ueGzsuRvG7YggJVFn8JGfMi7H3o1bj7JeUkkLGbmnabXHHn9IjB30R164b9I\ndDE0dzHB1Ix7LowkGI/ScBZQZWKxTHarjjTX/pH1KhszWUrjqb5eYunyJV70hR9i6lMe5d/8IGu3\n4n/EliVcuprkwd062nLUNAovJpLDu64UES5dTbBVCLb3GsfGHXIjvd8zkejiAQs452SRGgRxHpYq\nrK74h74AsiwhP2pT3JMNLAITk709tzBQKpWoDCiTsZABt7AaG3fJ5R3KpQABsvnjD3OfJ4yhNJx6\nkhWf7FYda/dipDC+XKaSTxA6/RkwO+tw/Ycfp/Lp/8TW/e6LRjpjcfPJFNWmt5bOWsfSi08kCmWO\njvX/sxwZc2KNgG11944fNVSVoIvjeFSve3beJQyUcincvmBptfTqRmHTZ2nBi44nSga+eCVBJjvY\nsKjjyIHOJUN3zCwaTj2Z4o4nuZd02aM8OvikCREZ+MI1DBwnUsZ5eL+B5ykKpFLChUuDSeA5D4gI\nriuxouJHrbO0LOHilSS+p3i+kkj0Lndp1EOWFrwoWtFSKQIe3G1w88nUsVyQ+b5SLAQEge4K+Ztz\npRfGUBqOFQmV3EaNTLFBaAvFiRS17D4lAj1+xGp+36TSFtcfj1RoRNhXTm5QhKFGiRvlEPeUJ25M\nzTosPvA6QqQzA5ISdFzpK9S9tRmfsAVRVvXI6HCX5Eo54P6dpqiFwvoqPYU3DBHGUBqODQmVudsF\nHC/YDqOmKh6FyTRbU5muzyuPJMlt1mK9ymp2eEoj/dJoNIULJCqqPqlOCce5JxkEe3RlJSpov3R1\nsCHEIFAKGz7lZhbl+IRD6hBSbCOjkSD36rKH14i6l0zPukMr9+lG0EU8QvcpAxoEqpGoRZzwRrEQ\nMGLCtF0xM2M4NrKbtTYjCWApjK1VKY2nCLvUXzTSDluTaUbWqm33r17Id+05eVysrXisrexsgK0s\nesxecM/93tD6qteuK9tMfHr4wOPG44MJ5QW+cvuFGoG/E6YsFgLmLrqH8rzyI/aJq8PkRmwKXbzK\nzJD3lGvVMLaMSDVqAm0MZXfMzBiOjXTZazOSLVSEZNWnmusegi1MZSiNJEmXPVSgmk90Nay7sfyQ\nXKGG7SsvfE54yasHVzJRq4WxiTRLCx7Z3Ml5lsdBsRCvKxv4iudpX62fGvWQrUJAGCq5vN2xV7a+\n5rUZSYj+XlrwyI8MX3t3GGSyFpms1dZcWiRKAEoMuN2YYXCciKEUkQngd4BrwG3gR1R1o8uxNvDX\nwANV/f7jGqNh8IS2bGf5taFK0EfqepCwKSX69wiSFY+Ze1tA5Ll++N/afPEjK7wlHMyCVNzsIRVW\nDIZad3nSSI8ptPowYJsbHssPd+Zvcz0gP2Izd9HdNoClYrwxVqKuJanU2TOUIsLFKwlKWyFbBT/K\ndB63yeaG7+lG3WjixtQpvLEfYagIDLys5bRyUpcwbwM+pqqPAx9r3u7GW4DnjmVUhqFSHE93JN8o\nEDhW1P1jkKgy/aCIpWx7sV5duHerwZ9tPjGYt+j99mcGz9PYjNBejI3H63omkvsntQS+thlJiOar\nlRjUoqvkmQ5XJWnYiET1lxevJLlwOXEsRrL1vhcuJ7YFCKL7IJfvv09krRZy+2s1vvpcja88V+PB\n3TqBf4ZO9kNyUqfbG4H3Nf9+H/ADcQeJyCXg+4BfP6ZxGYZII+2wPpslFAgtIRTwEhbLl0cGLkLp\n1gMk7PwBNxrwyeL1gbxHftTpOuzjThI5DPVayK3na9z6avPf8zXqtf6k18YmHHJ5a1v9xbIi4euL\n+/SlBCiXg9hOIqq0Nf2dmIif32RKjtwyLI4wiMomtgp+16Sbs04ma3PziRQzcy5TMw6XryW5cDnZ\nVxjb95V7t3Y17iby+u/drg+1s85p4KRiQ7Oq+rD59yIw2+W4XwPeCuT3e0EReTPwZoDkyPQgxmgY\nAuWxFJWRJImaT2gJXtIeilJzr7IRWwajw5lOW4xNtGu0isD0nDOQDNQw1G0PKzNg0YMwVO7errdl\nWjbqyt1bdW4+kdpXwDryTpLUayG1apSRmsn2l8TT85hdD+VGLMarNhvrwXYxv+NGikXlUtD3+/VD\nqRiwcK+xLQKAeszOu+cyfG7bcqhOHoWN+K2GhqfUqmGHHOR5YmhngYh8FJiLeeiXd99QVRXpTPwX\nke8HllX1MyLyqv3eT1XfC7wXID//+Pm+vDnjqCXUM8Mt6/ATNoFjIV7Y5rwkk8J3jH51YO8zM5dg\nZDSk1GyFNTJqH0nqrtEIqZRC6vWQzfWgTU90kGG6qNly5/2tEGi/BiKZsnpq0caRzVqxcWsR2rKF\nRYTpuQTjU9FCXCkHbK4HLC9628dfupYkdcD330vgKwvNsondc7L00COdtYaSZON5SrkYIFYUfTgL\n8nL1WpcON0CjoaS7V3ideYZmKFX1td0eE5ElEZlX1YciMg8sxxz2CuANIvJ6IAWMiMhvq+qPDmnI\nhrOMKm4jQEXw3WgTZuVintm7W0jz151wladeluZbl2/xeWL6UwIvZC/z7NiTVO0UlyqLfNPG35EL\nqh3H7iaVtg5V27eXlcUGG+tB6+MAUcumFi31lkEsqr6nsWLqqhx4v/KgWLZw8XKCB/cabfdHIvWd\n8+g4kdpNy3PfvVjfv13n5pOpI3mW3fp9tkLBk9ODNZTrqx6ryzslRUt4zF9yyY+cbu81lRFKxZj9\nd+XAF0tnjZP6Zp4G3gS8vfn/B/ceoKq/BPwSQNOj/AVjJA1xJCseUwtFrOa+UuBYrFzK46Uc7j82\nTqbUwA5C/slPF/jeb5yk8tZ4Q/CZsRfx7PjX41vRz+LLI9e5nbvED9/7MJmgNtTPUC4FHQ2j4yhu\nBYwNIByYSluIRYexFCsKKQ+bbN7m5pMpSsWAMIRczuq577jZJeynGvUQPYqnHXfB0CKM2ec+CvVa\nyOpy52d5eN8j8+Tp9ixHxxzWV/y21mIikTbyUb36085Jfbq3A98jIl8FXtu8jYhcEJE/OqExGc4g\nlh8yc28Lx9ftDFfHC5m9uwWhgiVURpIUx9NMX+7+Og1x+NwuIwmgYtEQh2dHnxz65+hWhL4bZXDq\nLZmsRSopHW29kkkZeuF7C9uORLvHJ5x9k3O6KtrQ7nUfhl6t1XL5wfoShR4lRaUunu1pwbaFqzdT\n5EdsLCvq6Tk+aXPxyv4JXGedE/EoVXUN+O6Y+xeA18fc/wngE0MfmOHMkS10enpCJJeXKTWojPQn\nmL6eGMXWkL1LVWjZLGRmYL39/koloLAeEKpuK74cJfzXT9agMLiOICLCpWtJNtZ8ChvRpx4dsxmf\nck5lIX9+xKZSiqmr1N6NrfshkbQYn3TYWPPbkrJGRm1S6cHORa+v+SwkjrpuVGLyqHG6g+IGwz7Y\nTU8y/rH+XY1sUCWIq6LXkLxXbrurJVvXWtjKxZDCRsClq4cXlh4ZdSgXG10Xy1ZR+CD3gixLmJx2\nmZw+eb3c/RgZtSms+9R2JZSIwPSMM5BwZaT7alHYDECjhtmDzKptkR+xKWzERw9yQ66nrNdCVpY8\natUQ2xEmp52hi7CfF8wsGU4fquQKdbKFOgClsRTlkURsGUk94xJu1mKN5d7M2vd9JcVLp+LfMu9X\nmK2tsZiaIrR2FixHQ57a/PL2bd/TDtk6VahWQkrF8NBaorm8RSZntXtNAskkJBI2o+P2kT2ns0QY\nKpvrPsWtAMuKyhkuXWsq2mwFWAKBDyvLPivLPvkRm5k590idU9IZe+glDumMxciozVahvaRoamYw\nJUXdqNdD7tyqb+/HBoGy+CDS652YOv0XSieNMZSG04UqM/eKJKs7urCJWol0KcHqxc5y2mrOxUva\nuPUdsfVQoq4ie9V+nn16jFc9XeWpH/hx3v3OeSpvfQef+9DOMf/V0n/h4zPfwv30HBaKrQGvXPkM\ns/W17WMq5e4ZkqWt4NCGUiTKBK2Uo1IT2xZGxh5N/c8wjOo5G/WW96hUKw3GJmxm5hLkRmxuPV/D\n93aes1UIqNVCrt3sr3j+pBARZi+4jIzblApRfejImDP0rNG1Za8jaUkVVld8xiacY+mDeZYxhtJw\nqkhV/DYjCVGCTrrUIFH1aaT3nLIiLF0ZJbdRJbfVQIHSWJLSWKrrezz79Bhv4SHvfucv8hJ2jGUy\n9Hjd4l9QtRI07AR5r4y1p+DPsmS7+H0v9hGdEREhmzu47mcYKhvrzb3GZthwcvr0LX6Br9TrUe/K\nXsk7xa1gl5GMUI30YMcnQ6rlsM1ItvA8pVwKT70qkoiQydhkjrFAv1rtvgHqe0oiebrOldOGMZSG\nU0Wy0ojtOykalYF0GEoiAYPiZIbiZH8Vz0+9YZN3f3unR9kiHTZIh42YZ3ZvhRTtIR7/z0lVeXC3\nQbWyE7LdWPMplwKu3jgd3pWqsrLksblLYSedsbh4ORGrANRNDB2gUgpZW4mxkkRlHo16CKfcUJ4E\nriv4cfWxenyNvs8yxlAaThWhbaFCh7FUgfCIP+h3/cIiL526TuWt7+GZn3I4zOlvWcKlq0nu3623\n9WKcmRt++CyOajVsM5IQGaJGQ4+0ZzpICht+h1hAtRKyuODFZlC6XbbMRKBQCPDi7SRicSRVpPPM\n5LTDg7vtyWIiUfThNNdunhaMoTQcnt3ZCAOiPJJkbKXS+YAIlVx/pR7DJp2xeOzJFJVySBhG5Qkn\ntdjUKvGyYhpCrXL4PdN+UI1CndVKgOtaXRfd9bXOLE/VqG4wDLTDqxwdd9r0c1uIBdVy90xmx5GB\nlc+cN7I5m9kLLiuL3nbd6chYlABl2B9jKA0HxvJDJhdLpEvRpX0t67I2lyVwj74oh47F8qURpheK\nkfScRn0sVy7m0VN05dvaTzxpHJd4hR0B5xCJQKqRELvvKal0dx3X7YSbRiSFJxKwsuRx+VqyQ84v\n7NGJIwzB2jONyaTF3EWXpQWvOSZwXGHuosv9291LaPIjFkEAjlnVYhkdcxgZtQn8aM5P2x72acac\nUoaDocrcnQLOLrHxVNlj7k6BBzfGYQA/vnrW5f5j4yRqUTumRrcOI6FiByGBYw3Uqz1L5PI2lngd\nQgmtgvmD4Hkhd281IhWcpjHK5qyoh+Ge+V1f9dsSblph1YX7Da4/1r43msnZbe2zWtg22F1WoJFR\nh3zeplZTLIvtZBPb6bLXBmysRaLpV24kSe4KwaoqW4WArc1oj3Rs3CGbH3yN5EFpNEI21nzqtagJ\n9fjk/gpFR0VEcIwTeWCMoTQciHTJw/bbO3IIYAVKttigPDqg8KhIbOIOAKqMLVfIb9a2j92YSlOa\nSO/7svrpjzRfIvKcatUoCzM3Yp/JK2zLEq5cT7Jwv0GjHhkQxxUuXEocOBy8cK/RYYTKpWgx31tr\nt7sOcDe+p/ie4iZ23ntqxqHc1HRtIQKzF3oLNIglpDPtj89dcDv22lq0jPXSgseV68nmfcr9O+3J\nTpVyg9Fxm9n53gozGiobGz5bTeWikTGb8QkHGcB5UquG3L29U9dYrUQyhleuJ8+9wPhZxBhKw4Fw\nG0FsVqql4DR8YPj7iGMrkZHcLiFRZXylQuhYXSXrnnrDZpTI884P8Nk/tKMGtE2PSASsxWhxPYvJ\nIImkxbWbqajrhyqOKwf2lnxf2xrytlCFzY3gYEXpe947kbC49liKjTWPSjkkkYj6eFqW4HmKe4BC\n+2zO5sqNJOurfqyXCjSNoiIizT3UzmSnwkbA+ETY9ftWVe7vySZeXfYpFUMuXzu8AlOLpYeNjnB5\nGEatvVpG3nB6MIbScCC8pB2blRoKeMljOJ1UyW90KvFYCqOrlQ5D+a5fWOQbbz3PX/7E53kGAIe1\nFW/bSDZfkiCIwobXbnavvzztRAbncAu49uiSEee9jY7ZHQpFAG5CYg2f6wozc5EHt7Hmcf9Oo61U\n5MLl/j3gVMriwqUEXy1W4wXRd71MudhdbL5S7m4oq5V4A1urhUfvVqJKrUtdY7UymKbihsFy9i6f\nDSdKNeviu3ZbGb4Stbaq5IcvlmyFGuvRAjh9artudenUUa8rvn86lamDQFlcaPDV56p89bkqiwuN\nrh01DoPjCk5c+Y1ESTJ7GZ90SGWsbedRJNpz3E8wu1wKWFmKDGwY7rTJWrgXX7fai9Exu3NrWmgT\nqO9aIyj0NMx7jWQLDY9uzESk65a6ZVbkU4n5WgwHQ4SlqyOUR5OEEnmS5ZEEi1dHjyWhJrSEoMsC\n1ziiRzuI0atqX51ADvqad1+oU9iI9vnCMAod3r1VH9h7iQjzl1xkV16USOQJxommW5Zw+WqCS1cT\nTM86zF10ufFEqi2JJo711fg2U9VKeOCG0VOzbtRXU9gedzIpzM7vjDfWmNLsxJLvPlbHiTdmIsRf\nUByQ0fHOcYnA2MTJZ1IbOjGhV8OBCW2Ltfkca/O5439zETZmMkwulrfDr0okSLAx058yz8ioFdsk\nOZHs4lX1ge8rSwsNSsXI28hkLWYvuAPRai0VQ7wYT3fQkm3pjM2Nx1Jsbvh4DSWTjWojuyU5iQiZ\nrE0mu/P+UVgxMnqptNXx+bt57CKRxN1B9itbiUy1aki9Hu19ptLt+7NuwmL+osvDBQ8hOlcsgYtX\nkz2Tt/IjNsuLXmctZ7NI/6hMz7r4ze+vFYLO5i2mzkAnl0cRYygNZ47KaIrQthhbreJ4AY2kw+Z0\npnuW7B4mp13K5XBXDWDkkcxfOlzoWDWqKfQaO6tqpRxy94U6N55IHTmbtl4LOxI/IAoD1muD1TZ1\nXGFq5nCLte8p927Xd4y6RgZn7qK7bbyyWYtGvTMJR+HQeqOptNVRu7mb/KhDImVRWPcRC8YnHBy3\n9wWMZQuXryWjTODm57GdSLh+EOISliVcvJLEa0TnYSLRW//WcLIYQ2k4k9RyCRZzvQ3b7kzX3ae6\nZQtXbyQpl3bKQ3p5TvtRLoWxnlIYRmUUY0fUgE0kJV5UwKKtDOOkWbjfoNFon4etQoDjwvRs9F1N\nTLlsFQKCXbZSBKZnhyfi3uof2mJjLWDuortvL8ZU2uL648ntCyA3cfBs4v1wExbuo9cH+cxhDKXh\n3BGX6boXESGXtwfijbU8072oNkW6j0gub2NZHsGel7ItTk2nDN+PQq5xrK8GuK7H2ISL4wrXbqZY\nX/Mol0IcR5iYcoamclSrhbHZuYsPPLK5/XVORcR01jCYZB7D+aLlRVZ/97PH9p7Jpse3FxEGUjxu\nWcLV68m2xs2ZrMWVG7332Y6TXuUlAMuL/rbX7TRLRa4/luLyteRQpQC3NuOThyDSmjUY+sEYSoPh\niGSyFglXOtJmbZuBiJKrKqVSQBAorgsTUzYXLydw99lnO04cV/Zt11Q+CcPUw34PODnZcI45Pb80\ng+GMIiJcvp5kdMzGsnYyI6/ePHoiD8DDBx4ri5EmqOdFe2x3btX39eKOExFh/uI+SUAn4PzmR+PL\nQwByp0DU3nA2MHuUBsMAsG1h7kKCuQuDfd16LaS0FXQoxHgNpbgVMDJ2en7CmazNhcuJruIBJ2GY\nUmmL0TGbwi6RiVbykHOAUhTDo82JeJQiMiEiHxGRrzb/H+9y3JiI/J6IfElEnhORbzvusRrOP6qK\n1wgHqnQzKKpdEmRaijbDQEOlXovP5N2P/IjN5IwTldzs+jd30d03NDsMRITZCwkuX0syMWkzOe1w\n7WaS8UlTr2jon5O6HH0b8DFVfbuIvK15+xdjjns38GFV/YcikgD6qyg3GPpkq+Cz/HCnmW02bzF/\nIdHRTPikaCnEdOynCUPxiDY3ojCvAmi0/zp/wE4kU9MuI6M25WJUTJ8bsQeiZnMU0hmLdMbUYRgO\nx0ntUb4ReF/z7/cBP7D3ABEZBb4T+A0AVW2o6uaxjdBw5njqDZu8+9vnqbz1HXzuQ/tfA1YrIYsP\nPIJgp0VTuRjy4P7BdUeHRTZnxep/CjB6xPrMvZRLAcsP/UiDtanDWi6HLBxiPhIJi/FJh7EJ58SN\npMFwVE7Ko5xV1YfNvxeB2ZhjrgMrwG+JyFPAZ4C3qGr5mMZoOCVIEJIr1HHrAY2kTXk0ido71mPH\nQL6HZ37Kod/Ten21U6JMFarlEM8LT0VWaStRaOHuTjG/bUcqQgeRe+uHWB3W5nz4npo9PcMjy9AM\npYh8FJiLeeiXd99QVRWJ7QfhAC8FflZVPyki7yYK0f7zLu/3ZuDNAMmR6aMM3XCKcBoBc3cKSKhY\nGomwj61VeXh1lCARJYe86Yka+umP9OVF7sZrxO/BiYDvgXtKtrFa/Ry9RkiokBiCQgzQ0bS5hUgk\nKGAMpeFRZWiGUlVf2+0xEVkSkXlVfSgi88ByzGH3gfuq+snm7d8jMpTd3u+9wHsB8vOPn76sDMOh\nmFgqYwW6XVlgKWigTCyXWbk0cqTXTmct6nG6o3p43dFhMmwt0HTWotE4O/NhMBwXJxVbehp4U/Pv\nNwEf3HuAqi4C90TkyeZd3w188XiGZzgVqJIqex3ldwKkS96RX35iyu3Y/xOJei0OQvj6rDE57WLt\nqeAQgemZ4emwGgxngZPao3w78AER+UngDvAjACJyAfh1VX1987ifBd7fzHh9AfjvTmKwhhOk1Rtp\nDzqAddt1has3k6wu+1TKAbYtTE45A2mjdBZxXeHazSRrKz6VUojjRjqsw9STDQJlfdWjuBViWVGf\nxrFxZyih5cNSb+rF1qohbkKYnHbaWosZzj8nYihVdY3IQ9x7/wLw+l23Pwe87BiHZjhNiFDOJ8hs\nNdpCH1Gz6ORA3iKRsLhwyPZa5xHXtZi7cDzzEYbKnRfq+J5uJxGtLPrUKnrolme7UdUjG9xaNWw2\nyI5ue55SrTS4cClBbgDyhIazwemR9TAYYlifzeLWA9xde2dewu67SbPh9FIsBG1GEqL90OJWwGQ9\nJJE8+M6QhsrKssfmRoCGkEoLs/OJnv0qe7GyFJ8ZvbTokc1bp8rzNQwPYygNpxq1LRavjZKs+riN\nAC9hU087dBXwNJwZyqUwXphcIkWiwxjKhw8alIo7r1urKndv17l2M0niEMlQ3VqH+Z4ShlGpjuH8\nc/KFYgbDfohQz7iUxlLUM64xkueEXg2LDyNS4Hlhm5FsoWFUI3oYusnuiRArBGE4n5iv2mAwnAhR\n0k7n/bYtbb03+6VR167XUPXa4XRxJyY7u4+IRElHJuz66GAMpcFgOBHchMXFKwlsZ0c8PZkSrlxL\nHMoIJZJW1x6TqUM20B4dd5iYcrY9yFYLtZm5U6JGYTgWzB6lwWA4MbI5m5tPpPAailhyJFk+1xVy\neZtSsb0tmVgwPnW4pU5EmJpxmZhy8DzFceSRrLF91DEepcFgOFFEhETSGoh27fxFl/FJe3v/MJ0W\nrlw7XCLPbixLSCYtYyQfUYxHaTAYzg1iCdOzCabj2iwYDIfEeJQGg8FgMPTAGEqDwWAwGHpgDKXB\nYDAYDD0whtJgMBgMhh4YQ2kwGAwGQw+MoTQYDAaDoQfGUBoMBoPB0ANjKA0Gg8Fg6IExlIYzzVNv\n2OSlU9dPehgGg+EcY5R5DGeSp96wybu/fZ7KW9/DMz9lTmODwTA8RLvJ7Z9hRGQFuHPS4xgQU8Dq\nSQ/ilGDmoh0zH+2Y+WjHzEc7T6pq/jBPPJeX4qo6fdJjGBQi8teq+rKTHsdpwMxFO2Y+2jHz0Y6Z\nj3ZE5K8P+1yzR2kwGAwGQw+MoTQYDAaDoQfGUJ5+3nvSAzhFmLlox8xHO2Y+2jHz0c6h5+NcJvMY\nDAaDwTAojEdpMBgMBkMPjKE0GAwGg6EHxlCeIkRkQkQ+IiJfbf4/3uW4MRH5PRH5kog8JyLfdtxj\nPQ76nY/msbaI/I2I/H/HOcbjpJ/5EJHLIvInIvJFEfk7EXnLSYx1mIjIPxCRL4vI8yLytpjHRUTe\n03z88yLy0pMY53HRx3z84+Y8fEFEnhGRp05inMfFfvOx67iXi4gvIv9wv9c0hvJ08TbgY6r6OPCx\n5u043g18WFW/DngKeO6Yxnfc9DsfAG/h/M5Di37mwwf+maq+CPhW4L8XkRcd4xiHiojYwP8FvA54\nEfDfxHy+1wGPN/+9GfjXxzrIY6TP+bgFfJeq/n3gf+UcJ/n0OR+t494B/Od+XtcYytOruPEtAAAE\nBElEQVTFG4H3Nf9+H/ADew8QkVHgO4HfAFDVhqpuHtsIj5d95wNARC4B3wf8+jGN66TYdz5U9aGq\nfrb5d5Ho4uHisY1w+Hwz8LyqvqCqDeA/EM3Lbt4I/DuN+CtgTETmj3ugx8S+86Gqz6jqRvPmXwGX\njnmMx0k/5wfAzwL/EVju50WNoTxdzKrqw+bfi8BszDHXgRXgt5qhxl8XkeyxjfB46Wc+AH4NeCsQ\nHsuoTo5+5wMAEbkGfCPwyeEO61i5CNzbdfs+nRcC/RxzXjjoZ/1J4ENDHdHJsu98iMhF4Ac5QKTh\nXErYnWZE5KPAXMxDv7z7hqqqiMTV7jjAS4GfVdVPisi7iUJw/3zggz0GjjofIvL9wLKqfkZEXjWc\nUR4fAzg/Wq+TI7pi/qequjXYURrOIiLyaiJD+cqTHssJ82vAL6pqKCJ9PcEYymNGVV/b7TERWRKR\neVV92AwVxYUF7gP3VbXlJfwevffuTjUDmI9XAG8QkdcDKWBERH5bVX90SEMeKgOYD0TEJTKS71fV\n3x/SUE+KB8DlXbcvNe876DHnhb4+q4i8mGhr4nWqunZMYzsJ+pmPlwH/oWkkp4DXi4ivqn/Q7UVN\n6PV08TTwpubfbwI+uPcAVV0E7onIk827vhv44vEM79jpZz5+SVUvqeo14B8BHz+rRrIP9p0PiX79\nvwE8p6rvOsaxHRefBh4XkesikiD6zp/ec8zTwI83s1+/FSjsClmfN/adDxG5Avw+8GOq+pUTGONx\nsu98qOp1Vb3WXDN+D/iZXkYSjKE8bbwd+B4R+Srw2uZtROSCiPzRruN+Fni/iHweeAnwvx/7SI+H\nfufjUaGf+XgF8GPAa0Tkc81/rz+Z4Q4eVfWBfwL8MVGi0gdU9e9E5KdF5Kebh/0R8ALwPPBvgZ85\nkcEeA33Ox/8ITAL/qnk+HLqLxmmnz/k4MEbCzmAwGAyGHhiP0mAwGAyGHhhDaTAYDAZDD4yhNBgM\nBoOhB8ZQGgwGg8HQA2MoDQaDwWDogTGUBsM5RkQ+LCKb57mrisEwbIyhNBjON/+SqK7SYDAcEmMo\nDYZzQLO33udFJCUi2WYvyr+nqh8Diic9PoPhLGO0Xg2Gc4CqflpEngb+NyAN/Laq/u0JD8tgOBcY\nQ2kwnB/+FyKtyxrwcyc8FoPh3GBCrwbD+WESyAF5ok4qBoNhABhDaTCcH/4NUV/S9wPvOOGxGAzn\nBhN6NRjOASLy44Cnqv+PiNjAMyLyGuB/Br4OyInIfeAnVfWPT3KsBsNZw3QPMRgMBoOhByb0ajAY\nDAZDD4yhNBgMBoOhB8ZQGgwGg8HQA2MoDQaDwWDogTGUBoPBYDD0wBhKg8FgMBh6YAylwWAwGAw9\n+P8BBRFqyC1znewAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.title(\"Model without regularization\")\n", + "axes = plt.gca()\n", + "axes.set_xlim([-0.75,0.40])\n", + "axes.set_ylim([-0.75,0.65])\n", + "plot_decision_boundary(lambda x: predict_dec(parameters, x.T), train_X, train_Y)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The non-regularized model is obviously overfitting the training set. It is fitting the noisy points! Lets now look at two techniques to reduce overfitting." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2 - L2 Regularization\n", + "\n", + "The standard way to avoid overfitting is called **L2 regularization**. It consists of appropriately modifying your cost function, from:\n", + "$$J = -\\frac{1}{m} \\sum\\limits_{i = 1}^{m} \\large{(}\\small y^{(i)}\\log\\left(a^{[L](i)}\\right) + (1-y^{(i)})\\log\\left(1- a^{[L](i)}\\right) \\large{)} \\tag{1}$$\n", + "To:\n", + "$$J_{regularized} = \\small \\underbrace{-\\frac{1}{m} \\sum\\limits_{i = 1}^{m} \\large{(}\\small y^{(i)}\\log\\left(a^{[L](i)}\\right) + (1-y^{(i)})\\log\\left(1- a^{[L](i)}\\right) \\large{)} }_\\text{cross-entropy cost} + \\underbrace{\\frac{1}{m} \\frac{\\lambda}{2} \\sum\\limits_l\\sum\\limits_k\\sum\\limits_j W_{k,j}^{[l]2} }_\\text{L2 regularization cost} \\tag{2}$$\n", + "\n", + "Let's modify your cost and observe the consequences.\n", + "\n", + "**Exercise**: Implement `compute_cost_with_regularization()` which computes the cost given by formula (2). To calculate $\\sum\\limits_k\\sum\\limits_j W_{k,j}^{[l]2}$ , use :\n", + "```python\n", + "np.sum(np.square(Wl))\n", + "```\n", + "Note that you have to do this for $W^{[1]}$, $W^{[2]}$ and $W^{[3]}$, then sum the three terms and multiply by $ \\frac{1}{m} \\frac{\\lambda}{2} $." + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: compute_cost_with_regularization\n", + "\n", + "def compute_cost_with_regularization(A3, Y, parameters, lambd):\n", + " \"\"\"\n", + " Implement the cost function with L2 regularization. See formula (2) above.\n", + " \n", + " Arguments:\n", + " A3 -- post-activation, output of forward propagation, of shape (output size, number of examples)\n", + " Y -- \"true\" labels vector, of shape (output size, number of examples)\n", + " parameters -- python dictionary containing parameters of the model\n", + " \n", + " Returns:\n", + " cost - value of the regularized loss function (formula (2))\n", + " \"\"\"\n", + " m = Y.shape[1]\n", + " W1 = parameters[\"W1\"]\n", + " W2 = parameters[\"W2\"]\n", + " W3 = parameters[\"W3\"]\n", + " \n", + " cross_entropy_cost = compute_cost(A3, Y) # This gives you the cross-entropy part of the cost\n", + " \n", + " ### START CODE HERE ### (approx. 1 line)\n", + " L2_regularization_cost = (lambd) * (np.sum(np.square(W1)) + np.sum(np.square(W2)) + \n", + " np.sum(np.square(W3)))/(2 * m)\n", + " ### END CODER HERE ###\n", + " \n", + " cost = cross_entropy_cost + L2_regularization_cost\n", + " \n", + " return cost" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "cost = 1.78648594516\n" + ] + } + ], + "source": [ + "A3, Y_assess, parameters = compute_cost_with_regularization_test_case()\n", + "\n", + "print(\"cost = \" + str(compute_cost_with_regularization(A3, Y_assess, parameters, lambd = 0.1)))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Expected Output**: \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "
\n", + " **cost**\n", + " \n", + " 1.78648594516\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Of course, because you changed the cost, you have to change backward propagation as well! All the gradients have to be computed with respect to this new cost. \n", + "\n", + "**Exercise**: Implement the changes needed in backward propagation to take into account regularization. The changes only concern dW1, dW2 and dW3. For each, you have to add the regularization term's gradient ($\\frac{d}{dW} ( \\frac{1}{2}\\frac{\\lambda}{m} W^2) = \\frac{\\lambda}{m} W$)." + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: backward_propagation_with_regularization\n", + "\n", + "def backward_propagation_with_regularization(X, Y, cache, lambd):\n", + " \"\"\"\n", + " Implements the backward propagation of our baseline model to which we added an L2 regularization.\n", + " \n", + " Arguments:\n", + " X -- input dataset, of shape (input size, number of examples)\n", + " Y -- \"true\" labels vector, of shape (output size, number of examples)\n", + " cache -- cache output from forward_propagation()\n", + " lambd -- regularization hyperparameter, scalar\n", + " \n", + " Returns:\n", + " gradients -- A dictionary with the gradients with respect to each parameter, activation and pre-activation variables\n", + " \"\"\"\n", + " \n", + " m = X.shape[1]\n", + " (Z1, A1, W1, b1, Z2, A2, W2, b2, Z3, A3, W3, b3) = cache\n", + " \n", + " dZ3 = A3 - Y\n", + " \n", + " ### START CODE HERE ### (approx. 1 line)\n", + " dW3 = 1./m * np.dot(dZ3, A2.T) + (lambd * W3 / m)\n", + " ### END CODE HERE ###\n", + " db3 = 1./m * np.sum(dZ3, axis=1, keepdims = True)\n", + " \n", + " dA2 = np.dot(W3.T, dZ3)\n", + " dZ2 = np.multiply(dA2, np.int64(A2 > 0))\n", + " ### START CODE HERE ### (approx. 1 line)\n", + " dW2 = 1./m * np.dot(dZ2, A1.T) + (lambd * W2 / m)\n", + " ### END CODE HERE ###\n", + " db2 = 1./m * np.sum(dZ2, axis=1, keepdims = True)\n", + " \n", + " dA1 = np.dot(W2.T, dZ2)\n", + " dZ1 = np.multiply(dA1, np.int64(A1 > 0))\n", + " ### START CODE HERE ### (approx. 1 line)\n", + " dW1 = 1./m * np.dot(dZ1, X.T) + (lambd * W1 / m)\n", + " ### END CODE HERE ###\n", + " db1 = 1./m * np.sum(dZ1, axis=1, keepdims = True)\n", + " \n", + " gradients = {\"dZ3\": dZ3, \"dW3\": dW3, \"db3\": db3,\"dA2\": dA2,\n", + " \"dZ2\": dZ2, \"dW2\": dW2, \"db2\": db2, \"dA1\": dA1, \n", + " \"dZ1\": dZ1, \"dW1\": dW1, \"db1\": db1}\n", + " \n", + " return gradients" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "dW1 = \n", + "[[-0.25604646 0.12298827 -0.28297129]\n", + " [-0.17706303 0.34536094 -0.4410571 ]]\n", + "dW2 = \n", + "[[ 0.79276486 0.85133918]\n", + " [-0.0957219 -0.01720463]\n", + " [-0.13100772 -0.03750433]]\n", + "dW3 = \n", + "[[-1.77691347 -0.11832879 -0.09397446]]\n" + ] + } + ], + "source": [ + "X_assess, Y_assess, cache = backward_propagation_with_regularization_test_case()\n", + "\n", + "grads = backward_propagation_with_regularization(X_assess, Y_assess, cache, lambd = 0.7)\n", + "print (\"dW1 = \\n\"+ str(grads[\"dW1\"]))\n", + "print (\"dW2 = \\n\"+ str(grads[\"dW2\"]))\n", + "print (\"dW3 = \\n\"+ str(grads[\"dW3\"]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Expected Output**:\n", + "\n", + "```\n", + "dW1 = \n", + "[[-0.25604646 0.12298827 -0.28297129]\n", + " [-0.17706303 0.34536094 -0.4410571 ]]\n", + "dW2 = \n", + "[[ 0.79276486 0.85133918]\n", + " [-0.0957219 -0.01720463]\n", + " [-0.13100772 -0.03750433]]\n", + "dW3 = \n", + "[[-1.77691347 -0.11832879 -0.09397446]]\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's now run the model with L2 regularization $(\\lambda = 0.7)$. The `model()` function will call: \n", + "- `compute_cost_with_regularization` instead of `compute_cost`\n", + "- `backward_propagation_with_regularization` instead of `backward_propagation`" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Cost after iteration 0: 0.6974484493131264\n", + "Cost after iteration 10000: 0.2684918873282239\n", + "Cost after iteration 20000: 0.2680916337127301\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "On the train set:\n", + "Accuracy: 0.938388625592\n", + "On the test set:\n", + "Accuracy: 0.93\n" + ] + } + ], + "source": [ + "parameters = model(train_X, train_Y, lambd = 0.7)\n", + "print (\"On the train set:\")\n", + "predictions_train = predict(train_X, train_Y, parameters)\n", + "print (\"On the test set:\")\n", + "predictions_test = predict(test_X, test_Y, parameters)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Congrats, the test set accuracy increased to 93%. You have saved the French football team!\n", + "\n", + "You are not overfitting the training data anymore. Let's plot the decision boundary." + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAcoAAAEWCAYAAADmYNeIAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsvXmUZPlV3/m5b4l9y732qu5WC7FIYpXMZiSPhYWMjX1m\nhiMjg1iFfCzmzKLB2GMz+Ay2ER4xCFsejYwZbDFYYzAjBBbIYhiEhBpoDJJAkhEtdVdVZuW+xB7x\ntjt/vMjIiIyIrIjMyKWyfp9z6lRmvO0XLyLf/d37u/d7RVUxGAwGg8EwHOu8B2AwGAwGw0XGGEqD\nwWAwGI7AGEqDwWAwGI7AGEqDwWAwGI7AGEqDwWAwGI7AGEqDwWAwGI7AGErDpUZE7oiIiogzxr7f\nKSIfPeH1vl5E/nQa43mUOem9FJG/JyI/Pc0xdc77LhH5B9M+r+FyYwyl4cIgIi+IiCci84de/6OO\ncblzPiMbH1X9iKp+wf7vnff0F497PhH5WRH50SGvL4rIvxWRByJSFpHfEZFXHvc6Fw1V/ceq+r0n\nOccwY62qb1bV/+VkozM8bhhDabhoPA/8jf1fROSlQOb8hnNhyQHPAl8BzAL/GvgPIpIb5+CL7NFe\n5LEZHk+MoTRcNN4DfEfP728E/k3vDiJSFJF/IyKbInJXRP6+iFidbbaI/K8isiUinwf+8pBj/5WI\nrIrIioj8qIjYDxuUiPxrEfkfOj9f73i4f7vz+1MisiMiloi8SkSWO6+/B7gF/IqI1ETkB3tO+QYR\nudcZ5/806U1S1c+r6k+o6qqqhqr6biABfMGoY/bHLCJ/BvxZ57WXiMiHOuP/UxH51p7950TkV0Sk\nIiLPdu7VRzvbBkLIIvJbIjLUCxSRd4jI/c65/pOIfH3Pth8RkV8UkZ8TkQrwnZ3Xfq6z/Z937t/+\nv0BEfqSz7YdE5HMiUhWRT4vIX++8/oXAu4Cv7hyz13m9z0MXke8Tkec67//9InLt0P16s4j8mYjs\nicg7RUTG/pAMlwZjKA0Xjd8FCiLyhR0D9nrg5w7t88+AIvAk8A3EhvW7Otu+D/hm4MuArwT+q0PH\n/iwQAC/q7PONwDghvg8Dr+r8/A3A54E/3/P7R1Q16j1AVb8duAf8FVXNqeqP92z+OmKj9l8AP9x5\nsB8bEflSYkP53EN2/WvAK4EvEpEs8CHg54FF4nv9L0Tkizr7vhOoA1eIJyxvPMEQnwW+lNj7/Xng\nF0Qk1bP9W4BfBErA/9V7oKq+pXP/csT3bRf45c7mzwFfT/x9+IfAz4nIVVX9DPBm4JnOsaXDAxKR\nvwD8E+BbgavAXeC9h3b7ZuCrgJd19vtLx3v7hkcZYygNF5F9r/I1wGeAlf0NPcbz76pqVVVfAN4O\nfHtnl28FflJV76vqDvGDcP/YJeB1wH+rqnVV3QD+t875HsaHga/reK5/Hvhx4Gs7276hs30S/qGq\nNlX1E8AngJdPeHwXESkQ37N/qKrlh+z+T1R1R1WbxEbgBVX9P1U1UNU/Av498F937vN/CfzPqtpQ\n1U8Th3ePhar+nKpud67zdiBJv/f7jKq+T1WjztiGvc8F4H3AD3TGiqr+gqo+6Bz3fxN7yq8Yc1hv\nAH5GVf9QVdvA3yX2QO/07PNjqrqnqveA/4/Y2BseM4yhNFxE3gN8G/CdHAq7AvOASzz73+cucL3z\n8zXg/qFt+9zuHLvaCaXtAf8HsTd1JKr6OWLv6kuJPZhfBR6IyBdwPEO51vNzg3jNcWJEJA38CvC7\nqto7KfhUT6jy63sO6b03t4FX7t+Lzv14A7EHuQA4h/bv/XnScb5VRD4jceLRHrEH2Ju0deS5RcQl\n9jh/XlXf2/P6d4jIx3vG/yWHznsU1+j5fqhqDdjm4LsEU/qcDI82ZtHccOFQ1bsi8jyx9/c9hzZv\nAT7xQ/7TndduceB1rgI3e/a/1fPzfaANzKtqcIyhfZg4lJtQ1RUR+TBxOHIG+Piot3OM64yFiCSJ\nPaxl4Pv7Lqr6xWOM5z7wYVV9zZBz28Qh6hvAZzsv997Xeuf/DFDp/HxlxDi/HvhB4jDzp1Q1EpFd\noHe972H36Z91rvP3e857G/iXnfM+o6qhiHy857wPO+cD4u/R/vmywBw9EQyDAYxHabi4fA/wF1S1\n3vuiqobAvwP+kYjkOw/L/56Ddcx/B/w3InJDRGaAH+o5dhX4j8DbRaTQSb55SkS+YcwxfRh4C/Db\nnd9/q/P7RzvjGsY68VrqSbBFJNXzL9HjYTWBNx5eHx2TXwVeLCLfLiJu599XicgXdt7PLwE/IiIZ\nEXkJPUlWqrpJbFD+psQJVN8NPDXiOnlio7sJOCLyw0Bh3EGKyPcTe+1vOPQ+s8TGcLOz33cRe5T7\nrAM3RCQx4tT/FvguEfnSzqTjHwO/1wnnGwxdjKE0XEhU9XOq+gcjNv8AsUfzeeCjxMkhP9PZ9i+B\nDxKv+/0h8cO+l+8gTnr5NHFSyC8SJ3KMw4eJH/r7hvKjxB7Vb488Il4j/fud0OBbx7zOYX6I2CDu\n//tN4GuI1xi/EdgbEWY9ElWtdo5/PbF3tQa8jXj9EOJJQLHz+nuIDUu75xTfB/yPxOHKLwY+NuJS\nHwR+ndgzvQu0mCyM+zeIJxsPet7n3+usm74deIbYKL4U+J2e434T+BSwJiJbQ97/bwD/gHhddpXY\n0I+zXm14zBDTuNlgMIyDiLwNuKKqJ8l+NRgeOYxHaTAYhiJxjeXLJOYVxOHw/+e8x2UwnDUmmcdg\nMIwiTxxuvUYc2nw7B/WLBsNjgwm9GgwGg8FwBCb0ajAYDAbDEVzK0KubKWqq+NAacoPBYLgUZIoh\nN3Mu0fIajbKRox3Gn7bKW6q6cJxjL6WhTBUX+Yo3vuO8h2EwGAynysv/6h7v+JqrNH7wbXz81xxY\neDrWVDIM8LV/8h/uPnyv4VxKQ2kwGAyXnZ946xpfPv/EgZE0nBpmjdJgMBgeUfTZD533EB4LzDTE\nYDAYHiF+4q1rfNnzz9H88T/kmV9zMI/x0+dcPUoRea3EzWKfE5EfGrHPqzrdAT7VEaE2GAyGx5J9\nI/nMd3/ShFvPkHO7053uBO8k7jm4DDwrIu/v6Dfu71MC/gXwWlW9JyImldVgMBgMZ8p5TkleATyn\nqp8HEJH3Enc5/3TPPt8G/FKnaSqdRrsGg8HwWNH1JF/9SZ4578E8hpynobxOfweBZeCVh/Z5MeCK\nyG8Ry2m9Q1UPN/IFQETeBLwJIFkw+dEGwyNBpCTaAZElBEkTSjzMQfnHv+usRxrOg4t+5x3gK4gb\ns6aBZ0Tkd1X1s4d3VNV3A+8GyF992ujyGQwXnEy5xdx6p92oQuDabNzIEybs8x2YwXCI80zmWaG/\nY/oNBjuLLwMfVNW6qm4R9/17+RmNz2AwnBJuK2BurY4VEf9TcL2QpfsVMPrThgvGeRrKZ4GnReSJ\nTgfy1wPvP7TPLwNfJyKOiGSIQ7OfOeNxGgyXD1Uk0nMzSvndFnLo0gLYQUSiFZzLmAZQRcLzu0cA\nb3xxC332QybD9Zw5t7uvqoGIvIW4+7kN/IyqfkpE3tzZ/i5V/YyI/DrwSSACflpV/+S8xmwwPPKo\nUtpokN+LDVXgWuwsZWnlEmMdm6r7OH6El7LxUg7I8XRF7SBi6JECdnD+HmV2r8XMZgMrVNQS9mZT\nVOfSx36/k2KSdy4W5zpNUdUPAB849Nq7Dv3+T4F/epbjMhguK7NrdbKVNlbHFrl+xMJKlfVbBby0\nO/I42w9ZulfBDqLua+20w8aNAliTG49m1iXV8Lvj6KLxec+TTKXN7Hq9OzaJlNJ2E4DqfObUr99b\nK2m4GBgJO4PhMcEKI3I9RnIfUShuNY88du5BDcePsJTuv2QzoLh99HGjqJdShK5F1GNjI4HKbJrI\nOd/HUnGrMXCPLIXiTsusnz6mmMC3wfCYYPsRKoIcetgLcSLNKCSMSDWDgVCppZArtygvTO5lqSWs\n3i6R32uSqXpElkV1JkUzP0YI+JRx/Gjo61akiIKeUvTVhFsvLsZQGgyPCUHCHuoRKdBOjX4UHGUX\nDifkTILaQmUuQ2Xu9MOZk+AnbJLtwYlDZMupGElTK3nxMZ+KwfCYoJZQmU1T2Gl2Q4tK7CFV5tMj\nj4tsCz9p47bDPqOpQP0CeIAPw/ZCZjfqpOs+KlArJNlbzKIj1lb3FrMsLFf6wq+RwO5C5sySeQwX\nC2MoDYbHiPJ8mtARCjst7CCinXbYXcziP0QVZ+tqjiv3KqgqlsaGI3SsI8OuEikK4yX7aCeseYzE\noKOQMOLq3TJWqAixB5wrt0m0Q9ZvF4ce08q6bN4oUNqo43ohgWtRns/QKCSnOrYDT/Kn+Nj3my4g\nFxnzyRgMjxMi1GbS1GZGe5DD8FMOK0+VyJbbOF6Il3Zjb3KIYXO8kLnVGslmXA/ZyrhsX80SuoOK\nOxIpM+t1cpV2rM6TsNi+kqOdGZ2BOwm5chuJtM8TthQSrYBEM8AbkWHbyrqsPVGayhiGcWAkTdPl\nRwGT9WowGMYisi2qs2l2r+SoF5NDjaREypW7ZZKd5B8BUg2fK3eHK+7Mr1TJVtqI7icVRSzer+C0\npyM6kGgGgyUoHVzv/IQN3vji1rld2zA5ZipjMFx2VEk2A1J1j8i2qBeSp1aCka0MenACWFFEuub3\nZbXaXji0llIUCjstdq7mTjweP2UT1RhqLP1z0JTtTdz5mGm6/MhgPiWD4TKjysJKlVTd75Y2lDYb\nbN7I08pOPxHH8cKhRkkicPz+TFLHj2IrOkTKzp2SR1krpShst1A9MN4R4Cc7ykJnyH75x8de+vOY\nR++jhQm9GgyXmEzVI1WPvTbhQCxgYaV2KsXzXsrpExHYR4WBhCE/aQ8tL1GgfYRK0CREtsXa7SKt\ntNPN8G0UEqzfLJgMVsPYmGmN4fGhE4IUVdppd+oZlheR3N6gEs8+yWYwtaSZfRr5BKVNC/EPtFwj\nicOcrUz/4yZyLGrFJNlyu79cxRKqs6mpjSlI2mzcLh5MDM7YQJo6yUcf86kZHgvcVsDicgUr1G64\nb2cpS700vQfyRWR0gfwpSbGJsHanSGmjQabqgUC9kGRvfngN4s5SFt+1Key2sKKIVsZld2F4huw0\nxnaWmPKPy4P55AyXH1WW7le6tXT7NmJ2vY6XcvDPeK3qLKkXk0MTZhQ5NfHxyLbYuZpj5+oYO4tQ\nnUvHnTkMhguKWaM0XHpSDX8gExM6xed7lztNv5FP0MgniCSeH0QS/9u8kTdrdAbDmFzeqbTB0MEK\nh4cZBbBHbLs0iLB9LU+lFZCu+4S20MgnUNvMkQ2GcTGG0nDpaWXcocLekcQe10UgWfcp7DSxg4hm\n1qU65XZT/oQh5tMez4lRJVtux1J8YSzFt7eQeagU31nQ20/yY4B5zD76mE/QcOmJHIvyXJrCdrOr\nABMJeEnnQhjK3G6TmY1GjzpNSK7SZvVO6VyM00UbzzAK202K2wfi7umaT6peZvVOiSB59kIC+5im\ny5eTi/GtNxhOmfJ8hs0bBRp5l2bGYWcpy/rt86+lk0iZ2Wh06xyhU+sYKPmd4zVFPhLVI+snz3w8\nx0Ai7TOSQFfwvLjdOLdxGS4vxqM0PDa0si6t7EHdoISKFYWEjnVuBtNtB0PVaSwgU/cpT+tCqpQ2\nG+R3W4hC4FrsXMkOqPOcaDyRkiu3yFQ8IluozaQmVv+RMCK31yJT8wmduJnz4VpPxw9HKvrsC7Gf\nNabp8uXGGErDY4dEytxqjUzN6xa4by9laU65jdI4RLY1sqQxnGKYc3a93lfY7/oRC8tV1m8V+zpo\nHHs8HTF0t0fCLl33qcymj2zF1YuEEVdfKGMHEZbGw0jXPHYXs9RmDupdQ8ca2TA6OI36yyMwYgKP\nByb0anjsmF+pkq55SEfOzQ6V+dUaiaZ/5mMJEjZe0hmwTZFAZUrqNBJG5MqDCj2iUNzqD1UedzzZ\nqtdnJCG+t8WdJlYQjTXO/G6rayThQHJvZqOORAcnjmyLeqfk5fAYy0c0oDYYjosxlIbHCts/omPF\n9vmswW3eyHc1UiNLiAR2FzJTEy13gmioQs9+os40xpOuDpfKU4nrWMchU/OGy+2JkGj1h1S3O62+\nIomvEdjC9tVDfSxVSdV9Sht18tuNsQ32uPzEW9f4SfdP+NhL3256Sl5yzvXTFZHXAu8AbOCnVfXH\nRuz3VcAzwOtV9RfPcIiGS4YdRPF65KGEFiEOR54HkWOxdqcYd94II/ykM1Ud2sCxh4ZTFfCGZIge\nZzyhY6EwpAxH4nDuGIS2BQwablQJ7UNntoSdKzl2FrNYkRLZ0r/OrMrCcjUWm9jvmrLVnErXlJOG\nWz0vIvCVRNLCcYzow6PAuRlKEbGBdwKvAZaBZ0Xk/ar66SH7vQ34j2c/SsNlw0/YQ7M+FWidkqTb\nuAQJm3jOOF3UFqozKfK7rT6PTSXOBp7GeGqlFLlyu2/tcF8J6LAY+iiqs6kBb1874whG1UdaQjTE\niGfL7b5z7Y9rfqXG8tMz55K8FYXKyn2PZiPqztWKMzaLV1zEqCRdaM7zyfAK4DlV/TyAiLwX+Bbg\n04f2+wHg3wNfdbbDM1xG1LaozKYp7DT7OlZEllC5xHqjewsZQseKRQRCpZ102F3KTE3n1k/FJTez\n6/VuRmpkW6zfHF8qr5VNsDefobTV6J4jcC02buQnHk92yJosgKDH7ppyUpHztQc+zUbUV6FT3g1J\nJISZuel2cTFMl/M0lNeB+z2/LwOv7N1BRK4Dfx14NQ8xlCLyJuBNAMnCwlQHarhclOfTBAmbwnYT\nK4w7VpQXMqfTseI4qJKueeT32qBKvZCkXkyezAsSoTqbpjr7kMmAKpmqR648+bXrpRSNQpJkMyCy\nBC9lTzzm6lyaWilJshUS2oKfnPwcwLAYcJfRHVVGc9Kmy1Gk1KrhQDBDFXZ3QmMoLzgXfQX6J4G/\no6rRw0ITqvpu4N0A+atPX3IBT8OJEKFe7BiAC8jhUo5kMyBbabNxBs2GZ9fqZCuHr+2xMaZnqJb0\n1aoeB7UtWtmT5RnWSimSzdpg1xQRvHPoFhMdsfwdXna94UvAeRrKFeBmz+83Oq/18pXAeztGch54\nnYgEqvq+sxmi4ZEnUvK7TXJlD4BaMRk3Bb6ga0JOOxwIG1oaG6xU3aeVOz3JPbcd9BnJg2v7p37t\nadPIJ0jXEnFPzP0sIyEO407w2U+rTtK2wXaEwB80itnsBYlkGEZynobyWeBpEXmC2EC+Hvi23h1U\n9Yn9n0XkZ4FfNUbyjFDFDhQVzkXfU8IIK9KTqeZ0+lAmWkH34V/aapCue2finR2HUaUUlsYF/Kdp\nrEZdW5RHzlD2dk1JNXwi26KRS6CHs2dHMGo90veVyl5AFCrZvE06Y42ViCMiXLnmsnLP6wu/WhbM\nL130wJ7h3D4hVQ1E5C3AB4lT635GVT8lIm/ubH/XeY3tcSfRDJhfrWL7EQK0kw5b13NnsoYnYcT8\nao103e8m2exczdE8xkM61fD7jCQceGfHTeiAuBbTDiL8hDP2g3dc4jIHBso5IhgskZgyoWUNvbbu\nj+ssUMVtxyUix16f7GHSrilHUauGPLgfqznRWVvM5Cyu30yMZSyzOZvbTybZ2QrwvIh0xmJ2zsVx\nL96EzdDPuU5lVPUDwAcOvTbUQKrqd57FmB53rCBi6X4Zq2dNJdkKuHK3wspTpVP3whaXqySawX6k\nDCtU5leqrN0uTvzASzaDoVJn0jGWkxpKCZWFB1WSDR8VQVSpzKUpz6Wndl/iCcFwIdPTXlNt5hOw\nfj7XBkg0fRZWqt3+oZEtbF7P46XPNtHlwJt8W1dIIIqUB8v93qAqNGoR1UpIoTjedzOZsrh64xHy\nzA3AxU/mMZwx2XJrqNi0FUak6/6xPLtxcbww9gAPvS4KhZ0m29cmKxMIHQsVBoylCoTHKPSeW42N\npKV08/sL2038hE1jSjqxagnrNwssLldi2baOAd66dvoefXztPIvL1b5rb57BtSWMWLpf6ZugWUEc\nOl95amZs0YKTcFQfyWYjGjZ9QRUqe+MbSsOjifl0DX04fjRcRgywT1m5xvGjkV0hHG/ya9fzCWY2\nGn0CA0qc+djIT2bYJIzI1P0Bo2t1pO+mZSgBvLTD8otmSLRij7idds5sPdVLu6d2bduPyO82STZ8\ngoRDZS7VbbSc3U+6OYxCpuL1iaKfB0fdggu41G2YMsZQGvrw0i7RiGJt75SVa7zkcKm1iPHVXXpR\n22L9VoH5lWosXUfsZW5ez08sEWeFOkKiDezwFCYQIkeHHFVJ13zSNY/QFuqlVEdJ5wyufQwcL+TK\nC2WsSOO5UCskU213JeWsUEeGyU/l/k5IOmMN/fBFoFgyj9HLjvmEDX3U8wmK2xb0eJaxDJl76vVn\nkWNRLaXI77X6VHPUlocXyo/ASzk8eLIUe6vESi/HcQFC14qN66GaNyW+N2fKfjZvM+i2oyrstti+\nmpuqZztNSpuNrpGEg0bLs2t1Hjzp0k47I8PkrTNeoxyGiHD9ZoLle/2eb6Fkk80fHRZutyK2NwNa\nzQg3IcwtOGRMScgjhTGUhn4sYfV2keJ2k2zFQwVqpSSVYxqqSdlbzOAnbQo7Lawo6siapU9WoiJy\ncm9LhJ2lLHOrNUQPIsSRJewdoZd6GmTL7a6RhAOjM7dao5lLTFVQfVqk6v5Qb9zx4zKgdtqhlXH7\n9FkjgXbapX2MaMIkjNt0OZO1eerFKWrVkCiETNYimTr6e9lqRtx7vt2N/vu+0mx4XL3hki+Yx++j\ngvmkDAOobbG3mGVvMXv2F5c4jFgvne+a1DAahSSBa1HYbuL6Ea20S2UudZDookpur0Vht4VESjOb\niKXxplyHelgUoIvE2bwnVcY5DSJbsKNhsdV4zRgRNm/kye21OuIQSq2YpFY6PXGI44gJ2LZMFGrd\nXPeHytZtrPrk8rYRQ39EMIbSYOhl/6k24gHmpV22bgw3RIfl33LlNpmax4MnSyfP2tSDLNSRHqMe\n0jFVpbTZiLt6REo747KzlD2Wd20FETMb9VjpRqCeT7K7mEHHfF+VmRQzm40+Ax9JrKDTfT8i1GbS\n1GYefXH6Rj2kvBfSqA9fXw2CWNbONhHYRwJjKA0G4mST2bUaqUbcILiZddm5kiN0xzMEth8OeHoC\nSKTkdltUjhGelUgpbdS77ava6bhDR62UIlUfbD6tlsRZqh3mV6qke/ZL1X2uvFCODfckXm6kXLlb\nxukIUKBx+DfZDFh9ojiWx1ebSZHwQnLldmzMNQ6r7lzJjT+OKXJSkfOj2Fzz2N0ZFEDvRSRW5TE8\nGhhDaXjskY4hsMKDZJN03WfpXmxUxjEEiVbYNQC9WBorBFWOMa6F5SrJpt8nUH7lXpkHd0rdpKf4\nDYAifbJ8jhf2GcnObogq+d0W5YXxDXem5mEHUd8aowU4fji+tJ3EjZb35jO47ZDQtaaXpTsB09Ju\nHYXnRWMZyeKMCbs+ShhDaXjsyVTi0GTvY0uIyxLSNT9WrHkIgWsNLW9QOs2iJ8Rph31Gcn9MGkF+\nr8XeUpbaTIpkwyeyhWY2AT0hWbc92nAnm8M1XUdxWAawOx6FRDuk1esUqpJoh9h+iJdyBoQKIsei\nfQ7awWdFvXZ0KYsI5Is2i0sXbx3ZMBpjKA2PPa4XDjcEUbytOcY5/JSDn7RJtMI+g6vCsUpbXG+E\noYOuFmqQsEd6ZX7CHmm4Jy3z8RM2kTAk1Ns/CYjlDys4XthNC64XkuwtpEnXA1ClmUuci8g+nG64\ndZ+jwqnFGZuFJRf7rHRzDVPDGErDI4HbCkjXvDgrtpCYqqSal3KGGwIhbj48Jhs3C8w/qJFqdATd\nbYvtq7ljhRj95HBDF3W2PYwgadNOOySb/d6gClQnVLlpFJLMbDbQntC0AqFt0cwdeEbzD6q47bC7\njglxhm623D4o1l+vs7uYOdOEnXHLP6ZBLm+zzqDHLgKz844xko8oxlAaLjyljTr53RbSKa4vbjXY\nWcpOVEJihRGJVkDoWF3ZtH0a+QSlTQvxD9bhImKPbRIxgci22LhZmEqLsP1r99YVKoAlVMc0MpVS\nisVGrc8pbWWcictV1BJW7xSZW613W3E1cy7bV3Ld92eFEamOmH0vXSPdM4iZjQatTIJgmMFXJdmM\nE6omkc/L7+6S3yuzNz9HIz+ZJvA0sW3h+q0ED+7H/U/3O40sXXNJJC5vyPmyYwyl4UKTaPrkd1t9\nxfUozK7XxwvjqVLcalLYaXY7fvgJm42bhYNjRVi7XWRms0GmGrdRqhcS7C1kjmXo1LYIp+Dwbl7P\nU9pskC+3kCg2crtL2fEycSNlYa02YLhSjWDsdddeQtdm41ZhZPmMRKMl/g4jGnuahxOKko24e4jo\nwZk2r+WOTBZyPI9Xve/9LC2vENoWdhDy/Be+hGde+4287K9VHpq4o6rUqhHVcthNsjmpak42Z/PU\nF6Ro1CNUY2EC40k+2hhDabjQZCve0BAkQLrmPdSrzFQ9CjvNvo4fiXbIwkqV9dvF7n6RE4dJt69O\na+RTwBL2lrLsLU0u/JAakbBjadwhZlJD2WXExCF0LCLbwgr6k1lGGU85lBYqobK43Ns9JN6+sFLl\nwZOlkaH2V/zG/8vS/WWcMMSJHVGe+rP/zOvfsMSL3veRvqbLh1FVHtz3qNeirv2vVkJm5hwWTphs\nY1lCLm+KJC8LJhZguNAckWU/Fvmd1sDaoxBnctp+eMKzG7qIsH01RyQHn1k0ShehIzTQS6Y2onsI\nsfc59JJhyJOf+VOcsP9ztNohn/nnzz50yI161GckIZ5L7W4H+MfoVmO4vBhDabjQNIrJfrWZHsbp\njXlU5wlrmKTaJSEWEh+8cZFAvXg68oCtrMvqEyWqMykaWZe9+TR7s6mu8dTO9WvF5EB3EmvE5yRK\nt5HzYewwRKLhx3mb1W7T5VHUqqPrHR9W5mF4vDChV8OFxks5VGbTFHaacTJP59m/fSU7VplBI5+I\nvcpDr6vIseobT4Qq2YpHfqeJFSnNrEt5PnM65RKWsHk9x8JyFaB77+qFZF+m6rQJEja7h0LFzUKS\nbCVWF2rn729YAAAgAElEQVTkE7SHJEi1si5sDp5PhZHatUEiQWV2htL2zsC2ZPLh99QeJQVoVHMM\nhzCG0jCA7YU4QYSXtMfW8jxNygsZ6oUkmZrXCdslx5aWq8ym49BdqN2WVCqwcyV75h13SxuNvhZi\nzl6bTNVjdRpasENoZROsvGiGTMXrGmb/lFulDcNPOew95Lp+0qHeMaiH27sdlXn8zF96DX/xF34J\nVwMI4gMti7EK+gslm53tYKhXadYXDb0YQ2noImHEwkotVm4RAVUqs2nK8+lzb+MeJG0qyclr7yLH\nYvWJErndFum6T+BaVGfTp95b8zBWEFHYa/UlJglx+Pe4WrDjENkWtQnqJiVSipsNcpU2dDzAvYWj\nvV63HWD7UVyPegLveOdKlmbOJbfXRlSpF1PUC4kjv3sbN27wq2/8m3yv/1GcT6zh3W8wO+fiuGPI\nDiYtlq66rK/63Si1ANdvJbBMlqqhB2MoDV3mV2skG34cpuxMsws7TYKETb14MRsCj0NkW1TmM1Tm\nz28MiVZAJIJ9yH2xNBYrP8+xdVFl6V4Ztx32dUBJNXwePFHqk8iD2Pgv3q90VITi0pvqTOrYZTWI\n0MwnaeYn+65VZme58dZXxKIC3/3JiY4tzjhk8xbNhiISl3JYF7Cfp+F8MYbSAMTeZHpIc11LY2N5\nJoZSlVTdJ9n0CV2bej5xIUK/0yB0rIGSCIhDwaOUe9x2QLoaqxE18olTFxFPNoM+IwkdzdsgIlv1\nBr4D8w+qJLpKPPFB+d0WXtKhcUYTq5OInJd3A7Y2fIIAbAfmFxwsy4RcDYOcq6EUkdcC7wBs4KdV\n9ccObX8D8HeI/16rwN9S1U+c+UAfA6xwdMH4qIzEaSLRgTezn3gys9Fg7VbhXNbVRmH7casoxwtp\nZ1zqheTo/pA9+CkHP2EfGJYOoyTlipuNbgITxGpEuwsZaod0Y487nmEkWsHQ1y2Nt/UaSisYrcRT\n2G2euqE8MJA/dWSt5CjKewHrqwdNlcMANtYCECjNHL2+GYUa95J0GLsDiKoSBmDZnMhjjUIl0riP\npek+cnac2xNIRGzgncBrgGXgWRF5v6p+ume354FvUNVdEfkm4N3AK89+tJef0LXiB+yhVHxldNbh\nNMnvNPu8GdH44bLwoBqH/S7AQyHZ8Fm8XwGN66oyVY/CdpO1O8WxknFiLdgqqWYQJxVZwvaV3MBE\nwG0HByIJHURhZrNBM3+gc3vS8RxmlMcaCfiH5NeOnlhd/LKb7Y3BJB5V2NoIRhrKMFTWVrxu6Yjj\nCEvXXLK5o73Q3W2frZ7rlWZjcfRJDF0YKqvLXrcRtOMIV667J1YRMozHeU7VXwE8p6qfBxCR9wLf\nAnQNpap+rGf/3wVunOkIHydE2F7KMr9aQ7Tb/IHIEvZOKdGkl1y5PVQYwPYj7CCaqgj6sVBlbrXW\nN0ZLAT+isNUcSz0nciw2bhWxglgLNnCHa8FmjlAjylS9uBvJCcZz88+e46W/+/uk6zXWbt7kE1/7\n1dRKJZpZNw4R92jexlnCQr3Q7yEGidETq3HqWychU62SbDQpz80SOc5UuoD4/vAbHAbxBG2YEVu+\n26bVPDjO95WVex63n0qOLEeplAM21/uN8t5OHFVYuDL+fRp27eW7HneeSpIYoxTGcDLO01BeB+73\n/L7M0d7i9wC/NmqjiLwJeBNAsrAwjfE9djQLSdZdi8JOE8eLaGVcqrPpsUsxTsT5O4xHkmgFOP5g\nCNoCslVvIpm5yLE4Mph9xL3QzgPcDuIJxKTj+cI/+E982Uc+iuvHYdYnP/0Zbj33HO//zu+gXiyy\nfrvI3GqNVD2WwGunHbav5AbXiiX2hucfVLsTq0jiiVV5bjqdQRLNJq/65V9hYeUBkW1j28rX/+Rr\nuPnjHzpx02U3IfjeoLF0RoRT262IdmvIGnNHyefKteFGb5TnursbMr803CBPeu2lEdc2TI+Ls/hz\nBCLyamJD+XWj9lHVdxOHZslfffrix34uKF7aZev62TeVrRWTFLf6w40KBK597t7kfnbnKHTK84h6\nPklhuznUq9z31lRkpD0dNR7b9/myj/xO10gCWKo4ns/Lnvk9nnntNxI6cQcUOo2sj1rvbOYTrN0u\nUthpYfshraxLbSY1tZrQV7/v/SysPMCOIujI1P3ef/chEt988jXzhSWX1WWvz4iJwPyI+kvf1/2K\nqcFtQwzuPkEwfJtGxOucna+2qtJsxHJ66Ux/5u1R1/aOuLZhepynoVwBbvb8fqPzWh8i8jLgp4Fv\nUtXtMxqb4ZSRMMIOlcCxwBIqM2nSNZ9EK4jXJy1QhK3ruelfXBXHj4hsGeuhvt/ia5jJiASqE7T7\nGocgabM3n6G01eh7faenc0jkWLRTcb/J3nEdNZ78XrnrkfZiqbJ0//6hF2UsnV0/5bB9bfqfUbZc\nYX51LTaSPYQNn2c/YHHj9snOny/YcCPB5rqP7ymuK8wvOhRKwx+JyZQ11FCJxIZtFMmURbMxaNht\n50D9p1EPWbnn9W2/eiPRFT1IpmTktTNZE3Y9C87TUD4LPC0iTxAbyNcD39a7g4jcAn4J+HZV/ezZ\nD9EwdVSZXauTq7S7D+K9+QzVuTTrtwokmwHJZtw3spFPHDuDcxTZvRYzGw1EY4+pkXXZvppHjygw\n7+0J2fdWiCX2Jm2EPA7VuTTNfCJuVk1c+H/Ys966lmPpXiXWs+2Mr5lNjBxPM5vBDocLwdcLhekN\nfgqkGg2iETpywYj1xV7a7YgwUFLp0XWR+YIdG8wxcF2hULSplPv1YS0LSrOjH6MLSy73X2gPeK77\nyTxhqCzf89BDtvTBfY8nn07huILrWuSLNtUh1y7OPBJBwUeec7vLqhqIyFuADxKXh/yMqn5KRN7c\n2f4u4IeBOeBfdGL5gap+5XmN2XByZtfrXd3P/cdXaasRG8ZiknbGHaoFOg2SdZ/Z9Xqf0UvXfeZX\nq2zeGG0o/IRNohkM6sVCX/PiaRMk7DhxZwSha/PgyRKpRoAdhHgpZ6ApdS/tTIblJ5/g+uef7+u4\n4TsOf/znXjHVsZ+Uvfm5kYLnmdxoL8r3lZW7bTzvIFy5cMVhZvbk36mlay7JlLC7ExKFSjZnM7/k\n4DijP/90xuLmnSRbGz7tVoTrCnOLbtdbrFXCkV1TKuWA2fl43Fc6197ru7Z75LUN0+NcpyOq+gHg\nA4dee1fPz98LfO9Zj8twSkRKdkh2q6VQ3D792rvioZKL/Wun6z5WEI2UX6vMpmK92J5jI8BLOwTJ\nY6yfqpJq+CRaIYFr0cglBlRvxkakU74zniH46F9+HV/7a7/Ozec+R2RZRJbFs6/+BtZunzCWOSFu\nOyDV8Alti2ZuMHIQui63f+TlbPzoHxG0DgymbdM1HodRVZbvtvHa2vk9fn1zLSCZtE5cSiEizMy5\nzMxNZnT3jeUwwlCHhlVV4229156dc5md8NqG6WD8dsOZYXUSRIYxLINz2ozqP6kSX3+UoQySDps3\nCsyu1nA64gvNrMv21cnX5oYJK8xawtrt4qkr7wAECZcPf8tfIdFqkWw2qRUKqD2960oYka14OH5I\nO+3GnUp6Pe5OWUumerAmpyKsd4QlDoQE3sbH/62DLDrsbAeEvpLNW7GO6wgvymvr0MQaVdjdCS5k\nzWEmZyNDMmNFeGh9puHsMIbScGZEthBZgj2k9s5LH+Or2JG8S9d9Iivus3iUsWllXFyvPWisdXSx\nfffYrMuDp0pxob0lx147LW41BoUVQmX+QY21O8VjnfM4eKkUXmq6a6tuK2DpXgXRuFNLJC38hM36\n7WL3fmUqHpmq1+/Zq7K4XGXlqdLAOXN5e+xOHmE4Ojs09I/zjk6fVGpw/TE2ktaRSUKGs8UYSsPZ\nIcLOYoa5tYN1wv22V7sLE4oaqLKwUiVV97tlFIWdFttXsjRGNCauzKXJdlpO7Zu5SOJkorEMnwjR\nCdeEettIdU9LXKdphdGptNsahuOF5HeaJNoh7XSckHTSMpz5B9W+e2spuF5IYbtJufP55sutoYlR\nVhjxxX9uj3d8zbXYmzxGneRRmanZ/MU1OleuxWuW5d24bKdQipOMjETdxcEYSsOZ0iimiByb4nYD\nx4topx3K8+kjk1CGkal6pOr+gMzb3FqdZn643mno2qzeKVLabpKq+4SORbmTXfo4sS99t59QlWwG\n5PfarN4uHm/NlVhByelR9NnH0nhysG8oRyWuZFLC3/7ND/CxHy5z3MeSbcclHr1ycSKx3NtRmamT\n4PvK9qZPox7hOMLsvHPi3pUiMlEGruHsMYbygpJoBZQ2GiRaAaFrsTefnrj90EWllXVpZU8WZswM\n8cwAECHV8EfKqIUJ+1hri9OiXkiS320NCCt4KfvMvMnDmb8CECkzG3U2bx6vTERlPHGleiERe8+H\nPjsbn53fqgxkFk/K7LxLMmWxux0Qhkoub1OadbCn0F/S95UXPtci6ix1+57y4L7HwpIzcYKP4dHi\n4sYjHmMSrYClu2VSDR87UhLtkPkHNXK7zfMe2oVBRxbEK3pRI1adfo1BwiaSjpZuR/Zt62r+TIYg\nkeK2B5OahLhe9LhEjoWXsAc+k0hi1aV9aqVU3OBZDrY7CeVv/bUHWGNJHDycbM7mxu0kt59MMbfg\nTsVIAuxs+l0juY8qbG4ERJFRyLnMGI/yAlLabAwowVgKpc0mtVLqQnTSOG/qxRSZ6qB4uCK0TqkO\n89ioUthuUtxpIhFEFtSKCSLbjstDTtAaa+KhCAeK94eITjiGret5rtwtI5F2M3q9lEOltxa0k+Ga\nrvtx+NsW3vpDFb5kt84zJ7r66bPfueMwQpxxm0qbv8vLijGUF5BEa7DPH4CoYgdK6Jo/yFbWpTqT\nIr/bil/o3JLNG/kLN5EobDcpbh/UcNoR5MrekYlHp4YItUJyIKko6umLKWFEoh0S2tZEa5ZBwmb5\nqRkyNQ/Hj9ef22ln8PMQoZlL8OJva3RKQX76xCLnZ4HjylBtVVVM4f8l5+J/Ox9DAscaKTUWTimM\ndBnYW8xSK6VINXwiS4YWrp87qhR3BjM9LYXSVnP6hrIjZpCuekSWxCUzh4zd7lIWJ4hINnxUBEuV\nRj5BZS5NYatBcbvZ9Tr9pM3GjcLIGtMBLKFROHotfb9WUp/96IlaZZ01s/MOzUa/kDodrVfn0ORV\nValVI+q1EMcRiiUbN2FWuh5VHo1v6GNGeT4Tp9ofnvGXksdXcBkXVdI9HoGXGuIRHMLxQlJ1H5W4\no8RZJaVA7MXUzqBQ/7iIxuuCw5i6yIIq8ys10vWDkHRht8XOUpZ6j1C6WsLGzQKOF+L4IX4i7tCS\nrnoHnm/n+EQrZGGlyvrt6dd4RqHSqIdo1OmYccEngdmczeIVJ+4vCaCQzlpcu9GfOKaRcv9um1ZL\nuxquO1sB124mTpwhazgfjKG8gDTzCXaWssxsNroP2Wopxd7i6TZQdryQpbvl+EEZxYuk7bQTt10a\nYSyLmw0KOz1JRut1Nq/naU25ee+jikocBXDCQWPpH7MUYxTpmk+67g2UzMyu12OB+Z4JjERKsuHj\neiFWqDTsuA/pqBpP2w+n0u5s35tcfuOP8Zs/H+x/zVCFpavuhRf5Ls26FEoOnqc4tgx4kgB7ewGt\nZr80nSqsLnu86CUpUx/5CHKxv5WPMfVSinoxiRVqnGRxBiHF+QdV7LBHZk7jGrvCdpPK/KCRTjT9\noQ/XhZUqy0/PXrww6Hkgwu4hkQWIIwS7C+M3ex6HTHVUyUysZ7sfEnW8sJt0EyvoQMmx0COyTq1Q\nCU+QI3UgTfdT/M732Tz32aCbQbp/1fVVn1TaIpmKDfpmYob/XHgCz3J5or7Mnfp0MmMb9ZDKXqyE\nUyjaZHLWRMbLsoRUavT+1b1oqPABQKsZkc70TzhUlXotIgiUdM/7N1wcjKG8yExBCWZcrCBO4BhW\nMJ4rt4cayly5PbS5MEC65j10repxoVFMoZZFaauB40d4CZu9xQwSKQv3K1iRUs8n4ozmE0wuVOKS\nmWFn6J20zK7WsMJ+BR3xI/yERYQO1oyJTNX7rdeHGxJVKO8FLF5J8MeFp/n9uZcRioWKxQvZ61xt\nbvHatY+cyFhurvvsbh8IElQrIbmCzdXr7tQ8PRlh5xQGruF5EfefbxNGdGcMubzF1RsJ43leIIyh\nNABxRu2oh+woYzjyeWX+vgdo5hNdBSCnHTC/UiXhHSjZJFoBuUqbtdvFY2ft1ovJbguzfoTmfslM\npKSag1nVAjhBFE/MwtjT3JcX3FnMIAr5nQbZsged2sjqzPFKlcIhYejutgBaVoLfm3s5oXVgnAPL\nZTU9zwvZazxZH+jvPhaeF/UZSYiNc60S0pyxpyaaXpodkvQD2FbchLmXB/c9gqB/v1o1Ym8nMCIG\nFwjj4xuAWN4tdAe/DpFArTB8vbFRSAwv7lc6rZ8Mh3FbAVefL/cZSejoorZDshVv5LEPo51xqcym\nYxEDies1Iws2buQPPNUj7JoirD5RojKXppWyaeRd1m8VqBeTLN4rU9xqkvBCEu2Q0maDheXqcAXy\nh5DJ2kMnWSKQK9ispBexDncyJjaWn8/enPh6+9Srw5OnVKFWHZ5lfhxyeYtCyUYkfk+WBZYN128l\n+7xE39duS7DD49nbnd54DCfHeJSGLpvX8ly5VwE9WLsKEjaVueFJRK2MSyOf6Cv8V4GdpeyZZr5O\njCrFrWYsJRcpXspmZymLl56OcU80A2bX6yRaAZEl1EpJ9hYyIMLMRoP9mv/DWBqHrOsn6MtZXshQ\nKyU7HVWGlMx0+lem6n7fGCKJ5eUi26I8n6HcE2pP1zwSPR1P9sca99QMjrxvvWuTH/t+B3Bw3bjU\nYmerX5M1lbbI5S12NWSYJRWNSETHVw+yjvhKWlNcTxcRrlxLMDsX0ahH2I6QzVkD19Aj1HyOMf8w\nnCLGUBq6+CmHladKZMttbD/CSzs08onR4TURtq/mqJUC0jUPtYR6IXkmfRUhbv7reBFe0iac4Jqz\na/W+gvtkK2TpXoXVO0WCCcXZD+N4IUv3yj3iAkp+t4UdRGxfy5Ns+SOdOgXCKUwwQtemVhp9P7av\n5Fi6V8YOIySKJzd+wo6N+RCSDX9okpAoJBujDeVPvHWNL3v+uaG1kvOLLumMRXk3JIqUfNGmUIw7\nZlxvrA+9R7ZGvKT6/Mj39TByBZv11UFDKxJ37Jg2iaRFIjn683QTgm0zEHoVwQikXzCMoTT0EdkW\n1V7JsYchQjvj0j5D2TgJIxaXqyRaQSzGrdDIJdi+lnvompkVROSGrOOJQnG7yfa1k2muFrabA+e2\nFLJVj90gIrQtrGhECFCgNjPCm1QlXfPJlmMlonoxNdgUeUxC1+LBkyXSNR/HC/FTdiz7N+JcgRtr\n0x42lioQjitEMIRszh7anNgm4nWrv80Hrv55lFhtPcLiK3f+mMX2zrGvZ9vC9VsJVu553be6X5aS\nOAcxABHh6o0Ey3e9bl2mWOC6cVcSw8XBfBqGR465tTqJZhAvsHce3pmahz+ijKUXxw9REeRQbEuA\nxBCx8EkZJT8YieB6IZXZFDMbjYHuIQDbV7Ij243Nrdb6Gh6n6z6NfOL4hl1k7PZijUKCmc16XzQ0\nTvQZ/xyTstTe5jte+GWWM0v44nC9tUE6bJ/4vNmczYtekqJeizqCAUK7qVTKAZmMPbQu8jTJZG2e\neDpFeTcg8JV01iJfsKcaCjacHGMoHwd61Ha81Aj9zUeFSMnUvKFlLPm94WUsvQSuPWAkodPqagol\nEF7KGVFmo/gJm3bawQ60K9IgCs2sy9a1XJ8gQC+JZtBnJOPzxT05q60gVk86RSLbYv1mgfkHta6a\nUOhabF7Pj6yVfflf3eNLZ27zuTe/l50tIZmyyGQnq1e0ibjdWJ3Ke+jFsuL+j61mxAvPtdFOhi/q\nM7vgML9wtolorivML5rkt4uMMZSXHNuPi8utsKejQ9Jh41bh7AUBVEk24/XMWIc0ObHai3SfaoNY\nY7Q6ihxrqCi4CpTnJgg5j6Aylx4o0YgEGvlEVy+1vJChMpfG8UNCx3po4lOqPtglBWIjm6r7p24o\nAby0y4MnSzh+bCgD1xo62dpfl/zId3yCn3++TRDEMm77IcVbTySn1vbqJKgqy3fbHJZU3tkMyGSs\nqZWKGC4HFzg10TANYi8gzmIVYk8k0Q4objXOdiCqzD+osXi/QmGnRXGrybXP75GpTBZOU9vCH5K4\no8Se2TjsXMlSmU0TdnpatlM267cKJ07kgdiAVEupbr9JJa45PNwsWi3BTzpjZQerLUPLcFRO3hpr\nIkQIEnacrDXESL78r+7x5fNP0PyFP2Rj1cf3DrRONYpbUW0MSaY5LlGkbG34fO6zLT732Rab6x7R\nETWavTQbEcPmVaqwt2NKMwz9nKuhFJHXisifishzIvJDQ7aLiPxUZ/snReTLz2OcjyoSRiSHFJdb\nCtkJDdRJSdd80jXvwGB3xjG3WhspGj6K7avZriGCg+bHuyOyNgcQobyQYfnFs9x7yRxrd0pTKw2Z\nW62R32t13yfE66eTvsde6vnR5SKNU1ojPA5vfHELffZD/NEHbKqV4cZm1OuToqrcf6HNzla8thf4\nyu52yL0X2ugYtRVRNLqk9DSaMHvi8PHiF/C+a3+BX7/ytaykF6d+DcPpcW6hVxGxgXcCrwGWgWdF\n5P2q+ume3b4JeLrz75XA/97533BCRqrtnBLZymCrqXggQqrh05xARN1Lu6w+USK32yLhhbRSDrWZ\n1PitoE4JxwsH1hKFWCc1t9emeszQbuTE64ELD6p9r29ey0/8niWMKGw3yVbjcp5qKXniZuD74dZn\nXv3JM2u+3KhHtNuDwuOeF+umPqxLRzpjDa1VFIF8cbphV18cfunGa6g5GULLAVVW0lf4yp0/5uXl\nz071WobT4TzXKF8BPKeqnwcQkfcC3wL0GspvAf6NxlPE3xWRkohcVdXpr/BfQtS28FI2iVZ/cknE\n0V7KqYxlpA7pUVLcowkSNntL0xUVPymJVtDt49iLpZBq+lQ5/hpoK5fg/otmSTXj0GUr7U6sCyuR\ncvVuGduPusZ8ZqNBshkcO3u2ayS/+5MH15G4wL5eGyyDSaWFtRUP31eyOYvijHOsNctWM2KIeA8a\nQbMRPtRQ2raweNVhY7VH9MCCVEooTNlQfqbwxIGRhDiELQ7Pzr6Ul1SfJ3kCEQXD2XCeU/DrwP2e\n35c7r026DwAi8iYR+QMR+QO/UZ7qQB9ltq7miCwh6jyLIoEwYbG3cPLElUmoF5PD5e6QuIbvEhC4\nw6XZFPCn0KIKS2hlE7SyiWOJp2cq7T4jCQfZs4433XW5pWsutnMgEL4v5dZqKuW9kEY9Ymsj4IXP\ntQmDyadKbkKGio+LMHaD5NKMy60nk5RmbPIFmyvXXG7eSU6UmTsOdzPXD4xkD7ZGbCRnxzqH1471\nX6uV8FRCw4ajuTRZr6r6buDdAPmrT5tvUocg2VHbqXg4foiXeojazmFUcfyI0JaR5Qvj0Mq4VEtJ\n8nv9a6Ob1/PHeuifCp33CqOzOo/CS8WJLu6h8pBYSCA18rizIjVCYQfidmqTKCo9LNzquhZPPp2i\nWglptyISSWFzbVCQPAyUnW2fhaXJ1lpzeRtLfA6bdxEoTKBqk0pZpK6d7jpvOmzRTf3tIRIhFR6t\n7auqbKz5lPe1X2P9BW7eSZJKm1zMs+I8DeUK0KtwfKPz2qT7GB6C2taxHtTZvVasTapxS6Z6PsHO\nldzxykpE2FvKUSulSdc9Ilto5BInMr7TJNH0WVipYYWdOkHHYvNGfqQAwFBEuvWGqaYfS9I5FttX\ncv1GSJV0PdZJDVyLRj558lKdSEl2lIq81PA62cCxRnaIGUdh50C39W18/NXOQ9cjLUsoluL7125F\nKMHAPnH3joiFpYdefuDct55I8mDZ6wqLuwnh2o0E1gUoP+nlS8p/xt3sdYIeQykakQ2azHu7Rx5b\nq0aUd8ODCUanOmr5XpunXmyaQJ8V52konwWeFpEniI3f64FvO7TP+4G3dNYvXwmUzfrk2ZCq+8yu\n9zcbjsXPa2xdP77MW5C0qSbPNuz7MKwwYul+BatnzUv8iKW7FVZeNDOREYsci41bBawwQiKNDVDP\nw0wiZeluGdcLu3WtMxsN1m4VCY4peJCuesyvVgEBVdQSNm4U8NL9f961UpLCbqsvkWvfmLcyox8F\nw4TNJ8WyGF3/esyodCJpceepFEEQW4+zVtUZlyvtbb566494Zv7LEI1QscgFdV63+tsP7UhX3g2G\nJh1FURzGTmcu5nu+bJyboVTVQETeAnwQsIGfUdVPicibO9vfBXwAeB3wHNAAvuu8xvu4UdhuDITp\nLI1LHawgOvcM02mSqXgDD/G4w4ceuwF1ZFvxt/oQxa0GrnfQiUMUNFTmV6us3SlNfB3bC5l/UO2c\nr3PSUFm832/kbS9k6V6165Hs4yVtNq/nOp1AQvyEFWcgT9lTcRMWyZTQah6SDhSYmTuhEP0ZNTc/\nCV9U/TxP1+6ymZwlGXnMeuWx2raOkAWOc8aO2WIkDJVaJSQMlUzWPjKEe7AvZHMWydTl+bufhCO/\noSJSABZU9XOHXn+Zqn5yxGFjo6ofIDaGva+9q+dnBf72Sa9jmJz9tbrDqIAdXi5D6fjh8O4YEdgj\n7sNxOawIBB2d2VaIFUYTtycbJvAOsYJRr5FfWKniBNFA9nO1mGRhpdbn4Ua2xdrtAqFr94dbf+1k\nBu36zST377bxPUVi55eZWXuiThnVSsjmuo/vK64rLCy5j0ynDVdDrrU2JzqmWIql9obZxOOsUTYb\nYSzCrvH9FwnIFWyuXncHwriNerwvxJOrrY24y8rS1cF9Lzsjv/ki8q3ATwIbIuIC36mqz3Y2/yxg\niv8vMe20g+MPaqqiU8rgvEC0Mm7cm3JId4z2ESHJi4B1yPj1beuo1Nh+GBvCw9uB0lYcOej1cCWI\nuF9B8FsAACAASURBVBPs8a/efuNE4dbDOK5w56kk7ZYSBEoqbU3kDVbKAWsrftdo+J6yuuyh110K\nxYv9OR2XQsmmvBf2GUsRuHI9MbFwuqqycs/r81LjNeKQat7qu4caxfv2JV8Blb249OZh5TeXjaOm\nJH8P+ApV/VLikOd7ROSvd7Y9XtOJx5DyfAbtSLztEwnszWdON0tVlWTDJ7fbIlX3zqSDbSvr4iWd\nbgkNxO+1lXGnrqNaLyT7rgMdQfaUfaxm161cYuB83W0dST85wim2o8H2WQJE95X2x37jxF7kYUSk\n06DZnjhkurU+uF6nGr9+0QhDpbwXsNfpCnJcRISbdxJcu5GgOGMzt+Bw50XJY3nRreZo2b5uVm2H\nRmNEREnjddPHjaP+Cuz9xBlV/X0ReTXwqyJyk5HL8obLQpCwWb1TpLjZINX0CR2L8lya5ikKFUik\nLN6rkGgf/CGGrsXareLphnpFWL9VIL/bJFf2QOKQZG3mZIo1wyjPZ0g1/LiEpBPqVEvYOmbBfzPr\n0k47JJtB1+BFEuvL7mfaBgmLyJKuh7nPvoEdqtIkQuOXPs5FmhP7IwzOqNdPQqMesr0Z4HlKKiXM\nLbqkxlyf2/d899nAZ2HJYWbuePXCIkKuYJM7YYj5qLt0BvPRR5qjDGVVRJ7aX59U1VUReRXwPuCL\nz2JwhvMlSNhsnyDDdVKKmw0S7aBfAs6LmFursXmjcLoXt4TqXIbq3Jh6sePQGyvbf8kS1m4X4+SZ\nZkDg2jTzib7M2kylTXGrgRNEeEmHvYXM6MbYImzcLJAtt8lW2qgItVKnqXPPPtvXciwsV+PQKh3h\nCdeilXLIVfpD7KIRi7VtPvPB0UZSVc98ncpxIBjizDhTjrrWqiEP7h+EHWu+Uq+1uflEkvShdcHD\n9yEMtC88vM/mekAmZ5NMTnfCt5/QM85nkU5bw4SjEIHiTL8RTmesoYZVBAqlyxnmPoqj3vHfAiwR\n+aJ9/VVVrYrIa4lLOQyGqZIbkeiSrvn7mQf9G1WxQo07aFwU0QLimszZtTqJdogKVGdS7C1kDsYv\nPQo7h8jtNvsaO6eaAYv3K6zfKowWbhehXkpRL42ulW1lE6w+USK718L1I5pZl0YhiahyM92mtRvR\n8mycyMfRkFdt/v7Q85T3ArY24nCi7cD8gkNpdjxPqdWM2NzwaTcjXDf20iZZ65pfdFlf7TdCIjA3\nxV6OqnGHk2Eh3s01n1tPJFGNu5bs7YREESRTwtJVl3TGplYNh8oYqkK1HJJcnI6hjMJYiKBSjmss\n0xmLpWvukYZYRLh2M8HKPa87JhHIZK0B2T7LimtSH9zv3zebt8jlL08i37iMNJSq+gkAEfkTEXkP\n8ONAqvP/VwLvOZMRGh4bjhJq3w9T7tMrhgBQLSXZW8yee0Nqpx2ydK/SlxyT321hB9HD9VRV+f/b\ne/MY2bK7zvPzu0vsS0buy8v38r1XizFtCmzaLDYNNqanMUwZhkUzw1JikNyIHoaeBoER6pFm0aig\nNQgjzWaMWm5h1BjjHlcPNrRtKDymwC7b2MZ22VXlqrfmyz0zMva4y5k/bkRmRsaNyMjM2DLf+UhP\nLyPyRsSJkxH3e3/n/H7f38RmJbQsJ7dRZv1a9lxjcyMm+dlDf9ymu86n/pt/4FZyia1ojqxT5Gbx\nLrZqD9328y7rq4ci4rmwsRYcd5JYVis+d16tHT7WU6zerTO3YJPN9RahZHMWCsXWhovncijUPT6+\nF5TqvJRbrQT7dmurDoX8oQlAraq4e6vOtRvR4L4On+N+Ws/dvVOjVjk0ha+Ufe68UuP6o7Gue7/J\nlMmNx2Ls73l4nk8yZRJPhDfUTqVNbjwaYz/v4nmq67GXnV4+Yd8B/BbwHJAG3g+8aZCD0jyclFM2\nyWPLgAqoxayWpcl4od5mhpDeqyHA7lxr38d+Yng+ufUSiUJwlV1OR9idTbbsn2Z2Km2C3/RT3XP9\nrg44QXPt8JOpXRtcj0QTxc3SPW6W7nU9bmujQzLNhnuiUG6ud4jS1h0yE2bPJ9+JnM1Ezh7Y0q8I\nB6UrxzEtwXVVi0g2UQq2t1xmZsNPqSKQzvRH0KsVv0Ukj44hv+OeGGFbljA53dtYLFuYnL4cXszn\noZcY2gEqQJwgonxVqTDffo3mfOzOJvEso8XA3TekrelxdivcDCG1VyM0ra8fKMX8rTzJ/fpBOUVy\nv8787XzLWTVSbe//CUH3lJOMx/0u1muu3b/lriee3Avt+nESTj18bj3v5OL3ZjR2HN8PHn9aBhXV\niAi5SbNtYUIEJqfNgxrQMOpVHztiMDVjtRwT7OsF0Vg/qNf90DEoBdWqPjUPgl4uK54HPgz8Y2Aa\n+L9E5MeUUj8x0JFpHjp8y2D1xgSJ/VrggxoxKWajbX6wltv5ZGB6Cm8A+5XxooPptdYsCmC6PvFi\n/SAbuB6ziNRCahaVwjnJdFyE/ck4mZ3W5VdfgmzZ83LUiu4LHz3Zq/U4kYhQDxFL0zpZuCxbDjxZ\n2x4/Zlte03M2vg/5vcP9xsnpYIk3uCgIf1zTtWZqxiaZNtnfc0EF/S3jif7VHUainXtpaqP0wdCL\nUP68UuqzjZ8fAO8QkZ8Z4Jg0DzHKaCSmdDmmHrOIlZw2MVIieAOyM7Nrbmg9oiiI1Dwqje3H/ak4\nyWNuOb5AOR3tqcQlPx344DaXcH1T2J1NUEmfvcNFP7xaIRCQB/dai9BFgiSbEx87Y/PgfvtjJyZN\nZIwSsSAQ/bnFCNNzgTGCbctBcb9lQSZrHiTRHD4GJmcO5zUWM4jND6YrSSxmEIsbbY49YtDzfq/m\ndJw4q0dE8uh9OpHnMtOwPzsoN8jGqCXHZ59idybBfDkP6rDKzxeCHpsDWpJzIybKaC/eV0JLpOhG\nTNavZcmtl4hWXHxDKORiBwLYDfE8Vr72ItdefJFqLMbLT3wLWwvz53pPTZEs/Kun+Zs/EWq1OtFY\nUPB/krNLyYzxjdRV6obNlfIac5ltFq5EAgu5usKyhelZ66BDSDfSWRPXs1pMA7I5k5m5/nyuVmMz\nfD19HdcwuVm8y0rpPuEFDr1jmhLaVHpu0cayhb0dF88LmlHPLUT6XvrRjSvXgr/D/l6QeZtIGczN\n2xfC9/Yioi8/NK0oxcz9ArFS0LtQESSi7E/Gyc/0scbwHDgxi/VrWSY2grpL1zLITw/WDKGcjpDb\nMBA/WH6NVkpEy0UKEznKqdbIod4Y32kQz+M/++M/YXJ9A9tx8EW4+cLX+Nz3fg9fe8P53CLLqwX+\n7L0u1XKzLaKHaTpcux7r2HHjVmKRj899FwCemHxx4jWslO7xVj59Zm/V3KTNRM7CdcE0ObUFWyee\nz30zX5p4TdDGSgzuJBZYrGzwz9Y+NRC7BBFhetbuKZIeFIYRiPPcwsiG8FChhVLTQqzsHIgkNLpo\nqGApsJiN4p2iue8gqccsNq52NiGIlp1Gpw6fesxkbzqBcx47OgmMAqbv7/GGv/44k5ur+GYgnDNr\n38Lzb33LuSK/la+9eCCSEOxpGq7LG/76k7zyza+lHjtdP9GjyTp/dqdGpXj4O+WD68PGWp3F5faL\nC0dMPjH3nXjG4Xy5YnErucTtxCIr5dWzvUkCkbH7qC9FM84XJ74J70ivLtewWY3Pcjcxz9XyWv9e\nTPPQond+NS3Ei054PaOCubv7LH99m8Vv7JLMV4c+tl6JF+rM3t0nXnaxXJ940WH+dp5IxTn5wV3w\nbIObX/0Mua1VTN/Ddhwsz+PRL/4Dr/n8F8713Ctf//qBSB7FN0zm7t491XMdFUmlFMVCePJTp/sf\nxGdCPwOuYfNieuVUYxk09xLzCO3vwzVsbiWWRjAizWVEC6WmBb/DJ0IA2/ExVPD/5FqJ1E5lqGPr\nCaXIHauxFA6L9s+D4bpcf+FrWMfqGWzX5bWf/dy5nrsWi4ac7gOcyOCWlMMIRDJ8f69TneeoiPjt\nSV0Q2PBF/PNdGI0Dvq9wHXXm3pOa/qCXXjUtlLIxMjvVri450BCerUrfjcNNxyG7s0MlmaSSOr15\ngKjO5SOR6vm6HliO01EoItXzRdgvfusTXP/aixjHzEw9y2J9+UpPz3EQSb7lSwelHyJCOmNQ2G+f\nk04m2wvVjdC/qeU7PF58taexDIvl8oNQTTeUz+OF8RrrafB9xfqDwAEIwDBgdt5+KH1WxwE965oW\n3IjJznySybXSQUqp+B16SCiF6Sq8Dgkhp+W1n3meb/vUc/iGgeF5PLh2jU/+5z+EG+09zV5J8C9M\n6Lu54vRCPRajnE6Tzudb7veBtR7FrBNbi4t8/nvezOs/+f/hm4GAeZbJx37ix1BG93GHCeRRZhci\nVKs1XFc1knkCd5bZ+fDNQkv5/MDa3/Cf5t8MKHwMBMWjhdssn2HPr1rx2d50qNUUsVhQkB/tsRPH\ncZRSOHWFYQqWJdjK4+1rn+Sj89/T0EvBF+HNW58j5xTO9BrjwNp9h2LhsATF8wLrPMsWEsnWCxzX\nVVQrPpYlRGPyUFrMDRq5jCF9euFR9Yan3j3qYVwclCJedDB8n2rcxouYiOcTK7soCZr7Rqvt9im+\nwN1HJ/tiSH71xZd48599BNs50mLLNLl34zrP/ug7TvVcExultkbMvsDubIJi7uQyjW4s3LrFWz/0\nYQzPw1AKzzDwbIs/+5mfYn9y8lzPDRCtVJi7e496NML68nJHkTysjfytnnpGNvcq6zWfaNQgmT7Z\ns7NqRHgleQXHsLlSWWOqnu96fBjlkse92+31k8sr0VM71RQLHmv3DxsPxxMGC1ciWJbgYbAan8UT\ng4XqJtELvOzquYpvvFgNNRVIJA2WV4Kl+MCc3WV32z2w3bMjwvK1aMds5n6hlKJS9nHqimijrnPc\nedOX/+xzSqlvP8tjdUT5kGNXXebu7gdLio0vZmEixt6RIvc9YOZ+oU14CrlY37p2/KNPf6ZFJAFM\nz+PKK68SqVSox3sXuL2ZBOIrUvnawX35qTjFLt01euXBygof+en/mm/+zGfIbu+ysbTIV9/47ZQy\n/WkDVovHufPYoyce99RjVdTzHztRJH1fsbPlkt/1UEqRyphM5Hozto75dV5beKXnsYdxvNsHBCf0\njbU61270/veoVv2W1lcA5ZLPvds1Vm7GMPFZrlyODFfXVaEdSKDVRrBY8NndDupSm/NSrynu362d\nam5Pi+cq7t6qtbg0xeIGV65F+lbyM25ooXyYUYrZe4XAjPvI3em9KrWEfSCU1VSE7fkkuc0ypqtQ\nQlBX2UMRfa/ES+FePL5hEK1UTyWUiLA7n2JvNonZMCJXp/gCi69I7teIlhxc26CYi+HZh8tdu7Mz\nfOqHf6j38fSZJ57c4/XT1yn/9gc46St8/06dSvnQwSW/61Eu+qw8Eh34SU0p1dG2rlo53UrW3na7\nITsEwlCr+mdeyh1H7Ih07EByNArf6TAntarCqQe+s4NgbbVO7djftVrx2dpwmB2QG9Go0UL5EBOp\nehjH/EuhaTBebbFNK2djQf9CXwWi0+d9kAfXrnLzy1/FOPbN902DYvZs0ZoyBPeUdZ/i+SzcymO6\n/oHhQma3ysaVzLndiRL5KhNbFSzHx7UN9qbjlLO9X/mf1oquUvFbRLKJ6yoK+15PjjrnQUQwDA6W\nSo9inrIcN8xjNngNcB1FdHAB1NAxDGFqxmJ7022zqJs6YpPnex3UVMDzYRB2CJ3KjZSC/T2P2fkB\nvOgYoIXyIUaa3VhDLkuNsC4cIqguHS7Owxe/+7u4+uLLWI6D6fsowLUsPvPWt6BOe1Y9B9ntyoFI\nwqHhwvSDIvdvTpz5AiGRrzK1dli2Yjs+U2tBFH2SWJ7Vq7XWoWOHUkH/wuxEz8M/MxOT1sHyYBMR\nyE2d7tSTTLV7m0LwXqJd9scqZZ+d7cByL5EwmJy2B75/1w+mZmzsiLC96eK5injCYHrOJnLEJi+V\nNtitt7f8EiAa7e09nnZ+uqW0DKpxzzgwEqEUkUngj4EV4Bbwk0qp3WPHLAP/DpgjuLB/j1JKZ+j0\nkVrMImyNxxcoZYa7hFLKZnnm536W1/3dZ5i/e5diJsOXv+ONrF9dHuo4EoV6WwsvCHpRWo5/6gi1\nycRWeEPmia1KR6E8r5m5HZHQ6yCRoBPIMJietfA8xf6edzCWbM7suR9ik4mcxe5O0LC5SdNUvZO/\n6X7eZe3+4R5preqRz3us3IgObFmyn2SyFpls53manLLZz3t47uHfWCTwou1lD/os82MYQiwuoUvn\nqdR4uHYNglFFlO8CPqGUelpE3tW4/evHjnGBX1FKfV5E0sDnRORjSqmvDnuwlxZD2JpPMf2giDTy\nB3yBetSieIolwX5RzmT49D99W3+f1Fekd6uk9oPEnmI2GiQhdTiRdNvLbP7OcH1yGyUSRQcFlLJR\n9mYSXR9rOeHRXaf7+0EiaWCagn/sUj/ojzicr76IML8YYWYuKOuwI+FG4ydhWsLKzRjbmw7Fgo9p\nBlFpJht+clZKsRGSSOR7QaPphSunvxBsVgiMS/lFc072dl3KxaA8JDdl9ZSBepr5qVV9NtYcKuVg\n3tMZk1ojC765KGWYMNOh3OgyMCqhfAfwfY2f3wc8yzGhVEo9IGjrhVKqICIvAEuAFso+UslEeRCz\nSO1VMV1FJWVTTkcG1oVjqCjF3N19IlX3IJqb2CwTL9bZWM6EvsfCRJTcRmtjaAU4URPPMhBfHexh\nNh+d2qsSqbisXwt/TghqOMOMEDrVdjZrI5973R9x1q+piLB8PcravTrlxjJsJCIsLEWG3mXCNAUz\n3ttrum4w+cfHaFm9G4G7jgrdG4WgZOU07OddNtddXEdhmDA1bZGbss4smL6v8DyFZZ2/5tE0halp\nm6np0z2u1/mp133uvFo7ONZ1YW/XI50xiUSDHqOxuJCdsDAGtC0zDoxKKOcaQgiwRrC82hERWQG+\nDfh0l2PeCbwTIJqZ6csgHxbciMnebHLUw+g7sbLTIpIQLHdGKy7Rikst0X4FXJyIEa24JAr1g/s8\ny2BzKWg4mdivtSVAGQoitc7PCUELsMm1UluJzd6xzOGTzANOi20HYul5QWaSOcZtmOo1n9V79YNM\n2UhUWLhytvZV3U7ap5mDoHbzMPJqRlxKBfuIp0E13Hb2G247YsDMnMVErv+RmOs0eml2iOB7nZ+d\nLbdNUJWCwr7HjcdiD01br4EJpYh8HAjLgfrNozeUUkqks2GaiKSAPwX+pVJqv9NxSqn3AO+BwHDg\nTIPWXCqiFTfUoUcaYhkqaiLszKdw7ArxUh3XNtmbiR+UhxwX3qPYNa+jUJayMWjsSVquj2sFWa+l\nM9R2KqWoVoKoJB43ejrxn2W5c5j4vuLOqzWO2ujWqsF9Nx+LnbqUxTSFZMqgVPTbEokmT5FItLUe\nXge6s+UyOX26qHKtYUnXfD7lwcYDF8sK+oP2A99XPLhfp1TwD/aEc1MW07OtY+11fqodEsJEggsb\ny7q8+5JHGZhQKqU6bjaJyLqILCilHojIArDR4TibQCTfr5T60ICGqrmkeJYRamenBLwOwmF4PvNH\ny0OqHoli/aA8xI2Y+EKoWLonJIiUJmKBMDY3do5xtOtHJ+p1n3u36riN2tcgsrFOHd10Y9dOsx6b\nJuFVuVJeO3cD5F4o7HuhWZPKh0LeI5s7/alqfinC6t2gjrQpGpPTFukO+5ph1J3w9+6roOyl14Rs\n31MtItlEKdjedPomlOsPHEoFv8WEYHfbxbZhYrL1M9LL/ESjxsF+5PFxX4SEqH4xqqXXZ4CngKcb\n/3/4+AESXP78AfCCUup3hjs8zWWglI4EHUOOnJ0UoEQoZ8I7cmROKA8pZqNktyoodWjSoAhacFU7\nRJNtHBPJXpdblVLcu13HaZy8m+9qe9MlFjdInjPrUAHPzryRb6SWERSiFLbyeHL1L8k6xRMffx5c\nJ/ChbRuT4uD9nhbTFJZXojh1H9dVRKLGqSPrSESoVUPKp4zgX6+4nWoeOfv7O47vdxbjnW2vTSh7\nmZ/JaYvCvtcWdSZTBvYFKLPpF6O6JHga+AEReQl4W+M2IrIoIh9pHPMm4GeAt4rIFxr/3j6a4Wou\nIso0WL+awbENfAn2BF07uK9ThupJ5SHKNFi7lqUWtwLRBSopm7Wr2VMlQD3x5B7PPh3nI/7vUX3L\nh7pGkU1q1aDlUtv7VLC3c77OKAAvpld4JbWMZ1i4ho1jRiibUf5i/s3nfu6TiMUNJORsJMK5fUTt\niEE8YZ5p+Xlmzm77s4rQtpR54hhs6fjxiPfJJ7VTcg4Q7FF3oNv8RGOBNV2znCjImDbPlDV8kRlJ\nRKmU2ga+P+T+VeDtjZ8/RYemFRpNr9RjFqs3Jg7KMFzb6CpovZSHuFGT9WvZYP1NOHWG8P/2Kw94\n5JNf4a8f/xp2pPevoO+rTv4QeKdL5AzlK5lHcI1j4xGDfStJ3kqRdQcXVSaSBtGIUKuplprASDTY\nSxsVyZTJ0tUIm2sO9XqQqTo1Y516KVhEmJ6z2FxrN1+Ynu3PsrlpBv/ckGumxCkN6FsemzS5/qh5\n8Pkbl/KYYaKdeTSXH+ndyq5zeYjVXspxBq/U2bv3eOHb/iNf2ani13wiUWFxOUKkh/2eWNwIFUmR\nwKXlvHgSPkeCwjMGm7TRLGXZ3nSDrFAFmQmDqZneiucHSTJlknzk/O8/N2ljWQbbmw6uo4jFDWbm\n7L751IoIc4uRNvN4w4DpufOL8WU1PO8FLZQazRFaykMa5wXPNNhcOn0T6eO84bvv860/9SGc0mEL\nqFpVcffVGjcei50oCIYhzM5bbByJSkQCB56JyfN/lW8W75C3U3jHokrb98idocXWaTEMYWbOZqYP\nJ3XXUWxtOJSKHoYp5CZNsrmz1z72i3TGJN2hYXY/SKVNllei7GwFEXA8bjA5Y/V0IabpjBZKjeYo\nImwvpsnXPaIVF9cyqCWscxkwNK3onv8nH+Ar5faNJN+HUtHvKfNxYtImGjPZ23FxXUUqbZDNWX25\n2n9d/kVeSS2Tt1O4ho3hexgo3rrxtxdqD8R1Fbe+UT1cjnYVG2sutZpibuHi7q15nmJzzaGwH7yx\ndMZkZs5uKw+KJwyWroYnq2nOhhZKjSYEN2Ke2de1ydFyj+eAtfsSunSqFKFJOp2IJwziif6f8G3l\n8aP3Ps6rqSvci8+Rcss8XniVtFvu+2sNkr2d8CL5/K7H1Iy6kEXySgU1pUfbluX3PMpln+uPREce\nKV92tFBqLh3iB0VkyhzdclNYz8hE0mA/JH0fWvsMjhITn0eKd3ikeGfUQzkz5VJ7lxEIFgVqVR/r\nApp3l4p+aBmJ6wZtrwa5nKvRQqm5RJiOx9SDIrFykPZXj5lsL6RwosP/mD/1WBX1/Mf4wkcPXzud\nMdnecnHqrZmdqbRxqRoPd0IpRaXsU60E1mqptDGQSCgSESohQbBS7f6xF4Va1Q+vM/WD342bUB51\nj4rFjQs77020UGouB0oxf3u/xaw8UvWYu73P/ZsTQ4suu5kHiCFcux5le8ulsO9hSNByqh+JOE08\nT7Gz5VDY9zEMyE1aZCbMvglScAL0qVUVkagQT/Qmdr6vuHurRq0aXCSIAaYBV6/3v+VVbsoKjdyj\nMbmwFyR2RBCDNrEcZsu0XikVXR7cc/D8w/q+MBu9i4QWSs2lIF50MPxWs/LAVUeRzNcoTsY7PbRv\n9GJBZ5j9y+w8ju8rbr9SC1xuGiKx/iBojzS/dP49Td9T3L1dO3SqEYjYgbvLSX6z2xsO1ao6sBNS\nPrg+PLjvcPV6fxNPojGDxeUI66v1g4SeRNJgoQ9zMCrSaZNNw+F4AxrDhNSYRJNKKR7cD/xsD+5r\n/L+7HbhHjVvk2ytaKDWXAsvxIGRpylBgN8wGslvb3Pzyl4nU69x55BFWr6+MXTsx5SsqFf/AkeY0\nV+D5PbdFJCFYbtzPe0zN+OeO3DbXnYOIMHhyqNWCjhiLy91FKN+ojTxOpezje6rvLZpSaZPkY7FG\na6yz9cAcJ8QQrt6IsbZap1wMPs+JpMH8oh2a8dxc5i7kPWj0H+2XA1An9vc8ivvhzhdKwe6Oq4VS\noxkl9ZgVhJDHG9EK1GIWj37xS7zxE3+F4XkYSnHjKy+wunKNZ3/kyVCxXLh1i0e/+A9Yrsurr3kN\nt77pcVSIuecTT+7x1GPVvrTGKhU8Vu8F7b0UgZ/B0tVoz4k+5WJ4EgsClcr5hbJTIlLgBaq6i3qX\npN5BWa6LCPaYLUueB9sWlq9Fe2ogvbHmkN89/Hvldz0mp62+uQCFsbvjhn/+GvhdbPTGHS2UmktB\nLW5Rj1pEaodtsBRBBxE34vPGT/wllnt4tWs7Dou3brP88je4++gjLc/1bX/9Sb7p83+P5bgIMH/n\nLje/8hU+8eP/xYFYNmsjy7/2e3zho9a5e0e6juL+MUcVD7h3u9FmqoeIqJso9COZottJ8CTSGZO9\nvfaoMhq7+NFepeKzs9ko8E8YTE4PtsD/pFWGasVvEUk4bA2WyZpEztDfsxdO+nxc1GgStFBqLgsi\nbFzNkN0qk8zXEILuIfmZBMsvv4xvmATSc4jtOKx87estQpnM7/Paz34ey2sV1dn7qyy98ipT/2rq\nQCCf++cW/foK5ffCTc0VUCh4ZCc6v47nKbY3Hfb3wpe9LFP6Un6STBkUC+3r24keEnqm52xKJf9g\naVgkSOi56ObaxYLXYhlXr3kU8h7XbkQHJkgnUdjvHNmViv7AxpXJmmxvhr+2ZdPXpLVhc3FHrtEc\nQxnC3mySvdlky/1eh6aBPuBarV+BhTt3gqjRaxfVK9/4Bj/5WLKt7KMfeJ4KP7kp8LsYnjcTeBxH\ntUVrIkHEtrgc6Uu24exChEq5iu/TInZziycv55mmcP1mlELBo1rxiUQM0tmzdfQ4D0odEepzzolS\nivXVetvfzfeD/dxRueN0c2ka5JZ8bipoyVWvtX6WszmD2blI3/ehh4kWSs2lZ3XlWuj9vmXxweTJ\nogAAIABJREFU8re8ruW+ejSKCjmbeIbBxOukzUSgXyRTJns74XuAiWTnCKC47+G67SIJsLgc6VtD\nYAj2yG48GiO/5wblITEhO2H1LHZiCJmsRSbbtyH1jFKKvR2X7U0Xzwu6bEzNWuQmz75n53mdu7aU\nQ6wKh0W6S2Q3yAxZwxCu3YhS2PcoF30sW8jmrEvRt1ILpeZioBSRamBWrkQoZaM9W8z5lsVf/tiP\n8tY//Q+AQhSI7/Ol73wjm0uLLcfeu3E9VCgjNvxc5Ks897qXGMTXJpE0iCcMKuXDhByR4KTXrfav\nXA4vRBc5nS1erximkJsaXELIoNjbddlcPxQPz4PNNRdD5NQts5p0a9w8yn3XSMRgdsFi40FjOb+R\n5Da/ZA+88F9kdBdDg0QLpWb8UYrJtRLJ/RrSONFldirsziYp5mI9PcX68hX+5Bd/gaVXXsF2HFZX\nrlFOp9uO8y2Lj//kj/H9H/wPGI1wIWp6fPe7VvjGB1b79paOIyJcuRZhP+8d7DVO5CxSme77SZGI\nhPeoFLAuwZV8vwiLsJSCrU33HEIppLMmhWPZwCIwOdX9Is73FOVyUAaUSBhIn1tYTeRsUmmLUtFD\ngGR6+MvclwktlJqxJ1p2Se7XWnpEioLcRolyOoJ/vE9kB9yIze3XPH7icVsLC3zgX/wCs/fuY7ou\n//2/sbm5cYuNAQolBGKZnbC6Ju4cJzNhhYqAaTDShsfjhFIKLzxX6txR99yCje8pSkX/4IKl2dKr\nE/k9l/VVJzieIOBbuhohkezvsqhlyak+S5rO6FnUjD2JwmEkeZx4yaGU7X/ShDIM1q8uA2Am1/r+\n/P3CsgJnnAf36jiOQgGxmLB4pT8JPJcBEcG2JdRU/Lx1loYhLF2N4joKx1VEIt3LXeo1n/VVB6UO\nVwEUcP9OnZuPx4bSHNl1FYW8h+epgyV//VnpjhZKzVARX5HarZIo1PFNoTAZo5o8oUSgy5dYDfD7\nfVgr+QH+ts9Zrv0kFje4/mjgQiPCiXZy/cL3VZC4UfKxxzxxY3rOYu2+07ZEOtsnK0HLlp6Wuvf3\nwhO2ICg1yWQH+zkrlzzu3W6YWijY2QpWHvqVGX1ZGd9vv+bSIb5i/lYey/EOllFjZYf8VJz96UTH\nx5UyUVJ71dCospLsf2LJUTOBXmol63WfUiFwgE5nzJF1ShjmnqTnHfOVlaCg/cq1/i4hep4iv+tS\namRR5iYtYmewYstkA0PurQ0Hpx50L5mZs/uaFdwLXgd3GnVCGVA/UKrd1EKpoLaykPfI6GXajuiZ\n0QyN5F61RSQh8GKd2K5QzMXwO3T4qMct9qfiZLYrLfdvLaZH2nMSYHvTYXvzcANsc81hbtG+9HtD\nO1tOq69so0LlwX2HG4/2ZynPcxW3XqniuYfLlIW8x/ySfabIK50xR+4Ok8qY5DtElYkB7ylXK35o\nGZFSQRNoLZSd0TOjGRrxktMikk2UCNGKSyXVeQk2P52gmIkSLzkogUo60lFYj2K4Pql8FdNVVBM2\nlZTdt6rratUPTaRZX3VIpkYXWQ6DQj7cV9ZzFY6jemr9VK/57Oc9fF+RSptte2U7206LSELw8/qq\nQzrTv9ZhwySRNEgkjZbm0iJBAtAgbe8052MkQikik8AfAyvALeAnlVK7HY41gc8C95VSPzysMWr6\nj2/KQZZfC0rh9ZC67kVMij3WTgJEyw6zd/eBIHJN7VWpRy3Wr2YCx/FzUtjrYhVW8M5cdnARkC7n\ndKMHAdvbddh4cDh/ezse6YzJ/JJ9IIDFQrgYK4KuJbHYxRNKEWHpaoTivs9+3g0ynXMmydTgI92g\nG03YmIK+qKfB91XQxm4IyUfjwKi+ye8CPqGUelpE3tW4/esdjv1l4AUgM6zBaQZDIRcnUai37DU2\njcvrsT5/FJVi5n6hbZk3UnNJ71UphPSnPNpP8jngpK9Ht8KC8xiID5tmNuhpEnEmcmZLAX+TSPTk\npBbPVS0iCcF8FfY9MhOHohFYnoUr5YhX3M+FSFB/mc4OdxlYJLAzvHenHiyVN6z8Uune+0RWqz5r\n9+sHPUlTaYP5xcjQEshGxag+bu8A3tf4+X3Aj4QdJCJXgB8C3jukcWkGSD1usTOXxBfwDcEXcCIG\nG8uZvptQ2jUP8dtPsoaCZL7Wdn8vTZePk85aHYc97CSRs1Cr+rz6cpVXX2r8e7lKrdqb9drEpEUq\nbTQ8UwOXGsuGpRP6UgKUSl7IskJDLI80/Z2cDJ/faEzO3TIsDN8Lyib2827HpJuLTiJpcvOxGLPz\nNtOzFssrURaXoz0tY7uu4u6rRxp3E0T9d2/VDlp/XVZGFVHOKaUeNH5eA+Y6HPe7wK8B7RYqxxCR\ndwLvBIhmZvoxRs0AKE3EKGeiRKouviE4UXMgTs1dy0b69HrxuMHEZKtHqwjMzFt9yUD1fUW5dNik\nt581dr6vuHOr1pJpWa8p7rzaW1uvIDqJUqv6VCtBRmoi2VsST9djjvwqlTHIVUx2d7yDYn7LDhyL\nSkWv59frhWYXkKYJAMphbsG+lMvnpiln6uSR3w3faqg7imrFJ54Y/4vDszKwT4GIfByYD/nVbx69\noZRSIu2J/yLyw8CGUupzIvJ9J72eUuo9wHsA0guPXu7LmwuOMoRaYrB+oW7ExLMMxPFbghdfoDDR\nP4OC2fkImaxPsRAoznn7/dXrPuWiT63ms7fjtfiJLi5H+raXFTRbbr+/uQTaq0BEY0ZXL9owkkkj\ndEVVhJZsYRFhZj5Cbjo4EZdLHns7HhtrzsHxV1aixE75+sfxXHXQKuvonKw/cIgnjYEk2TiOolTw\nECNYfbgI9nK1aocON9DoxTnc8QyTgQmlUuptnX4nIusisqCUeiAiC8BGyGFvAp4UkbcDMSAjIn+o\nlPrpAQ1Zc5FRCrvuoURwbQNE2FxKM3dnHzny7a6kIh2dfJSCbySX+eLE41TMGFfKa7xh9yukvEro\n8U1iceNMtX3H2Vyrs7vjHYwFgpZNTZruLf04qbqOCjVTV4pQB5t+YpjC0nKE+3frLfdPTluhfTMt\nK3C7aUbuR0/W927VuPl47FyRZaEQXsDYXAqemumvUO5sOWxtHJYUreOwcMUmnRnv6DWWEIqFkP13\nxakvli4ao/rLPAM8BTzd+P/Dxw9QSv0G8BsAjYjyV7VIasKIlh2mVwsYjX0lzzLYvJLGiVnceyRH\noljH9HyqcRunS9LQM5+a4tnZR3GN4JivZ65zK3WFn7j75yS86kDfQ6nosduhzdZRCvseE31YDozF\nDcSgTSzFCJaUB00ybXLz8RjFgofvQypldN133Ouw7KcUlEv+uSLtsAuGJn7IPvd5qFV9tjba38uD\new6Jx8c7ssxOWOw02pQ1EYF4wjh3VD/ujOrdPQ38gIi8BLytcRsRWRSRj4xoTJoLiOH6zN7dx3IV\nhgqSdSzHZ+7OPvgKDKGciVLIxUNF8nd+dY2/+rFPsf/WZ3jm2ckDkQRQYlAXiy9mTzZSPy+ditCP\nouife0siaRCLSst2rQhEozLwwvcmphmYducmrROTczo62tAadZ+FTubxQUZof2OJfJeSomKHyHZc\nME3h2s0Y6YyJYQQ9PXNTJktXT07guuiMJKJUSm0D3x9y/yrw9pD7nwWeHfjANBeOZL490hMCu7xE\nsU45E77MetzHdSc6hal8jp+qfMNkNTELO633l8se+R0PX6kDx5fzLP/1kjUo9K8jiIhwZSXK7rZL\nfjd419kJk9y0NZaF/OmMSbkYUlepuje27oVI1CA3ZbG77bYkZWWyJrF4f+ei25/5IiSO2nZQYvKw\nMd6L4hrNCZiNSDL8d72HGkmvghdWRa980k6p5a6mbV3zxFYq+OR3Pa5cO7uxdCZrUSrUO54sm0Xh\n/dwLMgxhasZmamb8GzFnsib5HZfqkYQSEZiZtfqyXBn4vhrk9zxQQcPsfmbVNklnTPK74asHqQGb\nDtSqPpvrDtWKj2kJUzPWwE3YLwt6ljTjh1Kk8rWDesfiRIxSJhJa1lFL2Ph71VCxPE1mbdotM1fd\nZi02jW8cnrAs5fPE3tcPbruOarOtUwoqZZ9iwT+zl2gqbZBIGa1Rk0A0CpGISTZnnjtyukj4vmJv\nx6Ww72EYQTnDlZWGo82+hyHgubC54bK54ZLOmMzO2+cqfI8nzIGXOMQTBpmsyX6+taRoerY/JUWd\nqNV8br9aO9iP9TzF2v3Ar3dyevwvlEaNFkrNeKEUs3cLRCuHvrCRapF4McLWUns5bSVl40RN7Nqh\n2bovQVeRbm4/Tz1WRT3/sZb7/un63/CXs9/Bvfg8BgpTebx583PM1bYPjimXOmdIFve9MwulSJAJ\nWi4FpSamKWQmHk7/T98P6jnrtWb0qKiU60xMmszOR0hlTF59uYrrHD5mP+9Rrfqs3OyteH5UiAhz\nizaZnEkxH9SHZiasgWeNbm84bUlLSsHWpsvEpDWUPpgXGS2UmrEiVnZbRBKCBJ14sU6k4lKPH/vI\nirB+NUtqt0Jqv44CihNRihOx0Oc/cOB5y5f4W+DoVyDqO/zg2qeoGBHqZoS0U8I4VvBnGHJQ/H4c\n85zBiIiQTJ3e99P3Fbs7jb3GxrLh1Mz4nfw8V1GrBb0ruyXvFPa9IyIZoFTgB5ub8qmU/BaRbOI4\nilLRH3tXJBEhkTBJDLFAv1LpvAHqOopIdLw+K+OGFkrNWBEt10P7TooKykDahJLAwKAwlaAw1b3i\n+Xd+dY3XT1+n/NsfoNtHP+7Xifv10N91yggN9hCH/3VSSnH/Tp1K+XDJdnfbpVT0uHZjPKIrpRSb\n6w57Rxx24gmDpeVIqANQJzN0gHLRZ3szRCUJyjzqNR/GXChHgW0Lblh9rBpeo++LzMO3rqMZa3zT\nCLWfUwL+GHyhDUO4ci2KYQY1hxJ4GzA7P/jlszAqFb9FJCEQonpdUSycs26iT+R33QOzAN8/3NNd\nWw0XPLvDlpkI5PMeTvjDEINzuSJdZqZm2n1zRYLVh3Gu3RwXdESpOTtHsxH6RCkTZWKz3P4LEcqp\n81vPHd+XPAvxhMEjj8col3x8PyhPGNXJploOtxVTPlTLZ98z7QWlgqXOStnDto2OJ92d7fYsT6WC\nukHfU21RZTZntfjnNhEDKqXO4m9Z0rfymctGMmUyt2izueYc1J1mJoIEKM3JaKHUnBrD9ZlaKxIv\nBpf21aTN9nwSzz7/Sdm3DDauZJhZLQTWcyroY7m5lEadQ4xau4Oc/2Pf3E8cNZZNuMOOgHWGRCCl\nAiN211HE4p19XA8SbuqBFZ6Ix+a6w/JKtM3Oz+/SicP3wTg2jdGowfySzXoj4gzM0IX5JZt7tzqX\n0KQzBp4Hlj6rhZKdsMhkTTw3mPNx28MeZ/RHSnM6lGL+dh7riNl4rOQwfzvP/Ru5vjREriVt7j2S\nI1IN2jHVO3UY8RWm5+NZRseotj1553KRSpsY4rQZJTQL5k+D4/jcebUeuOA0xCiZMlhcbq8P3dly\nWxJumh6sq/fqXH+kdW80kTJb2mc1MU0wO5yBMlmLdNqkWlUYBgfJJqbVYa8N2N0OTNOv3ogSPbIE\nq5RiP++xvxfskU7kLJLp/tdInpZ63Wd326VWDZpQ56ZOdig6LyKCpYPIU6OFUnMq4kUH023tyCGA\n4SmShXpHw/FTIxKauAOAUkxslEnvVQ+O3Z2OUwxpxtyJZuRUrQRZmKmMeSGvsA1DuHo9yuq9OvVa\nICCWLSxeiZx6OXj1br1NhErF4GR+vNbuaB3gUVxH4ToKO3L42tOzFqWGp2sTEZhb7G7QIIYQT7T+\nfn7R5v6d8KiyKdbrqw5Xr0cb9ynu3W5NdiqX6mRzJnML3R1mlK/Y3XXZbzgXZSZMcpMW0ofPSbXi\nc+fWYV1jpRzYGF69Hr30BuMXES2UmlNh173QrFRDgVV3gf61sOrExGYgkgclJEqR2yzjW0ZHy7qj\n+H6jAW0jIhIBYy04uV7EZJBI1GDlZizo+qEUli2njpZcV7U05G2iFOzteqcrSj/22pGIwcojMXa3\nHcoln0gk6ONpGILjKOxTFNonUyZXb0TZ2XJDo1SgIYoKEWnsobYnO+V3PXKTfse/t1KKe8eyibc2\nXIoFn+WVszswNVl/UG9bLvf9oLVXU+Q148PFOytoRooTNUOzUn0BJzqE6y6lSO+2O/EYCrJbIUlA\nIWxvugci2XhKPC9YNrzINOsTz3ISV126ZIRFb9kJM3S1245IqPDZtjA7H2HlZox4Qrh3u87dWzVe\nfanK3Vu1jqbnYcRiBotXIi29Ols48vKlQmez+XKXxKBKOVxgq1W/6+N6QSlFtUNdY6U8HpnKmla0\nUGpORSVp49pmSxm+ImhtVU4P3izZ8FVoRAtg9ejtut+hU0etpnDd8XSm9jzF2mqdl16o8NILFdZW\n66cSl5OwbMEKK7+RIEnmOLkpi1jCOBBLkWDP8STD7FLRY3PdbSkVKZd8Vu+e/iIlVKyFFoP6jjWC\nQtel6eMi2UT55xczEemYKN5R/DUjRf9ZNKdDhPVrGUrZKL4EkWQpE2HtWravZSKd8A3B63CCqx+L\naFszXU+mH6NXSvXUCeS0z3nnlRr53WCfz/eDpcM7r9b69loiwsIV+6AuNLgviATDTNMNQ1i+FuHK\ntQgzcxbzSzY3Hou1JNGEsbMV3maqUvZP3TB6es4O+mrKYT1rNCrMLRyOt1PkK0Ay3XmslhUuZiKE\nX1CckmyufVwiMDE5+kxqTTt6j1JzanzTYHshxfZCavgvLsLubIKptdLB8qsiMCTYnQ2ceU7KdM1k\njdAmyZFoh6iqB1xXsb5aPyjyTyQN5hbtvni1Fgs+Tkik22/LtnjC5MYjMfZ2XZy6IpEMaiM7JTmJ\nCImkSSJ5+PrBsmIgerG40fb+O0XsIoHF3Wn2K5uJTNWKT60W7H3G4q37s3bEYGHJ5sGqgxB8VgyB\npWvRrslb6YzJxprTXsvZKNI/LzNzNm7j79d0K0qmDaYvQCeXhxEtlJoLRzkbwzcNJrYqWI5HPWqx\nN5OgHrd44sm9E23qpmZsSiX/SA1gEJEsXDnb0rFSQU2hUz88q5ZLPndeqXHjsdi5s2lrVb8t8QOC\nZcBatb/eppYtTM+e7WTtOoq7t2qHoq4CwZlfsg/EK5k0qNfak3AUnNlvNBY32mo3j5LOWkRiBvkd\nFzEgN2lh2d0vYAxTWF6JBpnAjfdjWoFxfT/MJQxDWLoaxakHn8NIpLv/rWa0aKHUXEiqqQhrqbMJ\nm2EK125EKRUPy0O6RU4nUSr6oZGS7wdlFBPn9ICNRCXcVMCgpQxj1Kzeq1Ovt87Dft7DsmFmLvhb\nTU7b7Oc9vCNaKQIzc4MzcW/2D22yu+0xv2Sf2IsxFje4/mj04ALIjpw+m/gk7IiB/fD1Qb5waKHU\nPJSICKm02ZdorBmZHkephkn3OUmlTQzDwTv2VKbB2HTKcN1gyTWMnS0P23aYmLSxbGHlZoydbYdS\n0ceyhMlpa2AuR9Wq39Y/FGDtvkMydbLPqYjozhoaLZSay0Nzb/K51/0Rw/xoRztFfEJfiscNQ7h2\nPcraqnNQmpBIBjZv42KS0K28BGBjzSWVsbAswWqUigyD/b3w5CEIvGazE/oUqDkZ/SnRXHhGbVOX\nSBpEbKFWP7R+g6Bcoh+m5EopikUPz1PYdqPf5LQd2qJqVFi2dLWXg6CmceityLrod5+TkzWXGL17\nrNGcExFh+XqU7ISJYRxmRl67ef5EHoAH9x021wJPUMcJ9thuv1o7MYobJiLCwtIJSUAj0PV0Nrw8\nBCA1Bqb2mouBjig1mj5gmsL8YoT5xf4+b63qU9z32hxinLqisO+RGaOlw0TSZHE50tE8YBTCFIsb\nZCdM8kdMJprJQ9YpSlE0DzcjiShFZFJEPiYiLzX+z3U4bkJEPigiXxORF0Tku4Y9Vs3lRymFU/f7\n6nTTLyodEmSajjaDQPmKWjU8k/ck0hmTqdmgSfDRf/NLdmeXnAEiIswtRlheiTI5ZTI1Y7FyM0pu\nStcranpnVJej7wI+oZR6WkTe1bj96yHHvRv4c6XUj4tIBEgMc5Ca8aYfe5P7eZeNB4fNbJNpg4XF\nyNjs/zUdYtr204SBRER7u8EyrwJQwf7rwik7kUzP2GSyJqVCUEyfyph9cbM5D/GEQTyh6zA0Z2NU\ne5TvAN7X+Pl9wI8cP0BEssA/Af4AQClVV0rtDW2EmrHliSf3ePbpOK/57Q/0bE8XRqXss3bfwfMO\nWzSVCj73x8gcPZkyQv0/BfqeGFMqemw8cAMP1oYPa6nkn8ksPhIxyE1ZTExaIxdJjea8jEoo55RS\nDxo/rwFzIcdcBzaBfysify8i7xWR5NBGqBkbxPNJ71SYfFAktVNB1fqzRLqz1W5RphRUSj6OMx5d\nHJqJQtGoHCxjWhZcuRY5ld1bL4T6sDbmo1s2q0Zz2RnY0quIfByYD/nVbx69oZRSIqH9ICzg9cAv\nKaU+LSLvJlii/dcdXu+dwDsBopmZ8wxdM0ZYdY/523nEVxgqMGHf/33YfK3Lea+anHr4yV8EXAfs\nMdnGavZzdOo+voLIABxigI5iKBIYCujkF83DysCEUin1tk6/E5F1EVlQSj0QkQVgI+Swe8A9pdSn\nG7c/SCCUnV7vPcB7ANILj+rL30vC5HoJw1MHlQWGAlWBP/z9Pf75OZ87njSohfmOqrP7jg6SQXuB\nxpMG9frFmQ+NZliMaun1GeCpxs9PAR8+foBSag24KyKPN+76fuCrwxmeZixQiljJaS+/U/APf189\n99NPTttt+38iQa/FfhhfXzSmZmyMYxUcIjAzOzgfVo3mIjCqrNengQ+IyM8Dt4GfBBCRReC9Sqm3\nN477JeD9jYzXV4CfG8VgNSOk2Rvp+N2Oyxc+er6Pr20L125G2dpwKZc8TFOYmrb60kbpImLbwsrN\nKNubLuWij2UHPqyD9JP1PMXOlkNh38cwgj6NEzlrIEvLZ6XW8IutVnzsiDA1Y7W0FtNcfkYilEqp\nbYII8fj9q8Dbj9z+AvDtQxyaZpwQoZSOkNivtyx9mL7HI4XbfXmJSMRg8YzttS4jtm0wvzic+fB9\nxe1XariOOkgi2lxzqZbVmVueHUUpdW7BrVb8RoPs4LbjKCrlOotXIqT6YE+ouRiMj62HRhPCzlwS\nu+aRwkUwkHqddL3Ad21/YdRD05yTQt5rEUkI9kML+x5TNZ9I9PQ7Q8pXbG447O16KB9icWFuIdK1\nX2U3NtfDM6PX1xySaWOsIl/N4NBCqRlrlGmwtpLlV96xQbqYY+o/foD9Z3dHYRuq6TOloh9uTC6B\nI9FZhPLB/TrFwuHzViuKO7dqrNyMEjlDMlSn1mGuo/D9wPhec/nRpuia8UeEpccU35v7WwpaJC8N\n3RoWn8WkwHH8FpFsovygRvQsdLLdEyHUCEJzOdERpWasGXULLc3gmMhZ7G57bcJmmkIieXoVqtdU\nuN0fQULOWZicMtlYazViEAmSjvSy68ODvibSjC0HInkOmzrN+GJHDJauRjCtQ/P0aEy4uhI5kwhF\nokbHHpOxMzbQzuYsJqetgwiy2UJtdn5M3Cg0Q0FHlBqNZmQkUyY3H4vh1BViyLls+WxbSKVNioXW\nKFUMyE2f7VQnIkzP2kxOWziOwrLkoayxfdjREaVGoxkpIkIkavTFu3ZhySY3ZR7sH8bjwtWVsyXy\nHMUwhGjU0CL5kKIjSs1YopddNWdBDGFmLsJMWJsFjeaMaKHUjA1PPLnHu797gfKv/RZfeIulk3c0\nGs1YoJdeNRqNRqPpghZKjUaj0Wi6oIVSo9FoNJouaKHUaDQajaYLWig1Y8NTj1VRz3/s3O2zNBqN\npp/oM5JmpDQzXdXzH9M2dRqNZizREaVmpDSjSF0vqdFoxhUtlBqNRqPRdEELpUaj0Wg0XRDVyW7/\nAiMim8DtUY+jT0wDW6MexJig56IVPR+t6PloRc9HK48rpdJneeClTOZRSs2Megz9QkQ+q5T69lGP\nYxzQc9GKno9W9Hy0ouejFRH57Fkfq5deNRqNRqPpghZKjUaj0Wi6oIVy/HnPqAcwRui5aEXPRyt6\nPlrR89HKmefjUibzaDQajUbTL3REqdFoNBpNF7RQajQajUbTBS2UY4SITIrIx0Tkpcb/uQ7HTYjI\nB0XkayLygoh817DHOgx6nY/GsaaI/L2I/L/DHOMw6WU+RGRZRP5KRL4qIl8RkV8exVgHiYj8MxH5\nuoi8LCLvCvm9iMjvNX7/JRF5/SjGOSx6mI+faszDP4jIcyLyxCjGOSxOmo8jx/1jEXFF5MdPek4t\nlOPFu4BPKKUeBT7RuB3Gu4E/V0q9BngCeGFI4xs2vc4HwC9zeeehSS/z4QK/opR6LfCdwL8QkdcO\ncYwDRURM4H8HfhB4LfBfhby/HwQebfx7J/B/DnWQQ6TH+XgV+F6l1OuA/5lLnOTT43w0j/st4D/1\n8rxaKMeLdwDva/z8PuBHjh8gIlngnwB/AKCUqiul9oY2wuFy4nwAiMgV4IeA9w5pXKPixPlQSj1Q\nSn2+8XOB4OJhaWgjHDxvBF5WSr2ilKoD/55gXo7yDuDfqYC/AyZEZGHYAx0SJ86HUuo5pdRu4+bf\nAVeGPMZh0svnA+CXgD8FNnp5Ui2U48WcUupB4+c1YC7kmOvAJvBvG0uN7xWR5NBGOFx6mQ+A3wV+\nDfCHMqrR0et8ACAiK8C3AZ8e7LCGyhJw98jte7RfCPRyzGXhtO/154GPDnREo+XE+RCRJeBHOcVK\nw6W0sBtnROTjwHzIr37z6A2llBKRsNodC3g98EtKqU+LyLsJluD+dd8HOwTOOx8i8sPAhlLqcyLy\nfYMZ5fDow+ej+Twpgivmf6mU2u/vKDUXERF5C4FQvnnUYxkxvwv8ulLKF5GeHqCFcsgopd7W6Xci\nsi4iC0qpB42lorBlgXvAPaVUM0r4IN337saaPszHm4AnReTtQAzIiMgfKqV+ekBDHihxmM6DAAAC\nhklEQVR9mA9ExCYQyfcrpT40oKGOivvA8pHbVxr3nfaYy0JP71VEvoVga+IHlVLbQxrbKOhlPr4d\n+PcNkZwG3i4irlLq/+n0pHrpdbx4Bniq8fNTwIePH6CUWgPuisjjjbu+H/jqcIY3dHqZj99QSl1R\nSq0A/yXwlxdVJHvgxPmQ4Nv/B8ALSqnfGeLYhsXzwKMicl1EIgR/82eOHfMM8LON7NfvBPJHlqwv\nGyfOh4hcBT4E/IxS6sURjHGYnDgfSqnrSqmVxjnjg8AvdhNJ0EI5bjwN/ICIvAS8rXEbEVkUkY8c\nOe6XgPeLyJeAbwX+16GPdDj0Oh8PC73Mx5uAnwHeKiJfaPx7+2iG23+UUi7w3wJ/QZCo9AGl1FdE\n5BdE5Bcah30EeAV4Gfh94BdHMtgh0ON8/A/AFPB/ND4PZ+6iMe70OB+nRlvYaTQajUbTBR1RajQa\njUbTBS2UGo1Go9F0QQulRqPRaDRd0EKp0Wg0Gk0XtFBqNBqNRtMFLZQazSVGRP5cRPYuc1cVjWbQ\naKHUaC43/4agrlKj0ZwRLZQazSWg0VvvSyISE5FkoxflP1JKfQIojHp8Gs1FRnu9ajSXAKXU8yLy\nDPC/AHHgD5VSXx7xsDSaS4EWSo3m8vA/EXhdVoH/bsRj0WguDXrpVaO5PEwBKSBN0ElFo9H0AS2U\nGs3l4f8m6Ev6fuC3RjwWjebSoJdeNZpLgIj8LOAopf5IREzgORF5K/A/Aq8BUiJyD/h5pdRfjHKs\nGs1FQ3cP0Wg0Go2mC3rpVaPRaDSaLmih1Gg0Go2mC1ooNRqNRqPpghZKjUaj0Wi6oIVSo9FoNJou\naKHUaDQajaYLWig1Go1Go+nC/w93O6WMf7YPywAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.title(\"Model with L2-regularization\")\n", + "axes = plt.gca()\n", + "axes.set_xlim([-0.75,0.40])\n", + "axes.set_ylim([-0.75,0.65])\n", + "plot_decision_boundary(lambda x: predict_dec(parameters, x.T), train_X, train_Y)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Observations**:\n", + "- The value of $\\lambda$ is a hyperparameter that you can tune using a dev set.\n", + "- L2 regularization makes your decision boundary smoother. If $\\lambda$ is too large, it is also possible to \"oversmooth\", resulting in a model with high bias.\n", + "\n", + "**What is L2-regularization actually doing?**:\n", + "\n", + "L2-regularization relies on the assumption that a model with small weights is simpler than a model with large weights. Thus, by penalizing the square values of the weights in the cost function you drive all the weights to smaller values. It becomes too costly for the cost to have large weights! This leads to a smoother model in which the output changes more slowly as the input changes. \n", + "\n", + "\n", + "**What you should remember** -- the implications of L2-regularization on:\n", + "- The cost computation:\n", + " - A regularization term is added to the cost\n", + "- The backpropagation function:\n", + " - There are extra terms in the gradients with respect to weight matrices\n", + "- Weights end up smaller (\"weight decay\"): \n", + " - Weights are pushed to smaller values." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3 - Dropout\n", + "\n", + "Finally, **dropout** is a widely used regularization technique that is specific to deep learning. \n", + "**It randomly shuts down some neurons in each iteration.** Watch these two videos to see what this means!\n", + "\n", + " \n", + "\n", + "\n", + "
\n", + "\n", + "
\n", + "
\n", + "
Figure 2 : Drop-out on the second hidden layer.
At each iteration, you shut down (= set to zero) each neuron of a layer with probability $1 - keep\\_prob$ or keep it with probability $keep\\_prob$ (50% here). The dropped neurons don't contribute to the training in both the forward and backward propagations of the iteration.
\n", + "\n", + "
\n", + "\n", + "
\n", + "\n", + "
Figure 3 : Drop-out on the first and third hidden layers.
$1^{st}$ layer: we shut down on average 40% of the neurons. $3^{rd}$ layer: we shut down on average 20% of the neurons.
\n", + "\n", + "\n", + "When you shut some neurons down, you actually modify your model. The idea behind drop-out is that at each iteration, you train a different model that uses only a subset of your neurons. With dropout, your neurons thus become less sensitive to the activation of one other specific neuron, because that other neuron might be shut down at any time. \n", + "\n", + "### 3.1 - Forward propagation with dropout\n", + "\n", + "**Exercise**: Implement the forward propagation with dropout. You are using a 3 layer neural network, and will add dropout to the first and second hidden layers. We will not apply dropout to the input layer or output layer. \n", + "\n", + "**Instructions**:\n", + "You would like to shut down some neurons in the first and second layers. To do that, you are going to carry out 4 Steps:\n", + "1. In lecture, we dicussed creating a variable $d^{[1]}$ with the same shape as $a^{[1]}$ using `np.random.rand()` to randomly get numbers between 0 and 1. Here, you will use a vectorized implementation, so create a random matrix $D^{[1]} = [d^{[1](1)} d^{[1](2)} ... d^{[1](m)}] $ of the same dimension as $A^{[1]}$.\n", + "2. Set each entry of $D^{[1]}$ to be 1 with probability (`keep_prob`), and 0 otherwise.\n", + "\n", + "**Hint:** Let's say that keep_prob = 0.8, which means that we want to keep about 80% of the neurons and drop out about 20% of them. We want to generate a vector that has 1's and 0's, where about 80% of them are 1 and about 20% are 0.\n", + "This python statement: \n", + "`X = (X < keep_prob).astype(int)` \n", + "\n", + "is conceptually the same as this if-else statement (for the simple case of a one-dimensional array) :\n", + "\n", + "```\n", + "for i,v in enumerate(x):\n", + " if v < keep_prob:\n", + " x[i] = 1\n", + " else: # v >= keep_prob\n", + " x[i] = 0\n", + "```\n", + "Note that the `X = (X < keep_prob).astype(int)` works with multi-dimensional arrays, and the resulting output preserves the dimensions of the input array.\n", + "\n", + "Also note that without using `.astype(int)`, the result is an array of booleans `True` and `False`, which Python automatically converts to 1 and 0 if we multiply it with numbers. (However, it's better practice to convert data into the data type that we intend, so try using `.astype(int)`.)\n", + "\n", + "3. Set $A^{[1]}$ to $A^{[1]} * D^{[1]}$. (You are shutting down some neurons). You can think of $D^{[1]}$ as a mask, so that when it is multiplied with another matrix, it shuts down some of the values.\n", + "4. Divide $A^{[1]}$ by `keep_prob`. By doing this you are assuring that the result of the cost will still have the same expected value as without drop-out. (This technique is also called inverted dropout.)" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: forward_propagation_with_dropout\n", + "\n", + "def forward_propagation_with_dropout(X, parameters, keep_prob = 0.5):\n", + " \"\"\"\n", + " Implements the forward propagation: LINEAR -> RELU + DROPOUT -> LINEAR -> RELU + DROPOUT -> LINEAR -> SIGMOID.\n", + " \n", + " Arguments:\n", + " X -- input dataset, of shape (2, number of examples)\n", + " parameters -- python dictionary containing your parameters \"W1\", \"b1\", \"W2\", \"b2\", \"W3\", \"b3\":\n", + " W1 -- weight matrix of shape (20, 2)\n", + " b1 -- bias vector of shape (20, 1)\n", + " W2 -- weight matrix of shape (3, 20)\n", + " b2 -- bias vector of shape (3, 1)\n", + " W3 -- weight matrix of shape (1, 3)\n", + " b3 -- bias vector of shape (1, 1)\n", + " keep_prob - probability of keeping a neuron active during drop-out, scalar\n", + " \n", + " Returns:\n", + " A3 -- last activation value, output of the forward propagation, of shape (1,1)\n", + " cache -- tuple, information stored for computing the backward propagation\n", + " \"\"\"\n", + " \n", + " np.random.seed(1)\n", + " \n", + " # retrieve parameters\n", + " W1 = parameters[\"W1\"]\n", + " b1 = parameters[\"b1\"]\n", + " W2 = parameters[\"W2\"]\n", + " b2 = parameters[\"b2\"]\n", + " W3 = parameters[\"W3\"]\n", + " b3 = parameters[\"b3\"]\n", + " \n", + " # LINEAR -> RELU -> LINEAR -> RELU -> LINEAR -> SIGMOID\n", + " Z1 = np.dot(W1, X) + b1\n", + " A1 = relu(Z1)\n", + " ### START CODE HERE ### (approx. 4 lines) # Steps 1-4 below correspond to the Steps 1-4 described above. \n", + " D1 = np.random.rand(A1.shape[0], A1.shape[1]) # Step 1: initialize matrix D1 = np.random.rand(..., ...)\n", + " D1 = (D1 < keep_prob) # Step 2: convert entries of D1 to 0 or 1 (using keep_prob as the threshold)\n", + " A1 = A1 * D1 # Step 3: shut down some neurons of A1\n", + " A1 = A1 / keep_prob # Step 4: scale the value of neurons that haven't been shut down\n", + " ### END CODE HERE ###\n", + " Z2 = np.dot(W2, A1) + b2\n", + " A2 = relu(Z2)\n", + " ### START CODE HERE ### (approx. 4 lines)\n", + " D2 = np.random.rand(A2.shape[0], A2.shape[1]) # Step 1: initialize matrix D2 = np.random.rand(..., ...)\n", + " D2 = (D2 < keep_prob) # Step 2: convert entries of D2 to 0 or 1 (using keep_prob as the threshold)\n", + " A2 = A2 * D2 # Step 3: shut down some neurons of A2\n", + " A2 = A2 / keep_prob # Step 4: scale the value of neurons that haven't been shut down\n", + " ### END CODE HERE ###\n", + " Z3 = np.dot(W3, A2) + b3\n", + " A3 = sigmoid(Z3)\n", + " \n", + " cache = (Z1, D1, A1, W1, b1, Z2, D2, A2, W2, b2, Z3, A3, W3, b3)\n", + " \n", + " return A3, cache" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "A3 = [[ 0.36974721 0.00305176 0.04565099 0.49683389 0.36974721]]\n" + ] + } + ], + "source": [ + "X_assess, parameters = forward_propagation_with_dropout_test_case()\n", + "\n", + "A3, cache = forward_propagation_with_dropout(X_assess, parameters, keep_prob = 0.7)\n", + "print (\"A3 = \" + str(A3))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Expected Output**: \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "
\n", + " **A3**\n", + " \n", + " [[ 0.36974721 0.00305176 0.04565099 0.49683389 0.36974721]]\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3.2 - Backward propagation with dropout\n", + "\n", + "**Exercise**: Implement the backward propagation with dropout. As before, you are training a 3 layer network. Add dropout to the first and second hidden layers, using the masks $D^{[1]}$ and $D^{[2]}$ stored in the cache. \n", + "\n", + "**Instruction**:\n", + "Backpropagation with dropout is actually quite easy. You will have to carry out 2 Steps:\n", + "1. You had previously shut down some neurons during forward propagation, by applying a mask $D^{[1]}$ to `A1`. In backpropagation, you will have to shut down the same neurons, by reapplying the same mask $D^{[1]}$ to `dA1`. \n", + "2. During forward propagation, you had divided `A1` by `keep_prob`. In backpropagation, you'll therefore have to divide `dA1` by `keep_prob` again (the calculus interpretation is that if $A^{[1]}$ is scaled by `keep_prob`, then its derivative $dA^{[1]}$ is also scaled by the same `keep_prob`).\n" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: backward_propagation_with_dropout\n", + "\n", + "def backward_propagation_with_dropout(X, Y, cache, keep_prob):\n", + " \"\"\"\n", + " Implements the backward propagation of our baseline model to which we added dropout.\n", + " \n", + " Arguments:\n", + " X -- input dataset, of shape (2, number of examples)\n", + " Y -- \"true\" labels vector, of shape (output size, number of examples)\n", + " cache -- cache output from forward_propagation_with_dropout()\n", + " keep_prob - probability of keeping a neuron active during drop-out, scalar\n", + " \n", + " Returns:\n", + " gradients -- A dictionary with the gradients with respect to each parameter, activation and pre-activation variables\n", + " \"\"\"\n", + " \n", + " m = X.shape[1]\n", + " (Z1, D1, A1, W1, b1, Z2, D2, A2, W2, b2, Z3, A3, W3, b3) = cache\n", + " \n", + " dZ3 = A3 - Y\n", + " dW3 = 1./m * np.dot(dZ3, A2.T)\n", + " db3 = 1./m * np.sum(dZ3, axis=1, keepdims = True)\n", + " dA2 = np.dot(W3.T, dZ3)\n", + " ### START CODE HERE ### (≈ 2 lines of code)\n", + " dA2 = D2 * dA2 # Step 1: Apply mask D2 to shut down the same neurons as during the forward propagation\n", + " dA2 = dA2 / keep_prob # Step 2: Scale the value of neurons that haven't been shut down\n", + " ### END CODE HERE ###\n", + " dZ2 = np.multiply(dA2, np.int64(A2 > 0))\n", + " dW2 = 1./m * np.dot(dZ2, A1.T)\n", + " db2 = 1./m * np.sum(dZ2, axis=1, keepdims = True)\n", + " \n", + " dA1 = np.dot(W2.T, dZ2)\n", + " ### START CODE HERE ### (≈ 2 lines of code)\n", + " dA1 = D1 * dA1 # Step 1: Apply mask D1 to shut down the same neurons as during the forward propagation\n", + " dA1 = dA1 / keep_prob # Step 2: Scale the value of neurons that haven't been shut down\n", + " ### END CODE HERE ###\n", + " dZ1 = np.multiply(dA1, np.int64(A1 > 0))\n", + " dW1 = 1./m * np.dot(dZ1, X.T)\n", + " db1 = 1./m * np.sum(dZ1, axis=1, keepdims = True)\n", + " \n", + " gradients = {\"dZ3\": dZ3, \"dW3\": dW3, \"db3\": db3,\"dA2\": dA2,\n", + " \"dZ2\": dZ2, \"dW2\": dW2, \"db2\": db2, \"dA1\": dA1, \n", + " \"dZ1\": dZ1, \"dW1\": dW1, \"db1\": db1}\n", + " \n", + " return gradients" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "dA1 = \n", + "[[ 0.36544439 0. -0.00188233 0. -0.17408748]\n", + " [ 0.65515713 0. -0.00337459 0. -0. ]]\n", + "dA2 = \n", + "[[ 0.58180856 0. -0.00299679 0. -0.27715731]\n", + " [ 0. 0.53159854 -0. 0.53159854 -0.34089673]\n", + " [ 0. 0. -0.00292733 0. -0. ]]\n" + ] + } + ], + "source": [ + "X_assess, Y_assess, cache = backward_propagation_with_dropout_test_case()\n", + "\n", + "gradients = backward_propagation_with_dropout(X_assess, Y_assess, cache, keep_prob = 0.8)\n", + "\n", + "print (\"dA1 = \\n\" + str(gradients[\"dA1\"]))\n", + "print (\"dA2 = \\n\" + str(gradients[\"dA2\"]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Expected Output**: \n", + "\n", + "```\n", + "dA1 = \n", + "[[ 0.36544439 0. -0.00188233 0. -0.17408748]\n", + " [ 0.65515713 0. -0.00337459 0. -0. ]]\n", + "dA2 = \n", + "[[ 0.58180856 0. -0.00299679 0. -0.27715731]\n", + " [ 0. 0.53159854 -0. 0.53159854 -0.34089673]\n", + " [ 0. 0. -0.00292733 0. -0. ]]\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's now run the model with dropout (`keep_prob = 0.86`). It means at every iteration you shut down each neurons of layer 1 and 2 with 14% probability. The function `model()` will now call:\n", + "- `forward_propagation_with_dropout` instead of `forward_propagation`.\n", + "- `backward_propagation_with_dropout` instead of `backward_propagation`." + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Cost after iteration 0: 0.6543912405149825\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/jovyan/work/week5/Regularization/reg_utils.py:236: RuntimeWarning: divide by zero encountered in log\n", + " logprobs = np.multiply(-np.log(a3),Y) + np.multiply(-np.log(1 - a3), 1 - Y)\n", + "/home/jovyan/work/week5/Regularization/reg_utils.py:236: RuntimeWarning: invalid value encountered in multiply\n", + " logprobs = np.multiply(-np.log(a3),Y) + np.multiply(-np.log(1 - a3), 1 - Y)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Cost after iteration 10000: 0.06101698657490562\n", + "Cost after iteration 20000: 0.060582435798513114\n" + ] + }, + { + "data": { + "image/png": "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\nGEl/lnSPpLN7WpGk2ZI6JHV0dXX1S3H+grqZWfk0+kSWFuC1wD8B/wj8m6RDKxeKiMsiYlpETGtv\nb++XF3bTaTOz8sntmB6wDJiYmZ6QzsvqBFZExIvAi5JuAY4CHs2xLsBNp83MyijPkd58YKqkKZLa\ngFnA3IplrgNOkNQiaShwHPBwjjXt4KbTZmblk9tILyK2SpoD3AA0A5dHxEJJ56WPXxoRD0v6A7AA\n2A78KCIezKumLB/TMzMrnzx3bxIR84B5FfMurZj+OvD1POvoiZtOm5mVT6NPZGkYN502Myuf0oYe\nuOm0mVnZlDv03HTazKxUSh16bjptZlYupQ49N502MyuXUofeWO/eNDMrlVKH3phhbWzY7KbTZmZl\nUe7Q8xfUzcxKpdSh19102sf1zMzKodSh55GemVm5lDv03HTazKxUyh16Oy4v5NAzMyuDUoded9Pp\nlT6mZ2ZWCqUOPTedNjMrl1KHHrjptJlZmTj03JXFzKw0Sh96bjptZlYepQ89N502MyuP0oeem06b\nmZVH6UPPTafNzMrDoedWZGZmpVH60HPTaTOz8ih96HmkZ2ZWHg49N502MyuNXENP0gxJiyQtlnR+\nD4+fKGmNpPvS2+fzrKcnbjptZlYeLXmtWFIzcAnwNqATmC9pbkQ8VLHorRFxal519MZNp83MyiPP\nkd50YHFELImIzcCVwMwcX69PWpubGOGm02ZmpZBn6I0HlmamO9N5lV4vaYGk30t6VY71VOVWZGZm\n5ZDb7s063QtMioj1kk4BrgWmVi4kaTYwG2DSpEn9XsSYob7SgplZGeQ50lsGTMxMT0jn7RARayNi\nfXp/HtAqaVzliiLisoiYFhHT2tvb+71Qj/TMzMohz9CbD0yVNEVSGzALmJtdQNL+kpTen57WsyLH\nmnrkptNmZuWQ2+7NiNgqaQ5wA9AMXB4RCyWdlz5+KXAG8BFJW4GNwKyIiLxqqsZNp83MyiHXY3rp\nLst5FfMuzdy/GLg4zxrqkW06Pbi1udHlmJlZTkrfkQXciszMrCwcerjptJlZWTj08EjPzKwsHHq4\n6bSZWVk49HDTaTOzsnDo4abTZmZl4dDDTafNzMrCoZdyKzIzs+Jz6KXcdNrMrPgceimP9MzMis+h\nl3LTaTOz4nPopdx02sys+Bx6qWzTaTMzKyaHXmrnF9S9i9PMrKgceqnuptM+g9PMrLgceik3nTYz\n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\nzErDoWdmZqXh0DMzs9Jw6JmZWWk49MzMrDQcemZmVhoOPTMzKw2HnpmZlcZe13BaUhfwVD+sahzw\nQj+sZ2/ibS6PMm63t7kcqm3zKyKivbcn73Wh118kddTTkbtIvM3lUcbt9jaXw+5us3dvmplZaTj0\nzMysNMocepc1uoAG8DaXRxm329tcDru1zaU9pmdmZuVT5pGemZmVjEPPzMxKo3ShJ2mGpEWSFks6\nv9H1DBRJT0p6QNJ9kjoaXU8eJF0uabmkBzPzxkq6UdJj6c8xjayxv1XZ5gskLUvf6/skndLIGvub\npImSbpb0kKSFkv45nV/Y97rGNhf9vR4s6W5J96fb/cV0fp/f61Id05PUDDwKvA3oBOYD74mIhxpa\n2ACQ9CQwLSIK+0VWSW8C1gM/i4gj0nlfA1ZGxIXpHzljIuKzjayzP1XZ5guA9RHxjUbWlhdJBwAH\nRMS9kkYA9wDvAM6loO91jW0+k2K/1wKGRcR6Sa3AX4F/Bk6nj+912UZ604HFEbEkIjYDVwIzG1yT\n9ZOIuAVYWTF7JvDT9P5PST4oCqPKNhdaRDwbEfem99cBDwPjKfB7XWObCy0S69PJ1vQW7MZ7XbbQ\nGw8szUx3UoJ/OKkA/iTpHkmzG13MANovIp5N7z8H7NfIYgbQxyQtSHd/FmY3XyVJk4GjgbsoyXtd\nsc1Q8PdaUrOk+4DlwI0RsVvvddlCr8xOiIjXACcD/zvdLVYqkezLL8P+/O8DBwGvAZ4FvtnYcvIh\naThwFfAvEbE2+1hR3+setrnw73VEbEs/uyYA0yUdUfH4Lr3XZQu9ZcDEzPSEdF7hRcSy9Ody4BqS\nXb1l8Hx6PKT7uMjyBteTu4h4Pv2g2A78kAK+1+nxnauAn0fE1ensQr/XPW1zGd7rbhGxGrgZmMFu\nvNdlC735wFRJUyS1AbOAuQ2uKXeShqUHv5E0DHg78GDtZxXGXOCc9P45wHUNrGVAdH8YpE6jYO91\nenLDj4GHI+KizEOFfa+rbXMJ3ut2SaPT+0NITkJ8hN14r0t19iZAekrvt4Fm4PKI+EqDS8qdpINI\nRncALcAvirjdkn4JnEhy6ZHngS8A1wK/BiaRXJLqzIgozIkfVbb5RJLdXQE8CXw4c/xjryfpBOBW\n4AFgezr7X0mOcRXyva6xze+h2O/1kSQnqjSTDNJ+HRFfkrQPfXyvSxd6ZmZWXmXbvWlmZiXm0DMz\ns9Jw6JmZWWk49MzMrDQcemZmVhoOPTNA0u3pz8mSzurndf9rT6+VF0nvkPT5XpZ5V9q1frukaTWW\nOyftZP+YpHMy86dIukvJ1Up+lX7vFSW+m85fIOmYdH6bpFsktfTXdpr1hUPPDIiI16d3JwO7FHp1\nfJC/LPQyr5WXzwDf62WZB0k61d9SbQFJY0m+93ccSaePL2R6O34V+FZEHAKsAj6Yzj8ZmJreZpO0\nySJt8H4T8O4+bI9Zv3HomQGSuju5Xwi8Mb022SfSZrdflzQ/Hbl8OF3+REm3SpoLPJTOuzZt6L2w\nu6m3pAuBIen6fp59rXRU9HVJDyq51uG7M+v+s6TfSnpE0s/TjhxIulDJNdUWSPq7y8lIOhR4qfsS\nUpKuk3R2ev/D3TVExMMRsaiXX8s/kjT4XRkRq4AbgRlpLW8Bfpsul+1yP5PkMkcREXcCozNdQ64F\n3tv7u2GWH+9qMHu584FPR8SpAGl4rYmIYyUNAm6T9Md02WOAIyLiiXT6AxGxMm2XNF/SVRFxvqQ5\nacPcSqeTdNM4iqSjynxJ3SOvo4FXAc8AtwFvkPQwSaupwyIiutszVXgDcG9menZa8xPAp4DX7cLv\notpVSfYBVkfE1or5tZ7zLMno8thdeH2zfueRnlltbwfOTi9tchfJB/7U9LG7M4EH8HFJ9wN3kjQ2\nn0ptJwC/TBsGPw/8hZ2hcHdEdKaNhO8j2e26BtgE/FjS6cCGHtZ5ANDVPZGu9/MkjXo/1ci2XBGx\nDdjc3QfWrBEcema1CfhYRLwmvU2JiO6R3os7FpJOBN4KHB8RRwF/Awbvxuu+lLm/DWhJR1bTSXYr\nngr8oYfnbezhdV8NrAAO3MUaql2VZAXJbsuWivm1ntNtEElwmzWEQ8/s5dYB2ZHIDcBH0su6IOnQ\n9EoVlUYBqyJig6TDePluxC3dz69wK/Du9LhhO/Am4O5qhSm5ltqoiJgHfIJkt2ilh4FDMs+ZTnJy\nydHApyVNqbb+dPnxkm5KJ28A3i5pTHoCy9uBG9Lrl90MnJEul+1yP5dkZCxJryPZNfxsuu59gBci\nYkutGszy5NAze7kFwDZJ90v6BPAjkhNV7pX0IPADej4W/gegJT3udiHJLs5ulwELuk8iybgmfb37\ngf8CPhMRz9WobQRwvaQFwF+BT/awzC3A0WnoDCK5xtoHIuIZkmN6l6ePnSapEzge+J2kG9LnHwBs\nBUh3hX6Z5JJc84EvZXaPfhb4pKTFJLt8f5zOnwcsARanr/3RTG0nAb+rsX1mufNVFswKRtJ3gP+M\niD/14blvVxl+AAAAWElEQVRzgKcjot+vMynpauD8iHi0v9dtVi+HnlnBSNoPOC6P4Oqr9MvrsyLi\nZ42uxcrNoWdmZqXhY3pmZlYaDj0zMysNh56ZmZWGQ8/MzErDoWdmZqXx/wFkjyiNNbzzCAAAAABJ\nRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "On the train set:\n", + "Accuracy: 0.928909952607\n", + "On the test set:\n", + "Accuracy: 0.95\n" + ] + } + ], + "source": [ + "parameters = model(train_X, train_Y, keep_prob = 0.86, learning_rate = 0.3)\n", + "\n", + "print (\"On the train set:\")\n", + "predictions_train = predict(train_X, train_Y, parameters)\n", + "print (\"On the test set:\")\n", + "predictions_test = predict(test_X, test_Y, parameters)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Dropout works great! The test accuracy has increased again (to 95%)! Your model is not overfitting the training set and does a great job on the test set. The French football team will be forever grateful to you! \n", + "\n", + "Run the code below to plot the decision boundary." + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAcoAAAEWCAYAAADmYNeIAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsvXmUZPlV3/m5b4l9y62ysvbqVgshW7TFImHJWMgsI8BI\n9pkZWwO2hI1HxgfZ42PraPCMhzOL54DAyIgZPLIGY4w8WEfGOiCLxhhjJJDVMi1ACCQhqaXuWrJy\nX2KPeNudP15kZERGRFZEZuRSWb/POd1VGe+9eL94GfW+73d/936vqCoGg8FgMBiGY531AAwGg8Fg\nOM8YoTQYDAaD4RCMUBoMBoPBcAhGKA0Gg8FgOAQjlAaDwWAwHIIRSoPBYDAYDsEIpcEwRUTkloio\niDhj7Pt9IvLxY57vm0TkC9MYz4jjjz1Gg+FRxwil4bFFRF4UEU9E5g+8/vsdcbl1NiMbH1X9bVX9\nqr2fO5/pW89yTKeBiHyziNw/63EYHg+MUBoed14A/ru9H0TkFUDm7Ibz6HDUWarB8KhhhNLwuPN+\n4C09P78V+PneHUSkKCI/LyIbInJHRP6hiFidbbaI/GMR2RSRrwDfNeTYfy4iKyKyLCL/SETshw1K\nRP6liPz9zt+vdma4P9j5+UkR2RYRq3dmJSLvB24A/05EaiLyzp63/F4RudsZ5/98yHnnROTDIlIR\nkd8BnjywXUXkB0XkS8CXOq+9RkSeE5Fy58/X9Oz/URH5ERH5nc57/rKIzPZsf6OIfFZEdjv7fvWB\nc72k5+ef61y/LPCrwJXO56yJyJWHXVOD4agYoTQ87nwSKIjIV3cE7M3Avzqwz/8FFIEngNcRC+tf\n62z774E/D7wS+Hrgvzlw7M8BAfCSzj7fDvyNMcb1MeCbO39/HfAV4M/2/Pzbqhr1HqCqfxW4C3y3\nquZU9cd6Nv8Z4KuAbwF+uFeQDvDTQAtYAv5657+D/AXg1cDLO6L3K8BPAXPAu4FfEZG5nv3f0nmf\nJeJr8VMAIvJS4F8DfxdYAJ4hFvnEiLHtfc468B3Ag87nzKnqg8OOMRiOgxFKg2F/VvltwOeB5b0N\nPeL5D1S1qqovAj8B/NXOLn8J+ElVvaeq28CP9By7CHwn8HdVta6q68A/6bzfw/gY8Gc6M9c/C/wY\n8NrOttd1tk/C/6aqTVX9A+APgKcP7tD5rP818MOd8f4R8C+HvNePqOq2qjaJZ9BfUtX3q2qgqv8a\n+GPgu3v2f7+q/lFH4P4X4C91zvWXgV9R1V9XVR/4x0AaeA0GwznCrDEYDLFQ/hZwmwNhV2AecIE7\nPa/dAa52/n4FuHdg2x43O8euiMjea9aB/Yeiql8WkTrwp4BvAv4P4PtF5KuIhfKnHvqp+lnt+XsD\nyA3ZZ4H4njDq8+zRu/3KkH16r8/B/e8QX5P5g8eqaiQi9w4cazCcOWZGaXjsUdU7xEk93wl86MDm\nTcAnFr09brA/61wBrh/Ytsc9oA3Mq2qp819BVf/EmEP7GHEoN6Gqy52f3wrMAJ8e9XHGfO9hbBCH\nRkd9nmHneED/tdk7Zrnn54Pv5xNf175jJX6auN5zbIP+xKrLI8ZgMJwoRigNhpjvB/5cJzzYRVVD\n4IPA/ykieRG5Cfw99tcxPwj8HRG5JiIzwA/1HLsC/AfgJ0Sk0Em+eVJEXjfmmD4GvJ14tgvw0c7P\nH++MaxhrxGupE9N5zw8B/6uIZETk5cTCfBjPAC8Vke8REUdE/jLwcuAjPfv8FRF5uYhkgP8d+MWe\n6/pdIvItIuICf5/4weITneM+DXxPJ2HqDcQz6d7POScixaN8VoNhEoxQGgzEoU5V/dSIzX8bqBMn\n1Hwc+AXgZzvb/l/g14jX/X6PwRnpW4AE8DlgB/hF4qSWcfgYkGdfKD9OPMP6rZFHxGuk/7CTRfqO\nMc/Ty9uJw7KrxIlI/+KwnVV1iziZ6e8DW8A7gT+vqps9u72/816rQAr4O51jvwD8FeJkqU3idc3v\nVlWvc9z/0HltF/he4Jd6zvvHxIlAX+l8VpP1ajgxxDRuNhgMJ4WIfBT4V6r6M2c9FoPhqJgZpcFg\nMBgMh2CE0mAwGAyGQzChV4PBYDAYDsHMKA0Gg8FgOIQLaTjgZoqaKl4662EYDAaDYQiZYshcKiLT\nblN7sXkq5/xCq7ypqgtHOfZCCmWqeImve+t7znoYBoPBYOjh6Tfu8p7XLNF457v49K86sQK95KGH\nTYXX/tGvDHOZGosLKZQGg8FgOD/sC+RP8Ym/6fCoSc+jNVqDwWAwPDK8+x2rvPKF53n2r3+mY7f0\naErOozlqg8FgMJxbugL5+s/w7FkPZgqcqVB2/BvfA9jAz6jqjw7Z55uBnyTuOLCpquP6ZBoMBoPh\nFLloArnHmQllpx/dTxP3ALwPPCciH1bVz/XsUwL+KfAGVb0rIiaV1WAwGM4RfQk6r3culEDucZZ1\nlK8CnlfVr3RMkD8AvOnAPt8DfEhV7wJ0Gt8aDAaD4Zzw1pe20Od+Pc5ivaCcpVBepb+h630GG7a+\nFJgRkY+KyO+KyFtGvZmIvE1EPiUin/Ib5RMYrsFgmDqRkmj6OO3grEdiOAJPv3GXr52/TfPf/N5Z\nD+VEOe+PAA7wdcC3AGngWRH5pKp+8eCOqvo+4H0A+aWnjC+fwXDOyZRbzK112n8qBK7N+rU8YcI+\n24EZHsqjXu4xKWf56Zbp73x+jf6u6BDPMrc6zXTrIvJbwNPAgFAaDIZHB7cVMLdax+p5pHW9kMV7\nFR48UQKRsxucYSSPm0DucZaf8jngKRG5TSyQbyZek+zll4H/W0Qc4ua3rwb+yamO0mC4iKgiCiqc\niSjld1rIgbiPAHYQkWgFeGn31Mc0gCoSgVo89sJ9Ueohj8qZfVpVDUTk7cTd4W3gZ1X1syLyA53t\n71XVz4vIvwc+A0TEJSR/dFZjNhgeeVQprTfI78ZCFbgW24tZWrnEWMem6j6OH+GlbLyUc2QBsYOI\noUcK2MHZr5xkd1vMbDSwQkUtYXc2RXUu/dgJ5kUt95iUM30sUNVngGcOvPbeAz//OPDjpzkug+Gi\nMrtaJ1tpd0Oerh+xsFxl7Ubh0Fmc7Ycs3q1gB1H3tXbaYf1aAazJxaOZdUk1/L7QKwAav+9Zkqm0\nmV3bDwtLpJS2YuPu6nzmDEd2OjwO5R6T8njNnw2GxxgrjMhV2oMhT4XiZpON66OFcu5BDcfvnwUm\nmwHFrSblhcnFo15KUdhtgR91BSkSqMymiZyz7f5X3GwMCLilUNxuXehZ5eO6/jgO5koYDI8Jth+h\nIsiBZu1CnEgzCgkjUs1gIFRqKeTKrSMJpVrCys0S+d0mmapHZFlUZ1I082OEgE8Yx4+Gvm5FPeu6\nFwgjkA/HXBGD4TEhSNigg+t/CrRTo28Fh+nCwdnpJKgtVOYyVObOVzjTT9gk24MPDpEtF04k99Yg\nG+/8+QttGHBczJUxGB4T1BIqs2kK281uaFGJZ0iV+fTI4yLbwk/auO2wTzQVqJ+DGeDDsL2Q2fU6\n6bqPCtQKSXYvZdERa6u7l7Is3K/0hV8jgZ2FzIUNuxqRPBxzdQyGx4jyfJrQEQrbLewgop122LmU\nxU8efivYXMpx+W4FVcXSWDhCxzo07CqRojBess9eucoREoMOQ8KIpTtlrFAR4hlwrtwm0Q5Zu1kc\nekwr67JxrUBpvY7rhQSuRXk+Q6OQnOrYzhKTzToZRigNhscJEWozaWozo2eQw/BTDstPlsiW2zhe\niJd249nkEGFzvJC5lRrJZmxL18q4bC1lCd1Bxx2JlJm1OrlKO3bnSVhsXc7RzkynjjJXbiOR9s2E\nLYVEKyDRDPBGZNi2si6rt0tTGcN5wgjk0TBCaTAYxiKyLaqzhwusRMrlnhkcQKrhc/lOheUnBx13\n5perpBp+d63T9SIu3auwcqtI8JBZ7jgkmsFgCQp75xotlBcNI5DH4/H4lhgMjzOqJJsBqbpHZFvU\nC8kTK8HIVgZncAJYUUS65vdltdpeOLSWUhQK2y22l3LHHo+fsolqDBVL/4J7ypp6yOlhhNJguMio\nsrBcJVX3u6UNpY0GG9fytLLTT8RxvHCoKEkEjt+fSer4UayiQ6zs3Cl1E6mVUhS2Wqjui3cE+MmO\ns9AFxJR7TB9zBQ2GC0ym6pGq78/a9kKcC8s17j01M/UsTi/lEMngDE6FgYQhP2kPLS9RoD0lr9fI\ntli9WWR2tUaqGYBAI59gezF74TJY3/2OVb52/rYRyBPAXEnD40MnBCmqtNPu1DMszyO53fbINbpk\nM5ha0swejXyC0oaF9Lj4RBKHOVuZ/ttN5FjUikmy5XZ/uYolVGdTUxtTkLRZv1ncryG9YAIJ+30h\nG+98lyn1OAHMFTU8FritgEv3K1ihdsN924tZ6qXp3ZDPI6ML5E/IeFyE1VtFSusNMlUPBOqFJLvz\nw2sQtxez+K5NYaeFFUW0Mi47C8MzZKcxNoPhKBihNFx8VFm8V9nPxOxoxOxaHS/l4F/QtSqAejE5\nNGFGkRMzH49si+2lHNtLY+wsQnUuHXuoGibmcW9/dVqYq2q48KQa/kAmJnSKz3db7Fw+fnbleaWR\nT5CuJchUvT6f0o1reTPDeoQx5R6nixFKw4XHCoeHGQWwR2y7MIiwdSVPpRWQrvuEttDIJ1D7bDt0\nGCbHlHucHUYoDReeVsYdauwddTIgzwPJuk9hu4kdRDSzLtUpt5vyJwwxn/R4jo0q2XI7tuILYyu+\n3YXMQ634HkVMucfZY6644cITORbluTSFrSbSyeWJBLykcy6EMrfTZGa90R2b64XkKm1WbpXORJzO\n23iGUdhqUtzaN3dP13xS9TIrt0oEyYthJGAE8vxgrrzhsaA8n6GddsntNrFCpV5IUi8mz3ydTiJl\nZr2/UbClQKDkt5uUL2Wne8KHlEic+niOgETaJ5JAN0mruNVg60r+rIY2FUyCzvnD/AYMjw2trEsr\nu183KKFiRSGhY52ZYLrtYKg7jQVk6j7laZ1IldJGg/xOC1EIXIvty9kBd55jjSdScuUWmYpHZAu1\nmdTE7j8SRuR2W2RqPqETN3M+WOvp+OFIR589I/ZHEZOgc34xQml47JBImVupkal53QL3rcUszTNo\noxTZ1siSxnCKYc7ZtXpfYb/rRyzcr7J2o9hnDH7k8XTM0N0eC7t03acymz60FVcvEkYsvVjGDiIs\njYeRrnnsXMpSm9mvdw0da2TD6OAk6i9PmP0Q6wd51pgFnEvOx4KDwXCKzC9XSdficglL48zX+ZUa\niaZ/6mMJEjZe0hnQpkigMiV3GgkjcuVBhx5RKG42pjKebNXrE0mIr21xu4kVRGONM7/T6ookdMzU\nFWbW60i0/8aRbVHPJ4gOBAEiifttGgzTxgil4bHC9g/pWLHVPJMxbVzLdz1SI0uIBHYWMlMzLXeC\naKhDz16izjTGk64Ot8pTietYxyFT84bb7YmQaPWHVLcu56gXk0QSnyOwha2lA30sVUnVfUrrdfJb\njbEF+zR59ztW+Un3j/jEK37CWM+dY870NyMibwDeA9jAz6jqj47Y7xuAZ4E3q+ovnuIQDRcMO4ji\n9UjtvyMLcTjyLIgci9VbxbjzRhjhJ52p+tAGjj00nKqANyRD9CjjCR0LhSFlOBKHc8cgtC1gULhR\nJbQPvLMlbF/OsX0pixUpkS3968yqLNzf73WpAqXN5ol1TZmEb/i6u/y9+STJf/sB/vj1rlmPfAQ4\nM6EUERv4aeDbgPvAcyLyYVX93JD93gX8h9MfpeGi4SfsAZGEWDRaZ9zEN0jYxM+M00VtoTqTIr/T\n6puxqcTZwNMYT62UIldu960dKnE49KAZ+iiqs6mB2b52xjGyibMlRENEPFtu973X3rjml2vcP4Gu\nKePwym9d5w0//nHW3v0C/yGKv4bFGeXSZRcxLknnmrO8M7wKeF5VvwIgIh8A3gR87sB+fxv4t8A3\nnO7wDBcRtS0qs2kK282+jhWRJVQusN/o7kKG0LFiE4FQaScddhYzU/O59VMO24tZZtfq3YzUyLZY\nuz6+VV4rm2B3PkNps9F9j8C1WL82eblHdsiaLICgJ9I15TD2sll/4y2/w/0vat9zWnknJJEQZuZO\nbzyGyTlLobwK3Ov5+T7w6t4dROQq8BeB1/MQoRSRtwFvA0gWFqY6UMPFojyfJkjYFLaaWGHcsaK8\nkDmZjhVHQZV0zSO/2wadUs2nCNXZNNXZhzwMqJKpeuTKk5+7XkrRKCRJNgMiS/BS9sRjrs6lqZWS\nJFshoS34ycnfAxgWA+4yuqPKdOkt9/jPkQ6IJMSzyp3t0AjlOee8rx7/JPA/qmr0sNCEqr4PeB9A\nfumpC27gaTgWItSLHQE4hxws5Ug2A7KVNuvXCyceMpxdrZOtHDy3x/qYM0O1pK9W9SiobdHKHi/P\nsFZKkWzWhjSQFrwT7hYzrB4yOmT5O7zofsMXgLMUymXges/P1zqv9fL1wAc6IjkPfKeIBKr6S6cz\nRMMjT6Tkd5rkyh4AtWIybgp8TteEnHY4EDa0NBasVN2nlTu5RBS3HfSJ5P65/RM/97Tp7ZrSzTIS\n4jDuCfzuH2ZYbttgO0LgD4piNntOIhmGkZylUD4HPCUit4kF8s3A9/TuoKq39/4uIj8HfMSI5Cmh\nih0oKpyJv6eEEVakx3PN6fShTLSC7s2/tNkgXfdOZXZ2FEaVUlgaF/CfpFiNOrcoj5xQ9nZNSTV8\nItuikUugB7NnJyRTrXL7s58n2Wrx4PYtFt+e5z2vvfJQP1YR4fIVl+W7Xl/41bJgfvG8B/YMZ/Yb\nUtVARN4O/Bpxat3PqupnReQHOtvfe1Zje9xJNAPmV6rYfoQA7aTD5tXcqazhSRgxv1IjXfe7STbb\nSzmaR7hJpxp+n0jC/uzsOAkdth9iBxF+wjn2jfcgcZkDA+UcEQyWSEyZ0LKGnlv3xnUaqOK24xKR\nI69P9jBp15TDuPb8l3ndhz8SP0SGIS/7/U/TWF4i+s2/Mtbx2ZzNzSeSbG8GeF5EOmMxO+fiuOfv\ngc3Qz5k+yqjqM8AzB14bKpCq+n2nMabHHSuIWLxXxupZU0m2Ai7fqbD8ZOnEZ2GX7ldJNIO9SBlW\nqMwvV1m9WZz4hpdsBkOtzqQjlpMKpYTKwoMqyYaPiiCqVObSlOfSU7su8QPBcCPTk15TbeYTsHY2\n5wZINH0Wlqvd/qGRLWxczeOlzz7RxQoCvukjv4IT7BsfuL7P3O+v8MW/+C62XxjvQS6Zsli69gjN\nzA2AceYxHCBbbg01m7bCiHT9ZC3eHC+MZ4AHXheFwvbkrjmhYw3NcFSB0Jlc2OZWYpG0FOxIsTpu\nPpmqN/F7jUItYe16gdCWfWccS9i8mj/xGX187vzAuTdO4dwSRizeq+AE8XW1FJwgDp1b4dk76lxa\nXmZYKm1Q9/nMR00yzkXHBMcNfTh+NNxGDLBP2LnG8aORXSEcb/Jz1/MJZtYbfQYDSpz52MhPNkOS\nMCJT9wdmqHti2ZiiobqXdrj/khkSrXhG3E47p7ae6qXdEzu37Ufkd5okGz5BwqEyl+o2Ws7uJd0c\nRCFT8fpM0c8CFYtUUomGPBOdw6Vuw5QxQmnow0u7RCOKtb0Tdq7xksOt1iLGd3fpRW2LtRsF5per\nsXUd8Sxz42p+Yos4K9QRFm1gn8SMR+TwkKMq6ZpPuuYR2kK9lOo46ZzCuY+A44VcfrGMFWn8LNQK\nyVTbXUs5K9SRYfITub4T8O53rPL0l17gX/2bwYiKCBRL5jZ60TG/YUMf9XyC4pYFPTPL2IbMPfH6\ns8ixqJZS5Hdbfa45asvDC+VH4KUcHjxRimerxE4vR5kChK4Vi+uBmjclvjanyl42bzPotqMq7LTY\nWspNdWY7TUobja5IQqdaQ+O6zQdPuLTTDioMiKUKtM5gjfLpN+7y1pe2uvWQ/wW4ej3B/bv9M99C\nySabP3wFq92K2NoIaDUj3IQwt+CQMSUhjxRGKA39WMLKzSLFrSbZiocK1EpJKkcUqknZvZTBT9oU\ntltYUdSxNUsfr0RF5PizLRG2F7PMrdQQ3Y8QR5awe4hf6kmQLbe7Ign7ojO3UqOZS0zVUH1apOr+\n0Nm448dlQO20Qyvj9vmzRgLttEv7CNGEafC187dp/NgH2btNZrI2T740Ra0aEoWQyVokU4d/L1vN\niLsvtLvRf99Xmg2PpWsu+YK5/T4qmN+UYQC1LXYvZdm9lD39k0scRqyXznZNahiNQpLAtShsNXH9\niFbapTKX2k90USW326Kw00IipZlNxNZ4U65DPWgK0EXibN7jOuOcBJEt2NGw2Gq8ZowIG9fy5HZb\nHXMIpVZMUiudjTnEW1/aQp/79YHWV7YtE4VaN9b8obZ16ys+ubxtzNAfEYxQGgy97N3VRtzAvLTL\n5rXhQnTQ/i1XbpOpeTx4ojR2q6lDx9UZ08gZox7wMVWltNGIu3pESjvjsr2YPdLs2goiZtbrcYav\nQD2fZOdSBh3zc1VmUsxsNPoEPpLYQaf7eUSozaSpzZyNOf3D3HUmoVEPKe+GNOrD11eDILa1s00E\n9pHACKXBQJxsMrtaI9WI6+SaWZftyzlCdzwhsP1wYKYngERKbqdF5QjhWYmU0nq9276qnY47dNRK\nKVL1webTakmcpdphfrlKume/VN3n8ovlWLgnmeVGyuU7ZZyOAQUah3+TzYCV28WxZny1mRQJLyRX\nbsdirnFYdftybvxxnBD7Anm4u864bKx67GyHw7q5dRGJXXkMjwZGKA2PPdIRAivcTzZJ130W78ai\nMo4QJFphVwB6sTR2CKocYVwL96skm36fQfnlu2Ue3Cp1k57iDwCK9NnyOV7YJ5Kd3RBV8jstygvj\nC3em5mEHUd8aowU4fji+tZ3EjZZ35zO47ZDQtaaXpXtEpi2QAJ4XjSWSxRkTdn2UMEJpeOzJVOLQ\nZO9tS4jLEtI1P3aseQiBaw0tb1A6zaInxGmHfSK5NyaNIL/bYncxS20mRbLhE9lCM5uAnpCs2x4t\n3MnmZMYRB20Au+NRSLRDWr2TQlUS7RDbD/FSzoBRQeRYtM/AO/i0qNcOL2URgXzR5tLi+VtHNozG\nCKXhscf1wuFCEMXbxvEE8lMOftIm0Qr7BFeFI5W2uN4IoYOuF2qQsEfOyvyEPVK4Jy3z8RM2kTAk\n1Nv/EBDbH1ZwvLCbFlwvJNldSJOuB6BKM5c4E5P9g7z7HatxVus73zWQsHMcDgunFmdsFhZd7NPy\nzTVMDSOUhkcCtxWQrnlxVmwhMVVLNS/lDBcCIW4+PCbr1wvMP6iRanQM3W2LraXckUKMfnK40EWd\nbQ8jSNq00w7JZv9sUAWqE7rcNApJZjYaaE9oWoHQtmjm9mdG8w+quO2wu44JcYZuttzed2pYq7Nz\nKXNmCTu9vSI/AUz7FpjL26wx3Jhgdt4xIvmIYoTScO4prdfJ77SQTnF9cbPB9mJ2ohISK4xItAJC\nx+rapu3RyCcobViIv78OFxHP2CYxE4hsi/Xrham0CNs7d29doQJYQnVMkamUUlxq1Pompa2MM3G5\nilrCyq0icyv1biuuZs5l63Ku+/msMCLVMbPvpSvSPYOYWW/QyiQIhgm+KslmnFA1iX1efmeH/G6Z\n3fk5Gvn8wPZhzZRPAtsWrt5I8OBe7HWnnf8tXnFJJM5+Jm04GkYoDeeaRNMnv9PqK65HYXatPl4Y\nT5XiZpPCdrPb8cNP2KxfL+wfK8LqzSIzGw0yVQ8F6oUEuwuZIwmd2hbhFCa8G1fzlDYa5MstJIpF\nbmcxO14mbqQsrNYGhCvVCMZed+0ldG3WbxRGls9INNri7yCi8UzzYEJRshF3DxHdf6eNK7lDk4Uc\nz+Obf+nDLN5fJrQt7CDkha9+Gc++4dvRThy0K5J//TMDx6sqtWpEtRx2k2yO65qTzdk8+VUpGvUI\n1diYwMwkH22MUBrONdmKNzQECZCueQ+dVWaqHoXtZiy0nZt8oh2ysFxl7Waxu1/kxGHSraVpjXwK\nWMLuYpbdxcmNH1IjEnYsjTvETCqUXUY8OISORWRbWEF/Msso8ZQDaaESKpfuV3rau8XbF5arPHii\nNDLU/qr/+Bss3ruPE4Y4nQ5Yt//4C5RnZ/nsN77q0I+iqjy451GvRV39r1ZCZuYcFo6ZbGNZQi5v\niiQvCiYWYDjXHLeBUX67NbD2KMSZnLYfHvPdDV1E2FrKEcn+7ywa5YvQMRroJVMb0T2EePY59JRh\nyBOf/wJO2P97dIKAr/n87/LRH03zTPRTtF7/oaGzyUY96hNJiJ+ldrYC/CN0qzFcXMyM0nCuaRST\n5HdbQ2eVzTHq9w7rPGFFykWVythIfDBtNhKoF0/GHrCVdVm5XSK/08LxQloZBwmV4s7+708FasXk\nQHeSUT0nRek2cj6IHYZINPy4TLnBJ17xExx2i6tVR9c71msRpVkzjzDEGKE0nGu8lENlNk1huxkn\n83RmKVuXs2OVGTTyiXhWeeB1FTlSfeOxUCVb8chvN7EipZl1Kc9nTqZcwhI2ruZYuF8F6F67eiHZ\nl6k6bYKEzc6BUHGzkCRbid2FGvkE7SEJUq2sCxuD76fCSO/aIJGgMjtDaWt7YFsy+fBrao+yAjSu\nOYYDGKE0DGB7IU4Q4SXtsb08T5LyQoZ6IUmm5nXCdsmxreUqs+k4dBdqtyWVCmxfzp662XZpvdHX\nQszZbZOpeqxMwwt2CK1sguWXzJCpeF1h9k+4Vdow/JTD7kPO6ycd6h1BPdje7bDM42f/q2/jW//N\nh3A1gCA+0LIYq6C/ULLZ3gqGzirN+qKhFyOUhi4SRiws12LnFhFQpTKbpjyfPvM27kHSppKcvPYu\ncixWbpfI7bRI130C16I6mz7x3poHsYKIwoEQshCHf4/qBTsOkW1Rm6BuUiKluNEgV2lDZwa4u3D4\nrNdtB9h+FNejHmN2vH05SzPnktttI6rUiynqhcSh3731a9d4/l++ib/wsa+w9ZHfJ2xZzM65OO4Y\ntoNJi8Ull7UVv5txJMDVGwksk6Vq6MEIpaHL/EqNZMOPw5Sdx+zCdpMgYVMvns+GwOMQ2RaV+QyV\n+bMbQ6KJgnrYAAAgAElEQVQVEIlgH5i+WBqblZ/l2Lqosni3jNsO+zqgpBo+D26X+izyIBb/S/cq\nHRehuPSmOpM6clkNIjTzSZr58b5rB8s+5o7Qmq0445DNWzQbikhcymGdw36ehrPFCKUBiGeT6SHN\ndS2NxfJUhFKVVN0n2fQJXZt6PnEuQr/TIHSsgZIIiEPBo5x73HZAuhq7ETXyiRM3EU82gz6RhI7n\nbRCRrXoD34H5B1USXSee+KD8Tgsv6dA44e/L02/cHWisPCnlnYDNdZ8gANuB+QUHyzIhV8MgZ3oX\nEpE3iMgXROR5EfmhIdu/V0Q+IyJ/KCKfEJGnz2KcjwNWqCNLMUZlJE6TvQ4eC8tVilstZtbqXPvy\nLm4rOPFzT4LthxQ3G8w9qJLbjRs0j4OfcvAT9sA1HmUpV9xocPnFMqXNJqWNBksv7JLbHnSdPep4\nhpEYca0tHdxmBaOdeAo747jjHo9RjZXHpbwbsLYSiyRAGMD6asDuzsMN46NQCXxFD2sRcgDV+Jjo\nGL+f7rmDyc5tOD5nNqMUERv4aeDbgPvAcyLyYVX9XM9uLwCvU9UdEfkO4H3Aq09/tBef0LXiBroH\nUvGV0VmH0yS/3eybzYjGN5eFB9U47HcOWhIlGz6X7lVA4yfMTNWjsNVk9VZxrGSc2Au2SqoZxElF\nlrB1OTeQYOO2g32ThA6iMLPRoJnf97k97ngOMmrGGgn4B+zX9h6shv1WRpVzTINpWdFtrQ8m8ajC\n5npAaWb49z0MldVlr9shxHGExSsu2dzhs9CdLZ/NnvOVZmNz9EnabIWhsnLf6zaCdhzh8lX32C5C\nhvE4y9Drq4DnVfUrACLyAeBNQFcoVfUTPft/Erh2qiN8nBBhazHL/EoN0f0KvMgSdk8o0aSXXLk9\n1BjA9iPsIJqqCfqRUGVupdY3RksBP6Kw2RzLPSdyLNZvFLGC2As2cId7wWYOcSPKVL24G8kxxnP9\nS8/zik/+Dul6jdXr1/mD1/5paqUSzawbh4h7PG/jLGGhXugPpQaJ0Q9W49S3TkKmWiXZaHLzLdax\nw617+P7wCxwG8QPaMBG7f6dNq7l/nO8ry3c9bj6ZHFmOUikHbKz1i/LudhyuXrg8/nUadu77dzxu\nPZkkMUYpjOF4nKVQXgXu9fx8n8Nni98P/OqojSLyNuBtAMnCwjTG99jRLCRZcy0K200cL6KVcanO\npscuxTgWZz9hPJREK8DxB0PQFpCtehPZzEWOxaHB7EOuhXZu4HYQP0BMOp6v/tTv8srf/jiuH8cc\nn/jc57nx/PN8+PveQr1YZO1mkbmVGql6HIJspx22LucG14olng3PP6h2H6wiiR+synPT6QySaDb5\n5l/+dywsPyCybVK/GPHHf/s621Noi+UmBN8bFEvHYahItlsR7daQNeaOk8/lK8NFb9TMdWcnZH5x\nuCBPeu7FEec2TI9HIplHRF5PLJR/ZtQ+qvo+4tAs+aWnTAD/iHhpl82rp99UtlZMUtzsDzcqELj2\nmc8m97I7R6FTfo6o55MUtpqHuhGpyEg9HTUe2/d55W//565IAliqOJ7P1zz7X3j2Dd9O6MQdUOg0\nstZDMkCb+QSrN4sUtlvYfkgr61KbSU2tJvT1v/RhFpYfYEcRhCGRB5981wtcu5k4dshxYdFl5b7X\nJ2IiMD+i/tL3da9ianDbEMHdIwiGb9MIogjszsdQVZqN2E4vnenPvD3s3N4h5zZMj7MUymXges/P\n1zqv9SEiXwP8DPAdqrp1SmMznDASRtihEjgWWEJlJk265pNoBfH6pAWKsHk1N/2Tq+L4EZEtY93U\n91p8DZOMSKB6hLKEwwiSNrvzGUqbjb7Xt3s6h0SORTsV95vsHddh48nvlrsz0l4sVRbv3Tvwoozl\ns+unHLauTP93lC1XmF9ZjUWyB1XY3gyOLZT5gg3XEmys+fie4rrC/CWHQmn4LTGZsoYKlUgsbKNI\npiyajcGZv+3su/806iHLd72+7UvXEl3Tg2RKRp47kzVh19PgLIXyOeApEblNLJBvBr6ndwcRuQF8\nCPirqvrF0x+iYeqoMrtaJ1dpd2/Eu/MZqnNp1m4USDYDks24b2Qjnzh0RnMUsrstZtYbiMYzpkbW\nZWspjx5SYN7bE7LvoxBb7E3aCHkcqnNpmvlE3KyauPD/4Mx680qOxbuV2M+2M75mNjFyPM1sBjsc\n7m5bLxSmN/gpkGo0iEb4yAUj1hd7abcjwkBJpUfXReYLdiyYY+C6QqFoUyn3+8NaFpRmR99GFxZd\n7r3YHpi57iXzhKFy/66HHtDSB/c8nngqheMKrmuRL9pUh5y7OPNIBAUfec7sKqtqICJvB34NsIGf\nVdXPisgPdLa/F/hhYA74p51YfqCqX39WYzYcn9m1etf3c+/2VdpsxMJYTNLOuEO9QKdBsu4zu1bv\nE7103Wd+pcrGtdFC4SdsEs1g0C8W+poXT5sgYceJOyMIXZsHT5RINQLsIMRLOQNNqXtpZzLcf+I2\nV7/yQl/HDd9x+MOHtKQ6TZ5+4y4/8aeu8Qv/2htqWp/JjZ5F+b6yfKeN5+2HKxcuO8zMHv87tXjF\nJZkSdrZDolDJ5mzmFx0cZ/TvP52xuH4ryea6T7sV4brC3CW3O1usVcKRXVMq5YDZ+Xjclzvn3u07\nt3vouQ3T40wfR1T1GeCZA6+9t+fvfwP4G6c9LsMJESnZIdmtlkJxq3niRerFAyUXe+dO132sIBpp\nv1aZTcV+sT3HRoCXdgiSRwgBqpJq+CRaIYFr0cglBlxvxkakU74znhB8/Lu+k9f+6r/n+vNfJrIs\nIsviude/jtWbN492/iPitgNSDZ/Qtmjm9iMHT79xl/e8ZonGO9/F3JzDxoFkGNumKx4HUVXu32nj\ntbXzc/z6xmpAMmkdO1wrIszMuczMTSa6e2I5jDDUoWFV1Xhb77ln51xmJzy3YTqYebvh1LA6CSLD\nGJbBOW1G9Z9Uic8/SiiDpMPGtQKzKzWcjvlCM+uytTT52pxE+zZxex09Zi1h9WbxxJ13AIKEy8fe\n9N0kWi2SzSa1QgG1p3deCSOyFQ/HD2mn3bhTSe+Mu1PWkqnur8mpCGs3CgP1pDPzLm7SYnsrIPSV\nbL7j4zpiFuW1dWhijSrsbB9/XfMkyORsZEhmrAgPrc80nB5GKA2nRmQLkSXYQ2rvvPQRvoody7t0\n3Sey4j6Lh4lNK+Pieu1BsdbRxfbdY7MuD54sxYX2lhx57bS42Rg0VgiV+Qc1Vm8Vj/SeR8FLpfBS\n011bdVsBi3criMadWiJp4Sds1m4Wu9crU/HIVL3+mb0ql+5XWX6yNPCeubw9diePMBydHRo+3HDn\nTEilBtcfY5G0Dk0SMpwuRigNp4cI25cyzK3urxPutb3aWZjQ1ECVheUqqbrfLaMobLfYupylMaIx\ncWUuTbbTcmpP5iKJk4nGEj4RomOuCfW2keq+LXGdphVGJ9JuaxiOF5LfbpJoh7TTcULScctw5h9U\n+66tpeB6IYWtJuXO7zdfbg1NjLLCiD/xjbu85zVXaLzzXUeypjssMzWbP7+ic/lKvGZZ3onLdgql\nOMloEucew8lihNJwqjSKKSLHprjVwPEi2mmH8nz60CSUYWSqHqm6P2DzNrdap5lPDhW+0LVZuVWk\ntNUkVfcJHYtyJ7v0cWLP+m4voSrZDMjvtlm5WTzamiuxg5LT4+izh6Xxw8GeUI5KXMmkhB/8T8/w\niR8uc9Tbkm3HJR69dnEisd3bYZmpk+D7ytaGT6Me4TjC7Lxz7N6VIjJRBq7h9DFCeU5JtAJK6w0S\nrYDQtdidT4/dfui808q6tLLHCzNmhszMABAh1fBH2qiFCftIa4vTol5Ikt9pDRgreCn71GaTBzN/\nBSBSZtbrbFw/WpmIynjmSvVCIp49H/jd2fhsf7Ry7C4Ns/MuyZTFzlZAGCq5vE1p1sGeQn9J31de\n/HKLqLPU7XvKg3seC4vOxAk+hkeL8xuPeIxJtAIW75RJNXzsSEm0Q+Yf1MidQleGRwUdWRCv6HmN\nWHX6NQYJm0g6Xrod27fNpfypDEEixW0PJjUJcb3oUYkcC29Id5RIYtelPWqlVNzgWfa3Ownlb/2F\nB1hjWRw8nGzO5trNJDefSDG34E5FJAG2N/yuSO6hChvrwbG7ghjON2ZGeQ4pbTQGnGAshdJGk1op\ndS46aZw19WKKTHXQPFwRWidUh3lkVClsNSluN5EIIgtqxQSRbcflIYXhoeITGYqw73h/gOiYY9i8\nmufynTISaTej10s5VHprQTsZrum6H4e/beEdP1ThT+7Uj9UN5DTY69xxECHOuE2lzb/Li4oRynNI\nojXY5w9AVLEDJXTNP8hW1qU6kyK/04pf6FySjWv5c/cgUdhqUtzar+G0I8iVvUMTj04MEWqF5EBS\nUdTTF1PCiEQ7JLStidYsg4TN/SdnyNQ8HD9ef26nncHfhwjNXKIbHs+VKrBz7E924jiuDPVWVcUU\n/l9wjFCeQwLHGmk1Fk4pjHQR2L2UpVZKkWr4RJb0Fa6fG1Qpbg9meloKpc3m9IWyY2aQrnpElsQl\nMwfEbmcxixNEJBs+KoKlSiOfoDKXprDZoLjV7M46/aTN+rXCyBrTASyhUbgYa+kHmZ13aDb6jdTp\neL06Bx5eVZVaNaJeC3EcoViycRNmpetRxQjlOaQ8n4lT7Q8+8ZeSR3dwGRdV0j0zAi81ZEZwAMcL\nSdV9VOKOEqeVlALxLKZ2CoX6R0U0XhccxtRNFlSZX66Rru+HpAs7LbYXs9R7jNLVEtavF3C8EMcP\n8RNxh5Z01duf+XaOT7RCFparrN2cfo2nRBGXlh9Q+U/r+IvDHwzPE9mczaXLTtxfEkAhnbW4cq0/\ncUwj5d6dNq2Wdj1ctzcDrlxPHDtD1nA2GKE8hzTzCbYXs8xsNLo32Wopxe6lk22g7Hghi3fK8Y0y\nihdJ22knbrs0QiyLGw0K2z1JRmt1Nq7maU25ee+jikocBXDCQbH0j1iKMYp0zSdd9wZKZmbX6rHB\nfM8DjERKsuHjeiFWqDTsuA/pqBpP2w+n2u5sdnWNb/3FD2EHAXc+otz1QxZm7XNv8l2adSmUHDxP\ncWwZmEkC7O4GtJr91nSqsHLf4yUvS5n6yEeQ8/2tfIypl1LUi0msUOMki1MIKc4/qGKHPTZzGtfY\nFbaaVOYHRTrR9IfeXBeWq9x/avb8hUHPAhF2DpgsQBwh2FkYv9nzOGSqo0pmYj/bvZCo44XdpJvY\nQQdKjoUeknVqhUo4pRwpKwz59g/+IslWvL4cddzs1lYiUmmLZCoW9I3EDH9cuI1nudyu3+dWfTqZ\nsY16SGU3dsIpFG0yOWsi8bIsIZUavX91NxpqfADQakakM/0PHKpKvRYRBEq65/Mbzg9GKM8zU3CC\nGRcriBM4hhWM58rtoUKZK7eHNhcGSNe8C7tWNSmNYgq1LEqbDRw/wkvY7F7KIJGycK+CFSn1fCLO\naD7Gw4VKXDIz7B16H1pmV2pYYb+DjvgRfsIiQgdrxkSmOvu98sKLSDQk7GxBeTfg0uUEf1h4it+Z\n+xpCsVCxeDF7laXmJm9Y/e1jieXGms/O1r4hQbUSkivYLF11pzbTkxE6pzBwDs+LuPdCmzCiG+7O\n5S2WriXMzPMcYYTSAMQZtaNusqPEcOT9yvz7HqCZT3QdgJx2wPxylYS372STaAXkKm1WbxaPnLVb\nLya7Lcz6EZp7JTORkmoOZlUL4ARR/GAWxjPNPXvB7UsZRCG/3SBb9qBTG1mdOVqpUqLdHmrIqiHw\nLTd4xd9a4md+4klCa1+cA8tlJT3Pi9krPFEf6O8+Fp4X9YkkxMOoVUKaM/bUTNNLs0OSfgDbipsw\n9/LgnkcQ9O9Xq0bsbgfGxOAcYeb4BiC2dwvdwa9DJFArDF9vbBQSw4v7lU7rJ8NB3FbA0gvlPpGE\nji9qOyRb8UYe+zDaGZfKbDo2MZC4XjOyYP1afn+meoiuKcLK7RKVuTStlE0j77J2o0C9mOTS3TLF\nzSYJLyTRDiltNFi4Xx3uQP4QVm9cxxoyo/Rdl997+gk+73wjrj2Y3BNYLl/JXp/4fHvUq8OTp1Sh\nVp1eMlEub1Eo2YjEzxGWBZYNV28k+2aJvq/dlmAHx7O7c/6Tmx4nzIzS0GXjSp7Ldyug+2tXQcKm\nMjc8iaiVcWnkE32F/yqwvZg91czXiVGluNmMreQixUvZbC9m8dLTEfdEM2B2rU6iFRBZQq2UZHch\nAyLMrDfYq/k/iKVxyLp+jL6c5YUMtVKy01FlSMlMp39lqu73jSGS2F4usi3K8xnKPaH2dM0j0dPx\nZG+scU/NYOLr1sjn+eyrvoGXf+p3cfx4HL7rsHV5kfJrb5BMDldz0YhEdHT3IOuQr6Q1xfV0EeHy\nlQSzcxGNeoTtCNmcNXAOPcTN5wjPH4YTxAiloYufclh+skS23Mb2I7y0QyOfGB1eE2FrKUetFJCu\neagl1AvJU+mrCHHzX8eL8JI24QTnnF2t9xXcJ1shi3crrNwqEkxozn4QxwtZvFvuMRdQ8jst7CBi\n60qeZMsfOalTIJzCA0bo2tRKo6/H1uUci3fL2GGERPHDjZ+wYzEfQrLhD00SEoVkY3KhBPj0N72W\n1RvXeekffAa37fHCy1/GCy/7Kr7GqfLyp1NYogOhfVsjXlZ9YeJz7ZEr2KytDAqtSNyxY9okkhaJ\n5Ojfp5sQbJuB0KsIxiD9nGGE0tBHZFtUey3HHoYI7YxL+xRt4ySMuHS/SqIVxGbcCo1cgq0ruYeu\nmVlBRG7IOp4oFLeabF05nudqYas58N6WQrbqsRNEhLY1NOwIsWDVZkbMJlVJ13yy5ThTtF5MDTZF\nHpPQtXjwRIl0zcfxQvyUHdv+jXivwI29aQ+KpQqE4xoRDGH15g1Wb94YeN11hR+8+pu858U/hxK7\nrUdYfP32H3KpvX3k89m2cPVGguW7XvejqsLikkviDMwARISlawnu3/G6dZlixZ9/dt7cms8T5rdh\neOSYW62TaAbxAnvn5p2pefgjylh6cfwQFUEOxLYESAwxC5+UUfaDkQiuF1KZTTGz3hjoHgKwdTk7\nst3Y3Eqtr+Fxuu7TyCeOLuwiY7cXaxQSzGzU+2Z4caLP+O/xMJ5+4y7vec0SjXf+FJ/4m/E1eAu/\nzP3MIr44XG2tkw7bxz5PNmfzkpelqNeijmGA0G4qlXJAJmMPrYs8STJZm9tPpSjvBAS+ks5a5Av2\nVEPBhuNjhPJxoMdtx0uN8N98VIiUTM0bWsaS3x1extJL4NoDIgmdVldTKIHwUs6IMhvFT9i00w52\noF2TBlFoZl02r+T6DAF6STSDPpGM3y/uyVltBbF70gkS2RZr1wvMP6h13YRC12Ljav7QWlmJIq68\n8CLF7W125+d5cOvm0O/du9+xyitfeJ5PvOIX6L0l2UTcbKxM/fNYVtz/sdWMePH5NroX5VWf2QWH\n+YXTTURzXWH+kkl+O88Yobzg2H5cXG6FPR0dkg7rNwqnbwigSrIZr2fGPqTJid1eRAfXrvawxmh1\nFDnWUFNwFSjPTRByHkFlLj1QohEJNPKJrl9qeSFDZS6N44eEjvXQxKdUfbBLCsQim6r7Jy6UAF7a\n5cETJRw/FsrAtQ592Eo2GnzHL3yATLWGFYZEtk29UOBXv/fNeKlTNoIfgqpy/06bg5bK2xsBmYw1\ntVIRw8XACOUFJ54F7BeXi0KiHVDcbLB7abrOMIeiyvyDGulafNNXOmuCS7mJjAnUtvATNgmv/w6n\nxDOzcdi+nCV0rIGs1+Mm8kAsINVSivxuqytutWKSncX+a62WjAyzHkRt6a7F9r0ux2+NNREiYydq\nvfo//ga53TJ2Zz3WjiLyOzt8w2/8Jv/5u74D6A23fpBnf3Xyax9FyvZmQHk3/i4UihZz8y7WGI0D\nmo2IYc9VqrC7HRqhNPRxpkIpIm8A3gPYwM+o6o8e2C6d7d8JNIDvU9XfO/WBPqJIGJEcUlxuKWQr\n7VMVynTNJ13bDx8KgMZrb5N2/dhayrJ4t9Lt2RlJvF62MyJrcwARygsZyuPuPwEH1xKVeP10dyGD\nHrHzSz2fpLTeGLqtMaU1wqmiyo0vPt8VyT3sKOLWF75I7Z/9ad7zmiX0uY8PhFvHP4Vy78U27da+\np+rOVki9FnHzieRDXW2iaGRbzhNpwuyJw+cKT/Ji9iqpqM0ryl/ianN96ucxnAxnJpQiYgM/DXwb\ncB94TkQ+rKqf69ntO4CnOv+9Gvh/On8ajslIt50TIlsZbDUVD0RINfxub8Jx8NIuK7dL5HZaJLyQ\nVsqhNpMavxXUCeF44cBaohD7pOZ221SPGNqNnHg9cOFBte/1jSv5iT+zhBGFrSbZalzOUy0lT6QZ\n+LB14MNen5RGPaLdHjQe97zYN/VhXTrSGWtoraII5IvTnU364vCha99GzckQWg6ospy+zNdv/yFP\nl7841XMZToaznFG+CnheVb8CICIfAN4E9Arlm4CfV1UFPikiJRFZUtXpr/BfQNS28FI2iVZ/cklE\nPEs51bGM9CE9zIp7NEHCZnfxFEPHY5BoBUOnKZZCqulT5ehroK1cgnsvmSXVjOsAW2l3Yl9YiZSl\nO2VsP+qK+cx6g2QzOHZZTP+JhOXbt7j6wotYPWoUiVB/5SL/7b/4XZ753j8gasXdQuwjzLRbzajb\nwqoXjaDZCB8qlLYtXFpyWF/Zt7QTC1IpoTBlofx84fa+SEIcwhaH52ZfwcuqL5A8homC4XQ4y0fw\nq8C9np/vd16bdB8ARORtIvIpEfmU3yhPdaCPMptLOSJLiDr3okggTFjsLhw/cWUS6sXkcLs7JK7h\nuwAErj00lqeAP40WVZbQyiZoZRNHMk/PVNp9Ign72bOON13LtE9++7fSymTw3fh3a2UdUjmh+LsP\n+NI//zRrd5TN9YAXv9wmDCZ/VHITMtR8XISxGySXZlxuPJGkNGOTL9hcvuJy/dbDw7aTcidzdV8k\ne7A1Yj05O9Z7eO3Y/7VaCU8kNGw4nAuTzKOq7wPeB5Bfesp8kzoEyY7bTsXD8UO81EPcdg6iiuNH\nhLaMLF8Yh1bGpVpKkt/tr4XbuJo/VseMqdL5rPDwrM5heCmbIGHjHigPiY0Ezj7TMzXCYQfidmrT\ndFRqFAp86G3fzz+4/RyF//ICm7+5ycZqNBAqDQNle8tnYXGytdZc3sYSn4PyLgKFCVxtUimL1JWT\nXedNh614qntA2SMRUuHh3r6qyvqqT3nP+zX2X+D6rSSp9Dm2ibxgnKVQLgO9DsfXOq9Nuo/hIaht\nHelGnd1txd6kGmfN1vMJti/njlZWIsLuYo5aKU267hHZQiOXOJb4TpNE02dhuYYVduoEHYuNa/mx\nM1MBEOnWG6aafmxJ51hsXc71i5Aq6Xrskxq4Fo188vilOpGS7DgVeanhdbKBY43sEHMch51R/Pg/\n2OKVL0Q8+8/KpNM2SjCwT9y9I2JhcbL3tizhxu0kD+57XWNxNyFcuZYYK+v1NPmT5S9xJ3uVoEco\nRSOyQZN5b+fQY2vViPJOuP+A0ckYv3+3zZMvNU2gT4uzFMrngKdE5Dax+L0Z+J4D+3wYeHtn/fLV\nQNmsT54OqbrP7Fp/s+HY/LzG5tWjr2cFSZtq8nTDvg/DCiMW71Wweta8xI9YvFNh+SUzE4lY5Fis\n3yhghRESaSxAPTcziZTFO2VcL+zWtc6sN1i9USQ4ouFBuuoxv1IFBFRRS1i/VsBL9//zrpWSFHZa\nfYlce2LeypzsrcCyGF3/esSJbCJpcevJFEEQq8dpu+qMy+X2Fn968/d5dv6ViEaoWOSCOt+58lsP\n7UhX3gmGJh1FEbSaSjpzPj/zRePMhFJVAxF5O/BrxOUhP6uqnxWRH+hsfy/wDHFpyPPE5SF/7azG\n+7hR2GoMhOksjUsdrCA68wzTaZKpeAM38bjDhx65AXVkW/G3+gDFzQaut9+JQxQ0VOZXqqzeKk18\nHtsLmX9Q7bxf501D5dK9fpG3vZDFu9XujGQPL2mzcTXX6QQS4iesOAP5GDOVPaedZ1//GZ7tvOYm\nLJIpodU8YB0oMDN3TCP6U2pufhxeXv0KT9XusJGcJRl5zHrlsdq2jrAFjnPGjphBHIZKrRIShkom\nax8awt3fF7I5i2Tq4vy7n4RDv6EiUgAWVPXLB17/GlX9zHFPrqrPEIth72vv7fm7Aj943PMYJmdv\nre4gKmCHF0soHT8c3h0jAnvEdTgqBx2BoOMz2wqxwmji9mTDDN4hLsPoFfmF5SpOEA1kP1eLSRaW\na30z3Mi2WL1ZmMg1ad884F18+vVOVyB7uXo9yb07bXxPkXjyy8ysPVGnjGolZGPNx/cV1xUWFt1H\nptOGqyFXWhsTHVMsxVZ7wzTxKGuUzUYYm7BrfP1FAnIFm6Wr7kAYt1GP94X44WpzPe6ysrg0uO9F\nZ6RQishfAn4SWBcRl7jY/7nO5p8Dvvbkh2c4K9ppB8cf9FRFp5TBeY5oZdzYpWeI8037hEOSx8U6\nIH5928L4A9l+GAvhwe1AaTOOHPTOcCWImFups36j8NDzD5qZj75ejivcejJJu6UEgZJKWxPNBivl\ngNVlvysavqes3PfQqy6F4vn+PR2VQsmmvBv2iaUIXL6amNg4XVVZvuv1zVLjNeKQat7qu4Yaxfv2\nJV8Bld249OZh5TcXjcMeSf4n4OtU9U8RhzzfLyJ/sbPt8XqceAwpz2dQS/rCdJHA7nzmZLNUVUk2\nfHI7LVJ171Q62LayLl7S6ZbQQPxZWxl36j6q9UKy7zzQMWRP2Udqdt3KJQber7utY+knh0yK7Wiw\nfZYQZ8jKGGUIb31pC33u1/n0mBZ0IkIqbZHL2xOHTDfXBtfrVOPXzxthqJR3A3Y7XUGOiohw/VaC\nK9cSFGds5hYcbr0keaRZdKs52ravm1XbodEYEVHSeN30ceOwb7e9lzijqr8jIq8HPiIi1xm5LG+4\nKEUdLCMAACAASURBVAQJm5VbRYobDVJNn9CxKM+laZ6gUYFEyqW7FRLt/X+IoWuxeqN4sqFeEdZu\nFMjvNMmVPZA4JFmbmb5jTXk+Q6rhxyUknVCnWsLmEQv+m1mXdtoh2Qy6ghdJ7C+7l2kbJCwiS7oz\nzD32BPaoLk1Pv3GXr52/TePHPshppDv4IwRn1OvHoVEP2doI8DwllRLmLrmkxlyf25v57rGOz8Ki\nw8zc0eqFRYRcwSZ3zBDzYVfpFJ5HH2kO+3ZXReTJvfVJVV0RkW8Gfgn4E6cxOMPZEiRsto6R4Top\nxY0GiXbQbwHnRcyt1ti49vAw4LGwhOpchurcFP1fe2Nley9ZwurNYpw80wwIXJtmvt/rNlNpU9xs\n4AQRXtJhdyEzujG2COvXC2TLbbKVNipCrdRp6tyzz9aVHAv3q33+uKFr0Uo55Cr9IXYlDr2PyvZ9\n+o27/OQ3Xqb5Qz//0HDrNHEcCIZMZpwpn75WDXlwbz/sWPOVeq3N9dtJ0gfWBVW1b70uDLQvPLzH\nxlpAJmeTTE73gW8voWecNcN02hrqbysCxZl+EU5nrKHCKgKF0sUMcx/GYZ/4bwGWiLx8z39VVasd\nI/M3n8roDI8VuRGJLumav5d50L9RFSvUuIPGeTEtIK7JnF2tk2iHqEB1JsXuQmZ//NLjsHOA3E6z\nr7Fzqhlw6V6FtRsFvPRosayXUtRLo2tlW9kEK7dLZHdbuH5EM+vSKCQRVVLNADuIHXuizgx3ayk3\n8B7vfscqxfd+kk+8/iv8nK/YDswvKKXZ8WZKrWbExrpPuxnhuvEsbZK1rvlLLmsr/SIkAnNT7OWo\nqqyvDAqdKmys+ty4nURV2Vz32d0OiSJIpoTFJZd0xqZWDYfaGKpCtRySvDQdoYzC2IigUo5rLNMZ\ni8Ur7qFCLCJcuZ5g+a7XHZMIZLLWgG2fZcU1qQ/u9e+bzVvk8hcnkW9cRgqlqv4BgIj8kYi8H/gx\nINX58+uB95/KCA2PDYeFAPfClHv0miEAVEvJuBvKGWfjOe2QxbuVvuSY/E4LO4ge7qeqSmmjObQs\nZ2a9wdrN4rHGFiRsygc6xijCgydKZKoeiVaAn7BpFPoNEPbKPX7ta3+Pz/TMlsIA1lfjKd7DxLLV\njLj7Qnv/2FB5cM9jccmlODPeDKU446DE1ndhQEeoHUpjHj8OqqNDua1mvG63+sCnWt43AWi3lHsv\netx8Ihm/NuJ7PE3ruXt327Sb+6bwzUbE3a+0uf1U6tC132zO5omXpqjshoRhRDZnk85YQ2ekubzN\nE0+lqJQDwlAP3feiM8437NXAu4BPAHng/wNee5KDMjyeNHIu2WFhwFR/GDBd9QbMEPK7bQTY+f/b\ne/Mgx/arzvNz7qJ9SeW+VFZlVb16z5g2xja4oXF3Y2OatmFsEzTETLM4GiLcBNMeOqYJMEMwEbPE\njImJdmCmZ5hxQ/S4B4hmacfYMRho22AY84xX7Ifxs997frXnvim16y6/+eNKmanUlVLKlFLKrN8n\noqJSV1e6P/10dc8953fO98y1e0KDwvB8chslEoXgLrucjrA3m2xZP83sVtoMflNPdd/1uyrgBM21\nwy+mdm2wWqwtiFDORLnzYxXe//emKf/8rwS1Iw2a5R7bmx2SaTbdUw3l1kYHL23DITNh9nzxncjZ\nTOTstpDnoBDhsHTlJKYluK5qMZJNlIKdbZeZ2fBLqgikM4Mx6NWK32Ikj48hv+ue6mFbljA53dtY\nLFuYnL4aWsznoZfZcoAKECfwKO8qFabbr9Gcj73ZJLGyi+EdCwNKexgwux0uhpDar7E3kxxOGFYp\n5u/lsZyjcozkQZ1oxWX11sShJxuptvf/hOBzWHWvq6H0u0ivufbwwl2HAgE/+RzPAp0uC0493Ih7\nXvta3Uma3thJfD94fb/rjMPyakSE3KTJ3q7XFuKdnDZbakBPUq/62BGDqRmLna1jXUkkKPOIJwbz\nHdbrfugYlIJqVV+ah0Evp+fngA8D3w5MA/+HiPyQUuqHhzoyzROHbxlBGPCgFuigRkyK2WibHqzl\ndr4YmJ7CG4KhjBcdTK+1ZlEA0/WJF+uH2cD1mEWkFlKzqBTOaaLjIhxMxsnstoZffQmyZQdNmIJO\nNyIRoR5iLE3rdMNl2XKoydr2+jFb8pqes/F9yO8frTdOTgch3uCmIPx1TdWaqRmbZNrkYN8FFfS3\njCcGV3cYiXbupamF0odDL4byp5RSn2/8vQa8XUR+fIhj0jzBKKORmNJln3rMIlZy2oyREsEbkpyZ\nXXND6xFFQaTmUWksPx5MxUmeUMvxBcrpaE8lLvnpQAe3GcL1TWFvNkElPbgOF/0ayCbTc3ZQ4H/C\n05ruIZlmesZm7XH7aycmTWSMErEgMPpzixGm5wJhBNuWw+J+y4JM1jxMojl6DUzOHF1OYzGD2Pxw\nupLEYgaxuNGm2CMGPa/3avrj1Fk9ZiSPb9OJPFeZhvzZYblBNkYtOT7rFHszCebLeVBHyhe+EPTY\nHFJIzo2YKKO9eF8JLZ6iGzHZuJElt1EiWnHxDaGQix0awG6I57HytRe48cILVGMxXnr1t7C9MD+Q\nz/St37fNu9fybP+bD7P5OxZ/mTZPVXYpmTG+kbpO3bC5Vl5nLrPDwrVIICFXV1i2MD1rke2hXCCd\nNXE9q0U0IJszmZkbzHm1Gpvh6+mbuIbJ7eJDVkqPCS9w6B3TlNCm0nOLNpYt7O+6eB7E4sLcQmTg\npR/duHYj+B4O9oPM20TKYG7evhS6t5cROauw7jiTXrijXvfO9496GJcTpZh5XCBWCnoXKgJjcDAZ\nJz8z+PDfWYlUXSY2g7pL1zLITw9XDAGlWPrGPmZDMi5aKREtFylM5Lj3TfPnXhcVz+P7fvf3mdzY\nxHYcfBF80+QL//Dv87XXnV0t8tVv2+d/XknxkVe8n2r5qC2iacKNm7GOHTfuJRb5+Nx3AuCJiaU8\nVkqPeNPmZ84ly6WUwnWD4/crwdaJz+W+mecmXhG0sRIDy3dYrGzyj9c/pSXENId811f+8AtKqW87\ny2u1n65pIVZ2Do0kNLpoqCAUWMxG8QbY3Pc81GNWVy3SaNlpdOrwqcdM9qcTOOeRo5NAKGD68T6v\n+/OPM7m1im8aiO8zs/4tfO5NbzyX57fytRcOjSQEa5qG6/K6P/8LXv7mV1KP9ddP9HiCzh8+qFEp\nHj2nfHB92Fyvs7jcfnPhiMkn5r4DzziaL1cs7iWXuJ9YZKW8erYPSRDWtAcYnCiacb488U14x3p1\nuYbNanyWh4l5rpfXB3cwzROLNpSaFuJFJ7yeUcHcwwPMRolDfjpOKdt/M+iLIF6oH2s9BWbRJ1bK\ndy/a7wHPNrj91c+S217F9D1MPyjZuPPlv6EwkeNrr3vNmd975etfPzSSx/ENk7mHD3l4507o6179\ntv2Wx+98utqy/qiUolgIT37qtH0tPhN6DriGzQvplXMZykHzKDGP4HOyp5lr2NxLLGlDqRkI2lBq\nWvA7LLMIYDdaThmOz+R6CfEUxcnxasKMUuRO1Fg2veLzFu0brsvN57+G5bXWNNquyys//4VzGcpa\nLIpPeJcCJ9Lu9R3v2nFckLwKfSXohBEYyfAlmU51nqMi4rcndQGI8on47Tcelw3fV/heb5nFmuGh\nc4k1LZSysRYFnE4YCnLblYGrKZuOw+TGBvFi8fSdQxDVuXwkUj1f1wPLcToaiki1eq73fuFbX40f\nUkzoWRYby9fatvfatUNESGfCf+adRLYXqpuhYWTLd3imeLfr8S6a5fJaqE03lM8zhfEaaz/4vmLt\ncZ2Xvlbl5RerfOPr1aDcRDMStEepacGNmOzOJ5lcLx2mlIrfoa+aUpiuwuuQENIvr/zs53jNp57F\nNwwMz2Ptxg3+4j/7ftxo72n2SoJ/YaHDbsX+vVCPxSin06Tz+ZbtPrAeYsz6YXtxkS/+/Tfw2r/4\n//DNwIB5lsnHfviHUEbruPvt2jG7EKFareG66jCZx7KE2fnwMLSlfL53/S/5T/NvABQ+BoLiTuE+\ny2cIZVYrPjtbDrWaIhYLCvKjPXbiOIlSCqeuMEzBsgRbebx1/S/4o/m/37CXgi/CG7a/QM4pnOkY\n48D6Y4di4agExfMC6TzLFhLJE2FmV1Gt+FiWEI2J9jyHgM561TTKQRwM36cat/EiJuL5xMouSoLm\nvtFqu4SaL/DwzuRAlHCuv/Aib/jDj2I7x1psmSaPbt3kkz/49r7ea2Kz1NaI2RfYm01QzJ0vVLxw\n7x5v+tCHMTwPQyk8w8CzLf7wx3+Ug8nJc703QLRSYe7hI+rRCBvLyy1G8ijc+is9939s0lyrrNd8\nolGDZPp0zc6qEeHl5DUcw+ZaZZ2per7r/mGUSx6P7rfXTy6vRPtWqikWPNYfHzUejicMFq5FsCzB\nw2A1PosnBgvVLaKXOOzquYpvvFANDdYkkgbLK0EoPhBnd9nbcQ+VeuyIsHwj2jGbeVAopaiUfZy6\nItqo6xx3dNar5szYVZe5hwdBSLHxwyxMxNg/VuS+D8w8LrQZnkIuNjC5uL/zmc+2GEkA0/O49vJd\nIpUK9XjvBm5/JoH4ilS+drgtPxWn2KW7Rq+srazw0R/7p3zzZz9LdmePzaVFvvr6b6OUGUwbsFo8\nzoOnWxN3epWYC8P3FbvbLvk9D6UUqYzJRK43YeuYX+eVhZf7+wAnONntA4IL+uZ6nRu3ev8+qlW/\npfUVQLnk8+h+jZXbMUx8litXI3HHdVVoBxJolREsFnz2doK61Oa81GuKxw9rfc1tv3iu4uG9WotK\nUyxucO1GZGAlP+OGNpRPMkox+6gQiHEf25zer1JL2IeGspqKsDOfJLdVxnTVUV1lD0X0vRIvhWvx\n+IZBtFLty1Aiwt58iv3Z5GGWbqfeiqEv9xXJgxrRkoNrGxRzMTz7KNy1NzvDp37g+3sfzxk5q4LO\ncR4/qFMpHym45Pc8ykWflaeiQ7+oKaU6ytZVK/1FsvZ32gXZITAMtap/5lDuOGJHpGMHkuNe+G6H\nOalVFU490J0dBuurdWonvtdqxWd702F2SGpEo0YbyieYSNXDOKFfCk2B8WqLbFo5Gwv6F/oqMDoD\nXgdZu3Gd21/5KsaJX75vGhSzZ/PWlCG4fdZ9iuezcC9/2J9RAZm9KpvXMudWJ0rkq0xsV7AcH9c2\n2J+OUz5RYtMSXm107TgrlYrfYiSbuK6icOD1pKhzHkQEw+AwVHocs89y3DCN2eAY4DqK6HhWKp0J\nw5A2YXUI1panjsnk+V4Hayrg+TAMLa1O5UZKwcG+x+z8EA46BmhD+QQjzW6sIbelRljvPBFUlw4X\n5+HLf+87uf7CS1iOg+n7KMC1LD77pjei+r2qnoPsTuXQSMJRacn0WpHHtyfOfIOQyFeZWj8qW7Ed\nn6n1wIsuZ2Mt5R7P/nOLQfw0ax06digV9C/MTpz7EKcyMWkdhgebiEBuqr/Pl0y1a5tC8FmiXdbH\nKmWf3Z1Aci+RMJictoe+fjcIpmZs7Iiws+XiuYp4wmB6ziZyTCYvlTbYq7e3/BIgGu3tM/Y7P91S\nWgbYbnPsGImhFJFJ4HeBFeAe8CNKqb0T+ywD/x6YI7ix/4BSSmfoDJBazCIsxuMLlDIXG0IpZbN8\n5J/9BK/6q88y//AhxUyGr/zd17NxfflCx5Eo1NtaeEHQi9Jy/L491CYT2+ENmWfLJf6vX88N1EA2\nsSMSeh8kEnQCuQimZy08T3Gw7x2OJZsze+6H2GQiZ7G3GzRsbtIUVe+kb3qQd1k/1mi6VvXI5z1W\nbkWHFpYcJJmsRSbbeZ4mp2wO8h6ee/QdiwRatL2sQZ9lfgxDiMUlNHSeSo2HatcwGJVH+R7gE0qp\n94rIexqPf+HEPi7wr5RSXxSRNPAFEfmYUuqrFz3YK4shbM+nmF4rIo38AV+gHrUojkB1p5zJ8Jl/\n9ObBvqmvSO9VSR0EiT3FbDRIQupwIem2ltl8znB9cpslEkUHBZSyUfZnEl1fazkdvLt9xbOv+tcM\n46eYSBqYpuCfuNUP+iNezE9fRJhfjDAzF5R12JFwofHTMC1h5XaMnS2HYsHHNAOvNJMNvzgrpdgM\nSSTyvaDR9MK1/m8EmxUC41J+0ZyT/T2XcjEoD8lNWT1loPYzP7Wqz+a6Q6UczHs6Y1JrZME3g1KG\nCTMdyo2uAqMylG8Hvrvx9weBT3LCUCql1gjaeqGUKojI88ASoA3lAKlkoqzFLFL7VUxXUUnZlNOR\noXXhuFCUYu7hAZGqe+jNTWyViRfrbC5nQj9jYSJKbrO1MbQCnKiJZxmIrw7XMJuvTu1XiVRcNm6E\nvycENZxhQggpt3zOD9kZEWH5ZpT1R3XKjTBsJCIsLEUuvMuEaQpmvLdjum4w+SfHaFlBl465hR7e\nw1Gha6MQlKz0w0HeZWvDxXUUhglT0xa5KevMBtP3FZ6nsKzz1zyapjA1bTM13d/rep2fet3nwd3a\n4b6uC/t7HumMSSQa9BiNxYXshIUxpGWZcWBUhnKuYQgB1gnCqx0RkRXgNcBnuuzzLuBdANHMzEAG\n+aTgRkz2Z5OjHsbAiZWdFiMJQbgzWnGJVlxqifY74OJEjGjFJVGoH27zLIOtpaDhZOKg1pYAZSiI\n1Dq/JwQtwCbXW6X1LN/l23f/5lyf8TRsOzCWnhdkJplj3IapXvNZfVQ/zJSNRIWFa2drX9Xtot3P\nHAS1m0eeV9PjUipYR+wH5Ss21hwO8oEhEgNm5iwmcoP3xFyn0Uuzgwff6/zsbrttBlUpKBx43Ho6\n9sS09RqaoRSRjwNhOVC/dPyBUkqJhMpwN98nBfxH4F8qpQ467aeU+gDwAQgEB840aM2VIlpxQxV6\npGEsQ42aCLvzKRy7QrxUx7VN9mfih+UhJw3vceya19FQlrIx/ulb8nzu9xV7BZukW+bbd57j6eL9\nvj+XUopqJfBK4nGjpwv/WcKdF4nvKx7crXFcRrdWDbbdfjrWdymLaQrJlEGp6LclEk32kUi0vRFe\nB7q77TI53Z9Xub7mUDjW8Fl5sLnmYlkGqfRg1vea0nelgn+4JpybspiebR1rr/NT7ZAQJhLc2FjW\n1V2XPM7QDKVSquNik4hsiMiCUmpNRBaAzQ772QRG8reVUh8a0lA1VxTPMkLl7JSA18FwGJ7P/PHy\nkKpHolg/LA9xIya+EGos3S4JIs2ayJtfeg5FB0nAHqjXfR7dq+M2al8Dz8bq27vpxp6dZiM2TcKr\ncq28fu4GyL1QOPBCsyaVD4W8RzbX/6VqfinC6sOgjrRpNCanLdId1jXDqDvhn91XQdlLrwnZvqda\njGQTpWBnyxmYodxYcygV/BYRgr0dF9uGicnWc6SX+YlGjcP1yJPjvgwJUYNiVKHXjwDvBN7b+P/D\nJ3eQ4PbnN4HnlVLvu9jhaa4CpXSE3Ga5Je1TAUqEcia8yXPmlPKQYjZKdruCUkciDYqgBVe1gzd5\nkrMaSaUUj+7XcRoX7+an2tlyicUNkufMOlTAJ2dezzdSywgKUQpbebxt9U/JOmcTqe8V1wl0aNvG\npDj8vP1imsLyShSn7uO6ikjU6NuzjkSEWjWkfMoI/vWK26nmkbN/vpP4fmdjvLvjtRnKXuZnctqi\ncOC1eZ3JlIF9CcpsBsWobgneC3yviLwIvLnxGBFZFJGPNvb5LuDHgTeJyJca/946muFqLiPKNNi4\nnsGxDXwJMnpdO9jWKUP1tPIQZRqs38hSi1uB0QUqKZv169nQRJ73/dw6f/ZDn6L6xg/x6Z987lyf\np1ZVuCEXVaVgf/f8nSVeSK/wcmoZz7BwDRvHjFA2o/zJ/BvO/d6nEYsbSMjVSIRz64jaEYN4wjxT\n+Hlmzm77WkVoC2WeOgZbOubHxQekk9opOQcI1qg70G1+orFAmq5ZThRkTJtnyhq+zIzEo1RK7QDf\nE7J9FXhr4+9Pcfabb40GgHrMYvXWxGF5hmsbXTN6eykPcaNm0NfSb9TUnHi/09R1mh0wRPoLX/m+\n6qQPgddfImcof5t5Ctc4cUkQgwMrSd5KkXWH51UmkgbRiFCrqZaawEg0WEsbFcmUydL1CFvrDvV6\nkKk6NWP1HQoWEabnLLbW28UXpmcHEzY3zeCfG3LPlOhTgL7ltUmTm3fMw/NvXMpjLhKtzKO5+kjv\nUnady0Os9jZdRicD2Vk8oFzyWHtUPzRskaiwuBwh0oPBjMWNUCMpEqi0nBdPwudIUHjGcJM2mqUs\nO1tukBWqIDNhMDXTW/H8MEmmTJJPnf/z5yZtLMtgZ8vBdRSxuMHMnD0wnVoRYW4x0iYebxgwPXd+\nY3xVBc97QRtKjeYYLeUhjeuCZxpsLaVOfe1pzZRdR7W1nKpVFQ/v1rj1dOxUg2AYwuy8xeYxryTw\nSoWJyfP/lG8XH5C3U3gnvErb98idocVWvxiGMDNnMzOAi7rrKLY3HUpFD8MUcpMm2dzZax8HRTpj\nku7QMHsQpNImyytRdrcDDzgeN5icsXq6EdN0RhtKjeY4IuwspsnXPaIVF9cyqCWsUwUYemmmnO/Q\nod73oVT0e8p8nJi0icZM9nddXFeRShtkc9ZA7vZflX+Bl1PL5O0UrmFj+B4GijdtfvpSrYG4ruLe\nN6pH4WhXsbnuUqsp5hYu79qa5ym21h0KB8EHS2dMZubstvKgeMJg6Xp4sprmbGhDqdGE4EbMnsK1\n/YiZO3UVGjpVitAknU7EEwbxxOAv+Lby+MFHH+du6hqP4nOk3DLPFO6SHqJ60DDY3w0vks/veUzN\nqEtZJK9UUFN6vG1Zft+jXPa5+VR05J7yVUcbSs2VQ/ygiEyZww03tSTtdAi3HieRNDgISd+H1j6D\no8TE56niA54qPhj1UM5MudTeZQSCoECt6mNdQvHuUtEPLSNx3aDt1TDDuRptKDVXCNPxmForEisH\nIc56zGRnIYUTHY/TPJ0x2dl2WzzLZiLOVWo83AmlFJWyT7USSKul0sZQPKFIRKiEOMFKtevHXhZq\nVT+8ztQPnhs3Q3lcPSoWNy7tvDcZjyuIRnNelGL+/kGLWHmk6jF3/4DHtycG6l02VXY+/ZPP8SzQ\n689IDOHGzSg72y6FAw9DgpZTg0jEaeJ5it1th8KBj2FAbtIiM2EOzCAFF0CfWlURiQrxRG/GzvcV\nD+/VqFWDmwQxwDTg+s3Bt7zKTVmhnns0Jpf2hsSOCGLQZiwvsmVar5SKLmuPHDz/qL4vTEbvMqEN\npeZKEC86GH6rWHmgqqNI5msUJ+MDOU7TSFZ+/4uc5edjmIPL7DyJ7yvuv1wLVG4aRmJjLWiPNL90\n/jVN31M8vF87UqoRiNiBustperM7mw7VqjqUE1I+uD6sPXa4fnOwiSfRmMHicoSN1aMynETSYGEA\nczAq0mmTLcPhZAMaw4TUmHiTSinWHgd6tofbGv/v7QTqUePm+faKNpSaK4HleBASmjIU2A2xgez2\nDre/8hUi9ToPnnqK1ZsrZ24n1sua5FlQvqJS8Q8Vafq5A8/vuy1GEoJw40HeY2rGP7fntrXhHHqE\nwZtDrRZ0xFhc7m6E8o3ayJNUyj6+pwbeoimVNkk+HWu0xjpbD8xxQgzh+q0Y66t1ysXgfE4kDeYX\n7dCM52aYu5D3oNF/dFAKQJ042PcoHoQrXygFe7uuNpQazSipx6zAhTzZiFagFrO48+XneP0n/gzD\n8zCU4tbfPs/qyg0++Y63hRrLhXv3uPPlv8FyXe6+4hX8i3+b5bUPX+bTb3yuTWlnUJQKHquPgvZe\nikDPYOl6tOdEn3IxPIkFgUrl/IayUyJSoAWquhv1Lkm9w5JcFxHsMQtLngfbFpZvRHtqIL257pDf\nO/q+8nsek9PWwFSAwtjbdcPPvwZ+Fxm9cUcbSs2VoBa3qEctIrWjNliKoIOIG/F5/Sf+FMs9utu1\nHYfFe/dZfukbPLzzVMt7vebP/4Jv+uJfYzkuAtxYe8DWOxI8W6wPbY3FdRSPTyiqeMCj+402Uz14\nRN2MwiCSKbpdBE8jnTHZ32/3KqOxy+/tVSo+u1uNAv+EweT0cAv8TzsHqxW/xUjCUWuwTNYkcob+\nnr1w2vlxWb1JGJ0oukYzWETYvJ6hkIvhmoJnCoWJKOsrWRYePMQPkWCzHYeVr329ZVsyf8ArP/9F\n7IaRBPDLLlt/U6RU7KI6fU46iREooFDoLuTqeYrN9ToH++H7WaYMpPykk+ZqooeEnuk5u0UYXCRY\nX7vs4trFgsfDuzWKBZ96TZHf87j/jRr12vDOldMoHHT27IZ5DmeyZseVDMtmoElrF83lHblGcwJl\nCPuzSfZnky3bvQ5NA33AtVp/AgsPHqAMo01l3K34FAvewPoGnsTzwsUIUOB3sZPNBB7HUW3emkjg\nsS0uRwbiCc8uRKiUq/h+4D2IBNmrc4unh/NMU7h5O0qh4FGt+EQiBuns2Tp6nAel1NHYzzknSik2\nVutt35vvB+u5o1LH6abSNMyk09xU0JKrXms9l7M5g9m5yMDXoS8SbSg1V57VlRuh233L4qVveVXL\ntno0iupwNRmmfkEyZbK/G74GmEh2PnDxwMN1240kwOJyZKCG3baFW3di5PfdoDwkJmQnrJ6NnRhC\nJmuRyQ5sSD2jlGJ/12Vny8Xzgi4bU7MWucmzr9l5XueuLeXy6DzKdNZkZyvcqxxmhqxhCDduRSkc\neJSLPpYtZHPWlehbqUOvmsuBUkQqDhObJbJbZax6732lfMviT3/oB6lHItQjNo5t45omz33H69la\nWmzZ99Gtm6GGUoS+Wyv1QyJpNGoSW4+Zzppda//K5fBCdJH+ZPF6xTCF3JTN/FKEySn70qwv7u+5\nbG24h4bN82Br3SW/d/Y+nt0aN49yXiIRg9kFq+E1B16/CMwv2UMv/BcJbobmlyJMz9pXwkiC9ig1\nlwGlmFwvkTyoIY1rf2a3wt5skmIu1tNbbCxf4/d/5qdZevllbMdhdeUG5XS6bT/fsrj/v34fV7fx\nLgAAIABJREFUr/pvPoZ3UMFzARWEF4eVBAHBBebajQgHee9wrXEiZ5HKdD9mJCLhPSoFrCtykRoE\nYR6WUrC95Z75BsgwhHTWpHAiG1gEJqe6e26+pyiXgzKgRMJABtzCaiJnk0pblIoeAiTTFx/mvkpo\nQ6kZe6Jll+RBraVHpCjIbZYopyP4J/tEdsCN2Nx/xTOn7vfD70jz6m9+FX/2o19C+RBPGhfSi08k\nCGVmJ3r/WWYmrFAjYBqdk2+eNJRSwQ1PCOf1uucWbHxPUSr6hzcszZZencjvu2ysOsH+BFVNS9cj\nJJKDDYtalvR1Lmk6o2dRM/YkCkee5EniJYdS9vxJEy0C52+0+AwM/MI1DCwrUMZZe1THcRQKiMWE\nxWuDSeC5CogIti2houLnrbM0DGHpehTXUTiuIhLpXu5Sr/lsrDoodRQFUMDjB3VuPxO7kBsy11UU\n8h6ep46F/PW50g1tKDUXiviK1F6VRKGObwqFyRjV5CklAl1+xGpAv+/Tmi6PM7G4wc07gQqNCKfK\nyQ0K31dB4kbJxx7zxI3pOYv1x05biHR2QFKCli09hboP9sMTtiAoNclkh3v+lUsej+43RC0U7G4H\nkYdBZUZfVS7fVUFzaRFfMX8vj+V4h2HUWNkhPxXnYDrR8XWlTJTUfjXUq6wkh6c00iv1uk+pEChA\npzPmyDolXOSapOed0JWVoKD92o3BhhA9T5Hfcyk1sihzkxaxM0ixZbKBIPf2poNTD7qXzMzZQyv3\n6YTXQZ1GnVIGNAiUahe1UCqorSzkPTI6TNsRPTOaCyO5X20xkhBosU7sVCjmYvgd6i/qcYuDqTiZ\nnUrL9u3F9NB7Tp7GzpbDztbRAtjWusPcon3l14Z2t51WXdlGhcraY4dbdwYTyvNcxb2Xq3juUZiy\nkPeYX7LP5HmlM+bI1WFSGZN8B68yMeQ15WrFDy0jUipoAq0NZWf0zGgujHjJaTGSTZQI0YpLJdU5\nBJufTlDMRImXHJRAJR3paFiPY7g+qXwV01VUEzaVlD2wqutq1Q9NpNlYdUimRudZXgSFfLiurOcq\nHEf11PqpXvM5yHv4viKVNtvWynZ3nBYjCcHfG6sO6czgWoddJImkQSJptDSXFgkSgIYpe6c5HyMx\nlCIyCfwusALcA35EKbXXYV8T+DzwWCn1Axc1Rs3g8U05zPJrQSm8HlLXvYhJMdK7RxAtO8w+PAAC\nzzW1X6Uetdi4ngkUx89JYb+LVFjBG2rd5aiRLtd0owcDtr/nsLl2NH/7ux7pjMn8kn1oAIuFcGOs\nCLqWxGKXz1CKCEvXIxQPfA7ybpDpnDNJpobv6QbdaMLGFPRF7QffV0EbuwtIPhoHRnUL8x7gE0qp\nO8AnGo878bPA8xcyKs1QKeTibck3TeHyemzARkUpZh4XMBSHXqyhIFJzSe9XgSDT9ZPvjfNR/9eo\nvvFDfPonn+vvEN0Pf2lwHBWaEdqNiVy4rmckenpSi+eqFiMJwXw1E4OadJQ8U8NVSRo2IkH95dL1\nKIvLkQsxks3jLi5HDgUIgm2QSvfeJ7Ja9bn3jSovPl/lheerPH5Qw3Mv0cl+RkZ1ur0d+GDj7w8C\n7wjbSUSuAd8P/MYFjUszROpxi925JL6Abwi+gBMx2FzODFyE0q55iN/+AzYUJPO11nKQM2a6prNW\nx2FfdJLIWahVfe6+VOXui41/L1WpVXuTXpuYtEiljUP1F8MIhK+XTulLCVAqeSFhhYaxPNb0d3Iy\nfH6jMTl3y7AwfC8omzjIux2Tbi47iaTJ7adjzM7bTM9aLK9EWVyO9hTGdl3Fw7vHGncTeP0P79UO\nW39dVUYVG5pTSq01/l4H5jrs96vAzwPtEionEJF3Ae8CiGZmBjFGzRAoTcQoZ6JEqi6+IThRcyhK\nzV3LRiSkceUZiMcNJiZbNVpFYGbeGkgGqu+rQw8rMWDRA99XPLhXa8m0rNcUD+721tYr8E6i1Ko+\n1UqQkZpI9pbE03WfY0+lMga5isnerndYzG/ZgWJRqej1fLxeKBY8Vh/WD0UAUA5zC/aVDJ+bppyp\nk0d+L3ypoe4oqhWfeGL8bw7PytDOAhH5ODAf8tQvHX+glFIi7Yn/IvIDwKZS6gsi8t2nHU8p9QHg\nAwDphTtX+/bmkqMMoZYYblmHGzHxLANx/BbnxRcoTESZozqQ48zOR8hkg84iwLn7/dXrPuWiT63m\ns7/rteiJDjJMFzRbbt/eDIH2aiCiMaOrFm0YyaQRep8iQku2sIgwMx8hNx1ciMslj/1dj81153D/\naytRYn0e/ySeq1htlE0cn5ONNYd40hhKko3jKEoFDzGC6MNlkJerVTt0uIFGL86LHc9FMjRDqZR6\nc6fnRGRDRBaUUmsisgBshuz2XcDbROStQAzIiMhvKaV+bEhD1lxmlMKueygRXDtYhNlaSjP34AA5\n9uuupCINJZ92Q6mAl5PLfHniGSpmjGvldV6397ekvErbvseJxY0z1fadZGu9zt6u1/w4QNCyqUlT\nvWUQF1XXUaFi6krR93plvximsLQc4fHDesv2yWkrtG+mZQVqN03P/fjF+tG9GrefiZ3Ls+zU77MZ\nCp6aGayh3N122N48KinawGHhmk06M97eaywhFAsh6++Kvm+WLhuj+mY+ArwTeG/j/w+f3EEp9YvA\nLwI0PMqf00ZSE0a07DC9WsBorCt5lsHWtTROzOLRUzkSxTqm51ON2zhdkoa+MPFKvpz7Jlwj2Ofr\nmZvcS13jhx/+MQlvMB5oJ0pFj70ObbaOUzjwmBhAODAWNxCDNmMpRhBSHjbJtMntZ2IUCx6+D6mU\n0XXdcb9D2E8pKJf8c3naYTcMTfyQde7zUKv6bG+2f5a1Rw6JZ8bbs8xOWOxuuS2txUQgnjDO7dWP\nO6P6dO8FvldEXgTe3HiMiCyKyEdHNCbNJcRwfWYfHmC56jDD1XJ85h4cgK/AEMqZKIVc/NBIvu/n\n1vlV+ys8+6p/fZjIUxeLLx0zkgBKDOpi8eXs6ULq56VTEfpxFINTb0kkDWJRaWvrFY3K0Avfm5hm\nINqdm7ROTc7pqGhDq9d9FjqJxwcZoYP1JfJdSoqKHTzbccE0hRu3Y6QzJoYR9PTMTZksXT89geuy\nMxKPUim1A3xPyPZV4K0h2z8JfHLoA9NcOpL5dk9PCOTyEsU65cyRYPr7fm6d107fpPzzv8enT2S6\n7kaymMrn5KXKN0xWE7Ow27q9XPbI73r4Sh0qvpwn/NdL1qAwuI4gIsK1lSh7Oy75veBTZydMctPW\nWBbypzMm5WJIXaXq3ti6FyJRg9yUxd6O25KUlcmaxOKDnYtuX/NlSBy17aDE5EljvIPiGs0pmA1P\nMvy53l2NpFfBC6uiVz5pp9SyqSlb17ywlQo++T2PazfOLiydyVqUCvWOF8tmUfgg14IMQ5iasZma\nGb1e7mlksib5XZfqsYQSEZiZtQYSrgx0Xw3y+x6ooGH2ILNqm6QzJvm98OhBasj1lLWqz9aGQ7Xi\nY1rC1Iw1dBH2q4KeJc34oRSpfI1kvgZAcSJGKRMJLSOpJWz8/WqosQzLrFWf+1joIdNumbnqDuux\naXzj6IJlKZ9X73/98LHrqDbZOqWgUvYpFvwza4mm0gaJlNHqNQlEoxCJmGRz5rk9p8uE7yv2d10K\nBx6GEZQzXFtpKNoceBgCngtbmy5bmy7pjMnsvH2uzinxhDn0Eod4wiCTNTnIt5YUTc8OpqSoE7Wa\nz/27tcP1WM9TrD8O9Honp8f/RmnUaEOpGS+UYvZhgWjlSBc2Ui0SL0bYXmovp62kbJyoiV07Elv3\nJegq0kntp5PAwD/a+Ev+dPbv8ig+j4HCVB5v2PoCc7Wdw33Kpc4ZksUD78yGUiTIBC2XglIT0xQy\nE0+m/qfvB/Wc9VrTe1RUynUmJk1m5yOkMiZ3X6riOkevOch7VKs+K7d7K54fFSLC3KJNJmdSzAf1\noZkJa+hZozubTlvSklKwveUyMWldSB/My4w2lJqxIlZ2W4wkBAk68WKdSMWlHj9xyoqwcT1Laq9C\n6qCOAooTUYoTMaC9IfOnuxw76ju8Zf1TVIwIdTNC2ilhnCj4Mww5LH4/iXlOZ0RESKb61/30fcXe\nbmOtsRE2nJoZv4uf5ypqtaB3ZbfkncKBd8xIBigV6MHmpnwqJb/FSDZxHEWp6I+9KpKIkEiYJC6w\nQL9S6bwA6jqKSHS8zpVxQxtKzVgRLddD+06KCspA2gwlgYBBYSpBYaq94vksDZnjfp24Xw99rlNG\naLCGePE/J6UUjx/UqZSPQrZ7Oy6loseNW+PhXSml2Npw2D+msBNPGCwtR0IVgDqJoQOUiz47WyFW\nkqDMo17zYcwN5SiwbcENq49VF9fo+zLz5MV1NGONbxqh8nNKwB+DH7RhCNduRDHMoOawKTA9Oz/8\n8FkYlYrfYiQhMET1uqJYOGfdxIDI77mHYgG+f7Smu74abvDsDktmIpDPezjhL0MMzqWKdJWZmmnX\nzRUJog/jXLs5LmiPUnN2jmcjDIhSJsrEVrn9CRHKqWj79hEQTxg89UyMcsnH94PyhFFdbKrlcFkx\n5UO1fPY1015QKgh1Vsoetm10vOju7rRneSoV1A36nmrzKrM5q0U/t4kYUCl1Nv6WJQMrn7lqJFMm\nc4s2W+vOYd1pZiJIgNKcjjaUmr4xXJ+p9SLxYnBrX03a7Mwn8ezzX5R9y2DzWoaZ1UIgPaeCPpZb\nS2nUGN35NtcTR41lE66wI2CdIRFIqUCI3XUUsXhnHdfDhJt6IIUn4rG14bC8Em2T8/O7dOLwfTBO\nTGM0ajC/ZLPR8DgDMXRhfsnm0b3OJTTpjIHngaWvaqFkJywyWRPPDeZ83Nawxxl9Smn6Qynm7+ex\njomNx0oO8/fzPL6VG0hD5FrS5tFTOSLVoB1TvVOHEV9hej6eZQzUq71MpNImhjhtQgnNgvl+cByf\nB3frgQpOwxglU0bQw/DE/O5uuy0JN00N1tVHdW4+1bo2mkiZLe2zmpgmmB2uQJmsRTptUq0qDIPD\nZBPT6rDWBuztBKLp129FiR4LwSqlOMh7HOwHa6QTOYtkevA1kv1Sr/vs7bjUqkET6tzU6QpF50VE\nsLQT2TfaUGr6Il50MN3WjhwCGJ4iWag3BMcHgEho4g4ASjGxWT5swIwIe9NxipNxoLdM16bnVK0E\nWZipjHkp77ANQ7h+M8rqozr1WmBALFtYvBbpOxy8+rDeZoRKxeBifrLW7ngd4HFcR+E6CjtydOzp\nWYtSQ9O1iQjMLXYXaBBDiCdan59ftHn8INyrbBrrjVWH6zejjW2KR/dbk53KpTrZnMncQneFGeUr\n9vZcDhrKRZkJk9ykhQzgPKlWfB7cO6prrJQDGcPrN6NXXmD8MqINpaYv7LoXmpVqKLDqLjD8dcSJ\nrcBIHpaQKEVuq4xvGdz5scqpDZl9v9GAtuERiYCxHlxcL2MySCRqsHI7FnT9UArLlr69JddVLQ15\nmygF+3tef0XpJ44diRisPBVjb8ehXPKJRII+noYhOI7C7qPQPpkyuX4ryu62G+qlAg2jqBCRxhpq\ne7JTfs8jN+l3/L6VUjw6kU28velSLPgsr5xdganJxlq9LVzu+0Frr6aR14wPl++qoBkpTtQMzUr1\nBZzoBdx3KUV6r12Jx1CQ3Q5JAgphZ8s9NJKNt8TzgrDhZaZZn3iWi7jq0iUjzHvLTpih0W47IqGG\nz7aF2fkIK7djxBPCo/t1Ht6rcffFKg/v1TqKnocRixksXou09Ops4djhS4XOYvPlLolBlXK4ga1W\n/a6v6wWlFNUOdY2V8nhkKmta0YZS0xeVpI1rmy1l+IqgtVU5PXyxZMNXoR4tgNWjtutBh04dtZrC\ndcdTmdrzFOurdV58vsKLz1dYX633ZVxOw7IFK6z8RoIkmZPkpixiCePQWIoEa46nCWaXih5bG25L\nqUi55LP6sP+blFBjLbQI1HesERS6hqZPGskmyj+/MRORjkvqHY2/ZqTor0XTHyJs3MhQykbxJfAk\nS5kI6zeyF5JQ4xuC1+ECVz+nRzuI0SuleuoE0u97Pni5Rn4vWOfz/SB0+OBubWDHEhEWrtmHdaHB\ntsATDBNNNwxh+UaEazcizMxZzC/Z3Ho61pJEE8budnibqUrZ77th9PScHfTVlKN61mhUmFs4Gm8n\nz1eAZLrzWC0r3JiJEH5D0SfZXPu4RGBicvSZ1Jp29Bqlpm9802BnIcXOQuriDy7C3myCqfXSYfhV\nEQgS7M0mmKfU9eUAmawR2iQ5Eu3gVfWA6yo2VuuHRf6JpMHcoj0QrdZiwccJ8XQHLdkWT5jceirG\n/p6LU1ckkkFtZKckJxEhkTRJJI+OH4QVA6MXixttn7+Txy4SSNz1s17ZTGSqVnxqtWDtMxZvXZ+1\nIwYLSzZrqw5CcK4YAks3ol2Tt9IZk811p72Ws1Gkf15m5mzcxvfXVCtKpg2mL0EnlycRbSg1l45y\nNoZvGkxsV7Acj3rUYn8mwXt/eZvX3H2JZ1/1O3Q7tadmbEol/1gNYOCRLFw7W+hYqaCm0KkfXVXL\nJZ8HL9e49XTs3Nm0tarflvgBQRiwVh2stqllC9OzZ7tYu47i4b3akVFXgcGZX7IPjVcyaVCvtSfh\nKDiz3mgsbrTVbh4nnbWIxAzyuy5iQG7SwrK738AYprC8Eg0ygRufx7QC4fpBiEsYhrB0PYpTD87D\nSKS7/q1mtGhDqbmUVFMR1lOBYXvfz63zmrvP8ek3PtdV9LyJYQo3bkUpFY/KQ7p5TqdRKvqhnpLv\nB2UUE+fUgI1EJVxUwKClDGPUrD6qU6+3zsNB3sOyYWYu+K4mp20O8h7eMVspAjNzwxNxb/YPbbK3\n4zG/ZJ/aizEWN7h5J3p4A2RH+s8mPg07YmA/eX2QLx3aUGqeSESEVNociDfW9ExPolRDpPucpNIm\nhuHgnXgr02BsOmW4bhByDWN328O2HSYmbSxbWLkdY3fHoVT0sSxhctoamspRteq39Q8FWH/skEyd\nrnMqIrqzhkYbSo3mvEQ7eXzCQIrHDUO4cTPK+qpzWJqQSAYyb+MiktCtvARgc90llbGwLMFqlIpc\nBAf74clDEGjNZif0JVBzOjoortGck0TSIGJLW9qsaTIQUXKlFMWih+cpbBsmp02WliPYp6yzXSSW\nLae2ayoVwgUChkoX+z3g5GTNFUbfTmkuJf00ZB42IsLyzShbGw6FhrRbKhN0ZhiEx7f22KF4cJSl\nu7fjUSz4rNyKDkRObRCICAtLNg/vdamHHMFQ01mT/b3wutnUGIjaay4H2lBqLh0tRrKPhszDxDSF\n+cUI84uDfd9a1W8xkhB4Qk5dUTjwyIxR6DCRNFlcjnQUDxiFYYrFDbITJvljIhPN5CGrj1IUzZPN\nSGI3IjIpIh8TkRcb/+c67DchIn8gIl8TkedF5Dsveqyaq49SCqfuD1TpZlBUOiTINBVthoHyFbVq\neCbvaaQzJlOzQZPg4//ml+xTQ7PDQESYW4ywvBJlcspkasZi5XaU3JSuV9T0zqhuR98DfEIp9V4R\neU/j8S+E7Pd+4I+VUv9ERCJA4iIHqbn6HORdNteOmtkm0wYLi5G2ZsKjoqkQ0xY6FIbiEe3vOWyt\nu8HSngrWXxf67EQyPWOTyZqUCkExfSpjDkTN5jzEEwbxhK7D0JyNUWUDvB34YOPvDwLvOLmDiGSB\nfwD8JoBSqq6U2r+wEWquPJWyz/pjB887atFUKvg8HiNx9GTKCNX/FCB7zvrMk5SKHptrbqDB2tBh\nLZX8M4nFRyIGuSmLiUlr5EZSozkvozKUc0qptcbf68BcyD43gS3g34nIX4vIb4hI8sJGqBkbxPNJ\n71aYXCuS2q2gaoMJke5ut0uUKQWVko/jjEcXh2aiUDQqh2FMy4JrNyJ9yb31QqgOa2M+OjVL1mie\nBIYWehWRjwPzIU/90vEHSiklEtoPwgJeC7xbKfUZEXk/QYj2lzsc713AuwCimZnzDF0zRlh1j/n7\necRXGCpQqfH+TYU/+a9/nbR7vtPXqYdf/EXAdcAek2WsZj9Hp+7jK4gMQSEG6GgMRQJBAZ38onlS\nGZqhVEq9udNzIrIhIgtKqTURWQA2Q3Z7BDxSSn2m8fgPCAxlp+N9APgAQHrhjr79vSJMbpQwPHVY\nWVCvKRwV4VPTr+Ut658613vHkwa1MN1RdXbd0WEybC3QeNKgXr8886HRXBSjCr1+BHhn4+93Ah8+\nuYNSah14KCLPNDZ9D/DVixmeZixQiljJaSu/U2LwKLFw7refnLbb1v9Egl6LgxC+vmxMzdgYJyo4\nRGBmdng6rBrNZWBUWa/vBX5PRH4KuA/8CICILAK/oZR6a2O/dwO/3ch4fRn4Z6MYrGaENHsjncAI\nE1ftE9sWbtyOsr3pUi55mKYwNW0NpI3SZcS2hZXbUXa2XMpFH8sOdFiHqSfreYrdbYfCgY9hBH0a\nJ3LWUELLZ6XW0IutVnzsiDA1Y7W0FtNcfUZiKJVSOwQe4sntq8Bbjz3+EvBtFzg0zTghQikdIVWq\nw7GIoOl7PFW4P5BDRCIGi2dsr3UVsW2D+cWLmQ/fV9x/uYbrqMMkoq11l2pZnbnl2XGUUuc2uNWK\n32iQHTx2HEWlXGfxWoTUAOQJNZeD8RGL1GhO8Oq37fN///o0y9YOlu9g+S6W75Cr5/nOnS+Nenia\nc1LIey1GEoL10MKBd+auK8pXbK7XeeH5Ci98tcr9l6sdu5r0wtZGeGb0xrqD0mKxTwzjo3+l0Zzg\nnU9XiX/1E7zlq8+xHptm386Qcw6Yq26PQjZUM2BKRT9cmFwCRaJItP/7+LXHdYqFo/etVhQP7tVY\nuR0lcoZkqE5G1nUUvh8I32uuPtpQasYeARaq2yxUt0c9FM0A6daw+CwiBY7jtxjJJsoPakTPElI2\nLcEPKSMSIVQIQnM10V+1RqMZCUHSTvt20xQSyf4vTfWaCn0/CBJyzsLklNn2niJB0tE4JRxphos2\nlBqNZiTYEYOl6xFM60g8PRoTrq9EzmSEIlGjY4/J2BkbaGdzFpPT1qEHKRK07pqdHxM1Cs2FoEOv\nGo1mZCRTJrefjuHUFWLIuWT5bFtIpU2Khda2ZGJAbvpslzoRYXrWZnLawnEUliVPZI3tk442lJqx\nYpwaMmsuBhEZmPLPwpLN9hbs73r4PsTjwuxC5EyJPMcxDCGq1YmeWLSh1IwN49iQWXO5EEOYmYsw\nE9ZmQaM5I3qNUqPRaDSaLmhDqdFoNBpNF7Sh1IwFOuyq0WjGFX1F0oyUIwP5azz7zy30KanRaMYN\n7VFqRso7n66iPvcx7UVqNJqxRRtKjUaj0Wi6oA2lRqPRaDRd0IZSo9FoNJouaEOpGRmvftv+qIeg\n0Wg0p6IzKDQXzvFM1y/9kZap02g0441cxS7dIrIF3B/1OAbENKAbMQbouWhFz0crej5a0fPRyjNK\nqfRZXnglPUql1MyoxzAoROTzSqlvG/U4xgE9F63o+WhFz0crej5aEZHPn/W1eo1So9FoNJouaEOp\n0Wg0Gk0XtKEcfz4w6gGMEXouWtHz0Yqej1b0fLRy5vm4ksk8Go1Go9EMCu1RajQajUbTBW0oNRqN\nRqPpgjaUY4SITIrIx0Tkxcb/uQ77TYjIH4jI10TkeRH5zose60XQ63w09jVF5K9F5P+9yDFeJL3M\nh4gsi8ifichXReRvReRnRzHWYSIi/1hEvi4iL4nIe0KeFxH5tcbzz4nIa0cxzouih/n40cY8/I2I\nPCsirx7FOC+K0+bj2H7fLiKuiPyT095TG8rx4j3AJ5RSd4BPNB6H8X7gj5VSrwBeDTx/QeO7aHqd\nD4Cf5erOQ5Ne5sMF/pVS6pXAdwD/pYi88gLHOFRExAT+N+AtwCuB/yLk870FuNP49y7g1y90kBdI\nj/NxF/iHSqlXAf8DVzjJp8f5aO73K8B/6uV9taEcL94OfLDx9weBd5zcQUSywD8AfhNAKVVXSl1V\n0dRT5wNARK4B3w/8xgWNa1ScOh9KqTWl1BcbfxcIbh6WLmyEw+f1wEtKqZeVUnXgPxDMy3HeDvx7\nFfBXwISILFz0QC+IU+dDKfWsUmqv8fCvgGsXPMaLpJfzA+DdwH8ENnt5U20ox4s5pdRa4+91YC5k\nn5vAFvDvGqHG3xCR5IWN8GLpZT4AfhX4ecC/kFGNjl7nAwARWQFeA3xmuMO6UJaAh8ceP6L9RqCX\nfa4K/X7WnwL+aKgjGi2nzoeILAE/SB+RhispYTfOiMjHgfmQp37p+AOllBKRsNodC3gt8G6l1GdE\n5P0EIbhfHvhgL4DzzoeI/ACwqZT6goh893BGeXEM4Pxovk+K4I75XyqlDgY7Ss1lRETeSGAo3zDq\nsYyYXwV+QSnli0hPL9CG8oJRSr2503MisiEiC0qptUaoKCws8Ah4pJRqegl/QPe1u7FmAPPxXcDb\nROStQAzIiMhvKaV+bEhDHioDmA9ExCYwkr+tlPrQkIY6Kh4Dy8ceX2ts63efq0JPn1VEvoVgaeIt\nSqmdCxrbKOhlPr4N+A8NIzkNvFVEXKXU/9PpTXXodbz4CPDOxt/vBD58cgel1DrwUESeaWz6HuCr\nFzO8C6eX+fhFpdQ1pdQK8J8Df3pZjWQPnDofEvz6fxN4Xin1vgsc20XxOeCOiNwUkQjBd/6RE/t8\nBPiJRvbrdwD5YyHrq8ap8yEi14EPAT+ulHphBGO8SE6dD6XUTaXUSuOa8QfAz3QzkqAN5bjxXuB7\nReRF4M2Nx4jIooh89Nh+7wZ+W0SeA74V+J8ufKQXQ6/z8aTQy3x8F/DjwJtE5EuNf28dzXAHj1LK\nBf4F8CcEiUq/p5T6WxH5aRH56cZuHwVeBl4C/i3wMyMZ7AXQ43z8t8AU8L83zoczd9EYd3qcj77R\nEnYajUaj0XRBe5QajUaj0XRBG0qNRqPRaLqgDaVGo9FoNF3QhlKj0Wg0mi5oQ6nRaDTJVkTbAAAB\nE0lEQVQaTRe0odRorjAi8scisn+Vu6poNMNGG0qN5mrzvxDUVWo0mjOiDaVGcwVo9NZ7TkRiIpJs\n9KL8O0qpTwCFUY9Po7nMaK1XjeYKoJT6nIh8BPgfgTjwW0qpr4x4WBrNlUAbSo3m6vDfE2hdVoH/\nasRj0WiuDDr0qtFcHaaAFJAm6KSi0WgGgDaUGs3V4f8k6Ev628CvjHgsGs2VQYdeNZorgIj8BOAo\npX5HREzgWRF5E/DfAa8AUiLyCPgppdSfjHKsGs1lQ3cP0Wg0Go2mCzr0qtFoNBpNF7Sh1Gg0Go2m\nC9pQajQajUbTBW0oNRqNRqPpgjaUGo1Go9F0QRtKjUaj0Wi6oA2lRqPRaDRd+P8B1fUYtFNGevcA\nAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.title(\"Model with dropout\")\n", + "axes = plt.gca()\n", + "axes.set_xlim([-0.75,0.40])\n", + "axes.set_ylim([-0.75,0.65])\n", + "plot_decision_boundary(lambda x: predict_dec(parameters, x.T), train_X, train_Y)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Note**:\n", + "- A **common mistake** when using dropout is to use it both in training and testing. You should use dropout (randomly eliminate nodes) only in training. \n", + "- Deep learning frameworks like [tensorflow](https://www.tensorflow.org/api_docs/python/tf/nn/dropout), [PaddlePaddle](http://doc.paddlepaddle.org/release_doc/0.9.0/doc/ui/api/trainer_config_helpers/attrs.html), [keras](https://keras.io/layers/core/#dropout) or [caffe](http://caffe.berkeleyvision.org/tutorial/layers/dropout.html) come with a dropout layer implementation. Don't stress - you will soon learn some of these frameworks.\n", + "\n", + "\n", + "**What you should remember about dropout:**\n", + "- Dropout is a regularization technique.\n", + "- You only use dropout during training. Don't use dropout (randomly eliminate nodes) during test time.\n", + "- Apply dropout both during forward and backward propagation.\n", + "- During training time, divide each dropout layer by keep_prob to keep the same expected value for the activations. For example, if keep_prob is 0.5, then we will on average shut down half the nodes, so the output will be scaled by 0.5 since only the remaining half are contributing to the solution. Dividing by 0.5 is equivalent to multiplying by 2. Hence, the output now has the same expected value. You can check that this works even when keep_prob is other values than 0.5. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 4 - Conclusions" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Here are the results of our three models**: \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + " **model**\n", + " \n", + " **train accuracy**\n", + " \n", + " **test accuracy**\n", + "
\n", + " 3-layer NN without regularization\n", + " \n", + " 95%\n", + " \n", + " 91.5%\n", + "
\n", + " 3-layer NN with L2-regularization\n", + " \n", + " 94%\n", + " \n", + " 93%\n", + "
\n", + " 3-layer NN with dropout\n", + " \n", + " 93%\n", + " \n", + " 95%\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that regularization hurts training set performance! This is because it limits the ability of the network to overfit to the training set. But since it ultimately gives better test accuracy, it is helping your system. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Congratulations for finishing this assignment! And also for revolutionizing French football. :-) " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "**What we want you to remember from this notebook**:\n", + "- Regularization will help you reduce overfitting.\n", + "- Regularization will drive your weights to lower values.\n", + "- L2 regularization and Dropout are two very effective regularization techniques." + ] + } + ], + "metadata": { + "coursera": { + "course_slug": "deep-neural-network", + "graded_item_id": "SXQaI", + "launcher_item_id": "UAwhh" + }, + "kernelspec": { + "display_name": "Python 3", + "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.6.0" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Course2/Week 2/Optimization_methods_v1b.ipynb b/Course2/Week 2/Optimization_methods_v1b.ipynb new file mode 100644 index 0000000..f81663d --- /dev/null +++ b/Course2/Week 2/Optimization_methods_v1b.ipynb @@ -0,0 +1,1591 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Optimization Methods\n", + "\n", + "Until now, you've always used Gradient Descent to update the parameters and minimize the cost. In this notebook, you will learn more advanced optimization methods that can speed up learning and perhaps even get you to a better final value for the cost function. Having a good optimization algorithm can be the difference between waiting days vs. just a few hours to get a good result. \n", + "\n", + "Gradient descent goes \"downhill\" on a cost function $J$. Think of it as trying to do this: \n", + "\n", + "
**Figure 1** : **Minimizing the cost is like finding the lowest point in a hilly landscape**
At each step of the training, you update your parameters following a certain direction to try to get to the lowest possible point.
\n", + "\n", + "**Notations**: As usual, $\\frac{\\partial J}{\\partial a } = $ `da` for any variable `a`.\n", + "\n", + "To get started, run the following code to import the libraries you will need." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Updates to Assignment \n", + "\n", + "#### If you were working on a previous version\n", + "* The current notebook filename is version \"Optimization_methods_v1b\". \n", + "* You can find your work in the file directory as version \"Optimization methods'.\n", + "* To see the file directory, click on the Coursera logo at the top left of the notebook.\n", + "\n", + "#### List of Updates\n", + "* op_utils is now opt_utils_v1a. Assertion statement in `initialize_parameters` is fixed.\n", + "* opt_utils_v1a: `compute_cost` function now accumulates total cost of the batch without taking the average (average is taken for entire epoch instead).\n", + "* In `model` function, the total cost per mini-batch is accumulated, and the average of the entire epoch is taken as the average cost. So the plot of the cost function over time is now a smooth downward curve instead of an oscillating curve.\n", + "* Print statements used to check each function are reformatted, and 'expected output` is reformatted to match the format of the print statements (for easier visual comparisons)." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import scipy.io\n", + "import math\n", + "import sklearn\n", + "import sklearn.datasets\n", + "\n", + "from opt_utils_v1a import load_params_and_grads, initialize_parameters, forward_propagation, backward_propagation\n", + "from opt_utils_v1a import compute_cost, predict, predict_dec, plot_decision_boundary, load_dataset\n", + "from testCases import *\n", + "\n", + "%matplotlib inline\n", + "plt.rcParams['figure.figsize'] = (7.0, 4.0) # set default size of plots\n", + "plt.rcParams['image.interpolation'] = 'nearest'\n", + "plt.rcParams['image.cmap'] = 'gray'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1 - Gradient Descent\n", + "\n", + "A simple optimization method in machine learning is gradient descent (GD). When you take gradient steps with respect to all $m$ examples on each step, it is also called Batch Gradient Descent. \n", + "\n", + "**Warm-up exercise**: Implement the gradient descent update rule. The gradient descent rule is, for $l = 1, ..., L$: \n", + "$$ W^{[l]} = W^{[l]} - \\alpha \\text{ } dW^{[l]} \\tag{1}$$\n", + "$$ b^{[l]} = b^{[l]} - \\alpha \\text{ } db^{[l]} \\tag{2}$$\n", + "\n", + "where L is the number of layers and $\\alpha$ is the learning rate. All parameters should be stored in the `parameters` dictionary. Note that the iterator `l` starts at 0 in the `for` loop while the first parameters are $W^{[1]}$ and $b^{[1]}$. You need to shift `l` to `l+1` when coding." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: update_parameters_with_gd\n", + "\n", + "def update_parameters_with_gd(parameters, grads, learning_rate):\n", + " \"\"\"\n", + " Update parameters using one step of gradient descent\n", + " \n", + " Arguments:\n", + " parameters -- python dictionary containing your parameters to be updated:\n", + " parameters['W' + str(l)] = Wl\n", + " parameters['b' + str(l)] = bl\n", + " grads -- python dictionary containing your gradients to update each parameters:\n", + " grads['dW' + str(l)] = dWl\n", + " grads['db' + str(l)] = dbl\n", + " learning_rate -- the learning rate, scalar.\n", + " \n", + " Returns:\n", + " parameters -- python dictionary containing your updated parameters \n", + " \"\"\"\n", + "\n", + " L = len(parameters) // 2 # number of layers in the neural networks\n", + "\n", + " # Update rule for each parameter\n", + " for l in range(L):\n", + " ### START CODE HERE ### (approx. 2 lines)\n", + " parameters[\"W\" + str(l+1)] -= learning_rate * grads['dW' + str(l + 1)]\n", + " parameters[\"b\" + str(l+1)] -= learning_rate * grads['db' + str(l + 1)]\n", + " ### END CODE HERE ###\n", + " \n", + " return parameters" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "W1 =\n", + "[[ 1.63535156 -0.62320365 -0.53718766]\n", + " [-1.07799357 0.85639907 -2.29470142]]\n", + "b1 =\n", + "[[ 1.74604067]\n", + " [-0.75184921]]\n", + "W2 =\n", + "[[ 0.32171798 -0.25467393 1.46902454]\n", + " [-2.05617317 -0.31554548 -0.3756023 ]\n", + " [ 1.1404819 -1.09976462 -0.1612551 ]]\n", + "b2 =\n", + "[[-0.88020257]\n", + " [ 0.02561572]\n", + " [ 0.57539477]]\n" + ] + } + ], + "source": [ + "parameters, grads, learning_rate = update_parameters_with_gd_test_case()\n", + "\n", + "parameters = update_parameters_with_gd(parameters, grads, learning_rate)\n", + "print(\"W1 =\\n\" + str(parameters[\"W1\"]))\n", + "print(\"b1 =\\n\" + str(parameters[\"b1\"]))\n", + "print(\"W2 =\\n\" + str(parameters[\"W2\"]))\n", + "print(\"b2 =\\n\" + str(parameters[\"b2\"]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Expected Output**:\n", + "\n", + "```\n", + "W1 =\n", + "[[ 1.63535156 -0.62320365 -0.53718766]\n", + " [-1.07799357 0.85639907 -2.29470142]]\n", + "b1 =\n", + "[[ 1.74604067]\n", + " [-0.75184921]]\n", + "W2 =\n", + "[[ 0.32171798 -0.25467393 1.46902454]\n", + " [-2.05617317 -0.31554548 -0.3756023 ]\n", + " [ 1.1404819 -1.09976462 -0.1612551 ]]\n", + "b2 =\n", + "[[-0.88020257]\n", + " [ 0.02561572]\n", + " [ 0.57539477]]\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "A variant of this is Stochastic Gradient Descent (SGD), which is equivalent to mini-batch gradient descent where each mini-batch has just 1 example. The update rule that you have just implemented does not change. What changes is that you would be computing gradients on just one training example at a time, rather than on the whole training set. The code examples below illustrate the difference between stochastic gradient descent and (batch) gradient descent. \n", + "\n", + "- **(Batch) Gradient Descent**:\n", + "\n", + "``` python\n", + "X = data_input\n", + "Y = labels\n", + "parameters = initialize_parameters(layers_dims)\n", + "for i in range(0, num_iterations):\n", + " # Forward propagation\n", + " a, caches = forward_propagation(X, parameters)\n", + " # Compute cost.\n", + " cost += compute_cost(a, Y)\n", + " # Backward propagation.\n", + " grads = backward_propagation(a, caches, parameters)\n", + " # Update parameters.\n", + " parameters = update_parameters(parameters, grads)\n", + " \n", + "```\n", + "\n", + "- **Stochastic Gradient Descent**:\n", + "\n", + "```python\n", + "X = data_input\n", + "Y = labels\n", + "parameters = initialize_parameters(layers_dims)\n", + "for i in range(0, num_iterations):\n", + " for j in range(0, m):\n", + " # Forward propagation\n", + " a, caches = forward_propagation(X[:,j], parameters)\n", + " # Compute cost\n", + " cost += compute_cost(a, Y[:,j])\n", + " # Backward propagation\n", + " grads = backward_propagation(a, caches, parameters)\n", + " # Update parameters.\n", + " parameters = update_parameters(parameters, grads)\n", + "```\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In Stochastic Gradient Descent, you use only 1 training example before updating the gradients. When the training set is large, SGD can be faster. But the parameters will \"oscillate\" toward the minimum rather than converge smoothly. Here is an illustration of this: \n", + "\n", + "\n", + "
**Figure 1** : **SGD vs GD**
\"+\" denotes a minimum of the cost. SGD leads to many oscillations to reach convergence. But each step is a lot faster to compute for SGD than for GD, as it uses only one training example (vs. the whole batch for GD).
\n", + "\n", + "**Note** also that implementing SGD requires 3 for-loops in total:\n", + "1. Over the number of iterations\n", + "2. Over the $m$ training examples\n", + "3. Over the layers (to update all parameters, from $(W^{[1]},b^{[1]})$ to $(W^{[L]},b^{[L]})$)\n", + "\n", + "In practice, you'll often get faster results if you do not use neither the whole training set, nor only one training example, to perform each update. Mini-batch gradient descent uses an intermediate number of examples for each step. With mini-batch gradient descent, you loop over the mini-batches instead of looping over individual training examples.\n", + "\n", + "\n", + "
**Figure 2** : **SGD vs Mini-Batch GD**
\"+\" denotes a minimum of the cost. Using mini-batches in your optimization algorithm often leads to faster optimization.
\n", + "\n", + "\n", + "**What you should remember**:\n", + "- The difference between gradient descent, mini-batch gradient descent and stochastic gradient descent is the number of examples you use to perform one update step.\n", + "- You have to tune a learning rate hyperparameter $\\alpha$.\n", + "- With a well-turned mini-batch size, usually it outperforms either gradient descent or stochastic gradient descent (particularly when the training set is large)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2 - Mini-Batch Gradient descent\n", + "\n", + "Let's learn how to build mini-batches from the training set (X, Y).\n", + "\n", + "There are two steps:\n", + "- **Shuffle**: Create a shuffled version of the training set (X, Y) as shown below. Each column of X and Y represents a training example. Note that the random shuffling is done synchronously between X and Y. Such that after the shuffling the $i^{th}$ column of X is the example corresponding to the $i^{th}$ label in Y. The shuffling step ensures that examples will be split randomly into different mini-batches. \n", + "\n", + "\n", + "\n", + "- **Partition**: Partition the shuffled (X, Y) into mini-batches of size `mini_batch_size` (here 64). Note that the number of training examples is not always divisible by `mini_batch_size`. The last mini batch might be smaller, but you don't need to worry about this. When the final mini-batch is smaller than the full `mini_batch_size`, it will look like this: \n", + "\n", + "\n", + "\n", + "**Exercise**: Implement `random_mini_batches`. We coded the shuffling part for you. To help you with the partitioning step, we give you the following code that selects the indexes for the $1^{st}$ and $2^{nd}$ mini-batches:\n", + "```python\n", + "first_mini_batch_X = shuffled_X[:, 0 : mini_batch_size]\n", + "second_mini_batch_X = shuffled_X[:, mini_batch_size : 2 * mini_batch_size]\n", + "...\n", + "```\n", + "\n", + "Note that the last mini-batch might end up smaller than `mini_batch_size=64`. Let $\\lfloor s \\rfloor$ represents $s$ rounded down to the nearest integer (this is `math.floor(s)` in Python). If the total number of examples is not a multiple of `mini_batch_size=64` then there will be $\\lfloor \\frac{m}{mini\\_batch\\_size}\\rfloor$ mini-batches with a full 64 examples, and the number of examples in the final mini-batch will be ($m-mini_\\_batch_\\_size \\times \\lfloor \\frac{m}{mini\\_batch\\_size}\\rfloor$). " + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: random_mini_batches\n", + "\n", + "def random_mini_batches(X, Y, mini_batch_size = 64, seed = 0):\n", + " \"\"\"\n", + " Creates a list of random minibatches from (X, Y)\n", + " \n", + " Arguments:\n", + " X -- input data, of shape (input size, number of examples)\n", + " Y -- true \"label\" vector (1 for blue dot / 0 for red dot), of shape (1, number of examples)\n", + " mini_batch_size -- size of the mini-batches, integer\n", + " \n", + " Returns:\n", + " mini_batches -- list of synchronous (mini_batch_X, mini_batch_Y)\n", + " \"\"\"\n", + " \n", + " np.random.seed(seed) # To make your \"random\" minibatches the same as ours\n", + " m = X.shape[1] # number of training examples\n", + " mini_batches = []\n", + " \n", + " # Step 1: Shuffle (X, Y)\n", + " permutation = list(np.random.permutation(m))\n", + " shuffled_X = X[:, permutation]\n", + " shuffled_Y = Y[:, permutation].reshape((1,m))\n", + "\n", + " # Step 2: Partition (shuffled_X, shuffled_Y). Minus the end case.\n", + " num_complete_minibatches = math.floor(m/mini_batch_size) # number of mini batches of size mini_batch_size in your partitionning\n", + " for k in range(0, num_complete_minibatches):\n", + " ### START CODE HERE ### (approx. 2 lines)\n", + " mini_batch_X = shuffled_X[:, (k) * (mini_batch_size) : (k + 1)*(mini_batch_size)]\n", + " mini_batch_Y = shuffled_Y[:, (k) * (mini_batch_size) : (k + 1)*(mini_batch_size)]\n", + " ### END CODE HERE ###\n", + " mini_batch = (mini_batch_X, mini_batch_Y)\n", + " mini_batches.append(mini_batch)\n", + " \n", + " # Handling the end case (last mini-batch < mini_batch_size)\n", + " if m % mini_batch_size != 0:\n", + " ### START CODE HERE ### (approx. 2 lines)\n", + " mini_batch_X = shuffled_X[:, (num_complete_minibatches) * (mini_batch_size) :]\n", + " mini_batch_Y = shuffled_Y[:, (num_complete_minibatches) * (mini_batch_size) :]\n", + " ### END CODE HERE ###\n", + " mini_batch = (mini_batch_X, mini_batch_Y)\n", + " mini_batches.append(mini_batch)\n", + " \n", + " return mini_batches" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "shape of the 1st mini_batch_X: (12288, 64)\n", + "shape of the 2nd mini_batch_X: (12288, 64)\n", + "shape of the 3rd mini_batch_X: (12288, 20)\n", + "shape of the 1st mini_batch_Y: (1, 64)\n", + "shape of the 2nd mini_batch_Y: (1, 64)\n", + "shape of the 3rd mini_batch_Y: (1, 20)\n", + "mini batch sanity check: [ 0.90085595 -0.7612069 0.2344157 ]\n" + ] + } + ], + "source": [ + "X_assess, Y_assess, mini_batch_size = random_mini_batches_test_case()\n", + "mini_batches = random_mini_batches(X_assess, Y_assess, mini_batch_size)\n", + "\n", + "print (\"shape of the 1st mini_batch_X: \" + str(mini_batches[0][0].shape))\n", + "print (\"shape of the 2nd mini_batch_X: \" + str(mini_batches[1][0].shape))\n", + "print (\"shape of the 3rd mini_batch_X: \" + str(mini_batches[2][0].shape))\n", + "print (\"shape of the 1st mini_batch_Y: \" + str(mini_batches[0][1].shape))\n", + "print (\"shape of the 2nd mini_batch_Y: \" + str(mini_batches[1][1].shape)) \n", + "print (\"shape of the 3rd mini_batch_Y: \" + str(mini_batches[2][1].shape))\n", + "print (\"mini batch sanity check: \" + str(mini_batches[0][0][0][0:3]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Expected Output**:\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
**shape of the 1st mini_batch_X** (12288, 64)
**shape of the 2nd mini_batch_X** (12288, 64)
**shape of the 3rd mini_batch_X** (12288, 20)
**shape of the 1st mini_batch_Y** (1, 64)
**shape of the 2nd mini_batch_Y** (1, 64)
**shape of the 3rd mini_batch_Y** (1, 20)
**mini batch sanity check** [ 0.90085595 -0.7612069 0.2344157 ]
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "**What you should remember**:\n", + "- Shuffling and Partitioning are the two steps required to build mini-batches\n", + "- Powers of two are often chosen to be the mini-batch size, e.g., 16, 32, 64, 128." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3 - Momentum\n", + "\n", + "Because mini-batch gradient descent makes a parameter update after seeing just a subset of examples, the direction of the update has some variance, and so the path taken by mini-batch gradient descent will \"oscillate\" toward convergence. Using momentum can reduce these oscillations. \n", + "\n", + "Momentum takes into account the past gradients to smooth out the update. We will store the 'direction' of the previous gradients in the variable $v$. Formally, this will be the exponentially weighted average of the gradient on previous steps. You can also think of $v$ as the \"velocity\" of a ball rolling downhill, building up speed (and momentum) according to the direction of the gradient/slope of the hill. \n", + "\n", + "\n", + "
**Figure 3**: The red arrows shows the direction taken by one step of mini-batch gradient descent with momentum. The blue points show the direction of the gradient (with respect to the current mini-batch) on each step. Rather than just following the gradient, we let the gradient influence $v$ and then take a step in the direction of $v$.
\n", + "\n", + "\n", + "**Exercise**: Initialize the velocity. The velocity, $v$, is a python dictionary that needs to be initialized with arrays of zeros. Its keys are the same as those in the `grads` dictionary, that is:\n", + "for $l =1,...,L$:\n", + "```python\n", + "v[\"dW\" + str(l+1)] = ... #(numpy array of zeros with the same shape as parameters[\"W\" + str(l+1)])\n", + "v[\"db\" + str(l+1)] = ... #(numpy array of zeros with the same shape as parameters[\"b\" + str(l+1)])\n", + "```\n", + "**Note** that the iterator l starts at 0 in the for loop while the first parameters are v[\"dW1\"] and v[\"db1\"] (that's a \"one\" on the superscript). This is why we are shifting l to l+1 in the `for` loop." + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: initialize_velocity\n", + "\n", + "def initialize_velocity(parameters):\n", + " \"\"\"\n", + " Initializes the velocity as a python dictionary with:\n", + " - keys: \"dW1\", \"db1\", ..., \"dWL\", \"dbL\" \n", + " - values: numpy arrays of zeros of the same shape as the corresponding gradients/parameters.\n", + " Arguments:\n", + " parameters -- python dictionary containing your parameters.\n", + " parameters['W' + str(l)] = Wl\n", + " parameters['b' + str(l)] = bl\n", + " \n", + " Returns:\n", + " v -- python dictionary containing the current velocity.\n", + " v['dW' + str(l)] = velocity of dWl\n", + " v['db' + str(l)] = velocity of dbl\n", + " \"\"\"\n", + " \n", + " L = len(parameters) // 2 # number of layers in the neural networks\n", + " v = {}\n", + " \n", + " # Initialize velocity\n", + " for l in range(L):\n", + " ### START CODE HERE ### (approx. 2 lines)\n", + " v[\"dW\" + str(l+1)] = np.zeros(parameters[\"W\" + str(l+1)].shape)\n", + " v[\"db\" + str(l+1)] = np.zeros(parameters[\"b\" + str(l+1)].shape)\n", + " ### END CODE HERE ###\n", + " \n", + " return v" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "v[\"dW1\"] =\n", + "[[ 0. 0. 0.]\n", + " [ 0. 0. 0.]]\n", + "v[\"db1\"] =\n", + "[[ 0.]\n", + " [ 0.]]\n", + "v[\"dW2\"] =\n", + "[[ 0. 0. 0.]\n", + " [ 0. 0. 0.]\n", + " [ 0. 0. 0.]]\n", + "v[\"db2\"] =\n", + "[[ 0.]\n", + " [ 0.]\n", + " [ 0.]]\n" + ] + } + ], + "source": [ + "parameters = initialize_velocity_test_case()\n", + "\n", + "v = initialize_velocity(parameters)\n", + "print(\"v[\\\"dW1\\\"] =\\n\" + str(v[\"dW1\"]))\n", + "print(\"v[\\\"db1\\\"] =\\n\" + str(v[\"db1\"]))\n", + "print(\"v[\\\"dW2\\\"] =\\n\" + str(v[\"dW2\"]))\n", + "print(\"v[\\\"db2\\\"] =\\n\" + str(v[\"db2\"]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Expected Output**:\n", + "\n", + "```\n", + "v[\"dW1\"] =\n", + "[[ 0. 0. 0.]\n", + " [ 0. 0. 0.]]\n", + "v[\"db1\"] =\n", + "[[ 0.]\n", + " [ 0.]]\n", + "v[\"dW2\"] =\n", + "[[ 0. 0. 0.]\n", + " [ 0. 0. 0.]\n", + " [ 0. 0. 0.]]\n", + "v[\"db2\"] =\n", + "[[ 0.]\n", + " [ 0.]\n", + " [ 0.]]\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise**: Now, implement the parameters update with momentum. The momentum update rule is, for $l = 1, ..., L$: \n", + "\n", + "$$ \\begin{cases}\n", + "v_{dW^{[l]}} = \\beta v_{dW^{[l]}} + (1 - \\beta) dW^{[l]} \\\\\n", + "W^{[l]} = W^{[l]} - \\alpha v_{dW^{[l]}}\n", + "\\end{cases}\\tag{3}$$\n", + "\n", + "$$\\begin{cases}\n", + "v_{db^{[l]}} = \\beta v_{db^{[l]}} + (1 - \\beta) db^{[l]} \\\\\n", + "b^{[l]} = b^{[l]} - \\alpha v_{db^{[l]}} \n", + "\\end{cases}\\tag{4}$$\n", + "\n", + "where L is the number of layers, $\\beta$ is the momentum and $\\alpha$ is the learning rate. All parameters should be stored in the `parameters` dictionary. Note that the iterator `l` starts at 0 in the `for` loop while the first parameters are $W^{[1]}$ and $b^{[1]}$ (that's a \"one\" on the superscript). So you will need to shift `l` to `l+1` when coding." + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: update_parameters_with_momentum\n", + "\n", + "def update_parameters_with_momentum(parameters, grads, v, beta, learning_rate):\n", + " \"\"\"\n", + " Update parameters using Momentum\n", + " \n", + " Arguments:\n", + " parameters -- python dictionary containing your parameters:\n", + " parameters['W' + str(l)] = Wl\n", + " parameters['b' + str(l)] = bl\n", + " grads -- python dictionary containing your gradients for each parameters:\n", + " grads['dW' + str(l)] = dWl\n", + " grads['db' + str(l)] = dbl\n", + " v -- python dictionary containing the current velocity:\n", + " v['dW' + str(l)] = ...\n", + " v['db' + str(l)] = ...\n", + " beta -- the momentum hyperparameter, scalar\n", + " learning_rate -- the learning rate, scalar\n", + " \n", + " Returns:\n", + " parameters -- python dictionary containing your updated parameters \n", + " v -- python dictionary containing your updated velocities\n", + " \"\"\"\n", + "\n", + " L = len(parameters) // 2 # number of layers in the neural networks\n", + " \n", + " # Momentum update for each parameter\n", + " for l in range(L):\n", + " \n", + " ### START CODE HERE ### (approx. 4 lines)\n", + " # compute velocities\n", + " v[\"dW\" + str(l+1)] = beta * v['dW' + str(l + 1)] + (1 - beta) * grads['dW' + str(l + 1)]\n", + " v[\"db\" + str(l+1)] = beta * v['db' + str(l + 1)] + (1 - beta) * grads['db' + str(l + 1)]\n", + " # update parameters\n", + " parameters[\"W\" + str(l+1)] -= learning_rate * v['dW' + str(l + 1)]\n", + " parameters[\"b\" + str(l+1)] -= learning_rate * v['db' + str(l + 1)]\n", + " ### END CODE HERE ###\n", + " \n", + " return parameters, v" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "W1 = \n", + "[[ 1.62544598 -0.61290114 -0.52907334]\n", + " [-1.07347112 0.86450677 -2.30085497]]\n", + "b1 = \n", + "[[ 1.74493465]\n", + " [-0.76027113]]\n", + "W2 = \n", + "[[ 0.31930698 -0.24990073 1.4627996 ]\n", + " [-2.05974396 -0.32173003 -0.38320915]\n", + " [ 1.13444069 -1.0998786 -0.1713109 ]]\n", + "b2 = \n", + "[[-0.87809283]\n", + " [ 0.04055394]\n", + " [ 0.58207317]]\n", + "v[\"dW1\"] = \n", + "[[-0.11006192 0.11447237 0.09015907]\n", + " [ 0.05024943 0.09008559 -0.06837279]]\n", + "v[\"db1\"] = \n", + "[[-0.01228902]\n", + " [-0.09357694]]\n", + "v[\"dW2\"] = \n", + "[[-0.02678881 0.05303555 -0.06916608]\n", + " [-0.03967535 -0.06871727 -0.08452056]\n", + " [-0.06712461 -0.00126646 -0.11173103]]\n", + "v[\"db2\"] = v[[ 0.02344157]\n", + " [ 0.16598022]\n", + " [ 0.07420442]]\n" + ] + } + ], + "source": [ + "parameters, grads, v = update_parameters_with_momentum_test_case()\n", + "\n", + "parameters, v = update_parameters_with_momentum(parameters, grads, v, beta = 0.9, learning_rate = 0.01)\n", + "print(\"W1 = \\n\" + str(parameters[\"W1\"]))\n", + "print(\"b1 = \\n\" + str(parameters[\"b1\"]))\n", + "print(\"W2 = \\n\" + str(parameters[\"W2\"]))\n", + "print(\"b2 = \\n\" + str(parameters[\"b2\"]))\n", + "print(\"v[\\\"dW1\\\"] = \\n\" + str(v[\"dW1\"]))\n", + "print(\"v[\\\"db1\\\"] = \\n\" + str(v[\"db1\"]))\n", + "print(\"v[\\\"dW2\\\"] = \\n\" + str(v[\"dW2\"]))\n", + "print(\"v[\\\"db2\\\"] = v\" + str(v[\"db2\"]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Expected Output**:\n", + "\n", + "```\n", + "W1 = \n", + "[[ 1.62544598 -0.61290114 -0.52907334]\n", + " [-1.07347112 0.86450677 -2.30085497]]\n", + "b1 = \n", + "[[ 1.74493465]\n", + " [-0.76027113]]\n", + "W2 = \n", + "[[ 0.31930698 -0.24990073 1.4627996 ]\n", + " [-2.05974396 -0.32173003 -0.38320915]\n", + " [ 1.13444069 -1.0998786 -0.1713109 ]]\n", + "b2 = \n", + "[[-0.87809283]\n", + " [ 0.04055394]\n", + " [ 0.58207317]]\n", + "v[\"dW1\"] = \n", + "[[-0.11006192 0.11447237 0.09015907]\n", + " [ 0.05024943 0.09008559 -0.06837279]]\n", + "v[\"db1\"] = \n", + "[[-0.01228902]\n", + " [-0.09357694]]\n", + "v[\"dW2\"] = \n", + "[[-0.02678881 0.05303555 -0.06916608]\n", + " [-0.03967535 -0.06871727 -0.08452056]\n", + " [-0.06712461 -0.00126646 -0.11173103]]\n", + "v[\"db2\"] = v[[ 0.02344157]\n", + " [ 0.16598022]\n", + " [ 0.07420442]]\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Note** that:\n", + "- The velocity is initialized with zeros. So the algorithm will take a few iterations to \"build up\" velocity and start to take bigger steps.\n", + "- If $\\beta = 0$, then this just becomes standard gradient descent without momentum. \n", + "\n", + "**How do you choose $\\beta$?**\n", + "\n", + "- The larger the momentum $\\beta$ is, the smoother the update because the more we take the past gradients into account. But if $\\beta$ is too big, it could also smooth out the updates too much. \n", + "- Common values for $\\beta$ range from 0.8 to 0.999. If you don't feel inclined to tune this, $\\beta = 0.9$ is often a reasonable default. \n", + "- Tuning the optimal $\\beta$ for your model might need trying several values to see what works best in term of reducing the value of the cost function $J$. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "**What you should remember**:\n", + "- Momentum takes past gradients into account to smooth out the steps of gradient descent. It can be applied with batch gradient descent, mini-batch gradient descent or stochastic gradient descent.\n", + "- You have to tune a momentum hyperparameter $\\beta$ and a learning rate $\\alpha$." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 4 - Adam\n", + "\n", + "Adam is one of the most effective optimization algorithms for training neural networks. It combines ideas from RMSProp (described in lecture) and Momentum. \n", + "\n", + "**How does Adam work?**\n", + "1. It calculates an exponentially weighted average of past gradients, and stores it in variables $v$ (before bias correction) and $v^{corrected}$ (with bias correction). \n", + "2. It calculates an exponentially weighted average of the squares of the past gradients, and stores it in variables $s$ (before bias correction) and $s^{corrected}$ (with bias correction). \n", + "3. It updates parameters in a direction based on combining information from \"1\" and \"2\".\n", + "\n", + "The update rule is, for $l = 1, ..., L$: \n", + "\n", + "$$\\begin{cases}\n", + "v_{dW^{[l]}} = \\beta_1 v_{dW^{[l]}} + (1 - \\beta_1) \\frac{\\partial \\mathcal{J} }{ \\partial W^{[l]} } \\\\\n", + "v^{corrected}_{dW^{[l]}} = \\frac{v_{dW^{[l]}}}{1 - (\\beta_1)^t} \\\\\n", + "s_{dW^{[l]}} = \\beta_2 s_{dW^{[l]}} + (1 - \\beta_2) (\\frac{\\partial \\mathcal{J} }{\\partial W^{[l]} })^2 \\\\\n", + "s^{corrected}_{dW^{[l]}} = \\frac{s_{dW^{[l]}}}{1 - (\\beta_2)^t} \\\\\n", + "W^{[l]} = W^{[l]} - \\alpha \\frac{v^{corrected}_{dW^{[l]}}}{\\sqrt{s^{corrected}_{dW^{[l]}}} + \\varepsilon}\n", + "\\end{cases}$$\n", + "where:\n", + "- t counts the number of steps taken of Adam \n", + "- L is the number of layers\n", + "- $\\beta_1$ and $\\beta_2$ are hyperparameters that control the two exponentially weighted averages. \n", + "- $\\alpha$ is the learning rate\n", + "- $\\varepsilon$ is a very small number to avoid dividing by zero\n", + "\n", + "As usual, we will store all parameters in the `parameters` dictionary " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise**: Initialize the Adam variables $v, s$ which keep track of the past information.\n", + "\n", + "**Instruction**: The variables $v, s$ are python dictionaries that need to be initialized with arrays of zeros. Their keys are the same as for `grads`, that is:\n", + "for $l = 1, ..., L$:\n", + "```python\n", + "v[\"dW\" + str(l+1)] = ... #(numpy array of zeros with the same shape as parameters[\"W\" + str(l+1)])\n", + "v[\"db\" + str(l+1)] = ... #(numpy array of zeros with the same shape as parameters[\"b\" + str(l+1)])\n", + "s[\"dW\" + str(l+1)] = ... #(numpy array of zeros with the same shape as parameters[\"W\" + str(l+1)])\n", + "s[\"db\" + str(l+1)] = ... #(numpy array of zeros with the same shape as parameters[\"b\" + str(l+1)])\n", + "\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: initialize_adam\n", + "\n", + "def initialize_adam(parameters) :\n", + " \"\"\"\n", + " Initializes v and s as two python dictionaries with:\n", + " - keys: \"dW1\", \"db1\", ..., \"dWL\", \"dbL\" \n", + " - values: numpy arrays of zeros of the same shape as the corresponding gradients/parameters.\n", + " \n", + " Arguments:\n", + " parameters -- python dictionary containing your parameters.\n", + " parameters[\"W\" + str(l)] = Wl\n", + " parameters[\"b\" + str(l)] = bl\n", + " \n", + " Returns: \n", + " v -- python dictionary that will contain the exponentially weighted average of the gradient.\n", + " v[\"dW\" + str(l)] = ...\n", + " v[\"db\" + str(l)] = ...\n", + " s -- python dictionary that will contain the exponentially weighted average of the squared gradient.\n", + " s[\"dW\" + str(l)] = ...\n", + " s[\"db\" + str(l)] = ...\n", + "\n", + " \"\"\"\n", + " \n", + " L = len(parameters) // 2 # number of layers in the neural networks\n", + " v = {}\n", + " s = {}\n", + " \n", + " # Initialize v, s. Input: \"parameters\". Outputs: \"v, s\".\n", + " for l in range(L):\n", + " ### START CODE HERE ### (approx. 4 lines)\n", + " v[\"dW\" + str(l+1)] = np.zeros(parameters[\"W\" + str(l+1)].shape)\n", + " v[\"db\" + str(l+1)] = np.zeros(parameters[\"b\" + str(l+1)].shape)\n", + " s[\"dW\" + str(l+1)] = np.zeros(parameters[\"W\" + str(l+1)].shape)\n", + " s[\"db\" + str(l+1)] = np.zeros(parameters[\"b\" + str(l+1)].shape)\n", + " ### END CODE HERE ###\n", + " \n", + " return v, s" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "v[\"dW1\"] = \n", + "[[ 0. 0. 0.]\n", + " [ 0. 0. 0.]]\n", + "v[\"db1\"] = \n", + "[[ 0.]\n", + " [ 0.]]\n", + "v[\"dW2\"] = \n", + "[[ 0. 0. 0.]\n", + " [ 0. 0. 0.]\n", + " [ 0. 0. 0.]]\n", + "v[\"db2\"] = \n", + "[[ 0.]\n", + " [ 0.]\n", + " [ 0.]]\n", + "s[\"dW1\"] = \n", + "[[ 0. 0. 0.]\n", + " [ 0. 0. 0.]]\n", + "s[\"db1\"] = \n", + "[[ 0.]\n", + " [ 0.]]\n", + "s[\"dW2\"] = \n", + "[[ 0. 0. 0.]\n", + " [ 0. 0. 0.]\n", + " [ 0. 0. 0.]]\n", + "s[\"db2\"] = \n", + "[[ 0.]\n", + " [ 0.]\n", + " [ 0.]]\n" + ] + } + ], + "source": [ + "parameters = initialize_adam_test_case()\n", + "\n", + "v, s = initialize_adam(parameters)\n", + "print(\"v[\\\"dW1\\\"] = \\n\" + str(v[\"dW1\"]))\n", + "print(\"v[\\\"db1\\\"] = \\n\" + str(v[\"db1\"]))\n", + "print(\"v[\\\"dW2\\\"] = \\n\" + str(v[\"dW2\"]))\n", + "print(\"v[\\\"db2\\\"] = \\n\" + str(v[\"db2\"]))\n", + "print(\"s[\\\"dW1\\\"] = \\n\" + str(s[\"dW1\"]))\n", + "print(\"s[\\\"db1\\\"] = \\n\" + str(s[\"db1\"]))\n", + "print(\"s[\\\"dW2\\\"] = \\n\" + str(s[\"dW2\"]))\n", + "print(\"s[\\\"db2\\\"] = \\n\" + str(s[\"db2\"]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Expected Output**:\n", + "\n", + "```\n", + "v[\"dW1\"] = \n", + "[[ 0. 0. 0.]\n", + " [ 0. 0. 0.]]\n", + "v[\"db1\"] = \n", + "[[ 0.]\n", + " [ 0.]]\n", + "v[\"dW2\"] = \n", + "[[ 0. 0. 0.]\n", + " [ 0. 0. 0.]\n", + " [ 0. 0. 0.]]\n", + "v[\"db2\"] = \n", + "[[ 0.]\n", + " [ 0.]\n", + " [ 0.]]\n", + "s[\"dW1\"] = \n", + "[[ 0. 0. 0.]\n", + " [ 0. 0. 0.]]\n", + "s[\"db1\"] = \n", + "[[ 0.]\n", + " [ 0.]]\n", + "s[\"dW2\"] = \n", + "[[ 0. 0. 0.]\n", + " [ 0. 0. 0.]\n", + " [ 0. 0. 0.]]\n", + "s[\"db2\"] = \n", + "[[ 0.]\n", + " [ 0.]\n", + " [ 0.]]\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise**: Now, implement the parameters update with Adam. Recall the general update rule is, for $l = 1, ..., L$: \n", + "\n", + "$$\\begin{cases}\n", + "v_{W^{[l]}} = \\beta_1 v_{W^{[l]}} + (1 - \\beta_1) \\frac{\\partial J }{ \\partial W^{[l]} } \\\\\n", + "v^{corrected}_{W^{[l]}} = \\frac{v_{W^{[l]}}}{1 - (\\beta_1)^t} \\\\\n", + "s_{W^{[l]}} = \\beta_2 s_{W^{[l]}} + (1 - \\beta_2) (\\frac{\\partial J }{\\partial W^{[l]} })^2 \\\\\n", + "s^{corrected}_{W^{[l]}} = \\frac{s_{W^{[l]}}}{1 - (\\beta_2)^t} \\\\\n", + "W^{[l]} = W^{[l]} - \\alpha \\frac{v^{corrected}_{W^{[l]}}}{\\sqrt{s^{corrected}_{W^{[l]}}}+\\varepsilon}\n", + "\\end{cases}$$\n", + "\n", + "\n", + "**Note** that the iterator `l` starts at 0 in the `for` loop while the first parameters are $W^{[1]}$ and $b^{[1]}$. You need to shift `l` to `l+1` when coding." + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: update_parameters_with_adam\n", + "\n", + "def update_parameters_with_adam(parameters, grads, v, s, t, learning_rate = 0.01,\n", + " beta1 = 0.9, beta2 = 0.999, epsilon = 1e-8):\n", + " \"\"\"\n", + " Update parameters using Adam\n", + " \n", + " Arguments:\n", + " parameters -- python dictionary containing your parameters:\n", + " parameters['W' + str(l)] = Wl\n", + " parameters['b' + str(l)] = bl\n", + " grads -- python dictionary containing your gradients for each parameters:\n", + " grads['dW' + str(l)] = dWl\n", + " grads['db' + str(l)] = dbl\n", + " v -- Adam variable, moving average of the first gradient, python dictionary\n", + " s -- Adam variable, moving average of the squared gradient, python dictionary\n", + " learning_rate -- the learning rate, scalar.\n", + " beta1 -- Exponential decay hyperparameter for the first moment estimates \n", + " beta2 -- Exponential decay hyperparameter for the second moment estimates \n", + " epsilon -- hyperparameter preventing division by zero in Adam updates\n", + "\n", + " Returns:\n", + " parameters -- python dictionary containing your updated parameters \n", + " v -- Adam variable, moving average of the first gradient, python dictionary\n", + " s -- Adam variable, moving average of the squared gradient, python dictionary\n", + " \"\"\"\n", + " \n", + " L = len(parameters) // 2 # number of layers in the neural networks\n", + " v_corrected = {} # Initializing first moment estimate, python dictionary\n", + " s_corrected = {} # Initializing second moment estimate, python dictionary\n", + " \n", + " # Perform Adam update on all parameters\n", + " for l in range(L):\n", + " # Moving average of the gradients. Inputs: \"v, grads, beta1\". Output: \"v\".\n", + " ### START CODE HERE ### (approx. 2 lines)\n", + " v[\"dW\" + str(l+1)] = beta1 * v[\"dW\" + str(l+1)] + (1 - beta1) * grads['dW' + str(l + 1)]\n", + " v[\"db\" + str(l+1)] = beta1 * v[\"db\" + str(l+1)] + (1 - beta1) * grads['db' + str(l + 1)]\n", + " ### END CODE HERE ###\n", + "\n", + " # Compute bias-corrected first moment estimate. Inputs: \"v, beta1, t\". Output: \"v_corrected\".\n", + " ### START CODE HERE ### (approx. 2 lines)\n", + " v_corrected[\"dW\" + str(l+1)] = v[\"dW\" + str(l+1)] / (1 - np.power(beta1,2))\n", + " v_corrected[\"db\" + str(l+1)] = v[\"db\" + str(l+1)] / (1 - np.power(beta1,2))\n", + " ### END CODE HERE ###\n", + "\n", + " # Moving average of the squared gradients. Inputs: \"s, grads, beta2\". Output: \"s\".\n", + " ### START CODE HERE ### (approx. 2 lines)\n", + " s[\"dW\" + str(l+1)] = beta2 * s[\"dW\" + str(l+1)] + (1 - beta2) * np.power(grads['dW' + str(l + 1)],2)\n", + " s[\"db\" + str(l+1)] = beta2 * s[\"db\" + str(l+1)] + (1 - beta2) * np.power(grads['db' + str(l + 1)],2)\n", + " ### END CODE HERE ###\n", + "\n", + " # Compute bias-corrected second raw moment estimate. Inputs: \"s, beta2, t\". Output: \"s_corrected\".\n", + " ### START CODE HERE ### (approx. 2 lines)\n", + " s_corrected[\"dW\" + str(l+1)] = s[\"dW\" + str(l+1)] / (1 - np.power(beta2,2))\n", + " s_corrected[\"db\" + str(l+1)] = s[\"db\" + str(l+1)] / (1 - np.power(beta2,2))\n", + " ### END CODE HERE ###\n", + "\n", + " # Update parameters. Inputs: \"parameters, learning_rate, v_corrected, s_corrected, epsilon\". Output: \"parameters\".\n", + " ### START CODE HERE ### (approx. 2 lines)\n", + " parameters[\"W\" + str(l+1)] -= learning_rate * (v_corrected[\"dW\" + str(l+1)] / (np.sqrt(s_corrected[\"dW\" + str(l+1)]) + epsilon))\n", + " parameters[\"b\" + str(l+1)] -= learning_rate * (v_corrected[\"db\" + str(l+1)] / (np.sqrt(s_corrected[\"db\" + str(l+1)]) + epsilon))\n", + " ### END CODE HERE ###\n", + "\n", + " return parameters, v, s" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "W1 = \n", + "[[ 1.63178673 -0.61919778 -0.53561312]\n", + " [-1.08040999 0.85796626 -2.29409733]]\n", + "b1 = \n", + "[[ 1.75225313]\n", + " [-0.75376553]]\n", + "W2 = \n", + "[[ 0.32648046 -0.25681174 1.46954931]\n", + " [-2.05269934 -0.31497584 -0.37661299]\n", + " [ 1.14121081 -1.09244991 -0.16498684]]\n", + "b2 = \n", + "[[-0.88529979]\n", + " [ 0.03477238]\n", + " [ 0.57537385]]\n", + "v[\"dW1\"] = \n", + "[[-0.11006192 0.11447237 0.09015907]\n", + " [ 0.05024943 0.09008559 -0.06837279]]\n", + "v[\"db1\"] = \n", + "[[-0.01228902]\n", + " [-0.09357694]]\n", + "v[\"dW2\"] = \n", + "[[-0.02678881 0.05303555 -0.06916608]\n", + " [-0.03967535 -0.06871727 -0.08452056]\n", + " [-0.06712461 -0.00126646 -0.11173103]]\n", + "v[\"db2\"] = \n", + "[[ 0.02344157]\n", + " [ 0.16598022]\n", + " [ 0.07420442]]\n", + "s[\"dW1\"] = \n", + "[[ 0.00121136 0.00131039 0.00081287]\n", + " [ 0.0002525 0.00081154 0.00046748]]\n", + "s[\"db1\"] = \n", + "[[ 1.51020075e-05]\n", + " [ 8.75664434e-04]]\n", + "s[\"dW2\"] = \n", + "[[ 7.17640232e-05 2.81276921e-04 4.78394595e-04]\n", + " [ 1.57413361e-04 4.72206320e-04 7.14372576e-04]\n", + " [ 4.50571368e-04 1.60392066e-07 1.24838242e-03]]\n", + "s[\"db2\"] = \n", + "[[ 5.49507194e-05]\n", + " [ 2.75494327e-03]\n", + " [ 5.50629536e-04]]\n" + ] + } + ], + "source": [ + "parameters, grads, v, s = update_parameters_with_adam_test_case()\n", + "parameters, v, s = update_parameters_with_adam(parameters, grads, v, s, t = 2)\n", + "\n", + "print(\"W1 = \\n\" + str(parameters[\"W1\"]))\n", + "print(\"b1 = \\n\" + str(parameters[\"b1\"]))\n", + "print(\"W2 = \\n\" + str(parameters[\"W2\"]))\n", + "print(\"b2 = \\n\" + str(parameters[\"b2\"]))\n", + "print(\"v[\\\"dW1\\\"] = \\n\" + str(v[\"dW1\"]))\n", + "print(\"v[\\\"db1\\\"] = \\n\" + str(v[\"db1\"]))\n", + "print(\"v[\\\"dW2\\\"] = \\n\" + str(v[\"dW2\"]))\n", + "print(\"v[\\\"db2\\\"] = \\n\" + str(v[\"db2\"]))\n", + "print(\"s[\\\"dW1\\\"] = \\n\" + str(s[\"dW1\"]))\n", + "print(\"s[\\\"db1\\\"] = \\n\" + str(s[\"db1\"]))\n", + "print(\"s[\\\"dW2\\\"] = \\n\" + str(s[\"dW2\"]))\n", + "print(\"s[\\\"db2\\\"] = \\n\" + str(s[\"db2\"]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Expected Output**:\n", + "\n", + "```\n", + "W1 = \n", + "[[ 1.63178673 -0.61919778 -0.53561312]\n", + " [-1.08040999 0.85796626 -2.29409733]]\n", + "b1 = \n", + "[[ 1.75225313]\n", + " [-0.75376553]]\n", + "W2 = \n", + "[[ 0.32648046 -0.25681174 1.46954931]\n", + " [-2.05269934 -0.31497584 -0.37661299]\n", + " [ 1.14121081 -1.09245036 -0.16498684]]\n", + "b2 = \n", + "[[-0.88529978]\n", + " [ 0.03477238]\n", + " [ 0.57537385]]\n", + "v[\"dW1\"] = \n", + "[[-0.11006192 0.11447237 0.09015907]\n", + " [ 0.05024943 0.09008559 -0.06837279]]\n", + "v[\"db1\"] = \n", + "[[-0.01228902]\n", + " [-0.09357694]]\n", + "v[\"dW2\"] = \n", + "[[-0.02678881 0.05303555 -0.06916608]\n", + " [-0.03967535 -0.06871727 -0.08452056]\n", + " [-0.06712461 -0.00126646 -0.11173103]]\n", + "v[\"db2\"] = \n", + "[[ 0.02344157]\n", + " [ 0.16598022]\n", + " [ 0.07420442]]\n", + "s[\"dW1\"] = \n", + "[[ 0.00121136 0.00131039 0.00081287]\n", + " [ 0.0002525 0.00081154 0.00046748]]\n", + "s[\"db1\"] = \n", + "[[ 1.51020075e-05]\n", + " [ 8.75664434e-04]]\n", + "s[\"dW2\"] = \n", + "[[ 7.17640232e-05 2.81276921e-04 4.78394595e-04]\n", + " [ 1.57413361e-04 4.72206320e-04 7.14372576e-04]\n", + " [ 4.50571368e-04 1.60392066e-07 1.24838242e-03]]\n", + "s[\"db2\"] = \n", + "[[ 5.49507194e-05]\n", + " [ 2.75494327e-03]\n", + " [ 5.50629536e-04]]\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You now have three working optimization algorithms (mini-batch gradient descent, Momentum, Adam). Let's implement a model with each of these optimizers and observe the difference." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 5 - Model with different optimization algorithms\n", + "\n", + "Lets use the following \"moons\" dataset to test the different optimization methods. (The dataset is named \"moons\" because the data from each of the two classes looks a bit like a crescent-shaped moon.) " + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "train_X, train_Y = load_dataset()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We have already implemented a 3-layer neural network. You will train it with: \n", + "- Mini-batch **Gradient Descent**: it will call your function:\n", + " - `update_parameters_with_gd()`\n", + "- Mini-batch **Momentum**: it will call your functions:\n", + " - `initialize_velocity()` and `update_parameters_with_momentum()`\n", + "- Mini-batch **Adam**: it will call your functions:\n", + " - `initialize_adam()` and `update_parameters_with_adam()`" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def model(X, Y, layers_dims, optimizer, learning_rate = 0.0007, mini_batch_size = 64, beta = 0.9,\n", + " beta1 = 0.9, beta2 = 0.999, epsilon = 1e-8, num_epochs = 10000, print_cost = True):\n", + " \"\"\"\n", + " 3-layer neural network model which can be run in different optimizer modes.\n", + " \n", + " Arguments:\n", + " X -- input data, of shape (2, number of examples)\n", + " Y -- true \"label\" vector (1 for blue dot / 0 for red dot), of shape (1, number of examples)\n", + " layers_dims -- python list, containing the size of each layer\n", + " learning_rate -- the learning rate, scalar.\n", + " mini_batch_size -- the size of a mini batch\n", + " beta -- Momentum hyperparameter\n", + " beta1 -- Exponential decay hyperparameter for the past gradients estimates \n", + " beta2 -- Exponential decay hyperparameter for the past squared gradients estimates \n", + " epsilon -- hyperparameter preventing division by zero in Adam updates\n", + " num_epochs -- number of epochs\n", + " print_cost -- True to print the cost every 1000 epochs\n", + "\n", + " Returns:\n", + " parameters -- python dictionary containing your updated parameters \n", + " \"\"\"\n", + "\n", + " L = len(layers_dims) # number of layers in the neural networks\n", + " costs = [] # to keep track of the cost\n", + " t = 0 # initializing the counter required for Adam update\n", + " seed = 10 # For grading purposes, so that your \"random\" minibatches are the same as ours\n", + " m = X.shape[1] # number of training examples\n", + " \n", + " # Initialize parameters\n", + " parameters = initialize_parameters(layers_dims)\n", + "\n", + " # Initialize the optimizer\n", + " if optimizer == \"gd\":\n", + " pass # no initialization required for gradient descent\n", + " elif optimizer == \"momentum\":\n", + " v = initialize_velocity(parameters)\n", + " elif optimizer == \"adam\":\n", + " v, s = initialize_adam(parameters)\n", + " \n", + " # Optimization loop\n", + " for i in range(num_epochs):\n", + " \n", + " # Define the random minibatches. We increment the seed to reshuffle differently the dataset after each epoch\n", + " seed = seed + 1\n", + " minibatches = random_mini_batches(X, Y, mini_batch_size, seed)\n", + " cost_total = 0\n", + " \n", + " for minibatch in minibatches:\n", + "\n", + " # Select a minibatch\n", + " (minibatch_X, minibatch_Y) = minibatch\n", + "\n", + " # Forward propagation\n", + " a3, caches = forward_propagation(minibatch_X, parameters)\n", + "\n", + " # Compute cost and add to the cost total\n", + " cost_total += compute_cost(a3, minibatch_Y)\n", + "\n", + " # Backward propagation\n", + " grads = backward_propagation(minibatch_X, minibatch_Y, caches)\n", + "\n", + " # Update parameters\n", + " if optimizer == \"gd\":\n", + " parameters = update_parameters_with_gd(parameters, grads, learning_rate)\n", + " elif optimizer == \"momentum\":\n", + " parameters, v = update_parameters_with_momentum(parameters, grads, v, beta, learning_rate)\n", + " elif optimizer == \"adam\":\n", + " t = t + 1 # Adam counter\n", + " parameters, v, s = update_parameters_with_adam(parameters, grads, v, s,\n", + " t, learning_rate, beta1, beta2, epsilon)\n", + " cost_avg = cost_total / m\n", + " \n", + " # Print the cost every 1000 epoch\n", + " if print_cost and i % 1000 == 0:\n", + " print (\"Cost after epoch %i: %f\" %(i, cost_avg))\n", + " if print_cost and i % 100 == 0:\n", + " costs.append(cost_avg)\n", + " \n", + " # plot the cost\n", + " plt.plot(costs)\n", + " plt.ylabel('cost')\n", + " plt.xlabel('epochs (per 100)')\n", + " plt.title(\"Learning rate = \" + str(learning_rate))\n", + " plt.show()\n", + "\n", + " return parameters" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You will now run this 3 layer neural network with each of the 3 optimization methods.\n", + "\n", + "### 5.1 - Mini-batch Gradient descent\n", + "\n", + "Run the following code to see how the model does with mini-batch gradient descent." + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Cost after epoch 0: 0.702405\n", + "Cost after epoch 1000: 0.668101\n", + "Cost after epoch 2000: 0.635288\n", + "Cost after epoch 3000: 0.600491\n", + "Cost after epoch 4000: 0.573367\n", + "Cost after epoch 5000: 0.551977\n", + "Cost after epoch 6000: 0.532370\n", + "Cost after epoch 7000: 0.514007\n", + "Cost after epoch 8000: 0.496472\n", + "Cost after epoch 9000: 0.468014\n" + ] + }, + { + "data": { + "image/png": "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\n93+o7NbUCU7wmwAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Accuracy: 0.796666666667\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# train 3-layer model\n", + "layers_dims = [train_X.shape[0], 5, 2, 1]\n", + "parameters = model(train_X, train_Y, layers_dims, optimizer = \"gd\")\n", + "\n", + "# Predict\n", + "predictions = predict(train_X, train_Y, parameters)\n", + "\n", + "# Plot decision boundary\n", + "plt.title(\"Model with Gradient Descent optimization\")\n", + "axes = plt.gca()\n", + "axes.set_xlim([-1.5,2.5])\n", + "axes.set_ylim([-1,1.5])\n", + "plot_decision_boundary(lambda x: predict_dec(parameters, x.T), train_X, train_Y)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 5.2 - Mini-batch gradient descent with momentum\n", + "\n", + "Run the following code to see how the model does with momentum. Because this example is relatively simple, the gains from using momemtum are small; but for more complex problems you might see bigger gains." + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Cost after epoch 0: 0.702413\n", + "Cost after epoch 1000: 0.668167\n", + "Cost after epoch 2000: 0.635388\n", + "Cost after epoch 3000: 0.600591\n", + "Cost after epoch 4000: 0.573444\n", + "Cost after epoch 5000: 0.552058\n", + "Cost after epoch 6000: 0.532458\n", + "Cost after epoch 7000: 0.514101\n", + "Cost after epoch 8000: 0.496652\n", + "Cost after epoch 9000: 0.468160\n" + ] + }, + { + "data": { + "image/png": "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\ne/8fvl8UGzM29/QAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Accuracy: 0.796666666667\n" + ] + }, + { + "data": { + "image/png": "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\nYQAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# train 3-layer model\n", + "layers_dims = [train_X.shape[0], 5, 2, 1]\n", + "parameters = model(train_X, train_Y, layers_dims, beta = 0.9, optimizer = \"momentum\")\n", + "\n", + "# Predict\n", + "predictions = predict(train_X, train_Y, parameters)\n", + "\n", + "# Plot decision boundary\n", + "plt.title(\"Model with Momentum optimization\")\n", + "axes = plt.gca()\n", + "axes.set_xlim([-1.5,2.5])\n", + "axes.set_ylim([-1,1.5])\n", + "plot_decision_boundary(lambda x: predict_dec(parameters, x.T), train_X, train_Y)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 5.3 - Mini-batch with Adam mode\n", + "\n", + "Run the following code to see how the model does with Adam." + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Cost after epoch 0: 0.702202\n", + "Cost after epoch 1000: 0.394935\n", + "Cost after epoch 2000: 0.255727\n", + "Cost after epoch 3000: 0.192889\n", + "Cost after epoch 4000: 0.161998\n", + "Cost after epoch 5000: 0.150044\n", + "Cost after epoch 6000: 0.144627\n", + "Cost after epoch 7000: 0.141939\n", + "Cost after epoch 8000: 0.140491\n", + "Cost after epoch 9000: 0.139611\n" + ] + }, + { + "data": { + "image/png": "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\nHPLNLciofwAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Accuracy: 0.936666666667\n" + ] + }, + { + "data": { + "image/png": "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\nSxkOSAOuAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# train 3-layer model\n", + "layers_dims = [train_X.shape[0], 5, 2, 1]\n", + "parameters = model(train_X, train_Y, layers_dims, optimizer = \"adam\")\n", + "\n", + "# Predict\n", + "predictions = predict(train_X, train_Y, parameters)\n", + "\n", + "# Plot decision boundary\n", + "plt.title(\"Model with Adam optimization\")\n", + "axes = plt.gca()\n", + "axes.set_xlim([-1.5,2.5])\n", + "axes.set_ylim([-1,1.5])\n", + "plot_decision_boundary(lambda x: predict_dec(parameters, x.T), train_X, train_Y)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 5.4 - Summary\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + " **optimization method**\n", + " \n", + " **accuracy**\n", + " \n", + " **cost shape**\n", + "
\n", + " Gradient descent\n", + " \n", + " 79.7%\n", + " \n", + " oscillations\n", + "
\n", + " Momentum\n", + " \n", + " 79.7%\n", + " \n", + " oscillations\n", + "
\n", + " Adam\n", + " \n", + " 94%\n", + " \n", + " smoother\n", + "
\n", + "\n", + "Momentum usually helps, but given the small learning rate and the simplistic dataset, its impact is almost negligeable. Also, the huge oscillations you see in the cost come from the fact that some minibatches are more difficult thans others for the optimization algorithm.\n", + "\n", + "Adam on the other hand, clearly outperforms mini-batch gradient descent and Momentum. If you run the model for more epochs on this simple dataset, all three methods will lead to very good results. However, you've seen that Adam converges a lot faster.\n", + "\n", + "Some advantages of Adam include:\n", + "- Relatively low memory requirements (though higher than gradient descent and gradient descent with momentum) \n", + "- Usually works well even with little tuning of hyperparameters (except $\\alpha$)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**References**:\n", + "\n", + "- Adam paper: https://arxiv.org/pdf/1412.6980.pdf" + ] + } + ], + "metadata": { + "coursera": { + "course_slug": "deep-neural-network", + "graded_item_id": "Ckiv2", + "launcher_item_id": "eNLYh" + }, + "kernelspec": { + "display_name": "Python 3", + "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.6.0" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Course2/Week 3/TensorFlow_Tutorial_v3b.ipynb b/Course2/Week 3/TensorFlow_Tutorial_v3b.ipynb new file mode 100644 index 0000000..a11afb6 --- /dev/null +++ b/Course2/Week 3/TensorFlow_Tutorial_v3b.ipynb @@ -0,0 +1,1872 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "zVtw6n7bT110" + }, + "source": [ + "# TensorFlow Tutorial\n", + "\n", + "Welcome to this week's programming assignment. Until now, you've always used numpy to build neural networks. Now we will step you through a deep learning framework that will allow you to build neural networks more easily. Machine learning frameworks like TensorFlow, PaddlePaddle, Torch, Caffe, Keras, and many others can speed up your machine learning development significantly. All of these frameworks also have a lot of documentation, which you should feel free to read. In this assignment, you will learn to do the following in TensorFlow: \n", + "\n", + "- Initialize variables\n", + "- Start your own session\n", + "- Train algorithms \n", + "- Implement a Neural Network\n", + "\n", + "Programing frameworks can not only shorten your coding time, but sometimes also perform optimizations that speed up your code. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Updates\n", + "\n", + "#### If you were working on the notebook before this update...\n", + "* The current notebook is version \"v3b\".\n", + "* You can find your original work saved in the notebook with the previous version name (it may be either TensorFlow Tutorial version 3\" or \"TensorFlow Tutorial version 3a.) \n", + "* To view the file directory, click on the \"Coursera\" icon in the top left of this notebook.\n", + "\n", + "#### List of updates\n", + "* forward_propagation instruction now says 'A1' instead of 'a1' in the formula for Z2; \n", + " and are updated to say 'A2' instead of 'Z2' in the formula for Z3.\n", + "* create_placeholders instruction refer to the data type \"tf.float32\" instead of float.\n", + "* in the model function, the x axis of the plot now says \"iterations (per fives)\" instead of iterations(per tens)\n", + "* In the linear_function, comments remind students to create the variables in the order suggested by the starter code. The comments are updated to reflect this order.\n", + "* The test of the cost function now creates the logits without passing them through a sigmoid function (since the cost function will include the sigmoid in the built-in tensorflow function).\n", + "* Updated print statements and 'expected output that are used to check functions, for easier visual comparison.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1 - Exploring the Tensorflow Library\n", + "\n", + "To start, you will import the library:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "colab": {}, + "colab_type": "code", + "collapsed": true, + "id": "rhZ0RUw8T111" + }, + "outputs": [], + "source": [ + "import math\n", + "import numpy as np\n", + "import h5py\n", + "import matplotlib.pyplot as plt\n", + "import tensorflow as tf\n", + "from tensorflow.python.framework import ops\n", + "from tf_utils import load_dataset, random_mini_batches, convert_to_one_hot, predict\n", + "\n", + "%matplotlib inline\n", + "np.random.seed(1)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "A1vVKBCQT114" + }, + "source": [ + "Now that you have imported the library, we will walk you through its different applications. You will start with an example, where we compute for you the loss of one training example. \n", + "$$loss = \\mathcal{L}(\\hat{y}, y) = (\\hat y^{(i)} - y^{(i)})^2 \\tag{1}$$" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "JKAjoAbjT115" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "9\n" + ] + } + ], + "source": [ + "y_hat = tf.constant(36, name='y_hat') # Define y_hat constant. Set to 36.\n", + "y = tf.constant(39, name='y') # Define y. Set to 39\n", + "\n", + "loss = tf.Variable((y - y_hat)**2, name='loss') # Create a variable for the loss\n", + "\n", + "init = tf.global_variables_initializer() # When init is run later (session.run(init)),\n", + " # the loss variable will be initialized and ready to be computed\n", + "with tf.Session() as session: # Create a session and print the output\n", + " session.run(init) # Initializes the variables\n", + " print(session.run(loss)) # Prints the loss" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "iz5l0YacT117" + }, + "source": [ + "Writing and running programs in TensorFlow has the following steps:\n", + "\n", + "1. Create Tensors (variables) that are not yet executed/evaluated. \n", + "2. Write operations between those Tensors.\n", + "3. Initialize your Tensors. \n", + "4. Create a Session. \n", + "5. Run the Session. This will run the operations you'd written above. \n", + "\n", + "Therefore, when we created a variable for the loss, we simply defined the loss as a function of other quantities, but did not evaluate its value. To evaluate it, we had to run `init=tf.global_variables_initializer()`. That initialized the loss variable, and in the last line we were finally able to evaluate the value of `loss` and print its value.\n", + "\n", + "Now let us look at an easy example. Run the cell below:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "Ni74wj7IT117" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Tensor(\"Mul:0\", shape=(), dtype=int32)\n" + ] + } + ], + "source": [ + "a = tf.constant(2)\n", + "b = tf.constant(10)\n", + "c = tf.multiply(a,b)\n", + "print(c)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "dKAqwc2VT119" + }, + "source": [ + "As expected, you will not see 20! You got a tensor saying that the result is a tensor that does not have the shape attribute, and is of type \"int32\". All you did was put in the 'computation graph', but you have not run this computation yet. In order to actually multiply the two numbers, you will have to create a session and run it." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "txF_DuCkT11-", + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "20\n" + ] + } + ], + "source": [ + "sess = tf.Session()\n", + "print(sess.run(c))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "xADCVaq4T12A" + }, + "source": [ + "Great! To summarize, **remember to initialize your variables, create a session and run the operations inside the session**. \n", + "\n", + "Next, you'll also have to know about placeholders. A placeholder is an object whose value you can specify only later. \n", + "To specify values for a placeholder, you can pass in values by using a \"feed dictionary\" (`feed_dict` variable). Below, we created a placeholder for x. This allows us to pass in a number later when we run the session. " + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "Pn_-PPqvT12A" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "6\n" + ] + } + ], + "source": [ + "# Change the value of x in the feed_dict\n", + "\n", + "x = tf.placeholder(tf.int64, name = 'x')\n", + "print(sess.run(2 * x, feed_dict = {x: 3}))\n", + "sess.close()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "QrVJFYCpT12C" + }, + "source": [ + "When you first defined `x` you did not have to specify a value for it. A placeholder is simply a variable that you will assign data to only later, when running the session. We say that you **feed data** to these placeholders when running the session. \n", + "\n", + "Here's what's happening: When you specify the operations needed for a computation, you are telling TensorFlow how to construct a computation graph. The computation graph can have some placeholders whose values you will specify only later. Finally, when you run the session, you are telling TensorFlow to execute the computation graph." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "X15wlMDUT12D" + }, + "source": [ + "### 1.1 - Linear function\n", + "\n", + "Lets start this programming exercise by computing the following equation: $Y = WX + b$, where $W$ and $X$ are random matrices and b is a random vector. \n", + "\n", + "**Exercise**: Compute $WX + b$ where $W, X$, and $b$ are drawn from a random normal distribution. W is of shape (4, 3), X is (3,1) and b is (4,1). As an example, here is how you would define a constant X that has shape (3,1):\n", + "```python\n", + "X = tf.constant(np.random.randn(3,1), name = \"X\")\n", + "\n", + "```\n", + "You might find the following functions helpful: \n", + "- tf.matmul(..., ...) to do a matrix multiplication\n", + "- tf.add(..., ...) to do an addition\n", + "- np.random.randn(...) to initialize randomly\n" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "colab": {}, + "colab_type": "code", + "collapsed": true, + "id": "ww5sBoFbT12D" + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: linear_function\n", + "\n", + "def linear_function():\n", + " \"\"\"\n", + " Implements a linear function: \n", + " Initializes X to be a random tensor of shape (3,1)\n", + " Initializes W to be a random tensor of shape (4,3)\n", + " Initializes b to be a random tensor of shape (4,1)\n", + " Returns: \n", + " result -- runs the session for Y = WX + b \n", + " \"\"\"\n", + " \n", + " np.random.seed(1)\n", + " \n", + " \"\"\"\n", + " Note, to ensure that the \"random\" numbers generated match the expected results,\n", + " please create the variables in the order given in the starting code below.\n", + " (Do not re-arrange the order).\n", + " \"\"\"\n", + " ### START CODE HERE ### (4 lines of code)\n", + " X = tf.constant(np.random.randn(3,1), name = \"X\")\n", + " W = tf.constant(np.random.randn(4,3), name = \"W\")\n", + " b = tf.constant(np.random.randn(4,1), name = \"b\")\n", + " Y = tf.matmul(W,X) + b\n", + " ### END CODE HERE ### \n", + " \n", + " # Create the session using tf.Session() and run it with sess.run(...) on the variable you want to calculate\n", + " \n", + " ### START CODE HERE ###\n", + " sess = tf.Session()\n", + " result = sess.run(Y)\n", + " ### END CODE HERE ### \n", + " \n", + " # close the session \n", + " sess.close()\n", + "\n", + " return result" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "P3gOryVQT12G" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "result = \n", + "[[-2.15657382]\n", + " [ 2.95891446]\n", + " [-1.08926781]\n", + " [-0.84538042]]\n" + ] + } + ], + "source": [ + "print( \"result = \\n\" + str(linear_function()))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "R5netQ9IT12J" + }, + "source": [ + "*** Expected Output ***: \n", + "\n", + "```\n", + "result = \n", + "[[-2.15657382]\n", + " [ 2.95891446]\n", + " [-1.08926781]\n", + " [-0.84538042]]\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "DUBum-E4T12K" + }, + "source": [ + "### 1.2 - Computing the sigmoid \n", + "Great! You just implemented a linear function. Tensorflow offers a variety of commonly used neural network functions like `tf.sigmoid` and `tf.softmax`. For this exercise lets compute the sigmoid function of an input. \n", + "\n", + "You will do this exercise using a placeholder variable `x`. When running the session, you should use the feed dictionary to pass in the input `z`. In this exercise, you will have to (i) create a placeholder `x`, (ii) define the operations needed to compute the sigmoid using `tf.sigmoid`, and then (iii) run the session. \n", + "\n", + "** Exercise **: Implement the sigmoid function below. You should use the following: \n", + "\n", + "- `tf.placeholder(tf.float32, name = \"...\")`\n", + "- `tf.sigmoid(...)`\n", + "- `sess.run(..., feed_dict = {x: z})`\n", + "\n", + "\n", + "Note that there are two typical ways to create and use sessions in tensorflow: \n", + "\n", + "**Method 1:**\n", + "```python\n", + "sess = tf.Session()\n", + "# Run the variables initialization (if needed), run the operations\n", + "result = sess.run(..., feed_dict = {...})\n", + "sess.close() # Close the session\n", + "```\n", + "**Method 2:**\n", + "```python\n", + "with tf.Session() as sess: \n", + " # run the variables initialization (if needed), run the operations\n", + " result = sess.run(..., feed_dict = {...})\n", + " # This takes care of closing the session for you :)\n", + "```\n" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "colab": {}, + "colab_type": "code", + "collapsed": true, + "id": "APv9bW9rT12K" + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: sigmoid\n", + "\n", + "def sigmoid(z):\n", + " \"\"\"\n", + " Computes the sigmoid of z\n", + " \n", + " Arguments:\n", + " z -- input value, scalar or vector\n", + " \n", + " Returns: \n", + " results -- the sigmoid of z\n", + " \"\"\"\n", + " \n", + " ### START CODE HERE ### ( approx. 4 lines of code)\n", + " # Create a placeholder for x. Name it 'x'.\n", + " x = tf.placeholder(tf.float32, name='X')\n", + "\n", + " # compute sigmoid(x)\n", + " sigmoid = tf.sigmoid(x)\n", + "\n", + " # Create a session, and run it. Please use the method 2 explained above. \n", + " # You should use a feed_dict to pass z's value to x. \n", + " with tf.Session() as sess:\n", + " # Run session and call the output \"result\"\n", + " result = sess.run(sigmoid,feed_dict = {x:z})\n", + "\n", + " ### END CODE HERE ###\n", + " \n", + " return result" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "nLHdJxKVT12M" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "sigmoid(0) = 0.5\n", + "sigmoid(12) = 0.999994\n" + ] + } + ], + "source": [ + "print (\"sigmoid(0) = \" + str(sigmoid(0)))\n", + "print (\"sigmoid(12) = \" + str(sigmoid(12)))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "4cl8Wgg9T12O" + }, + "source": [ + "*** Expected Output ***: \n", + "\n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + "\n", + "\n", + " \n", + "\n", + "
\n", + "**sigmoid(0)**\n", + "\n", + "0.5\n", + "
\n", + "**sigmoid(12)**\n", + "\n", + "0.999994\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "v-okwynUT12O" + }, + "source": [ + "\n", + "**To summarize, you how know how to**:\n", + "1. Create placeholders\n", + "2. Specify the computation graph corresponding to operations you want to compute\n", + "3. Create the session\n", + "4. Run the session, using a feed dictionary if necessary to specify placeholder variables' values. " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "ytSt0fgTT12P" + }, + "source": [ + "### 1.3 - Computing the Cost\n", + "\n", + "You can also use a built-in function to compute the cost of your neural network. So instead of needing to write code to compute this as a function of $a^{[2](i)}$ and $y^{(i)}$ for i=1...m: \n", + "$$ J = - \\frac{1}{m} \\sum_{i = 1}^m \\large ( \\small y^{(i)} \\log a^{ [2] (i)} + (1-y^{(i)})\\log (1-a^{ [2] (i)} )\\large )\\small\\tag{2}$$\n", + "\n", + "you can do it in one line of code in tensorflow!\n", + "\n", + "**Exercise**: Implement the cross entropy loss. The function you will use is: \n", + "\n", + "\n", + "- `tf.nn.sigmoid_cross_entropy_with_logits(logits = ..., labels = ...)`\n", + "\n", + "Your code should input `z`, compute the sigmoid (to get `a`) and then compute the cross entropy cost $J$. All this can be done using one call to `tf.nn.sigmoid_cross_entropy_with_logits`, which computes\n", + "\n", + "$$- \\frac{1}{m} \\sum_{i = 1}^m \\large ( \\small y^{(i)} \\log \\sigma(z^{[2](i)}) + (1-y^{(i)})\\log (1-\\sigma(z^{[2](i)})\\large )\\small\\tag{2}$$\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "colab": {}, + "colab_type": "code", + "collapsed": true, + "id": "oIRdDYOLT12P" + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: cost\n", + "\n", + "def cost(logits, labels):\n", + " \"\"\"\n", + "    Computes the cost using the sigmoid cross entropy\n", + "    \n", + "    Arguments:\n", + "    logits -- vector containing z, output of the last linear unit (before the final sigmoid activation)\n", + "    labels -- vector of labels y (1 or 0) \n", + " \n", + " Note: What we've been calling \"z\" and \"y\" in this class are respectively called \"logits\" and \"labels\" \n", + " in the TensorFlow documentation. So logits will feed into z, and labels into y. \n", + "    \n", + "    Returns:\n", + "    cost -- runs the session of the cost (formula (2))\n", + " \"\"\"\n", + " \n", + " ### START CODE HERE ### \n", + " \n", + " # Create the placeholders for \"logits\" (z) and \"labels\" (y) (approx. 2 lines)\n", + " z = tf.placeholder(tf.float32, name = 'z')\n", + " y = tf.placeholder(tf.float32, name = 'y')\n", + " \n", + " # Use the loss function (approx. 1 line)\n", + " cost = tf.nn.sigmoid_cross_entropy_with_logits(logits = z, labels = y)\n", + " \n", + " # Create a session (approx. 1 line). See method 1 above.\n", + " sess = tf.Session()\n", + " \n", + " # Run the session (approx. 1 line).\n", + " cost = sess.run(cost, feed_dict={z:logits, y:labels})\n", + " \n", + " # Close the session (approx. 1 line). See method 1 above.\n", + " sess.close()\n", + " \n", + " ### END CODE HERE ###\n", + " \n", + " return cost" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "0nPB-lOYT12R" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "cost = [ 0.79813886 0.91301525 0.40318605 0.34115386]\n" + ] + } + ], + "source": [ + "logits = np.array([0.2,0.4,0.7,0.9])\n", + "\n", + "cost = cost(logits, np.array([0,0,1,1]))\n", + "print (\"cost = \" + str(cost))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "X8sMySzyT12T" + }, + "source": [ + "** Expected Output** : \n", + "\n", + "```\n", + "cost = [ 0.79813886 0.91301525 0.40318605 0.34115386]\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "_sK1Rqm6T12U" + }, + "source": [ + "### 1.4 - Using One Hot encodings\n", + "\n", + "Many times in deep learning you will have a y vector with numbers ranging from 0 to C-1, where C is the number of classes. If C is for example 4, then you might have the following y vector which you will need to convert as follows:\n", + "\n", + "\n", + "\n", + "\n", + "This is called a \"one hot\" encoding, because in the converted representation exactly one element of each column is \"hot\" (meaning set to 1). To do this conversion in numpy, you might have to write a few lines of code. In tensorflow, you can use one line of code: \n", + "\n", + "- tf.one_hot(labels, depth, axis) \n", + "\n", + "**Exercise:** Implement the function below to take one vector of labels and the total number of classes $C$, and return the one hot encoding. Use `tf.one_hot()` to do this. " + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "colab": {}, + "colab_type": "code", + "collapsed": true, + "id": "dlamXLu_T12U" + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: one_hot_matrix\n", + "\n", + "def one_hot_matrix(labels, C):\n", + " \"\"\"\n", + " Creates a matrix where the i-th row corresponds to the ith class number and the jth column\n", + " corresponds to the jth training example. So if example j had a label i. Then entry (i,j) \n", + " will be 1. \n", + " \n", + " Arguments:\n", + " labels -- vector containing the labels \n", + " C -- number of classes, the depth of the one hot dimension\n", + " \n", + " Returns: \n", + " one_hot -- one hot matrix\n", + " \"\"\"\n", + " \n", + " ### START CODE HERE ###\n", + " \n", + " # Create a tf.constant equal to C (depth), name it 'C'. (approx. 1 line)\n", + " C = tf.constant(C, name='C')\n", + " \n", + " # Use tf.one_hot, be careful with the axis (approx. 1 line)\n", + " one_hot_matrix = tf.one_hot(indices = labels,depth = C,axis = 0)\n", + " \n", + " # Create the session (approx. 1 line)\n", + " sess = tf.Session()\n", + " \n", + " # Run the session (approx. 1 line)\n", + " one_hot = sess.run(one_hot_matrix)\n", + " \n", + " # Close the session (approx. 1 line). See method 1 above.\n", + " sess.close()\n", + " \n", + " ### END CODE HERE ###\n", + " \n", + " return one_hot" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "8Bi0je2yT12W" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "one_hot = \n", + "[[ 0. 0. 0. 1. 0. 0.]\n", + " [ 1. 0. 0. 0. 0. 1.]\n", + " [ 0. 1. 0. 0. 1. 0.]\n", + " [ 0. 0. 1. 0. 0. 0.]]\n" + ] + } + ], + "source": [ + "labels = np.array([1,2,3,0,2,1])\n", + "one_hot = one_hot_matrix(labels, C = 4)\n", + "print (\"one_hot = \\n\" + str(one_hot))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "HlT0UczrT12Y" + }, + "source": [ + "**Expected Output**: \n", + "\n", + "```\n", + "one_hot = \n", + "[[ 0. 0. 0. 1. 0. 0.]\n", + " [ 1. 0. 0. 0. 0. 1.]\n", + " [ 0. 1. 0. 0. 1. 0.]\n", + " [ 0. 0. 1. 0. 0. 0.]]\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "qsu1xyqFT12Z" + }, + "source": [ + "### 1.5 - Initialize with zeros and ones\n", + "\n", + "Now you will learn how to initialize a vector of zeros and ones. The function you will be calling is `tf.ones()`. To initialize with zeros you could use tf.zeros() instead. These functions take in a shape and return an array of dimension shape full of zeros and ones respectively. \n", + "\n", + "**Exercise:** Implement the function below to take in a shape and to return an array (of the shape's dimension of ones). \n", + "\n", + " - tf.ones(shape)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "colab": {}, + "colab_type": "code", + "collapsed": true, + "id": "eOVWrcR2T12Z" + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: ones\n", + "\n", + "def ones(shape):\n", + " \"\"\"\n", + " Creates an array of ones of dimension shape\n", + " \n", + " Arguments:\n", + " shape -- shape of the array you want to create\n", + " \n", + " Returns: \n", + " ones -- array containing only ones\n", + " \"\"\"\n", + " \n", + " ### START CODE HERE ###\n", + " \n", + " # Create \"ones\" tensor using tf.ones(...). (approx. 1 line)\n", + " ones = tf.ones(shape, name='ones')\n", + " \n", + " # Create the session (approx. 1 line)\n", + " sess = tf.Session()\n", + " \n", + " # Run the session to compute 'ones' (approx. 1 line)\n", + " ones = sess.run(ones)\n", + " \n", + " # Close the session (approx. 1 line). See method 1 above.\n", + " sess.close()\n", + " \n", + " ### END CODE HERE ###\n", + " return ones" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "WwHEVDv6T12b" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ones = [ 1. 1. 1.]\n" + ] + } + ], + "source": [ + "print (\"ones = \" + str(ones([3])))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "hGgM2hSFT12g" + }, + "source": [ + "**Expected Output:**\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "
\n", + " **ones**\n", + " \n", + " [ 1. 1. 1.]\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "LW8S6sVzT12h" + }, + "source": [ + "# 2 - Building your first neural network in tensorflow\n", + "\n", + "In this part of the assignment you will build a neural network using tensorflow. Remember that there are two parts to implement a tensorflow model:\n", + "\n", + "- Create the computation graph\n", + "- Run the graph\n", + "\n", + "Let's delve into the problem you'd like to solve!\n", + "\n", + "### 2.0 - Problem statement: SIGNS Dataset\n", + "\n", + "One afternoon, with some friends we decided to teach our computers to decipher sign language. We spent a few hours taking pictures in front of a white wall and came up with the following dataset. It's now your job to build an algorithm that would facilitate communications from a speech-impaired person to someone who doesn't understand sign language.\n", + "\n", + "- **Training set**: 1080 pictures (64 by 64 pixels) of signs representing numbers from 0 to 5 (180 pictures per number).\n", + "- **Test set**: 120 pictures (64 by 64 pixels) of signs representing numbers from 0 to 5 (20 pictures per number).\n", + "\n", + "Note that this is a subset of the SIGNS dataset. The complete dataset contains many more signs.\n", + "\n", + "Here are examples for each number, and how an explanation of how we represent the labels. These are the original pictures, before we lowered the image resolutoion to 64 by 64 pixels.\n", + "
**Figure 1**: SIGNS dataset
\n", + "\n", + "\n", + "Run the following code to load the dataset." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "colab": {}, + "colab_type": "code", + "collapsed": true, + "id": "wCgjv84yT12i" + }, + "outputs": [], + "source": [ + "# Loading the dataset\n", + "X_train_orig, Y_train_orig, X_test_orig, Y_test_orig, classes = load_dataset()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "JYimgnMbT12k" + }, + "source": [ + "Change the index below and run the cell to visualize some examples in the dataset." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "wG0QwVtJT12k" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "y = 0\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Example of a picture\n", + "index = 20\n", + "plt.imshow(X_train_orig[index])\n", + "print (\"y = \" + str(np.squeeze(Y_train_orig[:, index])))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "2WP4-S2CT12m" + }, + "source": [ + "As usual you flatten the image dataset, then normalize it by dividing by 255. On top of that, you will convert each label to a one-hot vector as shown in Figure 1. Run the cell below to do so." + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "tn3gF5xLT12m" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "number of training examples = 1080\n", + "number of test examples = 120\n", + "X_train shape: (12288, 1080)\n", + "Y_train shape: (6, 1080)\n", + "X_test shape: (12288, 120)\n", + "Y_test shape: (6, 120)\n" + ] + } + ], + "source": [ + "# Flatten the training and test images\n", + "X_train_flatten = X_train_orig.reshape(X_train_orig.shape[0], -1).T\n", + "X_test_flatten = X_test_orig.reshape(X_test_orig.shape[0], -1).T\n", + "# Normalize image vectors\n", + "X_train = X_train_flatten/255.\n", + "X_test = X_test_flatten/255.\n", + "# Convert training and test labels to one hot matrices\n", + "Y_train = convert_to_one_hot(Y_train_orig, 6)\n", + "Y_test = convert_to_one_hot(Y_test_orig, 6)\n", + "\n", + "print (\"number of training examples = \" + str(X_train.shape[1]))\n", + "print (\"number of test examples = \" + str(X_test.shape[1]))\n", + "print (\"X_train shape: \" + str(X_train.shape))\n", + "print (\"Y_train shape: \" + str(Y_train.shape))\n", + "print (\"X_test shape: \" + str(X_test.shape))\n", + "print (\"Y_test shape: \" + str(Y_test.shape))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "iN_KPZ0FT12o" + }, + "source": [ + "**Note** that 12288 comes from $64 \\times 64 \\times 3$. Each image is square, 64 by 64 pixels, and 3 is for the RGB colors. Please make sure all these shapes make sense to you before continuing." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "_GQMSJTtT12p" + }, + "source": [ + "**Your goal** is to build an algorithm capable of recognizing a sign with high accuracy. To do so, you are going to build a tensorflow model that is almost the same as one you have previously built in numpy for cat recognition (but now using a softmax output). It is a great occasion to compare your numpy implementation to the tensorflow one. \n", + "\n", + "**The model** is *LINEAR -> RELU -> LINEAR -> RELU -> LINEAR -> SOFTMAX*. The SIGMOID output layer has been converted to a SOFTMAX. A SOFTMAX layer generalizes SIGMOID to when there are more than two classes. " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "JSNd_DRWT12p" + }, + "source": [ + "### 2.1 - Create placeholders\n", + "\n", + "Your first task is to create placeholders for `X` and `Y`. This will allow you to later pass your training data in when you run your session. \n", + "\n", + "**Exercise:** Implement the function below to create the placeholders in tensorflow." + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": { + "colab": {}, + "colab_type": "code", + "collapsed": true, + "id": "fcAcBRAAT12q" + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: create_placeholders\n", + "\n", + "def create_placeholders(n_x, n_y):\n", + " \"\"\"\n", + " Creates the placeholders for the tensorflow session.\n", + " \n", + " Arguments:\n", + " n_x -- scalar, size of an image vector (num_px * num_px = 64 * 64 * 3 = 12288)\n", + " n_y -- scalar, number of classes (from 0 to 5, so -> 6)\n", + " \n", + " Returns:\n", + " X -- placeholder for the data input, of shape [n_x, None] and dtype \"tf.float32\"\n", + " Y -- placeholder for the input labels, of shape [n_y, None] and dtype \"tf.float32\"\n", + " \n", + " Tips:\n", + " - You will use None because it let's us be flexible on the number of examples you will for the placeholders.\n", + " In fact, the number of examples during test/train is different.\n", + " \"\"\"\n", + "\n", + " ### START CODE HERE ### (approx. 2 lines)\n", + " X = tf.placeholder(shape=(n_x,None), dtype=tf.float32, name='Placeholder_1')\n", + " Y = tf.placeholder(shape=(n_y,None), dtype=tf.float32, name='Placeholder_2')\n", + " ### END CODE HERE ###\n", + " \n", + " return X, Y" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "Ve9WOa1LT12r" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "X = Tensor(\"Placeholder_1_1:0\", shape=(12288, ?), dtype=float32)\n", + "Y = Tensor(\"Placeholder_2_1:0\", shape=(6, ?), dtype=float32)\n" + ] + } + ], + "source": [ + "X, Y = create_placeholders(12288, 6)\n", + "print (\"X = \" + str(X))\n", + "print (\"Y = \" + str(Y))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "-G_UV4xpT12t" + }, + "source": [ + "**Expected Output**: \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "
\n", + " **X**\n", + " \n", + " Tensor(\"Placeholder_1:0\", shape=(12288, ?), dtype=float32) (not necessarily Placeholder_1)\n", + "
\n", + " **Y**\n", + " \n", + " Tensor(\"Placeholder_2:0\", shape=(6, ?), dtype=float32) (not necessarily Placeholder_2)\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "eyYz9y1XT12u" + }, + "source": [ + "### 2.2 - Initializing the parameters\n", + "\n", + "Your second task is to initialize the parameters in tensorflow.\n", + "\n", + "**Exercise:** Implement the function below to initialize the parameters in tensorflow. You are going use Xavier Initialization for weights and Zero Initialization for biases. The shapes are given below. As an example, to help you, for W1 and b1 you could use: \n", + "\n", + "```python\n", + "W1 = tf.get_variable(\"W1\", [25,12288], initializer = tf.contrib.layers.xavier_initializer(seed = 1))\n", + "b1 = tf.get_variable(\"b1\", [25,1], initializer = tf.zeros_initializer())\n", + "```\n", + "Please use `seed = 1` to make sure your results match ours." + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": { + "colab": {}, + "colab_type": "code", + "collapsed": true, + "id": "gPi-SeuWT12u" + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: initialize_parameters\n", + "\n", + "def initialize_parameters():\n", + " \"\"\"\n", + " Initializes parameters to build a neural network with tensorflow. The shapes are:\n", + " W1 : [25, 12288]\n", + " b1 : [25, 1]\n", + " W2 : [12, 25]\n", + " b2 : [12, 1]\n", + " W3 : [6, 12]\n", + " b3 : [6, 1]\n", + " \n", + " Returns:\n", + " parameters -- a dictionary of tensors containing W1, b1, W2, b2, W3, b3\n", + " \"\"\"\n", + " \n", + " tf.set_random_seed(1) # so that your \"random\" numbers match ours\n", + " \n", + " ### START CODE HERE ### (approx. 6 lines of code)\n", + " W1 = tf.get_variable('W1', [25,12288], initializer = tf.contrib.layers.xavier_initializer(seed = 1))\n", + " b1 = tf.get_variable('b1', [25,1], initializer = tf.zeros_initializer())\n", + " W2 = tf.get_variable('W2', [12, 25], initializer = tf.contrib.layers.xavier_initializer(seed = 1))\n", + " b2 = tf.get_variable('b2', [12, 1], initializer = tf.zeros_initializer())\n", + " W3 = tf.get_variable('W3', [6, 12], initializer = tf.contrib.layers.xavier_initializer(seed = 1))\n", + " b3 = tf.get_variable('b3', [6, 1], initializer = tf.zeros_initializer())\n", + " ### END CODE HERE ###\n", + "\n", + " parameters = {\"W1\": W1,\n", + " \"b1\": b1,\n", + " \"W2\": W2,\n", + " \"b2\": b2,\n", + " \"W3\": W3,\n", + " \"b3\": b3}\n", + " \n", + " return parameters" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "CcuKNYinT12x" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "W1 = \n", + "b1 = \n", + "W2 = \n", + "b2 = \n" + ] + } + ], + "source": [ + "tf.reset_default_graph()\n", + "with tf.Session() as sess:\n", + " parameters = initialize_parameters()\n", + " print(\"W1 = \" + str(parameters[\"W1\"]))\n", + " print(\"b1 = \" + str(parameters[\"b1\"]))\n", + " print(\"W2 = \" + str(parameters[\"W2\"]))\n", + " print(\"b2 = \" + str(parameters[\"b2\"]))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "kzAVM5y8T12z" + }, + "source": [ + "**Expected Output**: \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "
\n", + " **W1**\n", + " \n", + " < tf.Variable 'W1:0' shape=(25, 12288) dtype=float32_ref >\n", + "
\n", + " **b1**\n", + " \n", + " < tf.Variable 'b1:0' shape=(25, 1) dtype=float32_ref >\n", + "
\n", + " **W2**\n", + " \n", + " < tf.Variable 'W2:0' shape=(12, 25) dtype=float32_ref >\n", + "
\n", + " **b2**\n", + " \n", + " < tf.Variable 'b2:0' shape=(12, 1) dtype=float32_ref >\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "IR5UvbGxT12z" + }, + "source": [ + "As expected, the parameters haven't been evaluated yet." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "cnuAGFn2T120" + }, + "source": [ + "### 2.3 - Forward propagation in tensorflow \n", + "\n", + "You will now implement the forward propagation module in tensorflow. The function will take in a dictionary of parameters and it will complete the forward pass. The functions you will be using are: \n", + "\n", + "- `tf.add(...,...)` to do an addition\n", + "- `tf.matmul(...,...)` to do a matrix multiplication\n", + "- `tf.nn.relu(...)` to apply the ReLU activation\n", + "\n", + "**Question:** Implement the forward pass of the neural network. We commented for you the numpy equivalents so that you can compare the tensorflow implementation to numpy. It is important to note that the forward propagation stops at `z3`. The reason is that in tensorflow the last linear layer output is given as input to the function computing the loss. Therefore, you don't need `a3`!\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": { + "colab": {}, + "colab_type": "code", + "collapsed": true, + "id": "nC7CYNk0T120" + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: forward_propagation\n", + "\n", + "def forward_propagation(X, parameters):\n", + " \"\"\"\n", + " Implements the forward propagation for the model: LINEAR -> RELU -> LINEAR -> RELU -> LINEAR -> SOFTMAX\n", + " \n", + " Arguments:\n", + " X -- input dataset placeholder, of shape (input size, number of examples)\n", + " parameters -- python dictionary containing your parameters \"W1\", \"b1\", \"W2\", \"b2\", \"W3\", \"b3\"\n", + " the shapes are given in initialize_parameters\n", + "\n", + " Returns:\n", + " Z3 -- the output of the last LINEAR unit\n", + " \"\"\"\n", + " \n", + " # Retrieve the parameters from the dictionary \"parameters\" \n", + " W1 = parameters['W1']\n", + " b1 = parameters['b1']\n", + " W2 = parameters['W2']\n", + " b2 = parameters['b2']\n", + " W3 = parameters['W3']\n", + " b3 = parameters['b3']\n", + " \n", + " ### START CODE HERE ### (approx. 5 lines) # Numpy Equivalents:\n", + " Z1 = tf.matmul(W1,X) + b1 # Z1 = np.dot(W1, X) + b1\n", + " A1 = tf.nn.relu(Z1) # A1 = relu(Z1)\n", + " Z2 = tf.matmul(W2,A1) + b2 # Z2 = np.dot(W2, A1) + b2\n", + " A2 = tf.nn.relu(Z2) # A2 = relu(Z2)\n", + " Z3 = tf.matmul(W3,A2) + b3 # Z3 = np.dot(W3, A2) + b3\n", + " ### END CODE HERE ###\n", + " \n", + " return Z3" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "hioQQqyxT122", + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Z3 = Tensor(\"add_2:0\", shape=(6, ?), dtype=float32)\n" + ] + } + ], + "source": [ + "tf.reset_default_graph()\n", + "\n", + "with tf.Session() as sess:\n", + " X, Y = create_placeholders(12288, 6)\n", + " parameters = initialize_parameters()\n", + " Z3 = forward_propagation(X, parameters)\n", + " print(\"Z3 = \" + str(Z3))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "PRrS7RzpT124" + }, + "source": [ + "**Expected Output**: \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "
\n", + " **Z3**\n", + " \n", + " Tensor(\"Add_2:0\", shape=(6, ?), dtype=float32)\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "FDjgAHp6T125" + }, + "source": [ + "You may have noticed that the forward propagation doesn't output any cache. You will understand why below, when we get to brackpropagation." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "RXqHnAEnT125" + }, + "source": [ + "### 2.4 Compute cost\n", + "\n", + "As seen before, it is very easy to compute the cost using:\n", + "```python\n", + "tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits = ..., labels = ...))\n", + "```\n", + "**Question**: Implement the cost function below. \n", + "- It is important to know that the \"`logits`\" and \"`labels`\" inputs of `tf.nn.softmax_cross_entropy_with_logits` are expected to be of shape (number of examples, num_classes). We have thus transposed Z3 and Y for you.\n", + "- Besides, `tf.reduce_mean` basically does the summation over the examples." + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": { + "colab": {}, + "colab_type": "code", + "collapsed": true, + "id": "1_bzQXSJT125" + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: compute_cost \n", + "\n", + "def compute_cost(Z3, Y):\n", + " \"\"\"\n", + " Computes the cost\n", + " \n", + " Arguments:\n", + " Z3 -- output of forward propagation (output of the last LINEAR unit), of shape (6, number of examples)\n", + " Y -- \"true\" labels vector placeholder, same shape as Z3\n", + " \n", + " Returns:\n", + " cost - Tensor of the cost function\n", + " \"\"\"\n", + " \n", + " # to fit the tensorflow requirement for tf.nn.softmax_cross_entropy_with_logits(...,...)\n", + " logits = tf.transpose(Z3)\n", + " labels = tf.transpose(Y)\n", + " \n", + " ### START CODE HERE ### (1 line of code)\n", + " cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits = logits, labels = labels))\n", + " ### END CODE HERE ###\n", + " \n", + " return cost" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "4HahBCJVT127" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "cost = Tensor(\"Mean:0\", shape=(), dtype=float32)\n" + ] + } + ], + "source": [ + "tf.reset_default_graph()\n", + "\n", + "with tf.Session() as sess:\n", + " X, Y = create_placeholders(12288, 6)\n", + " parameters = initialize_parameters()\n", + " Z3 = forward_propagation(X, parameters)\n", + " cost = compute_cost(Z3, Y)\n", + " print(\"cost = \" + str(cost))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "GT7MzPxET12-" + }, + "source": [ + "**Expected Output**: \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "
\n", + " **cost**\n", + " \n", + " Tensor(\"Mean:0\", shape=(), dtype=float32)\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "9O9sNnHQT12-" + }, + "source": [ + "### 2.5 - Backward propagation & parameter updates\n", + "\n", + "This is where you become grateful to programming frameworks. All the backpropagation and the parameters update is taken care of in 1 line of code. It is very easy to incorporate this line in the model.\n", + "\n", + "After you compute the cost function. You will create an \"`optimizer`\" object. You have to call this object along with the cost when running the tf.session. When called, it will perform an optimization on the given cost with the chosen method and learning rate.\n", + "\n", + "For instance, for gradient descent the optimizer would be:\n", + "```python\n", + "optimizer = tf.train.GradientDescentOptimizer(learning_rate = learning_rate).minimize(cost)\n", + "```\n", + "\n", + "To make the optimization you would do:\n", + "```python\n", + "_ , c = sess.run([optimizer, cost], feed_dict={X: minibatch_X, Y: minibatch_Y})\n", + "```\n", + "\n", + "This computes the backpropagation by passing through the tensorflow graph in the reverse order. From cost to inputs.\n", + "\n", + "**Note** When coding, we often use `_` as a \"throwaway\" variable to store values that we won't need to use later. Here, `_` takes on the evaluated value of `optimizer`, which we don't need (and `c` takes the value of the `cost` variable). " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "SKxhuoN2T12_" + }, + "source": [ + "### 2.6 - Building the model\n", + "\n", + "Now, you will bring it all together! \n", + "\n", + "**Exercise:** Implement the model. You will be calling the functions you had previously implemented." + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": { + "colab": {}, + "colab_type": "code", + "collapsed": true, + "id": "siFLpYfkT12_" + }, + "outputs": [], + "source": [ + "def model(X_train, Y_train, X_test, Y_test, learning_rate = 0.0001,\n", + " num_epochs = 1500, minibatch_size = 32, print_cost = True):\n", + " \"\"\"\n", + " Implements a three-layer tensorflow neural network: LINEAR->RELU->LINEAR->RELU->LINEAR->SOFTMAX.\n", + " \n", + " Arguments:\n", + " X_train -- training set, of shape (input size = 12288, number of training examples = 1080)\n", + " Y_train -- test set, of shape (output size = 6, number of training examples = 1080)\n", + " X_test -- training set, of shape (input size = 12288, number of training examples = 120)\n", + " Y_test -- test set, of shape (output size = 6, number of test examples = 120)\n", + " learning_rate -- learning rate of the optimization\n", + " num_epochs -- number of epochs of the optimization loop\n", + " minibatch_size -- size of a minibatch\n", + " print_cost -- True to print the cost every 100 epochs\n", + " \n", + " Returns:\n", + " parameters -- parameters learnt by the model. They can then be used to predict.\n", + " \"\"\"\n", + " \n", + " ops.reset_default_graph() # to be able to rerun the model without overwriting tf variables\n", + " tf.set_random_seed(1) # to keep consistent results\n", + " seed = 3 # to keep consistent results\n", + " (n_x, m) = X_train.shape # (n_x: input size, m : number of examples in the train set)\n", + " n_y = Y_train.shape[0] # n_y : output size\n", + " costs = [] # To keep track of the cost\n", + " \n", + " # Create Placeholders of shape (n_x, n_y)\n", + " ### START CODE HERE ### (1 line)\n", + " X, Y = create_placeholders(n_x, n_y)\n", + " ### END CODE HERE ###\n", + "\n", + " # Initialize parameters\n", + " ### START CODE HERE ### (1 line)\n", + " parameters = initialize_parameters()\n", + " ### END CODE HERE ###\n", + " \n", + " # Forward propagation: Build the forward propagation in the tensorflow graph\n", + " ### START CODE HERE ### (1 line)\n", + " Z3 = forward_propagation(X, parameters)\n", + " ### END CODE HERE ###\n", + " \n", + " # Cost function: Add cost function to tensorflow graph\n", + " ### START CODE HERE ### (1 line)\n", + " cost = compute_cost(Z3, Y)\n", + " ### END CODE HERE ###\n", + " \n", + " # Backpropagation: Define the tensorflow optimizer. Use an AdamOptimizer.\n", + " ### START CODE HERE ### (1 line)\n", + " optimizer = tf.train.AdamOptimizer(learning_rate = learning_rate).minimize(cost)\n", + " ### END CODE HERE ###\n", + " \n", + " # Initialize all the variables\n", + " init = tf.global_variables_initializer()\n", + "\n", + " # Start the session to compute the tensorflow graph\n", + " with tf.Session() as sess:\n", + " \n", + " # Run the initialization\n", + " sess.run(init)\n", + " \n", + " # Do the training loop\n", + " for epoch in range(num_epochs):\n", + "\n", + " epoch_cost = 0. # Defines a cost related to an epoch\n", + " num_minibatches = int(m / minibatch_size) # number of minibatches of size minibatch_size in the train set\n", + " seed = seed + 1\n", + " minibatches = random_mini_batches(X_train, Y_train, minibatch_size, seed)\n", + "\n", + " for minibatch in minibatches:\n", + "\n", + " # Select a minibatch\n", + " (minibatch_X, minibatch_Y) = minibatch\n", + " \n", + " # IMPORTANT: The line that runs the graph on a minibatch.\n", + " # Run the session to execute the \"optimizer\" and the \"cost\", the feedict should contain a minibatch for (X,Y).\n", + " ### START CODE HERE ### (1 line)\n", + " _ , minibatch_cost = sess.run([optimizer, cost], feed_dict={X: minibatch_X, Y: minibatch_Y})\n", + " ### END CODE HERE ###\n", + " \n", + " epoch_cost += minibatch_cost / num_minibatches\n", + "\n", + " # Print the cost every epoch\n", + " if print_cost == True and epoch % 100 == 0:\n", + " print (\"Cost after epoch %i: %f\" % (epoch, epoch_cost))\n", + " if print_cost == True and epoch % 5 == 0:\n", + " costs.append(epoch_cost)\n", + " \n", + " # plot the cost\n", + " plt.plot(np.squeeze(costs))\n", + " plt.ylabel('cost')\n", + " plt.xlabel('iterations (per fives)')\n", + " plt.title(\"Learning rate =\" + str(learning_rate))\n", + " plt.show()\n", + "\n", + " # lets save the parameters in a variable\n", + " parameters = sess.run(parameters)\n", + " print (\"Parameters have been trained!\")\n", + "\n", + " # Calculate the correct predictions\n", + " correct_prediction = tf.equal(tf.argmax(Z3), tf.argmax(Y))\n", + "\n", + " # Calculate accuracy on the test set\n", + " accuracy = tf.reduce_mean(tf.cast(correct_prediction, \"float\"))\n", + "\n", + " print (\"Train Accuracy:\", accuracy.eval({X: X_train, Y: Y_train}))\n", + " print (\"Test Accuracy:\", accuracy.eval({X: X_test, Y: Y_test}))\n", + " \n", + " return parameters" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "sQ1doxmHT13B" + }, + "source": [ + "Run the following cell to train your model! On our machine it takes about 5 minutes. Your \"Cost after epoch 100\" should be 1.016458. If it's not, don't waste time; interrupt the training by clicking on the square (⬛) in the upper bar of the notebook, and try to correct your code. If it is the correct cost, take a break and come back in 5 minutes!" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "AISfljZVT13B", + "scrolled": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Cost after epoch 0: 1.855702\n", + "Cost after epoch 100: 1.016458\n", + "Cost after epoch 200: 0.733102\n", + "Cost after epoch 300: 0.572940\n", + "Cost after epoch 400: 0.468774\n", + "Cost after epoch 500: 0.381021\n", + "Cost after epoch 600: 0.313822\n", + "Cost after epoch 700: 0.254158\n", + "Cost after epoch 800: 0.203829\n", + "Cost after epoch 900: 0.166421\n", + "Cost after epoch 1000: 0.141486\n", + "Cost after epoch 1100: 0.107580\n", + "Cost after epoch 1200: 0.086270\n", + "Cost after epoch 1300: 0.059371\n", + "Cost after epoch 1400: 0.052228\n" + ] + }, + { + "data": { + "image/png": "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\nT/b2oUAAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Parameters have been trained!\n", + "Train Accuracy: 0.999074\n", + "Test Accuracy: 0.716667\n" + ] + } + ], + "source": [ + "parameters = model(X_train, Y_train, X_test, Y_test)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "ogOoTX2CT13E" + }, + "source": [ + "**Expected Output**:\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "
\n", + " **Train Accuracy**\n", + " \n", + " 0.999074\n", + "
\n", + " **Test Accuracy**\n", + " \n", + " 0.716667\n", + "
\n", + "\n", + "Amazing, your algorithm can recognize a sign representing a figure between 0 and 5 with 71.7% accuracy.\n", + "\n", + "**Insights**:\n", + "- Your model seems big enough to fit the training set well. However, given the difference between train and test accuracy, you could try to add L2 or dropout regularization to reduce overfitting. \n", + "- Think about the session as a block of code to train the model. Each time you run the session on a minibatch, it trains the parameters. In total you have run the session a large number of times (1500 epochs) until you obtained well trained parameters." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "cka8pF8BT13E" + }, + "source": [ + "### 2.7 - Test with your own image (optional / ungraded exercise)\n", + "\n", + "Congratulations on finishing this assignment. You can now take a picture of your hand and see the output of your model. To do that:\n", + " 1. Click on \"File\" in the upper bar of this notebook, then click \"Open\" to go on your Coursera Hub.\n", + " 2. Add your image to this Jupyter Notebook's directory, in the \"images\" folder\n", + " 3. Write your image's name in the following code\n", + " 4. Run the code and check if the algorithm is right!" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "EJ8Aft1CT13F", + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Your algorithm predicts: y = 3\n" + ] + }, + { + "data": { + "image/png": "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\nNwAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import scipy\n", + "from PIL import Image\n", + "from scipy import ndimage\n", + "\n", + "## START CODE HERE ## (PUT YOUR IMAGE NAME) \n", + "my_image = \"thumbs_up.jpg\"\n", + "## END CODE HERE ##\n", + "\n", + "# We preprocess your image to fit your algorithm.\n", + "fname = \"images/\" + my_image\n", + "image = np.array(ndimage.imread(fname, flatten=False))\n", + "image = image/255.\n", + "my_image = scipy.misc.imresize(image, size=(64,64)).reshape((1, 64*64*3)).T\n", + "my_image_prediction = predict(my_image, parameters)\n", + "\n", + "plt.imshow(image)\n", + "print(\"Your algorithm predicts: y = \" + str(np.squeeze(my_image_prediction)))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "6Q5jJuAqT13G" + }, + "source": [ + "You indeed deserved a \"thumbs-up\" although as you can see the algorithm seems to classify it incorrectly. The reason is that the training set doesn't contain any \"thumbs-up\", so the model doesn't know how to deal with it! We call that a \"mismatched data distribution\" and it is one of the various of the next course on \"Structuring Machine Learning Projects\"." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "DMY1FYvOT13H" + }, + "source": [ + "\n", + "**What you should remember**:\n", + "- Tensorflow is a programming framework used in deep learning\n", + "- The two main object classes in tensorflow are Tensors and Operators. \n", + "- When you code in tensorflow you have to take the following steps:\n", + " - Create a graph containing Tensors (Variables, Placeholders ...) and Operations (tf.matmul, tf.add, ...)\n", + " - Create a session\n", + " - Initialize the session\n", + " - Run the session to execute the graph\n", + "- You can execute the graph multiple times as you've seen in model()\n", + "- The backpropagation and optimization is automatically done when running the session on the \"optimizer\" object." + ] + } + ], + "metadata": { + "coursera": { + "course_slug": "deep-neural-network", + "graded_item_id": "BFd89", + "launcher_item_id": "AH2rK" + }, + "kernelspec": { + "display_name": "Python 3", + "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.6.0" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Course4/Week1/Convolution_model_Application_v1a.ipynb b/Course4/Week1/Convolution_model_Application_v1a.ipynb new file mode 100644 index 0000000..dba8057 --- /dev/null +++ b/Course4/Week1/Convolution_model_Application_v1a.ipynb @@ -0,0 +1,963 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Convolutional Neural Networks: Application\n", + "\n", + "Welcome to Course 4's second assignment! In this notebook, you will:\n", + "\n", + "- Implement helper functions that you will use when implementing a TensorFlow model\n", + "- Implement a fully functioning ConvNet using TensorFlow \n", + "\n", + "**After this assignment you will be able to:**\n", + "\n", + "- Build and train a ConvNet in TensorFlow for a classification problem \n", + "\n", + "We assume here that you are already familiar with TensorFlow. If you are not, please refer the *TensorFlow Tutorial* of the third week of Course 2 (\"*Improving deep neural networks*\")." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Updates to Assignment \n", + "\n", + "#### If you were working on a previous version\n", + "* The current notebook filename is version \"1a\". \n", + "* You can find your work in the file directory as version \"1\".\n", + "* To view the file directory, go to the menu \"File->Open\", and this will open a new tab that shows the file directory.\n", + "\n", + "#### List of Updates\n", + "* `initialize_parameters`: added details about tf.get_variable, `eval`. Clarified test case.\n", + "* Added explanations for the kernel (filter) stride values, max pooling, and flatten functions.\n", + "* Added details about softmax cross entropy with logits.\n", + "* Added instructions for creating the Adam Optimizer.\n", + "* Added explanation of how to evaluate tensors (optimizer and cost).\n", + "* `forward_propagation`: clarified instructions, use \"F\" to store \"flatten\" layer.\n", + "* Updated print statements and 'expected output' for easier visual comparisons.\n", + "* Many thanks to Kevin P. Brown (mentor for the deep learning specialization) for his suggestions on the assignments in this course!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1.0 - TensorFlow model\n", + "\n", + "In the previous assignment, you built helper functions using numpy to understand the mechanics behind convolutional neural networks. Most practical applications of deep learning today are built using programming frameworks, which have many built-in functions you can simply call. \n", + "\n", + "As usual, we will start by loading in the packages. " + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import math\n", + "import numpy as np\n", + "import h5py\n", + "import matplotlib.pyplot as plt\n", + "import scipy\n", + "from PIL import Image\n", + "from scipy import ndimage\n", + "import tensorflow as tf\n", + "from tensorflow.python.framework import ops\n", + "from cnn_utils import *\n", + "\n", + "%matplotlib inline\n", + "np.random.seed(1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Run the next cell to load the \"SIGNS\" dataset you are going to use." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Loading the data (signs)\n", + "X_train_orig, Y_train_orig, X_test_orig, Y_test_orig, classes = load_dataset()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As a reminder, the SIGNS dataset is a collection of 6 signs representing numbers from 0 to 5.\n", + "\n", + "\n", + "\n", + "The next cell will show you an example of a labelled image in the dataset. Feel free to change the value of `index` below and re-run to see different examples. " + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "y = 2\n" + ] + }, + { + "data": { + "image/png": "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\nyuoTDQAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Example of a picture\n", + "index = 6\n", + "plt.imshow(X_train_orig[index])\n", + "print (\"y = \" + str(np.squeeze(Y_train_orig[:, index])))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In Course 2, you had built a fully-connected network for this dataset. But since this is an image dataset, it is more natural to apply a ConvNet to it.\n", + "\n", + "To get started, let's examine the shapes of your data. " + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "number of training examples = 1080\n", + "number of test examples = 120\n", + "X_train shape: (1080, 64, 64, 3)\n", + "Y_train shape: (1080, 6)\n", + "X_test shape: (120, 64, 64, 3)\n", + "Y_test shape: (120, 6)\n" + ] + } + ], + "source": [ + "X_train = X_train_orig/255.\n", + "X_test = X_test_orig/255.\n", + "Y_train = convert_to_one_hot(Y_train_orig, 6).T\n", + "Y_test = convert_to_one_hot(Y_test_orig, 6).T\n", + "print (\"number of training examples = \" + str(X_train.shape[0]))\n", + "print (\"number of test examples = \" + str(X_test.shape[0]))\n", + "print (\"X_train shape: \" + str(X_train.shape))\n", + "print (\"Y_train shape: \" + str(Y_train.shape))\n", + "print (\"X_test shape: \" + str(X_test.shape))\n", + "print (\"Y_test shape: \" + str(Y_test.shape))\n", + "conv_layers = {}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1.1 - Create placeholders\n", + "\n", + "TensorFlow requires that you create placeholders for the input data that will be fed into the model when running the session.\n", + "\n", + "**Exercise**: Implement the function below to create placeholders for the input image X and the output Y. You should not define the number of training examples for the moment. To do so, you could use \"None\" as the batch size, it will give you the flexibility to choose it later. Hence X should be of dimension **[None, n_H0, n_W0, n_C0]** and Y should be of dimension **[None, n_y]**. [Hint: search for the tf.placeholder documentation\"](https://www.tensorflow.org/api_docs/python/tf/placeholder)." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: create_placeholders\n", + "\n", + "def create_placeholders(n_H0, n_W0, n_C0, n_y):\n", + " \"\"\"\n", + " Creates the placeholders for the tensorflow session.\n", + " \n", + " Arguments:\n", + " n_H0 -- scalar, height of an input image\n", + " n_W0 -- scalar, width of an input image\n", + " n_C0 -- scalar, number of channels of the input\n", + " n_y -- scalar, number of classes\n", + " \n", + " Returns:\n", + " X -- placeholder for the data input, of shape [None, n_H0, n_W0, n_C0] and dtype \"float\"\n", + " Y -- placeholder for the input labels, of shape [None, n_y] and dtype \"float\"\n", + " \"\"\"\n", + "\n", + " ### START CODE HERE ### (≈2 lines)\n", + " X = tf.placeholder(\"float\", [None, n_H0, n_W0, n_C0])\n", + " Y = tf.placeholder(\"float\", [None, n_y])\n", + " ### END CODE HERE ###\n", + " \n", + " return X, Y" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "X = Tensor(\"Placeholder:0\", shape=(?, 64, 64, 3), dtype=float32)\n", + "Y = Tensor(\"Placeholder_1:0\", shape=(?, 6), dtype=float32)\n" + ] + } + ], + "source": [ + "X, Y = create_placeholders(64, 64, 3, 6)\n", + "print (\"X = \" + str(X))\n", + "print (\"Y = \" + str(Y))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Expected Output**\n", + "\n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
\n", + " X = Tensor(\"Placeholder:0\", shape=(?, 64, 64, 3), dtype=float32)\n", + "\n", + "
\n", + " Y = Tensor(\"Placeholder_1:0\", shape=(?, 6), dtype=float32)\n", + "\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1.2 - Initialize parameters\n", + "\n", + "You will initialize weights/filters $W1$ and $W2$ using `tf.contrib.layers.xavier_initializer(seed = 0)`. You don't need to worry about bias variables as you will soon see that TensorFlow functions take care of the bias. Note also that you will only initialize the weights/filters for the conv2d functions. TensorFlow initializes the layers for the fully connected part automatically. We will talk more about that later in this assignment.\n", + "\n", + "**Exercise:** Implement initialize_parameters(). The dimensions for each group of filters are provided below. Reminder - to initialize a parameter $W$ of shape [1,2,3,4] in Tensorflow, use:\n", + "```python\n", + "W = tf.get_variable(\"W\", [1,2,3,4], initializer = ...)\n", + "```\n", + "#### tf.get_variable()\n", + "[Search for the tf.get_variable documentation](https://www.tensorflow.org/api_docs/python/tf/get_variable). Notice that the documentation says:\n", + "```\n", + "Gets an existing variable with these parameters or create a new one.\n", + "```\n", + "So we can use this function to create a tensorflow variable with the specified name, but if the variables already exist, it will get the existing variable with that same name.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: initialize_parameters\n", + "\n", + "def initialize_parameters():\n", + " \"\"\"\n", + " Initializes weight parameters to build a neural network with tensorflow. The shapes are:\n", + " W1 : [4, 4, 3, 8]\n", + " W2 : [2, 2, 8, 16]\n", + " Note that we will hard code the shape values in the function to make the grading simpler.\n", + " Normally, functions should take values as inputs rather than hard coding.\n", + " Returns:\n", + " parameters -- a dictionary of tensors containing W1, W2\n", + " \"\"\"\n", + " \n", + " tf.set_random_seed(1) # so that your \"random\" numbers match ours\n", + " \n", + " ### START CODE HERE ### (approx. 2 lines of code)\n", + " W1 = tf.get_variable(\"W1\", [4, 4, 3, 8], initializer = tf.contrib.layers.xavier_initializer(seed = 0))\n", + " W2 = tf.get_variable(\"W2\", [2, 2, 8, 16], initializer = tf.contrib.layers.xavier_initializer(seed = 0))\n", + " ### END CODE HERE ###\n", + "\n", + " parameters = {\"W1\": W1,\n", + " \"W2\": W2}\n", + " \n", + " return parameters" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "W1[1,1,1] = \n", + "[ 0.00131723 0.14176141 -0.04434952 0.09197326 0.14984085 -0.03514394\n", + " -0.06847463 0.05245192]\n", + "W1.shape: (4, 4, 3, 8)\n", + "\n", + "\n", + "W2[1,1,1] = \n", + "[-0.08566415 0.17750949 0.11974221 0.16773748 -0.0830943 -0.08058\n", + " -0.00577033 -0.14643836 0.24162132 -0.05857408 -0.19055021 0.1345228\n", + " -0.22779644 -0.1601823 -0.16117483 -0.10286498]\n", + "W2.shape: (2, 2, 8, 16)\n" + ] + } + ], + "source": [ + "tf.reset_default_graph()\n", + "with tf.Session() as sess_test:\n", + " parameters = initialize_parameters()\n", + " init = tf.global_variables_initializer()\n", + " sess_test.run(init)\n", + " print(\"W1[1,1,1] = \\n\" + str(parameters[\"W1\"].eval()[1,1,1]))\n", + " print(\"W1.shape: \" + str(parameters[\"W1\"].shape))\n", + " print(\"\\n\")\n", + " print(\"W2[1,1,1] = \\n\" + str(parameters[\"W2\"].eval()[1,1,1]))\n", + " print(\"W2.shape: \" + str(parameters[\"W2\"].shape))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "** Expected Output:**\n", + "\n", + "```\n", + "W1[1,1,1] = \n", + "[ 0.00131723 0.14176141 -0.04434952 0.09197326 0.14984085 -0.03514394\n", + " -0.06847463 0.05245192]\n", + "W1.shape: (4, 4, 3, 8)\n", + "\n", + "\n", + "W2[1,1,1] = \n", + "[-0.08566415 0.17750949 0.11974221 0.16773748 -0.0830943 -0.08058\n", + " -0.00577033 -0.14643836 0.24162132 -0.05857408 -0.19055021 0.1345228\n", + " -0.22779644 -0.1601823 -0.16117483 -0.10286498]\n", + "W2.shape: (2, 2, 8, 16)\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1.3 - Forward propagation\n", + "\n", + "In TensorFlow, there are built-in functions that implement the convolution steps for you.\n", + "\n", + "- **tf.nn.conv2d(X,W, strides = [1,s,s,1], padding = 'SAME'):** given an input $X$ and a group of filters $W$, this function convolves $W$'s filters on X. The third parameter ([1,s,s,1]) represents the strides for each dimension of the input (m, n_H_prev, n_W_prev, n_C_prev). Normally, you'll choose a stride of 1 for the number of examples (the first value) and for the channels (the fourth value), which is why we wrote the value as `[1,s,s,1]`. You can read the full documentation on [conv2d](https://www.tensorflow.org/api_docs/python/tf/nn/conv2d).\n", + "\n", + "- **tf.nn.max_pool(A, ksize = [1,f,f,1], strides = [1,s,s,1], padding = 'SAME'):** given an input A, this function uses a window of size (f, f) and strides of size (s, s) to carry out max pooling over each window. For max pooling, we usually operate on a single example at a time and a single channel at a time. So the first and fourth value in `[1,f,f,1]` are both 1. You can read the full documentation on [max_pool](https://www.tensorflow.org/api_docs/python/tf/nn/max_pool).\n", + "\n", + "- **tf.nn.relu(Z):** computes the elementwise ReLU of Z (which can be any shape). You can read the full documentation on [relu](https://www.tensorflow.org/api_docs/python/tf/nn/relu).\n", + "\n", + "- **tf.contrib.layers.flatten(P)**: given a tensor \"P\", this function takes each training (or test) example in the batch and flattens it into a 1D vector. \n", + " * If a tensor P has the shape (m,h,w,c), where m is the number of examples (the batch size), it returns a flattened tensor with shape (batch_size, k), where $k=h \\times w \\times c$. \"k\" equals the product of all the dimension sizes other than the first dimension.\n", + " * For example, given a tensor with dimensions [100,2,3,4], it flattens the tensor to be of shape [100, 24], where 24 = 2 * 3 * 4. You can read the full documentation on [flatten](https://www.tensorflow.org/api_docs/python/tf/contrib/layers/flatten).\n", + "\n", + "- **tf.contrib.layers.fully_connected(F, num_outputs):** given the flattened input F, it returns the output computed using a fully connected layer. You can read the full documentation on [full_connected](https://www.tensorflow.org/api_docs/python/tf/contrib/layers/fully_connected).\n", + "\n", + "In the last function above (`tf.contrib.layers.fully_connected`), the fully connected layer automatically initializes weights in the graph and keeps on training them as you train the model. Hence, you did not need to initialize those weights when initializing the parameters.\n", + "\n", + "\n", + "#### Window, kernel, filter\n", + "The words \"window\", \"kernel\", and \"filter\" are used to refer to the same thing. This is why the parameter `ksize` refers to \"kernel size\", and we use `(f,f)` to refer to the filter size. Both \"kernel\" and \"filter\" refer to the \"window.\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Exercise**\n", + "\n", + "Implement the `forward_propagation` function below to build the following model: `CONV2D -> RELU -> MAXPOOL -> CONV2D -> RELU -> MAXPOOL -> FLATTEN -> FULLYCONNECTED`. You should use the functions above. \n", + "\n", + "In detail, we will use the following parameters for all the steps:\n", + " - Conv2D: stride 1, padding is \"SAME\"\n", + " - ReLU\n", + " - Max pool: Use an 8 by 8 filter size and an 8 by 8 stride, padding is \"SAME\"\n", + " - Conv2D: stride 1, padding is \"SAME\"\n", + " - ReLU\n", + " - Max pool: Use a 4 by 4 filter size and a 4 by 4 stride, padding is \"SAME\"\n", + " - Flatten the previous output.\n", + " - FULLYCONNECTED (FC) layer: Apply a fully connected layer without an non-linear activation function. Do not call the softmax here. This will result in 6 neurons in the output layer, which then get passed later to a softmax. In TensorFlow, the softmax and cost function are lumped together into a single function, which you'll call in a different function when computing the cost. " + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: forward_propagation\n", + "\n", + "def forward_propagation(X, parameters):\n", + " \"\"\"\n", + " Implements the forward propagation for the model:\n", + " CONV2D -> RELU -> MAXPOOL -> CONV2D -> RELU -> MAXPOOL -> FLATTEN -> FULLYCONNECTED\n", + " \n", + " Note that for simplicity and grading purposes, we'll hard-code some values\n", + " such as the stride and kernel (filter) sizes. \n", + " Normally, functions should take these values as function parameters.\n", + " \n", + " Arguments:\n", + " X -- input dataset placeholder, of shape (input size, number of examples)\n", + " parameters -- python dictionary containing your parameters \"W1\", \"W2\"\n", + " the shapes are given in initialize_parameters\n", + "\n", + " Returns:\n", + " Z3 -- the output of the last LINEAR unit\n", + " \"\"\"\n", + " \n", + " # Retrieve the parameters from the dictionary \"parameters\" \n", + " W1 = parameters['W1']\n", + " W2 = parameters['W2']\n", + " \n", + " ### START CODE HERE ###\n", + " # CONV2D: stride of 1, padding 'SAME'\n", + " Z1 = tf.nn.conv2d(X, W1, strides = [1,1,1,1], padding = \"SAME\")\n", + " # RELU\n", + " A1 = tf.nn.relu(Z1)\n", + " # MAXPOOL: window 8x8, stride 8, padding 'SAME'\n", + " P1 = tf.nn.max_pool(A1, ksize = [1,8,8,1], strides = [1,8,8,1], padding = \"SAME\")\n", + " # CONV2D: filters W2, stride 1, padding 'SAME'\n", + " Z2 = tf.nn.conv2d(P1, W2, strides = [1,1,1,1], padding = \"SAME\")\n", + " # RELU\n", + " A2 = tf.nn.relu(Z2)\n", + " # MAXPOOL: window 4x4, stride 4, padding 'SAME'\n", + " P2 = tf.nn.max_pool(A2, ksize = [1,4,4,1], strides = [1,4,4,1], padding = \"SAME\")\n", + " # FLATTEN\n", + " F = tf.contrib.layers.flatten(P2)\n", + " # FULLY-CONNECTED without non-linear activation function (not not call softmax).\n", + " # 6 neurons in output layer. Hint: one of the arguments should be \"activation_fn=None\" \n", + " Z3 = tf.contrib.layers.fully_connected(F, 6, activation_fn=None)\n", + " ### END CODE HERE ###\n", + "\n", + " return Z3" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Z3 = \n", + "[[-0.44670227 -1.57208765 -1.53049231 -2.31013036 -1.29104376 0.46852064]\n", + " [-0.17601591 -1.57972014 -1.4737016 -2.61672091 -1.00810647 0.5747785 ]]\n" + ] + } + ], + "source": [ + "tf.reset_default_graph()\n", + "\n", + "with tf.Session() as sess:\n", + " np.random.seed(1)\n", + " X, Y = create_placeholders(64, 64, 3, 6)\n", + " parameters = initialize_parameters()\n", + " Z3 = forward_propagation(X, parameters)\n", + " init = tf.global_variables_initializer()\n", + " sess.run(init)\n", + " a = sess.run(Z3, {X: np.random.randn(2,64,64,3), Y: np.random.randn(2,6)})\n", + " print(\"Z3 = \\n\" + str(a))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Expected Output**:\n", + "\n", + "```\n", + "Z3 = \n", + "[[-0.44670227 -1.57208765 -1.53049231 -2.31013036 -1.29104376 0.46852064]\n", + " [-0.17601591 -1.57972014 -1.4737016 -2.61672091 -1.00810647 0.5747785 ]]\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1.4 - Compute cost\n", + "\n", + "Implement the compute cost function below. Remember that the cost function helps the neural network see how much the model's predictions differ from the correct labels. By adjusting the weights of the network to reduce the cost, the neural network can improve its predictions.\n", + "\n", + "You might find these two functions helpful: \n", + "\n", + "- **tf.nn.softmax_cross_entropy_with_logits(logits = Z, labels = Y):** computes the softmax entropy loss. This function both computes the softmax activation function as well as the resulting loss. You can check the full documentation [softmax_cross_entropy_with_logits](https://www.tensorflow.org/api_docs/python/tf/nn/softmax_cross_entropy_with_logits).\n", + "- **tf.reduce_mean:** computes the mean of elements across dimensions of a tensor. Use this to calculate the sum of the losses over all the examples to get the overall cost. You can check the full documentation [reduce_mean](https://www.tensorflow.org/api_docs/python/tf/reduce_mean).\n", + "\n", + "#### Details on softmax_cross_entropy_with_logits (optional reading)\n", + "* Softmax is used to format outputs so that they can be used for classification. It assigns a value between 0 and 1 for each category, where the sum of all prediction values (across all possible categories) equals 1.\n", + "* Cross Entropy is compares the model's predicted classifications with the actual labels and results in a numerical value representing the \"loss\" of the model's predictions.\n", + "* \"Logits\" are the result of multiplying the weights and adding the biases. Logits are passed through an activation function (such as a relu), and the result is called the \"activation.\"\n", + "* The function is named `softmax_cross_entropy_with_logits` takes logits as input (and not activations); then uses the model to predict using softmax, and then compares the predictions with the true labels using cross entropy. These are done with a single function to optimize the calculations.\n", + "\n", + "** Exercise**: Compute the cost below using the function above." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: compute_cost \n", + "\n", + "def compute_cost(Z3, Y):\n", + " \"\"\"\n", + " Computes the cost\n", + " \n", + " Arguments:\n", + " Z3 -- output of forward propagation (output of the last LINEAR unit), of shape (number of examples, 6)\n", + " Y -- \"true\" labels vector placeholder, same shape as Z3\n", + " \n", + " Returns:\n", + " cost - Tensor of the cost function\n", + " \"\"\"\n", + " \n", + " ### START CODE HERE ### (1 line of code)\n", + " cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=Z3, labels=Y))\n", + " ### END CODE HERE ###\n", + " \n", + " return cost" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "cost = 2.91034\n" + ] + } + ], + "source": [ + "tf.reset_default_graph()\n", + "\n", + "with tf.Session() as sess:\n", + " np.random.seed(1)\n", + " X, Y = create_placeholders(64, 64, 3, 6)\n", + " parameters = initialize_parameters()\n", + " Z3 = forward_propagation(X, parameters)\n", + " cost = compute_cost(Z3, Y)\n", + " init = tf.global_variables_initializer()\n", + " sess.run(init)\n", + " a = sess.run(cost, {X: np.random.randn(4,64,64,3), Y: np.random.randn(4,6)})\n", + " print(\"cost = \" + str(a))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Expected Output**: \n", + "```\n", + "cost = 2.91034\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1.5 Model \n", + "\n", + "Finally you will merge the helper functions you implemented above to build a model. You will train it on the SIGNS dataset. \n", + "\n", + "**Exercise**: Complete the function below. \n", + "\n", + "The model below should:\n", + "\n", + "- create placeholders\n", + "- initialize parameters\n", + "- forward propagate\n", + "- compute the cost\n", + "- create an optimizer\n", + "\n", + "Finally you will create a session and run a for loop for num_epochs, get the mini-batches, and then for each mini-batch you will optimize the function. [Hint for initializing the variables](https://www.tensorflow.org/api_docs/python/tf/global_variables_initializer)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Adam Optimizer\n", + "You can use `tf.train.AdamOptimizer(learning_rate = ...)` to create the optimizer. The optimizer has a `minimize(loss=...)` function that you'll call to set the cost function that the optimizer will minimize.\n", + "\n", + "For details, check out the documentation for [Adam Optimizer](https://www.tensorflow.org/api_docs/python/tf/train/AdamOptimizer)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Random mini batches\n", + "If you took course 2 of the deep learning specialization, you implemented `random_mini_batches()` in the \"Optimization\" programming assignment. This function returns a list of mini-batches. It is already implemented in the `cnn_utils.py` file and imported here, so you can call it like this:\n", + "```Python\n", + "minibatches = random_mini_batches(X, Y, mini_batch_size = 64, seed = 0)\n", + "```\n", + "(You will want to choose the correct variable names when you use it in your code)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Evaluating the optimizer and cost\n", + "\n", + "Within a loop, for each mini-batch, you'll use the `tf.Session` object (named `sess`) to feed a mini-batch of inputs and labels into the neural network and evaluate the tensors for the optimizer as well as the cost. Remember that we built a graph data structure and need to feed it inputs and labels and use `sess.run()` in order to get values for the optimizer and cost.\n", + "\n", + "You'll use this kind of syntax:\n", + "```\n", + "output_for_var1, output_for_var2 = sess.run(\n", + " fetches=[var1, var2],\n", + " feed_dict={var_inputs: the_batch_of_inputs,\n", + " var_labels: the_batch_of_labels}\n", + " )\n", + "```\n", + "* Notice that `sess.run` takes its first argument `fetches` as a list of objects that you want it to evaluate (in this case, we want to evaluate the optimizer and the cost). \n", + "* It also takes a dictionary for the `feed_dict` parameter. \n", + "* The keys are the `tf.placeholder` variables that we created in the `create_placeholders` function above. \n", + "* The values are the variables holding the actual numpy arrays for each mini-batch. \n", + "* The sess.run outputs a tuple of the evaluated tensors, in the same order as the list given to `fetches`. \n", + "\n", + "For more information on how to use sess.run, see the documentation [tf.Sesssion#run](https://www.tensorflow.org/api_docs/python/tf/Session#run) documentation." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: model\n", + "\n", + "def model(X_train, Y_train, X_test, Y_test, learning_rate = 0.009,\n", + " num_epochs = 100, minibatch_size = 64, print_cost = True):\n", + " \"\"\"\n", + " Implements a three-layer ConvNet in Tensorflow:\n", + " CONV2D -> RELU -> MAXPOOL -> CONV2D -> RELU -> MAXPOOL -> FLATTEN -> FULLYCONNECTED\n", + " \n", + " Arguments:\n", + " X_train -- training set, of shape (None, 64, 64, 3)\n", + " Y_train -- test set, of shape (None, n_y = 6)\n", + " X_test -- training set, of shape (None, 64, 64, 3)\n", + " Y_test -- test set, of shape (None, n_y = 6)\n", + " learning_rate -- learning rate of the optimization\n", + " num_epochs -- number of epochs of the optimization loop\n", + " minibatch_size -- size of a minibatch\n", + " print_cost -- True to print the cost every 100 epochs\n", + " \n", + " Returns:\n", + " train_accuracy -- real number, accuracy on the train set (X_train)\n", + " test_accuracy -- real number, testing accuracy on the test set (X_test)\n", + " parameters -- parameters learnt by the model. They can then be used to predict.\n", + " \"\"\"\n", + " \n", + " ops.reset_default_graph() # to be able to rerun the model without overwriting tf variables\n", + " tf.set_random_seed(1) # to keep results consistent (tensorflow seed)\n", + " seed = 3 # to keep results consistent (numpy seed)\n", + " (m, n_H0, n_W0, n_C0) = X_train.shape \n", + " n_y = Y_train.shape[1] \n", + " costs = [] # To keep track of the cost\n", + " \n", + " # Create Placeholders of the correct shape\n", + " ### START CODE HERE ### (1 line)\n", + " X, Y = create_placeholders(n_H0, n_W0, n_C0, n_y)\n", + " ### END CODE HERE ###\n", + "\n", + " # Initialize parameters\n", + " ### START CODE HERE ### (1 line)\n", + " parameters = initialize_parameters()\n", + " ### END CODE HERE ###\n", + " \n", + " # Forward propagation: Build the forward propagation in the tensorflow graph\n", + " ### START CODE HERE ### (1 line)\n", + " Z3 = forward_propagation(X, parameters)\n", + " ### END CODE HERE ###\n", + " \n", + " # Cost function: Add cost function to tensorflow graph\n", + " ### START CODE HERE ### (1 line)\n", + " cost = compute_cost(Z3, Y)\n", + " ### END CODE HERE ###\n", + " \n", + " # Backpropagation: Define the tensorflow optimizer. Use an AdamOptimizer that minimizes the cost.\n", + " ### START CODE HERE ### (1 line)\n", + " optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(loss=cost)\n", + " ### END CODE HERE ###\n", + " \n", + " # Initialize all the variables globally\n", + " init = tf.global_variables_initializer()\n", + " \n", + " # Start the session to compute the tensorflow graph\n", + " with tf.Session() as sess:\n", + " \n", + " # Run the initialization\n", + " sess.run(init)\n", + " \n", + " # Do the training loop\n", + " for epoch in range(num_epochs):\n", + "\n", + " minibatch_cost = 0.\n", + " num_minibatches = int(m / minibatch_size) # number of minibatches of size minibatch_size in the train set\n", + " seed = seed + 1\n", + " minibatches = random_mini_batches(X_train, Y_train, minibatch_size, seed)\n", + "\n", + " for minibatch in minibatches:\n", + "\n", + " # Select a minibatch\n", + " (minibatch_X, minibatch_Y) = minibatch\n", + " \"\"\"\n", + " # IMPORTANT: The line that runs the graph on a minibatch.\n", + " # Run the session to execute the optimizer and the cost.\n", + " # The feedict should contain a minibatch for (X,Y).\n", + " \"\"\"\n", + " ### START CODE HERE ### (1 line)\n", + " _ , temp_cost = sess.run(\n", + " [optimizer, cost],\n", + " feed_dict = {X:minibatch_X, Y:minibatch_Y}\n", + " )\n", + " ### END CODE HERE ###\n", + " \n", + " minibatch_cost += temp_cost / num_minibatches\n", + " \n", + "\n", + " # Print the cost every epoch\n", + " if print_cost == True and epoch % 5 == 0:\n", + " print (\"Cost after epoch %i: %f\" % (epoch, minibatch_cost))\n", + " if print_cost == True and epoch % 1 == 0:\n", + " costs.append(minibatch_cost)\n", + " \n", + " \n", + " # plot the cost\n", + " plt.plot(np.squeeze(costs))\n", + " plt.ylabel('cost')\n", + " plt.xlabel('iterations (per tens)')\n", + " plt.title(\"Learning rate =\" + str(learning_rate))\n", + " plt.show()\n", + "\n", + " # Calculate the correct predictions\n", + " predict_op = tf.argmax(Z3, 1)\n", + " correct_prediction = tf.equal(predict_op, tf.argmax(Y, 1))\n", + " \n", + " # Calculate accuracy on the test set\n", + " accuracy = tf.reduce_mean(tf.cast(correct_prediction, \"float\"))\n", + " print(accuracy)\n", + " train_accuracy = accuracy.eval({X: X_train, Y: Y_train})\n", + " test_accuracy = accuracy.eval({X: X_test, Y: Y_test})\n", + " print(\"Train Accuracy:\", train_accuracy)\n", + " print(\"Test Accuracy:\", test_accuracy)\n", + " \n", + " return train_accuracy, test_accuracy, parameters" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Run the following cell to train your model for 100 epochs. Check if your cost after epoch 0 and 5 matches our output. If not, stop the cell and go back to your code!" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Cost after epoch 0: 1.917929\n", + "Cost after epoch 5: 1.506757\n", + "Cost after epoch 10: 0.955359\n", + "Cost after epoch 15: 0.845802\n", + "Cost after epoch 20: 0.701174\n", + "Cost after epoch 25: 0.571977\n", + "Cost after epoch 30: 0.518435\n", + "Cost after epoch 35: 0.495806\n", + "Cost after epoch 40: 0.429827\n", + "Cost after epoch 45: 0.407291\n", + "Cost after epoch 50: 0.366394\n", + "Cost after epoch 55: 0.376922\n", + "Cost after epoch 60: 0.299491\n", + "Cost after epoch 65: 0.338870\n", + "Cost after epoch 70: 0.316400\n", + "Cost after epoch 75: 0.310413\n", + "Cost after epoch 80: 0.249549\n", + "Cost after epoch 85: 0.243457\n", + "Cost after epoch 90: 0.200031\n", + "Cost after epoch 95: 0.175452\n" + ] + }, + { + "data": { + "image/png": "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\nPypHYdmk//r2AAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Tensor(\"Mean_1:0\", shape=(), dtype=float32)\n", + "Train Accuracy: 0.940741\n", + "Test Accuracy: 0.783333\n" + ] + } + ], + "source": [ + "_, _, parameters = model(X_train, Y_train, X_test, Y_test)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Expected output**: although it may not match perfectly, your expected output should be close to ours and your cost value should decrease.\n", + "\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "\n", + "\n", + " \n", + "\n", + " \n", + "\n", + "\n", + " \n", + "\n", + " \n", + " \n", + "\n", + "\n", + " \n", + "\n", + " \n", + " \n", + "
\n", + " **Cost after epoch 0 =**\n", + " \n", + " 1.917929\n", + "
\n", + " **Cost after epoch 5 =**\n", + " \n", + " 1.506757\n", + "
\n", + " **Train Accuracy =**\n", + " \n", + " 0.940741\n", + "
\n", + " **Test Accuracy =**\n", + " \n", + " 0.783333\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Congratulations! You have finished the assignment and built a model that recognizes SIGN language with almost 80% accuracy on the test set. If you wish, feel free to play around with this dataset further. You can actually improve its accuracy by spending more time tuning the hyperparameters, or using regularization (as this model clearly has a high variance). \n", + "\n", + "Once again, here's a thumbs up for your work! " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "fname = \"images/thumbs_up.jpg\"\n", + "image = np.array(ndimage.imread(fn ame, flatten=False))\n", + "my_image = scipy.misc.imresize(image, size=(64,64))\n", + "plt.imshow(my_image)" + ] + } + ], + "metadata": { + "coursera": { + "course_slug": "convolutional-neural-networks", + "graded_item_id": "bwbJV", + "launcher_item_id": "0TkXB" + }, + "kernelspec": { + "display_name": "Python 3", + "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.6.0" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Course4/Week1/Convolution_model_Step_by_Step_v2a.ipynb b/Course4/Week1/Convolution_model_Step_by_Step_v2a.ipynb new file mode 100644 index 0000000..9fd86db --- /dev/null +++ b/Course4/Week1/Convolution_model_Step_by_Step_v2a.ipynb @@ -0,0 +1,1616 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Convolutional Neural Networks: Step by Step\n", + "\n", + "Welcome to Course 4's first assignment! In this assignment, you will implement convolutional (CONV) and pooling (POOL) layers in numpy, including both forward propagation and (optionally) backward propagation. \n", + "\n", + "**Notation**:\n", + "- Superscript $[l]$ denotes an object of the $l^{th}$ layer. \n", + " - Example: $a^{[4]}$ is the $4^{th}$ layer activation. $W^{[5]}$ and $b^{[5]}$ are the $5^{th}$ layer parameters.\n", + "\n", + "\n", + "- Superscript $(i)$ denotes an object from the $i^{th}$ example. \n", + " - Example: $x^{(i)}$ is the $i^{th}$ training example input.\n", + " \n", + " \n", + "- Subscript $i$ denotes the $i^{th}$ entry of a vector.\n", + " - Example: $a^{[l]}_i$ denotes the $i^{th}$ entry of the activations in layer $l$, assuming this is a fully connected (FC) layer.\n", + " \n", + " \n", + "- $n_H$, $n_W$ and $n_C$ denote respectively the height, width and number of channels of a given layer. If you want to reference a specific layer $l$, you can also write $n_H^{[l]}$, $n_W^{[l]}$, $n_C^{[l]}$. \n", + "- $n_{H_{prev}}$, $n_{W_{prev}}$ and $n_{C_{prev}}$ denote respectively the height, width and number of channels of the previous layer. If referencing a specific layer $l$, this could also be denoted $n_H^{[l-1]}$, $n_W^{[l-1]}$, $n_C^{[l-1]}$. \n", + "\n", + "We assume that you are already familiar with `numpy` and/or have completed the previous courses of the specialization. Let's get started!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Updates\n", + "\n", + "#### If you were working on the notebook before this update...\n", + "* The current notebook is version \"v2a\".\n", + "* You can find your original work saved in the notebook with the previous version name (\"v2\") \n", + "* To view the file directory, go to the menu \"File->Open\", and this will open a new tab that shows the file directory.\n", + "\n", + "#### List of updates\n", + "* clarified example used for padding function. Updated starter code for padding function.\n", + "* `conv_forward` has additional hints to help students if they're stuck.\n", + "* `conv_forward` places code for `vert_start` and `vert_end` within the `for h in range(...)` loop; to avoid redundant calculations. Similarly updated `horiz_start` and `horiz_end`. **Thanks to our mentor Kevin Brown for pointing this out.**\n", + "* `conv_forward` breaks down the `Z[i, h, w, c]` single line calculation into 3 lines, for clarity.\n", + "* `conv_forward` test case checks that students don't accidentally use n_H_prev instead of n_H, use n_W_prev instead of n_W, and don't accidentally swap n_H with n_W\n", + "* `pool_forward` properly nests calculations of `vert_start`, `vert_end`, `horiz_start`, and `horiz_end` to avoid redundant calculations.\n", + "* `pool_forward' has two new test cases that check for a correct implementation of stride (the height and width of the previous layer's activations should be large enough relative to the filter dimensions so that a stride can take place). \n", + "* `conv_backward`: initialize `Z` and `cache` variables within unit test, to make it independent of unit testing that occurs in the `conv_forward` section of the assignment.\n", + "* **Many thanks to our course mentor, Paul Mielke, for proposing these test cases.**" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1 - Packages\n", + "\n", + "Let's first import all the packages that you will need during this assignment. \n", + "- [numpy](www.numpy.org) is the fundamental package for scientific computing with Python.\n", + "- [matplotlib](http://matplotlib.org) is a library to plot graphs in Python.\n", + "- np.random.seed(1) is used to keep all the random function calls consistent. It will help us grade your work." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "import h5py\n", + "import matplotlib.pyplot as plt\n", + "\n", + "%matplotlib inline\n", + "plt.rcParams['figure.figsize'] = (5.0, 4.0) # set default size of plots\n", + "plt.rcParams['image.interpolation'] = 'nearest'\n", + "plt.rcParams['image.cmap'] = 'gray'\n", + "\n", + "%load_ext autoreload\n", + "%autoreload 2\n", + "\n", + "np.random.seed(1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2 - Outline of the Assignment\n", + "\n", + "You will be implementing the building blocks of a convolutional neural network! Each function you will implement will have detailed instructions that will walk you through the steps needed:\n", + "\n", + "- Convolution functions, including:\n", + " - Zero Padding\n", + " - Convolve window \n", + " - Convolution forward\n", + " - Convolution backward (optional)\n", + "- Pooling functions, including:\n", + " - Pooling forward\n", + " - Create mask \n", + " - Distribute value\n", + " - Pooling backward (optional)\n", + " \n", + "This notebook will ask you to implement these functions from scratch in `numpy`. In the next notebook, you will use the TensorFlow equivalents of these functions to build the following model:\n", + "\n", + "\n", + "\n", + "**Note** that for every forward function, there is its corresponding backward equivalent. Hence, at every step of your forward module you will store some parameters in a cache. These parameters are used to compute gradients during backpropagation. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3 - Convolutional Neural Networks\n", + "\n", + "Although programming frameworks make convolutions easy to use, they remain one of the hardest concepts to understand in Deep Learning. A convolution layer transforms an input volume into an output volume of different size, as shown below. \n", + "\n", + "\n", + "\n", + "In this part, you will build every step of the convolution layer. You will first implement two helper functions: one for zero padding and the other for computing the convolution function itself. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3.1 - Zero-Padding\n", + "\n", + "Zero-padding adds zeros around the border of an image:\n", + "\n", + "\n", + "
**Figure 1** : **Zero-Padding**
Image (3 channels, RGB) with a padding of 2.
\n", + "\n", + "The main benefits of padding are the following:\n", + "\n", + "- It allows you to use a CONV layer without necessarily shrinking the height and width of the volumes. This is important for building deeper networks, since otherwise the height/width would shrink as you go to deeper layers. An important special case is the \"same\" convolution, in which the height/width is exactly preserved after one layer. \n", + "\n", + "- It helps us keep more of the information at the border of an image. Without padding, very few values at the next layer would be affected by pixels as the edges of an image.\n", + "\n", + "**Exercise**: Implement the following function, which pads all the images of a batch of examples X with zeros. [Use np.pad](https://docs.scipy.org/doc/numpy/reference/generated/numpy.pad.html). Note if you want to pad the array \"a\" of shape $(5,5,5,5,5)$ with `pad = 1` for the 2nd dimension, `pad = 3` for the 4th dimension and `pad = 0` for the rest, you would do:\n", + "```python\n", + "a = np.pad(a, ((0,0), (1,1), (0,0), (3,3), (0,0)), mode='constant', constant_values = (0,0))\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: zero_pad\n", + "\n", + "def zero_pad(X, pad):\n", + " \"\"\"\n", + " Pad with zeros all images of the dataset X. The padding is applied to the height and width of an image, \n", + " as illustrated in Figure 1.\n", + " \n", + " Argument:\n", + " X -- python numpy array of shape (m, n_H, n_W, n_C) representing a batch of m images\n", + " pad -- integer, amount of padding around each image on vertical and horizontal dimensions\n", + " \n", + " Returns:\n", + " X_pad -- padded image of shape (m, n_H + 2*pad, n_W + 2*pad, n_C)\n", + " \"\"\"\n", + " \n", + " ### START CODE HERE ### (≈ 1 line)\n", + " X_pad = np.pad(X, ((0,0), (pad,pad), (pad,pad), (0,0)), mode='constant', constant_values = (0,0))\n", + " ### END CODE HERE ###\n", + " \n", + " return X_pad" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "x.shape =\n", + " (4, 3, 3, 2)\n", + "x_pad.shape =\n", + " (4, 7, 7, 2)\n", + "x[1,1] =\n", + " [[ 0.90085595 -0.68372786]\n", + " [-0.12289023 -0.93576943]\n", + " [-0.26788808 0.53035547]]\n", + "x_pad[1,1] =\n", + " [[ 0. 0.]\n", + " [ 0. 0.]\n", + " [ 0. 0.]\n", + " [ 0. 0.]\n", + " [ 0. 0.]\n", + " [ 0. 0.]\n", + " [ 0. 0.]]\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "np.random.seed(1)\n", + "x = np.random.randn(4, 3, 3, 2)\n", + "x_pad = zero_pad(x, 2)\n", + "print (\"x.shape =\\n\", x.shape)\n", + "print (\"x_pad.shape =\\n\", x_pad.shape)\n", + "print (\"x[1,1] =\\n\", x[1,1])\n", + "print (\"x_pad[1,1] =\\n\", x_pad[1,1])\n", + "\n", + "fig, axarr = plt.subplots(1, 2)\n", + "axarr[0].set_title('x')\n", + "axarr[0].imshow(x[0,:,:,0])\n", + "axarr[1].set_title('x_pad')\n", + "axarr[1].imshow(x_pad[0,:,:,0])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Expected Output**:\n", + "\n", + "```\n", + "x.shape =\n", + " (4, 3, 3, 2)\n", + "x_pad.shape =\n", + " (4, 7, 7, 2)\n", + "x[1,1] =\n", + " [[ 0.90085595 -0.68372786]\n", + " [-0.12289023 -0.93576943]\n", + " [-0.26788808 0.53035547]]\n", + "x_pad[1,1] =\n", + " [[ 0. 0.]\n", + " [ 0. 0.]\n", + " [ 0. 0.]\n", + " [ 0. 0.]\n", + " [ 0. 0.]\n", + " [ 0. 0.]\n", + " [ 0. 0.]]\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3.2 - Single step of convolution \n", + "\n", + "In this part, implement a single step of convolution, in which you apply the filter to a single position of the input. This will be used to build a convolutional unit, which: \n", + "\n", + "- Takes an input volume \n", + "- Applies a filter at every position of the input\n", + "- Outputs another volume (usually of different size)\n", + "\n", + "\n", + "
**Figure 2** : **Convolution operation**
with a filter of 3x3 and a stride of 1 (stride = amount you move the window each time you slide)
\n", + "\n", + "In a computer vision application, each value in the matrix on the left corresponds to a single pixel value, and we convolve a 3x3 filter with the image by multiplying its values element-wise with the original matrix, then summing them up and adding a bias. In this first step of the exercise, you will implement a single step of convolution, corresponding to applying a filter to just one of the positions to get a single real-valued output. \n", + "\n", + "Later in this notebook, you'll apply this function to multiple positions of the input to implement the full convolutional operation. \n", + "\n", + "**Exercise**: Implement conv_single_step(). [Hint](https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.sum.html).\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Note**: The variable b will be passed in as a numpy array. If we add a scalar (a float or integer) to a numpy array, the result is a numpy array. In the special case when a numpy array contains a single value, we can cast it as a float to convert it to a scalar." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: conv_single_step\n", + "\n", + "def conv_single_step(a_slice_prev, W, b):\n", + " \"\"\"\n", + " Apply one filter defined by parameters W on a single slice (a_slice_prev) of the output activation \n", + " of the previous layer.\n", + " \n", + " Arguments:\n", + " a_slice_prev -- slice of input data of shape (f, f, n_C_prev)\n", + " W -- Weight parameters contained in a window - matrix of shape (f, f, n_C_prev)\n", + " b -- Bias parameters contained in a window - matrix of shape (1, 1, 1)\n", + " \n", + " Returns:\n", + " Z -- a scalar value, the result of convolving the sliding window (W, b) on a slice x of the input data\n", + " \"\"\"\n", + "\n", + " ### START CODE HERE ### (≈ 2 lines of code)\n", + " # Element-wise product between a_slice_prev and W. Do not add the bias yet.\n", + " s = np.multiply(a_slice_prev, W)\n", + " # Sum over all entries of the volume s.\n", + " Z = np.sum(s)\n", + " # Add bias b to Z. Cast b to a float() so that Z results in a scalar value.\n", + " Z = Z + float(b)\n", + " ### END CODE HERE ###\n", + "\n", + " return Z" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Z = -6.99908945068\n" + ] + } + ], + "source": [ + "np.random.seed(1)\n", + "a_slice_prev = np.random.randn(4, 4, 3)\n", + "W = np.random.randn(4, 4, 3)\n", + "b = np.random.randn(1, 1, 1)\n", + "\n", + "Z = conv_single_step(a_slice_prev, W, b)\n", + "print(\"Z =\", Z)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Expected Output**:\n", + "\n", + " \n", + " \n", + " \n", + " \n", + "\n", + "
\n", + " **Z**\n", + " \n", + " -6.99908945068\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3.3 - Convolutional Neural Networks - Forward pass\n", + "\n", + "In the forward pass, you will take many filters and convolve them on the input. Each 'convolution' gives you a 2D matrix output. You will then stack these outputs to get a 3D volume: \n", + "\n", + "
\n", + "\n", + "
\n", + "\n", + "**Exercise**: \n", + "Implement the function below to convolve the filters `W` on an input activation `A_prev`. \n", + "This function takes the following inputs:\n", + "* `A_prev`, the activations output by the previous layer (for a batch of m inputs); \n", + "* Weights are denoted by `W`. The filter window size is `f` by `f`.\n", + "* The bias vector is `b`, where each filter has its own (single) bias. \n", + "\n", + "Finally you also have access to the hyperparameters dictionary which contains the stride and the padding. \n", + "\n", + "**Hint**: \n", + "1. To select a 2x2 slice at the upper left corner of a matrix \"a_prev\" (shape (5,5,3)), you would do:\n", + "```python\n", + "a_slice_prev = a_prev[0:2,0:2,:]\n", + "```\n", + "Notice how this gives a 3D slice that has height 2, width 2, and depth 3. Depth is the number of channels. \n", + "This will be useful when you will define `a_slice_prev` below, using the `start/end` indexes you will define.\n", + "2. To define a_slice you will need to first define its corners `vert_start`, `vert_end`, `horiz_start` and `horiz_end`. This figure may be helpful for you to find out how each of the corner can be defined using h, w, f and s in the code below.\n", + "\n", + "\n", + "
**Figure 3** : **Definition of a slice using vertical and horizontal start/end (with a 2x2 filter)**
This figure shows only a single channel.
\n", + "\n", + "\n", + "**Reminder**:\n", + "The formulas relating the output shape of the convolution to the input shape is:\n", + "$$ n_H = \\lfloor \\frac{n_{H_{prev}} - f + 2 \\times pad}{stride} \\rfloor +1 $$\n", + "$$ n_W = \\lfloor \\frac{n_{W_{prev}} - f + 2 \\times pad}{stride} \\rfloor +1 $$\n", + "$$ n_C = \\text{number of filters used in the convolution}$$\n", + "\n", + "For this exercise, we won't worry about vectorization, and will just implement everything with for-loops." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Additional Hints if you're stuck\n", + "\n", + "\n", + "* You will want to use array slicing (e.g.`varname[0:1,:,3:5]`) for the following variables: \n", + " `a_prev_pad` ,`W`, `b` \n", + " Copy the starter code of the function and run it outside of the defined function, in separate cells. \n", + " Check that the subset of each array is the size and dimension that you're expecting. \n", + "* To decide how to get the vert_start, vert_end; horiz_start, horiz_end, remember that these are indices of the previous layer. \n", + " Draw an example of a previous padded layer (8 x 8, for instance), and the current (output layer) (2 x 2, for instance). \n", + " The output layer's indices are denoted by `h` and `w`. \n", + "* Make sure that `a_slice_prev` has a height, width and depth.\n", + "* Remember that `a_prev_pad` is a subset of `A_prev_pad`. \n", + " Think about which one should be used within the for loops." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: conv_forward\n", + "\n", + "def conv_forward(A_prev, W, b, hparameters):\n", + " \"\"\"\n", + " Implements the forward propagation for a convolution function\n", + " \n", + " Arguments:\n", + " A_prev -- output activations of the previous layer, \n", + " numpy array of shape (m, n_H_prev, n_W_prev, n_C_prev)\n", + " W -- Weights, numpy array of shape (f, f, n_C_prev, n_C)\n", + " b -- Biases, numpy array of shape (1, 1, 1, n_C)\n", + " hparameters -- python dictionary containing \"stride\" and \"pad\"\n", + " \n", + " Returns:\n", + " Z -- conv output, numpy array of shape (m, n_H, n_W, n_C)\n", + " cache -- cache of values needed for the conv_backward() function\n", + " \"\"\"\n", + " \n", + " ### START CODE HERE ###\n", + " # Retrieve dimensions from A_prev's shape (≈1 line) \n", + " (m, n_H_prev, n_W_prev, n_C_prev) = A_prev.shape\n", + " \n", + " # Retrieve dimensions from W's shape (≈1 line)\n", + " (f, f, n_C_prev, n_C) = W.shape\n", + " \n", + " # Retrieve information from \"hparameters\" (≈2 lines)\n", + " stride = hparameters[\"stride\"]\n", + " pad = hparameters[\"pad\"]\n", + " \n", + " # Compute the dimensions of the CONV output volume using the formula given above. \n", + " # Hint: use int() to apply the 'floor' operation. (≈2 lines)\n", + " n_H = int(((n_H_prev - f + 2 * pad) / stride) + 1)\n", + " n_W = int(((n_W_prev - f + 2 * pad) / stride) + 1)\n", + " \n", + " # Initialize the output volume Z with zeros. (≈1 line)\n", + " Z = np.zeros((m, n_H, n_W, n_C))\n", + " \n", + " # Create A_prev_pad by padding A_prev\n", + " A_prev_pad = zero_pad(A_prev, pad)\n", + " \n", + " for i in range(m): # loop over the batch of training examples\n", + " a_prev_pad = A_prev_pad[i,:] # Select ith training example's padded activation\n", + " for h in range(n_H): # loop over vertical axis of the output volume\n", + " # Find the vertical start and end of the current \"slice\" (≈2 lines)\n", + " vert_start = h * stride\n", + " vert_end = vert_start + f\n", + " \n", + " for w in range(n_W): # loop over horizontal axis of the output volume\n", + " # Find the horizontal start and end of the current \"slice\" (≈2 lines)\n", + " horiz_start = w * stride\n", + " horiz_end = horiz_start + f\n", + " \n", + " for c in range(n_C): # loop over channels (= #filters) of the output volume\n", + " \n", + " # Use the corners to define the (3D) slice of a_prev_pad (See Hint above the cell). (≈1 line)\n", + " a_slice_prev = a_prev_pad[vert_start:vert_end, horiz_start:horiz_end, :]\n", + " \n", + " # Convolve the (3D) slice with the correct filter W and bias b, to get back one output neuron. (≈3 line)\n", + " weights = W[..., c]\n", + " biases = b[..., c]\n", + " Z[i, h, w, c] = conv_single_step(a_slice_prev, weights, biases)\n", + " \n", + " ### END CODE HERE ###\n", + " \n", + " # Making sure your output shape is correct\n", + " assert(Z.shape == (m, n_H, n_W, n_C))\n", + " \n", + " # Save information in \"cache\" for the backprop\n", + " cache = (A_prev, W, b, hparameters)\n", + " \n", + " return Z, cache" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Z's mean =\n", + " 0.692360880758\n", + "Z[3,2,1] =\n", + " [ -1.28912231 2.27650251 6.61941931 0.95527176 8.25132576\n", + " 2.31329639 13.00689405 2.34576051]\n", + "cache_conv[0][1][2][3] =\n", + " [-1.1191154 1.9560789 -0.3264995 -1.34267579]\n" + ] + } + ], + "source": [ + "np.random.seed(1)\n", + "A_prev = np.random.randn(10,5,7,4)\n", + "W = np.random.randn(3,3,4,8)\n", + "b = np.random.randn(1,1,1,8)\n", + "hparameters = {\"pad\" : 1,\n", + " \"stride\": 2}\n", + "\n", + "Z, cache_conv = conv_forward(A_prev, W, b, hparameters)\n", + "print(\"Z's mean =\\n\", np.mean(Z))\n", + "print(\"Z[3,2,1] =\\n\", Z[3,2,1])\n", + "print(\"cache_conv[0][1][2][3] =\\n\", cache_conv[0][1][2][3])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Expected Output**:\n", + "```\n", + "Z's mean =\n", + " 0.692360880758\n", + "Z[3,2,1] =\n", + " [ -1.28912231 2.27650251 6.61941931 0.95527176 8.25132576\n", + " 2.31329639 13.00689405 2.34576051]\n", + "cache_conv[0][1][2][3] = [-1.1191154 1.9560789 -0.3264995 -1.34267579]\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Finally, CONV layer should also contain an activation, in which case we would add the following line of code:\n", + "\n", + "```python\n", + "# Convolve the window to get back one output neuron\n", + "Z[i, h, w, c] = ...\n", + "# Apply activation\n", + "A[i, h, w, c] = activation(Z[i, h, w, c])\n", + "```\n", + "\n", + "You don't need to do it here. \n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 4 - Pooling layer \n", + "\n", + "The pooling (POOL) layer reduces the height and width of the input. It helps reduce computation, as well as helps make feature detectors more invariant to its position in the input. The two types of pooling layers are: \n", + "\n", + "- Max-pooling layer: slides an ($f, f$) window over the input and stores the max value of the window in the output.\n", + "\n", + "- Average-pooling layer: slides an ($f, f$) window over the input and stores the average value of the window in the output.\n", + "\n", + "\n", + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
\n", + "\n", + "These pooling layers have no parameters for backpropagation to train. However, they have hyperparameters such as the window size $f$. This specifies the height and width of the $f \\times f$ window you would compute a *max* or *average* over. \n", + "\n", + "### 4.1 - Forward Pooling\n", + "Now, you are going to implement MAX-POOL and AVG-POOL, in the same function. \n", + "\n", + "**Exercise**: Implement the forward pass of the pooling layer. Follow the hints in the comments below.\n", + "\n", + "**Reminder**:\n", + "As there's no padding, the formulas binding the output shape of the pooling to the input shape is:\n", + "\n", + "$$ n_H = \\lfloor \\frac{n_{H_{prev}} - f}{stride} \\rfloor +1 $$\n", + "\n", + "$$ n_W = \\lfloor \\frac{n_{W_{prev}} - f}{stride} \\rfloor +1 $$\n", + "\n", + "$$ n_C = n_{C_{prev}}$$" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# GRADED FUNCTION: pool_forward\n", + "\n", + "def pool_forward(A_prev, hparameters, mode = \"max\"):\n", + " \"\"\"\n", + " Implements the forward pass of the pooling layer\n", + " \n", + " Arguments:\n", + " A_prev -- Input data, numpy array of shape (m, n_H_prev, n_W_prev, n_C_prev)\n", + " hparameters -- python dictionary containing \"f\" and \"stride\"\n", + " mode -- the pooling mode you would like to use, defined as a string (\"max\" or \"average\")\n", + " \n", + " Returns:\n", + " A -- output of the pool layer, a numpy array of shape (m, n_H, n_W, n_C)\n", + " cache -- cache used in the backward pass of the pooling layer, contains the input and hparameters \n", + " \"\"\"\n", + " \n", + " # Retrieve dimensions from the input shape\n", + " (m, n_H_prev, n_W_prev, n_C_prev) = A_prev.shape\n", + " \n", + " # Retrieve hyperparameters from \"hparameters\"\n", + " f = hparameters[\"f\"]\n", + " stride = hparameters[\"stride\"]\n", + " \n", + " # Define the dimensions of the output\n", + " n_H = int(1 + (n_H_prev - f) / stride)\n", + " n_W = int(1 + (n_W_prev - f) / stride)\n", + " n_C = n_C_prev\n", + " \n", + " # Initialize output matrix A\n", + " A = np.zeros((m, n_H, n_W, n_C)) \n", + " \n", + " ### START CODE HERE ###\n", + " for i in range(m): # loop over the training examples\n", + " for h in range(n_H): # loop on the vertical axis of the output volume\n", + " # Find the vertical start and end of the current \"slice\" (≈2 lines)\n", + " vert_start = h * stride\n", + " vert_end = vert_start + f\n", + " \n", + " for w in range(n_W): # loop on the horizontal axis of the output volume\n", + " # Find the vertical start and end of the current \"slice\" (≈2 lines)\n", + " horiz_start = w * stride\n", + " horiz_end = horiz_start + f\n", + " \n", + " for c in range (n_C): # loop over the channels of the output volume\n", + " \n", + " # Use the corners to define the current slice on the ith training example of A_prev, channel c. (≈1 line)\n", + " a_prev_slice = A_prev[i, vert_start:vert_end, horiz_start:horiz_end, c]\n", + " \n", + " # Compute the pooling operation on the slice. \n", + " # Use an if statement to differentiate the modes. \n", + " # Use np.max and np.mean.\n", + " if mode == \"max\":\n", + " A[i, h, w, c] = np.max(a_prev_slice)\n", + " elif mode == \"average\":\n", + " A[i, h, w, c] = np.mean(a_prev_slice)\n", + " \n", + " ### END CODE HERE ###\n", + " \n", + " # Store the input and hparameters in \"cache\" for pool_backward()\n", + " cache = (A_prev, hparameters)\n", + " \n", + " # Making sure your output shape is correct\n", + " assert(A.shape == (m, n_H, n_W, n_C))\n", + " \n", + " return A, cache" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "mode = max\n", + "A.shape = (2, 3, 3, 3)\n", + "A =\n", + " [[[[ 1.74481176 0.90159072 1.65980218]\n", + " [ 1.74481176 1.46210794 1.65980218]\n", + " [ 1.74481176 1.6924546 1.65980218]]\n", + "\n", + " [[ 1.14472371 0.90159072 2.10025514]\n", + " [ 1.14472371 0.90159072 1.65980218]\n", + " [ 1.14472371 1.6924546 1.65980218]]\n", + "\n", + " [[ 1.13162939 1.51981682 2.18557541]\n", + " [ 1.13162939 1.51981682 2.18557541]\n", + " [ 1.13162939 1.6924546 2.18557541]]]\n", + "\n", + "\n", + " [[[ 1.19891788 0.84616065 0.82797464]\n", + " [ 0.69803203 0.84616065 1.2245077 ]\n", + " [ 0.69803203 1.12141771 1.2245077 ]]\n", + "\n", + " [[ 1.96710175 0.84616065 1.27375593]\n", + " [ 1.96710175 0.84616065 1.23616403]\n", + " [ 1.62765075 1.12141771 1.2245077 ]]\n", + "\n", + " [[ 1.96710175 0.86888616 1.27375593]\n", + " [ 1.96710175 0.86888616 1.23616403]\n", + " [ 1.62765075 1.12141771 0.79280687]]]]\n", + "\n", + "mode = average\n", + "A.shape = (2, 3, 3, 3)\n", + "A =\n", + " [[[[ -3.01046719e-02 -3.24021315e-03 -3.36298859e-01]\n", + " [ 1.43310483e-01 1.93146751e-01 -4.44905196e-01]\n", + " [ 1.28934436e-01 2.22428468e-01 1.25067597e-01]]\n", + "\n", + " [[ -3.81801899e-01 1.59993515e-02 1.70562706e-01]\n", + " [ 4.73707165e-02 2.59244658e-02 9.20338402e-02]\n", + " [ 3.97048605e-02 1.57189094e-01 3.45302489e-01]]\n", + "\n", + " [[ -3.82680519e-01 2.32579951e-01 6.25997903e-01]\n", + " [ -2.47157416e-01 -3.48524998e-04 3.50539717e-01]\n", + " [ -9.52551510e-02 2.68511000e-01 4.66056368e-01]]]\n", + "\n", + "\n", + " [[[ -1.73134159e-01 3.23771981e-01 -3.43175716e-01]\n", + " [ 3.80634669e-02 7.26706274e-02 -2.30268958e-01]\n", + " [ 2.03009393e-02 1.41414785e-01 -1.23158476e-02]]\n", + "\n", + " [[ 4.44976963e-01 -2.61694592e-03 -3.10403073e-01]\n", + " [ 5.08114737e-01 -2.34937338e-01 -2.39611830e-01]\n", + " [ 1.18726772e-01 1.72552294e-01 -2.21121966e-01]]\n", + "\n", + " [[ 4.29449255e-01 8.44699612e-02 -2.72909051e-01]\n", + " [ 6.76351685e-01 -1.20138225e-01 -2.44076712e-01]\n", + " [ 1.50774518e-01 2.89111751e-01 1.23238536e-03]]]]\n" + ] + } + ], + "source": [ + "# Case 1: stride of 1\n", + "np.random.seed(1)\n", + "A_prev = np.random.randn(2, 5, 5, 3)\n", + "hparameters = {\"stride\" : 1, \"f\": 3}\n", + "\n", + "A, cache = pool_forward(A_prev, hparameters)\n", + "print(\"mode = max\")\n", + "print(\"A.shape = \" + str(A.shape))\n", + "print(\"A =\\n\", A)\n", + "print()\n", + "A, cache = pool_forward(A_prev, hparameters, mode = \"average\")\n", + "print(\"mode = average\")\n", + "print(\"A.shape = \" + str(A.shape))\n", + "print(\"A =\\n\", A)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "** Expected Output**\n", + "```\n", + "mode = max\n", + "A.shape = (2, 3, 3, 3)\n", + "A =\n", + " [[[[ 1.74481176 0.90159072 1.65980218]\n", + " [ 1.74481176 1.46210794 1.65980218]\n", + " [ 1.74481176 1.6924546 1.65980218]]\n", + "\n", + " [[ 1.14472371 0.90159072 2.10025514]\n", + " [ 1.14472371 0.90159072 1.65980218]\n", + " [ 1.14472371 1.6924546 1.65980218]]\n", + "\n", + " [[ 1.13162939 1.51981682 2.18557541]\n", + " [ 1.13162939 1.51981682 2.18557541]\n", + " [ 1.13162939 1.6924546 2.18557541]]]\n", + "\n", + "\n", + " [[[ 1.19891788 0.84616065 0.82797464]\n", + " [ 0.69803203 0.84616065 1.2245077 ]\n", + " [ 0.69803203 1.12141771 1.2245077 ]]\n", + "\n", + " [[ 1.96710175 0.84616065 1.27375593]\n", + " [ 1.96710175 0.84616065 1.23616403]\n", + " [ 1.62765075 1.12141771 1.2245077 ]]\n", + "\n", + " [[ 1.96710175 0.86888616 1.27375593]\n", + " [ 1.96710175 0.86888616 1.23616403]\n", + " [ 1.62765075 1.12141771 0.79280687]]]]\n", + "\n", + "mode = average\n", + "A.shape = (2, 3, 3, 3)\n", + "A =\n", + " [[[[ -3.01046719e-02 -3.24021315e-03 -3.36298859e-01]\n", + " [ 1.43310483e-01 1.93146751e-01 -4.44905196e-01]\n", + " [ 1.28934436e-01 2.22428468e-01 1.25067597e-01]]\n", + "\n", + " [[ -3.81801899e-01 1.59993515e-02 1.70562706e-01]\n", + " [ 4.73707165e-02 2.59244658e-02 9.20338402e-02]\n", + " [ 3.97048605e-02 1.57189094e-01 3.45302489e-01]]\n", + "\n", + " [[ -3.82680519e-01 2.32579951e-01 6.25997903e-01]\n", + " [ -2.47157416e-01 -3.48524998e-04 3.50539717e-01]\n", + " [ -9.52551510e-02 2.68511000e-01 4.66056368e-01]]]\n", + "\n", + "\n", + " [[[ -1.73134159e-01 3.23771981e-01 -3.43175716e-01]\n", + " [ 3.80634669e-02 7.26706274e-02 -2.30268958e-01]\n", + " [ 2.03009393e-02 1.41414785e-01 -1.23158476e-02]]\n", + "\n", + " [[ 4.44976963e-01 -2.61694592e-03 -3.10403073e-01]\n", + " [ 5.08114737e-01 -2.34937338e-01 -2.39611830e-01]\n", + " [ 1.18726772e-01 1.72552294e-01 -2.21121966e-01]]\n", + "\n", + " [[ 4.29449255e-01 8.44699612e-02 -2.72909051e-01]\n", + " [ 6.76351685e-01 -1.20138225e-01 -2.44076712e-01]\n", + " [ 1.50774518e-01 2.89111751e-01 1.23238536e-03]]]]\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "mode = max\n", + "A.shape = (2, 2, 2, 3)\n", + "A =\n", + " [[[[ 1.74481176 0.90159072 1.65980218]\n", + " [ 1.74481176 1.6924546 1.65980218]]\n", + "\n", + " [[ 1.13162939 1.51981682 2.18557541]\n", + " [ 1.13162939 1.6924546 2.18557541]]]\n", + "\n", + "\n", + " [[[ 1.19891788 0.84616065 0.82797464]\n", + " [ 0.69803203 1.12141771 1.2245077 ]]\n", + "\n", + " [[ 1.96710175 0.86888616 1.27375593]\n", + " [ 1.62765075 1.12141771 0.79280687]]]]\n", + "\n", + "mode = average\n", + "A.shape = (2, 2, 2, 3)\n", + "A =\n", + " [[[[-0.03010467 -0.00324021 -0.33629886]\n", + " [ 0.12893444 0.22242847 0.1250676 ]]\n", + "\n", + " [[-0.38268052 0.23257995 0.6259979 ]\n", + " [-0.09525515 0.268511 0.46605637]]]\n", + "\n", + "\n", + " [[[-0.17313416 0.32377198 -0.34317572]\n", + " [ 0.02030094 0.14141479 -0.01231585]]\n", + "\n", + " [[ 0.42944926 0.08446996 -0.27290905]\n", + " [ 0.15077452 0.28911175 0.00123239]]]]\n" + ] + } + ], + "source": [ + "# Case 2: stride of 2\n", + "np.random.seed(1)\n", + "A_prev = np.random.randn(2, 5, 5, 3)\n", + "hparameters = {\"stride\" : 2, \"f\": 3}\n", + "\n", + "A, cache = pool_forward(A_prev, hparameters)\n", + "print(\"mode = max\")\n", + "print(\"A.shape = \" + str(A.shape))\n", + "print(\"A =\\n\", A)\n", + "print()\n", + "\n", + "A, cache = pool_forward(A_prev, hparameters, mode = \"average\")\n", + "print(\"mode = average\")\n", + "print(\"A.shape = \" + str(A.shape))\n", + "print(\"A =\\n\", A)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Expected Output:**\n", + " \n", + "```\n", + "mode = max\n", + "A.shape = (2, 2, 2, 3)\n", + "A =\n", + " [[[[ 1.74481176 0.90159072 1.65980218]\n", + " [ 1.74481176 1.6924546 1.65980218]]\n", + "\n", + " [[ 1.13162939 1.51981682 2.18557541]\n", + " [ 1.13162939 1.6924546 2.18557541]]]\n", + "\n", + "\n", + " [[[ 1.19891788 0.84616065 0.82797464]\n", + " [ 0.69803203 1.12141771 1.2245077 ]]\n", + "\n", + " [[ 1.96710175 0.86888616 1.27375593]\n", + " [ 1.62765075 1.12141771 0.79280687]]]]\n", + "\n", + "mode = average\n", + "A.shape = (2, 2, 2, 3)\n", + "A =\n", + " [[[[-0.03010467 -0.00324021 -0.33629886]\n", + " [ 0.12893444 0.22242847 0.1250676 ]]\n", + "\n", + " [[-0.38268052 0.23257995 0.6259979 ]\n", + " [-0.09525515 0.268511 0.46605637]]]\n", + "\n", + "\n", + " [[[-0.17313416 0.32377198 -0.34317572]\n", + " [ 0.02030094 0.14141479 -0.01231585]]\n", + "\n", + " [[ 0.42944926 0.08446996 -0.27290905]\n", + " [ 0.15077452 0.28911175 0.00123239]]]]\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Congratulations! You have now implemented the forward passes of all the layers of a convolutional network. \n", + "\n", + "The remainder of this notebook is optional, and will not be graded.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 5 - Backpropagation in convolutional neural networks (OPTIONAL / UNGRADED)\n", + "\n", + "In modern deep learning frameworks, you only have to implement the forward pass, and the framework takes care of the backward pass, so most deep learning engineers don't need to bother with the details of the backward pass. The backward pass for convolutional networks is complicated. If you wish, you can work through this optional portion of the notebook to get a sense of what backprop in a convolutional network looks like. \n", + "\n", + "When in an earlier course you implemented a simple (fully connected) neural network, you used backpropagation to compute the derivatives with respect to the cost to update the parameters. Similarly, in convolutional neural networks you can calculate the derivatives with respect to the cost in order to update the parameters. The backprop equations are not trivial and we did not derive them in lecture, but we will briefly present them below.\n", + "\n", + "### 5.1 - Convolutional layer backward pass \n", + "\n", + "Let's start by implementing the backward pass for a CONV layer. \n", + "\n", + "#### 5.1.1 - Computing dA:\n", + "This is the formula for computing $dA$ with respect to the cost for a certain filter $W_c$ and a given training example:\n", + "\n", + "$$ dA += \\sum _{h=0} ^{n_H} \\sum_{w=0} ^{n_W} W_c \\times dZ_{hw} \\tag{1}$$\n", + "\n", + "Where $W_c$ is a filter and $dZ_{hw}$ is a scalar corresponding to the gradient of the cost with respect to the output of the conv layer Z at the hth row and wth column (corresponding to the dot product taken at the ith stride left and jth stride down). Note that at each time, we multiply the the same filter $W_c$ by a different dZ when updating dA. We do so mainly because when computing the forward propagation, each filter is dotted and summed by a different a_slice. Therefore when computing the backprop for dA, we are just adding the gradients of all the a_slices. \n", + "\n", + "In code, inside the appropriate for-loops, this formula translates into:\n", + "```python\n", + "da_prev_pad[vert_start:vert_end, horiz_start:horiz_end, :] += W[:,:,:,c] * dZ[i, h, w, c]\n", + "```\n", + "\n", + "#### 5.1.2 - Computing dW:\n", + "This is the formula for computing $dW_c$ ($dW_c$ is the derivative of one filter) with respect to the loss:\n", + "\n", + "$$ dW_c += \\sum _{h=0} ^{n_H} \\sum_{w=0} ^ {n_W} a_{slice} \\times dZ_{hw} \\tag{2}$$\n", + "\n", + "Where $a_{slice}$ corresponds to the slice which was used to generate the activation $Z_{ij}$. Hence, this ends up giving us the gradient for $W$ with respect to that slice. Since it is the same $W$, we will just add up all such gradients to get $dW$. \n", + "\n", + "In code, inside the appropriate for-loops, this formula translates into:\n", + "```python\n", + "dW[:,:,:,c] += a_slice * dZ[i, h, w, c]\n", + "```\n", + "\n", + "#### 5.1.3 - Computing db:\n", + "\n", + "This is the formula for computing $db$ with respect to the cost for a certain filter $W_c$:\n", + "\n", + "$$ db = \\sum_h \\sum_w dZ_{hw} \\tag{3}$$\n", + "\n", + "As you have previously seen in basic neural networks, db is computed by summing $dZ$. In this case, you are just summing over all the gradients of the conv output (Z) with respect to the cost. \n", + "\n", + "In code, inside the appropriate for-loops, this formula translates into:\n", + "```python\n", + "db[:,:,:,c] += dZ[i, h, w, c]\n", + "```\n", + "\n", + "**Exercise**: Implement the `conv_backward` function below. You should sum over all the training examples, filters, heights, and widths. You should then compute the derivatives using formulas 1, 2 and 3 above. " + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def conv_backward(dZ, cache):\n", + " \"\"\"\n", + " Implement the backward propagation for a convolution function\n", + " \n", + " Arguments:\n", + " dZ -- gradient of the cost with respect to the output of the conv layer (Z), numpy array of shape (m, n_H, n_W, n_C)\n", + " cache -- cache of values needed for the conv_backward(), output of conv_forward()\n", + " \n", + " Returns:\n", + " dA_prev -- gradient of the cost with respect to the input of the conv layer (A_prev),\n", + " numpy array of shape (m, n_H_prev, n_W_prev, n_C_prev)\n", + " dW -- gradient of the cost with respect to the weights of the conv layer (W)\n", + " numpy array of shape (f, f, n_C_prev, n_C)\n", + " db -- gradient of the cost with respect to the biases of the conv layer (b)\n", + " numpy array of shape (1, 1, 1, n_C)\n", + " \"\"\"\n", + " \n", + " ### START CODE HERE ###\n", + " # Retrieve information from \"cache\"\n", + " (A_prev, W, b, hparameters) = cache\n", + " \n", + " # Retrieve dimensions from A_prev's shape\n", + " (m, n_H_prev, n_W_prev, n_C_prev) = A_prev.shape\n", + " \n", + " # Retrieve dimensions from W's shape\n", + " (f, f, n_C_prev, n_C) = W.shape\n", + " \n", + " # Retrieve information from \"hparameters\"\n", + " stride = hparameters[\"stride\"]\n", + " pad = hparameters[\"pad\"]\n", + " \n", + " # Retrieve dimensions from dZ's shape\n", + " (m, n_H, n_W, n_C) = dZ.shape\n", + " \n", + " # Initialize dA_prev, dW, db with the correct shapes\n", + " dA_prev = np.zeros((m, n_H_prev, n_W_prev, n_C_prev)) \n", + " dW = np.zeros((f, f, n_C_prev, n_C))\n", + " db = np.zeros((1, 1, 1, n_C))\n", + "\n", + " # Pad A_prev and dA_prev\n", + " A_prev_pad = zero_pad(A_prev, pad)\n", + " dA_prev_pad = zero_pad(dA_prev, pad)\n", + " \n", + " for i in range(m): # loop over the training examples\n", + " \n", + " # select ith training example from A_prev_pad and dA_prev_pad\n", + " a_prev_pad = A_prev_pad[i]\n", + " da_prev_pad = dA_prev_pad[i]\n", + " \n", + " for h in range(n_H): # loop over vertical axis of the output volume\n", + " for w in range(n_W): # loop over horizontal axis of the output volume\n", + " for c in range(n_C): # loop over the channels of the output volume\n", + " \n", + " # Find the corners of the current \"slice\"\n", + " vert_start = h * stride\n", + " vert_end = vert_start + f\n", + " horiz_start = w * stride\n", + " horiz_end = horiz_start + f\n", + " \n", + " # Use the corners to define the slice from a_prev_pad\n", + " a_slice = a_prev_pad[vert_start:vert_end, horiz_start:horiz_end, :]\n", + "\n", + " # Update gradients for the window and the filter's parameters using the code formulas given above\n", + " da_prev_pad[vert_start:vert_end, horiz_start:horiz_end, :] += W[:,:,:,c] * dZ[i, h, w, c]\n", + " dW[:,:,:,c] += a_slice * dZ[i, h, w, c]\n", + " db[:,:,:,c] += dZ[i, h, w, c]\n", + " \n", + " # Set the ith training example's dA_prev to the unpadded da_prev_pad (Hint: use X[pad:-pad, pad:-pad, :])\n", + " dA_prev[i, :, :, :] = da_prev_pad[pad:-pad, pad:-pad, :]\n", + " ### END CODE HERE ###\n", + " \n", + " # Making sure your output shape is correct\n", + " assert(dA_prev.shape == (m, n_H_prev, n_W_prev, n_C_prev))\n", + " \n", + " return dA_prev, dW, db" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "dA_mean = 1.45243777754\n", + "dW_mean = 1.72699145831\n", + "db_mean = 7.83923256462\n" + ] + } + ], + "source": [ + "# We'll run conv_forward to initialize the 'Z' and 'cache_conv\",\n", + "# which we'll use to test the conv_backward function\n", + "np.random.seed(1)\n", + "A_prev = np.random.randn(10,4,4,3)\n", + "W = np.random.randn(2,2,3,8)\n", + "b = np.random.randn(1,1,1,8)\n", + "hparameters = {\"pad\" : 2,\n", + " \"stride\": 2}\n", + "Z, cache_conv = conv_forward(A_prev, W, b, hparameters)\n", + "\n", + "# Test conv_backward\n", + "dA, dW, db = conv_backward(Z, cache_conv)\n", + "print(\"dA_mean =\", np.mean(dA))\n", + "print(\"dW_mean =\", np.mean(dW))\n", + "print(\"db_mean =\", np.mean(db))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "** Expected Output: **\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "
\n", + " **dA_mean**\n", + " \n", + " 1.45243777754\n", + "
\n", + " **dW_mean**\n", + " \n", + " 1.72699145831\n", + "
\n", + " **db_mean**\n", + " \n", + " 7.83923256462\n", + "
\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 5.2 Pooling layer - backward pass\n", + "\n", + "Next, let's implement the backward pass for the pooling layer, starting with the MAX-POOL layer. Even though a pooling layer has no parameters for backprop to update, you still need to backpropagation the gradient through the pooling layer in order to compute gradients for layers that came before the pooling layer. \n", + "\n", + "### 5.2.1 Max pooling - backward pass \n", + "\n", + "Before jumping into the backpropagation of the pooling layer, you are going to build a helper function called `create_mask_from_window()` which does the following: \n", + "\n", + "$$ X = \\begin{bmatrix}\n", + "1 && 3 \\\\\n", + "4 && 2\n", + "\\end{bmatrix} \\quad \\rightarrow \\quad M =\\begin{bmatrix}\n", + "0 && 0 \\\\\n", + "1 && 0\n", + "\\end{bmatrix}\\tag{4}$$\n", + "\n", + "As you can see, this function creates a \"mask\" matrix which keeps track of where the maximum of the matrix is. True (1) indicates the position of the maximum in X, the other entries are False (0). You'll see later that the backward pass for average pooling will be similar to this but using a different mask. \n", + "\n", + "**Exercise**: Implement `create_mask_from_window()`. This function will be helpful for pooling backward. \n", + "Hints:\n", + "- [np.max()]() may be helpful. It computes the maximum of an array.\n", + "- If you have a matrix X and a scalar x: `A = (X == x)` will return a matrix A of the same size as X such that:\n", + "```\n", + "A[i,j] = True if X[i,j] = x\n", + "A[i,j] = False if X[i,j] != x\n", + "```\n", + "- Here, you don't need to consider cases where there are several maxima in a matrix." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def create_mask_from_window(x):\n", + " \"\"\"\n", + " Creates a mask from an input matrix x, to identify the max entry of x.\n", + " \n", + " Arguments:\n", + " x -- Array of shape (f, f)\n", + " \n", + " Returns:\n", + " mask -- Array of the same shape as window, contains a True at the position corresponding to the max entry of x.\n", + " \"\"\"\n", + " \n", + " ### START CODE HERE ### (≈1 line)\n", + " mask = (x == np.max(x))\n", + " ### END CODE HERE ###\n", + " \n", + " return mask" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "x = [[ 1.62434536 -0.61175641 -0.52817175]\n", + " [-1.07296862 0.86540763 -2.3015387 ]]\n", + "mask = [[ True False False]\n", + " [False False False]]\n" + ] + } + ], + "source": [ + "np.random.seed(1)\n", + "x = np.random.randn(2,3)\n", + "mask = create_mask_from_window(x)\n", + "print('x = ', x)\n", + "print(\"mask = \", mask)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Expected Output:** \n", + "\n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
\n", + "\n", + "**x =**\n", + "\n", + "\n", + "[[ 1.62434536 -0.61175641 -0.52817175]
\n", + " [-1.07296862 0.86540763 -2.3015387 ]]\n", + "\n", + "
\n", + "**mask =**\n", + "\n", + "[[ True False False]
\n", + " [False False False]]\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Why do we keep track of the position of the max? It's because this is the input value that ultimately influenced the output, and therefore the cost. Backprop is computing gradients with respect to the cost, so anything that influences the ultimate cost should have a non-zero gradient. So, backprop will \"propagate\" the gradient back to this particular input value that had influenced the cost. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 5.2.2 - Average pooling - backward pass \n", + "\n", + "In max pooling, for each input window, all the \"influence\" on the output came from a single input value--the max. In average pooling, every element of the input window has equal influence on the output. So to implement backprop, you will now implement a helper function that reflects this.\n", + "\n", + "For example if we did average pooling in the forward pass using a 2x2 filter, then the mask you'll use for the backward pass will look like: \n", + "$$ dZ = 1 \\quad \\rightarrow \\quad dZ =\\begin{bmatrix}\n", + "1/4 && 1/4 \\\\\n", + "1/4 && 1/4\n", + "\\end{bmatrix}\\tag{5}$$\n", + "\n", + "This implies that each position in the $dZ$ matrix contributes equally to output because in the forward pass, we took an average. \n", + "\n", + "**Exercise**: Implement the function below to equally distribute a value dz through a matrix of dimension shape. [Hint](https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.ones.html)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def distribute_value(dz, shape):\n", + " \"\"\"\n", + " Distributes the input value in the matrix of dimension shape\n", + " \n", + " Arguments:\n", + " dz -- input scalar\n", + " shape -- the shape (n_H, n_W) of the output matrix for which we want to distribute the value of dz\n", + " \n", + " Returns:\n", + " a -- Array of size (n_H, n_W) for which we distributed the value of dz\n", + " \"\"\"\n", + " \n", + " ### START CODE HERE ###\n", + " # Retrieve dimensions from shape (≈1 line)\n", + " (n_H, n_W) = shape\n", + " \n", + " # Compute the value to distribute on the matrix (≈1 line)\n", + " average = dz / (n_H * n_W)\n", + " \n", + " # Create a matrix where every entry is the \"average\" value (≈1 line)\n", + " a = np.ones(shape) * average\n", + " ### END CODE HERE ###\n", + " \n", + " return a" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "distributed value = [[ 0.5 0.5]\n", + " [ 0.5 0.5]]\n" + ] + } + ], + "source": [ + "a = distribute_value(2, (2,2))\n", + "print('distributed value =', a)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Expected Output**: \n", + "\n", + " \n", + " \n", + "\n", + "\n", + "\n", + "
\n", + "distributed_value =\n", + "\n", + "[[ 0.5 0.5]\n", + " \n", + "[ 0.5 0.5]]\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 5.2.3 Putting it together: Pooling backward \n", + "\n", + "You now have everything you need to compute backward propagation on a pooling layer.\n", + "\n", + "**Exercise**: Implement the `pool_backward` function in both modes (`\"max\"` and `\"average\"`). You will once again use 4 for-loops (iterating over training examples, height, width, and channels). You should use an `if/elif` statement to see if the mode is equal to `'max'` or `'average'`. If it is equal to 'average' you should use the `distribute_value()` function you implemented above to create a matrix of the same shape as `a_slice`. Otherwise, the mode is equal to '`max`', and you will create a mask with `create_mask_from_window()` and multiply it by the corresponding value of dA." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def pool_backward(dA, cache, mode = \"max\"):\n", + " \"\"\"\n", + " Implements the backward pass of the pooling layer\n", + " \n", + " Arguments:\n", + " dA -- gradient of cost with respect to the output of the pooling layer, same shape as A\n", + " cache -- cache output from the forward pass of the pooling layer, contains the layer's input and hparameters \n", + " mode -- the pooling mode you would like to use, defined as a string (\"max\" or \"average\")\n", + " \n", + " Returns:\n", + " dA_prev -- gradient of cost with respect to the input of the pooling layer, same shape as A_prev\n", + " \"\"\"\n", + " \n", + " ### START CODE HERE ###\n", + " \n", + " # Retrieve information from cache (≈1 line)\n", + " (A_prev, hparameters) = cache\n", + " \n", + " # Retrieve hyperparameters from \"hparameters\" (≈2 lines)\n", + " stride = hparameters[\"stride\"]\n", + " f = hparameters[\"f\"]\n", + " \n", + " # Retrieve dimensions from A_prev's shape and dA's shape (≈2 lines)\n", + " m, n_H_prev, n_W_prev, n_C_prev = A_prev.shape\n", + " m, n_H, n_W, n_C = dA.shape\n", + " \n", + " # Initialize dA_prev with zeros (≈1 line)\n", + " dA_prev = np.zeros(A_prev.shape)\n", + " \n", + " for i in range(m): # loop over the training examples\n", + " # select training example from A_prev (≈1 line)\n", + " a_prev = A_prev[i]\n", + " for h in range(n_H): # loop on the vertical axis\n", + " for w in range(n_W): # loop on the horizontal axis\n", + " for c in range(n_C): # loop over the channels (depth)\n", + " # Find the corners of the current \"slice\" (≈4 lines)\n", + " vert_start = h\n", + " vert_end = vert_start + f\n", + " horiz_start = w\n", + " horiz_end = horiz_start + f\n", + " \n", + " # Compute the backward propagation in both modes.\n", + " if mode == \"max\":\n", + " # Use the corners and \"c\" to define the current slice from a_prev (≈1 line)\n", + " a_prev_slice = a_prev[vert_start:vert_end, horiz_start:horiz_end, c]\n", + " # Create the mask from a_prev_slice (≈1 line)\n", + " mask = create_mask_from_window(a_prev_slice)\n", + " # Set dA_prev to be dA_prev + (the mask multiplied by the correct entry of dA) (≈1 line)\n", + " dA_prev[i, vert_start:vert_end, horiz_start:horiz_end, c] += np.multiply(mask, dA[i, h, w, c])\n", + " \n", + " elif mode == \"average\":\n", + " # Get the value a from dA (≈1 line)\n", + " da = dA[i, h, w, c]\n", + " # Define the shape of the filter as fxf (≈1 line)\n", + " shape = (f, f)\n", + " # Distribute it to get the correct slice of dA_prev. i.e. Add the distributed value of da. (≈1 line)\n", + " dA_prev[i, vert_start:vert_end, horiz_start:horiz_end, c] += distribute_value(da, shape)\n", + " \n", + " ### END CODE ###\n", + " \n", + " # Making sure your output shape is correct\n", + " assert(dA_prev.shape == A_prev.shape)\n", + " \n", + " return dA_prev" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "mode = max\n", + "mean of dA = 0.145713902729\n", + "dA_prev[1,1] = [[ 0. 0. ]\n", + " [ 5.05844394 -1.68282702]\n", + " [ 0. 0. ]]\n", + "\n", + "mode = average\n", + "mean of dA = 0.145713902729\n", + "dA_prev[1,1] = [[ 0.08485462 0.2787552 ]\n", + " [ 1.26461098 -0.25749373]\n", + " [ 1.17975636 -0.53624893]]\n" + ] + } + ], + "source": [ + "np.random.seed(1)\n", + "A_prev = np.random.randn(5, 5, 3, 2)\n", + "hparameters = {\"stride\" : 1, \"f\": 2}\n", + "A, cache = pool_forward(A_prev, hparameters)\n", + "dA = np.random.randn(5, 4, 2, 2)\n", + "\n", + "dA_prev = pool_backward(dA, cache, mode = \"max\")\n", + "print(\"mode = max\")\n", + "print('mean of dA = ', np.mean(dA))\n", + "print('dA_prev[1,1] = ', dA_prev[1,1]) \n", + "print()\n", + "dA_prev = pool_backward(dA, cache, mode = \"average\")\n", + "print(\"mode = average\")\n", + "print('mean of dA = ', np.mean(dA))\n", + "print('dA_prev[1,1] = ', dA_prev[1,1]) " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Expected Output**: \n", + "\n", + "mode = max:\n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + "\n", + "\n", + "\n", + "
\n", + "\n", + "**mean of dA =**\n", + "\n", + "\n", + "0.145713902729\n", + "\n", + "
\n", + "**dA_prev[1,1] =** \n", + "\n", + "[[ 0. 0. ]
\n", + " [ 5.05844394 -1.68282702]
\n", + " [ 0. 0. ]]\n", + "
\n", + "\n", + "mode = average\n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + "\n", + "\n", + "\n", + "
\n", + "\n", + "**mean of dA =**\n", + "\n", + "\n", + "0.145713902729\n", + "\n", + "
\n", + "**dA_prev[1,1] =** \n", + "\n", + "[[ 0.08485462 0.2787552 ]
\n", + " [ 1.26461098 -0.25749373]
\n", + " [ 1.17975636 -0.53624893]]\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Congratulations !\n", + "\n", + "Congratulations on completing this assignment. You now understand how convolutional neural networks work. You have implemented all the building blocks of a neural network. In the next assignment you will implement a ConvNet using TensorFlow." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "coursera": { + "course_slug": "convolutional-neural-networks", + "graded_item_id": "qO8ng", + "launcher_item_id": "7XDi8" + }, + "kernelspec": { + "display_name": "Python 3", + "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.6.0" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}