{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# L'esempio di costruzione, addestramento e uso di una semplice rete neurale per leggere cifre scritte a mano\n",
"Luca Mari, Dennis Remigio, aggiornamento agosto 2024\n",
"\n",
"Quest'opera è distribuita con Licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 4.0 Internazionale. \n",
"\n",
"\n",
"**Obiettivo**: comprendere la struttura di una semplice rete neurale, il suo addestramento e il suo funzionamento, per come specificati in Python mediante un modulo di alto livello come `PyTorch`. \n",
"**Precompetenze**: basi di Python (il codice Python è ovunque semplice, perché richiama funzioni che nascondono molti dettagli, salvo che in alcuni punti in cui i dettagli stessi sono considerati di particolare interesse).\n",
"\n",
"1. Il dataset \n",
"2. Prima opzione: un *MultiLayer Perceptron* \n",
"3. Un miglioramento del metodo di classificazione \n",
"4. Seconda opzione: una *Convolutional Neural Network*\n",
"\n",
"> Per eseguire questo notebook, supponiamo con VSCode, occorre:\n",
"> * installare un interprete Python\n",
"> * scaricare da https://code.visualstudio.com/download e installare VSCode\n",
"> * eseguire VSCode e attivare le estensioni per Python e Jupyter\n",
"> * ancora in VSCode:\n",
"> * creare una cartella di lavoro e renderla la cartella corrente\n",
"> * copiare nella cartella i file di questa attività: [mnist.ipynb](mnist.ipynb) e [mnistutils.py](mnistutils.py)\n",
"> * aprire il notebook `mnist.ipynb`\n",
"> * creare un ambiente virtuale locale Python (Select Kernel | Python Environments | Create Python Environment | Venv, e scegliere un interprete Python):\n",
"> * installare i moduli Python richiesti, eseguendo dal terminale: \n",
"> `pip install torch torchvision numpy matplotlib`"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"### 1. Il dataset\n",
"\n",
"La rete che costruiremo dovrà imparare a riconoscere cifre scritte a mano, e quindi, concretamente, a classificare immagini, appunto di cifre scritte a mano, in categorie, ognuna relativa a una delle 10 cifre. Per questo useremo sia per l'addestramento sia per il funzionamento della rete [il dataset MNIST](https://en.wikipedia.org/wiki/MNIST_database), in cui ogni immagine, digitalizzata in una matrice di 28x28 punti in cui a ogni punto è associato un colore nella scala dei grigi, è l'immagine di una cifra.\n",
"\n",
"Dopo aver importato i moduli Python necessari, carichiamo le immagini del dataset MNIST, distinguendo tra _training set_ e _test set_ (la prima volta i file con le immagini saranno scaricati dal web e copiati in una cartella locale)."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Numero di immagini nel training set: 60000\n",
"Numero di immagini nel test set: 10000\n"
]
}
],
"source": [
"from mnistutils import load_data, show_images, train_loop, test_loop, test_with_prob, test_loop_with_trace \n",
"\n",
"train_data, test_data = load_data()\n",
"\n",
"print(f\"Numero di immagini nel training set: {len(train_data)}\")\n",
"print(f\"Numero di immagini nel test set: {len(test_data)}\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Possiamo perciò mostrare qualche esempio delle immagini che contengono le cifre che vogliamo addestrare la rete a riconoscere, insieme con l'indicazione della cifre corretta, informazione anch'essa contenuta nei file che abbiamo scaricato."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"show_images(train_data)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"La varietà e l'irregolarità della scrittura a mano in queste immagini suggeriscono che ideare un algoritmo per risolvere il nostro problema di classificazione e poi implementarlo in un programma potrebbe essere estremamente complesso, come infatti confermano i limitati risultati ottenuti dai sistemi software sviluppati in accordo a questa strategia. \n",
"Cerchiamo dunque invece di risolvere il problema con la logica del _machine learning_, costruendo e poi addestrando una rete neurale artificiale. Lo faremo partendo da una rete con una struttura molto semplice (una rete _fully connected_, o _MultiLayer Perceptron_, MLP), per passare poi a una rete più complessa (una _Convolutional Neural Network_, CNN).\n",
"\n",
"\n",
"### 2. Prima opzione: un *MultiLayer Perceptron*\n",
"\n",
"Cominciamo a progettare la rete in accordo all'opzione più semplice, dunque come un *MultiLayer Perceptron*, definendo una classe che eredita da `torch.Module` e inizializzando gli strati (*layer*) della rete nel costruttore della classe:\n",
"* lo strato di input contiene 28*28 neuroni, dunque uno per ogni punto di un'immagine, ognuno di essi connesso a ognuno dei neuroni del primo strato nascosto;\n",
"* il primo strato nascosto contiene 512 neuroni, ognuno di essi connesso a ognuno dei neuroni del secondo strato nascosto;\n",
"* il secondo strato nascosto contiene 512 neuroni, ognuno di essi connesso a ognuno dei neuroni dello strato di output;\n",
"* lo strato di output contiene 10 neuroni, uno per ogni categoria in cui classificare un'immagine, e quindi uno per ogni possibile cifra riconoscibile."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Questa è dunque la struttura della rete: \n",
"\n",
""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Ogni volta che faremo funzionare questa rete sottoponendole un'immagine da classificare, e dunque assegnando un valore a ognuno dei 28x28 neuroni dello strato di input, otterremo un valore per ognuno dei 10 neuroni dello strato di output, dove l'insieme di questi 10 valori è una distribuzione di probabilità che rappresenta l'informazione inferenziale prodotta dalla rete sulla probabilità che la cifra nell'immagine sia uno 0, o un 1, e così via.\n",
"\n",
"Insieme con il suo costruttore `__init__`, implementiamo nella classe il metodo `forward`, che realizza le operazioni che devono essere compiute sui dati di input.\n",
"\n",
"Creiamo quindi la rete istanziando la classe. A questo punto i parametri della rete sono inizializzati come valori casuali."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Questa è dunque una rete con 669706 parametri.\n"
]
}
],
"source": [
"import torch\n",
"from torch import nn\n",
"\n",
"class MLP_NN(nn.Module):\n",
" \n",
" def __init__(self):\n",
" super().__init__()\n",
" self.network = nn.Sequential( # Sequential() costruisce una successione di componenti\n",
" nn.Linear(28*28, 512), # Linear(x, y) costruisce la connessione tra tutti gli x neuroni di uno strato e gli y neuroni dello strato successivo\n",
" nn.ReLU(), # ReLU() stabilisce che la funzione di attivazione per il segnale in uscita dai neuroni sia ReLu (rectified linear unit)\n",
" nn.Linear(512, 512),\n",
" nn.ReLU(),\n",
" nn.Linear(512, 10)\n",
" )\n",
"\n",
" def forward(self, x):\n",
" x = nn.Flatten()(x) # Flatten() rende unidimensionale l'input, adattando così le immagini allo strato di input\n",
" return self.network(x)\n",
" \n",
"network = MLP_NN()\n",
"\n",
"num_MLP_params = sum(p.numel() for p in network.parameters())\n",
"print(f\"Questa è dunque una rete con {num_MLP_params} parametri.\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Già ora possiamo chiedere una previsione a questa rete, ancora prima di averla addestrata e quindi, come abbiamo detto, con i suoi parametri inizializzati come valori casuali, ma ovviamente non ne otterremo nulla di utile. Lo si vede dal confronto tra la cifra prevista (\"prev\") e quella corretta (\"corr\") per un'immagine scelta a caso, in cui come cifra prevista scegliamo quella più probabile nella distribuzione risultato dell'inferenza, cioè la moda della distribuzione. E infatti la distribuzione che otteniamo è praticamente uniforme, cioè è in condizioni \"di minima informazione\" (e quindi di massima ignoranza / entropia), a indicare che la rete può essere già fatta funzionare ma, senza addestramento, non è ancora in grado di riconoscere cifre."
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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VatWLev4RJUGe/yIiKjMffzxx1CpVDh8+DDee+89vPbaa2jcuDHCw8Nx6NAhAPJTvSqVCkePHsXUqVOhUqkQGRmJS5cuQaVSISYmBt7e3jAyMsLatWtx+/ZtBAUFwcHBASYmJnB3d8f69esVfLdEuos9fkREVKbu3LmDuLg4TJ8+HaampgW2W1paFmhLSUmBj48POnXqhNGjR8PMzAy3bt0CAIwdOxZfffUVXn/9dRgZGeHRo0fw8PDAmDFjYGFhge3bt6Nfv35wdXWFp6dnWb89ogqFhR8REZWpc+fOQQgBNze3Ej/H1tYWVapUgZmZmXQKOK/wCwsLQ48ePWT7jx49WloePnw4duzYgdjYWBZ+RM9g4UdERGVKCPFKj9eyZUvZularxRdffIHY2Fhcu3YNOTk5yM7OhomJySt9XaLKgIUfERGVqfr160OlUiEpKemVHO/Z08Vz5szB/PnzERUVBXd3d5iamiIsLAw5OTmv5PWIKhNe3EFERGXK2toavr6+WLx4MTIzMwtsv3fv3ksd/8CBA+jevTv69u2LZs2awcXFBWfOnHmpYxJVViz8iIiozC1evBharRaenp7YvHkzzp49i9OnT2PBggVo3br1Sx27fv36iI+Px++//47Tp09jyJAhSEtLe0XJiSoXnuolIqIy5+LigmPHjmH69On45JNPkJKSgpo1a8LDwwNLly59qWNPnDgRFy5cgK+vL0xMTDB48GAEBAQgPT39FaUnqjxU4lWPuiUiIiIincRTvURERER6goUfERERkZ5g4UdERESkJ1j4EREREekJFn5EREREeoKFHxEREZGeYOFHREREpCdY+BERERHpCRZ+RERERHqChR8RERGRnmDhR0RERKQn/h91+SGnl69UIQAAAABJRU5ErkJggg==",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"test_with_prob(test_data, network)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Per poter addestrare la rete, specifichiamone allora dei valori per gli iperparametri, oltre che la funzione di errore e la funzione di ottimizzazione per la _backpropagation_."
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"learning_rate = 1e-3 # gli iperparametri per l'addestramento \n",
"batch_size = 50\n",
"num_batches = 500\n",
"epochs = 20\n",
"\n",
"loss_fn = nn.CrossEntropyLoss()\n",
"optimizer = torch.optim.SGD(network.parameters(), lr=learning_rate)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Addestriamo finalmente la rete in accordo a questi iperparametri e, contestualmente, mettiamola alla prova, in modo da valutare se sta davvero imparando a classificare correttamente le immagini che sottoponiamo."
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoca\tAccuratezza\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/lucamari/Bin/tutorial/.venv/lib/python3.12/site-packages/torch/autograd/graph.py:768: UserWarning: CUDA initialization: CUDA unknown error - this may be due to an incorrectly set up environment, e.g. changing env variable CUDA_VISIBLE_DEVICES after program start. Setting the available devices to be zero. (Triggered internally at ../c10/cuda/CUDAFunctions.cpp:108.)\n",
" try:\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"1\t14.0%\n",
"2\t36.0%\n",
"3\t52.0%\n",
"4\t54.0%\n",
"5\t62.0%\n",
"6\t70.0%\n",
"7\t46.0%\n",
"8\t68.0%\n",
"9\t52.0%\n",
"10\t70.0%\n",
"11\t82.0%\n",
"12\t74.0%\n",
"13\t90.0%\n",
"14\t78.0%\n",
"15\t74.0%\n",
"16\t88.0%\n",
"17\t84.0%\n",
"18\t90.0%\n",
"19\t80.0%\n",
"20\t90.0%\n",
"Processo completato in 35.73 secondi\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAh8AAAGdCAYAAACyzRGfAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABbcElEQVR4nO3deXhTZfo38G/27indW7pQ1rIVoUIpiwtUEEFhRFzGGTdcxh86g8voMK/bjDq4zejoIDoOoo6iI6OAAsIACoLSAmUrWylQuqeltEm6ZWly3j/ShBba0qRJTtJ+P9eV64Lk5ORODyF3n/t57kciCIIAIiIiIi+Rih0AERER9S1MPoiIiMirmHwQERGRVzH5ICIiIq9i8kFERERexeSDiIiIvIrJBxEREXkVkw8iIiLyKrnYAVzMarWioqICoaGhkEgkYodDRERE3SAIAurr65GQkACptOuxDZ9LPioqKpCUlCR2GEREROSC0tJSJCYmdnmMzyUfoaGhAGzBh4WFiRwNERERdYder0dSUpLje7wrPpd82EstYWFhTD6IiIj8THemTHDCKREREXkVkw8iIiLyKiYfRERE5FVMPoiIiMirmHwQERGRVzH5ICIiIq9i8kFERERexeSDiIiIvIrJBxEREXmV08lHfX09Fi9ejJSUFAQGBmLSpEnYu3ev43FBEPDcc88hPj4egYGByM7ORmFhoVuDJiIiIv/ldPJx//33Y8uWLfj3v/+N/Px8zJgxA9nZ2SgvLwcAvPbaa3j77bfx3nvvITc3F8HBwZg5cyYMBoPbgyciIiL/IxEEQejuwc3NzQgNDcW6deswe/Zsx/0ZGRmYNWsWXnzxRSQkJOCJJ57Ak08+CQDQ6XSIjY3FRx99hNtvv/2yr6HX66FWq6HT6bi3CxERkZ9w5vvbqZGPlpYWWCwWBAQEtLs/MDAQu3btQlFRETQaDbKzsx2PqdVqZGZmYvfu3R2e02g0Qq/Xt7sREfk7s8WKD348g9PnGsQOhdysQFOPZT+cgsFsETsUp7VYrLjvo73YcLgSTow9uJ1TyUdoaCiysrLw4osvoqKiAhaLBZ9++il2796NyspKaDQaAEBsbGy758XGxjoeu9jSpUuhVqsdt6SkJBffChGR7/gspxgvbzyOhz/NE/U/eXKvU9UNuO2fu/H65gK8tdX/5jN+ua8M35+oxrPrjqDRJF7y5PScj3//+98QBAH9+/eHSqXC22+/jTvuuANSqWsLZ5YsWQKdTue4lZaWunQeIiJfsv5wJQDgZFUDfiysETkacocqvQF3f7gH2iYzAGDlT0XQ6PxnPmOzyYK3tp4EADxy7WCEqOSixeJ0xjBo0CDs2LEDDQ0NKC0txZ49e2A2mzFw4EDExcUBAKqqqto9p6qqyvHYxVQqFcLCwtrdiIj8WaWuGfuK6xx//9fOMyJGQ+6gN5hx94d7UK5txsCoYIxJCoexxer4MvcHH/5UhOp6IxL7BeLOicmixuJyn4/g4GDEx8ejrq4Omzdvxty5c5Gamoq4uDhs27bNcZxer0dubi6ysrLcEjARka/bmG8rMw+MDoZUAuwsrMEJDeez+StjiwUPfZKHE5p6RIeq8PF9E/Ds7OEAgC/3leJUte/P69E2mfDejtMAgCdmDIVKLhM1HqeTj82bN2PTpk0oKirCli1bcO211yItLQ333nsvJBIJFi9ejJdeegnffPMN8vPzcddddyEhIQHz5s3zQPhERL5nw+EKAMBdE1Nw/SjbqO+KnUVihkQusloFPPHlIew+cx4hKjlW3jMeSRFBuHJABLKHx8IqAG9sLhA7zMt6d/tp1BtaMDw+DHPH9Bc7HOeTD51Oh0WLFiEtLQ133XUXpkyZgs2bN0OhUAAAnnrqKTz66KN48MEHMX78eDQ0NGDTpk2XrJAhIuqNKrTN2F+ihUQCzBodj/unDgQArDtYgep6/5kfQDYvbzyO9YcroZBJ8N6vMjCqv9rx2FPXD4NUAmw6qsH+krouziKucm0zPvr5LIDWmKUScQOCC8nHrbfeitOnT8NoNKKyshL/+Mc/oFZfuBgSiQR//vOfodFoYDAYsHXrVgwdOtStQRMR+aqN+baJpuMHRCA2LADjkvthXHI4TBYr/r27WOToyBkf/HgGK3bZRqzeWDAGU4ZEtXt8aGwo5o9LBAC88t0Jn13V9NaWkzC1WJGZGoFrhkaLHQ4A7u1CRORWG1qTjznp8Y77Hmgd/fg0pxjNIi5vpO5bd7AcL288DgD44w1pmHtFx6WKx64bCqVcij1FtdhecM6bIXbLyap6fLW/DADwh1lpkEjEH/UAmHwQEblNWV0TDrSWXOxzPQBgxsg4JEUEoq7J7Pgi6MssVgF//V8B/rXzDFosVrHDucRPp2rw5OpDAID7Jqc6kseOJIQH4p5JAwAAr246AYvVt0Y/XttUAKsAXD8yDmOT+4kdjgOTDyIiN/mudZVLZmoEYkIvzHOTSSW4b3IqAODDXUWw+tgXlLdtPV6Fd74/hZc2HMcvP8j1qV4ZRyt0eOjfeTBbBMxJj8czs4dfdrTg/64ZhNAAOU5o6rHuYLmXIr28fWdrsfV4FWRSCX5//TCxw2mHyQcRkZusby25zB4df8ljC65MQmiAHGdqGvH9iWpvh+ZTVu+70Exyz9la3PD2TvxQIP7PpLS2Cfes3IsGYwuyBkbir7eO6dbkzPAgJR6+ZhAA4K//Owlji/ilNUEQ8Mp3JwAAt16ZiEHRISJH1B6TDyIiNyitbcKhUi2kEmDmqEubKoao5Phlpq2x0wd9uOlYtd6AH1rnRqy4+0qMTAhDbaMJ967ci6XfHYdZpDJMbaMJd3+4B+fqjUiLC8X7d2U41Qvj3kmpiA1ToVzbjM9ySjwYafdsO16NfcV1UMml+N1031v0weSDiMgN7KtcMlMj25Vc2rpn0gDIpRLkFtUiv0znzfB8xlf7y2GxCshI6Yfpw2Px1cOTcHdWCgDg/R1ncPs/c1CubfZqTM0mCxZ+vBdnahrRPzwQH983AWEBCqfOEaiUYXG27Uv+Hz+cQr3B7IlQu8ViFfDaZtuox31TUhGn9r1WF0w+iIjcwL7KZXb6pSUXu3h1oGMVzL929b3RD0EQHCWXW6+0LVENUMjwp7mjsPzOcQgNkCOvuA43/H0nth6r6upUbtNiseKRVftxoEQLdaACH983HrFhrn1ZL8hIxMDoYNQ2mvDBj+Jd36/3l+FkVQPUgQr85upBosXRFSYfREQ9VFrbhMNlOkgvWuXSEXvTsQ2HK1Hh5d/wxZZXXIczNY0IVMgwOz2h3WOzRsdjw6NTMSZRDV2zGfd/sg8vrT8GU4vnyjCCIOCZtUew7UQ1VHIpPrznSgyOCXX5fHKZFE/NtE3s/GBnkShN5QxmC97cYttvZtG1g6AOdG4Ex1uYfBAR9ZB91CNrUCSiQlRdHjuqvxoTB0agxSrg49auk33Fl62jHrPT4zvcUTU5MgirfzPJsTLoX7uKsOD93SitbfJIPG9tLcQXe0shlQDv3DEWGSkRPT7nzJFxuCIpHM1mC97ZdsoNUTrn37uLUaEzIF4dgLuyBnj99buLyQcRUQ9tOGxf5ZJwmSNt7p9iG/1YtacEDcYWj8XlSxqNLVjf+nO6bXxSp8cp5VI8d+MIfHDXlVAHKnCoVIsb3t6JTUcq3RrPqtwS/H1bIQDgxXmjMGNk1yNW3SWRSPD09WkAgM/3lOBsTaNbztsdumYzlm23JTyPZQ9FgELczeO6wuSDiKgHis83Ir9cB5lUgpkjY7v1nGlpMRgYFYx6Qwu+3Ft6+Sf0AhvyK9FksiA1KhhXply+2dV1I2Kx4bdTMDY5HPWGFvzm0/14ft0Rtyxj3XKsCs+szQcA/HbaYNyZmdLjc7aVNSgS1wyLRotVwBv/896mc+/vOA1tkxlDYkJw8zjxN4/rCpMPIqIecJRcBkYi8jIlFzupVIL7prQ2HfupyOe6YnqCPclacGVit1t8J/YLwpcPZeGhq20jRR/vLsb85T/3aDQhr7gOj36+H1YBuO3KJDx2nWeWoT41Mw0SCbD+cKVXVjZV6Q348CfbPjS/nzkMcplvf737dnRERD7OUXLpYpVLR+aPS0S/IAXK6pqx+ajGE6H5jNPnGrCvuA5SCRwbsXWXQibFklnDsfKe8egXpMCRcj3mvLML6w9XOB3HqeoGLPx4LwxmK6alxeDlX4zy2F4nIxLCMK91P5hXN53wyGu09dbWQhjMVmSk9MN1I7o3AicmJh9ERC4qqmnE0Qp9a8nFuTkDgUoZfjXRNtzf25uOrd5n28/mmmExLi9jvTYtBht/NxXjB/RDg7EFj6w6gP+3Jh8Gc/fKMFV6A+7+cA+0TWaMSQrHP3451uOjA49fNxQKmQS7TtVgZ6HnNp07fa7BMZnXlzaP6wqTDyIiF9kbi00aFImIYKXTz/91VgqUMikOlGiRV1zn7vB8QovF6thMz97bw1Xx6kB8/sBELLp2ECQS4LPcEsxb9hNOn2vo8nl6gxl3f7gH5dpmpEYF48O7r0SQ8tLVNu6WFBHkSDBf3XTCY3v6/PV/BbBYBUxPi8H4AT1fseMNTD6IiFxkX70xx8mSi11MaADmXmFbIfOvXjr6sePkOZyrNyIyWIlpaT0vB8hlUvx+Zho+vncCIoOVOKGpx43v7MLaAx1v6GZsseChT/JwQlOPqBAVPrlvQrfn5rjDI9cORohKjiPlesf8IHc6WKrFxnwNJBLgqdZVNv6AyQcRkQvOnGvA8Uo95FIJZoxwfZmmvenY5qMalJz3TD8LMdnLAb8Y2x9Kufu+cq4aGo3vfjcVEwdGoMlkweL/HMTT/z2MZtOFMozVKuCJLw9h95nzCFbK8NG945EUEeS2GLojMkSFB6+yXeM3/lfg1qZpts3jjgMAbh6biGFxrjdI8zYmH0RELrCXXCYPjkI/F0oudsPiQjF1SBSsAhyrFXqLmgYjth237Va74MrOe3u4KiYsAJ/dPxG/mz4EEgnwn32lmLtsFwqr6gEAL288jvWHKyGXSvDerzMwqr/a7TF0x8IpqYgKUaH4fBP+s9d9m87tOHkOOWdqoZRL8fgM39s8ritMPoiIXLDexVUuHXmgdfTjy32l0DWLtyGZu63ZX44Wq4AxSeEe+61cJpXgseuG4rOFmYgOVeFkVQNu+sdPWPzFAazYZUvm3lgwBlOHRHvk9bsjWCXHb6cPBgD8fVshGt3QWM5qFfDqJlsPkbsmpqB/eGCPz+lNTD6IiJx0qroBJzT1UMgkmNmDkovd1CFRGBYbiiaTBZ/vEX87dncQBMFRcunpRNPumDQ4Cht/OxVTBkeh2WzB2oO2pbhLZqVh3ljxG27dPj4ZKZFBqGkwOZKinvj2cAWOV+oRqpJj0bWD3RChdzH5ICJyUtuSizqo5xt3SSQSLJxqazr20U9nYbZ4bjM1bzlYqkVhdQMCFFLcOKZ7bed7KjrUNqH0yRlDEaKS4/+uGeSYbyE2pVyKJ2bYNp37549ncL7B6PK5TC1WR+fU31wzqEdlP7Ew+SAictKFvVx6XnKxm3tFAqJCVNDoDY7z+7MvW3t73DAqHmEB3ttZVSqV4JFpQ3D4+Rl46nrf6nkxZ3Q8RvUPQ4OxBf/4wfVN51blFqO0thnRoSrcO3mA+wL0IiYfREROKKyqR0GVreTSk1UuF1PJZbg7y9YT4l+7zkAQ/LflerPJgm8P2coenpho2h1Sqe8kHXZS6YVN5z7NKXZpt94GYwve+d6WuCzOHuKVfiWewOSDiMgJ9l4NU4dEu6Xk0tadE1MQoJDiSLkeOWdq3Xpub/ruSCUajC1IjghCZqp/NL3ylqlDojFlcBTMFgF/23LS6ed/8OMZnG80ITUqGLeKlNi5A5MPIiIneKLkYhcRrHTsfbJil/82HfuPfRO5jESfHIEQm330Y+3Bchyr0Hf7eefqjY5mdL+fOQwKH988riv+GzkRkZedrKpHYXUDlDIpsj20eZd9t9utx6sv2zbcF52taURuUS0kEmB+hudXufij0YlqzEmPhyAAr23u/qZz//i+EI0mC8YkqjFrlPtKfmJg8kFE1E32UY+rhkZBHeiZSZSDokOQPTwGAPChG5Zkett/82wTTa8aEo0EP+s94U1PzhgGuVSC7QXnkHPm/GWPLz7fiFWty7Cf9rGJtK5g8kFEPstgtqCmB0sS3UkQBMd8D3c0FuvKwim25aH/zStDbaPJo6/lThar4Eg+/Hk+gjcMiArG7RNsP6NXvjtx2QnGf/3fSZgtAq4aGo1Jg6O8EaJHMfkgIp91/8f7MGnp98jtxm+GnnayqgGnqhuglEuRPdwzJRe7iQMjMKp/GIwtVnyWU+zR13KnnYXnoNEbEB6kQPaIGLHD8Xm/nT4EgQoZDpZqsfmoptPjjpTr8E3r6qGnZg7zVngexeSDiHxSXnEddp2qgclixe//exhNpp63pO6JDYdt//lfNSQaoR7uWyGRSHB/6+jHx7uLYTBbLvMM37C6tbfHvCv6QyWXiRyN74sJDcD9rc3lXttcgJZOmsu9ttnWUGzuFQmi7U/jbkw+iMgntd1ivqS2Ca9+1/2Jee4mCALWt5Zc5ni45GI3Oz0ecWEBqGkwOn7r9WW1jSb875jtt3eWXLrvwasGol+QAmfONWJ1a8mqrZ9P1eDHk+egkEnwxHW9Y9QDYPJBRD6o5HyTYxj62TkjANhGAH4+XSNKPCc09ThzrhFKuRTTh3unnKCQSXFPa/fKFTuLfL7p2NoD5TBbBIzqH4YRCWFih+M3QgMUeGTaEADAW1tPotl0YZRLEAS8ssmWdP9yQjKSI4NEidETmHwQkc/58KciWAXgqqHRWDglFb/MTAYAPPXfw2hww46gzrKvcrlmqOdLLm3dMSEZQUoZCqrqsbNQnMSrO9puIncbRz2c9quJyegfHogqvRErf76wwmljvgaHy3QIVsrw6PQhIkbofkw+iMin6JrNji+yB1rr4X+8YTj6hweirK4ZSzce92o83lzlcjF1oMJRwvhgp+82HTtSrscJTT2UciluGiP+DrL+RiWX4YkZQwEAy7efhrbJBLPlwuZx908diKgQlZghup1TyYfFYsGzzz6L1NRUBAYGYtCgQXjxxRfbDQcKgoDnnnsO8fHxCAwMRHZ2NgoLC90eOBH1Tp/vKUGTyYK0uFBMaV1SGKKS4/Vb0gEAn+WWYJcXRwGOV9ajqKYRKrkU0z28yqUj901OhVQC7CysQYGm3uuv3x32ZPH6kXFubznfV8y9oj/S4kJRb2jB8u2n8Z+9pSiqaURksBIP+MjOvO7kVPLx6quvYvny5fjHP/6B48eP49VXX8Vrr72Gd955x3HMa6+9hrfffhvvvfcecnNzERwcjJkzZ8JgMLg9eCLqXcwWKz766SwAYOGU1HaNlCYNjsKvJ9o2Xnv6q8OoN5i9EtOGfNtkz2uHxSBE5f1NvJIjgzBzpK2b5b98cPTDYLZg3cFyAJxo2hOyNpvOrfz5LN7aatv35dFpg0X5d+dpTiUfP//8M+bOnYvZs2djwIABuOWWWzBjxgzs2bMHgG3U46233sIzzzyDuXPnIj09HZ988gkqKiqwdu1aT8RPRL3IhsOV0OgNiA5V4aYrEi55/A+z0pAUEYhybTP+4oXyiyAIF/Zy8XLJpa37p9p+8113sALV9b71i9zmoxroDS3oHx6ISYMixQ7Hr10zLBoTUiNgarGipsGEpIhA/DIzReywPMKp5GPSpEnYtm0bTp60ZWSHDh3Crl27MGvWLABAUVERNBoNsrOzHc9Rq9XIzMzE7t27Ozyn0WiEXq9vdyOivkcQBPyrdTO1u7NSOuwTEayS4/VbxgAAPt9Tih0nz3k0pqMVepw934QAhRTT0sRrmpWR0g9jk8Nhsljx792+1XTMXnK5hZvI9ZhEIsEfZqU5/v7kjGFQynvn1Eyn3tUf/vAH3H777UhLS4NCocDYsWOxePFi3HnnnQAAjca2NC42tn1dNDY21vHYxZYuXQq1Wu24JSVx2I6oL8o5U4sj5XoEKKS4s4vf9iYOjMQ9kwYAAJ7+72Homj1XfrFPNL12WAyCRR76fqB19OPTnOJ2yzHFVFrbhJ9OnYdEAiy4kpvIucO45H54ZvZwPHzNINyYfunoX2/hVPLx5Zdf4rPPPsOqVauwf/9+fPzxx3jjjTfw8ccfuxzAkiVLoNPpHLfS0lKXz0VE/su+hfwtGYnoF6zs8tinrh+GAZFB0OgNeGn9MY/E4yslF7sZI2KR2C8QdU1mfLX/0mZUYrDv4zJ5UBQS+/WeHhRiu3/qQDx9fVqvHklyKvn4/e9/7xj9GD16NH7961/jsccew9KlSwEAcXG2SVFVVVXtnldVVeV47GIqlQphYWHtbkTUt5w+14Ctx6shkdhWd1xOkFKO1xeMgUQCrM4rww8nqt0e05FyPUpqxS+52MllUsfP5sNdRbBaxW06Zm2ziRxHPchZTiUfTU1NkErbP0Umk8FqtfWjT01NRVxcHLZt2+Z4XK/XIzc3F1lZWW4Il4h6I/vW8dPTYjEwOqRbzxk/IMLxZfyHrw9D1+Te8sv61lUu09NiEaT0jdUGt45PQmiAHGdqGvG9BxIuZ/x8+jzKtc0IC5A7VuMQdZdTyceNN96Il19+GRs2bMDZs2exZs0a/O1vf8MvfvELALbJMosXL8ZLL72Eb775Bvn5+bjrrruQkJCAefPmeSJ+IvJztY0mx2/Q9k22uuvJGcMwMCoYVXoj/rT+qNti8rWSi12ISo5fTrB1exW76dh/Wieazr2iPwIU3ESOnONU8vHOO+/glltuwf/93/9h+PDhePLJJ/HQQw/hxRdfdBzz1FNP4dFHH8WDDz6I8ePHo6GhAZs2bUJAQIDbgyci//dZTjGMLVaM7q9GZmqEU88NVMrw+oIxkEqAr/eXY8uxqss/qRvyy3Uoq2tGoEKGa4eJX3Jp6+5JAyCXSpBbVIv8Mp0oMWibTI69d9jbg1zhVPIRGhqKt956C8XFxWhubsbp06fx0ksvQam8MDlMIpHgz3/+MzQaDQwGA7Zu3YqhQ4e6PXAi8n8GswUfty4dvX9q+6Zi3ZWR0s+xEuSPa/KhbTL1OC77qMf04TEIVPrWb/UJ4YGO0Rj70mRv++ZQBUwtVgyPD8Oo/pynR87rnQuIicgvfHOoAjUNRsSrA3DDaNfLG49dNxSDooNxrt6IF77pWflFEASsb00+5vhQyaWt+6fYkq31hytRVtfk9de39/a49cpElxJGIiYfRCQKQRCwYqdtouk9kwZAIXP9v6MAhQxvtJZf1h6swKYjHfcV6o5DZTqUa5sRpJThGh8rudiNTrSVqCxWAQve2419Z2u99tpHK3Q4Uq6HUibFvCu4iRy5hskHEYliZ2ENCqrqEayU4fbWSZQ9MTa5Hx66ehAA4Jm1+ahtdK38suFw6yqX4bE+PZHyLzePRmpUMCp1Btz2zxy8u/2UV5bfrt5nmxx83YjYy/ZjIeoMkw8iEoV9tcat45OgDnTPTqiLs4dgaGwIahpMeG7dEaef326VSw/KQN4wKDoE3z46BXOvSIDFKuC1TQW456O9qGkweuw1jS0WrG3dRI69PagnmHwQkdcVaOqxs7AG0m42FesuldxWfpFJJVh/uBIbW9ujd9eBUi0qdAYEK2W4Zli02+LylBCVHG/ddgVeuXk0VHIpfjx5Djf8fSdyzpz3yOttOVYFbZMZ8eoATB3i+z8f8l1MPojI6+xbw18/Kg5JEe5ty52eGI6HHeWXI06NBNhHPbJH+HbJpS2JRILbJyRj3SOTMSg6GNX1Rvzygxy8va0QFjeXYb5sLbnckpEIWS9u/U2ex+SDiLyqut6AdQdt8yrsW8W726PTByMtLhS1jSY8u/YIBOHyX8JWq4Dv8v2j5NKRtLgwfPvoFMwflwirAPxty0nc9WEuqusNbjl/hbYZOwttuwjfksGSC/UMkw8i8qp/7y6GyWLFuORwjEvu55HXsJdf5FIJvjuicSyd7Yq95BKikuOqof5ZUghSyvHXW8fgjQVjEKiQ4adT53HD33fhp1M1PT73V3llEARg4sAIpEQGuyFa6suYfBCR1zSbLPg0x9ZU7AEPjXrYjeqvxqJrBwMAnl135LIjAPaSy3V+VHLpzC0ZifjmkckYFhuKmgYjfrUiF3/bctLlMozVKmB1awt8djQld2DyQURe89X+MtQ1mZEUEYgZXtiMbNG1gzE8PgzaJjOeWdN5+cVqFRyTU/2x5NKRIbGhWLtoMm4fnwRBAN7eVohffpCDKr3zZZicovMoqW1CiEqOWaN6x8+HxMXkg4i8wmoVHLvX3jc51SsTFpVyKf7aWn7537EqfHOoosPj9pfUQaM3IFQlx9ShUR6Py1sClTK8Mj8df7/9CgQrZcgtqsUNf9+JHSfPOXUee2+PG8ck+Fy7efJPTD6IyCu+P1GNMzWNCA2QY4EXh+5HJITht9OHAACeW3cU1R385r++TclFJe99X65zr+iPbx+dguHxYTjfaMLdH+7Bq5tOoMVivexz9QazY1TotvEsuZB7MPkgIq+wNxX7ZWYyQlRyr772w9cMwqj+YdA1m/HHNfntyi/tSi4+upeLOwyMDsGa/5uEX020dZNdvv00bv9nDiq0zV0+79tDFTC2WDE0NgRjEtXeCJX6ACYfRORx+WU65BbVQi6V4J5JA7z++gqZFH9dcAUUMgm2Hq/G1/vLHY/tK65Ddb0RoQFyTBnSe0ouHQlQyPDSvNH4xy/HIkQlx77iOtzw9k58f6Kq0+fYe3vcemUSN5Ejt2HyQUQeZ9/6fU56POLVgaLEMCwuFIuzhwIAXvj2KDQ6W/nFvpfLjBFxvbLk0pE56QnY8NspGN1fDW2TGfd9tA9/2Xgc5ovKMAWaehwq1UIulWDeWG4iR+7D5IOIPKpC2+xYxuqppmLd9dBVA5GeqEa9oQVLvj4Mi1XAd6074M7pxSWXjqREBuO/D2c5RqL++eMZLHhvN8rqmhzHfLmvFAAwfXgMokJUYoRJvRSTDyLyqI9/PosWq4CJAyMwqr+4cwbkMtvqF6VMih8KzuEPXx1Gdb0RYQFyTB7cu0suHVHJZXjhppF471cZCAuQ42CpFjf8fSc2H9XA1GLFmgO28hR7e5C7MfkgIo9pMLZg1Z4SAMD9U8Qd9bAbEhuKx2fYyi/2xlkzR8ZBKe+7/x1ePyoOG347FWOSwqE3tOChf+fhnpV7UNtoQkyoClf7acdX8l1999NGRB735d5S1BtaMDAqGNPSYsQOx+GBqQMxNjnc8ffevMqlu5IigrD6oSw8MNW2y/DPp207487PSIRcxq8Kci/+iyIij7BYBXz4U2tTsSmpkPrQLqgyqQRvLBiDYKUM/cMD+2TJpSNKuRT/b/YI/OuuKxEepECwUobbWHIhD/DuYnsi6jM2H9WgrK4Z/YIUmD/O93ZBHRQdgu+fvAYKmRQK/mbfTvaIWPz09DQ0GFsQGxYgdjjUCzH5ICKP+FdrU7FfTUzx2Zbc/GLtXLBKjmAvN4OjvoPpPhG5XV5xHfaXaKGUSfHrrBSxwyEiH8Pkg4jcbkVrU7G5VyQgJpSjC0TUHpMPInKr0tombGpt3CV2UzEi8k1MPojIrT78qQhWAZg6JArD4kLFDoeIfBCTDyJyG12zGV/utbXkfoCjHkTUCSYfROQ2X+wpQaPJgmGxoZjay3eIJSLXMfkgIrcwW6z46OezAICFU1O5/ToRdYrJBxG5xcb8SlTqDIgKUWHuFQlih0NEPozJBxH1mCAI+KC1qdjdWSlQyX2zqRgR+QYmH0TUY7lFtThSrkeAQoo7J7KpGBF1jckHEfWYvZX6/HGJiAhWihwNEfk6p5KPAQMGQCKRXHJbtGgRAMBgMGDRokWIjIxESEgI5s+fj6qqKo8ETkS+4cy5Bmw9Xg0AWDglVeRoiMgfOJV87N27F5WVlY7bli1bAAALFiwAADz22GP49ttvsXr1auzYsQMVFRW4+eab3R81EfmMFbuKAADZw2MwMDpE5GiIyB84tWVhdHR0u7+/8sorGDRoEK6++mrodDqsWLECq1atwrRp0wAAK1euxPDhw5GTk4OJEye6L2qiizQYWxDCHTi9rrbRhK/2lwFgK3Ui6j6X53yYTCZ8+umnuO+++yCRSJCXlwez2Yzs7GzHMWlpaUhOTsbu3bs7PY/RaIRer293I3LGZ7nFGP3CZnz0U5HYofQ5/9lbCoPZilH9w5CZGiF2OETkJ1xOPtauXQutVot77rkHAKDRaKBUKhEeHt7uuNjYWGg0mk7Ps3TpUqjVasctKSnJ1ZCoDzpzrgEvrj8GQQA2Hun83xl5xqajtp/5nZkpbCpGRN3mcvKxYsUKzJo1CwkJPWsmtGTJEuh0OsettLS0R+ejvsNiFfD7/x6GwWwFABwu08JssYocVd9RXW/AoVItAGB6Woy4wRCRX3GpSF5cXIytW7fi66+/dtwXFxcHk8kErVbbbvSjqqoKcXFxnZ5LpVJBpVK5Egb1cR/uKkJecR1CVHJIANQbW3C8Uo/0xHCxQ+sTtp84BwBIT1QjJixA5GiIyJ+4NPKxcuVKxMTEYPbs2Y77MjIyoFAosG3bNsd9BQUFKCkpQVZWVs8jJWrjVHUDXv9fAQDgmdnDkTGgHwBgf3GdmGH1KdtO2JbRT0+LFTkSIvI3TicfVqsVK1euxN133w25/MLAiVqtxsKFC/H444/jhx9+QF5eHu69915kZWVxpQu5lcUq4MnVh2BqseKqodG4bXwSxiW3Jh8lWnGD6yMMZgt2FtYAAKYPZ8mFiJzjdNll69atKCkpwX333XfJY2+++SakUinmz58Po9GImTNn4t1333VLoER2H+w8g4OlWoQGyPHq/NGQSCSO5COPIx9ekVtUiyaTBbFhKoxMCBM7HCLyM04nHzNmzIAgCB0+FhAQgGXLlmHZsmU9DoyoI4VV9fjb/04CAJ6bMwLx6kAAwJgkNaQSoFzbjGq9gXMQPOz747aSy7S0WK5yISKncW8X8hstFiueWH0IJosV09JicEtGouOx0AAFhsaGAgD2l/jX6IdGZ0CFtlnsMLpNEARHO3WuciEiVzD5IL/x/o9ncLhMh7AAOf7yi9GX/MY9LsX/5n0YzBbMeWcXbnh7J3TNZrHD6ZaTVQ0o1zZDJZdi8uAoscMhIj/E5IP8wgmNHm9ttZVbXrhpJOLUl5ZV/HHex8FSLWoajNA2mbH1mH9swmhf5TJ5cBQClTKRoyEif8Tkg3ye2WLFk6sPwWwRkD08Fr8Y27/D4zJaRz7yy3UwtfhHs7E9RbWOP2/IrxQxku7b1lpymcaSCxG5iMkH+bzl20/jSLke4UEK/OXmUZ1OcBwQGYSIYCVMLVYcrdB5OUrX5Badd/x5Z+E56Jp8u/RS22hyzKlh8kFErmLyQT7tWIUe73xfCAD4000jERPa+SoWiUSCsUnhAPxj3oepxeooEYUHKWC2CPjfMd/en2Z7QTUEARgRH4aE8ECxwyEiP8Xkg3yWqeVCuWXmyFjcNOby+wg5Jp36wbyP/HIdDGYrwoMUuGfSAAC+X3qxl1zYWIyIeoLJB/msZT+cwrFKPfoFKfDSvEtXt3TkQqdT308+7PM9JgyIwJx0W2K1q7AG2iaTmGF1ytRixY8nbfu5sORCRD3B5IN80pFyHZb9cAoA8OK8UYgO7d7mg2OS1JBJJajUGVCp8+3eGXta53tMSI3A4JgQpMWFosUq4H9HfXPVy76ztag3tiAqRIkx3LyPiHqAyQf5HHu5pcUq4IbRcY5Rge4IUsqRFtfabKxY66EIe85iFbDvrG10ZuLASADAnPR4AL5berE3Frt2WAykUnY1JSLXMfkgn/PO94U4oalHZLASL84d5fTz/aHfx/FKPeqNLQhVyTE83rY3yg2jbcnHT6dqUNfoW6UXQRAu7GLL+R5E1ENMPsinHC7T4t3tpwEAL80bhciQ7pVb2spI8f15HzlnbCWXKwf0g6x1FGFgdAhGxIfZSi8+turl9LlGFJ9vglImxZQh0WKHQ0R+jskH+QxjiwVPfHkIFquAG8ckYFbrSICz7CMfRyt0MJgt7gzRbRyTTVMj290/u7X0sv6wb5Vevm8d9cgcGIEQldP7URIRtcPkg3zGW1sLUVjdgKgQJf5000iXz5MUEYioECXMFsEnm41ZrQL2nLUlH5kDI9o9Nrs14fr59HnU+lDpxb7ENnt4rMiREFFvwOSDfMLBUi3e32Evt4xGRLDS5XNJJBKfnvdRWN0AbZMZgQoZRvdXt3tsQFQwRiaEwWIVsPmob5RedE1m7CtmV1Mich8mHyQ6g9mCJ748CKsAzLsiAdePiuvxOS80G9P2+FzuZm+pnpHSDwrZpR9Be+llg4+UXrafrIbFKmBobAiSIoLEDoeIegEmHyS6N7ecxOlzjYgOVeGFHpRb2mrbbEwQBLec011yHfM9Ijp8/ELppQbnG4xei6sz35+wdzVlyYWI3IPJB4kqr7gO/9x5BgCw9BejER7kermlrfRENeRSCarrjSjX+k6zMUEQkHumdb5HJ8lHSmQwRvdXwyoAm0QuvbRYrNheYOtqOp0lFyJyEyYfJBqD2YLfrz4EQQBuHtcf2SPc95t1gEKGkQm2/hm+NO+jqKYRNQ1GKOVSjGndBK8j9tLLRpEbjuUV10HXbEa/IAXGto4mERH1FJMPEs0bmwtwpqYRsWEqPD/HPeWWtuxflgd8aIdbe8nliqRwBChknR5nL73sPn0eNSKWXuwll2uHxTj6kRAR9RSTDxLF3rO1WPFTEQDglZvToQ5SuP01xvlgszF7f4/OSi52SRFBGJPYWno5Il7pZetxW3+PaexqSkRuxOSDvK7J1OIotyzISMS1HppLMC45HABwrEKPZpNvNBvbc5nJpm2JverlbE0jTp9rhFwqwVVD2dWUiNyHyQd53WubCnD2fBPi1QF4Zs4Ij71O//BAxIap0GIVcLhM67HX6a7S2iaUa5shl0ocLeC7Yt/rJbfoPKrrDZ4O7xL2ksuE1AiEBbh/ZIqI+i4mH+RVOWfO46OfzwIAXpmfDnWg577U2jYb2+8D8z7sox6j+qsRpLx8i/LEfkEYkxQOqwBsFqH0Yt9Ijo3FiMjdmHyQ1zQaW/DUfw8DAO6YkISrvTCU37bfh9jszcUubqnelTmjxdnrpd5gdiwJZn8PInI3Jh/kNa9uOoGS2ib0Dw/EH28Y7pXXHJcSDgA44APNxro72bStWaNt3V73nK1Ftd57pZedhTVosQoYGB2M1Khgr70uEfUNTD7IK34+VYNPdhcDAF6dn45QL80hGJmghlImRU2DCSW1TV55zY5U6Q04e74JEglw5YDuJx+J/YIwNjkcggB858XSi32VCxuLEZEnMPkgj2swtuCpr2zlljszkzFlSJTXXjtAIcPI/rZmY2KWXuz9PUbEhzk9edPe88Nbq14sVsHR1XRaGksuROR+TD7I45ZuPI6yumb0Dw/EEi+VW9pyzPsQcZO53DOt8z1SI51+rn3Vy97iWlR5ofRysFSL2kYTwgLkuHIAu5oSkfsx+SCP2ll4Dp/llgAAXl+QjhDV5Vd5uJsvTDp1pr/HxRLCA5GR0s9WevFCu/VtrSWXq4fFdLjrLhFRT/F/FvKYeoMZT7eubrkrKwWTBnmv3NKWfdLp8Uo9Go0tXn/98w1GFFY3AHAt+QDalF68kHw4drHlfA8i8hAmH+QxL284jgqdAckRQXj6+jTR4ohXByJBHQCrABwSodnY3rO2UY+hsSGICHZt115H6eVsHTQ6z5VeyuqacEJTD6kEuGYYu5oSkWcw+SCP2HHyHL7YWwoAeP2WdASLUG5pa2yKeJvM5ZyxL7F1fr6HXZw6AFe2vgdP7nRrH/W4MiUC4UGuJUpERJfjdPJRXl6OX/3qV4iMjERgYCBGjx6Nffv2OR4XBAHPPfcc4uPjERgYiOzsbBQWFro1aPJtuuYL5ZZ7Jw9A5kDXv3Td5cKkU+/P++jJfI+2HHu9eDD52Ha8teTCjeSIyIOcSj7q6uowefJkKBQKfPfddzh27Bj++te/ol+/CzPiX3vtNbz99tt47733kJubi+DgYMycORMGg/f3piBxvLT+GDR6AwZEBuGpmeKVW9rKaLPDrTebjemazTiu0QNwrrlYR2aNiodEAuQV16FC2+yO8NppNLZg92nbqhwmH0TkSU4lH6+++iqSkpKwcuVKTJgwAampqZgxYwYGDRoEwDbq8dZbb+GZZ57B3LlzkZ6ejk8++QQVFRVYu3atJ+InH/P9iSqsziuDRAK8vmAMApUysUMCYOuvoZJLUddkRlFNo9ded9/ZWggCkBoVjJiwgB6dK04dgPEptgTGE6WXXadqYLJYkRwRhEHRIW4/PxGRnVPJxzfffIMrr7wSCxYsQExMDMaOHYsPPvjA8XhRURE0Gg2ys7Md96nVamRmZmL37t0dntNoNEKv17e7kX/SNZmx5Ot8AMDCyakY70QnT09TyqUY3V8NwLubzDlKLm76WXiy9PJ9m5KLRCJx+/mJiOycSj7OnDmD5cuXY8iQIdi8eTMefvhh/Pa3v8XHH38MANBobO2fY2Pbd0WMjY11PHaxpUuXQq1WO25JSUmuvA/yAX9afxRVeiMGRgXjyZnDxA7nEuNSvN/vI8e+n4sTm8l1ZdaoOEgktomz5W4svVitArY5ltiyqykReZZTyYfVasW4cePwl7/8BWPHjsWDDz6IBx54AO+9957LASxZsgQ6nc5xKy0tdflcJJ4tx6rw9f5ySCXAG7eOQYDCN8otbXl70mmjsQVHynUAej7Z1C4mLMAxiuLOhmP55TrUNBgRopK7LVYios44lXzEx8djxIgR7e4bPnw4SkpsHSzj4mw7cFZVVbU7pqqqyvHYxVQqFcLCwtrdyL/UNZrwxzW2cssDUwc6vuR9jb3ZWEFVPeoNZo+/Xl5xHSxWAf3DA5HYL8ht553TWnpZ78a9XuyjHlcNjYJSzhX4RORZTv0vM3nyZBQUFLS77+TJk0hJSQEApKamIi4uDtu2bXM8rtfrkZubi6ysLDeES77ohW+P4ly9EYOig/HYdUPFDqdTMaEBSOwXCEEADpXqPP569vkePV3lcrGZo+Igldj2YCl100699pbq3EiOiLzBqeTjscceQ05ODv7yl7/g1KlTWLVqFf75z39i0aJFAACJRILFixfjpZdewjfffIP8/HzcddddSEhIwLx58zwRP4ls0xEN1h2sgFQC/PXWK3yy3NJWhhfnfeQWtW4m56b5HnYxoQGO0sh3R3o++qHRGXC0Qg8Ju5oSkZc4lXyMHz8ea9asweeff45Ro0bhxRdfxFtvvYU777zTccxTTz2FRx99FA8++CDGjx+PhoYGbNq0CQEBPVtmSL6nttGEZ9bayi2/uXoQrkgKFzegbrCXhPI8PO/DYLY4Rlcm9KCzaWdmpycAADa4ofRi72o6NikcUSGqHp+PiOhynO55PWfOHMyZM6fTxyUSCf785z/jz3/+c48CI9/33LojqGkwYWhsCH6XPUTscLrFnnwcKKmD1SpAKvXMktIDJVqYLFbEhKowINJ98z3srh8Zh+fXHcGhMh1Ka5uQFOH6a9hLLtOHs+RCRN7BmWXkkg2HK7H+cCVkUgn+uuAKqOS+XW6xS4sPRYBCCr2hBWdqGjz2Om1bqnuiZ0Z0qAoTW9vW96TnR7PJgl2nagAA07iLLRF5CZMPclpNgxHPrjsCAPi/awZhdKJa5Ii6TyGTYkxiOABgf7HWY69zYb6H5/a1cTQc60HpZfeZGhhbrOgfHoi0uFB3hUZE1CUmH+QUQRDw7NojqG00IS0uFI9O849yS1v2ZmOemvdharE6JrS6e6VLW9ePtK16yS/XoeS8a6tetrZ2NZ2Wxq6mROQ9TD7IKesPV+K7IxrIpRK8sWCMX/aEcDQb89CKl/xyHQxmKyKClRgS47k9UiJDVJg0KAqAa6UXQRAcLdWncSM5IvIi//vmINFU1xsc5ZZHpg3GqP7+U25pa2xyOACgsLoBumb3Nxuzl1zGD+jn8dGEC3u9VDj93GOVemj0BgQqZMjyYHmIiOhiTD6oWwRBwP9bcwTaJjNGxIdh0bWDxQ7JZVEhF1agHCzVuv38F5qLef4LfebIOMikEhwp1+Osk7v1bmsd9ZgyJMrn+7MQUe/C5IO6Zd3BCmw5VgWFzFZuUcj8+5+Op/p9tFis2HfWdk5v7JESEazEpEGurXq5sJEcSy5E5F3+/Q1CXlGtN+D5b44CAH47bQhGJPj//jtjUy70+3Cn45X1aDC2IDRAjuHx3vk5zR7t/KqXc/VGHGod9eESWyLyNiYf1CVBEPDHNfnQNZsxur8av7lmkNghucW41nkfB0u0sFgFt533wnyPCMg81MDsYvbSy7FKPc6c617vkh9aRz3SE9WICWP3YSLyLiYf1KWv95dj6/FqKGXSXlFusRsWG4pgpQz1xhYUVte77by5bZqLeUu/YCUmD7atetnYzdLLthOtXU25kRwRiaB3fJOQR2h0Brzwra3c8rvsIRjWi5pQyWVSjGndi8ZdzcasVgF7z3pmJ9vLmdNaelnfjdKLwWzBzkJbV9PpXGJLRCJg8kEdEgQBS74+jHpDC8YkqvHQVQPFDsnt3N3v42R1PbRNZgQpZV5fhjxjZCzkUglOaOpxqrrr0ktuUS2aTBbEhqkwshfM3yEi/8Pkgzq0Oq8MPxScg1JuK7fIe0m5pa1xKeEA3Jd85J6xjXpkpPTzenkqPEiJKUO6V3r5vnUjuWlpsexqSkSi6H3fKNRjFdpmvPjtMQDAE9cNxZDY3lNuaWtskm3k48y5RtQ1mnp8PsdmcgO8W3Kxs6966Sr5EATB0VKdS2yJSCxMPqgdQRDw9FeHUW9swdjkcNw/tfeVW+z6BSsxMDoYAHCgtGejH4IgeGUzua7MGBEHhcxeeul4Eu3JqgaUa5uhkksdk1SJiLyNyQe188XeUuwsrIGqtdzireWiYnHM++jhpNMzNY2oaTBBKZciXaRdftVBCkxpTSg2HNZ0eIx9lcvkwVEIVLKrKRGJg8kHOZTVNeHlDccBAL+fOQyDoj23KZqvcNekU3vJZWxSuKitymenJwDofK+XbW12sSUiEguTDwJwodzSYGzBlSn9cO/kVLFD8oqM1k6nB0u1aLFYXT5P7pnWkouXl9he7LoRsVDIJDhZ1YCTVe1LL7WNJkeSxeSDiMTE5INgtQr4184i/HTqPAIUUrzeB8otdkNiQhCqkqPJZEFBlWvNxmzzPVr7e4i8O6w6UIGrhkQDuLTd+vaCaggCMCI+DAnhgWKER0QEgMlHn1ZU04g3Nhdg6ms/4OWNtnLL09enITUqWOTIvEcqleCK1lbr+0u0Lp2jrK4ZlToD5FIJxraeS0yz01v3esmvhCBcaB1vL7mwsRgRiU0udgDkXbpmMzYcrsRX+8va7egaGiDHLzOTcXfWAPGCE8nY5H7YWViDA8V1+PXEFKefbx/1SE9UI0gp/kcqe0QslDIpTlU34GRVA4bFhcLUYsWPJ88BYMmFiMQn/v+U5HEWq4Cdhefw1f5y/O+oBsYW29wGqQS4amg05o9LxHUjYkWdKCkm+7yPPBcnndrne0xIFbfkYhcWoMBVQ6Ox9XgVNhyuwLC4Ydh3thb1xhZEhSgxJjFc7BCJqI9j8tGLFVbV47/7y7D2QDmq9EbH/UNiQnBLRiLmje2PWO5oiita93gpPt+EmgYjokJUTj1/j0j7uXRlTnq8LfnIr8Rj1w11NBa7dlgMpH1kPg8R+S4mH71MXaMJ3x6uwFd5ZThUpnPcHx6kwNwxCZifkYjR/dVsq92GOlCBITEhKKxuwIESLa4b0f2dXjU6A4rPN0EqATIG9PNglM6ZPjwGSrkUp8814oSm/sIutpzvQUQ+gMlHL2C2WLGj4By+2l+GrcerYLbYJhnKpRJcMywGt2T0x7VpMVDJ+2ZZpTsyUvqhsLoB+0vqnEo+7F1NRySEISxA4anwnBYaoMDVQ6Ox5VgV/vH9KRSfb4JSJsWU1pUwRERiYvLhx45V6PHV/jKsO1iOmoYLe5OMiA/D/IxEzL0iwekSQl81Lrkfvthb2m4Sbnc4ltj6yHyPtuakx2PLMVvpBQAyB0YgRMWPPBGJj/8T+ZmaBiPWHazAf/PKcLxS77g/MliJeWP7Y/64RIzgNulOs+9we7hMC7PF2u1daR2byfnQfA+76cNjoZRLYWqdYMyN5IjIVzD58BOltU3407fHsL2gGi1WW1lFIZMge3gs5o9LxNXDor2+jXtvMjAqBGEBcugNLThRWY/R3difpabBiFPVDQDE28m2KyEqOa4dFo3NR+3zPbpfTiIi8iQmH37i9/89hJwzF/pJ3JKRiBvTE9AvWClyZL2DVCrBuJR+2F5wDvtL6rqVfOxtHfUYFhvqs9fhpjH9sfloFdLiQpEUESR2OEREAJh8+IVqvcExt2DtosmOpaHkXuOSbclHXnEd7p404LLHX2ip7nujHnY3jI7DGwvG4IokcXbaJSLqCJMPP/DdEQ0EARibHM7Ew4Oc3eE214fne9hJJBLckpEodhhERO1wkoAfsG8QNnt0vMiR9G5jktSQSGx7tVTXG7o8VtdkxgmNbcKvLycfRES+iMmHj9PoDNhbbPsN+wYmHx4VGqDAsNhQAMD+Ym2Xx+49WwtBAAZGBSMmlF1iiYic4VTy8cILL0AikbS7paWlOR43GAxYtGgRIiMjERISgvnz56OqqsrtQfcl3x2phCDYmmBxG3TPG5fSvdKLo6W6D8/3ICLyVU6PfIwcORKVlZWO265duxyPPfbYY/j222+xevVq7NixAxUVFbj55pvdGnBfszGfJRdvcsz7uEyzsQubyTH5ICJyltMTTuVyOeLi4i65X6fTYcWKFVi1ahWmTZsGAFi5ciWGDx+OnJwcTJw4sefR9jEanQF7z9q+BFly8Y5xyeEAgMPlOpharFDKL83PG4wtOFJhm+/hi51NiYh8ndMjH4WFhUhISMDAgQNx5513oqSkBACQl5cHs9mM7Oxsx7FpaWlITk7G7t27Oz2f0WiEXq9vdyMb+6jH+AH9EKfmvAJvSI0KRr8gBUwtVhyr7PjfYl5xHSxWAYn9AlkKIyJygVPJR2ZmJj766CNs2rQJy5cvR1FREaZOnYr6+npoNBoolUqEh4e3e05sbCw0Gk2n51y6dCnUarXjlpSU5NIb6Y3se3Jw1MN7JBKJo/TS2T4ve4pYciEi6gmnko9Zs2ZhwYIFSE9Px8yZM7Fx40ZotVp8+eWXLgewZMkS6HQ6x620tNTlc/UmFdpm5BXXQSIBZo1i8uFNl5t0mtvaaXYiSy5ERC7p0VLb8PBwDB06FKdOnUJcXBxMJhO0Wm27Y6qqqjqcI2KnUqkQFhbW7kZtSi4pESy5eNnY1nkfBzoY+TCYLThUpgXAkQ8iIlf1KPloaGjA6dOnER8fj4yMDCgUCmzbts3xeEFBAUpKSpCVldXjQPsae8lldjpHPbxtTGI4ZFIJKnQGVOqa2z22v6QOZouA2DAVUiK5VwoRkSucSj6efPJJ7NixA2fPnsXPP/+MX/ziF5DJZLjjjjugVquxcOFCPP744/jhhx+Ql5eHe++9F1lZWVzp4qRybTMOlGhbSy6djxqRZwSr5EiL67jZ2B5HS/VISCQSb4dGRNQrOLXUtqysDHfccQfOnz+P6OhoTJkyBTk5OYiOjgYAvPnmm5BKpZg/fz6MRiNmzpyJd9991yOB92bftY56TBgQgZgwllzEMC65H45W6LG/pK7d6JM9+chkyYWIyGVOJR9ffPFFl48HBARg2bJlWLZsWY+C6uvWt+7lMoclF9GMSwnHv3OK2006NbVYHX9n8kFE5Dru7eJjSmubcLBUC6kEmMmSi2gykm3JxdFyPQxmCwAgv1wLg9mKiGAlBseEiBkeEZFfY/LhY747Yhv1yEyN5IZlIkqKCERUiBImixVHK3QAgJzWJbYTBkRwvgcRUQ8w+fAxGw5zlYsvkEgkGOvY50ULoM18D24mR0TUI0w+fEhpbRMOlekglQDXs+QiOscmcyV1aLFYse+sfaULkw8iop5g8uFD7L09Jg6MRFSISuRoKKNNp9OjFXo0miwIC5AjLY6N8IiIeoLJhw9hycW3pCeqIZdKUKU3Ys2BcgDA+AERkEk534OIqCeYfPiIkvNNyC9vLbmMZMnFFwQoZBiRYBvl+GKvbfdmzvcgIuo5Jh8+wl5ymTQoCpEsufgM+7wPg9kKwNbZlIiIeobJh4/YkF8BgCUXX2Pf4RYAgpQyjEzgfA8iop5i8uEDztY04ki5HjKpBDNZcvEp41p3uAVsE1AVMn5kiIh6iv+T+oALJZdIRAQrRY6G2uofHoiYUFsZjC3ViYjcg8mHD9jAvVx8lkQiwS8zkxEdqsKNYxLEDoeIqFdwamM5cr8z5xpwrNJWcpkxgiUXX7Q4eygWZw8VOwwiol6DIx8i29hacpk8OAr9WHIhIqI+gMmHyNbbSy6jWXIhIqK+gcmHiE6fa8AJTT3kUglmjIwVOxwiIiKvYPIhoo2tox5ThkQhPIglFyIi6huYfIjIvsR2NksuRETUhzD5EMmp6nqc0NRDIeMqFyIi6luYfIhkw2ENAGDqkGiogxQiR0NEROQ9TD5E4tjLhSUXIiLqY5h8iOBkVT1OVjVAKZMiewRXuRARUd/C5EME9nbqU4dEQR3IkgsREfUtTD5E4Fjlwr1ciIioD2Ly4WUnq+pxqpolFyIi6ruYfHiZvZ36VUOjERbAkgsREfU9TD68SBAEbDhsW+UyhyUXIiLqo5h8eFFBVT1On2uEUi7F9OExYodDREQkCiYfXmRf5XLN0GiEsuRCRER9FJMPL7GVXLjKhYiIiMmHlxyvrMeZmkao5FJMH85VLkRE1Hcx+fASezv1a4fFIEQlFzkaIiIi8TD58IK2JZcbWHIhIqI+rkfJxyuvvAKJRILFixc77jMYDFi0aBEiIyMREhKC+fPno6qqqqdx+rVjlXqcPd9kK7mkcZULERH1bS4nH3v37sX777+P9PT0dvc/9thj+Pbbb7F69Wrs2LEDFRUVuPnmm3scqD+zj3pMS4tBMEsuRETUx7mUfDQ0NODOO+/EBx98gH79+jnu1+l0WLFiBf72t79h2rRpyMjIwMqVK/Hzzz8jJyfHbUH7E0EQuJcLERFRGy4lH4sWLcLs2bORnZ3d7v68vDyYzeZ296elpSE5ORm7d+/uWaR+6miFHsXnmxCgkGIaSy5ERERwugbwxRdfYP/+/di7d+8lj2k0GiiVSoSHh7e7PzY2FhqNpsPzGY1GGI1Gx9/1er2zIfk0+14u09NiEaRkyYWIiMipkY/S0lL87ne/w2effYaAgAC3BLB06VKo1WrHLSkpyS3n9QW2kottiS1LLkRERDZOJR95eXmorq7GuHHjIJfLIZfLsWPHDrz99tuQy+WIjY2FyWSCVqtt97yqqirExcV1eM4lS5ZAp9M5bqWlpS6/GV+TX65DaW0zAhUyXDuMJRciIiLAybLL9OnTkZ+f3+6+e++9F2lpaXj66aeRlJQEhUKBbdu2Yf78+QCAgoIClJSUICsrq8NzqlQqqFQqF8P3bfZVLtOHxyBQKRM5GiIiIt/gVPIRGhqKUaNGtbsvODgYkZGRjvsXLlyIxx9/HBEREQgLC8Ojjz6KrKwsTJw40X1R+4G2q1zmsORCRETk4PYZkG+++SakUinmz58Po9GImTNn4t1333X3y/i8w2U6lNU1I0gpwzUsuRARETn0OPnYvn17u78HBARg2bJlWLZsWU9P7dfsox7Th8ciQMGSCxERkR33dvGAtnu5zB7NkgsREVFbTD484GCpFuXaZgQrZbhmWLTY4RAREfkUJh8eYB/1yB7BkgsREdHFmHy4mdUqYGM+Sy5ERESdYfLhZgdKtajQGRCikuOqoSy5EBERXYzJh5vZSy7XseRCRETUISYfbmS1CvjuCEsuREREXWHy4UYHSutQqTMgVCXH1KFRYodDRETkk5h8uNH6NiUXlZwlFyIioo4w+XCTdqtcuJcLERFRp5h8uEleSR2q9EaEBsgxZQhLLkRERJ1h8uEm2wuqAQDT02JYciEiIuoCkw832VNUCwCYNIijHkRERF1h8uEGBrMFh0p1AIDMgREiR0NEROTbmHy4wYESLUwWK2LDVEiOCBI7HCIiIp/G5MMN7CWXzNRISCQSkaMhIiLybUw+3CC36DwAYEIqSy5ERESXw+Sjh0wtVuwvqQMATOR8DyIiosti8tFD+eVaGMxWRAYrMSg6ROxwiIiIfB6Tjx7KbZ3vMSE1gvM9iIiIuoHJRw/lnrmQfBAREdHlMfnogRaLFXnFtvkemamRIkdDRETkH5h89MCxSj0ajC0IC5BjWFyo2OEQERH5BSYfPbCnzXwPmZTzPYiIiLqDyUcP5HC+BxERkdOYfLjIahWw9+yFzqZERETUPUw+XFRQVQ9dsxlBShlGJoSJHQ4REZHfYPLhIvt8j4yUfpDL+GMkIiLqLn5rusi+n8vEgSy5EBEROYPJhwsEQWi30oWIiIi6j8mHC06fa0RNgwkquRTpiWqxwyEiIvIrTD5cYB/1GJscDpVcJnI0RERE/oXJhwvs8z24xJaIiMh5TD6cJAiCYzO5TM73ICIicppTycfy5cuRnp6OsLAwhIWFISsrC999953jcYPBgEWLFiEyMhIhISGYP38+qqqq3B60mMrqmqHRG6CQSTA2uZ/Y4RAREfkdp5KPxMREvPLKK8jLy8O+ffswbdo0zJ07F0ePHgUAPPbYY/j222+xevVq7NixAxUVFbj55ps9ErhYcs7YSi7pieEIVHK+BxERkbPkzhx84403tvv7yy+/jOXLlyMnJweJiYlYsWIFVq1ahWnTpgEAVq5cieHDhyMnJwcTJ050X9Qisk82ZcmFiIjINS7P+bBYLPjiiy/Q2NiIrKws5OXlwWw2Izs723FMWloakpOTsXv37k7PYzQaodfr2918WS77exAREfWI08lHfn4+QkJCoFKp8Jvf/AZr1qzBiBEjoNFooFQqER4e3u742NhYaDSaTs+3dOlSqNVqxy0pKcnpN+EtlbpmlNQ2QSoBrhzA5IOIiMgVTicfw4YNw8GDB5Gbm4uHH34Yd999N44dO+ZyAEuWLIFOp3PcSktLXT6Xp9lLLqP6qxGicqpiRURERK2c/gZVKpUYPHgwACAjIwN79+7F3//+d9x2220wmUzQarXtRj+qqqoQFxfX6flUKhVUKpXzkYvAUXLhqAcREZHLetznw2q1wmg0IiMjAwqFAtu2bXM8VlBQgJKSEmRlZfX0ZXxCbutKl0xuJkdEROQyp0Y+lixZglmzZiE5ORn19fVYtWoVtm/fjs2bN0OtVmPhwoV4/PHHERERgbCwMDz66KPIysrqFStdahqMOH2uERIJMH4A+3sQERG5yqnko7q6GnfddRcqKyuhVquRnp6OzZs347rrrgMAvPnmm5BKpZg/fz6MRiNmzpyJd9991yOBe5t9vsew2FCEBylFjoaIiMh/OZV8rFixosvHAwICsGzZMixbtqxHQfki9vcgIiJyD+7t0k05nO9BRETkFkw+ukHbZEJBVT0AYDxXuhAREfUIk49u2Hu2DoIADIoORnSofywLJiIi8lVMPrphT5Gt5DIhlSUXIiKinmLy0Q325mITB7LkQkRE1FNMPi6jwdiCI+U6ANxMjoiIyB2YfFxGXnEdrAKQHBGEeHWg2OEQERH5PSYfl2Fvqc5RDyIiIvdg8nEZ9uZiTD6IiIjcg8lHF5pNFhwq0wIAJnKlCxERkVsw+ejCgdI6mC0C4sICkBTB+R5ERETuwOSjC7lnWvdzGRgBiUQicjRERES9A5OPLnC+BxERkfsx+eiEscWC/SV1AIBMzvcgIiJyGyYfncgv08HYYkVUiBKDooPFDoeIiKjXYPLRidw2JRfO9yAiInIfJh+dcCQfAzjfg4iIyJ2YfHSgxWJF3ln7ShfO9yAiInInJh8dOFqhR6PJAnWgAsNiQ8UOh4iIqFdh8tGB3CLbfi7jB0RAKuV8DyIiIndi8tEBe3+PTPb3ICIicjsmHxexWAU2FyMiIvIgJh8XKdDUQ29oQbBShpEJYWKHQ0RE1Osw+bjIntb5HhkDIiCX8cdDRETkbvx2vUgu53sQERF5FJOPNgRB4GRTIiIiD2Py0cbpcw0432iCSi5FemK42OEQERH1Skw+2rCXXMYl94NSzh8NERGRJ/Abto3cM/aW6iy5EBEReQqTj1Zt53uwvwcREZHnMPloVVLbBI3eAIVMgnHJ/cQOh4iIqNdi8tHKPt9jTGI4AhQykaMhIiLqvZh8tOJ8DyIiIu9wKvlYunQpxo8fj9DQUMTExGDevHkoKChod4zBYMCiRYsQGRmJkJAQzJ8/H1VVVW4N2hP2nLV1Np2QGilyJERERL2bU8nHjh07sGjRIuTk5GDLli0wm82YMWMGGhsbHcc89thj+Pbbb7F69Wrs2LEDFRUVuPnmm90euDtVaJtRWtsMmVSCjBTO9yAiIvIkuTMHb9q0qd3fP/roI8TExCAvLw9XXXUVdDodVqxYgVWrVmHatGkAgJUrV2L48OHIycnBxIkT3Re5G9lXuYxKCEOIyqkfCRERETmpR3M+dDodACAiwjZPIi8vD2azGdnZ2Y5j0tLSkJycjN27d3d4DqPRCL1e3+7mbblF9pIL53sQERF5msvJh9VqxeLFizF58mSMGjUKAKDRaKBUKhEeHt7u2NjYWGg0mg7Ps3TpUqjVasctKSnJ1ZBcdmEzOc73ICIi8jSXk49FixbhyJEj+OKLL3oUwJIlS6DT6Ry30tLSHp3PWdX1Bpw51wiJBBg/gCMfREREnubSBIdHHnkE69evx48//ojExETH/XFxcTCZTNBqte1GP6qqqhAXF9fhuVQqFVQqlSthuMXeojoAQFpcGNRBCtHiICIi6iucGvkQBAGPPPII1qxZg++//x6pqantHs/IyIBCocC2bdsc9xUUFKCkpARZWVnuidjN7PM9Mjnfg4iIyCucGvlYtGgRVq1ahXXr1iE0NNQxj0OtViMwMBBqtRoLFy7E448/joiICISFheHRRx9FVlaWz690YfJBRETkHU4lH8uXLwcAXHPNNe3uX7lyJe655x4AwJtvvgmpVIr58+fDaDRi5syZePfdd90SrLtpm0w4oakHAIxn8kFEROQVTiUfgiBc9piAgAAsW7YMy5Ytczkob7GPegyOCUFUiHjzToiIiPqSPr23iz35YH8PIiIi7+nTyUcu53sQERF5XZ9NPuoNZhytsHVoZXMxIiIi7+mzyce+4jpYBSAlMghx6gCxwyEiIuoz+mzy4Zjvwa6mREREXtVnk4/cM9xMjoiISAx9MvloNllwuMw232PiQM73ICIi8qY+mXzsL6lDi1VAvDoAif0CxQ6HiIioT+mTyUfbJbYSiUTkaIiIiPqWvpl8OOZ7sORCRETkbX0u+TC2WHCgVAsAyBzIyaZERETe1ueSj0OlOpharIgKUWFgVLDY4RAREfU5fS752FNkK7lwvgcREZE4+lzykcvN5IiIiETVp5IPs8WKvOI6AJzvQUREJJY+lXwcrdCjyWRBeJACQ2NCxQ6HiIioT+pTyYd9ie34ARGQSjnfg4iISAx9KvnY06a5GBEREYmjzyQfFquAPWc52ZSIiEhsfSb5OKHRo97QghCVHCPiw8QOh4iIqM+Six2At0SFqPDHG9LQaLRALuszORcREZHP6TPJR2xYAB68apDYYRAREfV5HAIgIiIir2LyQURERF7F5IOIiIi8iskHEREReRWTDyIiIvIqJh9ERETkVUw+iIiIyKuYfBAREZFXMfkgIiIir2LyQURERF7F5IOIiIi8iskHEREReRWTDyIiIvIqn9vVVhAEAIBerxc5EiIiIuou+/e2/Xu8Kz6XfNTX1wMAkpKSRI6EiIiInFVfXw+1Wt3lMRKhOymKF1mtVlRUVCA0NBQSicSt59br9UhKSkJpaSnCwsLcem5f05feK9C33i/fa+/Vl94v32vvIwgC6uvrkZCQAKm061kdPjfyIZVKkZiY6NHXCAsL69X/ANrqS+8V6Fvvl++19+pL75fvtXe53IiHHSecEhERkVcx+SAiIiKv6lPJh0qlwvPPPw+VSiV2KB7Xl94r0LfeL99r79WX3i/fa9/mcxNOiYiIqHfrUyMfREREJD4mH0RERORVTD6IiIjIq5h8EBERkVf1uuRj2bJlGDBgAAICApCZmYk9e/Z0efzq1auRlpaGgIAAjB49Ghs3bvRSpK5bunQpxo8fj9DQUMTExGDevHkoKCjo8jkfffQRJBJJu1tAQICXIu6ZF1544ZLY09LSunyOP15XABgwYMAl71UikWDRokUdHu9P1/XHH3/EjTfeiISEBEgkEqxdu7bd44Ig4LnnnkN8fDwCAwORnZ2NwsLCy57X2c+8t3T1fs1mM55++mmMHj0awcHBSEhIwF133YWKioouz+nKZ8EbLndt77nnnkvivv766y97Xl+8tpd7rx19fiUSCV5//fVOz+mr19WTelXy8Z///AePP/44nn/+eezfvx9jxozBzJkzUV1d3eHxP//8M+644w4sXLgQBw4cwLx58zBv3jwcOXLEy5E7Z8eOHVi0aBFycnKwZcsWmM1mzJgxA42NjV0+LywsDJWVlY5bcXGxlyLuuZEjR7aLfdeuXZ0e66/XFQD27t3b7n1u2bIFALBgwYJOn+Mv17WxsRFjxozBsmXLOnz8tddew9tvv4333nsPubm5CA4OxsyZM2EwGDo9p7OfeW/q6v02NTVh//79ePbZZ7F//358/fXXKCgowE033XTZ8zrzWfCWy11bALj++uvbxf355593eU5fvbaXe69t32NlZSU+/PBDSCQSzJ8/v8vz+uJ19SihF5kwYYKwaNEix98tFouQkJAgLF26tMPjb731VmH27Nnt7svMzBQeeughj8bpbtXV1QIAYceOHZ0es3LlSkGtVnsvKDd6/vnnhTFjxnT7+N5yXQVBEH73u98JgwYNEqxWa4eP++t1BSCsWbPG8Xer1SrExcUJr7/+uuM+rVYrqFQq4fPPP+/0PM5+5sVy8fvtyJ49ewQAQnFxcafHOPtZEENH7/Xuu+8W5s6d69R5/OHadue6zp07V5g2bVqXx/jDdXW3XjPyYTKZkJeXh+zsbMd9UqkU2dnZ2L17d4fP2b17d7vjAWDmzJmdHu+rdDodACAiIqLL4xoaGpCSkoKkpCTMnTsXR48e9UZ4blFYWIiEhAQMHDgQd955J0pKSjo9trdcV5PJhE8//RT33Xdfl5ss+vN1tSsqKoJGo2l33dRqNTIzMzu9bq585n2ZTqeDRCJBeHh4l8c581nwJdu3b0dMTAyGDRuGhx9+GOfPn+/02N5ybauqqrBhwwYsXLjwssf663V1Va9JPmpqamCxWBAbG9vu/tjYWGg0mg6fo9FonDreF1mtVixevBiTJ0/GqFGjOj1u2LBh+PDDD7Fu3Tp8+umnsFqtmDRpEsrKyrwYrWsyMzPx0UcfYdOmTVi+fDmKioowdepU1NfXd3h8b7iuALB27VpotVrcc889nR7jz9e1Lfu1cea6ufKZ91UGgwFPP/007rjjji43HnP2s+Arrr/+enzyySfYtm0bXn31VezYsQOzZs2CxWLp8Pjecm0//vhjhIaG4uabb+7yOH+9rj3hc7vaknMWLVqEI0eOXLY+mJWVhaysLMffJ02ahOHDh+P999/Hiy++6Okwe2TWrFmOP6enpyMzMxMpKSn48ssvu/Ubhb9asWIFZs2ahYSEhE6P8efrSjZmsxm33norBEHA8uXLuzzWXz8Lt99+u+PPo0ePRnp6OgYNGoTt27dj+vTpIkbmWR9++CHuvPPOy04C99fr2hO9ZuQjKioKMpkMVVVV7e6vqqpCXFxch8+Ji4tz6nhf88gjj2D9+vX44YcfkJiY6NRzFQoFxo4di1OnTnkoOs8JDw/H0KFDO43d368rABQXF2Pr1q24//77nXqev15X+7Vx5rq58pn3NfbEo7i4GFu2bHF6u/XLfRZ81cCBAxEVFdVp3L3h2u7cuRMFBQVOf4YB/72uzug1yYdSqURGRga2bdvmuM9qtWLbtm3tfjNsKysrq93xALBly5ZOj/cVgiDgkUcewZo1a/D9998jNTXV6XNYLBbk5+cjPj7eAxF6VkNDA06fPt1p7P56XdtauXIlYmJiMHv2bKee56/XNTU1FXFxce2um16vR25ubqfXzZXPvC+xJx6FhYXYunUrIiMjnT7H5T4LvqqsrAznz5/vNG5/v7aAbeQyIyMDY8aMcfq5/npdnSL2jFd3+uKLLwSVSiV89NFHwrFjx4QHH3xQCA8PFzQajSAIgvDrX/9a+MMf/uA4/qeffhLkcrnwxhtvCMePHxeef/55QaFQCPn5+WK9hW55+OGHBbVaLWzfvl2orKx03JqamhzHXPxe//SnPwmbN28WTp8+LeTl5Qm33367EBAQIBw9elSMt+CUJ554Qti+fbtQVFQk/PTTT0J2drYQFRUlVFdXC4LQe66rncViEZKTk4Wnn376ksf8+brW19cLBw4cEA4cOCAAEP72t78JBw4ccKzueOWVV4Tw8HBh3bp1wuHDh4W5c+cKqampQnNzs+Mc06ZNE9555x3H3y/3mRdTV+/XZDIJN910k5CYmCgcPHiw3efYaDQ6znHx+73cZ0EsXb3X+vp64cknnxR2794tFBUVCVu3bhXGjRsnDBkyRDAYDI5z+Mu1vdy/Y0EQBJ1OJwQFBQnLly/v8Bz+cl09qVclH4IgCO+8846QnJwsKJVKYcKECUJOTo7jsauvvlq4++672x3/5ZdfCkOHDhWUSqUwcuRIYcOGDV6O2HkAOrytXLnScczF73Xx4sWOn0tsbKxwww03CPv37/d+8C647bbbhPj4eEGpVAr9+/cXbrvtNuHUqVOOx3vLdbXbvHmzAEAoKCi45DF/vq4//PBDh/9u7e/HarUKzz77rBAbGyuoVCph+vTpl/wMUlJShOeff77dfV195sXU1fstKirq9HP8ww8/OM5x8fu93GdBLF2916amJmHGjBlCdHS0oFAohJSUFOGBBx64JInwl2t7uX/HgiAI77//vhAYGChotdoOz+Ev19WTJIIgCB4dWiEiIiJqo9fM+SAiIiL/wOSDiIiIvIrJBxEREXkVkw8iIiLyKiYfRERE5FVMPoiIiMirmHwQERGRVzH5ICIiIq9i8kFERERexeSDiIiIvIrJBxEREXkVkw8iIiLyqv8P8KjiuR53zasAAAAASUVORK5CYII=",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import time\n",
"import matplotlib.pyplot as plt\n",
"\n",
"start_time = time.time()\n",
"accuracy = []\n",
"print(\"Epoca\\tAccuratezza\")\n",
"for t in range(epochs):\n",
" train_loop(train_data, batch_size, num_batches, network, loss_fn, optimizer)\n",
" correct = test_loop(test_data, batch_size, network) / batch_size * 100\n",
" print(f\"{t + 1}\\t{correct:.1f}%\")\n",
" accuracy.append(correct)\n",
"end_time = time.time()\n",
"\n",
"print(f\"Processo completato in {end_time - start_time:.2f} secondi\")\n",
"plt.plot(range(epochs), accuracy)\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"A rete addestrata, possiamo valutare quantitativamente l'accuratezza delle previsioni che è in grado di fare."
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Accuratezza: 85.2%\n"
]
}
],
"source": [
"batch_size = 1000\n",
"correct = test_loop(test_data, batch_size, network) /batch_size * 100\n",
"print(f\"Accuratezza: {correct:.1f}%\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"E possiamo ora anche valutare qualitativamente l'accuratezza delle previsioni, confrontando la cifra prevista (\"prev\") e quella corretta (\"corr\") per 10 immagini a caso."
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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NR13qdSj7RZidHSUndtaUO+2W681ltutdurddpWsxN5kRSaDP/HEE1X//trXvgYA142SiUQivPe978Vzzz2HCxcuzPl5IBCo+rder8eBAwfw4x//GD/84Q8hlUpx//33V71nsVJewWAQZJ5Zhd/5zncAAHv27LnuMVaCerRdJc888wxaWlpw2223LelzK0E92m4jXHf1aLf5GBoawje/+U28613vWrOMRj3arru7G4QQ/PjHP656/Qc/+AGAq8PT1oJ6tN1dd90Fq9WKp59+ukqe8qmnnkKpVMI999xz3WOsBPVou9nHBoBEIoF//Md/hNlsZk7calOPtqtkvdZYbrfaqUfbrereZDm1W7OlvJ544gkm5fWBD3yg6r3A/IN7fD4faW1tJUqlknz6058mTz75JPnyl79MHnjgAWIwGOa8//vf/z4BQDQaDXn3u9895+eL7bD/6le/Snp6eshf//VfkyeffJJ85StfIffccw8BMO9xV5p6th2FNh599rOfXfRnVoJ6tt16Xnf1bDdCCOnt7SVf+MIXyHe+8x3yuc99jhiNRtLa2kqmp6cXaYHaqWfbBYNBYrfbiVQqJZ/61KfIk08+ST7+8Y8TkUhE+vr6Vn3YYT3bjhBCvve97xEAZO/eveSf/umfyF/91V8RiURCbr/9dlIsFhdphdqoZ9t98YtfJDt27CCf//znybe+9S3y+OOPk9bWViIQCMj3v//9JVihNurZdpT1WGO53Wqnnm23mnuTFXE0BgYGyPve9z6i0WiIwWAgjz766JwJhwsZlZCrDTCf/OQnSXNzM5FIJMRut5O7776bfOtb35rz3ng8ThQKBQEw78NqsUY9ceIEeeCBB0hLSwuRyWREpVKRXbt2kf/9v//3quvKE1LftqN89rOfJQDWRA64knq23Xped/VsN0Kuyvs1NzcTqVRKHA4H+bM/+zPi9/sX9dnlUu+2m56eJg899BBpb28nUqmUNDU1kUceeWRFmwYXot5tR8hVlakdO3YQmUxGbDYbefTRR9dUl78ebfeb3/yG3HPPPcRutxOJREL0ej15+9vfTl566aVFfvvlUc+2o6zHGsvtVjv1bLvV3JusiKOxFotVo8FtVzvcdrXB7VY73Ha1w21XO9x2tcNtVxvcbrXDbTc/K9KjweFwOBwOh8PhcDiVcEeDw+FwOBwOh8PhrDjc0eBw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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"test_loop_with_trace(test_data, network)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Nel caso di una singola immagine, possiamo visualizzare la distribuzione di probabilità risultato dell'inferenza, da cui, come prima, si sceglie la cifra prevista come quella più probabile. È qui evidente l'effetto dell'addestramento: anche se la struttura della rete non è cambiata, e dunque non abbiamo modificato la rete riprogrammandola, la distribuzione non è più uniforme, ma con una o poche categorie a probabilità elevata. Insomma, questa significativa differenza di comportamento è interamente dovuta all'addestramento a cui abbiamo sottoposto la rete."
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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7t69iy+++AK3b99Gq1atsH37dvGCj+vXr0NH538d5A8fPsSwYcNw+/ZtWFhYwM3NDYcOHULTpk0r/DUSERFVFBZ+VK1NmzYNWVlZAF72wnXv3h3vvPMOatWqhfXr15frWGPGjMGYMWOK3FZ4vOCCBQuwYMGCV8pMREQkFxZ+VK35+vqKy40aNUJKSgoePHgACwsL3kmDiIioEI0u/JYsWSJ3hBIFBwdL2mFhYeKyUqks8bGXLl0Slzdv3lyhubTVjRs3AIDz4xERERWDV/VStfbixQt8/vnnqFmzJhwcHODg4ICaNWti2rRpeP78udzxiIiINIpG9/gRlWbs2LH47bff8NVXX4lTrxw+fBhRUVG4f/8+li1bJnNCIiIizcHCj6q1tWvX4pdffoGfn5+4rkWLFqhfvz6CgoJY+BERERWg0YVfjx49JO3Ct0GTg7m5ubhc+ArQFi1aiMuFbz939epVSdvf319c5t0eXp2+vj4cHBzU1js6OpY6zpKIiEjbcIwfVWtjxozBzJkzkZOTI67LycnBrFmzip2ahYiISFtpdI8fUVF69+4tae/atQv16tVDy5YtAQCnTp1Cbm4uOnfuLEc8IiIijSV74VfSXGsdO3askOfIv6VXvsK31fL29haXk5KSJNsKntoFXl5MUJyCd3bIy8uTbCs8mTBP7766mjVrStoffvihpM3pXIiIiIome+FHVF4rV66UOwIREVG1xMKP3gh3795FamoqAKBJkyaoU6eOzImIiIg0Dy/uoGotKysLgwcPho2NDd599128++67sLW1xZAhQ5CdnS13PCIiIo1S5T1+AQEBknbhaU8Ksra2lrQXLVokLu/fv1+yreBUKgAwcOBAcbng2DsAsLGxkbQLjjPs3r17sXlKy1twXJ+7u7tkW3JyconHpVcTHh6Offv24a+//kL79u0BAAcOHMC4cePwySefcB4/IiKiAniql6q1jRs3YsOGDZILgbp16wZDQ0P07duXhR8REVEBPNVL1Vp2djasrKzU1tetW5eneomIiAqp8h6/P//8U9J+5513it1XV1dX0h49erS4HBoaKtlW0inYilRwouCTJ09Ktn366aficuFTu7m5uZUbTEt5enoiMjISP/30EwwMDAAAT58+xfTp08V79xIREdFLPNVL1VpMTAy6du2qNoGzgYEBduzYIXM6IiIizcLC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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"test_with_prob(test_data, network)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"### 3. Un miglioramento del metodo di classificazione\n",
"\n",
"Ora che siamo stati in grado di addestrare la rete, possiamo chiederci se raffinare il metodo di classificazione, per tener conto delle situazioni in cui la distribuzione di probabilità porterebbe a una decisione incerta, perché la probabilità della moda non è abbastanza grande o la differenza fra le due probabilità più grandi della distribuzione non è abbastanza grande. In tali casi si potrebbe decidere di non proporre alcuna previsione, e quindi di ammettere che il caso è dubbio. \n",
"Assegniamo allora un valore ai due nuovi iperparametri."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"min_mode_prob = 0.3 # probabilità minima per considerare una previsione corretta\n",
"min_diff_prob = 0.2 # differenza minima tra le due probabilità più grandi per considerare una previsione corretta"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"\n",
"Per mostrare questa logica di decisione, lasciamo in evidenza il codice Python."
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"*** Risultati del test senza aggiustamento ***\n",
"Accuratezza: 86.2%\n",
"Errore: 13.8%\n",
"\n",
"*** Risultati del test con aggiustamento ***\n",
"(probabilità minima per considerare una previsione corretta: 0.3)\n",
"(differenza minima tra le due probabilità più alte per considerare una previsione corretta: 0.2)\n",
"Accuratezza: 72.2%\n",
"Previsioni sospese perché dubbie: 22.6%\n",
"Errore: 5.2%\n"
]
}
],
"source": [
"\n",
"from torch.utils.data import DataLoader\n",
"network.eval() # metti in modalità di test\n",
"dataloader = iter(DataLoader(test_data, batch_size=batch_size, shuffle=True)) # crea un iteratore sul test set\n",
"\n",
"with torch.no_grad(): # non calcolare i gradienti\n",
" X, y = next(dataloader) # prendi un batch di immagini ed etichette\n",
" logits = network(X) # calcola le previsioni\n",
"pred_prob = nn.Softmax(dim=1)(logits) # converti le previsioni in distribuzioni di probabilità\n",
"\n",
"y_pred = pred_prob.argmax(1)\n",
"corr_pred = torch.eq(y_pred, y)\n",
"print(\"*** Risultati del test senza aggiustamento ***\")\n",
"print(f\"Accuratezza: {100 * corr_pred.sum().item() / batch_size:.1f}%\")\n",
"print(f\"Errore: {100 * (batch_size - corr_pred.sum().item()) / batch_size:.1f}%\")\n",
"\n",
"two_max_prob = torch.topk(pred_prob, 2).values\n",
"suff_high_prob = two_max_prob[:,0] > min_mode_prob\n",
"suff_diff_prob = (two_max_prob[:,0] - two_max_prob[:,1]) > min_diff_prob\n",
"suff_quality = suff_high_prob * suff_diff_prob\n",
"adj_corr_pred = corr_pred * suff_quality\n",
"doubtful_pred = torch.logical_not(suff_quality)\n",
"print(\"\\n*** Risultati del test con aggiustamento ***\")\n",
"print(f\"(probabilità minima per considerare una previsione corretta: {min_mode_prob})\")\n",
"print(f\"(differenza minima tra le due probabilità più alte per considerare una previsione corretta: {min_diff_prob})\")\n",
"print(f\"Accuratezza: {100 * adj_corr_pred.sum().item() / batch_size:.1f}%\")\n",
"print(f\"Previsioni sospese perché dubbie: {100 * doubtful_pred.sum().item() / batch_size:.1f}%\")\n",
"print(f\"Errore: {100 * (suff_quality * torch.logical_not(corr_pred)).sum().item() / batch_size:.1f}%\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Come si vede, questo aggiustamento riduce l'accuratezza, perché tratta come dubbi dei casi che erano stati riconosciuti correttamente, ma anche l'errore della previsione, perché tratta come dubbi anche dei casi che erano stati riconosciuti non correttamente.\n",
"\n",
"Ecco qualche esempio di immagine la cui classificazione è incerta, secondo i criteri che abbiamo stabilito."
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Esempi di immagini per cui non si è sicuri della previsione:\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAxoAAACACAYAAACMVR/qAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy80BEi2AAAACXBIWXMAAA9hAAAPYQGoP6dpAAByfklEQVR4nO2dd3Td1bXnv7f33qWrXqxi2XLFYIqxKaFDAoSQwkuYJDxIwntvJsm8SUJCymTWJOtl1nrwCMmkEngECCEJJJhQHIyNjbsly+r1Vt3e+/3NH55zIlmyLUuydK90Pmt5Ge69+ul3t8/5nbPP3vu7eRzHcWAwGAwGg8FgMBiMRYS/3DfAYDAYDAaDwWAwVh7M0WAwGAwGg8FgMBiLDnM0GAwGg8FgMBgMxqLDHA0Gg8FgMBgMBoOx6DBHg8FgMBgMBoPBYCw6zNFgMBgMBoPBYDAYiw5zNBgMBoPBYDAYDMaiwxwNBoPBYDAYDAaDsegwR4PBYDAYDAaDwWAsOszRYDAYDAaDwWAwGIsOczT+P++99x54PB54PB78fv9y307JE4lE8JWvfAVNTU2QyWSoqanBgw8+iPHx8eW+tZLH6/Xi05/+NMxmM2QyGTZu3IgXX3xxuW+rpJmYmMDjjz+OrVu3QqfTwWg0YseOHXjzzTeX+9bKAjbm5g+z3fxh68TC+NnPfobW1lZIpVI0NTXh3//935f7lsoKtq+7OC7VfOVxHMct0j2WLcViEZs2bcLAwAASiQR8Ph+MRuNy31bJUiwWsW3bNvT09ODhhx9Gc3MzBgcH8R//8R9Qq9U4ffo0VCrVct9mSRKNRrFp0yZ4vV48+uijsFqteOGFF/Duu+/i2Wefxf3337/ct1iSPPHEE/jKV76CO++8E9u3b0c+n8evf/1rHD16FD//+c/x6U9/erlvsWRhY27+MNvNH7ZOLIynn34aDz30ED7ykY/gxhtvxN69e/HMM8/gf/2v/4WvfvWry317JQ/b110cl3S+cstEoVDgUqnUcv36aTz11FOcwWDgHn30UQ4A5/P5lvuWzsty227fvn0cAO6JJ56Y9vrPf/5zDgD38ssvL9OdXZjltt3//t//mwPAvfXWW9PuacuWLZzVauUymcyy3dv5WG67dXd3z5iX6XSaa2lp4ex2+zLd1dxYbtuV65jjOGa7hbDctmPrxPxJJpOcwWDgbrnllmmvf/zjH+cUCgUXDAaX6c7Oz3LbbSpsX3dxXMr5uqDUqW9961vg8Xjo7e3FvffeC7VaDYPBgEcffRTpdHraZ3k8Hr7whS/g2WefRXt7OyQSCV5//XUAgNPpxGc+8xlYLBZIJBK0t7fj5z//Of1Zr9cLoVCIxx9/fMY99PX1gcfj4YknngAAjI+Po7e3d87fIRgM4utf/zq+/e1vQ6vVzsMK86OcbReNRgEAFotl2us2mw0AIJPJLsISF085227v3r0wmUzYuXMnfY3P5+Pee++Fx+PB3/72t3nZZC6Us93a29tnnEZJJBLcfPPNcDgciMViF22Pi6GcbbecYw5gtlsI5Ww7tk7M33bvvPMOAoEAHn744WmvP/LII0gkEnjttdcu2h5zpZztRmD7uhKbrwvxgL75zW9yALiOjg7utttu45544gnuE5/4BAeA++QnPzntswC41tZWzmQycY8//jj35JNPcseOHeM8Hg9nt9u5qqoq7tvf/jb31FNPcbfffjsHgPvRj35Ef37nzp1cW1vbjHt4/PHHOYFAwHk8Ho7jOO6aa67hLuZrPfzww1x7ezuXz+fp91kKz7ecbefz+TiFQsG1tLRwb731FudwOLg9e/ZwHR0d3JYtW7hcLrcw41yAcrbdDTfcwFVXV894/cknn+QAcN///vcv0hpzp5ztdi7uv/9+Ti6Xc/l8ft7XmAvlbLvlHHMcx2y3EMrZdmydmL/tvvvd73IAOK/XO+31TCbD8fl87l/+5V/mYZG5Uc52I7B9XWnN10VxNG6//fZprz/88MMcAO7EiRN//0UAx+fzuVOnTk377IMPPsjZbDbO7/dPe/2+++7jNBoNl0wmOY7juKeffpoDwHV1dU37XFtbG7dz5076/xczIE+cOMEJBAJu9+7d077PUg7IcrXdq6++ytlsNg4A/XPjjTdysVhsTj+/EMrZdl/84hc5Pp/PjY6Ozvi9ALgvfOELF7zGfClnu83GwMAAJ5VKZzzALwXlbLvlHHMcx2y3EMrZdhzH1on52u6RRx7hBALBrO+ZTCbuvvvuu+A15ks5243j2L6uFOfrojga5B+UcPr06RmnPQC4a6+9dtrnisUip9Vquc997nOcz+eb9ucXv/gFB4B77733OI47420JhULu61//Ov35rq4uDgD39NNPz+v+r7nmGu7WW2+d8X2WckCWq+0OHjzI3Xzzzdz3vvc97pVXXuG+9a1vcXK5nLv77rvndb2LoZxtd+LECU4kEnFbt27l9u3bxw0ODnL/83/+T04ikXAAuAcffPCirzlXytluZ5NIJLjOzk5Op9NxTqdzwde7EOVsu+UccxzHbLcQytl2HMfWifna7jOf+Qwnk8lmfa+qqoq74447Lvqac6Wc7cZxbF9XivN1URyN4eHhaa9ns1mOz+dzn//85//+iwDuM5/5zLTPeb3eaZ7TbH+mFqDceOONXHNzM/3/r3/965xQKJzXAHr++ec5kUjE9fX1zfg+Szkgy9F2Q0NDnFwu51566aVpr//yl7/kAHB//vOfL/qaF0M5247jOO7FF1/kDAYD/V1Wq5V76qmnOADco48+Oq9rzoVytxshn89zt912GycWi6cV6V5Kyt12yzXmOI7ZbiGUs+3YOjF/25VCRKMc7cb2daU5X4W4BPB4vFlfP7uYpFgsAgA+8YlP4IEHHpj1Z9atW0f/+7777sOnP/1pHD9+HJ2dnXjhhRewa9eueUmWffnLX8Y999wDsViM0dFRAEA4HAZwRrM/m82ioqLioq+7UMrBdr/85S+RTqdx6623Tnv99ttvBwDs27cPN91000Vfd6GUg+0A4O6778btt9+OEydOoFAoYOPGjdizZw8AoLm5eV7XXAjlYjfCZz/7Wbz66qt49tlnpxXpLgflYrtSG3MAs91CKAfbsXVi/raz2WwoFAqYnJyE2Wymr2ezWQQCAbY3OQdsX1ea83VRHI2BgQHU1dXR/x8cHESxWERtbe15f85kMkGlUqFQKOC666674O+588478fnPfx6//e1vAQD9/f3413/913nd88TEBJ577jk899xzM97buHEj1q9fj+PHj8/r2hdDOdrO6/WC4zgUCoVpr+dyOQBAPp+f13UvlnK0HUEsFmPLli30/0njubncz0IpZ7t9+ctfxi9+8Qv8n//zf/Cxj31sQdeaD+Vsu+UccwCz3UIoR9uxdWL+tuvs7AQAHD58GDfffDN9/fDhwygWi/T9S0k52o3t60pzvi5KZ/Ann3xy2v+T7pUX8n4EAgE+8pGP4He/+x26u7tnvO/z+ab9v1arxY033ogXXngBzz//PMRiMe68885pn5mrlNfvf//7GX8++tGPAgB+/etf40c/+tEFr7EYlKPtmpubwXEcXnjhhWmv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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"doubtful_data = [(X[i], y[i]) for i in range(batch_size) if doubtful_pred[i]]\n",
"print(\"Esempi di immagini per cui non si è sicuri della previsione:\")\n",
"test_loop_with_trace(doubtful_data, network)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Ed ecco qualche esempio di immagine la cui classificazione è invece sbagliata, sempre secondo i criteri che abbiamo stabilito."
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Esempi di immagini per cui la previsione è sbagliata:\n"
]
},
{
"data": {
"image/png": "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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"wrong_pred = [(X[i], y[i]) for i in range(batch_size) if (suff_quality * torch.logical_not(corr_pred))[i]]\n",
"print(\"Esempi di immagini per cui la previsione è sbagliata:\")\n",
"test_loop_with_trace(wrong_pred, network)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Sebbene questa rete abbia prdotto previsioni abbastanza accurate, non è ideale per la classificazione di immagini. I *MultiLayer Perceptron* (MLP) richiedono infatti di trasformare le immagini su cui operare, che hanno una struttura bidimensionale, in successioni di valori unidimensionali, perdendo così l'informazione appunto sulla posizione relativa dei punti. In più, l'efficienza dei MLP diminuisce all'aumentare delle dimensioni delle immagini da analizzare, perché il numero di parametri del modello e quindi la capacità di calcolo necessaria per l'addestramento crescono significativamente con l'aumento di tali dimensioni.\n",
"\n",
"\n",
"### 4. Seconda opzione: una *Convolutional Neural Network*\n",
"\n",
"Per superare questi ostacoli, si usano tipicamente delle *Convolutional Neural Network* (CNN), che operano mantenendo l'informazione sulla disposizione spaziale dei punti delle immagini da classificare, in modo da apprenderne il contenuto in modo più efficace ed efficiente.\n",
"\n",
"Realizziamo dunque una CNN, nuovamente come una classe che eredita da `torch.Module`, con questa successione di strati, inizializzati nel costruttore della classe:\n",
"* un primo strato convoluzionale, in cui:\n",
" * 1 è il numero di canali di input, dato che si tratta di immagini in scala di grigi (per immagini RGB sarebbe 3);\n",
" * 32: il numero di canali di output, cioè il numero di filtri convoluzionali dello strato, assumendo che ogni filtro estragga una caratteristica dall'immagine;\n",
" * kernel_size=3 specifica che la dimensione del filtro è 3x3;\n",
" * stride=1 specifica che il filtro si muove di 1 pixel alla volta durante la scansione dell'immagine;\n",
" * padding=1 indica di aggiungere un bordo di 1 pixel, di valore zero, attorno all'immagine, per permettere al filtro di lavorare anche sui bordi dell'immagine, mantenendo la stessa dimensione dell'output come l'input;\n",
" \n",
" durante l'operazione di convoluzione, ciascuno dei 32 filtri si sposta attraverso l'immagine di input:\n",
" * ogni filtro ha una griglia di pesi 3x3 che viene moltiplicata per i valori dei pixel corrispondenti dell'immagine sotto il filtro (più un bias);\n",
" * questi prodotti sono sommati per ottenere un singolo valore di output per quella posizione specifica del filtro sull'immagine;\n",
" * poiché il stride è 1 e il padding è 1, il filtro si sposta di un pixel alla volta e lavora su tutta l'area dell'immagine, inclusi i bordi, producendo un'immagine di output della stessa dimensione dell'immagine di input, ma con 32 canali differenti, uno per ogni filtro;\n",
"\n",
"* una funzione di attivazione non lineare, in questo caso *Rectified Linear Unit* (ReLU), per introdurre non linearità nel processo di apprendimento;\n",
"* uno strato di *pooling* in cui:\n",
" * kernel_size=2 specifica che il filtro è un quadrato 2x2;\n",
" * stride=2 specifica che il filtro si muove di 2 pixel alla volta e quindi che ogni operazione di pooling è completamente non sovrapposta con la precedente, dimezzando così la dimensione dell'output;\n",
"* un secondo strato convoluzionale, ancora seguito da una funzione di ReLU e uno strato di pooling;\n",
"* la unidimensionalizzazione (*flatten*) della struttura;\n",
"* uno strato *fully connected* per ottenere i 10 output possibili della classificazione.\n",
"\n",
"\n",
"\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Questa è dunque una rete con 50186 parametri, invece dei 669706 della precedente.\n"
]
}
],
"source": [
"import torch\n",
"from torch import nn\n",
"import torch.nn.functional as F \n",
"\n",
"class CNN(nn.Module):\n",
" def __init__(self):\n",
" super().__init__()\n",
" self.conv1 = nn.Conv2d(1, 32, kernel_size=3, stride=1, padding=1) # Convolutional Layer 1: prende 1 canale di input, produce 32 canali di output, kernel di 3x3\n",
" self.pool1 = nn.MaxPool2d(kernel_size=2, stride=2) # Max Pooling Layer 1: finestra di pooling 2x2\n",
" self.conv2 = nn.Conv2d(32, 64, kernel_size=3, stride=1, padding=1) # Convolutional Layer 2: prende 32 canali di input, produce 64 canali di output, kernel di 3x3\n",
" self.pool2 = nn.MaxPool2d(kernel_size=2, stride=2) # Max Pooling Layer 2: finestra di pooling 2x2\n",
" self.fc = nn.Linear(64 * 7 * 7, 10) # Fully connected layer: converte i canali di output del layer convoluzionale in classi\n",
"\n",
"\n",
" def forward(self, x):\n",
" x = self.pool1(F.relu(self.conv1(x))) # Applica il primo layer convoluzionale, seguito da ReLU e max pooling\n",
" x = self.pool2(F.relu(self.conv2(x))) # Applica il secondo layer convoluzionale, seguito da ReLU e max pooling\n",
" x = torch.flatten(x, 1) # Appiattisci l'output per passarlo al fully connected layer\n",
" x = self.fc(x) # Applica il fully connected layer\n",
" return x\n",
" \n",
"network = CNN()\n",
"\n",
"num_CNN_params = sum(p.numel() for p in network.parameters())\n",
"print(f\"Questa è dunque una rete con {num_CNN_params} parametri, invece dei {num_MLP_params} della precedente.\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Questa rete ha dunque un numero di parametri è un ordine di grandezza inferiore alla precedente. Per capire meglio la struttura della CNN, è interessante vedere come si giunge a questo numero di parametri:\n",
"* conv1 ha un kernel di dimensione 3x3, 1 canale di input e 32 canali di output; quindi per ciascun filtro ci sono 3×3×13×3×1 parametri, più un bias per ogni canale di output: (3×3×1+1)×32=320;\n",
"* conv2 Ha un kernel di dimensione 3x3, 32 canali di input e 64 canali di output; ci sono 3×3×323×3×32 pesi per filtro, più un bias per ogni canale di output: (3×3×32+1)×64=18496;\n",
"* fc: dopo i due strati di pooling con kernel 2x2 e stride 2, le dimensioni spaziali dell'input sono ridotte di un fattore di 4 (da 28x28 a 7x7); l'input ha perciò dimensioni 7x7 per ciascuno dei 64 canali di output di conv2, e ci sono 10 output: (7×7×64+1)×10=31370\n",
"\n",
"Sommando tutti i parametri dei layer, otteniamo il numero totale di parametri della rete: 320+18496+31370=50186."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Per mettere alla prova questa rete rispetto alla precedente, addestriamola nelle stesse condizioni: stessi iperparametri, stessa funzione di errore, stessa funzione di ottimizzazione per la backpropagation."
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {},
"outputs": [],
"source": [
"learning_rate = 1e-3\n",
"batch_size = 50\n",
"num_batches = 500\n",
"epochs = 20\n",
"\n",
"loss_fn = nn.CrossEntropyLoss()\n",
"optimizer = torch.optim.SGD(network.parameters(), lr=learning_rate)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Addestriamo la rete in accordo a questi iperparametri e, contestualmente, mettiamola alla prova."
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoca\tAccuratezza\n",
"1\t74.0%\n",
"2\t62.0%\n",
"3\t80.0%\n",
"4\t82.0%\n",
"5\t86.0%\n",
"6\t90.0%\n",
"7\t82.0%\n",
"8\t88.0%\n",
"9\t86.0%\n",
"10\t94.0%\n",
"11\t90.0%\n",
"12\t94.0%\n",
"13\t96.0%\n",
"14\t98.0%\n",
"15\t98.0%\n",
"16\t90.0%\n",
"17\t82.0%\n",
"18\t92.0%\n",
"19\t94.0%\n",
"20\t92.0%\n",
"Processo completato in 152.76 secondi\n"
]
},
{
"data": {
"image/png": "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SLGmpkYURc95X61MJpOYlJQkPvvss5fc587va2Njo7h3715x7969IgDxjTfeEPfu3Wtb3fHqq6+KoaGh4vr168UDBw6Ic+bMEVNTU8XW1lbbOa6++mpx+fLltp97+8xLqafXazAYxNmzZ4sJCQnivn37On2O9Xq97Rw/f729fRak0tNrbWxsFJ966imxsLBQLC4uFvPz88WxY8eKgwcPFtva2mzncJf3trd/x6IoilqtVgwICBBXrFjR5Tnc5X11Jo9KPkRRFJcvXy4mJSWJvr6+4oQJE8Tt27fb7ps2bZp43333dTr+008/FYcMGSL6+vqKI0aMEL/55hsXR2w/AF3eVq5caTvm56/1iSeesP1/iYmJEa+99lpxz549rg++H2677TYxLi5O9PX1FQcNGiTedtttYlFRke1+T3lfrfLy8kQA4vHjxy+5z53f1++//77Lf7fW12M2m8XnnntOjImJEdVqtTh9+vRL/h8kJyeLL7zwQqff9fSZl1JPr7e4uLjbz/H3339vO8fPX29vnwWp9PRaW1paxJkzZ4pRUVGij4+PmJycLP7qV7+6JIlwl/e2t3/HoiiK7733nujv7y82NDR0eQ53eV+dSRBFUXTq0AoRERHRRTym5oOIiIjcA5MPIiIicikmH0RERORSTD6IiIjIpZh8EBERkUsx+SAiIiKXYvJBRERELsXkg4iIiFyKyQcRERG5FJMPIiIicikmH0RERORSTD6IiIjIpf5/BFe0CnwFsiEAAAAASUVORK5CYII=",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"start_time = time.time()\n",
"accuracy = []\n",
"print(\"Epoca\\tAccuratezza\")\n",
"for t in range(epochs):\n",
" train_loop(train_data, batch_size, num_batches, network, loss_fn, optimizer)\n",
" correct = test_loop(test_data, batch_size, network) / batch_size * 100\n",
" print(f\"{t + 1}\\t{correct:.1f}%\")\n",
" accuracy.append(correct)\n",
"end_time = time.time()\n",
"\n",
"print(f\"Processo completato in {end_time - start_time:.2f} secondi\")\n",
"plt.plot(range(epochs), accuracy)\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Come si vede, nonostante il numero molto inferiore di parametri, la CNN ha un'accuratezza analoga o migliore di quella del MLP, ma richiede un tempo di addestramento più che doppio.\n",
"\n",
"A rete addestrata, valutiamo quantitativamente l'accuratezza delle previsioni che è in grado di fare."
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Accuratezza: 92.1%\n"
]
}
],
"source": [
"batch_size = 1000\n",
"correct = test_loop(test_data, batch_size, network) / batch_size * 100\n",
"print(f\"Accuratezza: {correct:.1f}%\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Valutiamo qualitativamente l'accuratezza delle previsioni, confrontando la cifra prevista (\"prev\") e quella corretta (\"corr\") per 10 immagini a caso."
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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Fkgl2242BgYGiFwuv2DButRUut342mT1jdclcTToQp3S29tLAJBvfetb7/4hgLznPe+Z9rlSqUT0ej154IEHiN/vn/bz+OOPEwBk//79hJDznqpYLCZf/epX2fdPnTpFAJDHHntsQed/ww03kA984AMXXM9yOhqVarsjR46Qffv2kX/8x38k//mf/0m+8Y1vEKVSSe68884FHW8+VLrtylkJR6OS7eb1esnvf/978qtf/Yp89rOfJddccw05dOjQgo83V6rBdhQ6Qf36179e9LHmQjXZbqUcjUq03b333ksAkK6uLlIsFtnrNFjw4x//eN7HnA+VbLuZJJNJsnnzZmIwGMjk5OSij3cpKt1ufG2y+sbrkjgaQ0ND017P5XJEKBSSz3zmM+/+IYDce++90z7n8/mmeZ2z/ZQX79xyyy2ko6OD/f7Vr36ViMXiBTkGv/jFL4hEIiFnz5694HqW09GoRNudO3eOKJVK8uyzz057/YknniAAyEsvvTTvY86HSrbdTFbC0agGu1H+8R//kajV6iteDF5Ntrv++uuJ0WgkuVxu0ceaC9Vku5VyNCrRdp/73OcIAPLQQw9Ne71QKBCxWEw+/elPz/uY86GSbVdOoVAgt912G5FKpeTVV19d1LHmQiXbja9NVud4vSLythcrnJtZiFMqlQAAn/jEJ3DPPffM+p2NGzey/7/77rvx6U9/GidOnMDmzZvxy1/+EjfddNMFRVNz4ctf/jLuuusuSKVSjIyMAHi3oHR8fBy5XA4Oh2Pex10slWC7J554AplMBh/4wAemvX777bcDAA4cOIBbb7113sddLJVgu9VIJdvtzjvvxN/93d/h17/+NT7zmc8s2XHnSqXZbmxsDG+++SYeeOABSCSSRR1rsVSa7VYTlWA7On/OLMwViUQwmUwIh8PzPuZSUAm2K+f+++/HCy+8gKeeego33njjoo61GCrBbnxtsjrH65I4GgMDA2hubma/Dw4OolQqMUWYi2GxWKDRaFAsFnHzzTdf9u986EMfwmc+8xk888wzAID+/n78j//xPxZ0zuPj43j66adn1d/funUrNm3ahBMnTizo2POhEm3n8/lACEGxWJz2OlUoKBQKCzrufKlE260Gqslu6XQawPkmTctBpdvu5z//OQghy6I2NZNKt91KUom227ZtG4DzCjrl5HI5BAIBWCyWBR13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befxePD666/jwx/+MORy+eIMsQAqyXZ8zC7MdqVSCd///vdxxx13YOfOnSgUCgse50tBpdjNbDajq6vrgtfvuOMOAEBvb+9iTTFvKsV2q21tAlSO7ZZjvC5J6pTb7cbOnTsRiUTwwAMPoLOzE5OTk3j22WeRSqUglUrh8/mwa9cupFIpfOELX4DJZMJPf/pT3H777Xj22WfZYKI8/PDDkEql+Ju/+Rtks1lIpVIAQKFQwC233ILdu3fju9/9LpRKJQDgkUcewUMPPYTXX38de/bsuei5ZrNZALjgxqPHefvtt5fCJHOmkmynUChw1VVX4YknnsA111yD6667DpFIBA8//DAMBgMeeOCBK2anmVSS3VYblWg7QgiCwSAKhQIGBgbwla98BSKRaNntXom2K+cXv/gFSqUSm4yWk0q33UpSSbY7c+YM3G43Nm7ciAceeAA//elPkcvlsGHDBnz/+9/He97znitmp5lUkt0uhtfrBXDeEVlOKsl2q2ltAlSW7ZZlvC7FtsgnP/lJIhQKydGjRy94r1QqEUII+dKXvkQAkDfffJO9F4/HSXNzM3G5XGwb6PXXXycASEtLC0mlUtOOdc899xAA5Ctf+coFf+frX/86AUBef/31S57rc889RwCQJ598ctrr//Zv/0YAkPXr18/pmpeKSrIdIYQMDAyQrVu3EgDsp6WlhfT19c3nshdNpdmtnJVOw6hE23k8nmn3XH19PXnmmWfmeslLRiXarpxt27YRu91+0W33K0kl246P2bnb7vnnnycAiMlkIu3t7eTxxx8njz/+OGlvbydSqXRZ05MryW6zkc1mybp160hzczPJ5/Pz/v5iqDTbrZa1CSGVZbvlGK+LdjSKxSLRarXkgx/84CU/19HRQXbu3HnB69/61rcIAHLq1ClCyLtGfeihhy74LDXq6Ojogs83nU6TpqYmYrPZyHPPPUdGRkbIM888Q0wmExGLxaS1tXXBx54vlWY7Qgjxer3kL/7iL8jnPvc58vzzz5N//dd/JY2NjaSzs5P4/f5FHXuuVKLdylnJRUul2i6bzZLf//735Le//S355je/STZv3kz+z//5P4s+7nyoVNtRzp49SwCQv/7rv16yY86VSrcdH7Nz52c/+xkBQKRSKRkbG2Ovj46OEolEQj7+8Y8v+NjzodLsNhv3338/AUBefPHFJT3u5ahE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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"test_loop_with_trace(test_data, network)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Valutiamo il caso di una singola immagine, confrontando la cifra prevista (\"prev\") e quella corretta (\"corr\"), e visualizziamo la distribuzione di probabilità risultato dell'inferenza, da cui si sceglie la cifra prevista come quella più probabile."
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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//039u3bBw8PD7Xbs0RERFS5etXjR9rl4MGD2L17NywtLaGjowMdHR306NED8fHxmDBhAv7880+5QyQiIqpXNDrxK32btVevXuXW3bNnj2Tdzc1N/GxgYCDZlpKSIll/9nVvzs7Okm2lpxJ54403xM+VPQBAL0alUsHExATA09/CtWvX0KZNGzg4OCAjI0Pm6IiIiOofjU78SLt16NABf/31F5ycnODl5YX58+dDqVQiKSlJLUEnIiKiyjHxI401Y8YMFBQUAHg6qfLrr7+OV155BU2bNkVycrLM0REREdU/TPxIY/n6+oqfW7VqhfT0dNy+fRvm5uZqb24hIiKiyml04te8efMK15/l6ekpWX92zN/WrVsl27788sty23n33XerESHVlStXrgAAWrRoIXMkRERE9RencyGN9eTJE8ycORNmZmZwdHSEo6MjzMzMMGPGDL4nmYiI6DlodI8fabfx48fju+++w/z589GtWzcAT6d4iYmJwa1bt7Bs2TKZIyQiIqpfmPiRxlq/fj02bNgAf39/sczd3R0tWrTA0KFDmfgRERFVk0Ynfg8fPix3vfTcfHPmzJGsx8TEiJ+r82qv0k+LLl26VLIeHBwsfuY8frVLT08Pjo6OauVOTk5QKpV1HxAREVE9xzF+pLEiIiIwe/ZsFBYWimWFhYWYM2cOIiIiZIyMiIioftLoHj/SPgMHDpSs79q1C82bN0fHjh0BAH/99ReKiorQp08fOcIjIiKq1zQ68Sv9Wq7o6Gjxc1FRkWTb4sWLJevFxcXPdcySCYNLnD17VrLOW4y1y8zMTLL+5ptvStY5nQsREdHz0+jEj7TPqlWr5A6BiIiowWLiRxrv5s2bYu9vmzZt0KxZM5kjIiIiqp/4cAdprIKCAowcORK2trZ49dVX8eqrr8LOzg7vvPMOHjx4IHd4RERE9U696vH77LPPav0YpccOnjhxQrLeqlWrWo+BnoqMjMTevXvx448/onv37gCA/fv3Y8KECfjggw84jx8REVE11avEj7TLli1bsHnzZvTq1Uss69evHwwMDDB48GAmfkRERNXEW72ksR48eABra2u1cisrK97qJSIieg7s8avEunXrJOtbtmwRP3fo0EGy7dSpU3USk7bo1q0boqOjsXbtWujr6wN4+vaW2NhY8d29REREVHVM/EhjJSQkwM/PT20CZ319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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"test_with_prob(test_data, network)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Ovviamente, come nel caso del _MultiLayer Perceptron_, anche per questa rete convoluzionale potremmo raffinare variamente il metodo di decisione, invece di affidarci semplicemente alla scelta della cifra più probabile. Ma ora ci fermiamo qui."
]
}
],
"metadata": {
"kernelspec": {
"display_name": ".venv",
"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.12.5"
}
},
"nbformat": 4,
"nbformat_minor": 2
}