{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Multiclass Classification" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* Find this notebook at `EpyNN/epynnlive/captcha_mnist/train.ipynb`.\n", "* Regular python code at `EpyNN/epynnlive/captcha_mnist/train.py`.\n", "\n", "Run the notebook online with [Google Colab](https://colab.research.google.com/github/Synthaze/EpyNN/blob/main/epynnlive/captcha_mnist/train.ipynb).\n", "\n", "**Level: Advanced**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this notebook we will review:\n", "\n", "* Handling numerical data image to proceed with Neural Network regression.\n", "* Training of Feed-Forward (FF) and Convolutional Neural Network (CNN) for multiclass classification tasks.\n", "* MNIST database as a benchmark for neural networks.\n", "\n", "**It is assumed that all *basics* notebooks were already reviewed:**\n", "\n", "* [Basics with Perceptron (P)](../dummy_boolean/train.ipynb)\n", "* [Basics with string sequence](../dummy_string/train.ipynb)\n", "* [Basics with numerical time-series](../dummy_time/train.ipynb)\n", "* [Basics with images](../dummy_image/train.ipynb)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**This notebook does not enhance, extend or replace EpyNN's documentation.**\n", "\n", "**Relevant documentation pages for the current notebook:**\n", "\n", "* [Fully Connected (Dense)](https://epynn.net/Dense.html)\n", "* [Convolution (CNN)](https://epynn.net/Convolution.html)\n", "* [Pooling (CNN)](https://epynn.net/Pooling.html)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " Please follow this [external link](http://yann.lecun.com/exdb/mnist/) for detailed contextual information about the MNIST database." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Environment and data" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Follow [this link](prepare_dataset.ipynb) for details about data preparation." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Briefly, the MNIST database contains 70 000 images (60K + 10k).\n", "\n", "Each image contains a single handwritten digit. In total, 500 different human writers contributed to the whole.\n", "\n", "The MNIST database is curated in that images were size normalized and centered." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[1m\u001b[32mMake: /media/synthase/beta/EpyNN/epynnlive/captcha_mnist/datasets\u001b[0m\n", "\u001b[1m\u001b[32mMake: /media/synthase/beta/EpyNN/epynnlive/captcha_mnist/models\u001b[0m\n", "\u001b[1m\u001b[32mMake: /media/synthase/beta/EpyNN/epynnlive/captcha_mnist/plots\u001b[0m\n", "\u001b[1m\u001b[32mMake: mnist_database.tar\u001b[0m\n" ] } ], "source": [ "# EpyNN/epynnlive/captcha_mnist/train.ipynb\n", "# Install dependencies\n", "!pip3 install --upgrade-strategy only-if-needed epynn\n", "\n", "# Standard library imports\n", "import random\n", "\n", "# Related third party imports\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "\n", "# Local application/library specific imports\n", "import epynn.initialize\n", "from epynn.commons.maths import relu, softmax\n", "from epynn.commons.library import (\n", " configure_directory,\n", " read_model,\n", ")\n", "from epynn.network.models import EpyNN\n", "from epynn.embedding.models import Embedding\n", "from epynn.convolution.models import Convolution\n", "from epynn.pooling.models import Pooling\n", "from epynn.flatten.models import Flatten\n", "from epynn.dropout.models import Dropout\n", "from epynn.dense.models import Dense\n", "from epynnlive.captcha_mnist.prepare_dataset import (\n", " prepare_dataset,\n", " download_mnist,\n", ")\n", "from epynnlive.captcha_mnist.settings import se_hPars\n", "\n", "\n", "########################## CONFIGURE ##########################\n", "random.seed(1)\n", "np.random.seed(1)\n", "\n", "np.set_printoptions(threshold=10)\n", "\n", "np.seterr(all='warn')\n", "\n", "configure_directory()\n", "\n", "\n", "############################ DATASET ##########################\n", "download_mnist()\n", "\n", "X_features, Y_label = prepare_dataset(N_SAMPLES=750)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's inspect what we retrieved." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "750\n", "(28, 28, 1)\n", "{0.0, 3.0, 6.0, 11.0, 12.0, 13.0, 15.0, 17.0, 18.0, 19.0, 20.0, 21.0, 22.0, 27.0, 28.0, 32.0, 39.0, 40.0, 42.0, 43.0, 44.0, 45.0, 46.0, 48.0, 55.0, 67.0, 82.0, 86.0, 87.0, 90.0, 91.0, 94.0, 97.0, 100.0, 101.0, 104.0, 107.0, 110.0, 112.0, 115.0, 116.0, 125.0, 127.0, 129.0, 143.0, 147.0, 150.0, 151.0, 155.0, 158.0, 162.0, 163.0, 166.0, 167.0, 169.0, 170.0, 172.0, 181.0, 183.0, 184.0, 186.0, 189.0, 202.0, 205.0, 206.0, 210.0, 211.0, 214.0, 215.0, 219.0, 220.0, 221.0, 223.0, 225.0, 227.0, 228.0, 230.0, 233.0, 234.0, 237.0, 238.0, 239.0, 240.0, 241.0, 242.0, 243.0, 247.0, 250.0, 252.0, 253.0, 255.0}\n" ] } ], "source": [ "print(len(X_features))\n", "print(X_features[0].shape)\n", "print(set(X_features[0].flatten().tolist())) # Get all unique tones in image" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We retrieved sample features describing ``750`` samples.\n", "\n", "For each sample, we retrieved features as a three-dimensional array of shape ``(width, height, depth)``. Each image has dimensions of 28x28 and so contains 784 pixels.\n", "\n", "In the context, remember that the ``depth`` dimension represents the number of channels which encode the image. While the depth of any RGB image would be equal to 3, the depth of a grayscale image is equal to one. We namely have a regular grayscale image in that shades of gray range from 0 to 255. \n", "\n", "Let's recall how this looks." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig, ((ax0, ax1), (ax2, ax3)) = plt.subplots(2, 2)\n", "\n", "ax0.imshow(X_features[Y_label.index(0)], cmap='gray')\n", "ax0.set_title('label: 0')\n", "\n", "ax1.imshow(X_features[Y_label.index(1)], cmap='gray')\n", "ax1.set_title('label: 1')\n", "\n", "ax2.imshow(X_features[Y_label.index(2)], cmap='gray')\n", "ax2.set_title('label: 2')\n", "\n", "ax3.imshow(X_features[Y_label.index(3)], cmap='gray')\n", "ax3.set_title('label: 3')\n", "\n", "plt.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "According to [comments from the authors](http://yann.lecun.com/exdb/mnist/) of the MNIST database: *\"The original black and white (bilevel) images from NIST were size normalized \\[...\\]. The resulting images contain grey levels as a result of the anti-aliasing technique used by the normalization algorithm\"*." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Feed-Forward (FF)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As explained in other examples of network training, we like to begin by a Feed-Forward network each time we start to investigate a new problem. This is because:\n", "\n", "* Feed-Forward (Dense-based) networks are computationally faster to train than other architectures.\n", "* Such networks may be less sensitive to training hyperparameters and thus they are easier to train.\n", "* There are no reasonable day/night results depending on the architecture: one Feed-Forward - even if inappropriate - architecture may result in metrics that will not be made two times better by using an appropriate architecture. This mostly depends on hyperparameters and data processing." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "About this last item, one may look at the above-linked page which reports on classifier error rate with respect to method or architecture.\n", "\n", "As a condensate:\n", "\n", "* Single-layer FF (Perceptron) - 12.0% error.\n", "* Single-layer FF (Perceptron) - 7.6% error with deskewing (rotating a scanned image to compensate for skewing).\n", "* Two-layers FF with 800 hidden nodes - 1.6% error.\n", "* Committee of 35 Convolutional Neural Networks (CNN) - 0.23% error (best of all reported).\n", "\n", "First, we can see that from the very basic perceptron to the most evolved CNN there is an improvement from 88% to 99.77% accuracy. This is a huge gap, but both architectures succeed at recognizing patterns and drawing a decent model. \n", "\n", "Note that the gap is significantly reduced by simply applying *deskewing* to the image data, which highlights the critical importance of data pre-processing in the ability of the network to result in an accurate model.\n", "\n", "Also note that perceptrons are only able of linear regression while multi-layers Feed-Forward or CNN and other architectures can achieve non-linear regressions.\n", "\n", "When considering the two-layer Feed-Forward with 800 hidden nodes versus the state-of-the-art CNN, the accuracy goes from 98.4% to 99.77%. Overall, this illustrates that classical Feed-Forward networks may be a good alternative to more appropriate architectures when balancing between accuracy, difficulty of training and need for more computational time." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Embedding" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We start from sample features containing values ranging from 0 to 255.\n", "\n", "The most important thing is to **normalize** sample features within \\[0, 1\\].\n", "\n", "The second thing is to set a batch size which, in this case, will make the regression converging faster.\n", "\n", "The last - but not least - thing is to one-hot encode the set of sample label. While one may not do this with binary classification problems and thus use a single node in the output dense layer - from which 0 or 1 decisions can be extracted -, the same can not reasonably be done with multiclass classification. Because we have ten distinct labels in the game, the reasonable choice is to use 10 output nodes and to one-hot encode the set of sample label." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "embedding = Embedding(X_data=X_features,\n", " Y_data=Y_label,\n", " X_scale=True,\n", " Y_encode=True,\n", " batch_size=32,\n", " relative_size=(2, 1, 0))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "About data normalization:\n", "\n", "* It diminishes the complexity of the problem.\n", "* It accelerates training and makes it easier.\n", "* If no normalization is done in this example, the loss function and gradients will both readily explode and generate floating points errors." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "About this last point, remember that exponentials are used in the context of neural networks. If you begin feeding exponential functions with large numbers such as 255, you can be sure you will get floatting points errors pretty quickly: the computer typically deals with 64-bits float number, which has a maximal value of ``1.8 * 10 ** 308``. \n", "\n", "Note that in previously used 32-bits processors architecture, this maximal value was down to ``3.4 * 10 ** 38``. Compare with ``exp(255)`` which outputs ``5.56 * 10 ** 110`` and conclude that un-normalized data in the context of this notebook would have overflowed straight away on a - not that ancient - 32-bits system. Actually, if you attempt to run this notebook on a [Raspberry Pi](https://www.raspberrypi.org/) - why not? - you would overflow without normalization because the device relies on 32-bits CPUs. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Flatten-(Dense)n with Dropout" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We already explained why we need to use a *flatten* layer when attempting to forward arrays of more than 2 dimensions to the *dense* layer: image data have three dimensions, and the array of sample features - the array of sample images - has four dimensions. Therefore we need to flatten this array to give it a bi-dimensional shape." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "tags": [] }, "outputs": [], "source": [ "name = 'Flatten_Dropout02_Dense-64-relu_Dropout05_Dense-10-softmax'\n", "\n", "se_hPars['learning_rate'] = 0.001\n", "se_hPars['softmax_temperature'] = 5\n", "\n", "flatten = Flatten()\n", "\n", "dropout1 = Dropout(drop_prob=0.2)\n", "\n", "hidden_dense = Dense(64, relu)\n", "\n", "dropout2 = Dropout(drop_prob=0.5)\n", "\n", "dense = Dense(10, softmax)\n", "\n", "layers = [embedding, flatten, dropout1, hidden_dense, dropout2, dense]\n", "\n", "model = EpyNN(layers=layers, name=name)" ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "We have set up a custom learning rate, along with the 10 units in the output layers because we have labels one-hot encoded over 10 digits and again because we have ten distinct labels.\n", "\n", "Dropout layers were set to reduce overfitting and the *softmax temperature* was set higher than one to smooth the output probability distribution which practically results in more numerically stable training." ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[1m--- EpyNN Check OK! --- \u001b[0m\r" ] } ], "source": [ "model.initialize(loss='CCE', seed=1, se_hPars=se_hPars.copy(), end='\\r')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We have set the loss function to use *Categorical Cross Entropy* instead of *Binary Cross Entropy*. This is because we have ten distinct labels instead of two." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[1m\u001b[37mEpoch 99 - Batch 14/14 - Accuracy: 0.906 Cost: 0.36511 - TIME: 15.75s RATE: 6.35e+00e/s TTC: 0s \u001b[0m\n", "\n", "+-------+----------+----------+----------+-------+--------+-------+-----------------------------------------------------------------------+\n", "| \u001b[1m\u001b[37mepoch\u001b[0m | \u001b[1m\u001b[37mlrate\u001b[0m | \u001b[1m\u001b[37mlrate\u001b[0m | \u001b[1m\u001b[32maccuracy\u001b[0m | | \u001b[1m\u001b[31mCCE\u001b[0m | | \u001b[37mExperiment\u001b[0m |\n", "| | \u001b[37mDense\u001b[0m | \u001b[37mDense\u001b[0m | \u001b[1m\u001b[32mdtrain\u001b[0m | \u001b[1m\u001b[32mdval\u001b[0m | \u001b[1m\u001b[31mdtrain\u001b[0m | \u001b[1m\u001b[31mdval\u001b[0m | |\n", "+-------+----------+----------+----------+-------+--------+-------+-----------------------------------------------------------------------+\n", "| \u001b[1m\u001b[37m0\u001b[0m | \u001b[1m\u001b[37m1.00e-03\u001b[0m | \u001b[1m\u001b[37m1.00e-03\u001b[0m | \u001b[1m\u001b[32m0.240\u001b[0m | \u001b[1m\u001b[32m0.220\u001b[0m | \u001b[1m\u001b[31m2.235\u001b[0m | \u001b[1m\u001b[31m2.239\u001b[0m | \u001b[37m1635012330_Flatten_Dropout02_Dense-64-relu_Dropout05_Dense-10-softmax\u001b[0m |\n", "| \u001b[1m\u001b[37m10\u001b[0m | \u001b[1m\u001b[37m1.00e-03\u001b[0m | \u001b[1m\u001b[37m1.00e-03\u001b[0m | \u001b[1m\u001b[32m0.700\u001b[0m | \u001b[1m\u001b[32m0.664\u001b[0m | \u001b[1m\u001b[31m1.155\u001b[0m | \u001b[1m\u001b[31m1.258\u001b[0m | \u001b[37m1635012330_Flatten_Dropout02_Dense-64-relu_Dropout05_Dense-10-softmax\u001b[0m |\n", "| \u001b[1m\u001b[37m20\u001b[0m | \u001b[1m\u001b[37m1.00e-03\u001b[0m | \u001b[1m\u001b[37m1.00e-03\u001b[0m | \u001b[1m\u001b[32m0.798\u001b[0m | \u001b[1m\u001b[32m0.740\u001b[0m | \u001b[1m\u001b[31m0.741\u001b[0m | \u001b[1m\u001b[31m0.910\u001b[0m | \u001b[37m1635012330_Flatten_Dropout02_Dense-64-relu_Dropout05_Dense-10-softmax\u001b[0m |\n", "| \u001b[1m\u001b[37m30\u001b[0m | \u001b[1m\u001b[37m1.00e-03\u001b[0m | \u001b[1m\u001b[37m1.00e-03\u001b[0m | \u001b[1m\u001b[32m0.830\u001b[0m | \u001b[1m\u001b[32m0.764\u001b[0m | \u001b[1m\u001b[31m0.618\u001b[0m | \u001b[1m\u001b[31m0.819\u001b[0m | \u001b[37m1635012330_Flatten_Dropout02_Dense-64-relu_Dropout05_Dense-10-softmax\u001b[0m |\n", "| \u001b[1m\u001b[37m40\u001b[0m | \u001b[1m\u001b[37m1.00e-03\u001b[0m | \u001b[1m\u001b[37m1.00e-03\u001b[0m | \u001b[1m\u001b[32m0.864\u001b[0m | \u001b[1m\u001b[32m0.808\u001b[0m | \u001b[1m\u001b[31m0.474\u001b[0m | \u001b[1m\u001b[31m0.714\u001b[0m | \u001b[37m1635012330_Flatten_Dropout02_Dense-64-relu_Dropout05_Dense-10-softmax\u001b[0m |\n", "| \u001b[1m\u001b[37m50\u001b[0m | \u001b[1m\u001b[37m1.00e-03\u001b[0m | \u001b[1m\u001b[37m1.00e-03\u001b[0m | \u001b[1m\u001b[32m0.872\u001b[0m | \u001b[1m\u001b[32m0.788\u001b[0m | \u001b[1m\u001b[31m0.435\u001b[0m | \u001b[1m\u001b[31m0.722\u001b[0m | \u001b[37m1635012330_Flatten_Dropout02_Dense-64-relu_Dropout05_Dense-10-softmax\u001b[0m |\n", "| \u001b[1m\u001b[37m60\u001b[0m | \u001b[1m\u001b[37m1.00e-03\u001b[0m | \u001b[1m\u001b[37m1.00e-03\u001b[0m | \u001b[1m\u001b[32m0.872\u001b[0m | \u001b[1m\u001b[32m0.820\u001b[0m | \u001b[1m\u001b[31m0.425\u001b[0m | \u001b[1m\u001b[31m0.627\u001b[0m | \u001b[37m1635012330_Flatten_Dropout02_Dense-64-relu_Dropout05_Dense-10-softmax\u001b[0m |\n", "| \u001b[1m\u001b[37m70\u001b[0m | \u001b[1m\u001b[37m1.00e-03\u001b[0m | \u001b[1m\u001b[37m1.00e-03\u001b[0m | \u001b[1m\u001b[32m0.900\u001b[0m | \u001b[1m\u001b[32m0.824\u001b[0m | \u001b[1m\u001b[31m0.351\u001b[0m | \u001b[1m\u001b[31m0.607\u001b[0m | \u001b[37m1635012330_Flatten_Dropout02_Dense-64-relu_Dropout05_Dense-10-softmax\u001b[0m |\n", "| \u001b[1m\u001b[37m80\u001b[0m | \u001b[1m\u001b[37m1.00e-03\u001b[0m | \u001b[1m\u001b[37m1.00e-03\u001b[0m | \u001b[1m\u001b[32m0.926\u001b[0m | \u001b[1m\u001b[32m0.824\u001b[0m | \u001b[1m\u001b[31m0.292\u001b[0m | \u001b[1m\u001b[31m0.729\u001b[0m | \u001b[37m1635012330_Flatten_Dropout02_Dense-64-relu_Dropout05_Dense-10-softmax\u001b[0m |\n", "| \u001b[1m\u001b[37m90\u001b[0m | \u001b[1m\u001b[37m1.00e-03\u001b[0m | \u001b[1m\u001b[37m1.00e-03\u001b[0m | \u001b[1m\u001b[32m0.930\u001b[0m | \u001b[1m\u001b[32m0.848\u001b[0m | \u001b[1m\u001b[31m0.269\u001b[0m | \u001b[1m\u001b[31m0.616\u001b[0m | \u001b[37m1635012330_Flatten_Dropout02_Dense-64-relu_Dropout05_Dense-10-softmax\u001b[0m |\n", "| \u001b[1m\u001b[37m99\u001b[0m | \u001b[1m\u001b[37m1.00e-03\u001b[0m | \u001b[1m\u001b[37m1.00e-03\u001b[0m | \u001b[1m\u001b[32m0.942\u001b[0m | \u001b[1m\u001b[32m0.828\u001b[0m | \u001b[1m\u001b[31m0.232\u001b[0m | \u001b[1m\u001b[31m0.625\u001b[0m | \u001b[37m1635012330_Flatten_Dropout02_Dense-64-relu_Dropout05_Dense-10-softmax\u001b[0m |\n", "+-------+----------+----------+----------+-------+--------+-------+-----------------------------------------------------------------------+\n" ] } ], "source": [ "model.train(epochs=100, init_logs=False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Again the Feed-Forward network has been quite performant to reproduce the training data, less about the validation ones. Overfitting is a general problem in the field." ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "tags": [] }, "outputs": [ { "data": { "image/png": "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u+8yY8aMvBgee+wxevTowUcffcQff/xB79696datG1dddRVRUVF5cdx111106tSJzp0788svvzB37lwee+yxvOl++eWXTJ06texWvgZU8oZeQH9gIrBPKbXH7DYdaAogIp8DLwJ1gM/MRgi5tz7VA341uzkBP4jIivIKtNbNY8n4+yPC5n5Bm3c+LK/ZaFqV8PIfBwiOLPRK1EXr0NCbl0Z1LLL/zp07+emnn9izZw85OTkEBgbSvXt3br75ZmbNmsW7775Ljx7n7pqsU6cOu3btAiA2Npb77rsPgOeff56vv/6aRx555Lx55OTksGPHDpYvX87LL7/MqlWr8vV3c3Pj119/xdvbm5iYGPr06cPo0aMJDg7m1VdfZcuWLfj6+hIXFwfAlClTuOKKK/j111+xWCykpKQQHx9f7HrIysrKe4Z/fHw827ZtQynFV199xdtvv817773HzJkz8fHxYd++fXnDOTs789prr/HOO+/g7OzMN998wxdffHGh1a6VUqVOyiKyCeP+4+KGuRe4t5DuIUCXcgrtPFcGjGJRwMcMW7GKnGfjcKpd+3LNWtO0Eti4cSM33HADHh4eAIwePbrY4cePH5/3//79+3n++edJSEggJSWF4cOHFzrOjTfeCED37t0JDQ09r7+IMH36dDZs2ICDgwMRERFERUWxZs0axo4di6+vLwC1zePHmjVr8q5ZOzo64uPjc8GkbBt3eHg448eP5/Tp02RlZeXdX7xq1Sp++umnvOFq1aoFwJVXXsmyZcto37492dnZdOrUqdh5aaVXqZNyZdKoRiOOX9WO4bsPkfDzz/hOnmzvkDStwiquRFtReHp65v1/55138ttvv9GlSxfmzZvHunXrCh3H1dUVMBJoYdd0v//+e6Kjo9m5cyfOzs40b9681E84c3Jywmq15n0vOL5t3I888giPP/44o0ePZt26dXnV3EW59957ef311/H39+euu+4qVVxayVTqa8qVTWDv0expoYj5fgGSnW3vcDRNszFo0CB+++030tPTSU5O5o8//sjr5+XlRXJycpHjJicn06BBA7Kzs/n+++8vOobExETq1q2Ls7Mza9eu5eRJ442HV155JYsWLSI21minmlt9PXToUGbPng0YDc4SExOpV68eZ8+eJTY2lszMTJYtW1bs/Bo1agTAt99+m9d92LBhfPrpp3nfc0vf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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "model.plot(path=False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We will not optimize this Feed-Forward model and instead we will go ahead with Convolutional networks." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Convolutional Neural Network (CNN)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As detailed in [Basics with images](epynnlive/dummy_image/train.html#Convolutional-Neural-Network-(CNN)), CNNs are preferred when it comes to considering *a priori* spatial relationships between data points." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Embedding" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Using same embedding configuration as above." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "embedding = Embedding(X_data=X_features,\n", " Y_data=Y_label,\n", " X_scale=True,\n", " Y_encode=True,\n", " batch_size=32,\n", " relative_size=(2, 1, 0))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that we use only *500 + 250* sample images herein. Benchmarks using the MNIST Database generally employ the whole 60 000 images for the training set itself, but it is likely to overload the RAM or not run at all on many system configurations. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Conv-MaxPool-Flatten-Dense" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Using a single *Convolution-Pooling* block with ``16`` filters and *4x4* filter window for the *Convolution* layer." ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "tags": [] }, "outputs": [], "source": [ "name = 'Convolution-16-2_Pooling-3-Max_Flatten_Dense-10-softmax'\n", "\n", "se_hPars['learning_rate'] = 0.005\n", "se_hPars['softmax_temperature'] = 5\n", "\n", "layers = [\n", " embedding,\n", " Convolution(unit_filters=16, filter_size=(2, 2), activate=relu),\n", " Pooling(pool_size=(2, 2)),\n", " Flatten(),\n", " Dense(10, softmax)\n", "]\n", "\n", "model = EpyNN(layers=layers, name=name)" ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "Initialize the model with *Categorical Cross Entropy* loss." ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[1m--- EpyNN Check OK! --- \u001b[0m\r" ] } ], "source": [ "model.initialize(loss='CCE', seed=1, se_hPars=se_hPars.copy(), end='\\r')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Train for 20 epochs." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[1m\u001b[37mEpoch 9 - Batch 14/14 - Accuracy: 0.75 Cost: 0.52838 - TIME: 7.37s RATE: 1.36e+00e/s TTC: 1s \u001b[0m\n", "\n", "+-------+-------------+----------+----------+-------+--------+-------+--------------------------------------------------------------------+\n", "| \u001b[1m\u001b[37mepoch\u001b[0m | \u001b[1m\u001b[37mlrate\u001b[0m | \u001b[1m\u001b[37mlrate\u001b[0m | \u001b[1m\u001b[32maccuracy\u001b[0m | | \u001b[1m\u001b[31mCCE\u001b[0m | | \u001b[37mExperiment\u001b[0m |\n", "| | \u001b[37mConvolution\u001b[0m | \u001b[37mDense\u001b[0m | \u001b[1m\u001b[32mdtrain\u001b[0m | \u001b[1m\u001b[32mdval\u001b[0m | \u001b[1m\u001b[31mdtrain\u001b[0m | \u001b[1m\u001b[31mdval\u001b[0m | |\n", "+-------+-------------+----------+----------+-------+--------+-------+--------------------------------------------------------------------+\n", "| \u001b[1m\u001b[37m0\u001b[0m | \u001b[1m\u001b[37m5.00e-03\u001b[0m | \u001b[1m\u001b[37m5.00e-03\u001b[0m | \u001b[1m\u001b[32m0.594\u001b[0m | \u001b[1m\u001b[32m0.564\u001b[0m | \u001b[1m\u001b[31m1.880\u001b[0m | \u001b[1m\u001b[31m1.916\u001b[0m | \u001b[37m1635012346_Convolution-16-2_Pooling-3-Max_Flatten_Dense-10-softmax\u001b[0m |\n", "| \u001b[1m\u001b[37m1\u001b[0m | \u001b[1m\u001b[37m5.00e-03\u001b[0m | \u001b[1m\u001b[37m5.00e-03\u001b[0m | \u001b[1m\u001b[32m0.728\u001b[0m | \u001b[1m\u001b[32m0.716\u001b[0m | \u001b[1m\u001b[31m1.083\u001b[0m | \u001b[1m\u001b[31m1.149\u001b[0m | \u001b[37m1635012346_Convolution-16-2_Pooling-3-Max_Flatten_Dense-10-softmax\u001b[0m |\n", "| \u001b[1m\u001b[37m2\u001b[0m | \u001b[1m\u001b[37m5.00e-03\u001b[0m | \u001b[1m\u001b[37m5.00e-03\u001b[0m | \u001b[1m\u001b[32m0.770\u001b[0m | \u001b[1m\u001b[32m0.728\u001b[0m | \u001b[1m\u001b[31m0.767\u001b[0m | \u001b[1m\u001b[31m0.824\u001b[0m | \u001b[37m1635012346_Convolution-16-2_Pooling-3-Max_Flatten_Dense-10-softmax\u001b[0m |\n", "| \u001b[1m\u001b[37m3\u001b[0m | \u001b[1m\u001b[37m5.00e-03\u001b[0m | \u001b[1m\u001b[37m5.00e-03\u001b[0m | \u001b[1m\u001b[32m0.782\u001b[0m | \u001b[1m\u001b[32m0.792\u001b[0m | \u001b[1m\u001b[31m0.661\u001b[0m | \u001b[1m\u001b[31m0.748\u001b[0m | \u001b[37m1635012346_Convolution-16-2_Pooling-3-Max_Flatten_Dense-10-softmax\u001b[0m |\n", "| \u001b[1m\u001b[37m4\u001b[0m | \u001b[1m\u001b[37m5.00e-03\u001b[0m | \u001b[1m\u001b[37m5.00e-03\u001b[0m | \u001b[1m\u001b[32m0.814\u001b[0m | \u001b[1m\u001b[32m0.788\u001b[0m | \u001b[1m\u001b[31m0.573\u001b[0m | \u001b[1m\u001b[31m0.668\u001b[0m | \u001b[37m1635012346_Convolution-16-2_Pooling-3-Max_Flatten_Dense-10-softmax\u001b[0m |\n", "| \u001b[1m\u001b[37m5\u001b[0m | \u001b[1m\u001b[37m5.00e-03\u001b[0m | \u001b[1m\u001b[37m5.00e-03\u001b[0m | \u001b[1m\u001b[32m0.820\u001b[0m | \u001b[1m\u001b[32m0.784\u001b[0m | \u001b[1m\u001b[31m0.585\u001b[0m | \u001b[1m\u001b[31m0.707\u001b[0m | \u001b[37m1635012346_Convolution-16-2_Pooling-3-Max_Flatten_Dense-10-softmax\u001b[0m |\n", "| \u001b[1m\u001b[37m6\u001b[0m | \u001b[1m\u001b[37m5.00e-03\u001b[0m | \u001b[1m\u001b[37m5.00e-03\u001b[0m | \u001b[1m\u001b[32m0.866\u001b[0m | \u001b[1m\u001b[32m0.816\u001b[0m | \u001b[1m\u001b[31m0.434\u001b[0m | \u001b[1m\u001b[31m0.613\u001b[0m | \u001b[37m1635012346_Convolution-16-2_Pooling-3-Max_Flatten_Dense-10-softmax\u001b[0m |\n", "| \u001b[1m\u001b[37m7\u001b[0m | \u001b[1m\u001b[37m5.00e-03\u001b[0m | \u001b[1m\u001b[37m5.00e-03\u001b[0m | \u001b[1m\u001b[32m0.774\u001b[0m | \u001b[1m\u001b[32m0.744\u001b[0m | \u001b[1m\u001b[31m0.610\u001b[0m | \u001b[1m\u001b[31m0.773\u001b[0m | \u001b[37m1635012346_Convolution-16-2_Pooling-3-Max_Flatten_Dense-10-softmax\u001b[0m |\n", "| \u001b[1m\u001b[37m8\u001b[0m | \u001b[1m\u001b[37m5.00e-03\u001b[0m | \u001b[1m\u001b[37m5.00e-03\u001b[0m | \u001b[1m\u001b[32m0.842\u001b[0m | \u001b[1m\u001b[32m0.816\u001b[0m | \u001b[1m\u001b[31m0.426\u001b[0m | \u001b[1m\u001b[31m0.639\u001b[0m | \u001b[37m1635012346_Convolution-16-2_Pooling-3-Max_Flatten_Dense-10-softmax\u001b[0m |\n", "| \u001b[1m\u001b[37m9\u001b[0m | \u001b[1m\u001b[37m5.00e-03\u001b[0m | \u001b[1m\u001b[37m5.00e-03\u001b[0m | \u001b[1m\u001b[32m0.878\u001b[0m | \u001b[1m\u001b[32m0.856\u001b[0m | \u001b[1m\u001b[31m0.389\u001b[0m | \u001b[1m\u001b[31m0.580\u001b[0m | \u001b[37m1635012346_Convolution-16-2_Pooling-3-Max_Flatten_Dense-10-softmax\u001b[0m |\n", "+-------+-------------+----------+----------+-------+--------+-------+--------------------------------------------------------------------+\n" ] } ], "source": [ "model.train(epochs=10, init_logs=False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The overfitting using this CNN architecture is reduced compared with the pure Feed-Forward design. However, accuracy remains slightly lower for both training and validation data.\n", "\n", "Note the ``learning_rate`` may be a bit too high here: there are jumps up and down for both accuracy and loss, particularly visible on the validation set." ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "tags": [] }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "model.plot(path=False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Looking at the plot, the model seems to have converged.\n", "\n", "We will try to optimize it further." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Conv-MaxPool-Flatten-(Dense)n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Below we added one ``Dense(64, relu)`` hidden layer. This is the same design as used for the Feed-Forward network excepted, of course, for the *Convolution-Pooling* block. The thing to pay attention to here is the absence of *Dropout* layer compared to the Feed-Forward network." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[1m\u001b[37mEpoch 9 - Batch 14/14 - Accuracy: 0.906 Cost: 0.5155 - TIME: 9.21s RATE: 1.09e+00e/s TTC: 2s \u001b[0m\n", "\n", "+-------+-------------+----------+----------+----------+-------+--------+-------+----------------------------------------------------------------------------------+\n", "| \u001b[1m\u001b[37mepoch\u001b[0m | \u001b[1m\u001b[37mlrate\u001b[0m | \u001b[1m\u001b[37mlrate\u001b[0m | \u001b[1m\u001b[37mlrate\u001b[0m | \u001b[1m\u001b[32maccuracy\u001b[0m | | \u001b[1m\u001b[31mCCE\u001b[0m | | \u001b[37mExperiment\u001b[0m |\n", "| | \u001b[37mConvolution\u001b[0m | \u001b[37mDense\u001b[0m | \u001b[37mDense\u001b[0m | \u001b[1m\u001b[32mdtrain\u001b[0m | \u001b[1m\u001b[32mdval\u001b[0m | \u001b[1m\u001b[31mdtrain\u001b[0m | \u001b[1m\u001b[31mdval\u001b[0m | |\n", "+-------+-------------+----------+----------+----------+-------+--------+-------+----------------------------------------------------------------------------------+\n", "| \u001b[1m\u001b[37m0\u001b[0m | \u001b[1m\u001b[37m5.00e-03\u001b[0m | \u001b[1m\u001b[37m5.00e-03\u001b[0m | \u001b[1m\u001b[37m5.00e-03\u001b[0m | \u001b[1m\u001b[32m0.570\u001b[0m | \u001b[1m\u001b[32m0.520\u001b[0m | \u001b[1m\u001b[31m1.822\u001b[0m | \u001b[1m\u001b[31m1.863\u001b[0m | \u001b[37m1635012353_Convolution-16-2_Pooling-3-Max_Flatten_Dense-64-relu_Dense-10-softmax\u001b[0m |\n", "| \u001b[1m\u001b[37m1\u001b[0m | \u001b[1m\u001b[37m5.00e-03\u001b[0m | \u001b[1m\u001b[37m5.00e-03\u001b[0m | \u001b[1m\u001b[37m5.00e-03\u001b[0m | \u001b[1m\u001b[32m0.628\u001b[0m | \u001b[1m\u001b[32m0.564\u001b[0m | \u001b[1m\u001b[31m1.172\u001b[0m | \u001b[1m\u001b[31m1.293\u001b[0m | \u001b[37m1635012353_Convolution-16-2_Pooling-3-Max_Flatten_Dense-64-relu_Dense-10-softmax\u001b[0m |\n", "| \u001b[1m\u001b[37m2\u001b[0m | \u001b[1m\u001b[37m5.00e-03\u001b[0m | \u001b[1m\u001b[37m5.00e-03\u001b[0m | \u001b[1m\u001b[37m5.00e-03\u001b[0m | \u001b[1m\u001b[32m0.630\u001b[0m | \u001b[1m\u001b[32m0.632\u001b[0m | \u001b[1m\u001b[31m1.011\u001b[0m | \u001b[1m\u001b[31m1.081\u001b[0m | \u001b[37m1635012353_Convolution-16-2_Pooling-3-Max_Flatten_Dense-64-relu_Dense-10-softmax\u001b[0m |\n", "| \u001b[1m\u001b[37m3\u001b[0m | \u001b[1m\u001b[37m5.00e-03\u001b[0m | \u001b[1m\u001b[37m5.00e-03\u001b[0m | \u001b[1m\u001b[37m5.00e-03\u001b[0m | \u001b[1m\u001b[32m0.776\u001b[0m | \u001b[1m\u001b[32m0.740\u001b[0m | \u001b[1m\u001b[31m0.680\u001b[0m | \u001b[1m\u001b[31m0.798\u001b[0m | \u001b[37m1635012353_Convolution-16-2_Pooling-3-Max_Flatten_Dense-64-relu_Dense-10-softmax\u001b[0m |\n", "| \u001b[1m\u001b[37m4\u001b[0m | \u001b[1m\u001b[37m5.00e-03\u001b[0m | \u001b[1m\u001b[37m5.00e-03\u001b[0m | \u001b[1m\u001b[37m5.00e-03\u001b[0m | \u001b[1m\u001b[32m0.852\u001b[0m | \u001b[1m\u001b[32m0.812\u001b[0m | \u001b[1m\u001b[31m0.514\u001b[0m | \u001b[1m\u001b[31m0.623\u001b[0m | \u001b[37m1635012353_Convolution-16-2_Pooling-3-Max_Flatten_Dense-64-relu_Dense-10-softmax\u001b[0m |\n", "| \u001b[1m\u001b[37m5\u001b[0m | \u001b[1m\u001b[37m5.00e-03\u001b[0m | \u001b[1m\u001b[37m5.00e-03\u001b[0m | \u001b[1m\u001b[37m5.00e-03\u001b[0m | \u001b[1m\u001b[32m0.770\u001b[0m | \u001b[1m\u001b[32m0.736\u001b[0m | \u001b[1m\u001b[31m0.621\u001b[0m | \u001b[1m\u001b[31m0.773\u001b[0m | \u001b[37m1635012353_Convolution-16-2_Pooling-3-Max_Flatten_Dense-64-relu_Dense-10-softmax\u001b[0m |\n", "| \u001b[1m\u001b[37m6\u001b[0m | \u001b[1m\u001b[37m5.00e-03\u001b[0m | \u001b[1m\u001b[37m5.00e-03\u001b[0m | \u001b[1m\u001b[37m5.00e-03\u001b[0m | \u001b[1m\u001b[32m0.912\u001b[0m | \u001b[1m\u001b[32m0.820\u001b[0m | \u001b[1m\u001b[31m0.348\u001b[0m | \u001b[1m\u001b[31m0.587\u001b[0m | \u001b[37m1635012353_Convolution-16-2_Pooling-3-Max_Flatten_Dense-64-relu_Dense-10-softmax\u001b[0m |\n", "| \u001b[1m\u001b[37m7\u001b[0m | \u001b[1m\u001b[37m5.00e-03\u001b[0m | \u001b[1m\u001b[37m5.00e-03\u001b[0m | \u001b[1m\u001b[37m5.00e-03\u001b[0m | \u001b[1m\u001b[32m0.830\u001b[0m | \u001b[1m\u001b[32m0.780\u001b[0m | \u001b[1m\u001b[31m0.520\u001b[0m | \u001b[1m\u001b[31m0.676\u001b[0m | \u001b[37m1635012353_Convolution-16-2_Pooling-3-Max_Flatten_Dense-64-relu_Dense-10-softmax\u001b[0m |\n", "| \u001b[1m\u001b[37m8\u001b[0m | \u001b[1m\u001b[37m5.00e-03\u001b[0m | \u001b[1m\u001b[37m5.00e-03\u001b[0m | \u001b[1m\u001b[37m5.00e-03\u001b[0m | \u001b[1m\u001b[32m0.900\u001b[0m | \u001b[1m\u001b[32m0.856\u001b[0m | \u001b[1m\u001b[31m0.315\u001b[0m | \u001b[1m\u001b[31m0.536\u001b[0m | \u001b[37m1635012353_Convolution-16-2_Pooling-3-Max_Flatten_Dense-64-relu_Dense-10-softmax\u001b[0m |\n", "| \u001b[1m\u001b[37m9\u001b[0m | \u001b[1m\u001b[37m5.00e-03\u001b[0m | \u001b[1m\u001b[37m5.00e-03\u001b[0m | \u001b[1m\u001b[37m5.00e-03\u001b[0m | \u001b[1m\u001b[32m0.902\u001b[0m | \u001b[1m\u001b[32m0.860\u001b[0m | \u001b[1m\u001b[31m0.290\u001b[0m | \u001b[1m\u001b[31m0.506\u001b[0m | \u001b[37m1635012353_Convolution-16-2_Pooling-3-Max_Flatten_Dense-64-relu_Dense-10-softmax\u001b[0m |\n", "+-------+-------------+----------+----------+----------+-------+--------+-------+----------------------------------------------------------------------------------+\n" ] }, { "data": { "image/png": "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s2YxYcKEq7aRlZXFjh07WLFiBW+++SZr1669Yr6rqyu//PIL3t7eREdH0759e/r168fBgweZMmUKW7duxd/fn9jYWACefPJJunbtyi+//EJ2djZJSUnExcUVehwyMjJy74EVFxfH9u3bUUoxc+ZM3n//fT766CPefvttfHx82LdvX245Z2dnpk6dygcffICzszNz5szh22+/LeqwizJCkpCbWJYpi43nNlJ/6J3onxcR+913BL74gq3DEkJY2LJlC/3798fd3R2Afv36FVp+6NChuf/v37+f1157jUuXLpGUlETv3r3zXWbAgAEAtGrVitOnT181X2vNK6+8wubNm3FwcOD8+fNERESwfv16Bg8ejL+/PwCVKlUCYP369bl9ThwdHfHx8SkyCbGMOywsjKFDh3Lx4kUyMjJyx/dYu3YtCxYsyC3n6+sLwO23387y5ctp1KgRmZmZNGvWrNBtibJDkhArU0rNBu4GIrXWTfOZ7wP8ANTEOP4faq3nlEQsl9Iv8cLmF7iv4X08cOedXFqwAP9Hx+Lo41MSmxOizCusxsJeeHh45P4/cuRIli5dSmhoKHPnzmXjxo35LlOhQgXASBjy65Mxf/58oqKi2L17N87OzgQHB1/zuBtOTk6YTKbc53mXt4x7woQJPPvss/Tr14+NGzfmNtsU5JFHHuGdd96hYcOGjBo16priEvZN+oRY31ygTyHznwAOaq1DgW7AR0opl5IIxN/Nn541e7L0+FI8Hx6OKSWF2PnzS2JTQojr1KVLF5YuXUpqaiqJiYn89ttvufO8vLxITEwscNnExESqVq1KZmYm82/gvR0fH0/lypVxdnZmw4YNnDF3ZL/99ttZtGgRMTExALnNMd27d2fatGmA0UE2Pj6ewMBAIiMjiYmJIT09neXLlxe6verVqwPw3Xff5U7v2bMnX331Ve7znNqVdu3ace7cOX788Ufuu+++695PYX8kCbEyrfVmILawIoCXMkbX8TSXLbHu4kMbDiUxI5F1zsfx7NaNuHnfYzJ3XhNC2F7Lli0ZOnQooaGh3HHHHbRp0yZ33siRIxk3blxux9S83n77bdq1a0fHjh1p2LDhdcfwwAMPsGvXLpo1a8a8efNy19WkSRNeffVVunbtSmhoKM8++ywAn332GRs2bKBZs2a0atWKgwcP4uzszOuvv07btm3p2bNnofFMnjyZwYMH06pVq9ymHjD6tcTFxdG0aVNCQ0PZsGFD7rwhQ4bQsWPH3CYacXNQWmtbx3DTUUoFA8sLaI7xApYBDQEvYKjW+vd8yo0FxgLUrFmz1ZnrvMRWa82AZQNwdnBmTvWXOHv/AwS+8jKV7PTyPSFK26FDh2jUqJGtwxBFuPvuu3nmmWfo3r17vvPzO49Kqd1a69b5LiDsgtSElL7ewF6gGtAC+FIp5Z23kNZ6uta6tda6dUBAwHVvTCnFsJBhHIo9xIkaTri3bk3M7DnojIzrXqcQQpSWS5cu0aBBA9zc3ApMQETZJUlI6RsF/E8bjgOnMGpFSszdde/G3cmdhUcW4vfoWLLCw4n/reD2WiGEsBcVK1bk6NGjLFq0yNahiBIgSUjpOwt0B1BKBQIhwMmS3KCHswd96/Zl5amVZLRuQoXGjYiZORNdyIiLQgghREmTJMTKlFI/AduAEKVUmFJqtFJqnFJqnLnI28CtSql9wDpgotY6uqTjGhoylAxTBr+e+BX/MWPIOHWKxLXrSnqzQgghRIFknBAr01oXev2Y1voC0KuUwslV37c+rQJbsfDIQh665zdcatUiZvp0vHr1lNtgCyGEsAmpCSlHhoUM43zSebaGb6fSI6NJO3CA5K1bbR2WEEKIckqSkHKke83u+Ln6sfDIQnzuuQenypWJmT7D1mEJISxY3nzuWo0cOZLFixdbOSIhSo4kIeWIs6MzAxsMZHPYZi5mRFFp1ChS/v6b1H//tXVoQoibQH5DwgtRGElCypnBDQajlGLRkUX4DhmMo48P0VIbIoRNTZ06lQYNGtCpUyeOHDkCwOHDh2nbtm1umdOnT+feuO2tt96iTZs2NG3alLFjx1LUoJMzZsygTZs2hIaGMnDgQFLMoyZHRETQv39/QkNDCQ0NZau5eXbevHk0b96c0NBQhg8fDlxdy+Lp6QnAxo0b6dy5M/369aNx48YA3HvvvbRq1YomTZowffr03GVWrlxJy5YtCQ0NpXv37phMJurXr09UVBQAJpOJevXq5T4XNz/pmFrOVPGoQregbvzv2P94vMXj+D74INFffUX6sWNUqF/f1uEJYVt/vATh+6y7zirN4I53C5y9e/duFixYwN69e8nKyqJly5a0atWKhg0bkpGRwalTp6hduzYLFy7MvRPt+PHjef311wEYPnw4y5cvp2/fvgVuY8CAAYwZMwYwhkafNWsWEyZM4Mknn6Rr16788ssvZGdnk5SUxIEDB5gyZQpbt27F398/934xhdmzZw/79+/PvRvu7NmzqVSpEqmpqbRp04aBAwdiMpkYM2YMmzdvpnbt2sTGxuLg4MCDDz7I/Pnzefrpp1m7di2hoaHcyACNomyRmpByaGjDocSlx7H6zGp8H3wA5eZGzMyZtg5LiHJpy5Yt9O/fH3d3d7y9venXr1/uvCFDhrBw4UKAK5KQDRs20K5dO5o1a8b69es5cOBAodvYv38/nTt3plmzZsyfPz+3/Pr163nssccA4w67Pj4+rF+/nsGDB+fe06VSpUpF7kPbtm1zExCAzz//nNDQUNq3b8+5c+c4duwY27dvp0uXLrnlctb78MMPM2/ePMBIXuQuueWL1ISUQ+2rtqeWdy0WHl7I3Xfeje+QwcT+MB//CU/iElTd1uEJYTuF1FjYwtChQxk8eDADBgxAKUX9+vVJS0vj8ccfZ9euXdSoUYPJkyeTlpZW6HpGjhzJ0qVLCQ0NZe7cuWzcuPGaY3FycsJkMgFGs0mGxa0fPDw8cv/fuHEja9euZdu2bbi7u9OtW7dC46tRowaBgYGsX7+eHTt23NDdgEXZIzUh5ZCDcmBIgyHsjdrL4djDVBo1ChwciJ0929ahCVHudOnShaVLl5KamkpiYiK//fZb7ry6devi6OjI22+/nVsLkvOF7u/vT1JSUrGuhklMTKRq1apkZmZe8SXfvXt3pk2bBkB2djbx8fHcfvvtLFq0iJiYGIDc5pjg4GB2794NwLJly8jMzMx3W/Hx8fj6+uLu7s7hw4fZvn07AO3bt2fz5s2cOnXqivUCPPLIIzz44IMMHjwYR0fHYhw1cbOQJKScuqfePbg6urLwyEKcq1TBp19fLi1ZQpb5g0cIUTpatmzJ0KFDCQ0N5Y477qBNmzZXzB86dCg//PADQ4YMAYx7qYwZM4amTZvSu3fvq8rn5+2336Zdu3Z07NiRhg0v36rqs88+Y8OGDTRr1oxWrVpx8OBBmjRpwquvvkrXrl0JDQ3l2WefBWDMmDFs2rSJ0NBQtm3bdkXth6U+ffqQlZVFo0aNeOmll2jfvj0AAQEBTJ8+nQEDBhAaGpqbVAH069ePpKQkaYoph1RRvaqF7bVu3Vrv2rXL6ut9/a/XWXl6JesGr8MlLJqTd92F39ixVH7maatvSwh7ld8t4EXp2rVrF8888wxbtmy57nXkdx6VUru11q1vND5RcqQmpBwb2nAoqVmpLDuxjAp1auPVqxdxP/5IdlKSrUMTQpQT7777LgMHDuT//u//bB2KsAFJQsqxJn5NaO7fnIVHFqK1xm/sGEyJicT99JOtQxNClBMvvfQSZ86coVOnTrYORdiAJCHl3NCGQzkVf4qd4Ttxa9IEj44dif1uHqYietsLIYQQN0qSkHKud3BvfCr4sODIAgD8xo4lOzqa+F9+sXFkQgghbnaShJRzFRwrMKDeANafXU9kSiTubdvgFhpKzKzZaLkPhBBCiBIkSYhgcIPBmLSJxUcXo5TC79GxZIaFkfDHH7YOTQghxE1MkhArU0rNVkpFKqX2F1Kmm1Jqr1LqgFJqU2nGl58a3jXoWL0ji48uJtOUiWe3blSoX4+Y6TPQ5hEShRClY/LkyXz44YcAzJ07lwsXLlzzOr755pvcodCL6+jRo9x5553Ur1+fli1bMmTIECIiIgDYsWMHXbp0ISQkhFtuuYVHHnmElJQU5s6dS0BAAC1atMh9HDx48JrjFeWXJCHWNxfoU9BMpVRF4Gugn9a6CTC4dMIq3LCQYUSlRrHh7AaUgwN+Y8aQfuwYSRttniMJUW4VloRkZ2cXuNy4ceN46KGHir2dtLQ07rrrLh577DGOHTvGnj17ePzxx4mKiiIiIoLBgwfz3nvvceTIEf755x/69OlDYmIiYAymtnfv3txHzp10hSgOSUKsTGu9GSjstpP3A//TWp81l48slcCK0Kl6J6p5VGPhEeNmWd533olz9erETJ9e5G3ChRA3ZurUqTRo0IBOnTpx5MgRABYvXsyuXbt44IEHaNGiBampqQQHBzNx4kRatmzJokWLmDFjBm3atCE0NJSBAweSkpICXFmb0q1bNyZOnEjbtm1p0KBBvgOC/fjjj3To0OGKO/F269aNpk2b8tVXXzFixAg6dOiQO2/QoEEEBgaW5CER5YTcwK70NQCclVIbAS/gM631VfWmSqmxwFiAmjVrlnhQjg6ODA4ZzGd7PuPkpZPUqViHSqMfJuKtt0nZuROPtm1LPAYhbO29He9xOPawVdfZsFJDJradWOD83bt3s2DBAvbu3UtWVhYtW7akVatWDBo0iC+//JIPP/yQ1q0vD/rp5+fHnj17AIiJiWHMmDEAvPbaa8yaNYsJEyZctY2srCx27NjBihUrePPNN1m7du0V8/fv30+rVq3yjW///v2MGDGiwPgXLlzIn3/+mft827ZtuLm5FVheCEtSE1L6nIBWwF1Ab2CSUqpB3kJa6+la69Za69YBAQGlElj/ev1xdnDOrQ2pOGAAjn5+xEyfUSrbF6I82rJlC/3798fd3R1vb2/69etXaHnLe67s37+fzp0706xZM+bPn8+BAwfyXWbAgAEAtGrVitOnT1st9px4LJtjJAER10JqQkpfGBCjtU4GkpVSm4FQ4KhtwwI/Nz96Bfdi2YllPNXyKdxd3ak0YgRRH39M6oEDuDVpYusQhShRhdVY2AvLG8eNHDmSpUuXEhoayty5c9m4cWO+y1SoUAEAR0dHsvK59L5JkyZs2pR//68mTZqwe/du7rnnnhsPXog8pCak9P0KdFJKOSml3IF2wCEbx5RrWMgwkjKT+P3U7wD43jcMB09PYmbMtHFkQtycunTpwtKlS0lNTSUxMZHffvstd56Xl1duB9D8JCYmUrVqVTIzM5k/f/51x3D//fezdetWfv/999xpmzdvZv/+/YwfP57vvvuOv//+O3fe//73v9wrZ4S4EZKEWJlS6idgGxCilApTSo1WSo1TSo0D0FofAlYC/wE7gJla6wIv5y1toQGhhPiGsODwArTWOHp54Xv//SSuWkX6qVO2Dk+Im07Lli0ZOnQooaGh3HHHHbRp0yZ33siRIxk3blxux9S83n77bdq1a0fHjh1p2LDhdcfg5ubG8uXL+eKLL6hfvz6NGzfm66+/JiAggMDAQBYsWMDzzz9PSEgIjRo1YtWqVXh5eQFGnxDLS3S3bt163XGI8kfJlQ/2r3Xr1nrXrl2ltr1FRxfx1ra3+P6O72lRuQVZMTEcv7073n3vptqUKaUWhxClIb9bwIuyJ7/zqJTarbVuXcAiwg5ITYi4yl2178LT2TP3fjJOfn5UHDiQ+F+XkRkebuPohBBC3CwkCRFXcXd2p1/dfqw+vZqY1BgAKj38MJhMxM6Za9vghBBC3DQkCRH5GhoylExTJr8cN+6m6xJUHZ+77yJu0SKy4uJsHJ0QQoibgSQhIl91KtahbZW2LDqyiGyTMTy03yOPoFNSiJv/o42jE0IIcTOQJEQUaGjIUC4kX+DP88ZoiBXq18eze3fivv8eU3KyjaMTQghR1kkSIgp0W83bqOxWObeDKoD/2DFkx8cTt2iRDSMTQghxM5AkRBTI2cGZQQ0G8df5vziXcA4At9BQ3Nu1I3bOXEwZGTaOUIibj+XN567VyJEjWbx4cb7zPvzwQxo2bEiLFi1o06YN8+YZt6zKzMzkpZdeon79+rRs2ZIOHTrwxx9/ABAcHEyzZs1yxwB58sknr2+nhCiAJCGiUAMbDMRBObDo6OWaD78xY8iKiCBh2TIbRiaEKK5vvvmGNWvWsGPHDvbu3cu6dety7449adIkLl68yP79+9mzZw9Lly69YpTWDRs25N4X5vPPP7fVLoiblCQholCV3Stze83b+d/x/5GWlQaAR8dbcW3cmJgZM9HZ2TaOUIiyb+rUqTRo0IBOnTpx5MgRAA4fPkxbi7tXnz59mmbNmgHw1ltv0aZNG5o2bcrYsWMpatDJd955h2nTpuHt7Q2At7c3I0aMICUlhRkzZvDFF1/k3l8mMDCQIUOGlMRuCnEVuYGdKNKwkGGsObOG1WdW069uP5RS+I0dy/mnnyZxzRq8+/SxdYhCWEX4O++QfuiwVddZoVFDqrzySoHzd+/ezYIFC9i7dy9ZWVm0bNmSVq1a0bBhQzIyMjh16hS1a9dm4cKFuXfQHT9+PK+//joAw4cPZ/ny5fTt2zff9SckJJCYmEidOnWumnf8+HFq1qyZm5zk57bbbsPR0RGAESNG8MwzzxR734UoitSEiCK1qdKG2j61WXh4Ye40r549cAkOJnr69CJ/hQkhCrZlyxb69++Pu7s73t7e9OvXL3fekCFDWLjQeN9ZJiEbNmygXbt2NGvWjPXr13PgwIESi8+yOUYSEGFtUhMiiqSUYmjIUN7d8S4HYg7QxK8JytERvzGPcPHV10j+8y88O3eydZhC3LDCaixsYejQoQwePJgBAwaglKJ+/fqkpaXx+OOPs2vXLmrUqMHkyZNJS0srcB3e3t54enpy8uTJq2pD6tWrx9mzZ0lISCi0NkSIkiI1IaJY+tXth5uTGz8f+Tl3mk/fvjhVqULM9Ok2jEyIsq1Lly4sXbqU1NRUEhMT+e2333Ln1a1bF0dHR95+++3cWpCchMPf35+kpKQCr4ax9PLLL/PEE0+QkJAAQFJSEvPmzcPd3Z3Ro0fz1FNPkWG+2i0qKopFcgm+KCWShIhi8XLx4q46d7Hi5Ari0+MBUC4u+I0aScrOnaT884+NIxSibGrZsiVDhw4lNDSUO+64gzZt2lwxf+jQofzwww+5nUUrVqzImDFjaNq0Kb17976qfH4ee+wxbrvtttzOrJ07d8bBwfj4nzJlCgEBATRu3JimTZty9913X1Erctttt+VeovvQQw9Zcc+FACXt+favdevWeteuXbYOg8Oxhxn822BeaP0CDzUxPoxMKSkcv707brfcQo1pX9s4QiGuXX63gBdlT37nUSm1W2vd2kYhiWKQmhBRbA0rNaRFQAt+PvozJm0CwMHdHd/hD5K0YQNpR4/aOEIhhBBliSQhVqaUmq2UilRK7S+iXBulVJZSalBpxWYNQxsO5UzCGbZf3J47rdIDD+Dg7k7MjJk2jEwIIURZI0mI9c0FCh04QynlCLwHrC6NgKypV61e+FbwveJyXceKFak4dCgJK1aQERZmw+iEuD7SLF22yfkruyQJsTKt9WYgtohiE4AlQGTJR2RdLo4uDKg/gI1hGwlPDs+dXmnkSJSDAzGzZtkwOiGunaurKzExMfJFVkZprYmJicHV1dXWoYjrIOOElDKlVHWgP3AbUGC3dqXUWGAsQM2aNUsnuGIaHDKY2ftns+joIibcMgEA58DK+Nx7L/FL/kfA44/jFBBg4yiFKJ6goCDCwsKIioqydSjiOrm6uhIUFGTrMMR1kCSk9H0KTNRam5RSBRbSWk8HpoNxdUzphFY81T2r0yWoC0uOLmFc83E4OzoD4PfIaC4tWULsvHlUfu45G0cpRPE4OztTu3ZtW4chRLkkzTGlrzWwQCl1GhgEfK2UutemEV2HoSFDiUmLYd3ZdbnTXGrVwrtPb+J+WkC2xV04hRBCiPxIElLKtNa1tdbBWutgYDHwuNZ6qW2junYdq3ekumd1FhxZcMV0vzFjMCUlEffjTzaKTAghRFkhSYiVKaV+ArYBIUqpMKXUaKXUOKXUOFvHZk0OyoGhIUPZHbGbY3HHcqe7NmqER5fOxM6bh6mQ+1kIIYQQkoRYmdb6Pq11Va21s9Y6SGs9S2v9jdb6m3zKjtRaF33jBzt1b717cXFwYeGRhVdM9x87luyYGC4tWWKjyIQQQpQFkoSI6+br6kuf2n347cRvJGcm5053b90at5YtiZ01G52ZacMIhRBC2DNJQsQNGRYyjJSsFJafWH7FdL+xY8i8cIGEFStsFJkQQgh7J0mIuCFN/ZvS2K8xC44suGKwJ8+uXakQEkL0jBlok8mGEQohhLBXkoSIG6KUYljIMI5fOs6eyD1XTPcbM4aM4ydI2rDBhhEKIYSwV5KEiBvWp3YfvFy8rrifDIB3n94416hB9PTpMiS2EEKIq0gSIm6Ym5Mb99a7lzVn1xCdGp07XTk54Td6NGn//kfK3ztsGKEQQgh7JEmIsIohDYaQZcrif8f+d8V0n/734hjgT8z06TaKTAghhL2SJERYRbBPMB2qdmDR0UVkmbJypztUqIDfyJEkb93KpV+W2i5AIYQQdkeSEGE1QxsOJTw5nM1hm6+Y7nvffbi3bcvFl18mfMpUGTtECCEEIEmIsKKuQV0JdA+8agRVB3d3as6eRaVRo4j74QfOjBxFltw2XQghyj1JQoTVODk4MbjBYLZe2Mrp+NNXzFNOTgROfJFqH31I2sGDnBowkJR//rFNoEIIIeyCJCHCqgY2GIiTcuLnoz/nO9/nrrsIXrAA5ebGmYdGEPfTT3L5rhBClFOShAir8nfzp0etHiw9vpTUrNR8y7iGNKD24kV43nor4W++xcVXXpU77gohRDkkSYiwuqEhQ0nMSGTlqZUFlnH09iZo2tf4P/EE8b/8wpn7HyDz/PlSjFIIIYStSRIirK5VYCvqVazHT4cLb2pRDg4ETBhP0LSvyTh3jlMDB5G8dWspRiqEEMKWJAkRVqeUYmjIUA7FHmJ/9P4iy3vddhu1F/2MU4A/Zx8ZQ8zMmdJPRAghygFJQqxMKTVbKRWplMr321cp9YBS6j+l1D6l1FalVGhpx1ga7q5zN+5O7iw4sqBY5V2CgwlesACv3r2I/PAjzj/1NNlJySUcpRBCCFuSJMT65gJ9Cpl/CuiqtW4GvA3clOOZe7p40rduX1aeWsmltEvFWsbBw4PqH39M5RdfJHHtWk4PHUr6yVMlG6gQQgibkSTEyrTWm4HYQuZv1VrHmZ9uB4JKJTAbGBIyhAxTBkuPLy32Mkop/B4eRc3Zs8iOjeX0kCEkrltXckEKIYSwGUlCbGs08IetgygpDXwb0LJySxYeWYhJm65pWY/27am9ZDEuwcGEPTGeyM8+Q2dnl1CkQgghbEGSEBtRSt2GkYRMLGD+WKXULqXUrqgyPMT5fQ3vIywpjK0Xrv2qF+dq1ag1/wd8Bg4gZto3nBv3GNmXLlk/SCGEEDYhSYgNKKWaAzOBe7TWMfmV0VpP11q31lq3DggIKN0Arah7ze74ufqx8PDCogvnw6FCBapOmUKVN98keft2Tg0eQtrhw1aOUgghhC1IElLKlFI1gf8Bw7XWR20dT0lzdnRmYIOBbArbxLYL265rHUopfIcOIfj7eej0dE4Pu4/435ZbOVIhhBClTZIQK1NK/QRsA0KUUmFKqdFKqXFKqXHmIq8DfsDXSqm9SqldNgu2lNzX8D6qe1Zn7JqxvLDpBSKSI65rPW4tWlD7f0twa9qUCy+8QPg776AzM60crRBCiNKiZFCowiml3LXWKbaMoXXr1nrXrrKdq6RlpTFn/xxm7Z+Fg3JgXOg4hjcajrOj8zWvS2dmEvnhh8R+Nw/31q2p/uknOPn7l0DUQoiyTCm1W2vd2tZxiIJJTUgBlFK3KqUOAofNz0OVUl/bOKwyy9XJlcdaPMYv9/xCuyrt+GT3Jwz8beB1NdEoZ2cCX36Zah+8T+r+/ZwaMJDUvXutH7QQQogSJUlIwT4BegMxAFrrf4EuNo3oJlDDqwZfdP+Cr7p/RZYpi7FrxvLsxmcJTw6/5nX59O1L8IKfUC4unB7+EHELFspw70IIUYZIElIIrfW5PJNkoAor6RLUhV/u+YXxLcazJWwL/Zb2Y+a+mWRkZ1zTelwbNqT24kV4tG9P+OTJXJw0CVN6eglFLYQQwpokCSnYOaXUrYBWSjkrpZ4HDtk6qJtJBccKPBr6KEvvXUqHqh34bM9nDFw2kK3nr21MEceKFanxzTT8HhtH/OIlnHngQTIvXCihqIUQQliLJCEFGwc8AVQHzgMtzM+FlVX3rM5nt3/GtB7TMGkTj659lGc2PMOFpOInEsrRkcpPPUXQV1+SceoUpwYOInn73yUYtRBCiBslV8eUATfD1THFlZGdwXcHvmP6f8Z9/R5p9ggjm46kgmOFYq8j/eQpwiZMIOPUKSo/9xyVHh6FUqqkQhZC2Cm5Osb+SRJSAKXUHOCqg6O1fri0YylPSUiOi0kX+WDXB6w5s4aaXjV5qe1LdA7qXOzls5OSufjKKySuXo3XHX2oNmUKDh4eJRixEMLeSBJi/6Q5pmDLgd/Nj3WAN5Bk04jKkaqeVfm428d82/NbHJQDj697nCfXP0lYYlixlnf09KD6Z59S+fnnSFy1mtPDhpFx+nTJBi2EEOKaSE1IMSmlHIA/tda3lva2y2NNiKXM7EzmHZzHt/99i0mbGN10NKOajsLVybVYyydv3cr5Z59DZ2VR7f338br9thKOWAhhD6QmxP5JTUjx1Qcq2zqI8sjZ0ZnRzUaz7N5ldKvRja///Zr+v/Zn07lNxVre49ZbCV68GJeaNQl74gm574wQQtgJSUIKoJRKVEol5PwFfgMm2jqu8qyKRxU+7PohM3rNwMXRhfHrxzN+3XjOJeQdzuVqLkHVqTX/B9zbtOHCSy+RuHZtKUQshBCiMNIcUwaU9+aY/GRmZzL/0Hym/TuNLFMWo5qOYnSz0bg5uRW6XHZSMmdHP0z6wUMETZuGZ6eOpRSxEKK0SXOM/ZMkJA+lVMvC5mut95RWLDkkCSlYRHIEH+3+iD9O/UF1z+q82OZFbqtxW6GX5GbHx3NmxEgyTp+m5swZuLeWzyghbkaShNg/SULyUEptKGS21lrfXmrBmEkSUrSd4Tt55+93OH7pOJ2qd+Klti9Ry7tWgeWzYmI48+BwsiIjqTl3Dm7NmpVitEKI0iBJiP2TJKQMkCSkeDJNmfx06Ce+/vdrMrIzGNlkJI80ewR3Z/f8y0dEcOaBB8lOTKTWvO9wDQkp5YiFECVJkhD7J0lIIZRSTYHGQO61oFrreaUdhyQh1yYqJYqPd3/M8pPLqepRlRfbvEj3mt3zbaLJCAvjzAMPorOyqPXD91SoXdsGEQshSoIkIfZPro4pgFLqDeAL8+M24H2gXzGWm62UilRK7S9gvlJKfa6UOq6U+q+oPiji2gW4B/B/nf+PuX3m4uniyTMbn2Hc2nGcjj99VVmXoCBqzpkNWnN21MNkhJ0v/YCFEKKckiSkYIOA7kC41noUEAr4FGO5uUCfQubfgTHmSH1gLDDtxsIUBWkV2Iqf7/6ZiW0m8l/Uf/Rf1p/P93yOSZuuKFehTh1qzpqJKSWFsw8/TGZEpI0iFkKI8kWSkIKlaa1NQJZSyhuIBGoUtZDWejMQW0iRe4B52rAdqKiUqmqViMVVnByceLDxg/zW/zf6BPdhxr4ZfL3366vKuTZqRM3p35IdHc3Z0Q+TFVvYKRRCCGENkoTkoZT6SinVCdihlKoIzAB2A3uAbVbYRHXAcnStMPM0UYL83fx5p9M73FvvXr7971tWn159VRm3Fi0ImjaNzHNhnH3kEbITEmwQqRBClB+ShFztKPABcDfwCvA30BMYYW6WKRVKqbFKqV1KqV1RUVGltdmbmlKKSe0n0TygOa/99RpHYo9cVcajXVuCvvic9GPHOTf2UUzJyTaIVAghygdJQvLQWn+mte4AdAFigNnASqC/Uqq+FTZxniubdYLM0/LGMV1r3Vpr3TogIMAKmxUALo4ufNrtU7ycvXhqw1PEpcVdVcazSxeqf/Qhqfv2ce6J8ZjS020QqRBC3PwkCSmA1vqM1vo9rfUtwH3AvcBhK6x6GfCQ+SqZ9kC81vqiFdYriinAPYBPb/uUqJQontv0HJmmzKvKePfqRbV3ppKyfTvnn3wKnZFhg0iFEOLmJklIAZRSTkqpvkqp+cAfwBFgQDGW+wmj70iIUipMKTVaKTVOKTXOXGQFcBI4jtHf5PGS2QNRmGYBzXjj1jfYGb6TD3Z+kG8Zn3vuocrkN0jatInzL05EZ2eXcpRCCHFzc7J1APZGKdUTo+bjTmAHsAAYq7UuVucArfV9RczXwBM3Gqe4cf3q9uNI7BHmHZxHiG8IAxsMvKqM77BhmFJSiXz/fS66uVF16hSUg+TuQghhDZKEXO1l4EfgOa311R0GxE3lmVbPcCzuGFP+nkLdinVpUbnFVWX8Hh6FKSWF6C+/xMHNjcBJrxV6gzwhhBDFIz/p8tBa3661nikJSPng5ODEB10/oJpHNZ7e8DThyeH5lvN/4nEqPfwwcT/+SNTHHyO3OxBCiBsnSYgo93wq+PD57Z+TmpXK0xueJi0r7aoySikqv/A8FYcNJWbGTGK+/dYGkQohxM1FkhAhgLoV6/Ju53c5EHOAydsm51vToZSiyuuv43NPP6I+/YzY776zQaRCCHHzkCRECLPbat7G+Bbj+f3k73x3IP8EQzk4UHXqVLx69iTi/94l7uefSzlKUVKkiU2I0icdU4WwMLb5WI7EHeGTPZ9Qz7cenap3uqqMcnKi+kcfcm78eMLfmIyDmzs+fe+2QbTCGmKTM/h6w3F+3HGWOgEe9GgUSI9GgTSp5i0dkIUoYUqyf/vXunVrvWvXLluHUW6kZKYw/I/hXEy6yI93/UiwT3C+5UxpaZwb+ygpu3cT9NmnePXoUbqBihuSlJ7FzC0nmbnlFCkZWdzRtCrhCWnsORuH1lDVx9VISBoH0r5OJSo4Odo65FIRkZDG1hPRHI1IwmTSmLTGpMGkNVobNUY5z025z68sYznv8nPL8lcvn3e5nDK1Krnz6bBbrmtflFK7tdatrXyIhBVJElIGSBJS+sISw7jv9/vwdfXlxzt/xNPFM99y2UnJnB39MOkHDxE0bRqenTqWcqTiWqVlZvPD9jN8vfEEsckZ9G4SyPO9Qqgf6AVAdFI66w9HsvZgBFuORZOamY2HiyNdQwLo0SiQ20Iq4+vhYuO9sJ5LKRlsPxnDX8dj2HoimhNRxpBITg4KJ0eFg1IoMP4qcHAwpjkoo5+Ug8L83Dw/n78Ouc8ty19ePu9fy/XVrOTO1P7NrmvfJAmxf5KElAGShNjGzvCdjFk9hk7VO/H57Z/joPLvQpUdH8+ZESPJOH2amjNn4N5aPvPsUVa2iSV7wvhs7TEuxKfRsZ4fL/RuSIsaFQtcJi0zm20nYlh9MIJ1hyKITEzHQUHr4Er0NNeS1Pb3KL2dsIKUjCx2nIpl24kY/joRzYELCWgN7i6OtK1diVvr+nFrXX8aV/XGwaFsN0dJEmL/JAkpAyQJsZ2fDv/EO3+/w5hmY3iy5ZMFlsuKieHMg8PJioyk5tw5uDW7vl9uwvq01vyxP5wPVx/hZFQyoTUq8mLvEDrW87+m9ZhMmn3n41l7KII1ByM4HJ4IQN0AD3o0DqRno0BuqemLo519cWdkmdh77hJ/HY9m64lo9p67RGa2xtlRcUtNXzrW9efWen6EBlXExenmulZBkhD7J0lIGSBJiO1orXlz25ssObaED7p+QJ/gPgWWzYyI4MwDD5KdmEited/hGhJSipGKvLTWbDkWzQerjrDvfDz1K3vyXK8QejcJtEqH03OxKaw7FMG6w5FsOxFDlklTycOF2xtWpkejQDrX98ejQun3/c82aQ5eSOCvE9FsPRHDzlOxpGZmoxQ0q+7DrXX9ubWuH22CK+HmcnP3c5EkxP5JElIGSBJiWxnZGYxeNZrDsYf5/s7vaVipYcFlw8I488CD6Kwsav3wPRVq1y7FSEWOPWfjeH/lYbafjKV6RTee6dmA/rdUL7FaioS0TDYfjWLtwQjWH44kIS0LFycHOtb1o0fjQLo3DKSKj2uJbFtrzYmoJLaeiOGv49FsPxlLfKpxZ+j6lT2N5pV6/rSv7YePu3PxV2wygc4GU5bFI9v8sJimTUWXMWXnWVd2nr/5lTFPc/eDtmOu69hIEmL/JAkpAyQJsb3o1GiGLh+Ko3Jkwd0LqORaqcCy6SdPcubB4SgXF2r98AMuQdVLMdLiuXAplS3HonB0cOC2kAD8PCvYOiSrOBKeyAerjrD2UAT+ni6Mv60e97WrWapXtmRmm9h1Oi632eZsbAoAzYN8ci//bVTV64ZqY85fSjWaV44btR2RiekAVK/oRsd6fnSs50+HOn5U9r6GxCcrA85ug+Nr4fg6iDxw3fFZVeUm8PjW61pUkhD7J0lIGSBJiH04EH2AEStH0NS/KTN6zcDZoeBflWmHD3PmoRE4VqxIre+/xzmwcilGerX0rGx2nopj09FINh6J4lhkUu48paBVTV96NDa+IOsGeJS58THOxqTwydqjLN17Hk8XJx7tWodRHWvbpDnEktaa45FJrDkUwdqDEfxz7hJaG8lCj0aV6dE4kHa1/YrsixGdlM62EzFsPWFcwXImxkhs/D1d6FDXn47mzqQ1/dyvLcC405eTjpObIDMZHJyhZnuo0Q6cXcHBCZSj8dfBCRwc8/y1+F8VMs9ymnLMUyZnfp5pyhFu4K7VkoTYP0lCygBJQuzH8pPLeXnLywwNGcpr7V8rtGzq3r2cfXg0TtWqUmvePJwqFVx7UhLOxCSz6WgUm45EsfVEDKmZ2bg4OtC2diW6Ngiga0gAGVkm1hyMYO2hCA5cSACgtr+H8QXZKJBWtXxxcrTfzoqRCWl8sf44P+04i6ODYmTHYB7rWpeK7vZ5CW1UYjobDkey5lAEW45FkZZpwrOCE11DAujZKJBuIQFUdHchMS2Tv0/G5iYdOZ1gvSo40a6OH7fWNWo7GgR6XlvCmJkKp/8yJx5rIeaYMb1iTajXE+r1gNqdoYJXCex96ZMkxP5JElIGSBJiXz7e9TFzDszh9Q6vM7jB4ELLJv+9g3Njx+JStw615s7F0du7xOJKzchm+8kYNh2NYuORSE6bfy3XrOROt5AAujYIoENdP9xd8q8dOH8plfWHIlhzKJJtJ6LJzNZUdHfm9hDjF3uXBgF42rhmIUd8SibfbD7BnL9OkZWtGdqmBk92r0/gtTQ/2FhaZjZ/HY9m7aEI1h6KJCoxHUcHRW1/D05FJ5Nt0lRwcqBNcCU6mJOOptW8ry0p1BpiTsDxNUbScfpPyEoDJ1cI7mQkHfV6gF89o0rsJiNJiP2TJKQMkCTEvmSbsnli/RP8ffFvZvWaRcvAloWWT9q8mXNPjMetSRNqzpqJg4d1xpXI6ZC48UgUm45G8fepWDKyTLg6O9Chjh9dGwTQLaQywdcxjkViWiZbjkUbHS2PRHIpJRMXRwfa1/WjZ6PKdG8USLWKblbZj2uRkpHFnL9O8+2mEySkZdEvtBrP9mxwXfuYS2uIOgynNoObL/jVNb6UXX2sF3gRTCbNf+fjWXswgn3n42ke5EOHun60rOmLq/M19mdJT4LTW+CYOfG4dMaY7lf/ctIR3BGcS//8lTZJQuyfJCFWppTqA3wGOAIztdbv5plfE/gOqGgu85LWekVh65QkxP7Ep8fzwIoHSMxIZMFdC6jqWbXQ8gmrV3P+mWdxb9OGGt9+g0OF6+sImpiWydYTMbnNLOcvpQJQr7KnOekIoE1wpaK/uBIuGH0AHJyg7m3gUfCYGVnZJnafudzRMqeGpUk1b3o0CqRn45K/z0pGlokFO8/y+brjRCelc3vDyjzfK4TG1a6zZsmUDWE74fByOPw7xJ68uoxHgJGM5CQlfvWML/JKtcHJjjryag2Rhy7XdpzZBqZMcPaAOl2hXneo292Iu5yRJMT+SRJiRUopR+Ao0BMIA3YC92mtD1qUmQ78o7WeppRqDKzQWgcXtl5JQuzTyUsnuX/F/dT0qsl3d3yHm1Phvyzjly3jwsSX8OzShaAvPke5FN1vQWvNoYuJuU0su8/EkWXSeLg40rGeP13NzSxBvkV0SExLMKriT240HtFHLGYqqNbC/Cu5J1RvBY75N7sYtS/JRhPCwQh2m++zUsXblR6NjX4kHer6We1qlGyT5te95/lk7VHOxabSNrgSL/YJoXXwdfSvyUyDU5uMxOPIH5AcZXTCrNMVGt5l7HtmCsQct3icMP4mRVisSBl9KHITE4tExSfI6FxZ0lIvGftybI3RqTTxgjG9chMj6ajXw+hcak/Jkg1IEmL/JAmxIqVUB2Cy1rq3+fnLAFrr/7Mo8y1wUmv9nrn8R1rrWwtbryQh9mvjuY08uf5J+tTuw3ud3yuyNiBuwULCJ0/Gs3t3qk2dgmPFileVuZSSwZ/Ho9lkbmbJufyyUVXv3NqOljV9C7+iIjsTwnaZk44Nxv86G5zcjKr4Ot2MR3am8SV2fC2E7TDGfHD1gTq3Xa669y64licm5z4rhyLYfPTyfVa6NDDfZ6VhZSpdx31WtNasORjBR6uPciQikcZVvXmhTwjdGgRcW41LahwcXW0kHsfXGVd/uHhBg16XEw/XYtSmpCVA7InLSUnOI/o4ZCReLudYASrVyVN7Yn54+F9/vwuTCcL/u9yh9NwO43xW8IG63YzzVLc7+Njf5eC2JEmI/ZMkxIqUUoOAPlrrR8zPhwPttNbjLcpUBVYDvoAH0ENrvTufdY0FxgLUrFmz1ZkzZ0phD8T1mPHfDD7/53OeafUMDzd9uMjysfO+J+K993D09aXKpEl49uzJvvPxubUde89dwqTB29WJzg0C6NYggC4NAgrvdKk1RB25nHSc/hMykkA5QLVbjKSiTjeo0bbgX8epccbyOZdsJl40pgc2Nf+67mlctumUf1KRc5+VNYeM+6xEJJjvs1KrUm4tSZ2A/G8EaGnrCWOU03/OXqK2vwfP9mzAXc2qFv8+JvFhcHiFkXic+csY9MqzCjS800g8gjtbr4ZAa6NGJeY4RB+7svYk9qTRLJKjgo+RnPjXv7L2pFJdqJDPcUmOMc5lzvlIjjSmV21xOUEMalNgrZWQJKQskCTEioqZhDyLcdw/MteEzAKaaq1NBa1XakLsm9aaFze/yKrTq/iy+5d0CepS5DLhu//l4quv4Xr6ODtqhPJpk3u45OZN8+o+5stnKxMa5FP4lRCJ4Ua/jpMbjOQhJ2moVOdy0lG7s9HZ8tp3CiIOXP7lfXa78YXq4gm1u16u8vetle/iJpNm/wWjo+WaQ5Ecumhc/lsnwCP3xm8t89xn5b+wS3yw6ghbjkVTxduVp3rUZ1CrIJyLuhpEa4g8eDnxuLjXmO4fYiQdDe82ErEbGG/iupiy4dLZq2tPYk5A/DnA4rPXq+rlxMS1opFEnt9tlHGrdPl4170dPG075kxZIkmI/ZMkxIqK2RxzACNROWd+fhJor7WOLGi9koTYv5TMFEasHMH5xPPMv2s+tX3y7wR4NCKR91ceZu2hSBxN2Qw/+ycD969EVXCl4gsvUH3ooIKbG9KT4MzWy0lHpLmrkVuly80rdboVmBjckPRE4+qR42vh2FqIP2tM929w+Vd5rY7G4Fb5CItLYd0ho9lm+8kYMrM1vu7O9Krjwx1nd7DFwZ9Zl7zxdXfm8W71GN6hVuGda03ZcO5vo1Pp4eXGoFsoo2ag4V3Gw7++1Q+D1WSmQuypq/uexByH1Fio3vryca3WonT6mdyEJAmxf5KEWJFSygmjY2p34DxGx9T7tdYHLMr8ASzUWs9VSjUC1gHVdSEnQpKQsuFC0gWGLR+GTwUffrzrR7xcLg/4dDE+lY9XH2XJnjA8XJwY2TGYXo2r0KSaN5mnT3HxtUmk7tmDR+fOVH1zMs7VqkF2Flz453LScW6HURvh5Ao1OxgJR93bILBZ6f7K19poesipJTn9J2Snm/ubmMeeqN/TqJHJJ6FKSMtk8+Fwzv20mOarF1IpNR4TitPd76Xz/72Kt3cBl9tmpsKJDXDkd6NjaUoMOLoYNTMN74KQO8CrSgnvfCnIzpImFiuRJMT+SRJiZUqpO4FPMS6/na21nqqUegvYpbVeZr4iZgbgiVEf+6LWenVh65QkpOzYGb6TsavH0qFaB764/QuS0k1M22gMqqU1DO9Qi/G31cM3T2dNbTIRN38+kR9/jNLZBNxeBV//w6iMeEBB1VAj4ajTDWq0L7DGwSYyUoy+F8fXGldrxJ4wpvsGX77ipnZncDGSi+StW4l4/wPSDx/GNTSUhPtH4719E2m/LKFC/fpU++B9XBuabxKYEgtHVxm1HSfWG1evVPCx6Fja46YZ3VNYnyQh9k+SkDJAkpCyZeHhhUz5ewqtKw7kn39v5VJKJve2qMZzvUKoUSnPpbRJUcallic3wImNZFy4SPhOH5IjXHGrXZGqzz5MhY4Dwb10h3y/IbEnzVfcrDP2LTMFHF1Id29JxHZI3ncW5+rVqfzcs3jdcUdu81Pixo1cfG0S2ZcuEXBvW/zqhKPObTOuAvGqdrljaa1OBXaOFcKSJCH2T+r8hLAik0njlHwrzsm3sosl1AqqxA+9R9C0unn0Ta2Ny2UP/QonNkLEPmO6a0Wo0xWXLt2o8XI34jfuJeK99zj13Jf4TwC/UaNQTmXk7VqpDrStY9x+PSudrP9WEfXVN1zaegoHJxOVWyTi2xIcsv6AQ1nGOB2XzuLFdtwGZhO+IpGoxVtJqupItUdH49J5GFS1QcdSIUSJk5qQMkBqQuyf1prNx6J594/DHLqYQONq7rgEzeB8yjG+u+M7GntUh/9+hl1zjFukO7oYg0nV6WZcyVI19KrOh5mRkYS/9RZJa9fh2qQJVadOudxMUQaY0tKI/W4eMdOnY0pPx3fYMPyH34tT9C6j6ebkRkhPsFhCQY126JA7STjrQfgn09HZ2QROnEjFIYPL3J19he1JTYj9kySkDJAkxL7tC4vn3ZWH+Ot4DEG+brzQO4S+zasRmxbDfcsGQkYyC8LO45eRYozx0HoUNB1YrL4MWmsSV60i/O0pZMfH4zfmEfwfewyHYoy2aivaZCJh+XIiP/mUrIsX8ezencrPPUeFOnmuGMrONIZOP7nJGBAt5M4rLj/NvHiRC6+8Qsq27Xh27UrVKW/jFBBQynsjyjJJQuyfJCFlgCQh9ulsTAofrj7Csn8v4OvuzPjb6/Ng+5pUyEoyaj12f8fBuMM8VK0KTZwrMrPrJzgHtbmubWXFxRH57rvE/7oMl3p1qTZlCm4tWlh3h6wgZedOIt57n7T9+3Ft3JjKEyfi0a7tda9Pm0zE/TCfyI8+wsHNjSqTJ+Pdp7cVIxY3M0lC7J8kIWWAJCH2JSYpnS/WH2f+32dwdFCM7lSbR7vUwTt2n9Hcsn+J0RmzSnNoPYoV3j5M3DaZIQ2GMKnDpBvadtKmTVx8YzJZERFUeughAp56Egf3Iu4bUwrST50i8qOPSFq7DqcqVaj8zNN49+2LslI/jvSTJ7nw4kTS9u/Hu19fqrz2Go7e13nzOlFuSBJi/yQJKQMkCbEPKRlZzP7zFN9sOklKRhZDWtfgmc5VCTyzDHbPgfB9xp1Lmw2EVqOgesvcZT/Z/Qmz989mUvtJDAkZckNxZCclEfnRR1z6aQHONWpQ9e238Gjf/kZ377pkxcUR/fU04n76CQcXF/zGjqHSiBE4uFn/NvE6M5Pob6cTPW0aTgEBVPu/d/Do0MHq2xE3D0lC7J8kIWWAJCG2lZVtYtHuMD5Zc5TIxHR6NArk9ZZp1Dy1EPYtMW6KVqWZkXg0G5zvDdGyTdlMWD+BbRe2MaPXDFpXufHPxeQdO7g4aRKZZ85ScfBgKr/4Ao5epTNmhikjg7jvfyD6m28wJSdTcfBgAiaMx8nfv8S3nbpvHxdenEjGqVP4Dh9O5eeexcHVjsZNEXZDkhD7J0lIGSBJiG1orVl9MIL3Vx7mRFQytwa58E79IwSf/hku/gvO7kYH05xajyKu3kjMSOT+3+8nISOBn+76iWqe1W44RlNqKlFffEns3Lk4BQRQZfIbeN122w2vtyBaaxJXriTyo4/JDAvDo0tnAl94gQr1S3eIdFNqKpEff0Lc99/jUqcO1d57F7dmzUo1BmH/JAmxf5KElAGShJS+3Wdi+b8Vh9l1Jo7elS7yWuAOgs7/jspIMu4q22okNB9i3Pb+GpyKP8X9v9+Pv5s/UztNpXlAc6vEm7pvHxdfeZX0Y8fwvusuAl99BadK1h3gLOWff4h8731S9+6lQoMGVJ74Ip4dO1p1G9cqeetWLrzyKllRUfg/9hj+j45FOTvbNKYbkRF2nvQjh/Ho2FFqd6xAkhD7J0lIGSBJSOk5HpnE+ysP8+fBMzzgsYNxHpvxSzho3Bel6UDj8trqrYqs9SjMzvCdvLTlJaJSohjcYDBPtnwSnwrXlszkR2dkED19BtHffoujpyeBr72K95133vD4GhnnzhH58cck/rESxwB/Kj/1FD79+6Mc7eOmatkJCYRPmULCst9wbdaMau+9S4U6dWwdVrFlnDtH4qpVJKxaTdo+Y/A6p8qV8X9sHBUHDkTZ8eXY9k6SEPsnSUgZIElIyYtMSOOTtcfYv3szDzqtp7/TVlyyU6ByY6O5pfkQcKtote0lZybz1d6vmH9oPhUrVOSFNi9wV+27rDIgV9rRo1x89TXS9u3D8/bbqfLG6zgHBl7zerITEoie9g1xP/wAjo74PfwwfqMfxsGjgBvM2VjCylWEv/EGprQ0Kj//PL4P3G+1q3OsLePMGRJWrSZx5UrSDhp3Q3Zt2hTvPr1xqVOHmJmzSN2zB+fq1fEfPx6fvneXnRFz7YgkIfZPkpAyQJKQkpOYlsmcDfuJ2vYjg1hHqMMJtJMrqskAo9YjqM0N1XoU5VDMId7e/jb7ovfRrmo7Xmv3GsE+wTe8Xp2dTex384j6/HOUszOVX3yBioMGFSvJ0ZmZxP20gOivviI7IQGf/v0JeOrJ60pkSltmZCQXJ00iedNmPG7tQNWpU3GuWtXWYQHGZcyJq1aTsGoV6YcOAeAa2hzvXr3x6t0bl6DquWW11iT/+SdRn35G2oEDuNSpQ8CE8Xj17m23iZU9kiTE/kkSUgZIEmJ9GVkm/li7mvS/Z3OHaTNeKpWMSiG4tBttrvXwLbVYsk3ZLD66mM/2fEZadhqPNHuE0c1GU8Gxwg2vO+PMGS5Oep2UHTtw79Ceqm+9hUuNGvmW1VqTtG4dkR98SMaZM7h3aE/giy/i2qjRDcdRmrTWXPp5ERHvvYdydKTK65Pwvvtumwz7nn7yJAkrV5K4ajXpR44A4NaiBV59euPdqxfO1QrvnKy1JnHNGqI+/5yM4yeo0LAhAU89iWe3bjKMfTFIEmL/JAkpAyQJsR5TWhL/rppDhX+/o7HpGBk4k1SvL5W6PAo12pVorUdRolOj+WDnB6w4tYKaXjV5tf2r3Frt1hterzaZuPTzIiI/+ABtMlH56afwffDBK/p0pO7bT+R775GyaxcudetS+YXn8ezatUx/0WWcPcuFiS+R+s8/ePXuTZXJb+DkW/LJZfrx4ySsXEXiqpWkHzsOgFvLlnj36Y1Xz57XVTOjs7NJWLGCqC++JPPsWdxCQwl4+ikZJ6UIkoTYP0lCyoCynISYTJpTMckcuphARpYJkwaT1mitc/83aeMXn8lk/h/zc4syWpM7P2d5DUWWMZk0fmmnqJO0h9pJ/1AnYQceOoUzDjXIaPEQ9Xo8gnK37lUkN2rbhW1M/XsqZxLOcEftO3ixzYv4u934+BuZFy9ycfJkkjdtxq1FC6pOnYKDuzuRn3xCwrLfcKxUiYAJ46k4ePBN0/9AZ2cTM2s2UV98gWNFH6pNmYJn167W3YbWpB89Zu5cuoqMEydAKdxbtcKrd2+8evW0WlOWzszk0i+/EP31NLLCw3Fv146Ap5/C/ZZbrLL+m40kIfZPkpAyoCwlIbHJGew9F8fes5f459wl/j13iYS0rBLZloMCB6VwUAqV+7+mjrpIG3WAdhygNQfxIx6AcPzZ6xyKa5sRdO7eF0dH+21bT89OZ9a+WczcNxNXR1eeavkUgxoMwtHhxq5I0VqTsHw5EVPfwZScDA4OoDWVRozA79GxOHp6WmkPiictK43NYZtp6t/UKuOmFLidQ4e48OJE0o8do+KQIQROfPGGOthqrUk/ciS3qSXj1ClwcMC9dWu8+vTGq0cPnCtXLnpF18mUns6lhT8T/e23ZMfE4NG1C5WfegrXxo1LbJtlkSQh9k+SECtTSvUBPgMcgZla63fzKTMEmIzxo/9frfX9ha3TXpOQ9KxsDl5IYO+5S7mPMzEpgJEghFTxpkWNitxSoyJNq/vgUcExT8KgcFCgrphmPM8vwchbBgCtIfYknNoMp/80HknhxjyvalC7MwR3huBO4Bts0+aW63E6/jRT/p7C3xf/ppl/Mya1n0Qjvxvvo5EVE0Pk+x+AUgRMGI9z9epFL2RFR+OOsvjoYpafXE5iRiKV3Sszt/dcanjn31/FGkwZGUR99hmxs+fgXKMG1d59F/eWxa9B0FqTfuiQuallFRlnzhiJR7u2ePc2Eo/SGDHWkiklhdgf5hMzaxam+Hi8evcm4MkJVKhbt1TjsFeShNg/SUKsSCnlCBwFegJhwE7gPq31QYsy9YGfgdu11nFKqcpa68jC1msPSYjWmrOxKfxz1kg2/jl3iUMXEsjINgFQxduVFjUq0qKmkXQ0C/LB3aUEqvS1hrjTcHoLnNpiJB2JF4x5noFGwpGTeFSqU+aSjvxorfn91O98sPMDLqVf4oFGD/BEiyfwcLbPS2ULkpKZwqrTq1h8dDH/Rf+Hi4MLPWr1oHNQZ97b8R6uTq7M6T2HIK+gko1j1y4uTHyJzIsX8Rs9moAJ4wsci0NrTdr+AySuNsbxyDx7Fhwd8WjXzmhq6dnD6oPCXY/sxERi58wldu5cTGlp+PTti//4JwrshFxeSBJi/yQJsSKlVAdgsta6t/n5ywBa6/+zKPM+cFRrPbO467VFEhKfksnesEvsPXuJvefi+DcsntjkDADcnB1pFuTDLeaEo0UNX6r4lODojnFnzLUc5sQjIcyY7hFwuZajdhfwq3dTJB0FiU+P5/M9n7Po6CIC3AN4ue3LdK/Z3e47jx6MOciSo0v4/dTvJGcmU9enLgMbDKRvnb5UdK0IwJHYI4xePRoPJw9m95lNdc+SrZnJTkom4t3/I37xEio0bEi1997DNaQBYE489u3LrfHIPH8enJzwaN8e7z698ezevVQ6uF6PrLg4YmbMJG7+fHR2NhUHDsT/sXE4V6li69BsQpIQ+ydJiBUppQYBfbTWj5ifDwfaaa3HW5RZilFb0hGjyWay1nplPusaC4wFqFmzZqszZ86UWNyZ2SYOX0xk77k4/jE3q5yMSjbHAfUrexq1HDV8aVGjIg0CPXEqyf4U8WHmWg7z49JZY7q7n5FwBJtrOgJCbuqkoyD/Rv3L29ve5kjcEboEdeGVdq+U+Jf2tUrOTGbFqRUsPrqYgzEHqeBYgd7BvRnUYBAtAlrkmzgdjDnII6sfwdvFmzm951DVs+TH90hcv4GLkyZhSkjAb9yjmBKTSFi9iqwLF8HZGY9bOxjjeHS/HceKFUs8HmvJjIwk5ptviVu0CKUUvvcNw2/sWJz8/GwdWqmSJMT+SRJiRcVMQpYDmcAQIAjYDDTTWl8qaL3WrAnRWhMWl3pFP4795+NJzzKaVfw9Kxj9OGpWpEWNijQP8sHLtYTvxZFwwajpOLXZSDriThvT3XyhVkejliO4EwQ0MjpSCrJMWfx46Ee+3PslWmseDX2UEY1H4Oxou/umaK3ZH72fJceWsOLUClKzUqnvW59B9QdxV527ijU0/YHoA4xZPQafCj7M6TOHKh4l/ws+KzaW8DfeIHHNWpSzMx4dOxpNLbffhqPPjQ+nb0sZYeeJnvY18b8sRbm6Umn4cPweHlXm96u4JAmxf5KEWFExm2O+Af7WWs8xP18HvKS13lnQem8kCUlMy+S/sHijH4e5P0d0UjoAFZwcaFrdx1zLYTyCfN1Kvno/Mdwi6fgTYk8Y0119oFYnc/NKZ6jcRJKOIoQnh/PejvdYe3Yt9SrW47X2r9EqsFWpxpCQkcDvJ39nydElHIk7gpuTG3fUvoOB9QfSzL/ZNb+e9kXtY+yasVRyrcScPnOo7F5yV5nkyLnaxbl6dRy9vEp8e6Ut/dQpor/4koQVK3Dw8sLv4VH4Dn8IR8+y1a/oWkkSYv8kCbEipZQTRlNLd+A8RsfU+7XWByzK9MHorDpCKeUP/AO00FrHFLTe601CopPSaTN1LTmnuI6/h0XnUV8aVvXCuaQvU83ONK5eCd8HZ/4ymllijhnzKnhDrVsv9+uo0gxu8BLU8mrTuU288/c7XEi+QP96/Xmm1TP4upZcvwWtNf9G/cvio4tZdXoVadlpNKrUiEENBnFn7TvxdLmxS333Ru7l0TWPUtm9MrN7zybAPcBKkZdvaUeOEPXZ5yStX4+jry9+Y8fie9+wm/aOvZKE2D9JQqxMKXUn8ClGf4/ZWuupSqm3gF1a62XK+Fn4EdAHyAamaq0XFLbOG6kJmb75BCFVvAkN8qGiewnejTMzDWKOQ9RhiDpy+W/sCTCZxwlx8YSaHS5fvVKlOTjeHINi2YOUzBS+/e9b5h2Yh6eLJ8+2epZ7691r1Zqt+PR4fjvxG0uOLeH4peO4O7lzZ507GdRgEE38mlhtOwB7IvYwbu04qnhUYXbv2VYZsE0YUv/7j6hPPyN569ab+o69koTYP0lCygB7uEQ3V0YyRB+1SDSOGn/jToE2+pWgHMC3NgQ0hIAG5r8hENgUbNhnobw4GneUKdun8E/kP7Ss3JJJ7SdRz7feda9Pa83uiN0sPraYNafXkGHKoJl/MwbWH8gdte/A3dnditFfaVf4Lh5f9zjVPKoxq/cs/NzKV8fKkpa8YwdRn35m3LE3KAj/J57Ap1/fK4b0L8skCbF/koSUATZJQtLiLycYUYfNicfhy1eqADg4GZfFBoSAf4jxN6ChMc355qzeLStM2sTS40v5ePfHJGckM7LpSMY2H4ubk1ux1xGXFseyE8tYfHQxpxNO4+nsyV117mJQg0E0rNSwBKO/0s7wnTy+9nFqeNdgVq9ZJdrMVB7dzHfslSTE/kkSUgaUaBKSEns50chNOo5cHgAMwLEC+DcwJxkWyUalOlKzYedi02L5eNfH/HriV6p7VueVdq/QJahLgeVN2sTO8J0sPrqYdWfXkWnKpEVACwY2GEivWr1KtNajMNsvbmf8uvEEewczs9fM3PFFhPXkvWOvc1AQLrVr41wlEKcqVXCuUiX3r3OVKjc07H1pkSTE/kkSUgbccBKiNSRFXlmjkdOckhx1uZyzx+XmE3+LZhTfYOkwWsbtDN/JlO1TOBl/kp61evJimxevuPw1OjWaX4//ypJjSziXeA5vF2/61e3HgPoDqO9b34aRX7b1/FYmrJ9A3Yp1mdFrRrEu+RXXLueOvQmrVpF1MZzMiAiyo6OvKufg5XVFYuJUJRDnKlWNv1Wr4hwYaPNERZIQ+ydJSBlw3UlISiz8dJ+RbKRdujy9gs+VNRo5/3sHySWxN7HM7EzmHpjLt/99i6NyZPwt46njU4clx5aw4ewGsnQWrQJbMajBIHrU7IGrk/01qW0J28JTG56ivm99ZvSagbeLt61Dspqc4fmXHV/G+FvG0zygua1DymXKyCArMpKsixfJDI8gM/wiWeERZIaHkxUeTmZ4ONkxV1/g5+DtjXNgoM0SFUlC7J8kIWXAdSchJhN8fy/41b2yz4ZXlXI50qgwnEs8x9S/p/LX+b8AqFihIvfUvYcBDQZQx6eOjaMr2qZzm3h649M0qtSIb3t+i5dL2R/X40LSBd7a/hZ/nf8LZwdnNJrnWz/P/Q3vt/th+XOYMjLIiojITUoyw8Nza1KyLl40alQKS1SqVsE5sEruX+eql2tZHNyvrxlQkhD7J0lIGWBXV8eIm4LWmj/P/0lqVirdanTDxbFsXZq54ewGnt34LI39G/Ntj29veFwSW8k2ZfPT4Z/4/J/PAXiq5VPcWftOJv01iU1hm+hVqxdv3vpmmd2/vEzp6WRFRpJ58SJZERFkXrxck5JboxIbe8UyLrVrU/ePFde1PUlC7J8kIWWAJCFCXG3dmXU8t+k5mgc0Z1qPaWXursLH4o4xeetk/ov+j07VOzGp/SSqeVYDjA7Cc/bP4fN/PqemV00+6vYRDXwb2Dji0mFKTzcSFHNigoMjPnffdV3rkiTE/kkSUgZIEiJE/lafXs2Lm18kNCCUaT2m2ezqnWuRkZ3B9P+mM2vfLLxcvJjYdiJ31r4z32aXneE7eXHziyRlJPFa+9e4p949Noi47JIkxP5JL0QhRJnVK7gX73Z+l71Rexm/fjypWam2DqlQeyL2MOi3QXz737fcUfsOfr33V+6qc1eB/T7aVGnDor6LaBbQjNf+eo3JWyeTlpVWylELUXIkCRFClGl9avfhnU7vsDtiNxPWT7DLL+mkjCSmbJ/CiJUjSM9K55se3/BO53eKNfCav5s/03tOZ0yzMSw5toThfwznXMK5UohaiJInSYgQosy7q85dTOk4hR0Xd/Dk+idJz063dUi5NpzdwD2/3sPPR37mwUYP8ss9v9CxesdrWoeTgxNPtnySr7p/xYWkCwxZPoR1Z9aVUMRClB5JQoQQN4W+dfvyVse32H5xO09teMrmiUh0ajTPb3qeJzc8ibeLNz/c+QMT2068oX4rXYK6sKjvIoK9g3l649N8sPMDMk2ZVoxaiNIlSYgQ4qZxb717mXzrZP46/xfPbnyWjOyMUo9Ba80vx37hnqX3sP7seibcMoGf7/7ZaoOPVfOsxnd3fMd9De9j3sF5PLzyYcKTw62ybiFKmyQhQoibyoD6A3i9w+tsDtvMc5ueIzO79GoKziWcY8yaMby+9XXqVazH4n6LGdt8LM5WvseSi6MLr7R7hQ+6fMDRuKMM+W0IWy9steo2hCgNkoQIIW46gxsM5tV2r7Lx3EZe2PxCiTdZZJmymLt/LgOWDWB/9H4mtZ/EnD5zSnwE2j61+7Dg7gX4ufkxbs04pu2dRrYpu0S3KYQ1SRIihLgpDWs4jJfavsS6s+uYuHliiSUih2IOcf/v9/PR7o9oX609v97zK0NChuCgSufjtbZPbebfOZ+769zN1/9+zePrHic2LbboBYWwA5KEWJlSqo9S6ohS6rhS6qVCyg1USmmllAykI0QJeaDRA7zQ+gXWnFnDK1teIcuUZbV1p2Wl8cnuT7jv9/uITInko64f8fltnxPoEWi1bRSXu7M7UztN5Y0Ob7ArfBeDfxvM3si9pR6HENdKkhArUko5Al8BdwCNgfuUUo3zKecFPAX8XboRClH+PNTkIZ5r9RwrT6/k1T9ftUpzxY6LOxi4bCCz98+mX91+/Hrvr/QK7mXTm80ppRjUYBA/3PkDLg4ujFo5iu8Pfo+Mii3smSQh1tUWOK61Pqm1zgAWAPmNs/w28B5gf6MqCXETGtl0JE+1fIoVp1Yw6a9J152IxKfHM3nrZEavHo1Jm5jRawZvdXwLnwo+Vo74+jXya8TCvgvpEtSF93e+z3ObniMxI9HWYQmRLydbB3CTqQ5YDmUYBrSzLKCUagnU0Fr/rpR6oaAVKaXGAmMBatasWQKhClG+PNLsEUzaxBf/fIGDcuCtjm9dU7+NNWfW8M7f7xCbFsuoJqN4rMVjuDm5lWDE18/bxZtPb/uUeQfn8cnuTzgSe4SPu31MSKUQW4cmxBWkJqQUKaUcgI+B54oqq7WerrVurbVuHRAQUPLBCVEOjG0+lsdDH+fXE7/y5rY3MWlTkctEpkTy9IaneXbjs/i7+fPTXT/xbOtn7TYByaGUYkSTEczuPZu0rDQeWPEAvxz7xdZhCXEFqQmxrvNADYvnQeZpObyApsBGc9txFWCZUqqf1lpukytEKRgXOo4sncX0/6bjoByY1H5SvjUiJm1iybElfLzrYzJNmTzT6hmGNx6Os4N1x/woaS0DW/Jz3595actLvL71dXZH7ObV9q/afRIlygdJQqxrJ1BfKVUbI/kYBtyfM1NrHQ/45zxXSm0EnpcERIjSo5RifIvxmLSJmftm4qgcebXdq1d0Kj0Vf4o3t73J7ojdtK3Sljc6vEFN77LbLOrn5sc3Pb7hm/++4dt/v+Vg7EE+7voxwT7Btg5NlHPSHGNFWussYDywCjgE/Ky1PqCUeksp1c+20QkhciilePKWJxnVZBQLjyzk3R3vorUm05TJjP9mMGjZII7GHeWtW99iZq+ZZToByeHo4MgTLZ5gWo9pRKVEMez3Yaw6vcrWYYlyTsnlW/avdevWetcuqSwRwtq01nyw6wO+P/g999S9h0Oxhzgad5SetXryctuXCXC/OftjhSeH8/ym5/k36l8ebPQgz7Z61upDy9sDpdRurbWMxWTHpDlGCFFuKaV4ofULmLSJ+YfmU9mtMp/e9inda3a3dWglqopHFeb0nsPHuz/mh0M/8F/0f3zY5UOqela1dWiinJGakDJAakKEKFlaa/668BehAaF4uXjZOpxStebMGib9NQlnB2f+r/P/0al6J1uHZDVSE2L/pE+IEKLcU0rRqXqncpeAAPSs1ZOFdy+ksntlHl/7OF/884XcBE+UGklChBCinKvlXYv5d87n3nr3Mv2/6Ty69lFiUmNsHZYoB6Q5pgyQ5hghRGn55dgvTP17KlprAtwD8Hfzz334ufrh5+Z35TQ3Pyo4VrB12PmS5hj7Jx1ThRBC5Opfvz9N/Zvy6/FfiU6LJjo1mjMJZ9gTsYe49Lh8l/Fy9roiOcn538/1ymmVXCvh5CBfO+IyqQkpA6QmRAhhDzJNmcSmxhKdFk1MagwxqTFEp0Zf8YhJM6YnZSZdtbxC4evqi5+b3xUJSk6SYjnNp4LPNd3bJz9SE2L/JCUVQghRLM4OzgR6BBLoEVhk2dSs1NwkJSY1hpi0KxOWmNQY9iTsITo1mgxTxlXLOyknKrlWool/Ez6//fOS2B1hByQJEUIIYXVuTm4EeQUR5BVUaDmtNUmZSVckJ5YJi4+LTylFLGxBkhAhhBA2o5TCy8ULLxcvavvUtnU4opTJJbpCCCGEsAlJQoQQQghhE5KECCGEEMImJAkRQgghhE1IEiKEEEIIm5AkRAghhBA2IUmIEEIIIWxCkhAhhBBC2ITcO6YMUEpFAWduYBX+QLSVwinr5FhcSY7HleR4XHYzHItaWusAWwchCiZJSDmglNolN3EyyLG4khyPK8nxuEyOhSgN0hwjhBBCCJuQJEQIIYQQNiFJSPkw3dYB2BE5FleS43ElOR6XybEQJU76hAghhBDCJqQmRAghhBA2IUmIEEIIIWxCkpCbmFKqj1LqiFLquFLqJVvHY0tKqRpKqQ1KqYNKqQNKqadsHZOtKaUclVL/KKWW2zoWW1NKVVRKLVZKHVZKHVJKdbB1TLaklHrG/D7Zr5T6SSnlauuYxM1JkpCblFLKEfgKuANoDNynlGps26hsKgt4TmvdGGgPPFHOjwfAU8AhWwdhJz4DVmqtGwKhlOPjopSqDjwJtNZaNwUcgWG2jUrcrCQJuXm1BY5rrU9qrTOABcA9No7JZrTWF7XWe8z/J2J8yVS3bVS2o5QKAu4CZto6FltTSvkAXYBZAFrrDK31JZsGZXtOgJtSyglwBy7YOB5xk5Ik5OZVHThn8TyMcvyla0kpFQzcAvxt41Bs6VPgRcBk4zjsQW0gCphjbp6aqZTysHVQtqK1Pg98CJwFLgLxWuvVto1K3KwkCRHlilLKE1gCPK21TrB1PLaglLobiNRa77Z1LHbCCWgJTNNa3wIkA+W2D5VSyhej1rQ2UA3wUEo9aNuoxM1KkpCb13mghsXzIPO0cksp5YyRgMzXWv/P1vHYUEegn1LqNEYz3e1KqR9sG5JNhQFhWuucmrHFGElJedUDOKW1jtJaZwL/A261cUziJiVJyM1rJ1BfKVVbKeWC0bFsmY1jshmllMJo8z+ktf7Y1vHYktb6Za11kNY6GON1sV5rXW5/6Wqtw4FzSqkQ86TuwEEbhmRrZ4H2Sil38/umO+W4o64oWU62DkCUDK11llJqPLAKo3f7bK31ARuHZUsdgeHAPqXUXvO0V7TWK2wXkrAjE4D55oT9JDDKxvHYjNb6b6XUYmAPxlVl/yBDuIsSIsO2CyGEEMImpDlGCCGEEDYhSYgQQgghbEKSECGEEELYhCQhQgghhLAJSUKEEEIIYROShAghAFBKZSul9lo8rDZqqFIqWCm131rrE0LcHGScECFEjlStdQtbByGEKD+kJkQIUSil1Gml1PtKqX1KqR1KqXrm6cFKqfVKqf+UUuuUUjXN0wOVUr8opf41P3KG/HZUSs1QSh1QSq1WSrnZbKeEEHZBkhAhRA63PM0xQy3mxWutmwFfYtyBF+AL4DutdXNgPvC5efrnwCatdSjGPVhyRuqtD3yltW4CXAIGlujeCCHsnoyYKoQAQCmVpLX2zGf6aeB2rfVJ800Aw7XWfkqpaKCq1jrTPP2i1tpfKRUFBGmt0y3WEQys0VrXNz+fCDhrraeUwq4JIeyU1IQIIYpDF/D/tUi3+D8b6ZMmRLknSYgQojiGWvzdZv5/K8ZdeAEeALaY/18HPAaglHJUSvmUVpBCiLJFfokIIXK4WdxhGGCl1jrnMl1fpdR/GLUZ95mnTQDmKKVeAKK4fOfZp4DpSqnRGDUejwEXSzp4IUTZI31ChBCFMvcJaa21jrZ1LEKIm4s0xwghhBDCJqQmRAghhBA2ITUhQgghhLAJSUKEEEIIYROShAghhBDCJiQJEUIIIYRNSBIihBBCCJv4fxnY+Z+yEMM9AAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "name = 'Convolution-16-2_Pooling-3-Max_Flatten_Dense-64-relu_Dense-10-softmax'\n", "\n", "se_hPars['learning_rate'] = 0.005\n", "se_hPars['softmax_temperature'] = 5\n", "\n", "layers = [\n", " embedding,\n", " Convolution(unit_filters=16, filter_size=(2, 2), activate=relu),\n", " Pooling(pool_size=(2, 2)),\n", " Flatten(),\n", " Dense(64, relu),\n", " Dense(10, softmax)\n", "]\n", "\n", "model = EpyNN(layers=layers, name=name)\n", "\n", "model.initialize(loss='CCE', seed=1, se_hPars=se_hPars.copy(), end='\\r')\n", "\n", "model.train(epochs=10, init_logs=False)\n", "\n", "model.plot(path=False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This result is better than the one obtained with the Feed-Forward network. Although we did not use *Dropout* regularization, there is less overfitting and higher accuracy on the validation set." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For code, maths and pictures behind the convolution and pooling layers, follow these links:\n", "\n", "* [Convolution (CNN)](https://epynn.net/Convolution.html)\n", "* [Pooling (CNN)](https://epynn.net/Pooling.html)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Write, read & Predict" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A trained model can be written on disk such as:" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[1m\u001b[32mMake: /media/synthase/beta/EpyNN/epynnlive/captcha_mnist/models/1635012353_Convolution-16-2_Pooling-3-Max_Flatten_Dense-64-relu_Dense-10-softmax.pickle\u001b[0m\n" ] } ], "source": [ "model.write()\n", "\n", "# model.write(path=/your/custom/path)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A model can be read from disk such as:" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "model = read_model()\n", "\n", "# model = read_model(path=/your/custom/path)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can retrieve new features and predict on them." ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "X_features, _ = prepare_dataset(N_SAMPLES=10)\n", "\n", "dset = model.predict(X_features, X_scale=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Results can be extracted such as:" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0 4 [1.31587431e-03 4.08317943e-05 1.30351360e-03 1.47063124e-03\n", " 9.78023255e-01 1.93182534e-03 1.40558825e-03 3.30961357e-04\n", " 4.94257777e-04 1.36832613e-02]\n", "1 1 [7.28977838e-05 9.29707175e-01 3.32038257e-02 1.98144195e-03\n", " 2.40938005e-04 1.34165640e-02 1.50138537e-03 1.67654867e-03\n", " 1.77799721e-02 4.19250987e-04]\n", "2 3 [4.78064492e-03 3.29830971e-06 1.58072929e-03 9.54198963e-01\n", " 6.41479062e-05 1.35982207e-02 5.87131031e-06 3.48727032e-05\n", " 2.55519849e-02 1.81267435e-04]\n", "3 3 [4.14994350e-03 2.29267766e-03 1.15714086e-02 5.79869691e-01\n", " 3.52961208e-04 6.38732938e-02 1.03465443e-04 9.56096045e-03\n", " 3.23308022e-01 4.91757634e-03]\n", "4 1 [4.89436878e-06 9.80078656e-01 1.78383500e-03 7.31766268e-06\n", " 7.22962122e-05 1.67800975e-04 1.39517610e-04 3.73043330e-04\n", " 1.73534589e-02 1.91798796e-05]\n", "5 4 [1.27447904e-03 3.62544371e-03 1.60817813e-02 5.22806853e-04\n", " 5.99689165e-01 3.52024299e-01 1.56190299e-02 1.34865787e-04\n", " 8.51033165e-03 2.51779700e-03]\n", "6 2 [4.34791238e-02 5.76774386e-03 8.07714111e-01 1.08754447e-02\n", " 7.84182950e-04 2.48067747e-02 1.02054993e-02 2.28036464e-02\n", " 6.73872013e-02 6.17627146e-03]\n", "7 0 [9.99507456e-01 5.13513994e-09 3.37688225e-05 3.65112950e-05\n", " 4.74996217e-08 2.58860168e-04 1.39608623e-04 7.52209081e-06\n", " 1.61164137e-05 1.04078231e-07]\n", "8 1 [3.17634507e-05 9.73326939e-01 7.03134936e-03 4.32744881e-04\n", " 1.55381335e-04 2.48030926e-03 6.37703894e-04 2.73099384e-03\n", " 1.27339923e-02 4.38822977e-04]\n", "9 9 [2.59605004e-05 2.29246440e-05 1.49105703e-05 2.63219182e-04\n", " 4.59102905e-02 8.82117671e-04 5.73083834e-05 7.31917762e-02\n", " 1.00839461e-03 8.78623098e-01]\n" ] } ], "source": [ "for n, pred, probs in zip(dset.ids, dset.P, dset.A):\n", " print(n, pred, probs)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.2" } }, "nbformat": 4, "nbformat_minor": 4 }