{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import copy\n", "from kaggle_submission import output_submission_csv\n", "from models.neural_net import NeuralNetwork\n", "from utils.data_process import get_CIFAR10_data\n", "\n", "%matplotlib inline\n", "plt.rcParams['figure.figsize'] = (10.0, 8.0) # set default size of plots\n", "\n", "# For auto-reloading external modules\n", "# See http://stackoverflow.com/questions/1907993/autoreload-of-modules-in-ipython\n", "%load_ext autoreload\n", "%autoreload 2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Loading CIFAR-10\n", "Now that you have implemented a neural network that passes gradient checks and works on toy data, you will test your network on the CIFAR-10 dataset." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "# You can change these numbers for experimentation\n", "# For submission be sure they are set to the default values\n", "TRAIN_IMAGES = 49000\n", "VAL_IMAGES = 1000\n", "TEST_IMAGES = 10000\n", "\n", "data = get_CIFAR10_data(TRAIN_IMAGES, VAL_IMAGES, TEST_IMAGES)\n", "X_train, y_train = data['X_train'], data['y_train']\n", "X_val, y_val = data['X_val'], data['y_val']\n", "X_test, y_test = data['X_test'], data['y_test']" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(49000,)\n", "(49000, 3072)\n", "(1000, 3072)\n", "(1000,)\n", "(10000, 3072)\n", "(10000,)\n" ] } ], "source": [ "# mean_image = np.mean(X_train, axis=0)\n", "# X_train -= mean_image\n", "# X_val -= mean_image\n", "# X_test -= mean_image\n", "print(y_train.shape)\n", "print(X_train.shape)\n", "print(X_val.shape)\n", "print(y_val.shape)\n", "print(X_test.shape)\n", "print(y_test.shape)\n", "# for x in y_train:\n", "# print(x)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "#set of functions needed to implement Adam\n", "def set_zero(dictio):\n", " new_dictio={}\n", " for wx in dictio:\n", " new_dictio[wx]=np.zeros(dictio[wx].shape)\n", " return new_dictio\n", "def dict_x_ele(dict1, ele):\n", " new_dictio={}\n", " for wx in dict1:\n", " new_dictio[wx]=np.multiply(dict1[wx],ele)\n", " return new_dictio\n", "def dict_by_ele(dict1, ele): \n", " new_dictio={}\n", " for wx in dict1:\n", " new_dictio[wx]=np.divide(dict1[wx],ele)\n", " return new_dictio \n", "def dict_sqr(dict1): \n", " new_dictio={}\n", " for wx in dict1:\n", " new_dictio[wx]=np.square(dict1[wx])\n", " return new_dictio \n", "def dict_sqrt(dict1): \n", " new_dictio={}\n", " for wx in dict1:\n", " new_dictio[wx]=np.sqrt(dict1[wx])\n", " return new_dictio \n", "def dict_add_ele(dict1,ele): \n", " new_dictio={}\n", " for wx in dict1:\n", " new_dictio[wx]=dict1[wx]+ele\n", " return new_dictio \n", "def dict_by_dict(dict1,dict2): \n", " new_dictio={}\n", " for wx in dict1:\n", " new_dictio[wx]=dict1[wx]/dict2[wx]\n", " return new_dictio \n", "def dict_minus_dict(dict1,dict2): \n", " new_dictio={}\n", " for wx in dict1:\n", " new_dictio[wx]=dict1[wx]-dict2[wx]\n", " return new_dictio \n", "def dict_add_dict(dict1,dict2): \n", " new_dictio={}\n", " for wx in dict1:\n", " new_dictio[wx]=dict1[wx]+dict2[wx]\n", " return new_dictio " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Train using SGD\n", "To train our network we will use SGD. In addition, we will adjust the learning rate with an exponential learning rate schedule as optimization proceeds; after each epoch, we will reduce the learning rate by multiplying it by a decay rate.\n", "\n", "You can try different numbers of layers and other hyperparameters on the CIFAR-10 dataset below." ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "epoch: 0\n", "epoch: 1\n", "epoch: 2\n", "epoch: 3\n", "epoch: 4\n", "epoch: 5\n", "epoch: 6\n", "epoch: 7\n", "epoch: 8\n", "epoch: 9\n", "epoch: 10\n", "epoch: 11\n", "epoch: 12\n", "epoch: 13\n", "epoch: 14\n", "epoch: 15\n", "epoch: 16\n", "epoch: 17\n", "epoch: 18\n", "epoch: 19\n", "epoch: 20\n", "epoch: 21\n", "epoch: 22\n", "epoch: 23\n", "epoch: 24\n", "epoch: 25\n", "epoch: 26\n", "epoch: 27\n", "epoch: 28\n", "epoch: 29\n", "epoch: 30\n", "epoch: 31\n", "epoch: 32\n", "epoch: 33\n", "epoch: 34\n", "epoch: 35\n", "epoch: 36\n", "epoch: 37\n", "epoch: 38\n", "epoch: 39\n" ] } ], "source": [ "from random import shuffle\n", "\n", "# Hyperparameters\n", "input_size = 32 * 32 * 3\n", "num_layers = 3\n", "hidden_size = 80\n", "hidden_sizes = [hidden_size] * (num_layers - 1)\n", "num_classes = 10\n", "epochs = 40\n", "batch_size = 200\n", "learning_rate = 1e-3\n", "learning_rate_decay = 0.95\n", "regularization = 0.001\n", "\n", "# Initialize a new neural network model\n", "net = NeuralNetwork(input_size, hidden_sizes, num_classes, num_layers)\n", "\n", "# Variables to store performance for each epoch\n", "train_loss = np.zeros(epochs)\n", "train_accuracy = np.zeros(epochs)\n", "val_accuracy = np.zeros(epochs)\n", "\n", "# For each epoch...\n", "for epoch in range(epochs):\n", " print('epoch:', epoch)\n", " \n", " # Shuffle the dataset\n", " ind_list = [i for i in range(X_train.shape[0])]\n", " shuffle(ind_list)\n", " X_train = X_train[ind_list,:]\n", " y_train = y_train[ind_list]\n", "\n", " \n", " # Training\n", " # For each mini-batch...\n", " #################################\n", " #Implemented the linear decay in learning rate but found that results without it were more accurate\n", " #learning_rate=learning_rate/(1+learning_rate_decay*epoch)\n", " #################################\n", " for batch in range(TRAIN_IMAGES // batch_size):\n", " batch_indices = np.random.choice(range(X_train.shape[0]), size=batch_size)\n", " # Create a mini-batch of training data and labels\n", " X_batch = X_train[batch_indices]\n", " y_batch = y_train[batch_indices]\n", " # Run the forward pass of the model to get a prediction and compute the accuracy\n", " scores=net.forward(X_batch)\n", " y_pred=np.argmax(scores, axis=1)\n", " train_accuracy[epoch] += (np.sum(y_batch==y_pred)/len(y_batch))\n", " # Run the backward pass of the model to update the weights and compute the loss\n", " loss,gradients=net.backward(X_batch,y_batch,\"SGD\",learning_rate,regularization) \n", " train_loss[epoch]+=loss\n", "\n", " # Validation\n", " # No need to run the backward pass here, just run the forward pass to compute accuracy\n", " train_accuracy[epoch]/=(TRAIN_IMAGES // batch_size)\n", " train_loss[epoch]/=(TRAIN_IMAGES // batch_size)\n", " #net.params=dict_by_ele(net.params,(TRAIN_IMAGES // batch_size))\n", " scores=net.forward(X_val)\n", " y_pred=np.argmax(scores, axis=1)\n", " val_accuracy[epoch]= (np.sum(y_val==y_pred)/len(y_val))" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 720x576 with 2 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Plot the loss function and train / validation accuracies\n", "plt.subplot(2, 1, 1)\n", "plt.plot(train_loss)\n", "plt.title('Loss history')\n", "plt.xlabel('Iteration')\n", "plt.ylabel('Loss')\n", "plt.subplot(2, 1, 2)\n", "plt.plot(train_accuracy, label='train')\n", "plt.plot(val_accuracy, label='val')\n", "plt.title('Classification accuracy history')\n", "plt.xlabel('Epoch')\n", "plt.ylabel('Classification accuracy')\n", "plt.legend()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Train using Adam\n", "Next we will train the same model using the Adam optimizer. You should take the above code for SGD and modify it to use Adam instead. For implementation details, see the lecture slides. The original paper that introduced Adam is also a good reference, and contains suggestions for default values: https://arxiv.org/pdf/1412.6980.pdf" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "epoch: 0\n", "epoch: 1\n", "epoch: 2\n", "epoch: 3\n", "epoch: 4\n", "epoch: 5\n", "epoch: 6\n", "epoch: 7\n", "epoch: 8\n", "epoch: 9\n", "epoch: 10\n", "epoch: 11\n", "epoch: 12\n", "epoch: 13\n", "epoch: 14\n", "epoch: 15\n", "epoch: 16\n", "epoch: 17\n", "epoch: 18\n", "epoch: 19\n", "epoch: 20\n", "epoch: 21\n", "epoch: 22\n", "epoch: 23\n", "epoch: 24\n", "epoch: 25\n", "epoch: 26\n", "epoch: 27\n", "epoch: 28\n", "epoch: 29\n", "epoch: 30\n", "epoch: 31\n", "epoch: 32\n", "epoch: 33\n", "epoch: 34\n", "epoch: 35\n", "epoch: 36\n", "epoch: 37\n", "epoch: 38\n", "epoch: 39\n", "epoch: 40\n", "epoch: 41\n", "epoch: 42\n", "epoch: 43\n", "epoch: 44\n", "epoch: 45\n", "epoch: 46\n", "epoch: 47\n", "epoch: 48\n", "epoch: 49\n", "epoch: 50\n", "epoch: 51\n", "epoch: 52\n", "epoch: 53\n", "epoch: 54\n", "epoch: 55\n", "epoch: 56\n", "epoch: 57\n", "epoch: 58\n", "epoch: 59\n", "epoch: 60\n", "epoch: 61\n", "epoch: 62\n", "epoch: 63\n", "epoch: 64\n", "epoch: 65\n", "epoch: 66\n", "epoch: 67\n", "epoch: 68\n", "epoch: 69\n", "epoch: 70\n", "epoch: 71\n", "epoch: 72\n", "epoch: 73\n", "epoch: 74\n", "epoch: 75\n", "epoch: 76\n", "epoch: 77\n", "epoch: 78\n", "epoch: 79\n", "epoch: 80\n", "epoch: 81\n", "epoch: 82\n", "epoch: 83\n", "epoch: 84\n", "epoch: 85\n", "epoch: 86\n", "epoch: 87\n", "epoch: 88\n", "epoch: 89\n", "epoch: 90\n", "epoch: 91\n", "epoch: 92\n", "epoch: 93\n", "epoch: 94\n", "epoch: 95\n", "epoch: 96\n", "epoch: 97\n", "epoch: 98\n", "epoch: 99\n" ] } ], "source": [ " \n", "# TODO: implement me\n", "# Hyperparameters\n", "################################################\n", "# Implementing Adam for two and three layers\n", "################################################\n", "\n", "\n", "\n", "import copy\n", "input_size = 32 * 32 * 3\n", "num_layers = 3\n", "hidden_size = 20\n", "hidden_sizes = [hidden_size] * (num_layers - 1)\n", "num_classes = 10\n", "epochs = 100\n", "batch_size = 200\n", "learning_rate = 1e-3 #0.025 #1e-3\n", "learning_rate_decay = 0.95\n", "regularization = 0.009\n", "betas=(0.9, 0.999)\n", "epsilon=1e-8\n", "# Initialize a new neural network model\n", "net = NeuralNetwork(input_size, hidden_sizes, num_classes, num_layers)\n", "\n", "# Variables to store performance for each epoch\n", "train_loss_adam = np.zeros(epochs)\n", "train_accuracy_adam = np.zeros(epochs)\n", "val_accuracy_adam = np.zeros(epochs)\n", " \n", "w = copy.deepcopy(net.params)\n", "m = set_zero(w) #creates a new dictionary which has the same size/elemets as the one passesed all set to zero\n", "v = set_zero(w)\n", "w_prev=set_zero(w)\n", "v_prev=set_zero(w)\n", "m_prev=set_zero(w)\n", "# For each epoch...\n", "for epoch in range(epochs):\n", " print('epoch:', epoch)\n", "\n", " ind_list = [i for i in range(X_train.shape[0])]\n", " shuffle(ind_list)\n", " X_train = X_train[ind_list,:]\n", " y_train = y_train[ind_list]\n", " for batch in range(TRAIN_IMAGES // batch_size):\n", " # Create a mini-batch of training data and labels\n", " batch_indices = np.random.choice(range(X_train.shape[0]), size=batch_size)\n", " X_batch = X_train[batch_indices]\n", " y_batch = y_train[batch_indices]\n", " # Run the forward pass of the model to get a prediction and compute the accuracy\n", " scores=net.forward(X_batch)\n", " y_pred=np.argmax(scores, axis=1)\n", " train_accuracy_adam[epoch] += (np.sum(y_batch==y_pred)/len(y_batch))\n", " \n", " # Run the backward pass of the model to update the weights and compute the loss\n", " loss, gradients=net.backward(X_batch,y_batch,learning_rate,regularization)\n", " \n", " m=dict_add_dict(dict_x_ele(m_prev,betas[0]),dict_x_ele(gradients,(1-betas[0])))\n", " \n", " v=dict_add_dict(dict_x_ele(v_prev,betas[1]),dict_x_ele(dict_sqr(gradients),(1-betas[1])))\n", " \n", " m_new=dict_by_ele(m,(1-betas[0]))\n", " v_new=dict_by_ele(v,(1-betas[1]))\n", " \n", " w=dict_minus_dict(w_prev,dict_by_dict(dict_x_ele(m_new,learning_rate),(dict_add_ele(dict_sqrt(v_new),epsilon))))\n", " net.params=copy.copy(w)\n", " #w=w_prev-(alpha*m_new/(np.sqrt(v_new)+epsilon))\n", " \n", " w_prev=copy.copy(w)\n", " v_prev=copy.copy(v)\n", " m_prev=copy.copy(m)\n", "\n", " train_loss_adam[epoch]+=loss\n", "\n", " # Validation\n", " # No need to run the backward pass here, just run the forward pass to compute accuracy\n", " train_accuracy_adam[epoch]/=(TRAIN_IMAGES // batch_size)\n", " train_loss_adam[epoch]/=(TRAIN_IMAGES // batch_size)\n", " #net.params=dict_by_ele(net.params,(TRAIN_IMAGES // batch_size))\n", " scores=net.forward(X_val)\n", " y_pred=np.argmax(scores, axis=1)\n", " val_accuracy_adam[epoch]= (np.sum(y_val==y_pred)/len(y_val))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Graph loss and train/val accuracies\n", "\n", "Examining the loss graph along with the train and val accuracy graphs should help you gain some intuition for the hyperparameters you should try in the hyperparameter tuning below. It should also help with debugging any issues you might have with your network." ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 720x576 with 2 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Plot the loss function and train / validation accuracies\n", "plt.subplot(2, 1, 1)\n", "plt.plot(train_loss_adam)\n", "plt.title('Loss history')\n", "plt.xlabel('Iteration')\n", "plt.ylabel('Loss')\n", "plt.subplot(2, 1, 2)\n", "plt.plot(train_accuracy_adam, label='train')\n", "plt.plot(val_accuracy_adam, label='val')\n", "plt.title('Classification accuracy history')\n", "plt.xlabel('Epoch')\n", "plt.ylabel('Classification accuracy')\n", "plt.legend()\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#Tuning SGD 2 layers\n", "\n", "\n", "##################################\n", "# Tuninig in the various hyper parameters for the SGD update\n", "##################################\n", "from random import shuffle\n", "\n", "# Hyperparameters\n", "\n", "# hidden_size = 20\n", "# epochs = 10\n", "# batch_size = 200\n", "# learning_rate = 1e-3\n", "# regularization = 0.1\n", "\n", "###########################################\n", "epochs_list=[100,150]\n", "batch_size_list=[50,200,400,1000]\n", "hidden_size_list=[20,40,80,120]\n", "learning_rate_list =[1e-1,1e-2,1e-3]\n", "regularization_list =[0.95,0.4,0.05,0.005]\n", "###########################################\n", "\n", "\n", "input_size = 32 * 32 * 3\n", "num_layers = 2\n", "num_classes = 10\n", "learning_rate_decay = 0.95\n", "\n", "# Initialize a new neural network model\n", "\n", "\n", "# Variables to store performance for each epoch\n", "\n", "\n", "# For each epoch...\n", "print(\"Dataset batch_size hidden_sizes regulariztion epochs accuracy \")\n", "for batch_size in batch_size_list:\n", " for hidden_size in hidden_size_list:\n", " hidden_sizes = [hidden_size] * (num_layers - 1)\n", " for learning_rate in learning_rate_list:\n", " for regularization in regularization_list:\n", " ff=0\n", " for epoch in range(epochs_list[ff]):\n", " net = NeuralNetwork(input_size, hidden_sizes, num_classes, num_layers)\n", " test_accuracy=0\n", " train_loss = 0\n", " train_accuracy = 0\n", " val_accuracy = 0\n", " #################################\n", " #Implemented the linear decay in learning rate but found that results without it were more accurate\n", " #learning_rate=learning_rate/(1+learning_rate_decay*epoch)\n", " #################################\n", " # Shuffle the dataset\n", " ind_list = [i for i in range(X_train.shape[0])]\n", " shuffle(ind_list)\n", " X_train = X_train[ind_list,:]\n", " y_train = y_train[ind_list]\n", " # Training\n", " # For each mini-batch...\n", " for batch in range(TRAIN_IMAGES // batch_size):\n", " batch_indices = np.random.choice(range(X_train.shape[0]), size=batch_size)\n", " # Create a mini-batch of training data and labels\n", " X_batch = X_train[batch_indices]\n", " y_batch = y_train[batch_indices]\n", " # Run the forward pass of the model to get a prediction and compute the accuracy\n", " scores=net.forward(X_batch)\n", " y_pred=np.argmax(scores, axis=1)\n", " train_accuracy+= (np.sum(y_batch==y_pred)/len(y_batch))\n", " # Run the backward pass of the model to update the weights and compute the loss\n", " loss,gradients=net.backward(X_batch,y_batch,\"SGD\",learning_rate,regularization) \n", " train_loss+=loss\n", "\n", " # Validation\n", " # No need to run the backward pass here, just run the forward pass to compute accuracy\n", " train_accuracy/=(TRAIN_IMAGES // batch_size)\n", " train_loss/=(TRAIN_IMAGES // batch_size)\n", " #net.params=dict_by_ele(net.params,(TRAIN_IMAGES // batch_size))\n", " scores=net.forward(X_val)\n", " y_pred=np.argmax(scores, axis=1)\n", " val_accuracy= (np.sum(y_val==y_pred)/len(y_val))\n", " scores=net.forward(X_test)\n", " y_pred=np.argmax(scores, axis=1)\n", " test_accuracy= (np.sum(y_test==y_pred)/len(y_test))\n", " print(\"Trainng %f %f %f %f %f\" % (batch_size, hidden_size, regularization, epoch, train_accuracy))\n", " print(\"Validation %f %f %f %f %f\" % (batch_size, hidden_size, regularization, epoch, val_accuracy))\n", " print(\"Test %f %f %f %f %f\" % (batch_size, hidden_size, regularization, epoch, test_accuracy))\n", " ff+=1\n" ] }, { "cell_type": "code", "execution_count": 51, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "epoch: 0\n", "0.2041020408163263 0.251 0.2647\n", "epoch: 1\n", "0.2922857142857144 0.306 0.3137\n", "epoch: 2\n", "0.324061224489796 0.336 0.344\n", "epoch: 3\n", "0.3506122448979591 0.361 0.3594\n", "epoch: 4\n", "0.3654285714285716 0.372 0.3723\n", "epoch: 5\n", "0.37651020408163277 0.386 0.3801\n", "epoch: 6\n", "0.38544897959183666 0.391 0.3878\n", "epoch: 7\n", "0.39863265306122464 0.4 0.3933\n", "epoch: 8\n", "0.40479591836734724 0.409 0.3981\n", "epoch: 9\n", "0.41183673469387755 0.406 0.4021\n", "epoch: 10\n", "0.41457142857142865 0.417 0.4078\n", "epoch: 11\n", "0.41761224489795923 0.418 0.4142\n", "epoch: 12\n", "0.42463265306122466 0.42 0.4181\n", "epoch: 13\n", "0.4261224489795919 0.42 0.4195\n", "epoch: 14\n", "0.42422448979591865 0.426 0.4215\n", "epoch: 15\n", "0.430061224489796 0.43 0.4246\n", "epoch: 16\n", "0.43473469387755104 0.432 0.4284\n", "epoch: 17\n", "0.43936734693877555 0.43 0.4321\n", "epoch: 18\n", "0.43771428571428556 0.429 0.434\n", "epoch: 19\n", "0.4422857142857143 0.435 0.4362\n", "epoch: 20\n", "0.4471632653061229 0.432 0.4376\n", "epoch: 21\n", "0.4463265306122449 0.431 0.4397\n", "epoch: 22\n", "0.4506734693877552 0.425 0.442\n", "epoch: 23\n", "0.44991836734693885 0.435 0.4407\n", "epoch: 24\n", "0.45220408163265274 0.436 0.444\n", "epoch: 25\n", "0.45530612244897933 0.439 0.4447\n", "epoch: 26\n", "0.4576734693877552 0.437 0.4468\n", "epoch: 27\n", "0.4588163265306126 0.442 0.4476\n", "epoch: 28\n", "0.4579999999999998 0.442 0.449\n", "epoch: 29\n", "0.4572448979591832 0.442 0.4507\n", "epoch: 30\n", "0.46595918367346933 0.44 0.4539\n", "epoch: 31\n", "0.46289795918367344 0.439 0.4538\n", "epoch: 32\n", "0.46410204081632683 0.448 0.4558\n", "epoch: 33\n", "0.463142857142857 0.445 0.457\n", "epoch: 34\n", "0.4654897959183671 0.446 0.4581\n", "epoch: 35\n", "0.47089795918367316 0.451 0.4587\n", "epoch: 36\n", "0.4713469387755101 0.451 0.4588\n", "epoch: 37\n", "0.4708979591836729 0.446 0.4594\n", "epoch: 38\n", "0.4755714285714285 0.451 0.4609\n", "epoch: 39\n", "0.47193877551020424 0.452 0.4621\n", "epoch: 40\n", "0.47465306122448964 0.456 0.4625\n", "epoch: 41\n", "0.4757755102040817 0.459 0.462\n", "epoch: 42\n", "0.47279591836734675 0.459 0.4612\n", "epoch: 43\n", "0.47730612244897924 0.46 0.4644\n", "epoch: 44\n", "0.48104081632653034 0.458 0.4664\n", "epoch: 45\n", "0.47916326530612213 0.456 0.4665\n", "epoch: 46\n", "0.48048979591836694 0.461 0.466\n", "epoch: 47\n", "0.479734693877551 0.457 0.4684\n", "epoch: 48\n", "0.4755714285714285 0.466 0.4666\n", "epoch: 49\n", "0.48024489795918335 0.459 0.4668\n", "epoch: 50\n", "0.4800204081632653 0.463 0.4665\n", "epoch: 51\n", "0.4849795918367344 0.461 0.4693\n", "epoch: 52\n", "0.4856734693877547 0.465 0.4697\n", "epoch: 53\n", "0.48389795918367323 0.466 0.4693\n", "epoch: 54\n", "0.486530612244898 0.462 0.4699\n", "epoch: 55\n", "0.4885306122448983 0.469 0.4692\n", "epoch: 56\n", "0.48626530612244884 0.463 0.4712\n", "epoch: 57\n", "0.4895306122448981 0.466 0.4705\n", "epoch: 58\n", "0.48936734693877526 0.467 0.4699\n", "epoch: 59\n", "0.4908571428571428 0.472 0.4721\n", "epoch: 60\n", "0.49236734693877526 0.476 0.4718\n", "epoch: 61\n", "0.4887551020408162 0.474 0.4721\n", "epoch: 62\n", "0.492428571428571 0.476 0.473\n", "epoch: 63\n", "0.4893469387755097 0.476 0.4732\n", "epoch: 64\n", "0.4900816326530613 0.478 0.476\n", "epoch: 65\n", "0.48910204081632647 0.479 0.4741\n", "epoch: 66\n", "0.49491836734693856 0.479 0.4747\n", "epoch: 67\n", "0.49271428571428555 0.485 0.477\n", "epoch: 68\n", "0.4953673469387755 0.473 0.4767\n", "epoch: 69\n", "0.49430612244897976 0.482 0.4754\n", "epoch: 70\n", "0.49914285714285717 0.482 0.4759\n", "epoch: 71\n", "0.4960612244897959 0.484 0.477\n", "epoch: 72\n", "0.4959387755102039 0.479 0.4762\n", "epoch: 73\n", "0.4966938775510202 0.485 0.4786\n", "epoch: 74\n", "0.5010816326530613 0.483 0.4776\n", "epoch: 75\n", "0.4965306122448976 0.485 0.4803\n", "epoch: 76\n", "0.49840816326530624 0.486 0.4804\n", "epoch: 77\n", "0.5008571428571428 0.482 0.48\n", "epoch: 78\n", "0.503591836734694 0.484 0.4785\n", "epoch: 79\n", "0.5052653061224494 0.485 0.4809\n", "epoch: 80\n", "0.49826530612244896 0.481 0.4795\n", "epoch: 81\n", "0.5070000000000001 0.485 0.4809\n", "epoch: 82\n", "0.5025918367346941 0.484 0.482\n", "epoch: 83\n", "0.505204081632653 0.484 0.4814\n", "epoch: 84\n", "0.5076938775510205 0.485 0.48\n", "epoch: 85\n", "0.5027142857142856 0.484 0.483\n", "epoch: 86\n", "0.5053673469387753 0.485 0.4835\n", "epoch: 87\n", "0.5043265306122452 0.485 0.485\n", "epoch: 88\n", "0.5063265306122445 0.491 0.4832\n", "epoch: 89\n", "0.5072857142857149 0.492 0.484\n", "epoch: 90\n", "0.5053469387755102 0.498 0.4841\n", "epoch: 91\n", "0.5072448979591839 0.495 0.4866\n", "epoch: 92\n", "0.5118163265306123 0.493 0.4862\n", "epoch: 93\n", "0.5103469387755101 0.497 0.4883\n", "epoch: 94\n", "0.5114897959183673 0.494 0.4855\n", "epoch: 95\n", "0.5143877551020408 0.49 0.4863\n", "epoch: 96\n", "0.5137755102040817 0.492 0.4835\n", "epoch: 97\n", "0.5129387755102041 0.49 0.4839\n", "epoch: 98\n", "0.5122857142857141 0.499 0.487\n", "epoch: 99\n", "0.5127755102040817 0.488 0.484\n", "epoch: 100\n", "0.5122857142857143 0.492 0.4863\n", "epoch: 101\n", "0.5147142857142856 0.489 0.4851\n", "epoch: 102\n", "0.5141632653061226 0.489 0.4888\n", "epoch: 103\n", "0.5155510204081638 0.496 0.4877\n", "epoch: 104\n", "0.5175102040816327 0.494 0.4878\n", "epoch: 105\n", "0.5196938775510206 0.5 0.4889\n", "epoch: 106\n", "0.5107959183673473 0.499 0.4871\n", "epoch: 107\n", "0.5146122448979594 0.5 0.4908\n", "epoch: 108\n", "0.5151020408163267 0.497 0.4906\n", "epoch: 109\n", "0.5157142857142858 0.497 0.4894\n", "epoch: 110\n", "0.5190408163265308 0.498 0.4914\n", "epoch: 111\n", "0.5189591836734696 0.501 0.491\n", "epoch: 112\n", "0.5171632653061226 0.501 0.4891\n", "epoch: 113\n", "0.5213877551020408 0.496 0.4892\n", "epoch: 114\n", "0.5198367346938778 0.501 0.4899\n", "epoch: 115\n", "0.5218571428571428 0.504 0.4896\n", "epoch: 116\n", "0.5186938775510206 0.5 0.491\n", "epoch: 117\n", "0.5202653061224489 0.496 0.4924\n", "epoch: 118\n", "0.5245102040816326 0.502 0.4929\n", "epoch: 119\n", "0.5210204081632653 0.5 0.4917\n", "epoch: 120\n", "0.5221632653061226 0.505 0.4937\n", "epoch: 121\n", "0.5210204081632651 0.504 0.4937\n", "epoch: 122\n", "0.5235102040816327 0.5 0.4921\n", "epoch: 123\n", "0.5234897959183673 0.5 0.4927\n", "epoch: 124\n", "0.5235510204081634 0.499 0.4946\n", "epoch: 125\n", "0.5232653061224489 0.501 0.4964\n", "epoch: 126\n", "0.5236326530612248 0.503 0.4941\n", "epoch: 127\n", "0.5211020408163265 0.495 0.4957\n", "epoch: 128\n", "0.524 0.5 0.4959\n", "epoch: 129\n", "0.5253469387755101 0.502 0.4943\n", "epoch: 130\n", "0.5254081632653061 0.507 0.4949\n", "epoch: 131\n", "0.5219183673469389 0.504 0.4958\n", "epoch: 132\n", "0.5266938775510205 0.508 0.4933\n", "epoch: 133\n", "0.5268367346938777 0.505 0.4961\n", "epoch: 134\n", "0.5275510204081633 0.503 0.4961\n", "epoch: 135\n", "0.5196530612244902 0.501 0.4974\n", "epoch: 136\n", "0.525775510204082 0.51 0.4955\n", "epoch: 137\n", "0.5292857142857144 0.51 0.4978\n", "epoch: 138\n", "0.5243877551020409 0.504 0.4966\n", "epoch: 139\n", "0.5269387755102043 0.508 0.4974\n", "epoch: 140\n", "0.5236938775510205 0.511 0.4983\n", "epoch: 141\n", "0.5322244897959185 0.507 0.4981\n", "epoch: 142\n", "0.5298979591836734 0.506 0.4993\n", "epoch: 143\n", "0.5292857142857145 0.509 0.497\n", "epoch: 144\n", "0.5299387755102043 0.503 0.4977\n", "epoch: 145\n", "0.528326530612245 0.501 0.4994\n", "epoch: 146\n", "0.5264285714285714 0.504 0.4997\n", "epoch: 147\n", "0.5258775510204083 0.509 0.4998\n", "epoch: 148\n", "0.5314897959183674 0.512 0.4985\n", "epoch: 149\n", "0.5305510204081634 0.503 0.5001\n" ] } ], "source": [ "#Tuning SGD\n", "\n", "##########################################\n", "# Best two layer SGD NN\n", "##########################################\n", "\n", "\n", "from random import shuffle\n", "\n", "# Hyperparameters\n", "input_size = 32 * 32 * 3\n", "num_layers = 2\n", "hidden_size = 80#80#20\n", "hidden_sizes = [hidden_size] * (num_layers - 1)\n", "num_classes = 10\n", "epochs = 150 #200\n", "batch_size = 200\n", "learning_rate = 1e-3#0.0001#1e-3 the best #0.5 NoWrk #0.05 NoWrk\n", "learning_rate_decay = 0.95\n", "regularization = 0.009 #0.1 #0.009 worked really well with 1e-3 and 80 hidden sizes\n", "\n", "# Initialize a new neural network model\n", "net = NeuralNetwork(input_size, hidden_sizes, num_classes, num_layers)\n", "\n", "# Variables to store performance for each epoch\n", "train_loss = np.zeros(epochs)\n", "train_accuracy = np.zeros(epochs)\n", "val_accuracy = np.zeros(epochs)\n", "test_accuracy = np.zeros(epochs)\n", "# For each epoch...\n", "for epoch in range(epochs):\n", " print('epoch:', epoch)\n", " \n", " # Shuffle the dataset\n", " ind_list = [i for i in range(X_train.shape[0])]\n", " shuffle(ind_list)\n", " X_train = X_train[ind_list,:]\n", " y_train = y_train[ind_list]\n", "\n", " \n", " # Training\n", " # For each mini-batch...\n", " #################################\n", " #Implemented the linear decay in learning rate but found that results without it were more accurate\n", " #learning_rate=learning_rate/(1+learning_rate_decay*epoch)\n", " #################################\n", " for batch in range(TRAIN_IMAGES // batch_size):\n", " batch_indices = np.random.choice(range(X_train.shape[0]), size=batch_size)\n", " # Create a mini-batch of training data and labels\n", " X_batch = X_train[batch_indices]\n", " y_batch = y_train[batch_indices]\n", " # Run the forward pass of the model to get a prediction and compute the accuracy\n", " scores=net.forward(X_batch)\n", " y_pred=np.argmax(scores, axis=1)\n", " train_accuracy[epoch] += (np.sum(y_batch==y_pred)/len(y_batch))\n", " # Run the backward pass of the model to update the weights and compute the loss\n", " loss,gradients=net.backward(X_batch,y_batch,\"SGD\",learning_rate,regularization) \n", " train_loss[epoch]+=loss\n", "\n", " # Validation\n", " # No need to run the backward pass here, just run the forward pass to compute accuracy\n", " \n", " train_accuracy[epoch]/=(TRAIN_IMAGES // batch_size)\n", " train_loss[epoch]/=(TRAIN_IMAGES // batch_size)\n", " \n", " scores=net.forward(X_val)\n", " y_pred=np.argmax(scores, axis=1)\n", " val_accuracy[epoch]= (np.sum(y_val==y_pred)/len(y_val))\n", " \n", " scores=net.forward(X_test)\n", " y_pred=np.argmax(scores, axis=1)\n", " test_accuracy[epoch]= (np.sum(y_test==y_pred)/len(y_test))\n", " print(train_accuracy[epoch],val_accuracy[epoch],test_accuracy[epoch])" ] }, { "cell_type": "code", "execution_count": 52, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 720x576 with 2 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "0.5322244897959185\n", "0.5001\n" ] } ], "source": [ "# Plot the loss function and train / validation accuracies\n", "plt.subplot(2, 1, 1)\n", "plt.plot(train_loss)\n", "plt.title('Loss history')\n", "plt.xlabel('Iteration')\n", "plt.ylabel('Loss')\n", "plt.subplot(2, 1, 2)\n", "plt.plot(train_accuracy, label='train')\n", "plt.plot(val_accuracy, label='val')\n", "plt.title('Classification accuracy history')\n", "plt.xlabel('Epoch')\n", "plt.ylabel('Classification accuracy')\n", "plt.legend()\n", "plt.show()\n", "print(max(train_accuracy))\n", "print(max(test_accuracy))\n", "#print(train_accuracy)" ] }, { "cell_type": "code", "execution_count": 53, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.5001\n" ] } ], "source": [ "scores=net.forward(X_test)\n", "y_pred=np.argmax(scores, axis=1)\n", "test_accuracy= (np.sum(y_test==y_pred)/len(y_test))\n", "print(test_accuracy)\n", "best_2layer_sgd_prediction=y_pred\n", "output_submission_csv('kaggle/nn_2layer_sgd_submission.csv', best_2layer_sgd_prediction)" ] }, { "cell_type": "code", "execution_count": 54, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "epoch: 0\n", "0.19463265306122451 0.26 0.2444\n", "epoch: 1\n", "0.2728163265306122 0.317 0.2925\n", "epoch: 2\n", "0.3068571428571429 0.335 0.3243\n", "epoch: 3\n", "0.331938775510204 0.356 0.3442\n", "epoch: 4\n", "0.348918367346939 0.367 0.3548\n", "epoch: 5\n", "0.3596326530612247 0.384 0.361\n", "epoch: 6\n", "0.3712244897959183 0.389 0.3711\n", "epoch: 7\n", "0.3759387755102042 0.393 0.3775\n", "epoch: 8\n", "0.3809795918367347 0.393 0.3825\n", "epoch: 9\n", "0.39179591836734695 0.401 0.3885\n", "epoch: 10\n", "0.3929795918367347 0.4 0.3929\n", "epoch: 11\n", "0.3952653061224488 0.408 0.3987\n", "epoch: 12\n", "0.40508163265306135 0.412 0.403\n", "epoch: 13\n", "0.4095510204081631 0.415 0.4064\n", "epoch: 14\n", "0.4113265306122451 0.423 0.4083\n", "epoch: 15\n", "0.41936734693877575 0.419 0.413\n", "epoch: 16\n", "0.4257142857142858 0.419 0.4153\n", "epoch: 17\n", "0.42418367346938757 0.421 0.4158\n", "epoch: 18\n", "0.4258367346938774 0.419 0.4177\n", "epoch: 19\n", "0.4247551020408159 0.421 0.4225\n", "epoch: 20\n", "0.4336734693877548 0.433 0.4234\n", "epoch: 21\n", "0.4336122448979591 0.432 0.4265\n", "epoch: 22\n", "0.43891836734693895 0.427 0.4295\n", "epoch: 23\n", "0.44159183673469365 0.439 0.4296\n", "epoch: 24\n", "0.4410408163265303 0.435 0.4319\n", "epoch: 25\n", "0.4465510204081629 0.435 0.4351\n", "epoch: 26\n", "0.4500816326530611 0.434 0.4369\n", "epoch: 27\n", "0.4462448979591838 0.449 0.4384\n", "epoch: 28\n", "0.45195918367346904 0.443 0.441\n", "epoch: 29\n", "0.4557959183673466 0.442 0.443\n", "epoch: 30\n", "0.45814285714285663 0.444 0.4455\n", "epoch: 31\n", "0.45593877551020406 0.444 0.4456\n", "epoch: 32\n", "0.460938775510204 0.441 0.4448\n", "epoch: 33\n", "0.4594285714285712 0.442 0.4469\n", "epoch: 34\n", "0.46640816326530615 0.446 0.449\n", "epoch: 35\n", "0.46861224489795916 0.45 0.4523\n", "epoch: 36\n", "0.4680612244897957 0.448 0.4525\n", "epoch: 37\n", "0.46816326530612223 0.447 0.4523\n", "epoch: 38\n", "0.4692244897959177 0.444 0.4507\n", "epoch: 39\n", "0.4698367346938773 0.45 0.4528\n", "epoch: 40\n", "0.4747142857142855 0.446 0.454\n", "epoch: 41\n", "0.47242857142857164 0.455 0.4536\n", "epoch: 42\n", "0.47306122448979576 0.457 0.4547\n", "epoch: 43\n", "0.47663265306122465 0.456 0.4542\n", "epoch: 44\n", "0.479204081632653 0.45 0.4561\n", "epoch: 45\n", "0.47479591836734686 0.447 0.4569\n", "epoch: 46\n", "0.47993877551020436 0.451 0.457\n", "epoch: 47\n", "0.4854489795918366 0.457 0.4592\n", "epoch: 48\n", "0.48048979591836716 0.468 0.4597\n", "epoch: 49\n", "0.4879591836734693 0.458 0.4601\n", "epoch: 50\n", "0.49012244897959156 0.461 0.4584\n", "epoch: 51\n", "0.48691836734693894 0.458 0.4606\n", "epoch: 52\n", "0.49002040816326503 0.458 0.4639\n", "epoch: 53\n", "0.4930408163265305 0.462 0.4653\n", "epoch: 54\n", "0.4922448979591837 0.464 0.4651\n", "epoch: 55\n", "0.48826530612244934 0.466 0.4661\n", "epoch: 56\n", "0.49557142857142833 0.465 0.4662\n", "epoch: 57\n", "0.4978367346938775 0.471 0.4666\n", "epoch: 58\n", "0.4997755102040817 0.46 0.4666\n", "epoch: 59\n", "0.4943265306122448 0.477 0.4686\n", "epoch: 60\n", "0.496489795918367 0.477 0.4672\n", "epoch: 61\n", "0.4982653061224488 0.48 0.4695\n", "epoch: 62\n", "0.503020408163265 0.483 0.4704\n", "epoch: 63\n", "0.5017346938775507 0.474 0.4707\n", "epoch: 64\n", "0.5011224489795916 0.475 0.4704\n", "epoch: 65\n", "0.5058367346938772 0.475 0.4706\n", "epoch: 66\n", "0.5021020408163263 0.477 0.473\n", "epoch: 67\n", "0.5055714285714284 0.479 0.4735\n", "epoch: 68\n", "0.5046938775510204 0.478 0.4713\n", "epoch: 69\n", "0.5118367346938774 0.481 0.4717\n", "epoch: 70\n", "0.5102857142857142 0.475 0.4754\n", "epoch: 71\n", "0.5117551020408162 0.481 0.4742\n", "epoch: 72\n", "0.5113265306122448 0.488 0.4753\n", "epoch: 73\n", "0.5085510204081632 0.487 0.4756\n", "epoch: 74\n", "0.5156938775510206 0.479 0.4782\n", "epoch: 75\n", "0.5172653061224491 0.49 0.4772\n", "epoch: 76\n", "0.5164489795918371 0.489 0.4759\n", "epoch: 77\n", "0.5159591836734694 0.487 0.4775\n", "epoch: 78\n", "0.5187142857142856 0.49 0.4753\n", "epoch: 79\n", "0.5168775510204079 0.489 0.4783\n", "epoch: 80\n", "0.520326530612245 0.491 0.4755\n", "epoch: 81\n", "0.5216326530612246 0.491 0.4774\n", "epoch: 82\n", "0.5221428571428575 0.493 0.4801\n", "epoch: 83\n", "0.5206530612244898 0.494 0.4794\n", "epoch: 84\n", "0.5278979591836737 0.493 0.4816\n", "epoch: 85\n", "0.5325510204081634 0.494 0.4814\n", "epoch: 86\n", "0.5229183673469391 0.491 0.4804\n", "epoch: 87\n", "0.5280816326530614 0.493 0.4798\n", "epoch: 88\n", "0.5270612244897956 0.499 0.4823\n", "epoch: 89\n", "0.5332040816326531 0.493 0.4817\n", "epoch: 90\n", "0.5295306122448985 0.497 0.4821\n", "epoch: 91\n", "0.5300408163265309 0.502 0.4821\n", "epoch: 92\n", "0.5340612244897963 0.496 0.4836\n", "epoch: 93\n", "0.5356326530612243 0.501 0.4814\n", "epoch: 94\n", "0.5348163265306125 0.494 0.4849\n", "epoch: 95\n", "0.5375306122448983 0.494 0.4846\n", "epoch: 96\n", "0.535591836734694 0.502 0.486\n", "epoch: 97\n", "0.5373061224489797 0.505 0.4856\n", "epoch: 98\n", "0.5383061224489798 0.503 0.4868\n", "epoch: 99\n", "0.5400204081632658 0.501 0.4868\n", "epoch: 100\n", "0.539265306122449 0.506 0.4906\n", "epoch: 101\n", "0.5474081632653063 0.502 0.488\n", "epoch: 102\n", "0.544918367346939 0.505 0.4895\n", "epoch: 103\n", "0.5397551020408164 0.496 0.4885\n", "epoch: 104\n", "0.5489183673469389 0.505 0.4902\n", "epoch: 105\n", "0.5432653061224489 0.508 0.4897\n", "epoch: 106\n", "0.5459387755102043 0.506 0.4924\n", "epoch: 107\n", "0.5462448979591837 0.507 0.4943\n", "epoch: 108\n", "0.5487346938775507 0.512 0.4935\n", "epoch: 109\n", "0.5507551020408166 0.517 0.493\n", "epoch: 110\n", "0.5485306122448982 0.51 0.4924\n", "epoch: 111\n", "0.5474285714285719 0.512 0.4937\n", "epoch: 112\n", "0.5536530612244899 0.512 0.4948\n", "epoch: 113\n", "0.5512448979591843 0.507 0.4958\n", "epoch: 114\n", "0.5536734693877555 0.508 0.4932\n", "epoch: 115\n", "0.5486530612244901 0.509 0.4961\n", "epoch: 116\n", "0.5563877551020405 0.509 0.4959\n", "epoch: 117\n", "0.5536938775510207 0.512 0.4956\n", "epoch: 118\n", "0.5575714285714285 0.514 0.497\n", "epoch: 119\n", "0.5513061224489794 0.516 0.4959\n", "epoch: 120\n", "0.5569591836734695 0.518 0.4994\n", "epoch: 121\n", "0.5545510204081631 0.515 0.4999\n", "epoch: 122\n", "0.5575510204081632 0.518 0.5007\n", "epoch: 123\n", "0.5585102040816328 0.516 0.5005\n", "epoch: 124\n", "0.5574285714285712 0.52 0.4998\n", "epoch: 125\n", "0.559612244897959 0.51 0.4993\n", "epoch: 126\n", "0.558795918367347 0.516 0.5004\n", "epoch: 127\n", "0.5639387755102041 0.513 0.5036\n", "epoch: 128\n", "0.561979591836735 0.52 0.5023\n", "epoch: 129\n", "0.5646122448979594 0.519 0.5025\n", "epoch: 130\n", "0.56630612244898 0.514 0.5035\n", "epoch: 131\n", "0.5675102040816329 0.513 0.503\n", "epoch: 132\n", "0.5657755102040818 0.515 0.5039\n", "epoch: 133\n", "0.5656938775510205 0.52 0.504\n", "epoch: 134\n", "0.564530612244898 0.52 0.5031\n", "epoch: 135\n", "0.5640408163265305 0.511 0.5046\n", "epoch: 136\n", "0.5699387755102046 0.52 0.5058\n", "epoch: 137\n", "0.5655918367346938 0.524 0.5044\n", "epoch: 138\n", "0.5703061224489797 0.517 0.506\n", "epoch: 139\n", "0.5700000000000002 0.526 0.5057\n", "epoch: 140\n", "0.5725714285714285 0.52 0.506\n", "epoch: 141\n", "0.5726734693877551 0.517 0.5064\n", "epoch: 142\n", "0.5762448979591837 0.518 0.5081\n", "epoch: 143\n", "0.5736122448979591 0.52 0.5072\n", "epoch: 144\n", "0.57065306122449 0.516 0.5079\n", "epoch: 145\n", "0.5710612244897963 0.517 0.507\n", "epoch: 146\n", "0.5777346938775509 0.52 0.5083\n", "epoch: 147\n", "0.5754897959183672 0.524 0.5085\n", "epoch: 148\n", "0.5741428571428571 0.52 0.5079\n", "epoch: 149\n", "0.5753877551020407 0.522 0.5117\n", "epoch: 150\n", "0.5782857142857142 0.516 0.5072\n", "epoch: 151\n", "0.5834489795918368 0.52 0.5088\n", "epoch: 152\n", "0.5817551020408167 0.513 0.5083\n", "epoch: 153\n", "0.5826122448979594 0.523 0.5091\n", "epoch: 154\n", "0.5815918367346936 0.517 0.5113\n", "epoch: 155\n", "0.5810204081632654 0.518 0.5104\n", "epoch: 156\n", "0.584081632653061 0.519 0.5101\n", "epoch: 157\n", "0.5822244897959186 0.515 0.51\n", "epoch: 158\n", "0.579938775510204 0.515 0.5102\n", "epoch: 159\n", "0.5837551020408167 0.517 0.5105\n", "epoch: 160\n", "0.5811836734693875 0.516 0.5101\n", "epoch: 161\n", "0.589591836734694 0.516 0.5118\n", "epoch: 162\n", "0.5895714285714286 0.519 0.5125\n", "epoch: 163\n", "0.5923673469387755 0.525 0.5123\n", "epoch: 164\n", "0.5879795918367344 0.52 0.511\n", "epoch: 165\n", "0.5905510204081632 0.52 0.513\n", "epoch: 166\n", "0.5875510204081634 0.522 0.5106\n", "epoch: 167\n", "0.5869795918367351 0.526 0.5111\n", "epoch: 168\n", "0.5917755102040815 0.519 0.512\n", "epoch: 169\n", "0.5947142857142858 0.525 0.5099\n", "epoch: 170\n", "0.5914489795918363 0.525 0.5106\n", "epoch: 171\n", "0.5869387755102036 0.519 0.5121\n", "epoch: 172\n", "0.5905306122448974 0.522 0.5124\n", "epoch: 173\n", "0.5954693877551019 0.52 0.5122\n", "epoch: 174\n", "0.5942653061224493 0.521 0.5116\n", "epoch: 175\n", "0.5951836734693873 0.516 0.5123\n", "epoch: 176\n", "0.5937755102040814 0.521 0.512\n", "epoch: 177\n", "0.5973673469387751 0.519 0.5106\n", "epoch: 178\n", "0.5935918367346937 0.518 0.5128\n", "epoch: 179\n", "0.5960408163265306 0.522 0.5128\n", "epoch: 180\n", "0.599734693877551 0.524 0.5119\n", "epoch: 181\n", "0.5979183673469388 0.523 0.5114\n", "epoch: 182\n", "0.6000612244897959 0.525 0.5119\n", "epoch: 183\n", "0.6015714285714288 0.527 0.5138\n", "epoch: 184\n", "0.6002244897959184 0.521 0.5138\n", "epoch: 185\n", "0.6002244897959178 0.523 0.5128\n", "epoch: 186\n", "0.6031224489795918 0.518 0.512\n", "epoch: 187\n", "0.5970816326530615 0.523 0.5129\n", "epoch: 188\n", "0.6057142857142859 0.525 0.513\n", "epoch: 189\n", "0.60569387755102 0.522 0.5134\n", "epoch: 190\n", "0.6065102040816324 0.521 0.5145\n", "epoch: 191\n", "0.6070816326530611 0.523 0.5152\n", "epoch: 192\n", "0.6036326530612242 0.527 0.5139\n", "epoch: 193\n", "0.6056938775510201 0.524 0.5146\n", "epoch: 194\n", "0.6052448979591833 0.524 0.5156\n", "epoch: 195\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "0.6071020408163263 0.519 0.5153\n", "epoch: 196\n", "0.6111428571428565 0.524 0.5138\n", "epoch: 197\n", "0.6101836734693877 0.527 0.5152\n", "epoch: 198\n", "0.6054897959183677 0.526 0.5161\n", "epoch: 199\n", "0.6072448979591835 0.527 0.517\n" ] } ], "source": [ "##########################################\n", "# Best three layer SGD NN\n", "##########################################\n", "#Tuning SGD 3 layers\n", "from random import shuffle\n", "\n", "# Hyperparameters\n", "input_size = 32 * 32 * 3\n", "num_layers = 3\n", "hidden_size = 120#80#20\n", "hidden_sizes = [hidden_size] * (num_layers - 1)\n", "num_classes = 10\n", "epochs = 200 #200\n", "batch_size = 200\n", "learning_rate = 1e-3#0.0001#1e-3 the best #0.5 NoWrk #0.05 NoWrk\n", "learning_rate_decay = 0.95\n", "regularization = 0.0009 #0.1 #0.009 worked really well with 1e-3 and 80 hidden sizes\n", "\n", "# Initialize a new neural network model\n", "net = NeuralNetwork(input_size, hidden_sizes, num_classes, num_layers)\n", "\n", "# Variables to store performance for each epoch\n", "train_loss_three = np.zeros(epochs)\n", "train_accuracy_three = np.zeros(epochs)\n", "val_accuracy_three = np.zeros(epochs)\n", "test_accuracy_three = np.zeros(epochs)\n", "# For each epoch...\n", "for epoch in range(epochs):\n", " print('epoch:', epoch)\n", " \n", " # Shuffle the dataset\n", " ind_list = [i for i in range(X_train.shape[0])]\n", " shuffle(ind_list)\n", " X_train = X_train[ind_list,:]\n", " y_train = y_train[ind_list]\n", "\n", " \n", " # Training\n", " # For each mini-batch...\n", " #################################\n", " #Implemented the linear decay in learning rate but found that results without it were more accurate\n", " #learning_rate=learning_rate/(1+learning_rate_decay*epoch)\n", " #################################\n", " for batch in range(TRAIN_IMAGES // batch_size):\n", " batch_indices = np.random.choice(range(X_train.shape[0]), size=batch_size)\n", " # Create a mini-batch of training data and labels\n", " X_batch = X_train[batch_indices]\n", " y_batch = y_train[batch_indices]\n", " # Run the forward pass of the model to get a prediction and compute the accuracy\n", " scores=net.forward(X_batch)\n", " y_pred=np.argmax(scores, axis=1)\n", " train_accuracy_three[epoch] += (np.sum(y_batch==y_pred)/len(y_batch))\n", " # Run the backward pass of the model to update the weights and compute the loss\n", " loss,gradients=net.backward(X_batch,y_batch,\"SGD\",learning_rate,regularization) \n", " train_loss_three[epoch]+=loss\n", "\n", " # Validation\n", " # No need to run the backward pass here, just run the forward pass to compute accuracy\n", " \n", " train_accuracy_three[epoch]/=(TRAIN_IMAGES // batch_size)\n", " train_loss_three[epoch]/=(TRAIN_IMAGES // batch_size)\n", " \n", " scores=net.forward(X_val)\n", " y_pred=np.argmax(scores, axis=1)\n", " val_accuracy_three[epoch]= (np.sum(y_val==y_pred)/len(y_val))\n", " \n", " scores=net.forward(X_test)\n", " y_pred=np.argmax(scores, axis=1)\n", " test_accuracy_three[epoch]= (np.sum(y_test==y_pred)/len(y_test))\n", " print(train_accuracy_three[epoch],val_accuracy_three[epoch],test_accuracy_three[epoch])\n" ] }, { "cell_type": "code", "execution_count": 57, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAmEAAAHwCAYAAADuJ7gwAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nOzdd3gc5bn///et3iVbxbbkIveKjcF0TKgJvYVACBBSCAlpkAopJ+R78ktCcnI4nFQOCTXUhBZCqAkdA8YYY9xxt2xZxbaqVXfv3x87doSRZBl7NSqf13Xp8u7M7Oz97Kh8/DzPzJi7IyIiIiK9KyHsAkREREQGI4UwERERkRAohImIiIiEQCFMREREJAQKYSIiIiIhUAgTERERCYFCmIgMOmb2GTN7pZv1T5rZ5b1Zk4gMPgphIhIaM1tvZieHXcee3P00d79zb9uZmZvZhN6oSUQGHoUwEZEQmFlS2DWISLgUwkSkTzKzL5jZajPbbmaPmVlxsNzM7H/MrNLMas1ssZnNCNadbmbLzKzezDab2bf38h6/MrMdZrbOzE7rsPwFM7sieDzBzF4M3qvazB4Ilr8UbP6OmTWY2UXd1R2sczP7ipm9B7xnZr8zs//eo6a/m9k1+/8JikhfpxAmIn2OmZ0I/By4EBgBbADuD1Z/FDgOmATkARcB24J1twJfdPdsYAbwXDdvcwSwEigAfgncambWyXY/AZ4BhgAjgd8AuPtxwfpZ7p7l7g/spe5dzg3eexpwJ3CxmSUE7S4ATgLu66ZuERkgFMJEpC+6BLjN3Re6ewvwPeAoMysF2oBsYApg7r7c3cuD17UB08wsx913uPvCbt5jg7v/0d0jxMLQCGBYJ9u1AWOAYndvdvcuJ/Tvpe5dfu7u2929yd3nA7XEghfAJ4EX3L2im/cQkQFCIUxE+qJiYr1IALh7A7HerhJ3fw74LfA7oMLMbjGznGDTjwOnAxuCIcSjunmPrR32vzN4mNXJdt8FDJhvZkvN7HMfpu4O22za4zV3ApcGjy8F/tzN/kVkAFEIE5G+aAux3icAzCwTyAc2A7j7r939UGA6sWHJ7wTL33T3c4Ai4FHgL/tbiLtvdfcvuHsx8EXg992cEdlt3bt2ucdr7gbOMbNZwNSgbhEZBBTCRCRsyWaW1uErCbgX+KyZHWxmqcDPgDfcfb2ZHWZmR5hZMtAINAMRM0sxs0vMLNfd24A6ILK/xZnZJ8xsZPB0B7EQtWu/FcC4Dpt3WXdX+3f3MuBNYj1gD7l70/7WLCL9g0KYiITtCaCpw9eP3f1fwH8ADwHlwHhi86UAcoA/EgtEG4gN9/0qWHcZsN7M6oAv8e9hvv1xGPCGmTUAjwFXu/u6YN2PgTvNrMbMLtxL3d25EzgIDUWKDCrmvmfPuIiI9CYzO47YsGSpu0fDrkdEeod6wkREQhQMq14N/EkBTGRwUQgTEQmJmU0FaohdHuOmkMsRkV6m4UgRERGREKgnTERERCQECmEiIiIiIUgKu4B9VVBQ4KWlpWGXISIiIrJXb731VrW7F3a2rt+FsNLSUhYsWBB2GSIiIiJ7ZWYbulqn4UgRERGRECiEiYiIiIRAIUxEREQkBAphIiIiIiFQCBMREREJgUKYiIiISAgUwvawcms9J/7qBeatrg67FBERERnAFML2kJ6cyNrqRjbXNIVdioiIiAxgCmF7KMxOBaCyviXkSkRERGQgUwjbQ3pKItmpSVQphImIiEgcxS2EmdkoM3vezJab2VIzu7qbbQ8zs4iZXRCvevZFYU6qQpiIiIjEVTzvHdkOfMvdF5pZNvCWmT3r7ss6bmRmicAvgKfjWMs+KcxKpbK+OewyREREZACLW0+Yu5e7+8LgcT2wHCjpZNOvAQ8BlfGqZV8V5aSpJ0xERETiqlfmhJlZKTAbeGOP5SXAecDNvVFHTxVlp2pivoiIiMRV3EOYmWUR6+m6xt3r9lh9E3Ctu0f2so8rzWyBmS2oqqqKV6m7FWWnsrM1QkNLe9zfS0RERAanuIYwM0smFsDucfeHO9lkDnC/ma0HLgB+b2bn7rmRu9/i7nPcfU5hYWE8SwY6XKaiTvPCREREJD7iNjHfzAy4FVju7jd2to27j+2w/R3A4+7+aLxq6qmi7DQAqupbGFeYFXI1IiIiMhDF8+zIY4DLgHfNbFGw7PvAaAB371PzwDoqytEFW0VERCS+4hbC3P0VwPZh+8/Eq5Z9VaSr5ouIiEic6Yr5nchNTyYlMUHXChMREZG4UQjrhJlRmK2r5ouIiEj8KIR1QSFMRERE4kkhrAtF2alU1imEiYiISHwohHWhMDuVqgaFMBEREYkPhbAuFGWnsb2xldb2aNiliIiIyACkENaFXdcKq1ZvmIiIiMSBQlgXdK0wERERiSeFsC7sun+kzpAUERGReFAI68Ku+0fqgq0iIiISDwphXcjPSsEMXaZCRERE4kIhrAvJiQkMzUjRnDARERGJC4Wwbuiq+SIiIhIvCmHdKMpJo0pzwkRERCQOFMK6UZybxqYdTbh72KWIiIjIAKMQ1o0pw7PZ3thKhSbni4iIyAGmENaN6SW5ACwrrw25EhERERloFMK6MWV4NgDLttSFXImIiIgMNAph3chOS2ZMfgZLFcJERETkAFMI24vpxTksK1cIExERkQNLIWwvpo3IYcO2ndQ1t4VdioiIiAwgCmF7Mb04Njl/RXl9yJWIiIjIQKIQthfTinMAWLpFZ0iKiIjIgaMQthdF2ankZ6boDEkRERE5oOIWwsxslJk9b2bLzWypmV3dyTaXmNni4Guemc2KVz0flpkxTZPzRURE5ACLZ09YO/Atd58KHAl8xcym7bHNOuAj7j4T+AlwSxzr+dCmFeewqqKe1vZo2KWIiIjIABG3EObu5e6+MHhcDywHSvbYZp677wievg6MjFc9+2N6cS5tEWd1ZUPYpYiIiMgA0StzwsysFJgNvNHNZp8Hnuzi9Vea2QIzW1BVVXXgC9yLaSNik/OXbNbkfBERETkw4h7CzCwLeAi4xt07nVhlZicQC2HXdrbe3W9x9znuPqewsDB+xXZhXEEm+ZkpvLZ2W6+/t4iIiAxMSfHcuZklEwtg97j7w11sMxP4E3Cau/fJlJOQYBw9oYBXVlfj7phZ2CWJiIhIPxfPsyMNuBVY7u43drHNaOBh4DJ3XxWvWg6EuRMKqKpvYWWFLtoqIiIi+y+ePWHHAJcB75rZomDZ94HRAO5+M/AjIB/4fdC71O7uc+JY04d27MQCAF55r5opw3NCrkZERET6u7iFMHd/Beh23M7drwCuiFcNB1JxXjrjCzN5+b1qrpg7LuxyREREpJ/TFfP3wdyJhbyxbhvNbZGwSxEREZF+TiFsHxw7oYDmtigLN+zY+8YiIiIi3VAI2wdHjs8nKcF4eXV12KWIiIhIP6cQtg+yUpM4ZPQQXnlPIUxERET2j0LYPvrI5ELe3VzLpu07wy5FRERE+jGFsH107uwSzOChhWVhlyIiIiL9mELYPirJS+eY8QU8+FYZ0aiHXY6IiIj0UwphH8IFh46kbEcTb6zbHnYpIiIi0k8phH0IH5s+nOzUJB58S0OSIiIi8uEohH0I6SmJnDlrBE+8W05DS3vY5YiIiEg/pBD2IV1w6Cia2iI8sbg87FJERESkH1II+5AOGZ3HhKIs7pm/MexSREREpB9SCPuQzIxLjhjNO5tqWLK5NuxyREREpJ9RCNsP5x8ykrTkBO55Y0PYpYiIiEg/oxC2H3LTkzl7VjGPvr2Fuua2sMsRERGRfkQhbD9deuQYmtoiPLJwc9iliIiISD+iELafZo7MY+bIXO5+fQPuuoK+iIiI9IxC2AFw+VGlvFfZwBPvbg27FBEREeknFMIOgHNnlzB5WDa/eGoFre3RsMsRERGRfkAh7ABITDC+d/oUNm7fyZ9f15mSIiIisncKYQfIRyYVMndiAb957j1qm3SmpIiIiHRPIewAMTO+d9pUapvauPGZlWGXIyIiIn2cQtgBNK04h8uPKuXO1zbw3IqKsMsRERGRPixuIczMRpnZ82a23MyWmtnVnWxjZvZrM1ttZovN7JB41dNbrjttClNH5PDtvy6moq457HJERESkj4pnT1g78C13nwocCXzFzKbtsc1pwMTg60rgD3Gsp1ekJSfym4tn09Qa4RsPLCIa1bXDRERE5IPiFsLcvdzdFwaP64HlQMkem50D3OUxrwN5ZjYiXjX1lglFWVx/1jTmrdnGPfM3hl2OiIiI9EG9MifMzEqB2cAbe6wqATZ1eF7GB4Nav3TRYaM4ZkI+v3xyBZUalhQREZE9xD2EmVkW8BBwjbvX7bm6k5d8YPzOzK40swVmtqCqqioeZR5wZsZPzplBSyTKfz6+LOxyREREpI+Jawgzs2RiAewed3+4k03KgFEdno8Etuy5kbvf4u5z3H1OYWFhfIqNg3GFWXz1hAk8vric51dWhl2OiIiI9CHxPDvSgFuB5e5+YxebPQZ8OjhL8kig1t3L41VTGL74kXFMKMriuw8uZmuthiVFREQkJp49YccAlwEnmtmi4Ot0M/uSmX0p2OYJYC2wGvgj8OU41hOK1KREfvepQ2hsaeeLd79Fc1sk7JJERESkDzD3/nUJhTlz5viCBQvCLmOfPbWknC/dvZALDh3Jf10wk1hHoYiIiAxkZvaWu8/pbJ2umN9LTp0xgq+fOIEH3yrjGw8soqGlPeySREREJERJYRcwmFxz8iSSEhO46Z+rWFxWy28/dQjTinPCLktERERCoJ6wXpSQYHz9pInc+4UjaWhp59zfvcrNL64hoqvqi4iIDDoKYSE4clw+T149lxOnFHHDkyu46P9e05mTIiIig0yPQpiZjTez1ODx8Wb2dTPLi29pA1t+Vip/uPQQ/ueiWSwvr+OiW15jc01T2GWJiIhIL+lpT9hDQMTMJhC79tdY4N64VTVImBnnzR7J3VccwfbGVi68+TU2btsZdlkiIiLSC3oawqLu3g6cB9zk7t8A+v2NtvuK2aOHcN8XjqSxtZ2L//g6NTtbwy5JRERE4qynIazNzC4GLgceD5Ylx6ekwWlGSS53fPZwKuqaufahxfS367eJiIjIvulpCPsscBTwU3dfZ2ZjgbvjV9bgdPCoPK49dQpPL63gz69vCLscERERiaMeXSfM3ZcBXwcwsyFAtrvfEM/CBqvPHzuWeWuq+f8eX05yYgKnTh/OkMyUsMsSERGRA6ynZ0e+YGY5ZjYUeAe43cy6uim37IeEBONXn5hFaUEG33v4Xeb89J986c+656SIiMhA09PhyFx3rwPOB25390OBk+NX1uCWn5XK09ccx+NfO5Yrjh3LU0u38v1H3tU8MRERkQGkp7ctSjKzEcCFwA/iWI8EzIwZJbnMKMklIyWJ//nnKmaW5PKZY8aGXZqIiIgcAD3tCftP4Glgjbu/aWbjgPfiV5Z09LUTJ3Dy1GH85B/LeW3NtrDLERERkQOgRyHM3f/q7jPd/arg+Vp3/3h8S5NdEhKMGy+aRWl+Bl+6+y3WVDWEXZKIiIjsp55OzB9pZo+YWaWZVZjZQ2Y2Mt7Fyb/lpCVz+2cOJynB+Oztb1Ld0BJ2SSIiIrIfejon7HZityn6RPD80mDZKfEoSjo3Oj+DP14+h4tveZ1P3vI6k4dn0x6JkpKUSHZaEvmZKRw5Lp/DSoeSkqR7s4uIiPRl1pMz7sxskbsfvLdlvWHOnDm+YMGC3n7bPuXZZRX88qkVRNxJSjBa26PUN7dT09RGJOpkpSZx9sHFfOejk3WNMRERkRCZ2VvuPqezdT3tCas2s0uB+4LnFwOaIR6SU6YN45Rpwz6wfGdrO6+u3sazy7bywJubeGrJVr5/+lTOm11CYoKFUKmIiIh0pac9YaOB3xK7dZED84Cvu/vG+Jb3QeoJ65nl5XV8/5F3eXtjDYXZqZw9q5iLDx/NhKKssEsTEREZNLrrCetRCOtip9e4+037VdmHoBDWc9Go88yyrTy8cDPPr6wkNSmRB686iinDc8IuTUREZFDoLoTtz+ztb+7Ha6UXJCQYp84YwS2fnsML3zmBzNREPn/HAirrm8MuTUREZNDbnxCmSUb9SEleOrdefhjbG1u54s4FrK9u1G2QREREQrQ/Iazbv+BmdltwXbElXazPNbO/m9k7ZrbUzD67H7VID8woyeU3F89myeZajv/VCxz2039y9f1vs7isJuzSREREBp1u54SZWT2dhy0D0t29y7Mrzew4oAG4y91ndLL++8RuDH6tmRUCK4Hh7t7aXcGaE7b/1lU38tqabSzYsJ1nl1VQ39zO0ePz+cEZU5lenBt2eSIiIgPGh75Ehbtnf9g3dfeXzKy0u02AbDMzIAvYDrR/2PeTnhtbkMnYgkw+dcRo6pvbuG/+Rm55aR3n/X4e/985M7jwsFFhlygiIjLghXlZ9d8CU4EtwLvA1e4eDbGeQSk7LZkrjxvP09fM5bDSIXz3ocV898F3qGtuC7s0ERGRAa2nF2uNh48Bi4ATgfHAs2b2srvX7bmhmV0JXAkwevToXi1ysMjPSuWuzx3Bjc+u5PcvrOH5lVX88IyppCcn8uBbZayuauD6s6bzkUmFYZcqIiIyIHzo64T1aOex4cjHu5gT9g/gBnd/OXj+HHCdu8/vbp+aExZ/i8tq+OGjS1hcVgtAQVYqOWlJrN/WyPVnTefyo0vDLVBERKSfOBC3LYqHjcBJwMtmNgyYDKwNsR4JzByZxyNfPoanlmwlIyWRuRMLaGmPcvX9i7j+saW8tmYbV8wdy6FjhhCb0iciIiL7Km49YWZ2H3A8UABUANcDyQDufrOZFQN3ACOInW15g7vfvbf9qicsPJGo85vn3uPWV9ZR39zO9OIcLj+qlLMPLiYtORF3p7E1QlZqmNleRESk74jLbYvCohAWvsaWdh5dtJk7561nVUUDeRnJTCzKYlVFA7VNbZwwuZDvnT6VScM+9Mm1IiIiA4JCmMSFu/P62u3c/foGKuqamTQ8m+y0JO59YyONLe2cNHUY4wuzGDU0nY9NH05BVmrYJYuIiPQqhTDpVTsaW/nt86v51/IKNtc00RZxslKTuOr48XzumLGkpySGXaKIiEivUAiT0ESjzqrKem58ZhXPLKtg5JB0brlsDtOKc8IuTUREJO66C2FhXqxVBoGEBGPK8Bxu+fQc7r/ySNojzgU3z+OZpVuJRp3NNU2s2FpHNNq//jMgIiKyv9QTJr2qoq6ZK+9awOLNtaQnJ7KzNQLA8Jw0PjZ9GMdNKmTmyDwKszV/TERE+j8NR0qf0twW4TfPvUdTa5TxRZkkJybwz2UVvLiqipb22J2rCrNTyc9MITc9mbkTC/jSR8aTlKiOWxER6V8UwqRfaGqN8O7mWhaX1bBiaz21TW1U1bewaFMNh48dym8uns2wnLSwyxQREekxhTDp1x5eWMYPHllCcqIxtjCL1MQEMlITyUtPZmhmKhOKsphenMPk4dmkJevMSxER6Tv66m2LRHrk/ENGMnNkLv/7r9XUNrXR1h5le2Mra6oa2NbQunteWX5mCv95zgzOmDkCgJqdrVQ3tDChSBeNFRGRvkc9YdKvuTtlO5pYsrmWP7y4hsVltXx02jCiDi+uqiQSdW765GzOnlUcdqkiIjIIqSdMBiwzY9TQDEYNzeCUacP4v5fW8r//fI8hmclcflQpi8tq+cYDi0hNSuBj04e/77XLttSRm5FMSV56SNWLiMhgpp4wGXCa2yIkJyaQmGA0tLRz6Z/eYNmWOr53+hTOP2QkKYkJ/NfTK7l93jqKc9P5+9eOZWhmSthli4jIAKSJ+TKo1e5s44q73uTN9TtITUpgaGYK5bXNnDe7hH8sLueIcUO547OHk5hgYZcqIiIDjIYjZVDLzUjmL188iiWb6/jLgk2srKjnV5+YxTETCjisdCjff+Rdbnx2JeccXEJ1fQvLt9Yzf9023qto4IyZI7jyuHFkpyV3uf+ana3kpCWToBAnIiL7QD1hMqi5O995cDEPvlX2vuWjhqYzMi+D19ZuIz8zhatPnsjFh48mucMFY92dO+at5+dPrOC82SX84oKZvV2+iIj0cRqOFOlGc1uEJ5eUk5iQQGFWKqUFGYzIjU3WX7Sphp8/sZw31m1nbEEm3/roJErzM6ltauP2V9fxz+WVjBySTtmOJv746TmcMm1YyK0REZG+RCFMZD+4O8+vrOSGJ1ewqqJh9/KUxAS+d/oUPnXEaM773Twq65t5+prjyM/64H0vK+ua+b+X1jIkI1m3YBIRGUQUwkQOgEjUeWFlJe1RJy89mTH5mQzPjd1GacXWOs7+zascMyGfa0+bwqSibCLurCiv5/F3t3DnvPW0tkeJOhw6Zgj/+8mDGTkkI+QWiYhIvCmEifSCW19Zx08eXwbAkIxkmtuiNLVFMINzZhVzzcmTeKeshh88sgQDzpw1glOmDePo8QW63ZKIyAClECbSS8p27OS1NduYv247malJHDpmCHNKh+yeYwawcdtOfvn0Cp5fUUlja4SMlESOm1jIKdOGcdasYlKSNFQpIjJQKISJ9EEt7RFeX7udZ5dt5Z/LKtla18ycMUP4w6WHUpidSkVdM3e9tp7jJxdxWOnQ3a+rqm8hMzWRjBRdYUZEpK9TCBPp49ydvy8u59oHF5ObnszpB43g3vkbaG6LYgZfmDuOiw4bxR9eWMPDC8vITEnigjkjOXtWMU1tEaobWpk9Ko9RQzXPTESkL1EIE+knlm6p5cq73mJzTRPnHFzMVceP58+vbeCeNzYCkJKUwCVHjGZbQytPLimnLfLvn9/s1CRuvuxQjplQEFb5IiKyB4UwkX6ktqmN6oYWxhdm7V724qoq5q2p5vKjSikObjheWd/MgvU7yMtIJi05keseWszaqkZ+et4Mzp1dQmpS95P9l2yuZeKwrL1uJyIiH14oIczMbgPOBCrdfUYX2xwP3AQkA9Xu/pG97VchTKRzdc1tXHX3W7y6ehsJBqOHZjC+MIvxRVlMKMri+MmFFGWnUdfcxn88uoS/LdrCoWOGcMtlh3Z6bTMREdl/YYWw44AG4K7OQpiZ5QHzgFPdfaOZFbl75d72qxAm0rXW9ijPLNvKqq31rKlqZE1VA2urG2ltj5JgcPT4AtZVN7K1rpkLDhnJo4s2Mywnjds/e9j7et5EROTACOUG3u7+kpmVdrPJp4CH3X1jsP1eA5iIdC8lKYEzZxZDh9tYRqLO6soG/rF4C4+9s4WMlET++qWjOGT0EC46fBRfuHMBZ/z6ZS6aM4or5o6jJC+dbY2ttEejDM9Jw0w3JhcRiYe4zgkLQtjjXfSE7RqGnA5kA//r7nd1sZ8rgSsBRo8efeiGDRviVbLIoLO5pombnl3Fo4s2E4k6ZkYkGvu9UJybxhHj8inKSSUScdqjTiQa+3dCURbnzS5haGZKyC0QEem7QpuYv5cQ9ltgDnASkA68Bpzh7qu626eGI0Xio7y2ifvnb6I9GqUoO3Y7pvnrtvPGuu3UN7eRlGAkBl9mxvbGVlISE/jo9GF88rDRHD0+HzOCa59VMGV4NidNLdJ8MxEZ1EIZjuyBMmKT8RuBRjN7CZgFdBvCRCQ+RuSm841TJr1v2eVHl3a5/YqtdTzw5iYeeXszjy8uZ9TQdJITE1hb1UhiQqw3LcHgmAkFXHvqFGaU5Ma5BSIi/UuYPWFTgd8CHwNSgPnAJ919SXf7VE+YSN/S3BbhmWUV/HXBJlrbo1w4ZxSnHzSCNVUNPLN0K39+fQM1TW2cP3sk1502hcLsf/eMzV+3nazUJKYV54TYAhGR+Anr7Mj7gOOBAqACuJ7YHDDc/eZgm+8AnwWiwJ/c/aa97VchTKR/qW1q4/fPr+b2V9eTk57MjRfOYvboPP7j0SU8umgLAFOGZ3P2wcUcM76A6cU5JCUm4O60RqK6jpmI9Gu6WKuIhG7l1nq+eu9C3qtsoCArlR07W/n6iRMZmpnMw29v5u2NNQBkpSaRkZLIjp2tRKLOEWPzOX3mCHLSkliwfgfrtzXy5eMncNT4/JBbJCKydwphItInNLVG+OkTy5i/bjs/O+8g5nS4MXlFXTPz123nzfXbaWmLMjQrhag7zy6rYG1VIwCZKYlkpiaxrbGV68+axmVHjtElNESkT1MIE5F+y915r7KB1vYoU4Zn09QW4Zr7F/GvFZUcNS6f8UWZjMhNZ1xBJhOHZVOan0FSYkLYZYuIAAphIjLARKPOb59fzRPvlrO1rpmanW2712WnJnHi1CJOmTaMxpZ2Fm2qoaq+hRklucwePYRo1Flb3UhzW4RLjxhDbkZyiC0RkYFOIUxEBrSm1ghrqhpYubWeN9Zt49llFewIgllOWhKF2amsrW5kz193Rdmp/Oy8gzh52jDcYxei7aoXzd2JOiQmaPhTRHpOIUxEBpX2SJR3ymoZmplCaX4GZkZ9cxvvbq4lJTGBsQWZbKlp5jsPvsOKrfXkZ6ZQ19xGghk/Pe8gLjh05O59RaPOk0u2ctM/V9HUFuGuzx3OON1nU0R6SCFMRKQTre1Rbn91Heu37SQvI5mFG3bwxrrt/PCMqVx65Bgee2cLt72yjhVb65lQlMWOxlYA7vzc4aQlJ3LrK2tZW9XIJ+aM4qxZI3Q5DRH5AIUwEZEeaGmP8I0HFvHEu1vJSk2ioaWdScOy+MoJEzhzZjEbtjVy2a3zqW5ooaU9SmpSAiNy01i/bScFWamcOmMYh4/N54ixQxmWkxZ2c0SkD1AIExHpoUjUueHJ5WypbebSI8Zw5Lih77sMxpaaJv7j0SUcNDKXy44cw9DMFF5+r5q7XtvAa2uqaWyNAFCan8HhY4fuDmUjh6SzYdtOFm7cwaqKBtZXN7JjZytfmDuOk6cNC6u5IhJnCmEiIr2gPRJlWXkd89dt5/W1sWue1TbFThBIT06kqS0W0JITjVFDM2iPOBu37+Tjh4zku6dOJictmdSkBBI6TP6PRJ1/vFvO4aVDGZ6r3jWR/kYhTEQkBNGos6qynjfWbmdNVQNThudwyJg8JhRmkZSYQGt7lF//6z3+8OIaItHY7+LEBOPMmSP42okTMYNv//Ud3t5Ywx3juD8AACAASURBVLCcVG77zGFML9aN0EX6E4UwEZE+bNmWOt5Yt43mtijltU08+FYZTW0RkhMTSE9O5GsnTuDWV9ZR39zO906fQnV9K0u31JKZmsSkYdkMz01l0/Ym1m9rZPboIVxy+OjdvWmNLe0AZKYmhdlEkUFLIUxEpB/Z3tjKra+sZXtjG984eSJFOWmU1zbx2dvfZMXWesxgbH4mTW0Rymubd78uPzOFbY2tHDepkOvPmsbf39nCrS+vIzM1iVs+fSgzR+aF2CqRwUkhTERkAGhqjbBiax0TirLITotd6b+2qY2q+mZK8jJIS07gnjc28pPHl9HSHgXglGnDWLaljuqGFn7x8ZmcNat49wVn65rb2LhtJ6UFmWR16Cnb0dhKXkay7sspcgAohImIDCLvVdRz7/yNnD97JAeNzKW6oYUv372Q+eu3k5hgFGalEnWnsr4FiM1DmzUylxG56by9cQdbaps5blIhf7jkEA1jiuwnhTARkUGutT3Ko4s2s3HbTrbWxYYwxxdmMWpoOivK63l1TTVV9S0cPCqPEblp3PbqeqaNyOFPl8+hbEcTr62pJjEhgfGFmUwens2Y/Mwev3dzW4Tmtgh5GSnxap5In6UQJiIi++S5FRV8+Z6FNLdFO10/eVg2Z80awdyJhUwoyuq0xywadR5aWMYvn17J9sZWzp9dwldOmEBpQc8DnEh/pxAmIiL7bHFZDY8vLmfWyDyOHp9PUqKxpqqRRRt38PjichZs2LF72+LcNMYXZTGxKJuMlETKa5tZsrmWlRX1HDwqj5kjc3ngzU20RaKce3AJXzlxAuMKMllcVsszy7Zy1LgCjp1YEGJrReJDIUxERA64LTVNLC6rYXVlQ+yrqoE1lY20RqIMy06lOC+dS48cw9mziklIMCrrm/njS2u5+/WNNLdHKMlLp2xHEwBm8I2TJ/HVEya872K1Iv2dQpiIiPSKaNRx2H0GZmeqG1r408vrWF5ex6kzhnPSlCJ+/uQKHnl7M4eXDqU4L422qJOamEBWWhLZaUkU56UzckgG04tzKMhK3b2vuuY2tjW0UpSdqpMIpE9SCBMRkT7N3blz3npue3U9AEmJRlskSkNzO3XN7e+7o8DciQUcP6mQ19du57mVlbQGl+PITk3ioJG5HDE2nxOmFOq6aNInKISJiEi/FYk6lfXNbNy2kxdXVfG3RVvYXNNEQVYqZ80awYziXKoaWijbsZO3NtSwYmsd7nDC5EK+/bHJjCvIorqhhS01TaypamR1ZQNrqmJDqE1tEa49dTIXzhml66JJXCiEiYjIgBGNOuu3NTJ6aAZJiQkfWF+zs5X75m/i5hfX7L6BekdpyQmML8xiQlEW5TXNzF+/nY9OG8bPzj/ofUOdIgeCQpiIiAw6tU1t/OXNTbRGohRmpzIsJ43xhZkU56bvnvwfjTq3vbqOXz61ktSkBL74kXF87tixZKQk7V6/rbGVirpmKuubqahrYUhGMqdMG97tvDeRXUIJYWZ2G3AmUOnuM7rZ7jDgdeAid39wb/tVCBMRkQNtdWUDv3hqBc8uqyAnLYnM1CSa2yLUN7fTHv3g38nJw7L51kcncVjpUDJTk4hEnY3bd7KuuoG3N9WwcMMOana2cfXJEznjoBGYGc3BvT7H6jppg0pYIew4oAG4q6sQZmaJwLNAM3CbQpiIiIRpwfrtPPDmJgDSkhPJSU9iWE4aRdlpDMtJpSgnjYUbdnDjs6tYV93Y6T6SE40ZJbnBvT7rOW5SIYVZqTyzdCv1Le18/JCR/OTc6bt722Rg6y6Exe07wN1fMrPSvWz2NeAh4LB41SEiItJTc0qHMqd0aLfblOSlc+qM4fxreQXltc00trQDMDo/k9L8DCYNyyYtOZFI1Pnza+v51TOrMODUGcPJTU/m1lfXsbishq+fNJG05EQyUxM5vHRop/PbOhOJOg3N7eRmJO9nayVsocVwMysBzgNORCFMRET6keTEBE6dMaLbbRITjM8cM5ZPHj4aM0hNSgTg+MlFXPPA23ztvrd3bztleDbXnzWdo8bnU9fcxobqnWSmJjIsJ4305EQaWtuprGvh7+9s4S8LNrFjZyu/ufgQTpk2LK7tlPiK68T8oCfs8c6GI83sr8B/u/vrZnZHsF2nw5FmdiVwJcDo0aMP3bBhQ9xqFhERibeGlnY2bd9Je8RZW93AL59ayeaaJgqzU6mqb+nydWYwd2IhOxpbWbqllp+ddxCfPHx0p/u/f/5GnllawYRhWRxeOpS5EwvI19mfvS60syP3EsLWAbtOLSkAdgJXuvuj3e1Tc8JERGSgaW6LcNur61hd2cCEoizGFWSyszVCZX0LO1sj5KQlkZOezFHj8hk1NIPGlna+fM9CXlxVxayRuQzLSSM/KwV3aG2P8q8VldQ2tTFleDabdzRR39JOWnIClx05hivmjmNVRT1PLtlKNOp88SPjdbJAHPXJELbHdnfQTU9YRwphIiIi0BaJ8ut/vceiTTVU1DWzvbGNxARINGPmyDy++JFxzB49hEjUWbaljtvnrePRtzez62TPzJREog6tkSgfP6SEiUXZsct5ZKVy7uwSUpJic9S2N7ayYmsdh44ZsntIVXourLMj7wOOJ9bLVQFcDyQDuPvNe2x7BwphIiIicbWmqoG/LdrCjOIcjptUSH1zO797fjX3vrGR1kh093al+Rl866OTWV5exx3z1rOzNUJuejJnzBzBpUeMYVpxzu5tN23fSVpyIoXZH26oMxr1AX3Tdl2sVURERLrU3BahPeqkJCbw6ppqfvqP5ayubMAMzjhoBKfOGM6zyyp4eulWmtuinDx1GGfOHMGjizbzwsoqUpMSuGLuWK46fgJZHW6k3tIeYfOOJsbkZ37g4rbuzvWPLeXZZRU8eNXRlOSl93aze4VCmIiIiPRYWyTKv5ZXMq4wk0nDsncvr21q485567n1lXXUNrVRkJXKpUeOZn11I48u2kJuejIleelkpiZS29TGmqpGIlGnKDuVcw4u5vxDRjJ1RA7uzg1PruD/XlpLYoJxUEkuf/niUbuHQAcShTARERE5YOqb23h3c+375om9s6mGP7++gZqdrexsjZCRksjk4dkU56Xzwsoqnl9RSXvUmTI8mynDs3l00RYuPXI0R40r4Cv3LuRzx4zl6pMm8uiizaysqOdTh49mRknuB967uqFl9xBoVmoSI4ek9+mbryuEiYiISKi2N7by+OItPLxwM4s21XDOwcX8z4UHk5Bg/Pixpdwxbz0pSQm0tkd3/3vGQSP41BGjmTYiNgft5hfXcMe89bS0/3v+WkleOidPLeKYCQWMK8xi9NCMPtWjphAmIiIifUZlXTMFWam7J+S3tke57qHFZKUlceGcUYwamsGtL6/l1lfW0dgaAWK3g2qPOufNLuGMg0bQ2h5lW2MrL6ys4uX3qnYHs6QE4/Nzx/KtUya/L4y5Oy+srGLRphqOm1TI7FF5vXJCgEKYiIiI9Du1TW0sLqth2ZY6KupauOiwUUwenv2B7Xa2trNyaz3rtzXy8nvVPLxwMweV5PLDM6bSHnU2bd/JXa9tYFl53e7XjMhN48rjxvHZY8bGtQ0KYSIiIjJoPLWknGsfepfaprbdy8YVZHLV8eM5aeowXlhZyRPvlnPkuHyumDsurrUohImIiMigUlnXzFsbdjAkM4WCrBTGFmR94DIZvaG7EBbaDbxFRERE4qUoJ43TDur+Juth6zunD4iIiIgMIgphIiIiIiFQCBMREREJgUKYiIiISAgUwkRERERCoBAmIiIiEgKFMBEREZEQ9LuLtZpZFbChF96qAKjuhffpiwZz20HtH8ztH8xtB7Vf7R+87Y9n28e4e2FnK/pdCOstZragqyvcDnSDue2g9g/m9g/mtoPar/YP3vaH1XYNR4qIiIiEQCFMREREJAQKYV27JewCQjSY2w5q/2Bu/2BuO6j9av/gFUrbNSdMREREJATqCRMREREJgULYHszsVDNbaWarzey6sOuJNzMbZWbPm9lyM1tqZlcHy39sZpvNbFHwdXrYtcaLma03s3eDdi4Ilg01s2fN7L3g3yFh13mgmdnkDsd3kZnVmdk1A/nYm9ltZlZpZks6LOv0WFvMr4PfBYvN7JDwKj8wumj/f5nZiqCNj5hZXrC81MyaOnwf3Bxe5QdGF+3v8vvdzL4XHP+VZvaxcKo+MLpo+wMd2r3ezBYFywfise/qb124P//urq/gC0gE1gDjgBTgHWBa2HXFuc0jgEOCx9nAKmAa8GPg22HX10ufwXqgYI9lvwSuCx5fB/wi7Drj/BkkAluBMQP52APHAYcAS/Z2rIHTgScBA44E3gi7/ji1/6NAUvD4Fx3aX9pxu4Hw1UX7O/1+D34PvgOkAmODvw2JYbfhQLZ9j/X/DfxoAB/7rv7Whfrzr56w9zscWO3ua929FbgfOCfkmuLK3cvdfWHwuB5YDpSEW1WfcA5wZ/D4TuDcEGvpDScBa9y9Ny6EHBp3fwnYvsfiro71OcBdHvM6kGdmI3qn0vjorP3u/oy7twdPXwdG9nphvaSL49+Vc4D73b3F3dcBq4n9jeiXumu7mRlwIXBfrxbVi7r5Wxfqz79C2PuVAJs6PC9jEAUSMysFZgNvBIu+GnTD3jYQh+M6cOAZM3vLzK4Mlg1z93KI/fACRaFV1zs+yft/AQ+WYw9dH+vB+Pvgc8T+97/LWDN728xeNLO5YRXVCzr7fh9Mx38uUOHu73VYNmCP/R5/60L9+VcIez/rZNmgOH3UzLKAh4Br3L0O+AMwHjgYKCfWVT1QHePuhwCnAV8xs+PCLqg3mVkKcDbw12DRYDr23RlUvw/M7AdAO3BPsKgcGO3us4FvAveaWU5Y9cVRV9/vg+n4X8z7/xM2YI99J3/ruty0k2UH/PgrhL1fGTCqw/ORwJaQauk1ZpZM7JvyHnd/GMDdK9w94u5R4I/04274vXH3LcG/lcAjxNpasavrOfi3MrwK4+40YKG7V8DgOvaBro71oPl9YGaXA2cCl3gwISYYhtsWPH6L2JyoSeFVGR/dfL8PiuNvZknA+cADu5YN1GPf2d86Qv75Vwh7vzeBiWY2Nugd+CTwWMg1xVUwF+BWYLm739hhecex7/OAJXu+diAws0wzy971mNgk5SXEjvvlwWaXA38Lp8Je8b7/BQ+WY99BV8f6MeDTwVlSRwK1u4YtBhIzOxW4Fjjb3Xd2WF5oZonB43HARGBtOFXGTzff748BnzSzVDMbS6z983u7vl5wMrDC3ct2LRiIx76rv3WE/fMf9hkLfe2L2BkRq4gl/x+EXU8vtPdYYl2si4FFwdfpwJ+Bd4PljwEjwq41Tu0fR+wMqHeApbuOOZAP/At4L/h3aNi1xqn9GcA2ILfDsgF77ImFzXKgjdj/dD/f1bEmNhzxu+B3wbvAnLDrj1P7VxOb+7Lr5//mYNuPBz8T7wALgbPCrj9O7e/y+x34QXD8VwKnhV3/gW57sPwO4Et7bDsQj31Xf+tC/fnXFfNFREREQqDhSBEREZEQKISJiIiIhEAhTERERCQECmEiIiIiIVAIExEREQmBQpiI9Etm1hD8W2pmnzrA+/7+Hs/nHcj9i4iAQpiI9H+lwD6FsF0XouzG+0KYux+9jzWJiOyVQphIP2ZmPzazu+O4/6Vmdnzw2MzsdjPbYWbzzWyuma2Mw3uONrOGHgSlXW4A5prZIjP7hpklmtl/mdmbwU2Zvxjs93gze97M7iV28UXM7NHgxu1Ld9283cxuANKD/d0TLNvV62bBvpeY2btmdlGHfb9gZg+a2Qozuye4QncozGy9mZ3cxbq4HDcR2XdJYRcgIt0Lhtq+CUwB6old6fmn7v5KvN/b3ad3eHoscAow0t0bg2WT9/c9zGw9cIW7/zN4z41A1j7s4jrg2+5+ZrC/K4ndYuQwM0sFXjWzZ4JtDwdmuPu64Pnn3H27maUDb5rZQ+5+nZl91d0P7uS9zid2o+dZQEHwmpeCdbOB6cTuL/cqcAwQ92O0r9z9ZXpw3Mzsx8AEd7807kWJDFLqCRPpw8zsm8BNwM+AYcBo4PfAOSGUMwZY3yGA9VUfJXbPt0XAG8RuSzIxWDe/QwAD+LqZvQO8TuxmvRPp3rHAfR674XMF8CJwWId9l3nsRtCLiA2T7hbcKHnQGGztFfkwFMJE+igzywX+E/iKuz/s7o3u3ubuf3f373Txmr+a2VYzqzWzl8xseod1p5vZMjOrN7PNZvbtYHmBmT1uZjVmtt3MXjazhGDdejM72cw+D/wJOCoYKvx/wRBcx5v+jjKzh82sysy2mdlvg+Xjzey5YFl1MFSXF6z7M7Fg+fdgv98NJtr7rj/iZlZsZo8Fta02sy90eM8fA9cDBwftWgoMAb7m7gcHX2PdfVdPWKmZbTKzumBI7nzgKHefBbwNfN7M1gCZwTDlqOB1CWb2LHAV8D8dJu4fDVwSPG7p8JlEgKTg87vWzBYDjWaWZGbXmdmaoN5lZnbeHsfwC2a2vMP6Q8zsO2b20B7b/cbMbur8uweCz2Rx8L3wgJmlBa/b87hdG3w/1JvZSjM7yWI39f4+cFFwXN7pybEIhmPvNrM64Doz22lm+R22OTT4/kjupm6RQUMhTKTvOgpIAx7Zh9c8Saw3p4jYjXfv6bDuVuCL7p4NzACeC5Z/i9gNfQuJ9bZ9n9iNbndz91uBLwGvuXuWu1/fcb3F5m89Dmwg1gNUAty/azXwc6AYmEqsx+nHwX4vAzYSu0Fwlrv/spM23RfUVwxcAPzMzE7qsP5oYAeQR+wGzGOBq3b9oTezSWaWGWxbQ2w4cSixIcNJQNTMphAbPjyJ2E19a4ArgZ1mlk3sODwFXA68CTxvZrs+ry2d1NzRxcAZQJ67txO7IfBcIBf4f8DdZjYiqPUTwWfzaSAHOJvYDdbvBk7tEF6TgIuI3Xy6KxcCpwafx0zgM3tuYGaTga8ChwXfFx8j1tv5FLHe1weC4zIreMnejsU5wIPEjsV/Ay8EdexyKXC/u7d1U7fIoKEQJtJ35QPVwR/uHnH329y93t1biP0xnxX0qAG0AdPMLMfdd7j7wg7LRwBjgp62l93dP7j3bh1O7A/zd4Ieu+Zdc9bcfbW7P+vuLe5eBdwIfKQnOw16oo4Frg32uYhYj9xlHTZ7BagkFjotaMsyYKGZLQH+j3/Pf93s7tuCz/QqIBFYDPwk+BxudfeVwC3Egs+vgTNjzfD/Bv5CrMfsj8RC7AJgb8Ozv3b3Te7eFHwef3X3Le4edfcHgPeCzw/gCuCX7v6mx6x29w3uXg68BHwi2O5UYt8bb+3lfbe4+3bg78TC554iQCqx74tkd1/v7ms621kPj8Vr7v5o0LYm4E5iwWtXUL+Y7oOjyKCiECbSd20DCno6t8ZiZwXeEAx11QHrg1UFwb8fJ9bLs8HMXjSzo4Ll/wWsBp4xs7Vmdt2HqHUUsKGzwGhmRWZ2fzDkVUcs3BR8YA+dKwa2u3t9h2UbgBJ33zV5v9zdTwp6a24m1mv1I3c/yN1nuPsJ7l7r7i8Q68Fabma1QAWxEHaVu+8KN38DcPdr3X2qu18StO2RYLm7+3eC/R5E8Bm7+wu7TgwInn/V3e8Inm7a4/P4tMXOvKwxsxpivZK7Po9RxHrKOrM70AT/7i3MbO3weCednOzg7quBa4gF9srgOBV3sb8uj0WH55ve/xL+RizgjSN2Uketu8/fS90ig4ZCmEjf9RrQDJzbw+0/RWw46GRiQ12lwXIDCHpXziE2VPkosV4dgp6zb7n7OOAs4Jt7DDH1xCZgdBeB8efEhjdnunsOsQDR8fIN3fW6bQGGBkOCu4wGNu9jfZjZXOBaYsNjQ9w9D6jtUMsmYHwnL+1qOcR6wTI6PB/eyTa722dmY4j1on0VyA9qWNKDGiB2zGaa2QxivXP3dLHdPnH3e939WGInXjjwiz3rDvTkWOw5jN1M7PvsEmI9ZuoFE+lAIUykj3L3WuBHwO/M7FwzyzCzZDM7zcw6mzuVDbQQ60HLIDanBwAzSzGzS8wsN5iPU0dsKAozO9PMJpiZdVge2cdy5wPlwA1mlmlmaWZ2TIe6GoAaMysB9jypoAIY18VnsAmYB/w82OdM4PN8uACSDbQDVcQmzf+I2LyrXf4E/MTMJlrMzGBS+ePAcDO7xsxSzSzbzI4IXrMION3MhprZcGK9St3JJBZUqgDM7LPEesI61vDtYAK7BcdlTPBZNBObb3UvsTMxN36Iz+B9zGyymZ1osUt5NANN/PvYVxA7kSEheP8PeyzuIjYf7WxivaAiElAIE+nD3P1GYtcI+yGxP9ybiPWiPNrJ5ncRGx7aTGxO1Ot7rL8MWB8MCX6Jfw9tTQT+SSwovQb8Phi625c6I8R60SYQm2hfRmziOMQmnx9CrNfpH8DDe7z858APg+G5b3ey+4uJ9eptITYseL27P7sv9QWeJnbiwipin1Mz7x8+u5FYr80zxMLorUB6MPx2StC+rcTmcJ0QvObPwDvEhiWfAR7orgB3X0ZswvprxELOQcROENi1/q/AT4kFrXpix3loh13cGbzmQPUopRK72G01sbYV8e+7Bfw1+Hebme2aP7jPx8LdXwWiwEJ3X3+A6hYZEGzf59+KiEgYzGw0sAIY7u51YdfTU2b2HHCvu/8p7FpE+hKFMBGRfiAYFrwRyHH3z4VdT0+Z2WHAs8CoPSb1iwx6uqKxiEgfF1znrILYMOqpIZfTY2Z2J7ETS65WABP5IPWEiYiIiIRAE/NFREREQqAQJiIiIhKCfjcnrKCgwEtLS8MuQ0RERGSv3nrrrWp3L+xsXb8LYaWlpSxYsCDsMkRERET2ysw2dLVOw5EiIiIiIVAIExEREQmBQpiIiIhICPrdnLDOtLW1UVZWRnNzc9ilxF1aWhojR44kOTk57FJERERkPwyIEFZWVkZ2djalpaWYWdjlxI27s23bNsrKyhg7dmzY5YiIiMh+GBDDkc3NzeTn5w/oAAZgZuTn5w+KHj8REZGBbkD0hAEDPoDtMljaKSIisj+eWrKVV1dXU1qQycSiLI4YN5TUpMSwy3qfARPCwlRTU8O9997Ll7/85X163emnn869995LXl5enCoTEREZXGp2tvKjvy3lsXe2kJqUQEt7FICDSnK5+bJDKclLB2JTfFrao6QlhxfM4hrCzOxU4H+BROBP7n5DJ9tcCPwYcOAdd/9UPGuKh5qaGn7/+99/IIRFIhESE7s+uE888US8SxMREekX1lU3sraqATNobXfKa5vYUtPElppmNtc00dQa4XPHlvKJQ0eRkGA0t0V4e2MNqckJDMlIYUtNE08v3co/FpdT29TGN06exJdPGE9tUxuvrq7mh48s4azfvMI3T5nEsvI6nl9RybmzS7j21CmhtTluIczMEoHfAacAZcCbZvaYuy/rsM1E4HvAMe6+w8yK4lVPPF133XWsWbOGgw8+mOTkZLKyshgxYgSLFi1i2bJlnHvuuWzatInm5mauvvpqrrzySuDfV/9vaGjgtNNO49hjj2XevHn8/+zdd3iUVfbA8e+dSe+9J9SQ0EOVIkVRAVERZO3YC7ZVd9eyu+6ua1ld/alr72KvKIKISBOUJr2XJBACCQnpvc/c3x83kAQCDCQhIZzP8/CQeeedd8470WcO9557bmRkJLNmzcLd3b2V70wIIYRoflnFFQR5umKxmBKbnZlFXPbqcqps9gbnuTpZiPRzJ8LPHZtd88i3W/h01T66hXozf1smxZU1Dc53c7YwMjaY+86PpXeULwBBXq5MTIikV6Qvd36yjse+34qni5URscH0j/E/PTd8DC05EjYYSNZa7wFQSn0JTAS21zvnduB1rXU+gNY6qwXjaTHPPvssW7duZePGjSxZsoQJEyawdevWwysYP/jgAwICAigvL2fQoEFcccUVBAYGNrhGUlISX3zxBe+++y5XXnkl3377Lddff31r3I4QQghxSrTWpOaWsWpPLpU1dvrH+NM93Bsnq1kHuDW9kFcXJ/HztoNM6B3Oy1cnYNfw4Feb8HF34s3rB+BsteBkUYT7uhHg6XK4FlprzexNB3hm7k725pQytlcY43qGYbUo8suq8HZz5tyuQbi7ND4D1SXYi9n3DifpYAnx4d5toj6sJZOwSGB/vcdpwDlHnNMNQCm1HDNl+bjWel5T3vTfP2xj+4GiplziKD0ifPjXpT0dPn/w4MENWki88sorzJw5E4D9+/eTlJR0VBLWqVMnEhISABgwYAB79+5teuBCCCFEC/hlZxazNx2gX4wfF3QPpaCsmpkb0pi7JZP0gvIG57o6WXB3saI1FJZX4+3mxITe4fy4JQMnqyLCz50dGUW8M3UAgzoGHPM9lVJMTIjk0j4R2LTG2XryDR48XJzoG9126rBbMglrbBmfbuT9Y4HRQBTwm1Kql9a6oMGFlLoDuAMgJiam+SNtZp6enod/XrJkCQsXLmTlypV4eHgwevToRltMuLq6Hv7ZarVSXl5+1DlCCCHE6ZBRWM7rvyQzsEMAExMiDo9GHSyq4IkftvPjlgw8XazM3JDOP2dtA8DJohgdF8y00V0Y2jkQDxcr61Lz2ZJeSGW1DYAIP3euOScGHzdnei5J5rl5uwCYMiCKi3qGORSbxaKwNJpinHlaMglLA6LrPY4CDjRyziqtdTWQopTahUnK1tQ/SWv9DvAOwMCBA49M5Bo4mRGr5uLt7U1xcXGjzxUWFuLv74+Hhwc7d+5k1apVpzk6IYQQ7d2GffmsS83n8n6RBHm5HvO8VXtyeWbuDoK8XOkd5YuvuzN7skvZl1dGx0APBnUKID2/nJcXJVFWZePTVfv4bkM6Nw/vyJxNGfyw2XyN/+Wibtwxsgv78spYvPMg7i5mdCvA06XB+0X4uXNp34hGY7l7dFcsSrFox0H+eWmP5vswziAtyi39DQAAIABJREFUmYStAWKVUp2AdOBq4MiVj98D1wAfKqWCMNOTe1owphYRGBjI8OHD6dWrF+7u7oSGhh5+bty4cbz11lv06dOHuLg4hgwZ0oqRCiGEaItqbHZ+3nYQqwXG9gxzuCfkpv0FvLggkaWJ2QD8b2ESd43uwi3DOx1VG/XVmn089v1WQn3cKKuysXhXFlqDt5sT0f4erNmbx0crUwG4oHsI/7ikB0t2ZfPcvJ38mpiNp4uVKwdGcdu5nekYZGZ8uoZ40TXE65Tve9qoLkwb1eWUX3+mU1ofd2CpaRdX6mLgf5h6rw+01k8rpZ4A1mqtZyvzX9kLwDjABjyttf7yeNccOHCgXrt2bYNjO3bsoHv37i1yD23R2Xa/QgjR3qTll7Fhn6m8yS6u5MMVe9mXVwbAhD7hPDu5N0UVNXyyMpXckkpuHdGJ+DCfw6/XWjN9+V6enrsDX3dnbh/RmRGxQbyyKIn52w/SJdiTN68fQLdQb4oqqnlu3k4+XbWPEbFBvHZtf3zdnSmtrKGsykaQlyl+r7bZ2X6giBq7nQEd6mqzDhSUs3F/ASNig/B2k32LT5ZSap3WemCjz7VkEtYSJAk7++5XCCHak6yiCsb+71fyy6oPH+sb7cfdo7uwJ7uU/5u/C38PZ/LLqtFa4+5spbTKxoTe4YyIDSLEx5W5WzKZsS6Ni3qE8sKVfRskR8uScnjgq42UVtZw0/COzFiXRk5JJbcO78Sj4+MPr1QUp8fxkjDpmC+EEEKcJlprHpqxmbIqG5/ffg7BXq44Wy10CPQ4PAU5uJM/Ly5IpFeEL1OHdsDL1Yn3fkth+vIUftyScfha94+J5f4xsYd7bR1ybmwQc/94Lvd+sYE3l+ymT5Qv7984kD5RbWdVoDAkCRNCCCFqJWeV8MHyFGJDvDgvLoQQH1f25pSRUVhOhJ87nYM9G/SX2plZxIvzE9meUcSI2GAu6hnK8C5BuDiZ0ab9eWU8//Mu3J2t3DisI2tT81iamM0TE3syrEtQozEM6BDAZ7c1rB/+y9g4/jgmlqziCrKKK/FwsTaYnjxSiI8bn992DpvSCkiI9sdqaR+rCdsbScKEEEIIYHVKHrd/vJayqhqqbZp//7D9qHOsFkWUvzsh3q64OFlYsTsXLxcnBncKYPbGdL5YvY9ATxcm9Ysk0MuVVxYlYVFg1/DV2v1YFIzqFszUIR1OOj4XJwtR/h5E+Xs4dL6T1dKgtku0PZKECSGEaLfS8ssI8HTBw+XYX3c2u+bbdWk89v1WogLcmXPzuWgNSxKzKCqvpmOQJ+G+7hwoKCfxYDF7c8vIKqogp7iKaaO6cOfIzvh5uFBZY2NZUg4z1qXx0cq9VNs058UF89Sk3ni5OPHlmn2s2ZvHfyb1dnj1o2jfpDD/DHS23a8QQtS3P6+M7zekM6xr4HFHen5NzOaWD9fg5mxlQu9wJvWPJCHaDzdnM51YXFHNwh0HeW1xMruzSxncKYB3pg7Az8PlmNd0VG5JJfvzy+kb5SsJ11lOCvPbGC8vL0pKSlo7DCGEOCNorbHZNZU1dqYvT+G1X5KpqLbzwgJIiPbjzpGdGdszrEGB+rYDhdz16Tq6hnjRO9KXHzYf4Ku1+3GxWugZ6UNJRQ3J2SVoDfFh3rx+bX/G9wo7qsj9VAV6uRJ4nKapQoAkYUIIIdoQu11jsSi01qzfV8D05Sn8vC2TalvdrM3FvcP404VxrNidw/vLUrjrs/XEhXpz7/ldCfd1I6ekin/O2oqvuzMf3jyYMF83Hr+sJ8uSc1iXms+GffnEBHhwad8IBnTwZ2jnwGZLvoQ4GZKENYNHHnmEDh06cPfddwPw+OOPo5Ti119/JT8/n+rqap566ikmTpzYypEKIUTb8MmqVOZtzeDfl/Wka4g31TY7z8zdyUcr9+JkUbi7WCkoq8bHzYlrBscQ7OWK1apIiPJjWFezqrBriBfXndOBOZsP8PKiJO77YsPh6/u6O/PptKGE+boB4OnqxNieYYx1cH9CIU4HqQlrBhs2bOCBBx5g6dKlAPTo0YN58+bh5+eHj48POTk5DBkyhKSkJJRSTZ6ObO37FUIIu12zPaOIdan5bE4rJDW3lL7RfpwfH0KvSF+cLAonq2rQzuGQD5al8MSc7VgtCherhUfHxzN3Swa/p+QxqV8kwd6ulFTW0D3ch8n9IvF0PfF4gc2uWbk7F43G192ZDoGe+LpLd3fR+s6umrCfHoXMLc17zbDeMP7ZYz7dr18/srKyOHDgANnZ2fj7+xMeHs6DDz7Ir7/+isViIT09nYMHDxIWJv8KE0KcGSprbOzNKaNriBfW2inCtan5fLVmP0t2ZZNTUglAkJcL0QEefLIylfeXpTS4RnSAO70ifIkN9SbIy4XMwgreWLKb8b3CeOySHjz0zSb+NXsbrk4WXrqqL5P6RZ1SrFaL4tzYxvtuCdFWtb8krJVMmTKFGTNmkJmZydVXX81nn31GdnY269atw9nZmY4dO1JRUdHaYQohhENySiq59aO1bNpfQJCXKxf2CGH7gSI2pRXi7ebE6LgQRncLZmiXQMJ93VBKUVpZw/LkHPbllWGzayqq7SQeLGZLeiHztmVyaOJlfK8wXrmmH85WC5/ceg7frkujd5Qv3cOP3XxUiPao/SVhxxmxaklXX301t99+Ozk5OSxdupSvv/6akJAQnJ2d+eWXX0hNTW2VuIQQ4kS01mxNLyIpq5gofw+crIr7v9xAdnElD4+LY2t6ITM3pBPh685Tl/fiiv5RuLscPc3o6erERceouaqx2Skor6akoqbBFj1Wi+LKQdEten9CtFXtLwlrJT179qS4uJjIyEjCw8O57rrruPTSSxk4cCAJCQnEx8e3dohCiHZoT3YJy5JzuGZwDM61GzPb7ZodmUXEh/kc3q4ms7CCL1bvY2dmEUlZJVTb7MSF+tAh0IPfkrJJPNiwTjXIy4Wv7hhK32iz32CNzY7Vok6555WT1UKQlytB0rZBiMMkCWtGW7bU1aIFBQWxcuXKRs+THmFCiFPx2uIkPli+l6sHRTN1aAdmbzzAiwsSqayxsz41nxevTMCuNQ/P2Mx3G9KJ8HXjqkEx5JdV8fnqfdTY7HQK8iQ2xAsnq4VdmcX8siuLvlG+PD2pF4M7BpBeUE5GYQWjugUT4ed++L2dahM8IUTzkSRMCCFakdaa53/exa7MYq4cFM2Y+BA2pRXy2e+pFFfU8Ozk3gR6ubJkVxYvLEikY6Anby7dzRtLdgNwYY9QYkO8eGPJbjxcnSgoq2LulkymDunA3txSXlqYiNWimNI/invP70p0QMN9Bw/15TokNtT7tN6/EGczScKEEKIFVVTbWLIrm63phYyOC2ZAB//DU3paa/47bxdvLd2Nt5sTi3Zm4elipbTKhperE9U2O5PeWMHTk3rx4FcbiQv1ZubdwzlYVMGMdWl0D/fh4t5hKKWwa3hrqUnMHpvQndtGdAbM3okWpRqMatUnTUqFaD2ShAkhxBEqqm1oTaPF5yWVNfz1uy1cnhDBmO6hx7zG5rQCPlmZyk9bMymprAHgtV+S6RTkyYU9QukZ4UPSwRLeWrqb686J4fHLerJ4Zxbztx1kQAd/JiZEkHiwmNs/XsvU91fj5erEG9f1x93FSscgT/4yNq7B+z0yLg4/D2fCfNy4vF/k4eNR/g1HvoQQbUe7ScK01mfFJqlnWnNdIc40VTV2rnp7JclZJUzqH8kNQzvSrd4U3fPzdvLDpgPM3ZLBS1clcFnfCArLq/l+Qzpp+WWUVNrYnlHEpv0FeLhYuaRPOJf0iaBvlB/zt2fy7fo0Ply+lyqbHYBJ/SJ5cmIvLBZ1VEf3fjH+fH/PcP41axvXnhND52CvY8atlGLaqC4t98EIIZpdu+iYn5KSgre3N4GBge06EdNak5ubS3FxMZ06dWrtcIRol57+cTvv/pbCBd1D+DUph6oaO/ePieWBC2JZvy+fKW+t5KqB0ezJKWXN3jwu6RPB4h0HKa2y4e5sxdPViVAfV/4wIIrJA6LwcTu6a3u1zc7u7BJyS6o4p1OAFL0L0Y61+475UVFRpKWlkZ2d3dqhtDg3Nzeiok6to7QQ4viW7Mri3d9SuGFoB56Y2Iu80ir+M3cHLy9KIi2/nE1pBUT4uvOPS3pgUYo7P13H3C0ZXNonnNtGdKZXpK9D7+NstRAfJo1JhTjbtYskzNnZWUaGhBAOyyutYlNaAUt3ZbM0MZuKahvR/h4kZRUTH+bN3y42e7MGeLrw/JQ+xAR48OKCRAA+vHnQ4b0Mp980iJKKGnw9ZI9CIcTJaxdJmBDi7FZZY8PFakEpRUW1je83pPPlmv1E+rkzvncYcaHeLEvOYWliNlvTiw7veejmbGFYlyD8PJxJyy+nY5Anz13RBzfnuoJ8pRR/HBNL1xAvMgsrGB0Xcvg5q0VJAiaEOGWShAkh2qzjLbhJzipm5oZ0liXlsCW9EHdnKzGBnmQXV5JTUklcqDe/p+Tx45aMw6/pHOTJeXHBxIV5Ex/mw8CO/g0SruO5uHd4s9yTEEIcIkmYEOK0mr3pABv25fPYhB6Ht9RpzNdr9vOfn3Zw6/BO3DGqM65OJlmy2TXv/raHF+cnYtOaftF+TBvVhbIqG/vyyoj2d+fGYR0Z1iUQu4a1e/NIySllaJdAOgR6nq7bFEKIEzphEqaUugSYq7W2n4Z4hBDtVLXNztM/7uDDFXsBMyo1dWjHRs+dtTGdR77bTLiPGy8sSOT7jelMTIgkv6yKdan5bE4rZHyvMJ68vNdx9yK0KjincyDndA5sgTsSQoimcWQk7GrgZaXUt8B0rfWOFo5JCNHOlFXVcNP0NaxOyePWczuxI6OI537exbhe4QR7uzJvawYfr0wlyt+dAE9X3v1tD+d0CmD6TYNZlZLLP2dt5cUFiXjVtn94+WrTn6s9t6QR4oylNWRuAWd3CIpt/uvn7wW7DQId7IunNaSuAKsLBMeBqzcU7oesHeAZDJH9mz9GBznUJ0wp5QNcA9wMaGA68IXWurhlwztaY33ChBBtl9aaez/fwNytGbx4ZV8m9Ytid3YJ4//3GxP6hNMzwoen5+4g0s+dimobOSVVDOzgz0e3DD68CtFu11TZ7A7Xb4kzjNZQP6G222DGLeAbBRc+CZZm6qNmtzfftVrCgY1Qng9dzjv2OdUV8MvTsH81XPUpeAWb46U5sOlLsJlFJ8ReBGG9WzZeuw0stf9Pag1Z22Hrd7BtJuTtBmdPuP5b6DD0xNcqyYKkBRASD5EDGj/HVgPLXoKlz4K9BnpOgpEPg39H87yTW8Pfr9aQNB9++Q9kbKw77uQONeXm535TYeJrJ33rJ+N4fcIcbtaqlAoCrgceAHYAXYFXtNavNlegjpAkTIi2SWtNUUUNuSWVFFXU0DXECy9XJ15dlMQLCxL56/h47qzX0f2F+bt4dXEyAON7hfHSVQm4OVspKKvC191ZRrnOFttnwdyHoMflMP6/Jhlb+Tr8/Dfz/MBbYcILDZO0k1WaAz/+GfYsgbH/gYRrzfVsNVCaDT4nWHRRXQ4rX4M+V4FfzKnHcTx7l8GnU0xyMPpvMOrho+85bS18fzfk7AKLsxnBuWE2VBbDR5dA9s66c509Yep3EDPEPK4sMYmLu1/T4izOhK3fmkQrba35PEK6Q94eyEkEZYFOI6H7pbDqLSjOgKkzTUK9fRZYnGDgLXXJ275VsPgpSF0Oh6qeuo2DEX+GiH5gdYaqUpNMLX8ZDmyAXleYxOv3t6GqpC62oG5w9edm9K2yBGbeCTvngF8HGPkQeARC9g4ozYWgrhDc3SR97v5N+0xOoElJmFLqUuAWoAvwCfCR1jpLKeUB7NBad2jugI9HkjAh2o780iq+XLOftXvz2LC/gLzSqsPPWS2K7uHebE0v4vKECF66KqFBYlVRbePm6WtIiPHjoYviZCPp1qA1HFgPYX3Ml93x5KWYZCY4DtwcaDSrtfliLS8wj0N7QEDnuufLC0xitHUGeIZAaRaMfQa6jYU3h5sv8pB488U7+E6TPFkbqaDJSTJf6PWvXT+GHbNhzp+gsgiC4uDgFvMl7xNpnivNgcvfMIkZmMTswHqIHFg3qrL4afj1OZNw3DQX/KJPfP8nI3WFScD8os3vYsvX0GuKGekBk3RtnWli94mEy1419/PNTSZ5zUkySdC1X0LMUJNYfjzRJEx/+AjSVsPKN0yC13m0uf/yfDMd5xMB5/8DnN3Me23+2oxIxV4IcePN1B2YUcQ178HCf0F1mYmz8ygoTDfJn0egibf7ZXWjc0UZ8OEEKEwDWxVmIg2Iuxgmvws7foDZ94FXqPn84y+G5EWw4lWoKDCJZmAXKNhn3tM7HMY9U/e5lOaahLC6zCSYq94EezVMeBGW/w8OboMLHochd5/4v+8W1NQk7GPgPa31r408N0Zrvah5wnSMJGFCtJy80ircnC14uDT8siuvsvH12v38lpTD4E7+jOkeyorkHF5YkEhBWTVdQ7zoF+1HXJg3QV6ueLhY2ZxWyMo9uXi5OvH21AEylXjklFtLOrjdjBjEjQePAHOsLA92/QQRCRDSw0z/zHkAds2Fc+6C8c8e+3r7V8OHl9RNdQXGwuVvQvSgxs+vqYIf7odNn9cdc/aAu1ZAQCfzWXxxNSQvhFGPwPAHYMbNsPNHCOwKJQfhnt/Nl+78x8woVEAXc27MEMjeZe5v+yzI2gbKCuc+aJ53cjHX370IfnkG0teahGHS2yaBXPUmLHrCJG7dxkJJtkkWJ70N4X3h+2nm2iMfgvMfM8nn6+dA9GDI2Awe/mYasDTHJB9Z2yFrpxnhGfcfM3pzpEPfs0f+/qtKYfW78Ovz5l5v+hG8QmDZiybG+qIGQ8/LIeG6utGsX583o0hObnDtVybBOqTogEmA8vaYx90vM4nqtplQkGqO+cZA4T6IPgeu/MR8ziteMb+r6jJz3bA+dSNde3+DLmNg3LMQ3O3Y/73UV3QAfnoEQnuZ5GnPEpj3iLnfonSTbF/5ccPRqIpCSPzZfLbZu8A7DHpOhg7D6kbQGpO/Fz6/yvxeXLxgynTodpFjcbagpiZhnYAMrXVF7WN3IFRrvbe5A3WEJGFCNK99uWV8sDyF5ck5JGWZof1gb1ei/d0J9HLF282JJbuyySutItzXjYzCisOvHdYlkH9d2pO4MO9jXV5oDb/9n5k6ufITx+pjTkV2Imyrrcc5NC3l4g1D7qqd4nsDqmrLeIPizMhTVZmpGzqwAaYtM6NVdpuZDgyKNSMmBfvgvTHmS+3Cf5tRlw2fmFGOy9+A3lMaxlGaC19PNYnNyIfNtFRlsflyjOxnps+2zIDvbjOjW0PvMa+rKoXp4yFjkxnp6X9D3ee3a65JqA5uafheMUPNF3vGJtj4GQTHg0eQmXIqywXfaBj5F5O41B8JKS8wj108zWfw+ZUmXoszuHqZRCp5oUnMts+CPUvhvrUmofj48rrPEcwIUHB3yE02I1AjH4JekwEFRWmw7Xsz4oM25wV2NgXidpu5r9Js6HoBXPZaw2nRgn11o4ieQWbE6kham6QyIsEkKEcqTIff34Lef4DwPnWvyU8xo4+uXub+vrvTxFdTYaZ/xz0L6evMSGHGJpMM2e1w0RPQ/8am/2MiaaH5/fe4HC5+vnlHqSoKYfkr5ncQ2rP5rtsETU3C1gLDtNZVtY9dgOVa62P8E6hlSRImRPPJLalk4uvLyS6uZHCnAIZ2CTSzSLmlpOWXk1daRV5pFb0jfZk2uguDOgawP6+MJbuyCPd1Z0z3EKndOp6aSpj9R9j8pRldcHaH2xaZ0aDmkLvbJF5bZ5oRIZT5Mu45ySRXq94wX7JgRkKG3gMHt5rEwOoM4/5rvuBf6WfOv2EWzLoHNn1hXhPRzyQpxZlw28K60Y/SXPjqOti30lw3vK8ZwUn82UxlwdEJ2toPYM6DcN5jJq7ALnDLzw1HNkpzIGWpGfU48r8rux0S50FJZuO1PLt+MqNHLp5m5Cb6HJN8OB27hclhVaXw7e3m3PHPgZsvfDrZTBNqm5nSOvdBc27WDpOwBcaaEcVDU2/l+WbEZ/NXDa/t4mWSWVdv89r8lLrap7DeMOpRiDnnxDG2pPR18MMD0O96GHzH0Z+91uZPcy5qaOuLJJpRU5OwjVrrhCOObdJa923GGB0mSZgQx7b9QBFPz91Oj3AfhnUNwqoUv6fksjmtEFcnK34ezsSHeXPVoGhcnaxc//7vbNpfwNd3DqVvdBMLdkVD9ROV8/5uEov3xpj6l4ufN6Mgu3+pm+KLHACX/O/E9VZam0Rn6X/NVBuYhKPnZOgx8egi8+xEzChM3LGvufpdmPsXUweVvtYUhvtGmvcoOgDXzTh6xV5NJcz/h7mPwv3mmFeoGd0YcOPRoxB2O3x8mZnSsrrCtN+OH1NrK8uD9y80U53TfnMsmQNTaF6YZn529YFOI0zyLc5aTU3CFgCvaq1n1z6eCPxRaz2m2SN1gCRhQjQuq7iCy19bTnFFDZU1dqps5l/bVosiPswbu4aCsioyCivwdnMiLtSbtan5vHx1AhMTIls5+jOU3WZGUY5MnLJ3mSmuogyY9KZZzQWQ8it8MskUEVtdTWGzuz/Yqs3UT2Csqe3x72BWd+XsMqMnOYkm6QGzIi29dlXa4DvMqJdvVNPv4+1RZrpv1KNw3l/N8ZoqKMtpfCqsvooiswousOvxa3byUuD9i8yo0tC7mxbz6VBdbn5XrjLdLk5dU5OwLsBnQASggP3ADVrrZAfeeBzwMmDFFPc/e8TzNwHPA+m1h17TWr93vGtKEibORtU2O7klVYT5ujU4XlZVg7uzlcoaO9e8u4qdGcV8M20oXYK9WJeaj11rBnTwP9xvC2BLWiFvLd3N3K0Z3HdeV/50URsejTid7HaThIT2PvE0id1mVmUtedYULHcYboqmwdRjbf7GFIhf/cXRxeu7F5tpt27jGiZve5bA1zeYJf6u3qYm6BCrS91oimcwDLvv6DqnpspLMb2UelzesgsI6veWEuIs0Fx9wrxqz3eoQatSygokAhcCacAa4Bqt9fZ659wEDNRa3+tQEEgSJs4+GYXlTPt0PVvSCrh5eCf+dGE3DhZV8MSc7SzZlY2vuzM+7k7szyvnjev6O7zRdHFFNd5urbds+7TS2iQ5K18zCU7PSaaZ5aHEpqoUvrvD9BTqNAomvm5WZG383DTArL/qrTzfrBQ8uNUkbF3PN/VIOYnmeRdvk3hd+vLJ95TKToQF/zD1YyHdzZ/g7qYnUmPtGYQQbV6TkzCl1ASgJ3D4n+Fa6yeO/QpQSg0FHtdaj619/Nfa1z1T75ybkCRMCOZtzeBfs7fh7+FCvxh/ekT4EO7jRo1d89j3WyivsnFefAhzNmcQ4u1KflkVbk5Wrh0SQ2llDam5ZYztGcb1Q05r277Trzwf1n9iCogPtV4AM210rLqbnGTTi2jfCrMs3lZtpthcvEwLh7jxphdV5hYzurRtJqBMK4KCfaYmKCgW7vzV1AV9X1u4PvkdU4dlsZgkL3e36bXkE3n6WlEIIdq84yVhjmzg/RbgAZwHvAdMAVY78L6RmKnLQ9KAxpaAXKGUGokZNXtQa72/kXOEOOOUVdWwZFc2KTmlTB3aAZ9GRp3sds3/FibyyuJkekb4EODpwpzNB/hidd1UVOcgT768YwhdQ7y5aVgeT/24g9FxwTw0Np5gbweLhc8kRQfMaNWRdTi5u02dVW6yaWZ5w2yTiK37EH78i+kwPurhhq+pKoUvrzXtGMY/b9oeWJxMcfi270zrgC3fmITsmi9N36iRfzEd3CuK4OL/M9ODn00xPZlihsDGT0037/or/5QyHbiFEOIkOFITtllr3afe317Ad1rr43ZAU0r9ARirtb6t9vFUYLDW+r565wQCJVrrSqXUNOBKrfX5jVzrDuAOgJiYmAGpqakneZtCnB42u+bXpGxmrE1j0c6DVFSb4vieET58dMtggrxc0VqzNb2IBTsOMn9bJjszi/nDgCievLwXbs5W7HZNVnElmUUV5JdWMbCj/9kzbbjvd9MawDvMNK70DjPHU34zvadQcO4DpoN5SDzEDIPf36zruH7F+w2To+/vMf2jbvi+YSPLQ2zVZvWiX0zd/nONmXmXaT3gGQRufmZUzNnt2OcLIUStphbmr9ZaD1ZKrQImA7nAVq31cbdGd2Q68ojzrUCe1tr3eNeV6UjRVi1PzuHPX28is6iCAE8XLukTzsW9wymtrOGez9cT7uvOxIQIZm08QEpOKRYF/WP8uWpQNFMGRLXPfls1VWa7ElevumO2GrO1yJHTh2lrTSNMjwBTuO4baTb//f3tuuah135lun4nzjftH2xVZkubCx43o1Vpa805Id3NXnOz76vrfN4UZXnwxhDTZf7W+aZ7uhBCOKCpSdg/gFeBMcDrmM2f3tVa//MEr3PCTDGOwax+XANcq7XeVu+ccK11Ru3Pk4BHtNZDjnddScJEa9l+oIiPV+7FxclCTIAHfaP9GNTR1CWl5JRy2WvLCPVx488XdmNM91BcnOpW2K3dm8ctH66hqKKGIZ0DmNQvkgt7hBHg6dJKd9NCqkpNQ82dc02NVd5us8TfN9q0LyjNrt3k1wqDbjXb1WibaR76y9Om+/jNc81Kvc+mmLYM2mY2/L3wyYbJXOoK0xbhUPuH0lzThys/pe6cmGFw4w/NU9Sesdn0w4qf0PRrCSHOGqechCmlLMAQrfWK2seugJvWutDBN74Y+B+mRcUHWuunlVJPAGu11rOVUs8AlwE1QB5wl9Z657GvKEmYaDk1Njsrdufi7mI9nFwBJGeV8NLCRH7cnIGnixWLRVFcUQPA5P6R/PmiOG78YDW5JZXMvvdcogM8Gr1+ZmEFNq2J9GvDjRtTV5gpupDuphVC/dG5sjzYu8xsMhwUZ/Zp2/aIKQeKAAAgAElEQVSdWXVoqzLF6TlJZpNgr1DTfDQ4Hlw8TN+snCTTVT043owobfnatF6oqQS0WX141ad1Pa9SfjPNQs99ELo62JawONOsVESb2q/ulzbsqi6EEKdZU0fCVmqtW2izs5MnSZhobqWVNfxvYSIzNxwgp8Q0xBwRG8St53ZizuYMvlufhpuzlVuGd+L2EZ3x9XCmoKyKD5al8PqS3Yev88mtgxnWJai1bsMxmVtMchNUu+WKb2TD594agRnsxqwk7H4pxF9itmlZ9SZUFjW8nrKYjYUPbSjsG23aP8QMPXGvrZwkM9XoEWj2eWvL3dOFEOIUNTUJ+zewGVOM71hTsRYkSZhoiqKKan7fk8eY+BAsFoXWmrs+Xc/87Zlc2COUSf2iSMsv47Vfkikoq8bFycINQzowbXQXgryOXom4Ja2QJ3/czhX9I7lq0En2hDrdsnaabVjqJ1LjnjUbPAN8OgXSVsPk98w0YuoKU1dVU7thd/fLTIf2slwzsuUZaI55hZz+exFCiDNEU5OwYsATM2VYgemar7XWJ9jgrGVIEiZOVXZxJTd8sJodGUVc1COUl65K4KOVe3lu3i4em9Cd20Z0PnxuUUU1i3YcZGjnoKO61LcIW7WZ6usw3HRab26lOfDu+aaf1tSZUFFoemPtXmQ2Ua4uh48ugQufgOH3172usgT2/GJWDob1bv64hBCinWuWjvlthSRh4lSk5Zdx/Xu/c7CokqsGRfPxyr10DPRkb24pE/pE8MrVCa2zOtFWY2qjlv7X1FgNvhMufu7Ur1ewz2zunHBdXQuF6gr4eKLZkuamuRA1wBwvLzDTjwpwDzBF8/etk82GhRCiGTW1WevIxo5rrX9tamBCNCetNSv35PLDpgxGxwUztqfpMbUjo4ibp6+hrKqGT28bzIAOAYyKC+a+zzfQLdSb/17R+/QnYA32HtwN4X1N7dXqt80ehB2GHf/15fmwY45JrPw7QVA3SPzJdJO3V8OuuXD15+bcr66D/b/DlPfrEjAwdVxTPoDp40zydtlrkoAJIcRp5Mh05A/1HroBg4F1jTVVPR1kJEwcSWvNvK2ZvLwoiZ2ZxVgtCptdc+PQDoyIDeaBrzbi5erE9JsH0T28bhY9p6QSN2crXq6naU++ZS9B4s/m56IDUJBq9h48768QdzFUl8EbQ82qvruWH50QVRSa1g/bZppNoO3V4OwJ1aXmeYuz6Qjv39HsPxg71hxP+hkufQUG3Nh4XOs+MtOSV3wg+xMKIUQza9bpSKVUNPCc1vqa5gjuZEkSdnbaml7IG0uS6Rvlx+T+UYe369mdXcLjs7fxW1IOsSFe3DaiExf3DuflhUm8t8z0i+oe7sP0mwadntquY6kshue7mhWHftHg5Gb2P4y/tOEqwj1LzNRh5/PA6mx6alXXFsaX55lWEL7RZrSs52TT1uFQobx/h7r2Dms/gDkPmp8vecn02RJCCHHaNXcSpoDNWutWqdKVJOzs8+PmDP78zUasSlFaZcPJoogO8CCrqILSKhverk786aJuTB3SASdrXUKzaMdBfkvK4c8XdTv92/5UlphE69DI0qavYOYdpgg+5rj9iGHuw7BuupliDI4z+xqCmT6MvwSiBjm2QfS2maZ3V6/JTbsXIYQQp6ypqyNf5XDjICxAArBXa319s0bpIEnC2of80irsWuPv4YLFUpdQ5JVWsTOziOSsEjILK9ibW8rcLZkM6ODPW9cPoLC8im/WprE/v4xQHzci/dy5LCGCEO82tI9fxiYzmtXlfFNzBfDZHyBrB9y/+cT9s8AkT+1xGyMhhDjLNKkwH6if8dQAX2itlzdLZOKsUm2z89PWTGasS2NZUjZ2DVaLwtfdGZtdU2OzU1plO3y+k0UR6uPGDUM78PcJ3XF1shLs7cpfL+7ePAHN+ZOZwqvfkuFU1E+YMreYBKyy2BTeD7nb7HW4ezEMvcexBAwkARNCiLOAI0nYDKBCa20Ds9G2UspDa13WsqGJ9sRmN01RF+44SKSfO3eN7kKwlyvZJZUUlldjVQqrxUKYryvdw33oFupNsJdrg1GyZrV7Max933R87zIGwnqd3Otrqsw1ts00KxGd3CAkHg5uA2cPs1/hJ5Ngwb+g9xVm/8ReU1rmXoQQQpyRHEnCFgEXACW1j92B+cAJ1tALUeeZuTtYuOMgj03ozi3DO7VccuUIu90kR77RZsPpnx6Gm350bPRpz1LY/DXs/MGsVnTzNVv7oCBrO/h1gCveg8AuMPJh+OkhU1wf1E2anQohhGjAkSTMTWt9KAFDa12ilGp8h2IhALtd8+riZFbtyWVgR38sSvHeshRuGtaxQVf6VrPtO8jcDJPeMW0h5jxgpg6DusFvL4C2wbl/gsj+da8pzYW5fzYjX64+ED/BrE7sPPrYHe4H3ASrXjdNWAfdJlOMQgghGnAkCStVSvXXWq8HUEoNAMpbNixxpsgqruC79elU1diZmBBBsLcrD361kZ+3HaRzsCev/5KMXcPouGAem9BMtVz1leaCm49p5+CImipY/KTpz9X7D4A2KxFn32cSMjdfM0W54weIvQgCuoC2m+SrPB/O/wcMvbeuG/3xOLnAhU/CzDuhzx+adJtCCCHaH0eSsAeAb5RSB2ofhwNXtVxI4kywO7uE5+ftYuGOg9TYNUrBiwsSCfR0Ib+sin9e0oObh3ekuLKGLWmF9I/xb9A+oklKc2Hjp7D1O9Mx3uIEgbHQdQxc8PixEzKtYf7fzcjUdTPqiuQveQm+uwN6XWEK6ZUFfn/b1Izt+92cE9zN7Ll4srVjPS4zo2YW6ynerBBCiPbKoT5hSilnIA6zy9xOrXV1Swd2LNKionVV2+y8+9se/rcwCTcnC9cMjuGqQdG4u1iZuSGdVXvyuGlYB86PD22ZAGqq4N3z4OBWiOhvEpyqUvM4aT70nAST3zu687vW8PPfzfTgkHtg7NMyPSiEEKLFNXXvyHuAz7TWW2sf+yulrtFav9HMcYo2pqiiGndnK861I1iF5dXc+uEa1qbmc3HvMB6/rGeD/lx3j+7K3aMdvLit2ow4nWiEqKbKnHcoqVr2kkm4rvzEjDLVt+JVmP8YKCtMfqfu2rZqWPBPWPUGnDNNEjAhhBBtgiPTkbdrrV8/9EBrna+Uuh2QJKydqqyx8d5vKby2OJkIPzdeGhdEtz2fMG3PSDZlKV6+OoGJCZGndnGtzZY68/8BLp7QY6JZXRjeB9z9G55bnAkfXQo1FTDxDfAIhF+fN60ejkzAAIbdZ1pBLHwccnbB6L9BQCf4/i44sAEG3wnjnpUETAghRJvgSMf8zUBfXXuiUsqK2bao52mI7ygyHdmyNu0v4IGvNpKSU8qY+BB2ZhZzV+lrXG9dxDbdkbwpMxjRO/bULl6YZgrgdy+GTiPBzc9MIdbU7o3oFQZx42HEn8HJFT6cAIXp4BVs6ri8QsFug3tWg2fgsd9nywxY/BTkm70j8QiECS+a/RaFEEKI06ipHfN/Br5WSr2F2b5oGjCvGeMTbcSypBzu+GQtAZ4ufHTLYEZ1C6akuBCnl1ay3d6Z7tY0LCtvh64z60atyvJg54+Qt8c8tjqb1g0h8XUX1ho2fg7zHjVJ1IQXYOCtZkSqshhSV0L2DsjYDBs/gw2fgmcwVBSYAvqIBDO6teZ9sw3Q8RIwgN5ToMflsPlL06Nr6L3gFdIin5kQQghxqhwZCbMAdwJjMIX584H3DnXQP91kJKx5aK35PSWPzWkFBHi6UlZVw1NzdtA52JOPbxlMiE9trdeGT2HWPeib5qIqi+CrqaZlQ0BnkyilrTZTgBYnQJmfwSRC8ZdAbjKk/AopSyFmGFz+unntsRTsN726En+GyW+bEbNDqiscaw0hhBBCtBFN2sC7rZEkrGm01vy0NZM3l+xmf3oanVUG63U3APrF+DH9pkH4edRrPvr+RaY/1j2rzchV2lrY9RNk74SidOg4AnpNhvAE83xpLqx4BVbXNkIF8I2BIdPgnLsc3ztRCCGEaAeaujoyFngG6AEcHobQWreB1ufiZNjtmifmbOfDFXvpHOTJj9GfEZn9KyXdJpMy+HG6dYzC1aneasWsHbD/d7joqbpi9qiB5s+xeAbChf+GYX+Egr2mf5ebT4velxBCCHEmcqQmbDrwL+Al4DzgZsy0pDgDVFTbqKyxo7Xm799v5cfNGdx6bif+llCJ9b1fIWYoXsmz6X1gRd3Un7Ob2cInfR1YnKHvNSf/xp6BJ67dEkIIIc5ijiRh7lrrRUoppbVOBR5XSv2GScxEG7Zu205Kv76TbLsXifZoUuy9+fvF47l9ZGf44lqzRc+1X5ui+nl/hbQ15oVVJbD+Y/Nzz8ngGdR6NyGEEEK0U44kYRW1xflJSql7gXRAlpq1cWVVNeye+TRXqM1UeARyReUyHlHfYPH0gowS2PWj6aPl5mNWH97y0xEXyDMrC4PjG38DIYQQQjSJo3tHegB/BJ7ETEne2JJBiaZ7Y85K7qmeR16Xywm+YTqUZGOZeSf88EfwjgBXHzjnzmNfwCMAYoacvoCFEEKIs8wJkzCtde0cFSWYejDRypKzivl6bRrxYd4M7RJIUXkNSxOz2JpeRIdAD/w9XPBe/xauTjW4X/x38yKvYDP1OO9RWPMujHoE3P1a90aEEEKIs5gjI2GiNRUdgNQVZmNqi5XU3FKuefd3sosrjzo1zMeNOZsP4KeLWO62AHvPyViCutadYHWCCf8H/adCaK/TeBNCCCGEOJIkYW1ZdQV89gezYfXqd8i54H9c/1UmNTY78x8YgSVnB4XrZ2J19SZ8+FWERnWl8mAS5fOfxG13FWr0w41fN7zv6b0PIYQQQhxFkrC2bP7fTQI29F70+o/xmj6K/9Ox9IjwxfubbMhNwnQL0bDjOfDrgGtBKq4AQ+6G4LjWjV8IIYQQx+RIs9Zg4HagY/3ztda3tFxYgu2zYM17Zt/DsU/zTP759Nj2AueFVeLtrMGzgyms7zERKopg20xIXwuD7zDH/KJb+w6EEEIIcRyOjITNAn4DFgKtsl/kWaWiEFa9CctfgcgBMOZfzN50gHc2VnDPeS9y+dhGWkZ4hcCoh05/rEIIIYQ4ZY4kYR5a60daPJKznd1u9ltc8h+TiMVfQs3YZ1m9t4i/fbeFAR38eeCCbq0dpRBCCCGaiSNJ2Byl1MVa67ktHs3ZKi8FZt0Dqcuhy/kUD/8b/9noyk+v7qCgrJpATxdevjoBZ6tsfi2EEEK0F44kYfcDf1NKVQHVtce01vqEuzIrpcYBLwNW4D2t9bPHOG8K8A0wSGu91qHI24uD2+D9sWaD7ImvsyHgYu79YiNZxdlc2ieCMd1DGdktCG8359aOVAghhBDNyJFmrd6ncmGllBV4HbgQSAPWKKVma623H3GeN6Yb/++n8j5ntKpS+OYmcPGA2xYyO9WJP7+zihBvN2ZMG0bfaGmmKoQQQrRXDrWoUEpdBoysfbhEaz3HgZcNBpK11ntqr/ElMBHYfsR5TwLPAX9xKOL2ZO7DkJMEN3xPjlMoj81cQu9IX6bfNBhfDxn5EkIIIdozR1pUPAsMAj6rPXS/UupcrfWjJ3hpJLC/3uM04Jwjrt0PiNZaz1FKtf8kLHUFfDUVvMPAJxKSfoaRD0Hn0fz3m02UVdl4bkofScCEEEKIs4AjI2EXAwlaazuAUuojYANwoiRMNXJMH35SKQvwEnDTiQJQSt0B3AEQExPjQMhtUGkuzLgVnD3AJwKydkDsRTDqUdal5vHNujTuHNWZriGnNPsrhBBCiDOMox3z/YC82p99HXxNGlC/Y2gUcKDeY2+gF7BEKQUQBsxWSl12ZHG+1vod4B2AgQMHas40WsOsu6EsB25dABEJh5/al1vG32duJdzXjT+eH9uKQQohhBDidHIkCXsG2KCU+gUzujUS+KsDr1sDxCqlOgHpwNXAtYee1FoXAkGHHiullgB/aTerIwv2wcbPwVYFBfshcR6Mf46K4N5s35fPlrRC5m3NZOWeXCwK3rp+AJ6usouUEEIIcbZwZHXkF7UJ0iBMEvaI1jrTgdfVKKXuBX7GtKj4QGu9TSn1BLBWaz27aaG3UVrDhk9g3t+gqhgstR9x32vZFH4l1z65gNIqs/FATIAHf76wG1MGRhHu696KQQshhBDidFNaNz67p5SK11rvVEr1b+x5rfX6Fo3sGAYOHKjXrm2jg2UVRTDzTtg1FzqOgImvg38HALTWXPn2SlJyynh6Ui96R/oS7utG7VSsEEIIIdohpdQ6rfXAxp473kjYnzDF8C808pwGzm+G2NqP/FT4/CrITYKxz8A508BS1+F+wfaDrNmbz9OTejG2Z1grBiqEEEKItuCYSZjW+o7aH8drrSvqP6eUcmvRqM40WTvhwwlgr4brv4XOoxs8XWOz8995O+kc7MlVA6MbvYQQQgghzi6ObEa4wsFjZ68Vr5gC/NsWHZWAAXy1dj+7s0t5dFw8TrL/oxBCCCE4zkiYUioM03DVvbap6qHiJR/A4zTEdmaoroAdP0D3SyHo6BYTMzek8e8ftjO4YwAX9ghthQCFEEII0RYdryZsLKaRahTwYr3jxcDfWjCmM0vyAqgsgl5XNDhss2ue+3knby/dw5DOAbxx3QApwhdCCCHEYcerCfsI+EgpdYXW+tvTGNOZZcsM8AyGTqMOHyquqOb+LzeyeGcW150Tw+OX9cRZpiGFEEIIUY8jfcK+VUpNAHoCbvWOP9GSgZ0RKotNE9Z+U8FqPsp9uWXc+tEa9uSU8uTEnkwd2rF1YxRCCCFEm+TIBt5vYWrAzgPeA6YAq1s4rjPDzh+hpgJ6TwGgotrGNe+uoqSyho9vGczwrkEnuIAQQgghzlaOzJEN01rfAORrrf8NDKXhnpBnry0zwDcaogYD8MXqfaQXlPPGdf0lARNCCCHEcTmShJXX/l2mlIoAqoFOLRfSGSJ3N+xebAryLRbKq2y8/stuhnQOkARMCCGEECfkSBI2RynlBzwPrAf2Al+2ZFBnhMVPgpMrDLkbgE9XpZJTUsmfLoxr5cCEEEIIcSZwpDD/ydofv1VKzQHctNaFLRtWG5e+HrbNhJEPg3copZU1vLl0NyNigxjcKaC1oxNCCCHEGeCEI2FKqXtqR8LQWlcCFqXU3S0eWVu28HHwCIRh9wEwfXkKeaVVPHhht9aNSwghhBBnDEemI2/XWhcceqC1zgdub7mQ2rjdiyFlKYx8CNx8yC6u5M0lu7moRyj9Y/xbOzohhBBCnCEcScIsql6rd6WUFXBpuZDauPWfmOasA28B4OVFiVTU2HlkfHwrByaEEEKIM8kJa8KAn4Gva/uFaWAaMK9Fo2qr7DYzEhY/AZxcSc4q4YvV+7l2cAxdgr1aOzohhBBCnEEcScIeAe4E7sJs4j0f07T17JO+HioKoOsYAP47byfuzlbuv+DojbuFEEIIIY7HkdWRduDN2j9nt+SFoCzQ+Tz255WxYPtB7h8TS5CXa2tHJoQQQogzzDGTMKXU11rrK5VSWzDTkA1orfu0aGRtUfJCiBwAHgHM/j0ZgCkDolo5KCGEEEKciY43EvZA7d+XnI5A2ryyPEhfB6MfBeCHTQfoH+NHdIBHKwcmhBBCiDPR8VZHzqn9+ymtdeqRf05HcG3K7sWAhq4XkHiwmJ2ZxVzWN6K1oxJCCCHEGep4I2EuSqkbgWFKqclHPqm1/q7lwmqDkheBuz9E9GP2gmQsCib0kSRMCCGEEKfmeEnYNOA6wA+49IjnNHD2JGF2u6kH63I+WlmYvekAw7sGEewtBflCCCGEODXHTMK01suAZUqptVrr909jTG3PgQ1QmgVdL2RTWiH78sq49/yurR2VEEIIIc5gx1sdeb7WejGQf9ZPR27/HizOEDeOn37JwNmqGNszrLWjEkIIIcQZ7HjTkaOAxRw9FQln03Sk1rB9FnQeDe7+/J6ynb5Rfvi6O7d2ZEIIIYQ4gx1vOvJftX/ffPrCaYMyNkFBKox8iPIqG1vTC7l9ZOfWjkoIIYQQZ7gTbuCtlLpfKeWjjPeUUuuVUhedjuDahO2zQFkhfgIb9xdQY9cM6ujf2lEJIYQQ4gx3wiQMuEVrXQRcBIQANwPPtmhUbYXWph6s00jwCGDN3jyUggExAa0dmRBCCCHOcI4kYar274uB6VrrTfWOtW8Ht0HeHugxEYA1e/OIC/XG10PqwYQQQgjRNI4kYeuUUvMxSdjPSilvwN6yYbUR22eZDbvjL6HGZmd9aj4DZSpSCCGEEM3geKsjD7kVSAD2aK3LlFIBmCnJ9i9zCwTHg1cwO9MLKa2yMaijTEUKIYQQoukcGQkbCuzSWhcopa4HHgMKWzasNqI4A3zM1kRr9uYBSBImhBBCiGbhSBL2JlCmlOoLPAykAh+3aFRtRXEGeIcDsHZvPpF+7kT4ubdyUEIIIYRoDxxJwmq01hqYCLystX4Z8G7ZsNoAWw2UZIFPBFprVu/Nk3owIYQQQjQbR5KwYqXUX4HrgR+VUlbAoeWBSqlxSqldSqlkpdSjjTw/TSm1RSm1USm1TCnV4+TCb0ElBwEN3mGkF5STXVzJwA6ShAkhhBCieTiShF0FVAK3aq0zgUjg+RO9qDZZex0YD/QArmkkyfpca91ba50APAe8eDLBt6jiTPO3dwSJB4sB6B7u04oBCSGEEKI9OeHqyNrE68V6j/fhWE3YYCBZa70HQCn1JWZKc3u9axXVO98Tsydl21B8wPztHcbORJOExYa2/1lYIYQQQpwejmxbNEQptUYpVaKUqlJK2ZRSjqyOjAT213ucVnvsyOvfo5TajRkJ++MxYrhDKbVWKbU2OzvbgbduBodGwnwiSMwsJtzXTTbtFkIIIUSzcWQ68jXgGiAJcAduw0wznkhjXfWPGunSWr+ute4CPIJpf3H0i7R+R2s9UGs9MDg42IG3bgZFB8DiBB5B7MwsJi5MRsGEEEII0XwcScLQWicDVq21TWs9HRjtwMvSgOh6j6OAA8c5/0vgckfiOS2KM8ErjGoNe7JLiZOpSCGEEEI0I0c65pcppVyAjUqp54AMTP3WiawBYpVSnYB04Grg2vonKKVitdZJtQ8nYEbb2obiA+AdRmpuKVU2u4yECSGEEKJZOTISNhWwAvcCpZjRrStO9CKtdU3ta34GdgBfa623KaWeUEpdVnvavUqpbUqpjcCfgBtP4R5aRnEm+ISzM9MU5XeTkTAhhBBCNCNHVkem1v5YDvz7ZC6utZ4LzD3i2D/r/Xz/yVzvtCrKgE6jSMwsxqKga4hXa0ckxP+3d/cxclXnHce/v6xfMMaAeQ3BYENLKpEKgmUhlDSp2qIWUAKllQqIqihFjRo1alDUKlRIaVT1HxK1ilBQU6KiJlVaorRFtZSXElGUqmohGGLeQggOMY3Lxhi8Dq7X8Rrz9I+5q443M4sT7Z27zHw/0mjvnLnefR6fuTPPnHPnXEnSGBlahCV5gkWWjKiqi1qJaDmYOwCHfthbnuJ7+9l02lqOWznVdVSSJGmMLDYS9p6RRbHc9C9PsXs/F77FRVolSdLSWuycsJXAhqp6vv8GnMuxndD/xrV/GoBDx53B83tnPR9MkiQtucWKsE8C+we0H2weG1+v9IqwnYdPpAqXp5AkSUtusSJsU1U9vrCxqrYBm1qLaDloRsK+tb+3EofLU0iSpKW2WBF23CKPrVnqQJaV/dOw6gSeerlYveJNbDz1WJZFkyRJOnaLFWEPJ/m9hY1JbgYeaS+kZWD/NKw7i10zB9mwfg1Tbxp0BSZJkqSf3mIn2N8C3JvkRv6/6NoCrAKubTuwTr0yDevezMzsHKeuXd11NJIkaQwNLcKqajfwjiS/BPx80/ylqvq3kUTWpf3TcO5lzDw/xyanIiVJUguOZcX8B4AHRhDL8lDVWyds3ZuZmT3M5nNXdR2RJEkaQ8dy7cjJMrsXjhyi1p3Fvtk5Tj7eIkySJC09i7CFmuUpfnTcGRw+Uqw/fmXHAUmSpHFkEbbQiW+Ba+9iZv3FAKxf60iYJElaehZhCx1/Clx8HS9NnQbAeqcjJUlSCyzChth7YA7A6UhJktQKi7Ah9s0eBpyOlCRJ7bAIG2Jmdn4kzCJMkiQtPYuwIWYOzJHASWucjpQkSUvPImyImdnDnLRmpdeNlCRJrbAIG2Jmds6pSEmS1BqLsCF6RZhTkZIkqR0WYUPMHDjsSJgkSWqNRdgQXjdSkiS1ySJsiL2zc5yy1ulISZLUDouwAQ7OHeFHh19zJEySJLXGImwAF2qVJEltswgbYL4IczpSkiS1xSJsgPnrRjodKUmS2mIRNsDeA05HSpKkdlmEDbBv/pwwpyMlSVJLLMIGmJmfjlzjSJgkSWqHRdgAew/MsW71Clat8L9HkiS1wypjgH2zc5zsVKQkSWqRRdgAM7NeN1KSJLWr1SIsyRVJnkmyI8mtAx7/cJJvJXk8yf1JNrYZz7GamZ2zCJMkSa1qrQhLMgXcCVwJXAjckOTCBbt9E9hSVRcB/wh8vK14fhK9IszpSEmS1J42R8IuBXZU1XNVNQfcA1zTv0NVPVBVs83dB4ENLcZzzPYdOOxCrZIkqVVtFmFnA9/vu7+raRvmZuArgx5I8v4k25Js27NnzxKG+OPmXn2N/Yde5ZS1FmGSJKk9bRZhGdBWA3dMfhvYAnxi0ONVdVdVbamqLaeffvoShvjj9h2cXy3f6UhJktSeFS3+7l3AOX33NwAvLNwpyeXAbcAvVtWhFuM5Jl43UpIkjUKbI2EPAxckOS/JKuB6YGv/DkkuAf4auLqqXmwxlmO2dvUK3vfOTbz1zHVdhyJJksZYayNhVfVqkg8C/wpMAXdX1VNJ/gzYVlVb6U0/ngB8MQnAf1fV1W3FdCzOPnkNf/ret3UZgiRJmgBtTkdSVV8Gvryg7aN925e3+fclSZKWKyWcvI0AAAbRSURBVFfMlyRJ6oBFmCRJUgcswiRJkjpgESZJktQBizBJkqQOWIRJkiR1IFUDryS0bCXZAzw/gj91GvDSCP7OcjTJuYP5T3L+k5w7mL/5T27+bea+saoGXnPxDVeEjUqSbVW1pes4ujDJuYP5T3L+k5w7mL/5T27+XeXudKQkSVIHLMIkSZI6YBE23F1dB9ChSc4dzH+S85/k3MH8zX9ydZK754RJkiR1wJEwSZKkDliELZDkiiTPJNmR5Nau42lbknOSPJDk6SRPJflQ0/6xJP+TZHtzu6rrWNuSZGeSJ5o8tzVtpyT5WpJnm5/ru45zqSX5ub7+3Z7klSS3jHPfJ7k7yYtJnuxrG9jX6bmjeS14PMnm7iJfGkPy/0SSbzc53pvk5KZ9U5KDfc+DT3cX+dIYkv/Q53uSP2n6/5kkv9ZN1EtjSO5f6Mt7Z5LtTfs49v2w97puj/+q8tbcgCngu8D5wCrgMeDCruNqOeezgM3N9jrgO8CFwMeAP+o6vhH9H+wETlvQ9nHg1mb7VuD2ruNs+f9gCvgBsHGc+x54N7AZePL1+hq4CvgKEOAy4KGu428p/18FVjTbt/flv6l/v3G4Dcl/4PO9eR18DFgNnNe8N0x1ncNS5r7g8b8APjrGfT/sva7T49+RsKNdCuyoqueqag64B7im45haVVXTVfVos70feBo4u9uoloVrgM82258Ffr3DWEbhV4DvVtUoFkLuTFX9O7B3QfOwvr4G+Fz1PAicnOSs0UTajkH5V9V9VfVqc/dBYMPIAxuRIf0/zDXAPVV1qKq+B+yg9x7xhrRY7kkC/BbwDyMNaoQWea/r9Pi3CDva2cD3++7vYoIKkiSbgEuAh5qmDzbDsHeP43RcnwLuS/JIkvc3bWdW1TT0Dl7gjM6iG43rOfoFeFL6Hob39SS+HvwuvU//885L8s0kX0/yrq6CGoFBz/dJ6v93Abur6tm+trHt+wXvdZ0e/xZhR8uAton4+miSE4B/Am6pqleAvwJ+Bng7ME1vqHpcvbOqNgNXAn+Q5N1dBzRKSVYBVwNfbJomqe8XM1GvB0luA14FPt80TQPnVtUlwIeBv09yYlfxtWjY832S+v8Gjv4QNrZ9P+C9buiuA9qWvP8two62Czin7/4G4IWOYhmZJCvpPSk/X1X/DFBVu6vqSFW9BnyGN/Aw/Oupqheany8C99LLdff80HPz88XuImzdlcCjVbUbJqvvG8P6emJeD5LcBLwHuLGaE2KaabiXm+1H6J0T9dbuomzHIs/3iej/JCuA3wC+MN82rn0/6L2Ojo9/i7CjPQxckOS8ZnTgemBrxzG1qjkX4G+Ap6vqL/va++e+rwWeXPhvx0GStUnWzW/TO0n5SXr9flOz203Av3QT4Ugc9Sl4Uvq+z7C+3gr8TvMtqcuAH85PW4yTJFcAHwGurqrZvvbTk0w12+cDFwDPdRNlexZ5vm8Frk+yOsl59PL/xqjjG4HLgW9X1a75hnHs+2HvdXR9/Hf9jYXldqP3jYjv0Kv8b+s6nhHk+wv0hlgfB7Y3t6uAvwOeaNq3Amd1HWtL+Z9P7xtQjwFPzfc5cCpwP/Bs8/OUrmNtKf/jgZeBk/raxrbv6RWb08Bhep90bx7W1/SmI+5sXgueALZ0HX9L+e+gd+7L/PH/6Wbf32yOiceAR4H3dh1/S/kPfb4DtzX9/wxwZdfxL3XuTfvfAr+/YN9x7Pth73WdHv+umC9JktQBpyMlSZI6YBEmSZLUAYswSZKkDliESZIkdcAiTJIkqQMWYZLGSpIjSbb33W5dwt+9Kcm4r5smaURWdB2AJC2xg1X19q6DkKTX40iYpImQZGeS25N8o7n9bNO+Mcn9zQWc709ybtN+ZpJ7kzzW3N7R/KqpJJ9J8lSS+5Ks6SwpSW9oFmGSxs2aBdOR1/U99kpVXQp8Cvhk0/Yp4HNVdRG9i1ff0bTfAXy9qi4GNtNbQRx6l3C5s6reBuyjt7q4JP3EXDFf0lhJ8r9VdcKA9p3AL1fVc82FfH9QVacmeYnepWoON+3TVXVakj3Ahqo61Pc7NgFfq6oLmvsfAVZW1Z+3n5mkceNImKRJUkO2h+0zyKG+7SN4bq2kn5JFmKRJcl3fz/9qtv8TuL7ZvhH4j2b7fuADAEmmkpw4qiAlTQY/wUkaN2uSbO+7/9Wqml+mYnWSh+h9AL2haftD4O4kfwzsAd7XtH8IuCvJzfRGvD4ATLcevaSJ4TlhkiZCc07Ylqp6qetYJAmcjpQkSeqEI2GSJEkdcCRMkiSpAxZhkiRJHbAIkyRJ6oBFmCRJUgcswiRJkjpgESZJktSB/wOZyrywGQc5mQAAAABJRU5ErkJggg==\n", "text/plain": [ "<Figure size 720x576 with 2 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "0.6111428571428565\n", "0.517\n" ] } ], "source": [ "# Plot the loss function and train / validation accuracies\n", "plt.subplot(2, 1, 1)\n", "plt.plot(train_loss_three)\n", "plt.title('Loss history')\n", "plt.xlabel('Iteration')\n", "plt.ylabel('Loss')\n", "plt.subplot(2, 1, 2)\n", "plt.plot(train_accuracy_three, label='train')\n", "plt.plot(val_accuracy_three, label='val')\n", "plt.title('Classification accuracy history')\n", "plt.xlabel('Epoch')\n", "plt.ylabel('Classification accuracy')\n", "plt.legend()\n", "plt.show()\n", "print(max(train_accuracy_three))\n", "print(max(test_accuracy_three))\n", "#print(train_accuracy)" ] }, { "cell_type": "code", "execution_count": 58, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.517\n" ] } ], "source": [ "scores=net.forward(X_test)\n", "y_pred=np.argmax(scores, axis=1)\n", "test_accuracy= (np.sum(y_test==y_pred)/len(y_test))\n", "print(test_accuracy)\n", "best_3layer_sgd_prediction=y_pred\n", "output_submission_csv('kaggle/nn_3layer_sgd_submission.csv', best_3layer_sgd_prediction)" ] }, { "cell_type": "code", "execution_count": 73, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "epoch: 0\n", "0.41197959183673466 0.48 0.4625\n", "epoch: 1\n", "0.49 0.506 0.4845\n", "epoch: 2\n", "0.516122448979592 0.493 0.4862\n", "epoch: 3\n", "0.533387755102041 0.509 0.4985\n", "epoch: 4\n", "0.5498979591836731 0.504 0.4963\n", "epoch: 5\n", "0.5637755102040818 0.509 0.5041\n", "epoch: 6\n", "0.5829387755102042 0.512 0.5086\n", "epoch: 7\n", "0.5827959183673471 0.527 0.5117\n", "epoch: 8\n", "0.5976938775510203 0.521 0.5171\n", "epoch: 9\n", "0.6036122448979593 0.521 0.5142\n", "epoch: 10\n", "0.6110408163265307 0.517 0.5097\n", "epoch: 11\n", "0.617163265306123 0.515 0.5132\n", "epoch: 12\n", "0.6250612244897958 0.534 0.5122\n", "epoch: 13\n", "0.6329795918367349 0.528 0.5131\n", "epoch: 14\n", "0.6352857142857143 0.535 0.5147\n", "epoch: 15\n", "0.6426326530612243 0.527 0.5115\n", "epoch: 16\n", "0.6469999999999998 0.525 0.5116\n", "epoch: 17\n", "0.654408163265306 0.524 0.5152\n", "epoch: 18\n", "0.6526122448979594 0.538 0.5063\n", "epoch: 19\n", "0.6645714285714291 0.537 0.5124\n", "epoch: 20\n", "0.665979591836735 0.536 0.514\n", "epoch: 21\n", "0.6720816326530613 0.53 0.5144\n", "epoch: 22\n", "0.6744081632653057 0.532 0.5143\n", "epoch: 23\n", "0.679387755102041 0.542 0.5208\n", "epoch: 24\n", "0.6865714285714282 0.525 0.5138\n", "epoch: 25\n", "0.6859387755102043 0.542 0.5107\n", "epoch: 26\n", "0.6922857142857146 0.534 0.5121\n", "epoch: 27\n", "0.6992448979591834 0.537 0.5153\n", "epoch: 28\n", "0.7009387755102046 0.543 0.5096\n", "epoch: 29\n", "0.7011836734693874 0.548 0.5109\n", "epoch: 30\n", "0.707714285714286 0.54 0.5091\n", "epoch: 31\n", "0.7094693877551022 0.537 0.5069\n", "epoch: 32\n", "0.7188163265306128 0.542 0.5068\n", "epoch: 33\n", "0.721326530612245 0.538 0.5059\n", "epoch: 34\n", "0.7260204081632654 0.525 0.505\n", "epoch: 35\n", "0.7270816326530612 0.532 0.5066\n", "epoch: 36\n", "0.729224489795918 0.531 0.5016\n", "epoch: 37\n", "0.7356734693877551 0.525 0.5019\n", "epoch: 38\n", "0.7386734693877552 0.539 0.5104\n", "epoch: 39\n", "0.7412857142857141 0.527 0.5106\n", "epoch: 40\n", "0.7441428571428571 0.542 0.5065\n", "epoch: 41\n", "0.7421632653061219 0.547 0.5067\n", "epoch: 42\n", "0.7480612244897957 0.533 0.5086\n", "epoch: 43\n", "0.7520612244897954 0.531 0.5033\n", "epoch: 44\n", "0.7577142857142858 0.531 0.5062\n", "epoch: 45\n", "0.7569387755102044 0.527 0.5108\n", "epoch: 46\n", "0.7594693877551016 0.524 0.4986\n", "epoch: 47\n", "0.7630612244897957 0.526 0.5042\n", "epoch: 48\n", "0.7652857142857142 0.53 0.5003\n", "epoch: 49\n", "0.7696326530612247 0.526 0.5009\n" ] } ], "source": [ "#Tuning Adam 2 layers\n", "# TODO: implement me\n", "# Hyperparameters\n", "\n", "##########################################\n", "# Best two layer Adam NN\n", "##########################################\n", "import copy\n", "from random import shuffle\n", "input_size = 32 * 32 * 3\n", "num_layers = 2\n", "hidden_size = 100#20\n", "hidden_sizes = [hidden_size] * (num_layers - 1)\n", "num_classes = 10\n", "epochs = 50\n", "batch_size = 200\n", "learning_rate = 1e-3#1e-3 #0.025 #1e-3\n", "learning_rate_decay = 0.95\n", "regularization = 0.00009 #0.025\n", "betas=(0.9, 0.999)\n", "epsilon=1e-8\n", "# Initialize a new neural network model\n", "net = NeuralNetwork(input_size, hidden_sizes, num_classes, num_layers)\n", "\n", "# Variables to store performance for each epoch\n", "train_loss_adam_two = np.zeros(epochs)\n", "train_accuracy_adam_two = np.zeros(epochs)\n", "val_accuracy_adam_two = np.zeros(epochs)\n", "test_accuracy_adam_two = np.zeros(epochs) \n", "\n", "w = copy.deepcopy(net.params)\n", "m = set_zero(w) #creates a new dictionary which has the same size/elemets as the one passesed all set to zero\n", "v = set_zero(w)\n", "w_prev=set_zero(w)\n", "v_prev=set_zero(w)\n", "m_prev=set_zero(w)\n", "# For each epoch...\n", "for epoch in range(epochs):\n", " print('epoch:', epoch)\n", "\n", " ind_list = [i for i in range(X_train.shape[0])]\n", " shuffle(ind_list)\n", " X_train = X_train[ind_list,:]\n", " y_train = y_train[ind_list]\n", " #################################\n", " #Implemented the linear decay in learning rate but found that results without it were more accurate\n", " #learning_rate=learning_rate/(1+learning_rate_decay*epoch)\n", " #################################\n", " for batch in range(TRAIN_IMAGES // batch_size):\n", " # Create a mini-batch of training data and labels\n", " batch_indices = np.random.choice(range(X_train.shape[0]), size=batch_size)\n", " X_batch = X_train[batch_indices]\n", " y_batch = y_train[batch_indices]\n", " # Run the forward pass of the model to get a prediction and compute the accuracy\n", " scores=net.forward(X_batch)\n", " y_pred=np.argmax(scores, axis=1)\n", " train_accuracy_adam_two[epoch] += (np.sum(y_batch==y_pred)/len(y_batch))\n", " \n", " # Run the backward pass of the model to update the weights and compute the loss\n", " loss, gradients=net.backward(X_batch,y_batch,learning_rate,regularization)\n", " #gradients=dict_by_ele(gradients,batch_size)\n", " m=dict_add_dict(dict_x_ele(m_prev,betas[0]),dict_x_ele(gradients,(1-betas[0])))\n", " \n", " v=dict_add_dict(dict_x_ele(v_prev,betas[1]),dict_x_ele(dict_sqr(gradients),(1-betas[1])))\n", " \n", " m_new=dict_by_ele(m,(1-betas[0]))\n", " v_new=dict_by_ele(v,(1-betas[1]))\n", " \n", " w=dict_minus_dict(w_prev,dict_by_dict(dict_x_ele(m_new,learning_rate),(dict_add_ele(dict_sqrt(v_new),epsilon))))\n", " net.params=copy.copy(w)\n", " #w=w_prev-(alpha*m_new/(np.sqrt(v_new)+epsilon))\n", " \n", " w_prev=copy.copy(w)\n", " v_prev=copy.copy(v)\n", " m_prev=copy.copy(m)\n", "\n", " train_loss_adam_two[epoch]+=loss\n", "\n", " # Validation\n", " # No need to run the backward pass here, just run the forward pass to compute accuracy\n", " train_accuracy_adam_two[epoch]/=(TRAIN_IMAGES // batch_size)\n", " train_loss_adam_two[epoch]/=(TRAIN_IMAGES // batch_size)\n", " #net.params=dict_by_ele(net.params,(TRAIN_IMAGES // batch_size))\n", "# scores=net.forward(X_val)\n", "# y_pred=np.argmax(scores, axis=1)\n", "# val_accuracy_adam[epoch]= (np.sum(y_val==y_pred)/len(y_val))\n", " scores=net.forward(X_val)\n", " y_pred=np.argmax(scores, axis=1)\n", " val_accuracy_adam_two[epoch]= (np.sum(y_val==y_pred)/len(y_val))\n", " \n", " scores=net.forward(X_test)\n", " y_pred=np.argmax(scores, axis=1)\n", " test_accuracy_adam_two[epoch]= (np.sum(y_test==y_pred)/len(y_test))\n", " print(train_accuracy_adam_two[epoch],val_accuracy_adam_two[epoch],test_accuracy_adam_two[epoch])" ] }, { "cell_type": "code", "execution_count": 74, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 720x576 with 2 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "0.7696326530612247\n", "0.5208\n" ] } ], "source": [ "# Plot the loss function and train / validation accuracies\n", "plt.subplot(2, 1, 1)\n", "plt.plot(train_loss_adam_two)\n", "plt.title('Loss history')\n", "plt.xlabel('Iteration')\n", "plt.ylabel('Loss')\n", "plt.subplot(2, 1, 2)\n", "plt.plot(train_accuracy_adam_two, label='train')\n", "plt.plot(val_accuracy_adam_two, label='val')\n", "plt.title('Classification accuracy history')\n", "plt.xlabel('Epoch')\n", "plt.ylabel('Classification accuracy')\n", "plt.legend()\n", "plt.show()\n", "print(max(train_accuracy_adam_two))\n", "print(max(test_accuracy_adam_two))" ] }, { "cell_type": "code", "execution_count": 78, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.5009\n" ] } ], "source": [ "#############################################################################\n", "# For the Adam gradient updated 2-layer NN we observe that even for a very low\n", "# value of regularization as the training error decreases with the increasing \n", "# number of epochs the training accuracy keeps on increasing however, the \n", "# validation and testing accuracy increase upto a certain number of epochs \n", "# and then start decreasing. This might be due to the fact that Adam gradient method\n", "# causes faster convergence of results as compared to SDG and for lesser number of \n", "# epochs we get the best Adam results given the parameters. However, if we don't stop\n", "# the training the model overlearns or overfits the data which increases training \n", "# accuracy but decreases the validation and testing accuracy. So we do only 50 epochs\n", "# for Adam gradient methods as compared to 100-150 for SGD.\n", "#############################################################################\n", "scores=net.forward(X_test)\n", "y_pred=np.argmax(scores, axis=1)\n", "test_accuracy= (np.sum(y_test==y_pred)/len(y_test))\n", "print(test_accuracy)\n", "best_2layer_adam_prediction=y_pred\n", "output_submission_csv('kaggle/nn_2layer_sgd_submission.csv', best_2layer_adam_prediction)" ] }, { "cell_type": "code", "execution_count": 67, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "epoch: 0\n", "0.3337142857142858 0.447 0.4181\n", "epoch: 1\n", "0.4507959183673469 0.453 0.4554\n", "epoch: 2\n", "0.48481632653061274 0.476 0.4781\n", "epoch: 3\n", "0.5112857142857143 0.509 0.4936\n", "epoch: 4\n", "0.5336734693877553 0.514 0.5024\n", "epoch: 5\n", "0.5390816326530612 0.524 0.5118\n", "epoch: 6\n", "0.5562040816326532 0.51 0.5072\n", "epoch: 7\n", "0.5686326530612242 0.524 0.5177\n", "epoch: 8\n", "0.5770000000000001 0.527 0.5188\n", "epoch: 9\n", "0.5889591836734694 0.532 0.5188\n", "epoch: 10\n", "0.5929591836734699 0.542 0.5256\n", "epoch: 11\n", "0.6007755102040816 0.537 0.5231\n", "epoch: 12\n", "0.6111428571428573 0.535 0.5251\n", "epoch: 13\n", "0.6195306122448979 0.535 0.5267\n", "epoch: 14\n", "0.6250816326530613 0.55 0.5285\n", "epoch: 15\n", "0.6325918367346943 0.548 0.5219\n", "epoch: 16\n", "0.6380816326530614 0.548 0.5252\n", "epoch: 17\n", "0.6433877551020408 0.543 0.5272\n", "epoch: 18\n", "0.6488571428571427 0.547 0.5237\n", "epoch: 19\n", "0.653918367346939 0.543 0.5281\n", "epoch: 20\n", "0.6598163265306124 0.541 0.5253\n", "epoch: 21\n", "0.6629591836734697 0.536 0.53\n", "epoch: 22\n", "0.6700612244897967 0.548 0.5246\n", "epoch: 23\n", "0.6785918367346936 0.533 0.5217\n", "epoch: 24\n", "0.6804693877551019 0.539 0.5232\n", "epoch: 25\n", "0.6851020408163269 0.534 0.5246\n", "epoch: 26\n", "0.6866122448979594 0.542 0.5239\n", "epoch: 27\n", "0.694979591836735 0.538 0.5278\n", "epoch: 28\n", "0.696183673469388 0.536 0.5264\n", "epoch: 29\n", "0.7059387755102037 0.529 0.5241\n", "epoch: 30\n", "0.708857142857143 0.532 0.5258\n", "epoch: 31\n", "0.7103673469387755 0.535 0.5199\n", "epoch: 32\n", "0.7152653061224488 0.53 0.5199\n", "epoch: 33\n", "0.7184897959183675 0.525 0.5154\n", "epoch: 34\n", "0.7209183673469387 0.514 0.5123\n", "epoch: 35\n", "0.7247142857142854 0.52 0.5158\n", "epoch: 36\n", "0.725938775510204 0.53 0.5156\n", "epoch: 37\n", "0.7295510204081633 0.533 0.5169\n", "epoch: 38\n", "0.7348775510204085 0.535 0.5146\n", "epoch: 39\n", "0.739714285714286 0.536 0.5158\n" ] } ], "source": [ "#Tuning Adam 3 layers\n", "# TODO: implement me\n", "# Hyperparameters\n", "\n", "##########################################\n", "# Best three layer Adam NN\n", "##########################################\n", "import copy\n", "from random import shuffle\n", "input_size = 32 * 32 * 3\n", "num_layers = 3\n", "hidden_size = 100 #80 causes large distances between val and train\n", "hidden_sizes = [hidden_size] * (num_layers - 1)\n", "num_classes = 10\n", "epochs = 40\n", "batch_size = 200\n", "learning_rate = 1e-3 #0.025 #1e-3\n", "learning_rate_decay = 0.95\n", "regularization = 0.00009\n", "betas=(0.9, 0.999)\n", "epsilon=1e-8\n", "# Initialize a new neural network model\n", "net = NeuralNetwork(input_size, hidden_sizes, num_classes, num_layers)\n", "\n", "# Variables to store performance for each epoch\n", "train_loss_adam_three = np.zeros(epochs)\n", "train_accuracy_adam_three = np.zeros(epochs)\n", "val_accuracy_adam_three = np.zeros(epochs)\n", "test_accuracy_adam_three = np.zeros(epochs) \n", "w = copy.deepcopy(net.params)\n", "m = set_zero(w) #creates a new dictionary which has the same size/elemets as the one passesed all set to zero\n", "v = set_zero(w)\n", "w_prev=set_zero(w)\n", "v_prev=set_zero(w)\n", "m_prev=set_zero(w)\n", "# For each epoch...\n", "for epoch in range(epochs):\n", " print('epoch:', epoch)\n", "\n", " ind_list = [i for i in range(X_train.shape[0])]\n", " shuffle(ind_list)\n", " X_train = X_train[ind_list,:]\n", " y_train = y_train[ind_list]\n", " #################################\n", " #Implemented the linear decay in learning rate but found that results without it were more accurate\n", " #learning_rate=learning_rate/(1+learning_rate_decay*epoch)\n", " #################################\n", " \n", " \n", " for batch in range(TRAIN_IMAGES // batch_size):\n", " # Create a mini-batch of training data and labels\n", " batch_indices = np.random.choice(range(X_train.shape[0]), size=batch_size)\n", " X_batch = X_train[batch_indices]\n", " y_batch = y_train[batch_indices]\n", " # Run the forward pass of the model to get a prediction and compute the accuracy\n", " scores=net.forward(X_batch)\n", " y_pred=np.argmax(scores, axis=1)\n", " train_accuracy_adam_three[epoch] += (np.sum(y_batch==y_pred)/len(y_batch))\n", " \n", " # Run the backward pass of the model to update the weights and compute the loss\n", " loss, gradients=net.backward(X_batch,y_batch,learning_rate,regularization)\n", " \n", " m=dict_add_dict(dict_x_ele(m_prev,betas[0]),dict_x_ele(gradients,(1-betas[0])))\n", " \n", " v=dict_add_dict(dict_x_ele(v_prev,betas[1]),dict_x_ele(dict_sqr(gradients),(1-betas[1])))\n", " \n", " m_new=dict_by_ele(m,(1-betas[0]))\n", " v_new=dict_by_ele(v,(1-betas[1]))\n", " \n", " w=dict_minus_dict(w_prev,dict_by_dict(dict_x_ele(m_new,learning_rate),(dict_add_ele(dict_sqrt(v_new),epsilon))))\n", " net.params=copy.copy(w)\n", " #w=w_prev-(alpha*m_new/(np.sqrt(v_new)+epsilon))\n", " \n", " w_prev=copy.copy(w)\n", " v_prev=copy.copy(v)\n", " m_prev=copy.copy(m)\n", "\n", " train_loss_adam_three[epoch]+=loss\n", "\n", " # Validation\n", " # No need to run the backward pass here, just run the forward pass to compute accuracy\n", " train_accuracy_adam_three[epoch]/=(TRAIN_IMAGES // batch_size)\n", " train_loss_adam_three[epoch]/=(TRAIN_IMAGES // batch_size)\n", " #net.params=dict_by_ele(net.params,(TRAIN_IMAGES // batch_size))\n", "# scores=net.forward(X_val)\n", "# y_pred=np.argmax(scores, axis=1)\n", "# val_accuracy_adam[epoch]= (np.sum(y_val==y_pred)/len(y_val))\n", " \n", " scores=net.forward(X_val)\n", " y_pred=np.argmax(scores, axis=1)\n", " val_accuracy_adam_three[epoch]= (np.sum(y_val==y_pred)/len(y_val))\n", " \n", " scores=net.forward(X_test)\n", " y_pred=np.argmax(scores, axis=1)\n", " test_accuracy_adam_three[epoch]= (np.sum(y_test==y_pred)/len(y_test))\n", " print(train_accuracy_adam_three[epoch],val_accuracy_adam_three[epoch],test_accuracy_adam_three[epoch])" ] }, { "cell_type": "code", "execution_count": 68, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 720x576 with 2 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "0.739714285714286\n", "0.53\n" ] } ], "source": [ "# Plot the loss function and train / validation accuracies\n", "plt.subplot(2, 1, 1)\n", "plt.plot(train_loss_adam_three)\n", "plt.title('Loss history')\n", "plt.xlabel('Iteration')\n", "plt.ylabel('Loss')\n", "plt.subplot(2, 1, 2)\n", "plt.plot(train_accuracy_adam_three, label='train')\n", "plt.plot(val_accuracy_adam_three, label='val')\n", "plt.title('Classification accuracy history')\n", "plt.xlabel('Epoch')\n", "plt.ylabel('Classification accuracy')\n", "plt.legend()\n", "plt.show()\n", "print(max(train_accuracy_adam_three))\n", "print(max(test_accuracy_adam_three))" ] }, { "cell_type": "code", "execution_count": 70, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.5158\n" ] } ], "source": [ "#############################################################################\n", "# For the Adam gradient updated 3-layer NN we observe that even for a very low\n", "# value of regularization as the training error decreases with the increasing \n", "# number of epochs the training accuracy keeps on increasing however, the \n", "# validation and testing accuracy increase upto a certain number of epochs \n", "# and then start decreasing. This might be due to the fact that Adam gradient method\n", "# causes faster convergence of results as compared to SDG and for lesser number of \n", "# epochs we get the best Adam results given the parameters. However, if we don't stop\n", "# the training the model overlearns or overfits the data which increases training \n", "# accuracy but decreases the validation and testing accuracy. So we do only 40 epochs\n", "# for Adam gradient methods as compared to 100-150 for SGD.\n", "#############################################################################\n", "scores=net.forward(X_test)\n", "y_pred=np.argmax(scores, axis=1)\n", "test_accuracy= (np.sum(y_test==y_pred)/len(y_test))\n", "print(test_accuracy)\n", "best_3layer_adam_prediction=y_pred\n", "output_submission_csv('kaggle/best_3layer_adam_prediction.csv', best_3layer_adam_prediction)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Hyperparameter tuning\n", "\n", "Once you have successfully trained a network you can tune your hyparameters to increase your accuracy.\n", "\n", "Based on the graphs of the loss function above you should be able to develop some intuition about what hyperparameter adjustments may be necessary. A very noisy loss implies that the learning rate might be too high, while a linearly decreasing loss would suggest that the learning rate may be too low. A large gap between training and validation accuracy would suggest overfitting due to large model without much regularization. No gap between training and validation accuracy would indicate low model capacity. \n", "\n", "You will compare networks of two and three layers using the different optimization methods you implemented. \n", "\n", "The different hyperparameters you can experiment with are:\n", "- **Batch size**: We recommend you leave this at 200 initially which is the batch size we used. \n", "- **Number of iterations**: You can gain an intuition for how many iterations to run by checking when the validation accuracy plateaus in your train/val accuracy graph.\n", "- **Initialization** Weight initialization is very important for neural networks. We used the initialization `W = np.random.randn(n) / sqrt(n)` where `n` is the input dimension for layer corresponding to `W`. We recommend you stick with the given initializations, but you may explore modifying these. Typical initialization practices: http://cs231n.github.io/neural-networks-2/#init\n", "- **Learning rate**: Generally from around 1e-4 to 1e-1 is a good range to explore according to our implementation.\n", "- **Learning rate decay**: We recommend a 0.95 decay to start.\n", "- **Hidden layer size**: You should explore up to around 120 units per layer. For three-layer network, we fixed the two hidden layers to be the same size when obtaining the target numbers. However, you may experiment with having different size hidden layers.\n", "- **Regularization coefficient**: We recommend trying values in the range 0 to 0.1. \n", "\n", "Hints:\n", "- After getting a sense of the parameters by trying a few values yourself, you will likely want to write a few for-loops to traverse over a set of hyperparameters.\n", "- If you find that your train loss is decreasing, but your train and val accuracy start to decrease rather than increase, your model likely started minimizing the regularization term. To prevent this you will need to decrease the regularization coefficient. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Run on the test set\n", "When you are done experimenting, you should evaluate your final trained networks on the test set." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#############################################################################\n", "# I have split this section into 4 different cells with their respective NN codes \n", "# and shown above\n", "#############################################################################\n", "\n", "best_2layer_sgd_prediction = None\n", "best_3layer_sgd_prediction = None\n", "best_2layer_adam_prediction = None\n", "best_3layer_adam_prediction = None" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Kaggle output\n", "\n", "Once you are satisfied with your solution and test accuracy, output a file to submit your test set predictions to the Kaggle. Use the following code to do so:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#############################################################################\n", "# I have split this section into 4 different cells with their respective NN codes \n", "# and shown above\n", "#############################################################################\n", "\n", "output_submission_csv('nn_2layer_sgd_submission.csv', best_2layer_sgd_prediction)\n", "output_submission_csv('nn_3layer_sgd_submission.csv', best_3layer_sgd_prediction)\n", "output_submission_csv('nn_2layer_adam_submission.csv', best_2layer_adam_prediction)\n", "output_submission_csv('nn_3layer_adam_submission.csv', best_3layer_adam_prediction)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Compare SGD and Adam\n", "Create graphs to compare training loss and validation accuracy between SGD and Adam. The code is similar to the above code, but instead of comparing train and validation, we are comparing SGD and Adam." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# TODO: implement me\n", "# Plot the loss function and train / validation accuracies\n", "plt.subplot(2, 1, 1)\n", "plt.plot(train_loss)\n", "plt.plot(train_loss_adam_three)\n", "plt.title('Loss history')\n", "plt.xlabel('Iteration')\n", "plt.ylabel('Loss')\n", "plt.subplot(2, 1, 2)\n", "plt.plot(train_accuracy_adam_three, label='train')\n", "plt.plot(val_accuracy_adam_three, label='val')\n", "plt.plot(train_accuracy, label='train')\n", "plt.plot(val_accuracy, label='val')\n", "plt.title('Classification accuracy history')\n", "plt.xlabel('Epoch')\n", "plt.ylabel('Classification accuracy')\n", "plt.legend()\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "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.7.6" } }, "nbformat": 4, "nbformat_minor": 1 }