{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Using GPT to implement a Convolutional Neural Networks for Satellite image classification. \n", "\n", "Antonio Fonseca" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Packages to be installed:\n", "\n", "```\n", "conda install -c conda-forge umap-learn\n", "pip install phate\n", "conda install -c conda-forge imageio\n", "pip install wandb\n", "```" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "tags": [] }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/gpfs/gibbs/project/dijk/ahf38/conda_envs/geo_comp2/lib/python3.8/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n", " from .autonotebook import tqdm as notebook_tqdm\n", "/gpfs/gibbs/project/dijk/ahf38/conda_envs/geo_comp2/lib/python3.8/site-packages/torchvision/io/image.py:13: UserWarning: Failed to load image Python extension: /gpfs/gibbs/project/dijk/ahf38/conda_envs/geo_comp2/lib/python3.8/site-packages/torchvision/image.so: undefined symbol: _ZN5torch3jit17parseSchemaOrNameERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE\n", " warn(f\"Failed to load image Python extension: {e}\")\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "cuda\n" ] } ], "source": [ "import numpy as np\n", "import codecs\n", "import copy\n", "import json\n", "import scipy.io\n", "from scipy.spatial.distance import cdist, pdist, squareform\n", "from scipy.linalg import eigh\n", "import matplotlib.pyplot as plt\n", "from sklearn.cluster import KMeans\n", "import random\n", "from sklearn import manifold\n", "import os\n", "# import phate\n", "# import umap\n", "import pandas as pd \n", "# import scprep\n", "from torch.nn import functional as F\n", "\n", "\n", "import pandas as pd\n", "from sklearn.metrics import r2_score\n", "from sklearn.preprocessing import MinMaxScaler\n", "# import seaborn as sns\n", "\n", "import torch\n", "from torch.utils.data import Dataset, DataLoader\n", "from torch.utils.data.sampler import SubsetRandomSampler,RandomSampler\n", "from torchvision import datasets, transforms\n", "from torch.nn.functional import softmax\n", "from torch import optim, nn\n", "import torchvision\n", "import torchvision.transforms as transforms\n", "import torchvision.datasets as datasets\n", "import time\n", "\n", "device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n", "print(device)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now that we have an autoencoder working on MNIST, let's use this model to visualize some geodata. For the next section we will use the SAT-6 (https://csc.lsu.edu/~saikat/deepsat/)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Dataset decription: SAT" ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "SAT-6 consists of a total of 405,000 image patches each of size 28x28 and covering 6 landcover classes - barren land, trees, grassland, roads, buildings and water bodies. 324,000 images (comprising of four-fifths of the total dataset) were chosen as the training dataset and 81,000 (one fifths) were chosen as the testing dataset. Similar to SAT-4, the training and test sets were selected from disjoint NAIP tiles. Once generated, the images in the dataset were randomized in the same way as that for SAT-4. The specifications for the various landcover classes of SAT-4 and SAT-6 were adopted from those used in the National Land Cover Data (NLCD) algorithm. \n", "\n", "The datasets are encoded as MATLAB .mat files that can be read using the standard load command in MATLAB. Each sample image is 28x28 pixels and consists of 4 bands - red, green, blue and near infrared . The training and test labels are 1x4 and 1x6 vectors for SAT-4 and SAT-6 respectively having a single 1 indexing a particular class from 0 through 4 or 6 and 0 values at all other indices.\n", "\n", "The MAT file for the SAT-6 dataset contains the following variables:\n", "\n", "- train_x\t28x28x4x324000 uint8 (containing 324000 training samples of 28x28 images each with 4 channels)\n", "- train_y\t324000x6 uint8 (containing 6x1 vectors having labels for the 324000 training samples)\n", "- test_x\t28x28x4x81000 uint8 (containing 81000 test samples of 28x28 images each with 4 channels)\n", "- test_y\t81000x6 uint8 (containing 6x1 vectors having labels for the 81000 test samples)\n", "\n", "Labels:\n", "- Building = 0\n", "- Barren_land = 1\n", "- Tree=2\n", "- Grassland=3\n", "- Road = 4\n", "- Water = 5\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Accessing GPT-4" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We will be using [Perplexity](https://www.perplexity.ai/) to ask GPT to create code for us. You can create a free account. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## [Prompt](https://www.perplexity.ai/search/368ba448-d6b3-4973-b00b-2950a9128947?s=c): \"Can you make me the pytorch implementation of a CNN to classify the sat-6-full dataset\"\n", "\n", "Access the link above to see the full conversation. After a few back and forth iterations, we got the code below. \n", "NOTE: I had to fix the permutation myself to put the data in the shape: (samples, channels, width, heigth)" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "train_x.shape: torch.Size([324000, 4, 28, 28])\n", "train_y.shape: torch.Size([324000, 6])\n", "Epoch 1 loss: 0.114\n", "Epoch 2 loss: 0.063\n", "Epoch 3 loss: 0.055\n", "Epoch 4 loss: 0.047\n", "Epoch 5 loss: 0.045\n" ] }, { "ename": "KeyboardInterrupt", "evalue": "", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", "Cell \u001b[0;32mIn[17], line 64\u001b[0m\n\u001b[1;32m 62\u001b[0m inputs, labels \u001b[38;5;241m=\u001b[39m data\n\u001b[1;32m 63\u001b[0m optimizer\u001b[38;5;241m.\u001b[39mzero_grad()\n\u001b[0;32m---> 64\u001b[0m outputs \u001b[38;5;241m=\u001b[39m \u001b[43mcnn\u001b[49m\u001b[43m(\u001b[49m\u001b[43minputs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 65\u001b[0m loss \u001b[38;5;241m=\u001b[39m criterion(outputs, labels)\n\u001b[1;32m 66\u001b[0m loss\u001b[38;5;241m.\u001b[39mbackward()\n", "File \u001b[0;32m/gpfs/gibbs/project/dijk/ahf38/conda_envs/geo_comp2/lib/python3.8/site-packages/torch/nn/modules/module.py:1130\u001b[0m, in \u001b[0;36mModule._call_impl\u001b[0;34m(self, *input, **kwargs)\u001b[0m\n\u001b[1;32m 1126\u001b[0m \u001b[38;5;66;03m# If we don't have any hooks, we want to skip the rest of the logic in\u001b[39;00m\n\u001b[1;32m 1127\u001b[0m \u001b[38;5;66;03m# this function, and just call forward.\u001b[39;00m\n\u001b[1;32m 1128\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m (\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_backward_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_forward_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_forward_pre_hooks \u001b[38;5;129;01mor\u001b[39;00m _global_backward_hooks\n\u001b[1;32m 1129\u001b[0m \u001b[38;5;129;01mor\u001b[39;00m _global_forward_hooks \u001b[38;5;129;01mor\u001b[39;00m _global_forward_pre_hooks):\n\u001b[0;32m-> 1130\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mforward_call\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;28;43minput\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1131\u001b[0m \u001b[38;5;66;03m# Do not call functions when jit is used\u001b[39;00m\n\u001b[1;32m 1132\u001b[0m full_backward_hooks, non_full_backward_hooks \u001b[38;5;241m=\u001b[39m [], []\n", "Cell \u001b[0;32mIn[17], line 45\u001b[0m, in \u001b[0;36mCNN.forward\u001b[0;34m(self, x)\u001b[0m\n\u001b[1;32m 44\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mforward\u001b[39m(\u001b[38;5;28mself\u001b[39m, x):\n\u001b[0;32m---> 45\u001b[0m x \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mpool(\u001b[43mtorch\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrelu\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mconv1\u001b[49m\u001b[43m(\u001b[49m\u001b[43mx\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m)\n\u001b[1;32m 46\u001b[0m x \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mpool(torch\u001b[38;5;241m.\u001b[39mrelu(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mconv2(x)))\n\u001b[1;32m 47\u001b[0m x \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mpool(torch\u001b[38;5;241m.\u001b[39mrelu(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mconv3(x)))\n", "\u001b[0;31mKeyboardInterrupt\u001b[0m: " ] } ], "source": [ "import scipy.io as sio\n", "import torch\n", "import torch.nn as nn\n", "import torch.optim as optim\n", "import torchvision.transforms as transforms\n", "from torch.utils.data import DataLoader, TensorDataset\n", "\n", "# Load the SAT-6 dataset\n", "train_data = sio.loadmat('./SAT-4_and_SAT-6_datasets/sat-6-full.mat')\n", "train_x = torch.from_numpy(train_data['train_x']).float().permute(3, 2, 0, 1)\n", "train_y = torch.from_numpy(train_data['train_y']).float().permute(1, 0)\n", "print('train_x.shape: ',train_x.shape)\n", "print('train_y.shape: ',train_y.shape)\n", "\n", "test_data = sio.loadmat('./SAT-4_and_SAT-6_datasets/sat-6-full.mat')\n", "test_x = torch.from_numpy(test_data['test_x']).float().permute(3, 2, 0, 1)\n", "test_y = torch.from_numpy(test_data['test_y']).float().permute(1, 0)\n", "\n", "# Define the data transformations. \n", "transform = transforms.Compose([\n", " transforms.Resize((64, 64)),\n", " transforms.ToTensor(),\n", " transforms.Normalize((0.5,), (0.5,))\n", "])\n", "\n", "# Create PyTorch datasets and data loaders\n", "train_dataset = TensorDataset(train_x, train_y)\n", "train_loader = DataLoader(train_dataset, batch_size=64, shuffle=True)\n", "\n", "test_dataset = TensorDataset(test_x, test_y)\n", "test_loader = DataLoader(test_dataset, batch_size=64, shuffle=False)\n", "\n", "# Define the CNN architecture\n", "class CNN(nn.Module):\n", " def __init__(self):\n", " super(CNN, self).__init__()\n", " self.conv1 = nn.Conv2d(4, 32, kernel_size=3, padding=1)\n", " self.conv2 = nn.Conv2d(32, 64, kernel_size=3, padding=1)\n", " self.conv3 = nn.Conv2d(64, 128, kernel_size=3, padding=1)\n", " self.pool = nn.MaxPool2d(kernel_size=2, stride=2)\n", " self.fc1 = nn.Linear(128 * 3 * 3, 512) #To fix the code, change this to 128*3*3 instead of (128 * 16 * 16)\n", " self.fc2 = nn.Linear(512, 6)\n", "\n", " def forward(self, x):\n", " x = self.pool(torch.relu(self.conv1(x)))\n", " x = self.pool(torch.relu(self.conv2(x)))\n", " x = self.pool(torch.relu(self.conv3(x)))\n", " x = x.view(-1, 128 * 3 * 3) # To fix this line, just use 128*3*3 instead of 128*16*16\n", " x = torch.relu(self.fc1(x))\n", " x = self.fc2(x)\n", " return x\n", "\n", "# Initialize the CNN and define the loss function and optimizer\n", "cnn = CNN()\n", "criterion = nn.CrossEntropyLoss()\n", "optimizer = optim.Adam(cnn.parameters(), lr=0.001)\n", "\n", "# Train the CNN\n", "for epoch in range(10):\n", " running_loss = 0.0\n", " for i, data in enumerate(train_loader, 0):\n", " inputs, labels = data\n", " optimizer.zero_grad()\n", " outputs = cnn(inputs)\n", " loss = criterion(outputs, labels)\n", " loss.backward()\n", " optimizer.step()\n", " running_loss += loss.item()\n", " print('Epoch %d loss: %.3f' % (epoch + 1, running_loss / len(train_loader)))\n", "\n", "# Test the CNN\n", "correct = 0\n", "total = 0\n", "with torch.no_grad():\n", " for data in test_loader:\n", " inputs, labels = data\n", " outputs = cnn(inputs)\n", " _, predicted = torch.max(outputs.data, 1)\n", " total += labels.size(0)\n", " correct += (predicted == labels).sum().item()\n", "\n", "print('Accuracy on the test set: %d %%' % (100 * correct / total))" ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "Note that the `transform` operation is not being used. This is the because the `TensorDataset` doesn't accept a transformation to normalize the data. GPT made a mistake here. We could fix it or keep asking it to fix... So let's just fix it for now. Note how slowly it is though. \n", "\n", "I asked GPT to make it run in GPU:\n", "## Prompt: Can you make this code run in GPU? \n", "Here is what I got (after applying the fixes done above):" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1 loss: 0.097\n", "Epoch 2 loss: 0.058\n", "Epoch 3 loss: 0.048\n", "Epoch 4 loss: 0.044\n", "Epoch 5 loss: 0.041\n", "Epoch 6 loss: 0.041\n", "Epoch 7 loss: 0.036\n", "Epoch 8 loss: 0.037\n", "Epoch 9 loss: 0.039\n", "Epoch 10 loss: 0.036\n" ] }, { "ename": "RuntimeError", "evalue": "The size of tensor a (64) must match the size of tensor b (6) at non-singleton dimension 1", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mRuntimeError\u001b[0m Traceback (most recent call last)", "Cell \u001b[0;32mIn[18], line 80\u001b[0m\n\u001b[1;32m 78\u001b[0m _, predicted \u001b[38;5;241m=\u001b[39m torch\u001b[38;5;241m.\u001b[39mmax(outputs\u001b[38;5;241m.\u001b[39mdata, \u001b[38;5;241m1\u001b[39m)\n\u001b[1;32m 79\u001b[0m total \u001b[38;5;241m+\u001b[39m\u001b[38;5;241m=\u001b[39m labels\u001b[38;5;241m.\u001b[39msize(\u001b[38;5;241m0\u001b[39m)\n\u001b[0;32m---> 80\u001b[0m correct \u001b[38;5;241m+\u001b[39m\u001b[38;5;241m=\u001b[39m (\u001b[43mpredicted\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m==\u001b[39;49m\u001b[43m \u001b[49m\u001b[43mlabels\u001b[49m)\u001b[38;5;241m.\u001b[39msum()\u001b[38;5;241m.\u001b[39mitem()\n\u001b[1;32m 82\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mAccuracy on the test set: \u001b[39m\u001b[38;5;132;01m%d\u001b[39;00m\u001b[38;5;124m \u001b[39m\u001b[38;5;132;01m%%\u001b[39;00m\u001b[38;5;124m'\u001b[39m \u001b[38;5;241m%\u001b[39m (\u001b[38;5;241m100\u001b[39m \u001b[38;5;241m*\u001b[39m correct \u001b[38;5;241m/\u001b[39m total))\n", "\u001b[0;31mRuntimeError\u001b[0m: The size of tensor a (64) must match the size of tensor b (6) at non-singleton dimension 1" ] } ], "source": [ "import scipy.io as sio\n", "import torch\n", "import torch.nn as nn\n", "import torch.optim as optim\n", "import torchvision.transforms as transforms\n", "from torch.utils.data import DataLoader, TensorDataset\n", "\n", "# Load the SAT-6 dataset\n", "train_data = sio.loadmat('./SAT-4_and_SAT-6_datasets/sat-6-full.mat')\n", "train_x = torch.from_numpy(train_data['train_x']).float().permute(3, 2, 0, 1)\n", "train_y = torch.from_numpy(train_data['train_y']).float().permute(1, 0)\n", "\n", "test_data = sio.loadmat('./SAT-4_and_SAT-6_datasets/sat-6-full.mat')\n", "test_x = torch.from_numpy(test_data['test_x']).float().permute(3, 2, 0, 1)\n", "test_y = torch.from_numpy(test_data['test_y']).float().permute(1, 0)\n", "\n", "# Define the data transformations\n", "transform = transforms.Compose([\n", " transforms.Resize((64, 64)),\n", " transforms.ToTensor(),\n", " transforms.Normalize((0.5,), (0.5,))\n", "])\n", "\n", "# Create PyTorch datasets and data loaders\n", "train_dataset = TensorDataset(train_x, train_y)\n", "train_loader = DataLoader(train_dataset, batch_size=64, shuffle=True)\n", "\n", "test_dataset = TensorDataset(test_x, test_y)\n", "test_loader = DataLoader(test_dataset, batch_size=64, shuffle=False)\n", "\n", "# Define the CNN architecture\n", "class CNN(nn.Module):\n", " def __init__(self):\n", " super(CNN, self).__init__()\n", " self.conv1 = nn.Conv2d(4, 32, kernel_size=3, padding=1)\n", " self.conv2 = nn.Conv2d(32, 64, kernel_size=3, padding=1)\n", " self.conv3 = nn.Conv2d(64, 128, kernel_size=3, padding=1)\n", " self.pool = nn.MaxPool2d(kernel_size=2, stride=2)\n", " self.fc1 = nn.Linear(128 * 3 * 3, 512)\n", " self.fc2 = nn.Linear(512, 6)\n", "\n", " def forward(self, x):\n", " x = self.pool(torch.relu(self.conv1(x)))\n", " x = self.pool(torch.relu(self.conv2(x)))\n", " x = self.pool(torch.relu(self.conv3(x)))\n", " x = x.view(-1, 128 * 3 * 3)\n", " x = torch.relu(self.fc1(x))\n", " x = self.fc2(x)\n", " return x\n", "\n", "# Initialize the CNN and define the loss function and optimizer\n", "cnn = CNN().to('cuda')\n", "criterion = nn.CrossEntropyLoss()\n", "optimizer = optim.Adam(cnn.parameters(), lr=0.001)\n", "\n", "# Train the CNN\n", "for epoch in range(10):\n", " running_loss = 0.0\n", " for i, data in enumerate(train_loader, 0):\n", " inputs, labels = data\n", " inputs, labels = inputs.to('cuda'), labels.to('cuda')\n", " optimizer.zero_grad()\n", " outputs = cnn(inputs)\n", " loss = criterion(outputs, labels)\n", " loss.backward()\n", " optimizer.step()\n", " running_loss += loss.item()\n", " print('Epoch %d loss: %.3f' % (epoch + 1, running_loss / len(train_loader)))\n", "\n", "# Test the CNN\n", "correct = 0\n", "total = 0\n", "with torch.no_grad():\n", " for data in test_loader:\n", " inputs, labels = data\n", " inputs, labels = inputs.to('cuda'), labels.to('cuda')\n", " outputs = cnn(inputs)\n", " _, predicted = torch.max(outputs.data, 1)\n", " total += labels.size(0)\n", " correct += (predicted == labels).sum().item()\n", "\n", "print('Accuracy on the test set: %d %%' % (100 * correct / total))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that GPT forgot that `labels` is vector. So let's help it" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "torch.Size([64])\n", "torch.Size([64, 6])\n" ] } ], "source": [ "print(predicted.shape)\n", "print(labels.shape)" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Accuracy on the test set: 99 %\n" ] } ], "source": [ "# Test the CNN\n", "correct = 0\n", "total = 0\n", "with torch.no_grad():\n", " for data in test_loader:\n", " inputs, labels = data\n", " inputs, labels = inputs.to('cuda'), labels.to('cuda')\n", " outputs = cnn(inputs)\n", " _, predicted = torch.max(outputs.data, 1)\n", " total += labels.size(0)\n", " correct += (predicted == torch.argmax(labels,axis=1)).sum().item()\n", "\n", "print('Accuracy on the test set: %d %%' % (100 * correct / total))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Ok, 99% of accuracy is not bad at all, but if we want to use this trained model, we will want to save checkpoints based on the validation loss. So let's ask GPT to do it" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Prompt: \"Can you please save the best checkpoint according to the validation loss during training?\"" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1 loss: 0.112\n" ] }, { "ename": "ValueError", "evalue": "Classification metrics can't handle a mix of multilabel-indicator and multiclass targets", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", "Cell \u001b[0;32mIn[12], line 99\u001b[0m\n\u001b[1;32m 97\u001b[0m valid_labels\u001b[38;5;241m.\u001b[39mextend(labels\u001b[38;5;241m.\u001b[39mcpu()\u001b[38;5;241m.\u001b[39mnumpy())\n\u001b[1;32m 98\u001b[0m valid_loss \u001b[38;5;241m/\u001b[39m\u001b[38;5;241m=\u001b[39m \u001b[38;5;28mlen\u001b[39m(test_loader)\n\u001b[0;32m---> 99\u001b[0m valid_acc \u001b[38;5;241m=\u001b[39m \u001b[43maccuracy_score\u001b[49m\u001b[43m(\u001b[49m\u001b[43mvalid_labels\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mvalid_preds\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;66;03m#Original with \u001b[39;00m\n\u001b[1;32m 100\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mValidation loss: \u001b[39m\u001b[38;5;132;01m%.3f\u001b[39;00m\u001b[38;5;124m'\u001b[39m \u001b[38;5;241m%\u001b[39m valid_loss)\n\u001b[1;32m 101\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mValidation accuracy: \u001b[39m\u001b[38;5;132;01m%.3f\u001b[39;00m\u001b[38;5;124m'\u001b[39m \u001b[38;5;241m%\u001b[39m valid_acc)\n", "File \u001b[0;32m/gpfs/gibbs/project/dijk/ahf38/conda_envs/geo_comp2/lib/python3.8/site-packages/sklearn/utils/_param_validation.py:192\u001b[0m, in \u001b[0;36mvalidate_params..decorator..wrapper\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 187\u001b[0m validate_parameter_constraints(\n\u001b[1;32m 188\u001b[0m parameter_constraints, params, caller_name\u001b[38;5;241m=\u001b[39mfunc\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__qualname__\u001b[39m\n\u001b[1;32m 189\u001b[0m )\n\u001b[1;32m 191\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 192\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfunc\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 193\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m InvalidParameterError \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 194\u001b[0m \u001b[38;5;66;03m# When the function is just a wrapper around an estimator, we allow\u001b[39;00m\n\u001b[1;32m 195\u001b[0m \u001b[38;5;66;03m# the function to delegate validation to the estimator, but we replace\u001b[39;00m\n\u001b[1;32m 196\u001b[0m \u001b[38;5;66;03m# the name of the estimator by the name of the function in the error\u001b[39;00m\n\u001b[1;32m 197\u001b[0m \u001b[38;5;66;03m# message to avoid confusion.\u001b[39;00m\n\u001b[1;32m 198\u001b[0m msg \u001b[38;5;241m=\u001b[39m re\u001b[38;5;241m.\u001b[39msub(\n\u001b[1;32m 199\u001b[0m \u001b[38;5;124mr\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mparameter of \u001b[39m\u001b[38;5;124m\\\u001b[39m\u001b[38;5;124mw+ must be\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 200\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mparameter of \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mfunc\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__qualname__\u001b[39m\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m must be\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 201\u001b[0m \u001b[38;5;28mstr\u001b[39m(e),\n\u001b[1;32m 202\u001b[0m )\n", "File \u001b[0;32m/gpfs/gibbs/project/dijk/ahf38/conda_envs/geo_comp2/lib/python3.8/site-packages/sklearn/metrics/_classification.py:221\u001b[0m, in \u001b[0;36maccuracy_score\u001b[0;34m(y_true, y_pred, normalize, sample_weight)\u001b[0m\n\u001b[1;32m 155\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"Accuracy classification score.\u001b[39;00m\n\u001b[1;32m 156\u001b[0m \n\u001b[1;32m 157\u001b[0m \u001b[38;5;124;03mIn multilabel classification, this function computes subset accuracy:\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 217\u001b[0m \u001b[38;5;124;03m0.5\u001b[39;00m\n\u001b[1;32m 218\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 220\u001b[0m \u001b[38;5;66;03m# Compute accuracy for each possible representation\u001b[39;00m\n\u001b[0;32m--> 221\u001b[0m y_type, y_true, y_pred \u001b[38;5;241m=\u001b[39m \u001b[43m_check_targets\u001b[49m\u001b[43m(\u001b[49m\u001b[43my_true\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43my_pred\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 222\u001b[0m check_consistent_length(y_true, y_pred, sample_weight)\n\u001b[1;32m 223\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m y_type\u001b[38;5;241m.\u001b[39mstartswith(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mmultilabel\u001b[39m\u001b[38;5;124m\"\u001b[39m):\n", "File \u001b[0;32m/gpfs/gibbs/project/dijk/ahf38/conda_envs/geo_comp2/lib/python3.8/site-packages/sklearn/metrics/_classification.py:95\u001b[0m, in \u001b[0;36m_check_targets\u001b[0;34m(y_true, y_pred)\u001b[0m\n\u001b[1;32m 92\u001b[0m y_type \u001b[38;5;241m=\u001b[39m {\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mmulticlass\u001b[39m\u001b[38;5;124m\"\u001b[39m}\n\u001b[1;32m 94\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(y_type) \u001b[38;5;241m>\u001b[39m \u001b[38;5;241m1\u001b[39m:\n\u001b[0;32m---> 95\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\n\u001b[1;32m 96\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mClassification metrics can\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mt handle a mix of \u001b[39m\u001b[38;5;132;01m{0}\u001b[39;00m\u001b[38;5;124m and \u001b[39m\u001b[38;5;132;01m{1}\u001b[39;00m\u001b[38;5;124m targets\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;241m.\u001b[39mformat(\n\u001b[1;32m 97\u001b[0m type_true, type_pred\n\u001b[1;32m 98\u001b[0m )\n\u001b[1;32m 99\u001b[0m )\n\u001b[1;32m 101\u001b[0m \u001b[38;5;66;03m# We can't have more than one value on y_type => The set is no more needed\u001b[39;00m\n\u001b[1;32m 102\u001b[0m y_type \u001b[38;5;241m=\u001b[39m y_type\u001b[38;5;241m.\u001b[39mpop()\n", "\u001b[0;31mValueError\u001b[0m: Classification metrics can't handle a mix of multilabel-indicator and multiclass targets" ] } ], "source": [ "import scipy.io as sio\n", "import torch\n", "import torch.nn as nn\n", "import torch.optim as optim\n", "import torchvision.transforms as transforms\n", "from torch.utils.data import DataLoader, TensorDataset\n", "from torch.utils.tensorboard import SummaryWriter\n", "from torch.optim.lr_scheduler import ReduceLROnPlateau\n", "from sklearn.metrics import accuracy_score\n", "import numpy as np\n", "\n", "# Load the SAT-6 dataset\n", "train_data = sio.loadmat('./SAT-4_and_SAT-6_datasets/sat-6-full.mat')\n", "train_x = torch.from_numpy(train_data['train_x']).float().permute(3, 2, 0, 1) #Manual fix \n", "train_y = torch.from_numpy(train_data['train_y']).float().permute(1, 0)\n", "\n", "test_data = sio.loadmat('./SAT-4_and_SAT-6_datasets/sat-6-full.mat')\n", "test_x = torch.from_numpy(test_data['test_x']).float().permute(3, 2, 0, 1) #Manual fix\n", "test_y = torch.from_numpy(test_data['test_y']).float().permute(1, 0)\n", "\n", "# Define the data transformations\n", "transform = transforms.Compose([\n", " transforms.Resize((64, 64)),\n", " transforms.ToTensor(),\n", " transforms.Normalize((0.5,), (0.5,))\n", "])\n", "\n", "# Create PyTorch datasets and data loaders\n", "train_dataset = TensorDataset(train_x, train_y)\n", "train_loader = DataLoader(train_dataset, batch_size=64, shuffle=True)\n", "\n", "test_dataset = TensorDataset(test_x, test_y)\n", "test_loader = DataLoader(test_dataset, batch_size=64, shuffle=False)\n", "\n", "# Define the CNN architecture\n", "class CNN(nn.Module):\n", " def __init__(self):\n", " super(CNN, self).__init__()\n", " self.conv1 = nn.Conv2d(4, 32, kernel_size=3, padding=1)\n", " self.conv2 = nn.Conv2d(32, 64, kernel_size=3, padding=1)\n", " self.conv3 = nn.Conv2d(64, 128, kernel_size=3, padding=1)\n", " self.pool = nn.MaxPool2d(kernel_size=2, stride=2)\n", " self.fc1 = nn.Linear(128 * 3 * 3, 512) # Manual fix \n", " self.fc2 = nn.Linear(512, 6)\n", "\n", " def forward(self, x):\n", " x = self.pool(torch.relu(self.conv1(x)))\n", " x = self.pool(torch.relu(self.conv2(x)))\n", " x = self.pool(torch.relu(self.conv3(x)))\n", " x = x.view(-1, 128 * 3 * 3) #Manual fix\n", " x = torch.relu(self.fc1(x))\n", " x = self.fc2(x)\n", " return x\n", "\n", "# Initialize the CNN and define the loss function and optimizer\n", "cnn = CNN().to('cuda')\n", "criterion = nn.CrossEntropyLoss()\n", "optimizer = optim.Adam(cnn.parameters(), lr=0.001)\n", "scheduler = ReduceLROnPlateau(optimizer, mode='min', factor=0.1, patience=5, verbose=True)\n", "\n", "# Define the TensorBoard writer\n", "writer = SummaryWriter()\n", "\n", "# Define the ModelCheckpoint callback\n", "best_loss = np.inf\n", "checkpoint_path = './best_model.pth'\n", "checkpoint = {'epoch': None, 'model_state_dict': None, 'optimizer_state_dict': None, 'loss': None}\n", "\n", "# Train the CNN\n", "for epoch in range(10):\n", " running_loss = 0.0\n", " for i, data in enumerate(train_loader, 0):\n", " inputs, labels = data\n", " inputs, labels = inputs.to('cuda'), labels.to('cuda')\n", " optimizer.zero_grad()\n", " outputs = cnn(inputs)\n", " loss = criterion(outputs, labels)\n", " loss.backward()\n", " optimizer.step()\n", " running_loss += loss.item()\n", " epoch_loss = running_loss / len(train_loader)\n", " print('Epoch %d loss: %.3f' % (epoch + 1, epoch_loss))\n", " writer.add_scalar('Loss/train', epoch_loss, epoch)\n", " scheduler.step(epoch_loss)\n", " with torch.no_grad():\n", " valid_loss = 0.0\n", " valid_preds = []\n", " valid_labels = []\n", " for data in test_loader:\n", " inputs, labels = data\n", " inputs, labels = inputs.to('cuda'), labels.to('cuda')\n", " outputs = cnn(inputs)\n", " loss = criterion(outputs, labels)\n", " valid_loss += loss.item()\n", " _, predicted = torch.max(outputs.data, 1)\n", " valid_preds.extend(predicted.cpu().numpy())\n", " valid_labels.extend(labels.cpu().numpy())\n", " valid_loss /= len(test_loader)\n", " valid_acc = accuracy_score(valid_labels, valid_preds) #Original with \n", " print('Validation loss: %.3f' % valid_loss)\n", " print('Validation accuracy: %.3f' % valid_acc)\n", " writer.add_scalar('Loss/valid', valid_loss, epoch)\n", " writer.add_scalar('Accuracy/valid', valid_acc, epoch)\n", " if valid_loss < best_loss:\n", " best_loss = valid_loss\n", " checkpoint['epoch'] = epoch\n", " checkpoint['model_state_dict'] = cnn.state_dict()\n", " checkpoint['optimizer_state_dict'] = optimizer.state_dict()\n", " checkpoint['loss'] = best_loss\n", " torch.save(checkpoint, checkpoint_path)\n", "\n", "# Test the CNN\n", "correct = 0\n", "total = 0\n", "with torch.no_grad():\n", " for data in test_loader:\n", " inputs, labels = data\n", " inputs, labels = inputs.to('cuda'), labels.to('cuda')\n", " outputs = cnn(inputs)\n", " _, predicted = torch.max(outputs.data, 1)\n", " total += labels.size(0)\n", " correct += (predicted == torch.argmax(labels,axis=1)).sum().item()\n", "\n", "print('Accuracy on the test set: %d %%' % (100 * correct / total))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Once again, GPT forgot to cast the correct type of the variable. Let's correct it for them...\n", "Note: did you notice GPT included a learning rate scheduler without me asking for it? " ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1 loss: 0.121\n", "Validation loss: 0.066\n", "Validation accuracy: 0.976\n", "Epoch 2 loss: 0.065\n", "Validation loss: 0.045\n", "Validation accuracy: 0.985\n", "Epoch 3 loss: 0.055\n", "Validation loss: 0.048\n", "Validation accuracy: 0.984\n", "Epoch 4 loss: 0.050\n", "Validation loss: 0.038\n", "Validation accuracy: 0.987\n", "Epoch 5 loss: 0.047\n", "Validation loss: 0.049\n", "Validation accuracy: 0.982\n", "Epoch 6 loss: 0.044\n", "Validation loss: 0.036\n", "Validation accuracy: 0.988\n", "Epoch 7 loss: 0.040\n", "Validation loss: 0.044\n", "Validation accuracy: 0.985\n", "Epoch 8 loss: 0.039\n", "Validation loss: 0.152\n", "Validation accuracy: 0.965\n", "Epoch 9 loss: 0.041\n", "Validation loss: 0.048\n", "Validation accuracy: 0.985\n", "Epoch 10 loss: 0.045\n", "Validation loss: 0.053\n", "Validation accuracy: 0.983\n", "Accuracy on the test set: 98 %\n" ] } ], "source": [ "import scipy.io as sio\n", "import torch\n", "import torch.nn as nn\n", "import torch.optim as optim\n", "import torchvision.transforms as transforms\n", "from torch.utils.data import DataLoader, TensorDataset\n", "from torch.utils.tensorboard import SummaryWriter\n", "from torch.optim.lr_scheduler import ReduceLROnPlateau\n", "from sklearn.metrics import accuracy_score\n", "import numpy as np\n", "\n", "# Load the SAT-6 dataset\n", "train_data = sio.loadmat('./SAT-4_and_SAT-6_datasets/sat-6-full.mat')\n", "train_x = torch.from_numpy(train_data['train_x']).float().permute(3, 2, 0, 1) #Manual fix \n", "train_y = torch.from_numpy(train_data['train_y']).float().permute(1, 0)\n", "\n", "test_data = sio.loadmat('./SAT-4_and_SAT-6_datasets/sat-6-full.mat')\n", "test_x = torch.from_numpy(test_data['test_x']).float().permute(3, 2, 0, 1) #Manual fix\n", "test_y = torch.from_numpy(test_data['test_y']).float().permute(1, 0)\n", "\n", "# Define the data transformations\n", "transform = transforms.Compose([\n", " transforms.Resize((64, 64)),\n", " transforms.ToTensor(),\n", " transforms.Normalize((0.5,), (0.5,))\n", "])\n", "\n", "# Create PyTorch datasets and data loaders\n", "train_dataset = TensorDataset(train_x, train_y)\n", "train_loader = DataLoader(train_dataset, batch_size=64, shuffle=True)\n", "\n", "test_dataset = TensorDataset(test_x, test_y)\n", "test_loader = DataLoader(test_dataset, batch_size=64, shuffle=False)\n", "\n", "# Define the CNN architecture\n", "class CNN(nn.Module):\n", " def __init__(self):\n", " super(CNN, self).__init__()\n", " self.conv1 = nn.Conv2d(4, 32, kernel_size=3, padding=1)\n", " self.conv2 = nn.Conv2d(32, 64, kernel_size=3, padding=1)\n", " self.conv3 = nn.Conv2d(64, 128, kernel_size=3, padding=1)\n", " self.pool = nn.MaxPool2d(kernel_size=2, stride=2)\n", " self.fc1 = nn.Linear(128 * 3 * 3, 512) # Manual fix \n", " self.fc2 = nn.Linear(512, 6)\n", "\n", " def forward(self, x):\n", " x = self.pool(torch.relu(self.conv1(x)))\n", " x = self.pool(torch.relu(self.conv2(x)))\n", " x = self.pool(torch.relu(self.conv3(x)))\n", " x = x.view(-1, 128 * 3 * 3) #Manual fix\n", " x = torch.relu(self.fc1(x))\n", " x = self.fc2(x)\n", " return x\n", "\n", "# Initialize the CNN and define the loss function and optimizer\n", "cnn = CNN().to('cuda')\n", "criterion = nn.CrossEntropyLoss()\n", "optimizer = optim.Adam(cnn.parameters(), lr=0.001)\n", "scheduler = ReduceLROnPlateau(optimizer, mode='min', factor=0.1, patience=5, verbose=True)\n", "\n", "# Define the TensorBoard writer\n", "writer = SummaryWriter()\n", "\n", "# Define the ModelCheckpoint callback\n", "best_loss = np.inf\n", "checkpoint_path = './best_model.pth'\n", "checkpoint = {'epoch': None, 'model_state_dict': None, 'optimizer_state_dict': None, 'loss': None}\n", "\n", "# Train the CNN\n", "for epoch in range(10):\n", " running_loss = 0.0\n", " for i, data in enumerate(train_loader, 0):\n", " inputs, labels = data\n", " inputs, labels = inputs.to('cuda'), labels.to('cuda')\n", " optimizer.zero_grad()\n", " outputs = cnn(inputs)\n", " loss = criterion(outputs, labels)\n", " loss.backward()\n", " optimizer.step()\n", " running_loss += loss.item()\n", " epoch_loss = running_loss / len(train_loader)\n", " print('Epoch %d loss: %.3f' % (epoch + 1, epoch_loss))\n", " writer.add_scalar('Loss/train', epoch_loss, epoch)\n", " scheduler.step(epoch_loss)\n", " with torch.no_grad():\n", " valid_loss = 0.0\n", " valid_preds = []\n", " valid_labels = []\n", " for data in test_loader:\n", " inputs, labels = data\n", " inputs, labels = inputs.to('cuda'), labels.to('cuda')\n", " outputs = cnn(inputs)\n", " loss = criterion(outputs, labels)\n", " valid_loss += loss.item()\n", " _, predicted = torch.max(outputs.data, 1)\n", " valid_preds.extend(predicted.cpu().numpy())\n", " valid_labels.extend(labels.cpu().numpy())\n", " valid_loss /= len(test_loader)\n", " # valid_acc = accuracy_score(valid_labels, valid_preds) #Original with bug \n", " valid_acc = accuracy_score(torch.argmax(torch.Tensor(valid_labels),axis=1), valid_preds) #Manual fix\n", " print('Validation loss: %.3f' % valid_loss)\n", " print('Validation accuracy: %.3f' % valid_acc)\n", " writer.add_scalar('Loss/valid', valid_loss, epoch)\n", " writer.add_scalar('Accuracy/valid', valid_acc, epoch)\n", " if valid_loss < best_loss:\n", " best_loss = valid_loss\n", " checkpoint['epoch'] = epoch\n", " checkpoint['model_state_dict'] = cnn.state_dict()\n", " checkpoint['optimizer_state_dict'] = optimizer.state_dict()\n", " checkpoint['loss'] = best_loss\n", " torch.save(checkpoint, checkpoint_path)\n", "\n", "# Test the CNN\n", "correct = 0\n", "total = 0\n", "with torch.no_grad():\n", " for data in test_loader:\n", " inputs, labels = data\n", " inputs, labels = inputs.to('cuda'), labels.to('cuda')\n", " outputs = cnn(inputs)\n", " _, predicted = torch.max(outputs.data, 1)\n", " total += labels.size(0)\n", " correct += (predicted == torch.argmax(labels,axis=1)).sum().item() ##Manual fix\n", "\n", "print('Accuracy on the test set: %d %%' % (100 * correct / total))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It would be nice to have these logs plotted to wandb. Let's ask GPT to do that for us.\n", "\n", "## Prompt: Can you log accuracy and loss to wandb during training?" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import scipy.io as sio\n", "import torch\n", "import torch.nn as nn\n", "import torch.optim as optim\n", "import torchvision.transforms as transforms\n", "from torch.utils.data import DataLoader, TensorDataset\n", "from torch.utils.tensorboard import SummaryWriter\n", "from torch.optim.lr_scheduler import ReduceLROnPlateau\n", "from sklearn.metrics import accuracy_score\n", "import numpy as np\n", "import wandb\n", "\n", "# Initialize wandb\n", "# wandb.init(project='my-project-name', entity='my-entity-name') #Original \n", "wandb.init(project='CNN_with_GPT', entity='ahof1704') #Original \n", "\n", "# Load the SAT-6 dataset\n", "train_data = sio.loadmat('./SAT-4_and_SAT-6_datasets/sat-6-full.mat')\n", "train_x = torch.from_numpy(train_data['train_x']).float().permute(3, 2, 0, 1) #Manual fix\n", "train_y = torch.from_numpy(train_data['train_y']).float().permute(1, 0)\n", "\n", "test_data = sio.loadmat('./SAT-4_and_SAT-6_datasets/sat-6-full.mat')\n", "test_x = torch.from_numpy(test_data['test_x']).float().permute(3, 2, 0, 1) #Manual fix\n", "test_y = torch.from_numpy(test_data['test_y']).float().permute(1, 0)\n", "\n", "# Define the data transformations\n", "transform = transforms.Compose([\n", " transforms.Resize((64, 64)),\n", " transforms.ToTensor(),\n", " transforms.Normalize((0.5,), (0.5,))\n", "])\n", "\n", "# Create PyTorch datasets and data loaders\n", "train_dataset = TensorDataset(train_x, train_y)\n", "train_loader = DataLoader(train_dataset, batch_size=64, shuffle=True)\n", "\n", "test_dataset = TensorDataset(test_x, test_y)\n", "test_loader = DataLoader(test_dataset, batch_size=64, shuffle=False)\n", "\n", "# Define the CNN architecture\n", "class CNN(nn.Module):\n", " def __init__(self):\n", " super(CNN, self).__init__()\n", " self.conv1 = nn.Conv2d(4, 32, kernel_size=3, padding=1)\n", " self.conv2 = nn.Conv2d(32, 64, kernel_size=3, padding=1)\n", " self.conv3 = nn.Conv2d(64, 128, kernel_size=3, padding=1)\n", " self.pool = nn.MaxPool2d(kernel_size=2, stride=2)\n", " self.fc1 = nn.Linear(128 * 3 * 3, 512) # manual fix\n", " self.fc2 = nn.Linear(512, 6)\n", "\n", " def forward(self, x):\n", " x = self.pool(torch.relu(self.conv1(x)))\n", " x = self.pool(torch.relu(self.conv2(x)))\n", " x = self.pool(torch.relu(self.conv3(x)))\n", " x = x.view(-1, 128 * 3 * 3) # manual fix\n", " x = torch.relu(self.fc1(x))\n", " x = self.fc2(x)\n", " return x\n", "\n", "# Initialize the CNN and define the loss function and optimizer\n", "cnn = CNN().to('cuda')\n", "criterion = nn.CrossEntropyLoss()\n", "optimizer = optim.Adam(cnn.parameters(), lr=0.001)\n", "scheduler = ReduceLROnPlateau(optimizer, mode='min', factor=0.1, patience=5, verbose=True)\n", "\n", "# Define the TensorBoard writer\n", "writer = SummaryWriter()\n", "\n", "# Train the CNN\n", "for epoch in range(10):\n", " running_loss = 0.0\n", " for i, data in enumerate(train_loader, 0):\n", " inputs, labels = data\n", " inputs, labels = inputs.to('cuda'), labels.to('cuda')\n", " optimizer.zero_grad()\n", " outputs = cnn(inputs)\n", " loss = criterion(outputs, labels)\n", " loss.backward()\n", " optimizer.step()\n", " running_loss += loss.item()\n", " epoch_loss = running_loss / len(train_loader)\n", " print('Epoch %d loss: %.3f' % (epoch + 1, epoch_loss))\n", " writer.add_scalar('Loss/train', epoch_loss, epoch)\n", " wandb.log({'Loss/train': epoch_loss})\n", " scheduler.step(epoch_loss)\n", " with torch.no_grad():\n", " valid_loss = 0.0\n", " valid_preds = []\n", " valid_labels = []\n", " for data in test_loader:\n", " inputs, labels = data\n", " inputs, labels = inputs.to('cuda'), labels.to('cuda')\n", " outputs = cnn(inputs)\n", " loss = criterion(outputs, labels)\n", " valid_loss += loss.item()\n", " _, predicted = torch.max(outputs.data, 1)\n", " valid_preds.extend(predicted.cpu().numpy())\n", " valid_labels.extend(labels.cpu().numpy())\n", " valid_loss /= len(test_loader)\n", " valid_acc = accuracy_score(valid_labels, valid_preds)\n", " print('Validation loss: %.3f' % valid_loss)\n", " print('Validation accuracy: %.3f' % valid_acc)\n", " writer.add_scalar('Loss/valid', valid_loss, epoch)\n", " writer.add_scalar('Accuracy/valid', valid_acc, epoch)\n", " wandb.log({'Loss/valid': valid_loss, 'Accuracy/valid': valid_acc})" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now GPT removed the script for saving the checkpoints... Come on GPT, you can do better! Let's train again\n", "\n" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "tags": [] }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Failed to detect the name of this notebook, you can set it manually with the WANDB_NOTEBOOK_NAME environment variable to enable code saving.\n", "\u001b[34m\u001b[1mwandb\u001b[0m: Currently logged in as: \u001b[33mahof1704\u001b[0m. Use \u001b[1m`wandb login --relogin`\u001b[0m to force relogin\n" ] }, { "data": { "text/html": [ "Tracking run with wandb version 0.15.3" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "Run data is saved locally in /vast/palmer/home.mccleary/ahf38/Documents/geo_comp_offline/2022/wandb/run-20230605_063218-km4qpvn8" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "Syncing run lucky-capybara-1 to Weights & Biases (docs)
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ " View project at https://wandb.ai/ahof1704/CNN_with_GPT" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ " View run at https://wandb.ai/ahof1704/CNN_with_GPT/runs/km4qpvn8" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1 loss: 0.115\n", "Validation loss: 0.061\n", "Validation accuracy: 0.978\n", "Epoch 2 loss: 0.063\n", "Validation loss: 0.062\n", "Validation accuracy: 0.979\n", "Epoch 3 loss: 0.054\n", "Validation loss: 0.039\n", "Validation accuracy: 0.985\n", "Epoch 4 loss: 0.047\n", "Validation loss: 0.056\n", "Validation accuracy: 0.984\n", "Epoch 5 loss: 0.045\n", "Validation loss: 0.048\n", "Validation accuracy: 0.983\n", "Epoch 6 loss: 0.041\n", "Validation loss: 0.041\n", "Validation accuracy: 0.987\n", "Epoch 7 loss: 0.041\n", "Validation loss: 0.042\n", "Validation accuracy: 0.988\n", "Epoch 8 loss: 0.044\n", "Validation loss: 0.051\n", "Validation accuracy: 0.983\n", "Epoch 9 loss: 0.040\n", "Validation loss: 0.041\n", "Validation accuracy: 0.987\n", "Epoch 10 loss: 0.037\n", "Validation loss: 0.028\n", "Validation accuracy: 0.991\n" ] } ], "source": [ "import scipy.io as sio\n", "import torch\n", "import torch.nn as nn\n", "import torch.optim as optim\n", "import torchvision.transforms as transforms\n", "from torch.utils.data import DataLoader, TensorDataset\n", "from torch.utils.tensorboard import SummaryWriter\n", "from torch.optim.lr_scheduler import ReduceLROnPlateau\n", "from sklearn.metrics import accuracy_score\n", "import numpy as np\n", "import wandb\n", "\n", "# Initialize wandb\n", "wandb.init(project='CNN_with_GPT', entity='ahof1704')\n", "\n", "# Load the SAT-6 dataset\n", "train_data = sio.loadmat('./SAT-4_and_SAT-6_datasets/sat-6-full.mat')\n", "train_x = torch.from_numpy(train_data['train_x']).float().permute(3, 2, 0, 1) #Manual fix\n", "train_y = torch.from_numpy(train_data['train_y']).float().permute(1, 0)\n", "\n", "test_data = sio.loadmat('./SAT-4_and_SAT-6_datasets/sat-6-full.mat')\n", "test_x = torch.from_numpy(test_data['test_x']).float().permute(3, 2, 0, 1) #Manual fix\n", "test_y = torch.from_numpy(test_data['test_y']).float().permute(1, 0)\n", "\n", "# Define the data transformations\n", "transform = transforms.Compose([\n", " transforms.Resize((64, 64)),\n", " transforms.ToTensor(),\n", " transforms.Normalize((0.5,), (0.5,))\n", "])\n", "\n", "# Create PyTorch datasets and data loaders\n", "train_dataset = TensorDataset(train_x, train_y)\n", "train_loader = DataLoader(train_dataset, batch_size=64, shuffle=True)\n", "\n", "test_dataset = TensorDataset(test_x, test_y)\n", "test_loader = DataLoader(test_dataset, batch_size=64, shuffle=False)\n", "\n", "# Define the CNN architecture\n", "class CNN(nn.Module):\n", " def __init__(self):\n", " super(CNN, self).__init__()\n", " self.conv1 = nn.Conv2d(4, 32, kernel_size=3, padding=1)\n", " self.conv2 = nn.Conv2d(32, 64, kernel_size=3, padding=1)\n", " self.conv3 = nn.Conv2d(64, 128, kernel_size=3, padding=1)\n", " self.pool = nn.MaxPool2d(kernel_size=2, stride=2)\n", " self.fc1 = nn.Linear(128 * 3 * 3, 512)\n", " self.fc2 = nn.Linear(512, 6)\n", "\n", " def forward(self, x):\n", " x = self.pool(torch.relu(self.conv1(x)))\n", " x = self.pool(torch.relu(self.conv2(x)))\n", " x = self.pool(torch.relu(self.conv3(x)))\n", " x = x.view(-1, 128 * 3 * 3)\n", " x = torch.relu(self.fc1(x))\n", " x = self.fc2(x)\n", " return x\n", "\n", "# Initialize the CNN and define the loss function and optimizer\n", "cnn = CNN().to('cuda')\n", "criterion = nn.CrossEntropyLoss()\n", "optimizer = optim.Adam(cnn.parameters(), lr=0.001)\n", "scheduler = ReduceLROnPlateau(optimizer, mode='min', factor=0.1, patience=5, verbose=True)\n", "\n", "# Define the TensorBoard writer\n", "writer = SummaryWriter()\n", "\n", "# Define the ModelCheckpoint callback\n", "best_loss = np.inf\n", "checkpoint_path = './best_model.pth'\n", "checkpoint = {'epoch': None, 'model_state_dict': None, 'optimizer_state_dict': None, 'loss': None}\n", "\n", "# Train the CNN\n", "for epoch in range(10):\n", " running_loss = 0.0\n", " for i, data in enumerate(train_loader, 0):\n", " inputs, labels = data\n", " inputs, labels = inputs.to('cuda'), labels.to('cuda')\n", " optimizer.zero_grad()\n", " outputs = cnn(inputs)\n", " loss = criterion(outputs, labels)\n", " loss.backward()\n", " optimizer.step()\n", " running_loss += loss.item()\n", " epoch_loss = running_loss / len(train_loader)\n", " print('Epoch %d loss: %.3f' % (epoch + 1, epoch_loss))\n", " writer.add_scalar('Loss/train', epoch_loss, epoch)\n", " wandb.log({'Loss/train': epoch_loss})\n", " scheduler.step(epoch_loss)\n", " with torch.no_grad():\n", " valid_loss = 0.0\n", " valid_preds = []\n", " valid_labels = []\n", " for data in test_loader:\n", " inputs, labels = data\n", " inputs, labels = inputs.to('cuda'), labels.to('cuda')\n", " outputs = cnn(inputs)\n", " loss = criterion(outputs, labels)\n", " valid_loss += loss.item()\n", " _, predicted = torch.max(outputs.data, 1)\n", " valid_preds.extend(predicted.cpu().numpy())\n", " valid_labels.extend(labels.cpu().numpy())\n", " valid_loss /= len(test_loader)\n", " # valid_acc = accuracy_score(valid_labels, valid_preds)\n", " valid_acc = accuracy_score(torch.argmax(torch.Tensor(valid_labels),axis=1), valid_preds) #Manual fix\n", " print('Validation loss: %.3f' % valid_loss)\n", " print('Validation accuracy: %.3f' % valid_acc)\n", " writer.add_scalar('Loss/valid', valid_loss, epoch)\n", " writer.add_scalar('Accuracy/valid', valid_acc, epoch)\n", " wandb.log({'Loss/valid': valid_loss, 'Accuracy/valid': valid_acc})\n", " if valid_loss < best_loss:\n", " best_loss = valid_loss\n", " checkpoint['epoch'] = epoch\n", " checkpoint['model_state_dict'] = cnn.state_dict()\n", " checkpoint['optimizer_state_dict'] = optimizer.state_dict()\n", " checkpoint['loss'] = best_loss\n", " torch.save(checkpoint, checkpoint_path)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Ok, let's do some inference on this model now" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "tags": [] }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cnn = CNN().to('cuda')\n", "load_checkpoint=torch.load('./best_model.pth')\n", "cnn.load_state_dict(load_checkpoint['model_state_dict'])" ] }, { "cell_type": "code", "execution_count": 65, "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "t_test.shape: torch.Size([64, 6])\n", "x_test.shape: torch.Size([64, 4, 28, 28])\n" ] }, { "data": { "image/png": "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1oYwDHHzzTfje9/7XtXr29ra6LTOzk7MmTMHmzdvxk9/+lPrdxAB7FG7+fG0cOFC3H333fA8D8lkEgsWLEA6na56XXt7+5D/7+zsRBRF+Pa3v41vf/vb1mXv3CadnZ1YsGBB1bhtu4swtVzXTz31FE455RTss88+WL58ORKJxB4trxbqulAo4IwzzsAjjzyCn/3sZzj66KNHZLky8dRabU+fPn1wXVpbW4eMbd++Hc3Nzbu97Mla29OmTYPneejs7Kwa2759OwDs0XaRiafW6nqnuro6HHHEEQCA4447DkcffTTe8Y534Lvf/S4+85nP7NYyJ2tdv9HOr08dddRROP3003HYYYfh7//+7/HMM8+MyPL3lB6aif/4j//AggULcM8998DzvMHphULB+vqOjg46befFr6WlBYcccgi+8pWvWJcxa9asPV3tcZFMJgeL3+WN2xHYcQEMggAf/ehH6XcWdhbn9OnTndtYZFfUal0/9dRTOPnkkzFv3jz86le/QmNj4x4vc7LXdaFQwOmnn46HHnoI999/vyLlalyt1fbBBx8MAHj22WdxwAEHDE6PogjPP/88zjnnnN1e9mSt7Z2Z688++2zV2LPPPotUKoW3ve1tu718mXhqra6ZI444Ar7v489//vNuL2Oy1jUThiEOP/xw/OAHPxjxZe8uPTQTnuchHo8PObg6Ojpox77/+q//wubNmwd/I1wul3HPPfdg4cKFmDNnDoAdMU/Lly/HwoULh3wpf6pKp9M44YQT8NRTT+GQQw5BPB6nrz3hhBPw9a9/Hc888wwOPfTQwel33XXXWKyq1IharOunn34aJ598MubMmYMVK1aM+7llItT1zr8wP/jgg7j33nvxnve8Z4+WJxNfrdX20Ucfjfb2dnz/+9/Hhz70ocHpP/rRj9Df37/HWc27YyLU9hlnnIHrr78e69evH4zT6+vrw7333ou//Mu/nFCddmXP1VpdM6tWrUKlUsHee+895u89EeraJp/P47HHHhuXbcJM6bPLgw8+iHXr1lVN/4u/+AucdtppuPfee3HhhRfirLPOwvr16/FP//RPaG9vx5o1a6rmaWlpwYknnoh//Md/HOzY9/zzzw9pdf/lL38ZK1aswLHHHotLLrkE++67L/L5PNatW4fly5fjO9/5zmBR76rzzz8ft99+O1566aUhEQw2q1evxurVqwHsOOlks1n86Ec/AgAccMABQ36b7XkelixZgpUrVw5rfYbrX/7lX/Cud70L7373u/GpT30K8+fPR19fH1588UX89Kc/xYMPPggAuPTSS/G9730P73vf+3DttdcOdux7/vnnq5a5atUqnHTSSbjyyitx5ZVXOt8/m81i+fLlAHZEfOycf9u2bairq9vtHEwZP1Oprl944QWcfPLJAICvfOUrWLNmzZDPsXDhwsEoC2Dq1PVZZ52FX/ziF7jiiiswffr0wdoGdsTTvPFcJ5PHVKrtIAjw9a9/HR/96EdxwQUX4JxzzsGaNWvwhS98Aaeccgre+973Dnn9VKntz33uc/j3f/93vO9978OXv/xlJBIJfPWrX0U+n1daxiQ1ler6Zz/7GW699Vb85V/+JebNm4dSqYQnnngC119/Pfbee298/OMfH/L6qVLXxx57LP7yL/8S+++/PxobG7Fu3TrcfPPNeOmll0Y0Xm+PjfeXqsfDzi+ss5+1a9caY4z56le/aubPn28SiYTZf//9za233jrYUOCNAJiLLrrI3HTTTWbhwoUmFouZ/fbbz9x5551V771161ZzySWXmAULFphYLGaam5vN4sWLzRVXXGH6+/uHLHNXmg+ce+65Q9bZZee6237e+F59fX0GgDn77LPfcpk7O/a9lZ3byGbt2rXmYx/7mJk9e7aJxWJmxowZ5thjjzXXXnvtkNetXr3anHLKKSaZTJrm5mZz/vnnm/vvv7+q+cBDDz20y9tv7dq1dJuMRKM0GTtTsa7f6jPfdtttg6+dSnXt2iZLlix5y/llYpmKtb3TXXfdZQ455BATj8dNW1ubueSSS6o6wE+l2jbGmBdffNGcfvrppqGhwaTTaXPSSSeZJ598cpfmlYljKtb1n/70J3PWWWeZefPmmWQyaZLJpNlvv/3M5z//edPZ2TnktVOprj/72c+aQw891DQ2NpowDE1bW5s544wzzH//93+/5bxjyTPGmOE8ZEvtW758OU477TQ888wzg9+rEpHJTXUtUptU2yK1R3U98fjjvQIy8Tz00EM4++yzVaQiNUR1LVKbVNsitUd1PfHoL80iIiIiIiIihP7SLCIiIiIiIkLooVlERERERESE0EOziIiIiIiICDHhcporlQo2btyITCYzJMxcpBYZY9DX14dZs2bB92v7d1iqbZkqVNcitUd1LVJ7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Xauu30x1PfmprndQbb9OdV0bVNuq6zea6nU9If/SXCwW8eSTT+LUU08dMv3UU0/Fo48+Ok5rNf7Wrl2Ljo6OIdslkUhgyZIlU2K79PT0AACam5sBaHtMNqpru6l+HKuuJzfVNTeVj2XV9eSn2rabysfyVK/rCfnQvG3bNpTLZbS2tg6Z3traio6OjnFaq/G387NPxe1ijMFll12Gd73rXTjooIMATO3tMRmpru2m8nGsup78VNfcVD2WVde1QbVtN1WPZdU1EI73Crh4njfk/40xVdOmoqm4XS6++GL84Q9/wCOPPFI1NhW3x2Sm/WU3FbeL6rp2aH9xU23bqK5ri/aZ3VTbLqrrCfqX5paWFgRBUPVbii1btlT9NmMqaWtrA4Apt10+/elP4yc/+QkeeughzJkzZ3D6VN0ek5Xq2m6qHseq69qguuam4rGsuq4dqm27qXgsq653mJAPzfF4HIsXL8aKFSuGTF+xYgWOPfbYcVqr8bdgwQK0tbUN2S7FYhGrVq2qye1ijMHFF1+Me++9Fw8++CAWLFgwZHyqbY/JTnVtN9WOY9V1bVFdc1PpWFZd1x7Vtt1UOpZV128ytn3Hdt3dd99tYrGY+bd/+zezevVqc+mll5q6ujqzbt268V61UdXX12eeeuop89RTTxkA5lvf+pZ56qmnzCuvvGKMMearX/2qaWxsNPfee6959tlnzTnnnGPa29tNb2/vOK/5yPvUpz5lGhsbzcqVK82mTZsGf7LZ7OBrptL2qAWqa9W16rr2TNW6Nka1vZPqujZN1dpWXe+guh5qwj40G2PMjTfeaObNm2fi8bg5/PDDB1uc17KHHnrIAKj6Offcc40xO9q7X3XVVaatrc0kEglz3HHHmWeffXZ8V3qU2LYDAHPbbbcNvmYqbY9aobpWXauua89UrGtjVNs7qa5r11SsbdX1DqrroTxjjBn5v1+LiIiIiIiITH4T8jvNIiIiIiIiIhOBHppFRERERERECD00i4iIiIiIiBB6aBYREREREREh9NAsIiIiIiIiQuihWURERERERITQQ7OIiIiIiIgIoYdmEREREREREUIPzSIiIiIiIiKEHppFRERERERECD00i4iIiIiIiBB6aBYREREREREh9NAsIiIiIiIiQuihWURERERERITQQ7OIiIiIiIgIoYdmEREREREREUIPzSIiIiIiIiLElHxo/v73vw/P8/DEE0+MyPI8z8PFF188Ist64zKvvvrqEV3mHXfcgbPPPhv77rsvfN/H/Pnz93iZxx9/PDzPG/xJpVI49NBDcf3116NSqez5Sr+FlStXwvM8rFy5crfmf+6553DhhRfimGOOQV1d3R4tS8bXVK3r+fPnD6nBnT+f/OQnd3uZk72ur776aus2SSaTI7uiMiamYm1v2rQJX/rSl3DMMcegpaUFDQ0NWLx4MW655RaUy+XdXu5kr+1//dd/xemnn4758+cjlUph7733xqc+9Sls2rRpZFdURp3qWnW902Sp63C8V0DGzr//+7+jo6MDRx11FCqVCkql0ogs921vexvuvPNOAMCWLVvwne98B5/5zGewadMmfO1rXxuR9xgtTzzxBH784x/jsMMOw0knnYSf/vSn471KIsP2zne+E//8z/88ZFpra+seLXMy1/VOv/zlL9HY2Dj4/74/JX9PLJPQk08+iTvuuAN/+7d/i3/8x39ELBbDL37xC3zqU5/CY489hu9973u7vezJXNtXXXUVTjjhBFx33XWYPXs2XnjhBfzTP/0T7r//fjz11FN7fN4TGU2qa7vJUtd6aJ5CHnjggcGbxtNOOw1//OMfR2S5qVQK73jHOwb/f+nSpdhvv/1www034Nprr0UsFquaxxiDfD6PVCo1Iuuwuz760Y/i3HPPBQD86Ec/0kOzTEpNTU1DanAkTOa63mnx4sVoaWkZ79UQGbZ3vvOdeOmll4bU2SmnnIJisYgbb7wR11xzDebOnbtby57Mtf3UU09h5syZg/+/ZMkSHH744TjyyCNx66234ktf+tI4rp2Im+rabrLUtX7tTuTzeXz2s5/F29/+djQ2NqK5uRnHHHMM7r//fjrPd7/7XSxatAiJRAIHHHAA7r777qrXdHR04IILLsCcOXMQj8exYMECXHPNNYiiaDQ/DoCx+ytLLBbD4sWLkc1msXXrVgCv/7OZ73znO9h///2RSCRw++23AwDWrFmDD3/4w5g5cyYSiQT2339/3HjjjVXLff755/He974X6XQaLS0t+OQnP4m+vr49Wlf95WlqqcW6HiuTqa5l6qm12p42bZr1Jveoo44CAGzYsGHE3msy1fYbb6x3Wrx4MYIgwPr16/do2TLxqK53n+p65OkvzUShUMD27dvxuc99DrNnz0axWMSvf/1rnHnmmbjtttvwt3/7t0Ne/5Of/AQPPfQQvvzlL6Ourg433XQTzjnnHIRhiLPOOgsABv9ptO/7uPLKK7Fw4UL89re/xbXXXot169bhtttuG/Z6nnfeebj99tuxdu3aEfmO8kh56aWXEIYhpk2bNjjtxz/+MX7zm9/gyiuvRFtbG2bOnInVq1fj2GOPxV577YVvfvObaGtrwwMPPIBLLrkE27Ztw1VXXQUA2Lx5M5YsWYJYLIabbroJra2tuPPOO63fX1m5ciVOOOEEXHXVVSP+/VGZ3Gq1rh9++GFkMhnk83nss88+OP/883HppZciCIJhv7fLZKvrgw8+GFu2bEFLSwve85734Nprr8Vee+01IttCJpZare03e/DBBxGGIRYtWjTseV0mW22/0apVq1Aul3HggQfu9ueXiUl1vWdU1yPMTEG33XabAWAef/zxXZ4niiJTKpXM+eefbw477LAhYwBMKpUyHR0dQ16/3377mb333ntw2gUXXGDq6+vNK6+8MmT+f/7nfzYAzHPPPTdkmVddddVbrtfHPvYxEwSBWbdu3S5/FmOMed/73mfmzZs3rHlslixZYg488EBTKpVMqVQyGzduNF/84hcNAPPBD35w8HUATGNjo9m+ffuQ+d/znveYOXPmmJ6eniHTL774YpNMJgdf/3//7/81nueZp59+esjrTjnlFAPAPPTQQ4PTVq5caYIgMNdcc82wPssPf/jDqmXJ5DFV6/rCCy803/ve98yqVavMj3/8Y/ORj3zEADB/8zd/85bzMpO9ru+44w7zla98xSxfvtw8+OCD5qtf/appbm42ra2tZsOGDcPdHDLOpmptv9kDDzxgfN83n/nMZ4Y9706TvbbfrLe31+y///5m7ty5pq+vb9jzy/hRXe+guq42UetaD80OP/jBD8yxxx5r6urqDIDBn2QyOeR1AMxpp51WNf9VV11lAJj169cbY4yZPXu2ef/73z94UO/8ee655wwAc9NNNw1Z5q4U6u4ayYfmN24bACYWi5mPfOQjpru7e/B1AMwZZ5wxZN5cLmfCMDSf/vSnq7bJ8uXLDQCzfPlyY4wxRx11lDnooIOq3n/nvhyJB109NE9uquvXXXzxxQaA+f3vf79b89dSXe/0u9/9zvi+by655JIRW6aMDdW2MU8++aRpbGw0xx57rMnn87u9nFqq7VwuZ04++WSTTqfNY489tsfLk7GlulZd20zkutY/zybuvfde/PVf/zU++MEP4vOf/zza2toQhiFuvvlma3e7trY2Oq2zsxNz5szB5s2b8dOf/tT6fQYA2LZt28h+iDGycOFC3H333YORLgsWLEA6na56XXt7+5D/7+zsRBRF+Pa3v41vf/vb1mXv3CadnZ1YsGBB1bhtu4swU6Wu/+Zv/gY33HADHnvsMRx22GG7tYxaq+ujjjoKixYtwmOPPTbiy5bxV8u1/dRTT+GUU07BPvvsg+XLlyORSOzR8mqhtguFAs444ww88sgj+NnPfoajjz56RJYrE4vqeteprkefHpqJ//iP/8CCBQtwzz33wPO8wemFQsH6+o6ODjpt+vTpAICWlhYccsgh+MpXvmJdxqxZs/Z0tcdFMpnEEUcc8Zave+N2BHY0RAiCAB/96Edx0UUXWefZWZzTp093bmORXTFV6toYA2DPGt3VYl0bY9T8r0bVam0/9dRTOPnkkzFv3jz86le/GhKhtrsme20XCgWcfvrpeOihh3D//ffjpJNO2uNlysSkut51quvRp4dmwvM8xOPxIQdXR0cH7dj3X//1X9i8efNglli5XMY999yDhQsXYs6cOQB2xDwtX74cCxcuHPKl/KkqnU7jhBNOwFNPPYVDDjkE8XicvvaEE07A17/+dTzzzDM49NBDB6ffddddY7GqUiOmSl3fcccdADDiMVS7YqLW9WOPPYY1a9bgkksuGfFly/irxdp++umncfLJJ2POnDlYsWLFuJ9fJkJt7/xL1IMPPoh7770X73nPe/ZoeTKxqa5Hn+p6103ph+YHH3wQ69atq5r+F3/xFzjttNNw77334sILL8RZZ52F9evX45/+6Z/Q3t6ONWvWVM3T0tKCE088Ef/4j/842LHv+eefH9Lq/stf/jJWrFiBY489Fpdccgn23Xdf5PN5rFu3DsuXL8d3vvOdwaLeVeeffz5uv/12vPTSS5g3b57ztatXr8bq1asB7DjpZLNZ/OhHPwIAHHDAATjggAMGX+t5HpYsWYKVK1cOa32G61/+5V/wrne9C+9+97vxqU99CvPnz0dfXx9efPFF/PSnP8WDDz4IALj00kvxve99D+973/tw7bXXDnbse/7556uWuWrVKpx00km48sorceWVVzrfP5vNYvny5QAw+M82V61ahW3btqGurg5Lly4d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qesp99CcJAk2b96MxsZGeJ6Hvr4+LFy4EJs2bUJTU9Nkb96k0li8rFbGwhiD/v5+zJ8/H77jr2O14JW13d/fXxP7rxpq5ViuhloZC9X19N5/1VArx3I11MpYqK6n9/6rhlo5lquhVsZiLHU95f55tu/71if9pqamab1Tqklj8bJaGIvm5ubJ3oQJ8cra9ryd/wywFvZftWgsXlYLY6G6nt77r1o0Fi+rhbFQXU/v/VctGouX1cJY7G5d1/avykRERERERET2gh6aRURERERERIgp/9CcyWRwySWXIJPJTPamTDqNxcs0FtOb9t/LNBYv01hMb9p/L9NYvExjMb1p/71MY/GymTgWU64RmIiIiIiIiMhUMeX/0iwiIiIiIiIyWfTQLCIiIiIiIkLooVlERERERESE0EOziIiIiIiICDGlH5qvueYadHZ2IpvN4uijj8Z//dd/TfYmjbu7774bp59+OubPnw/P8/DjH/941HxjDFauXIn58+cjl8vhxBNPxGOPPTY5GzvOVq1ahde+9rVobGzEvHnz8I53vAN/+MMfRr1mJo1HrVBdq65V17VnJtY1oNoeprquXTOxtlXXO6muR5uyD8233HILLrjgAlx88cV48MEH8cY3vhHLly/Hs88+O9mbNq4GBwdxxBFH4KqrrrLO/9rXvoYrrrgCV111Fe677z60t7fjlFNOQX9//wRv6fhbv349VqxYgQ0bNmDt2rWIogjLli3D4ODgyGtm0njUAtW16lp1XXtmal0Dqu1hquvaNFNrW3W9k+p6F2aKet3rXmc+8pGPjJp2yCGHmM9+9rOTtEUTD4C57bbbRv47SRLT3t5uvvrVr45MKxQKprm52Vx33XWTsIUTa+vWrQaAWb9+vTFG4zEdqa5V17tSXU9/quudVNsvU13XBtW26vqVZnpdT8m/NJdKJTzwwANYtmzZqOnLli3DvffeO0lbNfmefvppdHV1jRqXTCaDpUuXzohx6e3tBQDMnj0bgMZjulFd283041h1Pb2prrmZfCyrrqc/1bbdTD6WZ3pdT8mH5m3btiGOY7S1tY2a3tbWhq6urknaqsk3/Nln4rgYY3DhhRfi+OOPx+LFiwHM7PGYjlTXdjP5OFZdT3+qa26mHsuq69qg2rabqcey6hoIJ3sDXDzPG/XfxpiKaTPRTByX8847D4888gjuueeeinkzcTymM+0vu5k4Lqrr2qH9xc20sVFd1xbtM7uZNi6q6yn6l+bW1lYEQVDxW4qtW7dW/DZjJmlvbweAGTcu559/Pm6//XbcddddWLBgwcj0mToe05Xq2m6mHseq69qguuZm4rGsuq4dqm27mXgsq653mpIPzel0GkcffTTWrl07avratWuxZMmSSdqqydfZ2Yn29vZR41IqlbB+/fqaHBdjDM477zzceuutuPPOO9HZ2Tlq/kwbj+lOdW03045j1XVtUV1zM+lYVl3XHtW23Uw6llXXu5jYvmO77+abbzapVMp897vfNY8//ri54IILTH19vdm4ceNkb9q46u/vNw8++KB58MEHDQBzxRVXmAcffNA888wzxhhjvvrVr5rm5mZz6623mkcffdS8973vNR0dHaavr2+St7z6PvrRj5rm5mazbt06s2XLlpGfoaGhkdfMpPGoBapr1bXquvbM1Lo2RrU9THVdm2Zqbauud1JdjzZlH5qNMebqq682ixYtMul02hx11FEjLc5r2V133WUAVPx86EMfMsbsbO9+ySWXmPb2dpPJZMwJJ5xgHn300cnd6HFiGwcAZvXq1SOvmUnjUStU16pr1XXtmYl1bYxqe5jqunbNxNpWXe+kuh7NM8aY6v/9WkRERERERGT6m5LfaRYRERERERGZCvTQLCIiIiIiIkLooVlERERERESE0EOziIiIiIiICKGHZhERERERERFCD80iIiIiIiIihB6aRURERERERAg9NIuIiIiIiIgQemgWERERERERIfTQLCIiIiIiIkLooVlERERERESE0EOziIiIiIiICKGHZhERERERERFCD80iIiIiIiIihB6aRURERERERAg9NIuIiIiIiIgQemgWERERERERIWbkQ/O//du/wfM83H///VVZn+d5OO+886qyrleuc+XKlVVd54c//GEsXrwYLS0tyOVyOOigg/DpT38a27Zt2+N1nnjiifA8b+Qnl8vhiCOOwJVXXokkSaq49Xbr1q2D53lYt27dHi3/gx/8ACeccALa2tqQyWQwf/58nH766bj33nuru6Ey7lTXquthquvaMhNre8uWLfjc5z6HN7zhDWhtbUVTUxOOPvpofPvb30Ycx3u83ule2//3//5fvOMd78B+++2HXC6HAw44AB/96EexZcuW6m6ojLuZWNeArtk20+WaHU72BsjEGRwcxD/8wz/ggAMOQDabxf33348vf/nLWLNmDR588EGk0+k9Wu+rXvUq3HjjjQCArVu34rrrrsMnPvEJbNmyBZdffnk1P0LVdXd347jjjsPHP/5xtLa2YsuWLbjiiitwwgkn4Ne//jWWLl062Zso4qS6rqS6lunugQcewA033IC//du/xec//3mkUin853/+Jz760Y9iw4YN+N73vrfH657OtX3JJZfgpJNOwle+8hXss88++MMf/oDLLrsMP/nJT/Dggw+ira1tsjdRxEnX7ErT5Zqth+YZ5Ac/+MGo/z755JPR2NiIc889F/fccw9OPvnkPVpvLpfD61//+pH/Xr58OQ455BBcddVV+NKXvoRUKlWxjDEGhUIBuVxuj96zWmy/lVy+fDnmzp2L7373u1OmUEUY1XUl1bVMd8cddxyeeuqpUXV2yimnoFQq4eqrr8all16KhQsX7tG6p3NtP/jgg5g3b97Ify9duhRHHXUUXvva1+I73/kOPve5z03i1on8ZbpmV5ou1+wZ+c+zd0ehUMAnP/lJ/NVf/RWam5sxe/ZsvOENb8BPfvITusy3vvUtHHTQQchkMjjssMNw8803V7ymq6sL55xzDhYsWIB0Oo3Ozk5ceumliKJoPD8ONXfuXABAGFbv9yepVApHH300hoaG8OKLLwJ4+Z/NXHfddTj00EORyWRw/fXXAwCefPJJvO9978O8efOQyWRw6KGH4uqrr65Y7xNPPIFTTz0VdXV1aG1txUc+8hH09/dXbbuHNTY2IpvNVnVMZGpQXe851bVMZbVW27NmzbLe5L7uda8DADz33HNVe6/pVNuvfGAedvTRRyMIAmzatGmv1i1TT63VNaNrdqUpec02M9Dq1asNAHPffffR1/T09JizzjrL/Pu//7u58847zS9+8QvzqU99yvi+b66//vpRrwVgFi5caA477DDzgx/8wNx+++3m1FNPNQDMj370o5HXbdmyxSxcuNAsWrTIfOtb3zK/+tWvzGWXXWYymYw566yzKtZ5ySWX/MXP8qEPfcgAME8//fRuf/5yuWwGBgbMPffcYw455BBz/PHHmyiKdnv5V1q6dKk5/PDDK6YfddRRJgxDMzQ0ZIzZ+Xn22Wcf85rXvMbcdNNN5s477zS/+93vzGOPPWaam5vNq1/9anPDDTeYX/7yl+aTn/yk8X3frFy5cmR9XV1dZt68eWafffYxq1evNmvWrDHvf//7zb777msAmLvuumvktXfdddduj9+wKIpMqVQyTz/9tPmHf/gH09DQYO6///49GhOZHKpr1fWuVNe1YabX9q7Lh2Fotm3btkfL10ptv9Lw8t/4xjf2aHmZHDO9rnXNrjTVr9l6aN5NURSZcrlszj77bHPkkUeOmgfA5HI509XVNer1hxxyiDnggANGpp1zzjmmoaHBPPPMM6OW/5d/+RcDwDz22GOj1rk7B9rf/d3fmSAIzMaNG3frc/zmN78xAEZ+3vrWt5q+vr7dWtZmuFDL5bIpl8tm8+bN5rOf/awBYN797nePvA6AaW5uNtu3bx+1/Fve8hazYMEC09vbO2r6eeedZ7LZ7Mjr//Ef/9F4nmceeuihUa875ZRTKgp13bp1JggCc+mll+725zj44INHxqSjo8Pcc889u72sTA2qa9X1rlTXtWEm1/Yr3XHHHcb3ffOJT3xizMsOq5XaHtbX12cOPfRQs3DhQtPf3z/m5WXyzOS61jXbbqpfs/XQ7PDDH/7QLFmyxNTX1486uLPZ7KjXATCnnXZaxfKXXHKJAWA2bdpkjDFmn332MaeffvrIQT3889hjjxkA5pprrhm1zj39ravLwMCAue+++8z69evNN77xDdPR0WGOPfZYMzg4uEfrW7p06aixAWBSqZR5//vfb3p6ekZeB8CcccYZo5bN5/MmDENz/vnnV4zJmjVrDACzZs0aY4wxr3vd68zixYsr3n94X76yUPfE7373O/Pb3/7W/OhHPzJvetObTGNj416vUyaW6lp1vSvVdW2YybU97IEHHjDNzc1myZIlplAo7PF6aqW2h7fnzW9+s6mrqzMbNmzY6/XJxJrJda1rtt1Uv2ZPoX8oPrXceuut+Ju/+Ru8+93vxqc//Wm0t7cjDENce+211q6V7e3tdFp3dzcWLFiAF154AT/96U+t31MCsFft5ndXfX09jjnmGADACSecgGOPPRavf/3r8a1vfQuf+MQn9mid+++/P26++WZ4nodsNovOzk7U1dVVvK6jo2PUf3d3dyOKInzzm9/EN7/5Teu6h8eku7sbnZ2dFfNt474nDj/8cAA7vy/2jne8A0ceeSQ+/vGP4+GHH67K+mVqUF3vPtW1TCe1WtvAzuZXp5xyCg488ECsWbMGmUxmr9ZXC7VdLBZxxhln4J577sHPfvYzHHvssVVZr0wttVrXumbbTfVrth6aie9///vo7OzELbfcAs/zRqYXi0Xr67u6uui0OXPmAABaW1vxmte8Bl/+8pet65g/f/7ebvaYHXPMMfB9H3/84x/3eB3ZbHak+F1eOY7AzkYnQRDggx/8IFasWGFdZrg458yZ4xzjagrDEEcddRR++MMfVn3dMrlU17tPdS3TSa3W9oMPPog3v/nNWLRoEX75y1+iubl5r9c53Wu7WCziHe94B+666y785Cc/wZve9Ka9XqdMTbVa17vSNbvSVLxm66GZ8DwP6XR61MHV1dVFO/b9+te/xgsvvDCSERjHMW655Rbsv//+WLBgAQDgtNNOw5o1a7D//vtj1qxZ4/8hdsP69euRJAkOOOCACX/vuro6nHTSSXjwwQfxmte8xplNd9JJJ+FrX/saHn74YRxxxBEj02+66aaqb1ehUMCGDRsmZUxkfKmux5/qWiZDLdb2Qw89hDe/+c1YsGAB1q5dO+nnl6lQ28N/Yb7zzjtx66234i1vecterU+mtlqsaxtdsytNxWv2jH5ovvPOO7Fx48aK6W9961tx2mmn4dZbb8W5556Ld73rXdi0aRMuu+wydHR04Mknn6xYprW1FSeffDI+//nPo76+Htdccw2eeOKJUa3uv/jFL2Lt2rVYsmQJPvaxj+Hggw9GoVDAxo0bsWbNGlx33XUjRb27zj77bFx//fV46qmnsGjRIvq6n/3sZ/jOd76Dt7/97Vi0aBHK5TLuv/9+XHnllTjggAPw4Q9/eNTrPc/D0qVLsW7dujFtz1h94xvfwPHHH483vvGN+OhHP4r99tsP/f39+NOf/oSf/vSnuPPOOwEAF1xwAb73ve/hbW97G770pS+hra0NN954I5544omKda5fvx5vetOb8IUvfAFf+MIXnO+/ZMkSvP3tb8ehhx6K5uZmbNy4Eddeey2eeuop3HbbbePymWV8qa5V16rr2jSTavsPf/gD3vzmNwMAvvzlL+PJJ58c9Tn233//kZgaYObU9rve9S7853/+Jy6++GLMmTMHGzZsGJnX1NSEww47rLofWMbdTKprXbPtps01e7K/VD0Zhr+wzn6GW8Z/9atfNfvtt5/JZDLm0EMPNd/5zndGGgq8EgCzYsUKc80115j999/fpFIpc8ghh5gbb7yx4r1ffPFF87GPfcx0dnaaVCplZs+ebY4++mhz8cUXm4GBgVHrrGab+9///vfmXe96l1m0aJHJZrMmm82aQw45xHz605823d3do17b399vAJgzzzzzL74/a3O/q+Exsnn66afN3/3d35l99tnHpFIpM3fuXLNkyRLzpS99adTrHn/8cXPKKaeYbDZrZs+ebc4++2zzk5/8pKL5wFja3H/yk580RxxxhGlubjZhGJr29nZzxhlnmP/+7//+i8vK1KK6Vl0PU13XlplY23/pM69evXrktTOptl1jsnTp0r+4vEwdM7Gudc22my7XbM8YY/b0gVtq05o1a3Daaafh4Ycfxqtf/erJ3hwRqQLVtUhtUm2L1B7V9dTjT/YGyNRz11134cwzz1SRitQQ1bVIbVJti9Qe1fXUo780i4iIiIiIiBD6S7OIiIiIiIgIoYdmEREREREREUIPzSIiIiIiIiKEHppFREREREREiHCyN2BXSZJg8+bNaGxshOd5k705IuPKGIP+/n7Mnz8fvl/bv8NSbctMoboWqT2qa5HaM6a6Hq8A6KuvvnokjPyoo44yd999924tt2nTJmfYuX70U4s/mzZtGq9SrKo9rWtjVNv6mXk/qmv96Kf2flTX+tFP7f3sTl2Py1+ab7nlFlxwwQW45pprcNxxx+Fb3/oWli9fjscffxz77ruvc9nGxkYAwJWrPotcNlMxPzaRdbkojvlKHb8l830+BEnC1sdmAOVygc4zJrBOj0qGLpPJ1tF5xVKRzkul7b8tKRYG6DJBJsvnefZxiuggAZ5n/7wAkER82/3QvpxxvZfjmwZx2b7cUH6ILpPN8XFvqG+g80xcts9I7Pu4UCjiokv/ZeS4n8r2pq6Bl2v7Q2e/Del0qmJ+KmMf85AcewAQl8l4A/D8NJ8X2M8J5SKv3zB01IdvX18hP0iXSQWVYzAi4cdzmKs8LwJACXzbY3ZcAggCe70VhnbQZeqys/g8R324zgmU4xe/Phl3Q+pt50Y4jifHdSQi6xza0VsxrVQqY/X3fjSj6nrJSSciDCvHNiLneo/sOwCIUeLzEj4P5BKRSdfzRWK+Pt+312gY8nNL5Ki1MLTXLgAkxr7xUeSoXccfAOsam+0zIl4b/f19fN6Objov29JinV4u8WtsJpOj89Jkf7HzLACkAj625RLfx1ue+JN1emh5qzhJ8MSmjTOqrr9w0ceRtdyLRyX7vWQuw8fGI9d4ANixfQudl0vZ921+qIcuk8m18PU1NVmnF8lnAoC4zO9ZkebHMsj9ZxI71gdeo3UN9m0fHOiny/jgteGBX5OHivaaTzk+r3FdsI19Xhy5npvsz3w7Z/K6rsuSc76pLOxCsYRV//K93arrcXlovuKKK3D22Wfjwx/+MADgyiuvxB133IFrr70Wq1atGvXaYrGIYvHlg6e/f+eOz2UzyOUqb1Kn+kNzGPCDnT00l32+TDbLb9Q9x7GZTtvfy4Pjgp7hhRWQm4dyzMfCd9wgx446qPpDc0BOWoYfM7aLxDDbcTnMROQzu27igWnxz5/GUtcAr+10OoV0pvJ4SmfsN6LOh2bHTdSePDT77K4b7htldjNnHDf4qYCvz/nQTMbJc2x7HPNxYg/NScQf6jNkGwAgk3WMu2NfUo7zHBv3ZBwemgOyztgxFjOprsMwRJiyja19TF0Pza5j2Usc13qymH27XlrEcT33A/tytl8OvLwQP/Zcy7GHZnh8fa6H5lSK1K9jfa7tY+cJ13JJMvZlAL6/Asc/nXT9EtIYxxj69m10je1MqutsNmN/aPbt95I5x32k5/jDTN6xXDZtn2di13Vo7PdwHvlMABC7ft9Ltg8AwO4/Hacx10MzuzeNI8cv//bwoTmGfXzTjn21Jw/NEfnFAgAYssxLb0bRe3jLQ/Ow3anrqn8po1Qq4YEHHsCyZctGTV+2bBnuvffeitevWrUKzc3NIz8LFy6s9iaJyF4aa10Dqm2RqU51LVJ7VNci46PqD83btm1DHMdoa2sbNb2trQ1dXV0Vr7/ooovQ29s78rNp06Zqb5KI7KWx1jWg2haZ6lTXIrVHdS0yPsate/auf+Y2xlj/9J3JZJBx/KlfRKaO3a1rQLUtMl2orkVqj+papLqq/tDc2tqKIAgqfpu1devWit96uZSiCEFU+cVX9p3m2PHd2vo6+xfnAaBQ4l9A5/++3fG9Zdc/siffnQpTri9LOL5/5PgOD/snBGGKfweEfaUKADzyBeo0+c7XzoUcn8vw747Q73o4vgPq+k6zF9pXmHJ8NzlyNGkolfiFJSTfZ0uR72+Fju+JTSXVqmsASKXqkbYdh+T7b5GjEQT7ziEARGW+XEiW8xzfmXN9TzZbZ29+VSzxLy6VHQ2DXN+tZuNULvPvNIXs+43g32mqqyeNhAAkju9I+z5v9pIi3/8tlXjDtMjRAMGQsfAc3yst5Ssbdw2ra+qg8wa6n7Ovr1TZPKnsaFA3lVSzrhNTQmLpO+GTa1gmx5tz9Q84GkiRWgMAj/Te8Bz3B7kcP86jsr1+XeeCIHRclx3f4zbkwhc4mpcEzu9Ik8Z1+R66zGD/djov3cDHPSrZj/d0wPdxmOLnCUPOZaWI78dCwo+ZfN9mOq95Uat1ejZXed8YRRHwzJ/puqaKatY1w47zvsGtdJmsmUvnpR3NV0NS163zD6DL5PO8MVZvz/PW6fU53uCy6LgnLA/x54hMyv78YTx+PxtH/Ho40G+/fiWOBn9e6GrYy89J9dkWshC/1yg7+oJ45FqQTfN9D0dTyDDgy1nvMQGYpPLzsvsIm6r/8+x0Oo2jjz4aa9euHTV97dq1WLJkSbXfTkQmgOpapPaorkVqj+paZHyMyz/PvvDCC/HBD34QxxxzDN7whjfg29/+Np599ll85CMfGY+3E5EJoLoWqT2qa5Hao7oWqb5xeWh+z3veg+7ubnzxi1/Eli1bsHjxYqxZswaLFi0aj7cTkQmguhapPaprkdqjuhapvnFrBHbuuefi3HPPHa/Vi8gkUF2L1B7VtUjtUV2LVFfVv9MsIiIiIiIiUivG7S/Ne8t4PoylayTtTOnxznH5Yp7Oc3WOM6SDrXF0hwtD3lnZI92kSZPLncvwWUg5umrGpBNnKuAdo0uO7rvlyN45MJ3m60scHbKjEn+vTMbeEc84RsPRzJR2Si45jotygc+LU3wfs81ISNfUIunOWst8ZODD1tnQPnrG8as9V6fGIMUXHBq0d4n1HB3aA8d27Oh90To9DHJ0mXKZd7RMhY7Kj3jt0EUc3ZxTob07deR4H9d5zjh22ED/Duv0dJZ3wSyWeVdc1lm4vt7VjZN3ykwcXct9cq2oa6zsEBwUx76Ppru4XIRnKusxSNnPv4VCN11XLsc7NWeyvNt17w77OnOO7qy9Lzo6RpMO30Gad8iGpYP4MONIAjCkw3c55p15/RQfp0LB3oF3+1Z752AACLP8et7zwjY6b/a+8+3bMMQ71fuO9+p+xp4R7Gg+jtkL96Xzmtv25wvCfg2x3v+RBJRaFiVF2JqWN9S1WF9fclw38kOVSQPDEtcF1thrIEXuFQEgjvg1L2DJLpbz17Bsmp93/DK/AS0U7dcvk/BzQcpxfS0V7GNRT/bHzjdzJP6QsQWAHEke2t7zAl0msXSnHpbJNFqnp0J+3xU59mNjHe/GzpZLpSzn9NhxPt+F/tIsIiIiIiIiQuihWURERERERITQQ7OIiIiIiIgIoYdmEREREREREUIPzSIiIiIiIiKEHppFREREREREiCkbORXDHgQQkrgQz+et4o2tX/7w+hyxNOWSvWW55/PIEmN4u3WPxKM4Uq8QOWKgeMAR4JFdGzgidbKOSKcyiYgqO2Kb0o5oplTID73CYL91euBoS++alyLRFpkU348x73IP3xFvxlIEfM++QlcESc0ysT3agUWyOSIMAhInBgC+o07r6mdbpyck9gUAyo4ojahoj2Tz0nwbPEd+ih/wCIQosW+H76jfyHGYRSSOgkXWAEBdPY+L6e3dQuexGLpiiZ9HGpt5rMSWLQ+SOYvoMrncHDovJvsRAOrrZlmn+5ZjMF3g66lVnmfgWc6N6bT93Fx2RIkkjgzBTX98mM4zkb0Gthd5bdTP4bXmk+tKscBj0LyQ13xTkz3CBQCSxD4eTc32cxUAlBzRZuzaPHfBoXSZoX4eA+bN49fzOhIR5oqSKeb5+aVpnr1Go+IAXcaR9IWExEoBgCHzMunKz+u6V6tVYZizRgxG5GanlOcRRo0t7XTeYB+PMdr34NdapxeG+DG0fftmOg+efduDkJ936nI8cioyPFotMCTy1HH+K5f49SND7mfLJX5OymXt0XkAkM3ar2sAUE7s+7Kufh5dJh06Ym1JdG0u64jmdFxKo5jvr3TGfq41Zdv+cGTW7kJ/aRYREREREREh9NAsIiIiIiIiQuihWURERERERITQQ7OIiIiIiIgIoYdmEREREREREUIPzSIiIiIiIiLElI2cKpeGEFpipMI6e+v0pMzbtxsSqQIA5aIjioAt54gcYrFSL820Tk4cbdNjx7aHjkidcmyPoig4ojJyad6WvhzZ4ytyWR6hEfo8bgKOeJwktI9hGPDP6zvGPWafOeH7PmWJWBgWkGgkAEhnSHwJ2fdh6MjJqFUG1g7/LK3NGD5GiSuSzREnF/hj/32hcRwvYWjf72lH/ExoiTQZNlTg0SrWuC4AceKIwkscnze0D3zGEbFRV89jm/JDPH4jJOMeOc7ffT08iqSludM6PZOqo8vkSz10XnmQR5g0NnVYpw8Mba+YVnREAdWqOCnDs+T+5Av2eJdcjl874PFrh5fm+zY7q9E6PXREH/lwnF/ILOM4f3iO2Mm+HTyOra6uhWwEX9/gDl4bpUF7XEy6jp/HMo328QOAXCM/H5RIFFRc5HVd7zi/FEv2bc/U82MmT6IqASCV5p+Lpc3091XWdeTK7qtR+cIgDCo/d0iubc0t+9B19ffwGKh5ba+i8/p6nrdO91P8npWk0wIA0iF5jnDU7ovbn6HzMll75Brgev5wPEcEjvvjov0a1b7PYXSZ0hC/nxga2kbnZUm9pRyPjkUSKwUAUdn+HOFIBETW8VziezwuEJ79/iq0xHmGgSKnRERERERERPaaHppFRERERERECD00i4iIiIiIiBB6aBYREREREREh9NAsIiIiIiIiQuihWURERERERISoeuTUypUrcemll46a1tbWhq6urjGtJ/A9BH5lH/Jywd7O3CORPgBgEldrdz4EPmn77mpOHkWu6CsS9eCKqXL8XqNY4u/lkdimVIbHdbiitLI5+3L0MwEole2xEQAQgy+XxPZ5nqVV/Mg8OgcIPPv6XLEhic/fyzgiQGg6EhlbE+1+q/vJVK26BoDEFJBYBiou2wcvdsR8ZLI8jiBwRLKx2i4W7ZEIgDvWLCRRYwmJfgMAx2nJGSfnkeM2dqSheI6YtJDEq7lOS/mhPjovm+PxG8Uh+/i6IoFY3B0AGGM/x6R8fl5vaGql8/pLfH/lC/ZIm/q62RXTQo/Hbkwl1a3r2HpM50J7bInnuP3I9/fQeYXtfB/NabVfp4okEglwxzr6fs46PXDEKVpuW14xz76+neu0j0cS8UisrCO2K521RzoFIY9f6vrTn+i8HBlbAMjk7OfhjCNWD+D3L9ms/XwakXsDAKiv52MbGx61mSL7uLm5vfL9HdF4U0k16xpJBFjiDEtF+7m35IhmTKd5zFjP9q10XpixX7/6huxRVADgO+7t2f2ncVxEg4AfX5FjOfZsUi7x61qY4/efQWj/XCQ5EgBQdERpFUv8WhV7JMbNcf4rlvi9gSHxuiXH/U5xiEfJtbUdROcFgf3c2NRcGZc5lOfnh12NS07z4Ycfjl/96lcj/x048nVFZHpQXYvUHtW1SO1RXYtU37g8NIdhiPb2yt/Sicj0pboWqT2qa5Hao7oWqb5x+U7zk08+ifnz56OzsxNnnnkm/vznP9PXFotF9PX1jfoRkalnLHUNqLZFpgPVtUjtUV2LVF/VH5qPPfZY3HDDDbjjjjvwne98B11dXViyZAm6u7utr1+1ahWam5tHfhYuXFjtTRKRvTTWugZU2yJTnepapPaorkXGR9UfmpcvX46//uu/xqtf/Wq8+c1vxs9//nMAwPXXX299/UUXXYTe3t6Rn02bNlV7k0RkL421rgHVtshUp7oWqT2qa5HxMS7faX6l+vp6vPrVr8aTTz5pnZ/JZJDJWDosmmDnzy6CVNa6Hldn28jw7nCu5ggx6+Ls6soL3vWuRLoAB6STL+DuHFwu8y6i6cA+TgnpXgcAkaOjdSZNuog6uvImMe/6GTv2SWO9vcNiYYh3406nXN387B0vi0VHp3NHN/bY0fY4IR1B2T5OHGM+lf2lugZ4bXvBzp9dsY7RvqNfPes4CwBBwI+JTJZ1guXrKzm6XbJNdJwqEDu6VvqOz8XOS67fgSaGnysKRft2hI7uo+w4BwC/xI/pIGVfp4FjoDxHwgEZ+EKed9wsOjrp5nItdN7goP2fKw4OvFj5HkU+3lPZ3tR1ys8gtBy3MU1R4Ps8IB3dAaC9s43OS0hH39CRhhDRyAMgCO3byLrAAkCS8H2fcnSJD0P7NpZLjrb4lq7Gw9J19o7WniNrYqjEP1fOlZSRH7QvQ7YBAODosgzyXoHvuqfg60t5fP/7pBvx4GBvxbTIcT82le1NXZvEvjuyWXt34rIj1QUe339JzK+HqdQs6/Smxnl0maEi/+flUWQ/T3iO624UOz5X7EhUISWVy/Iu9mnHk1madPHesvmPdJlstrJj9AjP/qwAADH5XK4u46mAp2fEsN9DeQE/3/sBP2ZcCQzsPqlkSeOwTaPbs9uv3EPFYhG///3v0dHRMd5vJSITRHUtUntU1yK1R3UtUh1Vf2j+1Kc+hfXr1+Ppp5/Gb3/7W7zrXe9CX18fPvShD1X7rURkgqiuRWqP6lqk9qiuRcZH1f959nPPPYf3vve92LZtG+bOnYvXv/712LBhAxYtWlTttxKRCaK6Fqk9qmuR2qO6FhkfVX9ovvnmm6u9ShGZZKprkdqjuhapPaprkfEx7t9pFhEREREREZmu9NAsIiIiIiIiQox75NSe8l76364MiSnI5Hi0ge/zdvC0HzyAOCIRBokjjsgRReGR31HQ9wGQcrRiT4csNoe3UDcBbxXvGkP2qcIU3758NEDneY4YIc+zzzOOmJtSxNdnSBxZmLK37geABLzNfTrDY0NKRfu4s9iQyBE7VKsC30NgqUmfxJcljtwmY3gtJo5YhGLeHkdhHHFimZAfL/0DW63T6xt51ENfzw46r76R12KpbI9Mch2XEY2p4udUS+LfK2bycWpobOHLkYgcz+fbXuh+nq+PLJfO8n3VMHsunbd546N03uzZ+1unDw5VRk4ljvibmuUH1ow1Q87naRIfCQCD+R46r3FOK53X37vdOj1yxED5jmi6qGw/hzgSCeFIsUSuyR6dAwCmYL++JWV+LLkiV9Jp+zlk6+bH6DLt+/LzTqZhNp3nkxirxBHTk0rz/V8kEVZhmkdHuaK0PEd8Xsyir3zLfYNtWo1rm9uJXK7yfLrl+Sesr2+axWOgTOSI4kvx/ReR+9mARKsCQOCIf409e10nju0zxnEsh/b4LYDf1/iOyL1ygd8bJCF5BkrzCKvAcZ/uR3twD2p4HfiOGmHPYp5jLIyjrhNHbF2Z7MsorrxG5PNTKHJKREREREREZLrSQ7OIiIiIiIgIoYdmEREREREREUIPzSIiIiIiIiKEHppFRERERERECD00i4iIiIiIiBBTOHLKHiFgSNTJ4BBv0R4lBTov9Hkr9pDEPRlHu/VUyFunxyQCp1TmrexjR1QMHLEmPtm1niNSJynxeWHa/rlKjsikVOg4vEgMFAAksI9Tpo7HyJQKPF4oIPs4ckRYJRE/ZgpwtOiPSUt91oZ/BkZY7AwwqzzWjLHHfAWOqKdymR+zUcSPCZPY930Y8v3RO9BD52WzDdbp5TI/VjJZR8Sb4xyTzdmjJUolfsz6jtiuhOTn+J6rfvm4uw7phJy/ozKP+vB4+hs9jeSH+ukyxdgRe5LwjWcxOL5fGXviit2oVYG382dXLPqot2czXZfniKMaGujl25Ai173YEe/iOL4AEsfmiEEJHeer/ID9GAKAfP8W6/S+bbyu5+zDI6zKRft1L0zz7XPFQMERw+ix8ws/Tbhzu8i12Xfcr7FoM+AvnMvI/UbaEsEZOe7VatX2nueQLVSOe5YcK0HguI901DXb5y5ewK+hff38mSCTsW9HU8s+fBlH3Ty/5c90Ho8f5Md/fZbHu0Xk/jMGv6719j9L53k+/1zFgv18lSP3IADgKhF2XTSJPUYTADxyXwgA23o20XlzZ3Vap+fqWiqmBY7YwV3NvCu7iIiIiIiIyG7SQ7OIiIiIiIgIoYdmEREREREREUIPzSIiIiIiIiKEHppFREREREREiCnbPZtJYntrNs93dbN0dOxzdM5MSOdq41jIGL4dHu1Sy5cJHPN4Vz4g8O27tkC64QGA7xhDMuzwHB0r44RvXybn6Iic2LsApsM6uozn8+57hmx8OsU7cbrGIoryfDu8lHV6QNYX+K72orXJ83x4lrbH6Yy9A3Uhzzshl4u8VaPn2/cFAATknMA6eANAfa6FzkvI7x+NowaCFN8+Yxydv8k2lkq8q3CadPcGgHRo7xxZLvJunClHfZRKfLl0xt51M5/n256r59teLtrr3nd053eVXFNzG52XkPN+LtVc+R6uDvs1KgwyCC2JCYXCduvr040tfGWx48LsuMYC9mO5WOqhSxQGeZfdIG2/5nge78bt/FOE43MNDdrPZQsO35cuk8220Hn5fvt5s85xHotJqgBgTzMZmUdn8XEyji722Yx93ANHF+zEsX39/T10HuuKHFkSNKIyPy/XrgC2/ZgE9rHYsZ13NJ49az6d59ta77+kTNIVioP83qCu3nW/aL/2DjmuQ/l8D53X2DCHL1ewrzN03J+Ejnvd7d328Q0c97Nw3Ndks/xePJsj117H9dXzxn7vEkf8XOBKKhjs413Bc7nK6zIA1DVV7ivPkZqyK/2lWURERERERITQQ7OIiIiIiIgIoYdmEREREREREUIPzSIiIiIiIiKEHppFRERERERECD00i4iIiIiIiBBTNnIqNgaxpT05i1IycOSIJPx3A0HAIxFiEi/gOYYtcLSRNySeqVSujDYYxmJOACBmOVDg8RDZbD1fxvErlIRE4EQkCgAA0iEfiyjinysq22N6oiKPy0oSHvFSLtkjorLp2XSZMGWPLgEAY/ixxsbdJ4eZ7zj+alcatmiYQtFeB4kjpsU1egl43JMf2vdhXObHUVzi62ORTpFj203E69e17Uli3/b6Rn48u47ZMolQc6RKwTjOqfkhHv/mB/Z4i8TwsXCc5pAk9vOS67fBdST2CgCCDK97dhwODVRGihQdcV21KswESKUsFUniUzyfR6Rs736azkunWug8E9jrZqBnG10m08IjV0Lfvu2FQR5Nk8ry4yub4e9VIttel2uiy0SO85Uh8VG+I7bJS/H7g4BE0+18M/JejvuytCWebFi2zj6GvdtfpMuUE37CSgc8wieK7dtYzldGkUURPy/XqsTE1nhTFrMIx36IHdfD2ONj63n2Yy8k13EASOf4sZwv2esmbzmXDzMkghYAfH+Azwvsx7nn8fPfjr7n6by6Onu8VUyiWgHAc9wpJTGPiGogUVoDQ/xe3Diu5fXkXGZI7BsAdG/bSOc1zdmPzhsc2mKd/qc/bq6YVhjD9XrMf2m+++67cfrpp2P+/PnwPA8//vGPR803xmDlypWYP38+crkcTjzxRDz22GNjfRsRmUCqa5Hao7oWqT2qa5HJMeaH5sHBQRxxxBG46qqrrPO/9rWv4YorrsBVV12F++67D+3t7TjllFPQ389DyEVkcqmuRWqP6lqk9qiuRSbHmP959vLly7F8+XLrPGMMrrzySlx88cV45zvfCQC4/vrr0dbWhptuugnnnHNOxTLFYhHF4sv/VKKvr2+smyQie6nadQ2otkUmm+papPaorkUmR1UbgT399NPo6urCsmXLRqZlMhksXboU9957r3WZVatWobm5eeRn4cKF1dwkEdlLe1LXgGpbZCpTXYvUHtW1yPip6kNzV1cXAKCtrW3U9La2tpF5u7rooovQ29s78rNp06ZqbpKI7KU9qWtAtS0ylamuRWqP6lpk/IxL92zPG909zxhTMW1YJpNBJsO7yInI1DCWugZU2yLTgepapPaorkWqr6oPze3t7QB2/qaro6NjZPrWrVsrfuv1lwRBiMASWRTTiBFHjILHo49iR4QAi2nxfEfbfEf0Edt2V4t2knoFAAgCHgHh+SRGwbV9JPIHABoaW63TXdsek5gqAEg7opYM2cTEkT0TBPwfTdSR+Ipc3Sy6zOBQZdzECJ8fM2z/+8iyJfj7TBHVrGsAiKIS7LvffsymHNFliaO2U1keM5KQm4eoxGuAxUoBgB/YtyOJeA2wSBgACNOOmLzQPi8MeU0VHbUdkvE1EY/zqK/j8VbFAv8uXH9ft3V62hHx5js+V8RiQDx+ju7v4/FDdU38nFDI25vohEFlbfuuvK4potp1HZeL8CznMxbrWCzx4z9LYlUAIEzxmodnf69SlkeaNNZ10HmFIfs+b541jy5jHFFahSKPpsk2tFinl0k8DgCkHPcADY3N1ulFR1yMLeZzWOCIvwQ5D/sBrwNXlEwqZT93D/bxOLu6Zn5OChwPg+WCPXIvlao833ue44Zsiqj69dpEiExlXZnEfu5N5/h1MiZxiQDQlJ1L5/X228/ZrusrHO8V+vb7sbIjVipwPGOkQn58eZbrAwAMDvB7TGt030tyJLZpaIhfdx2BvPTeBQAGybU8leaxerHjvM42pFxyxF41LeDrc7zXrLmLrNN7e7ZWTIud4aWjVfWfZ3d2dqK9vR1r164dmVYqlbB+/XosWbKkmm8lIhNEdS1Se1TXIrVHdS0yfsb8l+aBgQH86U9/Gvnvp59+Gg899BBmz56NfffdFxdccAG+8pWv4MADD8SBBx6Ir3zlK6irq8P73ve+qm64iFSP6lqk9qiuRWqP6lpkcoz5ofn+++/HSSedNPLfF154IQDgQx/6EP7t3/4Nn/nMZ5DP53Huuedix44dOPbYY/HLX/4SjY38z/kiMrlU1yK1R3UtUntU1yKTY8wPzSeeeCL9ri+ws/nAypUrsXLlyr3ZLhGZQKprkdqjuhapPaprkclR1e80i4iIiIiIiNQSPTSLiIiIiIiIEOOS01wVxlhbxvv0OZ/HIZik5HgjHong+fb3Shxt6V2/h2BpDr4jNsJ3dEJPYv6ZIzKLfSYACD2+HVHZHssQONYXJ46ICsf+ohE4Pt+Prs/FB5G3ufccEVahIx7HGPtyhhwzxhkGUJvSqYw1Ysjz7GNhHMdK4qjtUplHtQQkBiJx7I/YFa9Wtm9j6Iii8B3RNGGKH3/Fkr0Wy2U+FgmJBwHccX2M66iNHeOekCiosmP7Asc4pTP2WkwcUW6BI2KjpYXHD/WQS0XZEnthpn7iVNVF5SJgKsedXacKZUc9kXhGAAhT9iglAKivs8fd+H47XabkiGNLpe3nCdc/je3veY7Oyzni8xpb7JFJifM85rgWkfNmJu2I8CPXLwCIHfO6Nz9vnR5k+Q1MmGlxvJd9/2eaeHRY81wep9S/g8fMZdK7n03slWfe35nipATb7YshJzkvw6Mehwr2CDcACEhcHAAEoX2/F0kkHAAUSl10Xhja66a5iZ8n4oifryISRwgAmXS9fXqKH8ux4evzU/bj1XOMX0MDj2MrRzzGLSb3ramQRagCxV77uQAAwkZ7pOPAAI/iY9sAAKkc344dO7ZYp7c0V17jUyl+DdjVzDsDiIiIiIiIiOwmPTSLiIiIiIiIEHpoFhERERERESH00CwiIiIiIiJC6KFZREREREREhJiy3bMTkyCxdOJknZVd3WFBOjECQMHROTNNOme6WseWI0fXT9KxLwz57y4KRXunXOClbqVEJmPv2OfqROzqXsjG13M1rXb8TqZU4uPuJfbtMI6OqgDvCJrL2bsU9g3soMsEoaM0SJdnACgW7J/L9+3LxM7O7rUp8Hf+7MqQ4yWO+Xjn6lvovEKB106x0GffNsd+d3WqLZE6bcw10mXKJd61sljg3SQTS6oAADiGCWlHR9OEdAJOpfhYRI5O3fD4cvUN9vPS0IB9fwC8dgDAT9vfKynzZVydv4sFvk9MYu+eamvc72rmX6tM4sEklR11Y3Jd8R2n2Oamefx9In7dM7H9uEwFvJ15nHbsLFIbpRI/XhuaW+i8jOMcwg6awLV9jtogjepR5zhn7tj6Ap2XeLxTbbbefp6rm8U7nQ/18+tvinUIdnTwLjtqN1ffROcN9m+3TrfeQ828sAsEXtqaYMBSZEzM79Nix7xiiV9T2HW0nOEdqEPHM0Gx1GudPm/+IXSZQi8/XvtJugzA83lSpGYAIB3x81VStt9jhgE/oZrY0YGfzgEyZHyHhuw1AwBeit+LD/TYu9jXN/LUiqFBPu7GcR+SL/VYpyeWZ7RCYffvw2fgpV1ERERERERk9+ihWURERERERITQQ7OIiIiIiIgIoYdmEREREREREUIPzSIiIiIiIiKEHppFREREREREiCkbOeV5Bp4l2qcc2dutB46MjzDDYx5SJFIC2Bl7ZePb8nJeYkqOWCSSz1Qq89b4viPeKJPhERAsnsnzeCv7MOSxNFFsH/eyI9olnebN7CNH1JIpk+gN3zFOlqiTYYUhe3xPOnA023fGivGZ2TQZQ3IsxY4olFoVhimkbLEEvj2qIHZEiQzl++m8VGiPLQEAQ6LrXDk4xnFQBKF9XrE4SJfx4Kp7flx45PwT+vw85zvOjzGJsIgSHk8XOqJzPEeEXjFPatERiVVXN4fOi409SiNxxPEV8/x4ihzRHIWiPWYoW9diWY89nqqWJV4KiSVuzCPXopbmVrouV6SZ6zpVLtmjX4byPCIq28C3o5i31282M5suA0eso0sc25erSzXQZSypnCN8EnazY+tmusyOLTzeJT1rFp1X19RinV52xAiFKX7/4pFzbeSIESqQcwsADA7wKK36BnvcTWLZH7ZptS5OCogsn7suaz8uWRQVAGTSPCKKXdcAYIjEgnkBjzdi0YwAkCH1++Lzf6DLzHfEUfUPvkjn+SQLskBiLwGgvoWfX4by9hqNHZGsUZnf14S+I4aWRNr5LM8OQNkRR9XYdqB1et0cfg4uFHr4e7lSaMn9pG3Lx1LV+kuziIiIiIiICKGHZhERERERERFCD80iIiIiIiIihB6aRURERERERAg9NIuIiIiIiIgQemgWERERERERIcYcOXX33Xfjn//5n/HAAw9gy5YtuO222/COd7xjZP5ZZ52F66+/ftQyxx57LDZs2DCm9/GDFPzQEmtC4n5KEY82iIwj3siVLURiX0olHkuSOFqxl0iMhiP1Cp7Po2cix2cOA/uu9X0es1Qs2aNnACAg7dvDFN8+4/pgJA4DAPyU/Xc5kSOaK+WIK2DxM6Ht+HqJMXx9jl0Mj4xvsUgiu4pTI5pmouoa2BnlFlvijIoFe2SIM+rJ48dzHDlih0gUVOiKxHDUYpkcm2HGcZw7Tr++I/oqTsgx4zgwPcc4+eR3p+k0j+yKIp714Nx2ck4gaXwAgL6+LXymZ9+OOOJ1lcs203llxzk1Q2Kx6usbK6aFAT/2JtJE1nU6W4fQEiXnxfYacEUEeRE/18cxj3GLyXFUV89jy1IZXvPPP/Zn6/TGNh57FbLYQQB19Tw+qkgizQq9z9NlGlsW0Xks3qfnxa10mfq2BXRe4ijS/GAvmcPP3bnGyroZViDXAud9Q8gjrOrq2/h7le3vlUlV7sfIEeszkSayrn3PQ2C5F04S+znO93gMVBw5Ygwd96az2/a1Th/o5VFPQ47YuoQcl7Hjutbfx2PLsmle14WC/XyVs0QVDiuTqDsAMCTSy5EqiYjESgJARGIbAR4b29LEI7HqHefTQmzfJ33beQxewu53ABhHtGMq1WSdbovf9Em0lnX53X7lSwYHB3HEEUfgqquuoq859dRTsWXLlpGfNWvWjPVtRGQCqa5Fao/qWqT2qK5FJseY/9K8fPlyLF++3PmaTCaD9vb23VpfsVhEsfjybzr6+njgt4iMj2rXNaDaFplsqmuR2qO6Fpkc4/Kd5nXr1mHevHk46KCD8Pd///fYupX/c6BVq1ahubl55GfhwoXjsUkispfGUteAaltkOlBdi9Qe1bVI9VX9oXn58uW48cYbceedd+LrX/867rvvPpx88smjfoP1ShdddBF6e3tHfjZt2lTtTRKRvTTWugZU2yJTnepapPaorkXGx5j/efZf8p73vGfk/y9evBjHHHMMFi1ahJ///Od45zvfWfH6TCaDTIY3nBGRyTfWugZU2yJTnepapPaorkXGR9UfmnfV0dGBRYsW4cknnxzTcnEcWTvZWZruAgA8R+u4iC0EwNXdsUi63gWOLn/eHvzx3tVk2nd1i3S1nCXbQRrvvbQ+/rkSspwxfGwTR6dJA971Lpuzd9VMEn5Cj2NHV0YyPYldnTAd3bMd+yQhOzOVtnf2dDSTnNL2tK4BoBzF8APLAUW61SeOjpau4nHtX1qnCd+3IdmHAOB7Y7/ZMAnfdlfdhwF5L0d3b9fxzE5ntEs3gDjOO+bxgzqdsY9h4jgxlaMhOs+D/b0CRwdXP+Bd81PkGAQAz7e/V7lY2RG0XJoaXfHHam/qOoSHlOW4TTz7WIQh30dewOdlHd1Zy+Ra70q86O3mXXELxn48NKZ5PZUM/y5oGvV8XoO9w3dS5p15Ddk+ADDket4y/1V0maGBHXx9aUe3/5S9pqKYd+3dtvUZOi9X32KdniId7AEgLrAO3kDg6Kzd1NBqX5+xXaOmZ0rr3tS1Mb41TaSt9UDr63dsd6QdhPyaHJMkBAB4/tlHrdODND+Xx2V+3QA5Hlydv3u2807dQciPS3q9IedFAPAczwSBZ6/DbD0/t+QH+Vg05uxdpgGgocG+zkKZn+Mamnln7cEX7UkAxfw2uozrfiKT4edGj1zLY1Rer43neDDaxbifAbq7u7Fp0yZ0dHSM91uJyARRXYvUHtW1SO1RXYtUx5j/0jwwMIA//elPI//99NNP46GHHsLs2bMxe/ZsrFy5En/913+Njo4ObNy4Ef/0T/+E1tZWnHHGGVXdcBGpHtW1SO1RXYvUHtW1yOQY80Pz/fffj5NOOmnkvy+88EIAwIc+9CFce+21ePTRR3HDDTegp6cHHR0dOOmkk3DLLbeg0RFkLyKTS3UtUntU1yK1R3UtMjnG/NB84oknwji+R3jHHXfs1QaJyMRTXYvUHtW1SO1RXYtMjunZ1UBERERERERkAuihWURERERERIQY98ipPRUnCWJLzhFLJrG9dmSeI1YqFfAhqKtrsU4vFXmMgu+KfWHxEK6kGEekhCMdBYFv/1yJI+bGkPgWAIgj+2eOHFEx2ayjDb/hrf0L+QH7MoEreoNHisSwb6PviCkzjpgyP+TRXHFc2c4eADyyP2bir61SYQapsDI2qcgiIhwRb9k0P8YG+nlEhEf+aVsY8GgS4zjHsOi1yBGXlXbEoLjqPvDtteMKTTDGFa9mXzKK7McyAAQpHrGVreOfK47s71Uu8fdKpx2xEuSclXbEaNTX83n9O7bSeYVBe8xWrq7y+DSOmIxalcrVIZWqPDZ3dNkjaMrl7XRddU32+CUAQMi/l5kix0OxxCNX4ohHv3Qssh972Xq+fbYxGBaSaCYAKBfsNRB4fJmSY9tffPIh6/TG2fPoMllHbSSO+yh265CU+TINTXP5+gjjOCdFjmi6VJZ/rpicG+Ny5T1FXHadR2tTJlWHTLryfN8/YK/fcsz3Q9mx/1wCn0UV8vOsK2bMt9x/AEBseJRi4IjBSzvuJQfz9nHyPB4RNWvuIjqP3Wt0v7iJLuO4tcfgUD+dl87Yzz0h2R8AkC864qgamq3Ty9v5dddPue63HbFijnu5Xblifyu2Z/dfKiIiIiIiIjKz6KFZREREREREhNBDs4iIiIiIiAihh2YRERERERERQg/NIiIiIiIiIoQemkVERERERESIKRs5lRggtrQBTwyJDwp4W/LAFRHkiBBg8Si+IwLH1bvc8+zLBYErVor/XqNkiUQYFnv27Qgc4xTHPL7CD+zbkQn5IcRa4wM79y9nH4+QjB8ARHDsEzK+5XjPxj0u8XFiv4bySDRX4ojsqlVxHCGOKweK7Y0w5JEriSOayfccx2Zir/vGhha6zGC+27Ed9v3oOGThOTLjAse8OLHHv8Xg57JCnh+z6aw9+iKd4nFeiSvgyhGFF0X2cxaLagOAlGP/myKJCEnzuIlSwR5pBwCJ4/ydq7PH1pRLlZ+p7DpH1KjB/j6Eqcqa2/G8PU6k15He01bYQef5JHINALL1Oev0phYes5SUHbVG6jp0xM+AHOMAEDiO5RK5KPa/yM87xUE+TkGdfSxa2nmcTeLY9nLRESVE6jftiAR0RdqlyHKDg3wsGhrb6LxymceEsn1iLCcy27Ra5/k+PEukUr5ojypKHPlGaUt01chyjkjHYsF+XAYBX59x3Fcbcq/rO+raFfFainhUVV3WHlvnO+5dCnle1xGJmSuV+DEelx3xkb4jNrZgH99MxhHn5boXJ/fHMbkfAwDjuCaneW8fhQAAgK9JREFUHVFyETkM02HluSWJHdu8C/2lWURERERERITQQ7OIiIiIiIgIoYdmEREREREREUIPzSIiIiIiIiKEHppFRERERERECD00i4iIiIiIiBBTNnLKD3wElpgjz7e3aXcmGDlalgeWVvp/aTlXvJUrRibt2yMgiq4IFN69H4Er9oJth2P7bLECr5hrn+yIlfLJvtq5Ose2k1XGZUeMi+OtyrbsMrjjBQKfl4brY0Uk2iIM7WPrijGoVR4CeJZYgji2R5rUZRvpuqIij1lIh3z/psk6S/lBuozvOMmkSAxd2RX1kHLEmkWOCAZy0AQBj7NJZ/g5KyTrix1xaGGKr6+U5+czj8SANTQ202UKJNoEAMKcfT+yCLCd6+vj63NEokRFe+xJmK2M34gdkXW1KpXOIJWqrLk5i+xxT/M8HmGUqWun80olXlPFgV7r9Dwcx2SKx6ds/dNz1ulN8/iJu2VOJ53X399D55VIzW/r5vEzqYRvR8eCudbpxSG+DWlHlEx+aDudB0uMCwD4Hr8/CEJHJBC5o8uS+B4AiBwRnK7YOrBrfdFynMWOG7IaVYqK8C2HZiZjv756ho+157hRS1hGEICAnJfLjpjUFPj138Qkwiptj18EgLIjIs04IhM9z15ToSM6r6+P1zy7QU457idyudl0Xpw4omZTJI7NkaWZOJ4JyuQevqlpDl/GsY9jR0wZjP18GkeVx2BMYrxsZt6VXURERERERGQ36aFZREREREREhNBDs4iIiIiIiAihh2YRERERERERQg/NIiIiIiIiIsSYumevWrUKt956K5544gnkcjksWbIEl19+OQ4++OCR1xhjcOmll+Lb3/42duzYgWOPPRZXX301Dj/88LFtmUmsnZkD0umVdVvcuU28w5rn6IQdl+3rNI5u3Cbh80qku2PK5x1bt/c9T+c1NbXReb6l8/hfknJ0xC0W7Z1OfUeXWNe82LFPgtB+WLJ9DwCJoytjnNi3I3R0C3c1tXZ1GO0nHRZZx2M2fSJNaF0DQFKyNoBkHU5Dx94wcHV45vvJI8dmylE3ccK7gpZJ90XP0cHbsDbxAODYjiAknbpLfCySyDGPdHZ3nUK8mHf3djTxhEf2satbfYqcDwCgrsXedbN/+xa6jHGclyLDOzobMoZhfVPFNI907J9IE13XW559CoHletq+cF/r68OAd6qta2yh84pd9o7WAOCTc7Mx/BzSu4N3qp2zyL6+Wa0HW6cDQDnPj6Ewwz9zf+9m6/SUo0HsrH1b6DxDu87y81h+0N59HACKeT5vdkeHdXpS5ueJKOLJB5ks6ZbsaHIbObqqB45uvz7p6L/5qcrjzNmtd4JMdF0nSYwkqdyPhYJ9vDNpeyd1wBm2grSjczXrbuw5VuiBHyzs7Bw5OjWHpEM8ACSO+7hU2n4OiRzX0EzIu8SXSnnr9LKjnsoxn5er48kVO3p7rNPTjmty4qoRcu31A/4MxI6znRzXWXJsGMsJ1XUfuasxPVmtX78eK1aswIYNG7B27VpEUYRly5ZhcPDlmJavfe1ruOKKK3DVVVfhvvvuQ3t7O0455RT09/PYEBGZPKprkdqjuhapPaprkckzpr80/+IXvxj136tXr8a8efPwwAMP4IQTToAxBldeeSUuvvhivPOd7wQAXH/99Whra8NNN92Ec845p3pbLiJVoboWqT2qa5Hao7oWmTx79Z3m3t6d/1xn9uydwdlPP/00urq6sGzZspHXZDIZLF26FPfee691HcViEX19faN+RGTyVKOuAdW2yFSiuhapPaprkYmzxw/NxhhceOGFOP7447F48WIAQFdXFwCgrW30d23b2tpG5u1q1apVaG5uHvlZuHDhnm6SiOylatU1oNoWmSpU1yK1R3UtMrH2+KH5vPPOwyOPPIIf/OAHFfO8Xb4Ub4ypmDbsoosuQm9v78jPpk2b9nSTRGQvVauuAdW2yFShuhapPaprkYk1pu80Dzv//PNx++234+6778aCBQtGpre3twPY+Zuujld0U9y6dWvFb72GZTIZZDK8c5qITIxq1jWg2haZClTXIrVHdS0y8cb00GyMwfnnn4/bbrsN69atQ2dn56j5nZ2daG9vx9q1a3HkkUcCAEqlEtavX4/LL798TBuWCn1rBFKpaG+dzuJqACBx/EE9il2RNfbhiSLe5t4P+JD65Jd8rtCh5oZWvj5XZBJ7L8ebeY4tqSdt6WNHi362rwAgTPH9xWK7Is8e2QUAjqQv+L49biIu81b2acd+LOb5/jdkDGOygYlrwyfIRNb1S2+482cXPokPiAr2iAUAgCPaJ4r48cIiTVzRdX6Kz0vIseQ7T7GO/A1HBFOxZK+r0LEMPF6nnm+PxfJTPC6rrqEyZmnYQN+LdF46ba97V4xfNsvfq1i0f+/OMbLwHNcDV4zf1q4nrdNDS6xOFPE4kYky0XWdqs9Z49CGhgasr8+SGgSAMG9fBgAaWnhEymDeXodlxzmkONBD582Ze6B1er6PdyE2jiiZvu3b6bzmOfbYpraFjXSZ4mA3nZcY+1iUHNE0dY74mSB4FZ0X5+3jW9c4my4z2OeoEXKz5Dmul54jNSbleBhk57LW+e0V06IoAv78Z/5GE2Ci6zqdqkM6VTl+UWTf5wG5ngCA5zuu1477scgSeQUAKcc1yiP3fQDAEk/TaR71BI+/V9lzRF+R7MbYERHpuh6yZxZX7Kor/jVfGKTzfGOvm4EBfh7L5vj5yiPRb4N5vg2u5xIXW0waAGRRGQHmj+EfXY/poXnFihW46aab8JOf/ASNjY0j349obm5GLpeD53m44IIL8JWvfAUHHnggDjzwQHzlK19BXV0d3ve+943lrURkgqiuRWqP6lqk9qiuRSbPmB6ar732WgDAiSeeOGr66tWrcdZZZwEAPvOZzyCfz+Pcc88dCVX/5S9/icZG/tsHEZk8qmuR2qO6Fqk9qmuRyTPmf579l3ieh5UrV2LlypV7uk0iMoFU1yK1R3UtUntU1yKTZ69ymkVERERERERqmR6aRURERERERAg9NIuIiIiIiIgQe5TTPCESWHOEfJbb5PiaR+DzeKNshs8rksgkS6rG7mwGEmNvS++TlvQAEGb4vDjiMTLpsM46vVjk0RuhI7YrIu/liuwKHLFSLAYKAAwZpyhyvFfIIyWMsb9XkvBIIuOInHJ9pchj89hCk584NeHCIERoGd8ksR9jniNAKAwcUXPlITovJu+VSni9pUgEHQB46coYAwBIyLEHAMjw9SWefX0AEJOPFcU8ssMVbZbN2WNmCvltdJnBHfw8Eid8O5DOWSd77LwOIF3Hm9f0vbjROr2pqTIuZthQoZfPG+ARPpmMfTuiUmVcRlRyjEGNamhqQ2iJgCn02+NJBvM9dF2ZsJ7Oy9bxWJi4/IJ9fY4YlP0OsUc9AUCeRDoFIT9eY8f5alYHf69oiNRU2XEOcbwXi+MJ045rpSPCr+yIBBoY3GqdvnUrj2dqaOZxmiw+x7F52PHCs3SembfQ8V5kpYHlfoNlFdUwg6J1hJKYxL8GPCKQ3UcCQJpcGwDAIzFumQy/TpZL/Prvh/baSBJeT1HCY+ZYrBQA9A3Yrze5DD/HFRyRexlyPRwcsscvAu7YJs/weVHZfk7KkmshwO+tACA29ntu48qLM/w+yRkRRh5vA8u+D2JXSOVo+kuziIiIiIiICKGHZhERERERERFCD80iIiIiIiIihB6aRURERERERAg9NIuIiIiIiIgQU7d7NmDtLJzJ2DvsxY4uzh5taezuchrA3rUyinl3uDDkQxoH9g5tQZovUyo6ts93vFfZ/pnjiK/P9/nvUFjz3dDRITt2dCL0eMM+2j07cHTc9hy//0ml7V0KC479yDqdA4Dn8fcy5DN7Htn2Gdg9O4kjJLFlDMlBYRyDFDu6mQYpx/Gc2LtxwufdOI8+7q103t2/usU63UvxDpkAP/4ARydR397505AOowCQzvIuk0MFe3djV2deP+AdeOtyjo6W5JyVyTk6iTq6gqZDexfPvKMzc+Koe+M4j9TV27v99vY8XzEtKrv2bW3qe/F5BEHleW7jNnuX3VmOdRXzf6Dzojy/DtS12o+91GxeT6WBHjqvXLbXRio1hy7jOWojYNcBAPWtc63T+3tfpMsM7qg89oY1ztnHPsPRKHawwGutVKjsEj8s29BmnT67g3dSLgzybsQBSUWIinwbWubvy99rYAedx7qJZxtbKqaVZ2BdZzI5ZDKVYxSQe7hinu+jwJFKUnakP8C33wP0k878ABCS6yQAZNP2dJmS4/4YHi8c4+hAzRI+YkfH5jR5zgGAhHQgd/XYD9nOApC4WtKTe6844evzSdf+nWuzj6+JXZFEjnQhR+JPsWy/7sAyfq6u7rvSX5pFRERERERECD00i4iIiIiIiBB6aBYREREREREh9NAsIiIiIiIiQuihWURERERERITQQ7OIiIiIiIgIMWUjp4qlAjxbm3nS8j+T4dEGrnwjR8oSksjebt13tECHI6qIdX0vl4foMlGZt8APSZTSS+9mnZrJNPNFHC31Y9K+nY0RAIQBbz2fJLzFu09iOfwU34+Ro21+FBWt012xV+WIRxm52veDxVGx2DNHHFqt8gMPvmUME9jH1THaCBw7MY75vMC3RxX4vmN9Ho+jmtW6v3V6wXE+GBraRucNDmyl82i8muNYKiX8HNPU2G6dnh/kMS1xQuIcAJRscWIvqSPRVzu2b6LLuPYxi6dzJBC6U94c78XGwxZtEpOIlFrWu70I3xILyALIio7KNll+a+JleU319tkjk4IsvxYVe/lxPnu+vTZ8j68vdtwflEv8uhdkSTSN4wRYz2KlAHjkSE9n7DFtAJAv8BiowX4+Th1zF1qnxwUeg5cJ7LE/AAByrTclXleuS2m6voXOKyf2+4PYsq+iiH+eWlUulRFYbpS9xF6juTS/TsZwRMM6stBKZftyYeCIZvT4OSQx9oPF+szxEt8R8Voo2I8hgN8Hu+IyfcffM9k45TJ83MtlftwaR3xUYuzL+XBEPRX5WMC3ry8V8JhKVyRWyfFeCRknP6xcnxnDfbj+0iwiIiIiIiJC6KFZREREREREhNBDs4iIiIiIiAihh2YRERERERERQg/NIiIiIiIiIoQemkVERERERESIMUVOrVq1CrfeeiueeOIJ5HI5LFmyBJdffjkOPvjgkdecddZZuP7660ctd+yxx2LDhg1j2rBUKo10qrKteYl0ac/meORUqTxI5xULPDolRIZuGxNFPCLKC+2/o3BFM3lpe/wSAMTOmCV7dEQYONbnjIGyt6UPHBE9SczXF5NW9gCQIttYLDjiOlKOiBLYl0ul+Fgkjs9lSFwBAIShfV+W4rx1epxMfoTFRNY1AJg4hrFkArG0HxY3AQCBIyIik7HXLwCUSXQdQl7bD9+3ls7zAvt77djBo5TgOMZCErsGAKmMPWouTPHPO1jkcTFDQz3W6UnMI0CQ8H2SGH6+7S3Z56XSPDokSz4vAAz0v2DfBkdZGRLHBwBe4MiqIhFJYVB5zMT8LSbMRNd1AgNboFc9+dV85xEH22cAMI5gMGP4daBUskeQ9HQ9T5dZcOAhdF5UtEe1GUdcTOSojR1dT9N5zck86/R01hGnCX6gD+3YaJ0eplvoMsXBATqvpXVfvtyA/X7DD/l1uVjk916I7OfhsuOewjjioLKO80s6tJ83Y1NZxP4MvF77ng/fEqUZkPtZ47iu0bjEl96HSUr2++pUit87l8kyAJAK7Sfo0BErFZF7OABIubJrSSyiK1bKFsk5LJOxxzMV8zwuzpEMy2NSAfjkfjZO+Ng6Tn8IfHsslnHED3qOOCjjeI5gz1WR5d4vckRy7WpMf2lev349VqxYgQ0bNmDt2rWIogjLli3D4ODoG6FTTz0VW7ZsGflZs2bNWN5GRCaQ6lqk9qiuRWqP6lpk8ozpL82/+MUvRv336tWrMW/ePDzwwAM44YQTRqZnMhm0t7fv1jqLxeKoMOy+vr6xbJKI7KXxqGtAtS0ymVTXIrVHdS0yefbqO829vb0AgNmzZ4+avm7dOsybNw8HHXQQ/v7v/x5bt26l61i1ahWam5tHfhYuXLg3myQie6kadQ2otkWmEtW1SO1RXYtMnD1+aDbG4MILL8Txxx+PxYsXj0xfvnw5brzxRtx55534+te/jvvuuw8nn3zyqN9gvdJFF12E3t7ekZ9NmxzfARSRcVWtugZU2yJThepapPaorkUm1pj+efYrnXfeeXjkkUdwzz33jJr+nve8Z+T/L168GMcccwwWLVqEn//853jnO99ZsZ5MJuNs2CMiE6dadQ2otkWmCtW1SO1RXYtMrD16aD7//PNx++234+6778aCBQucr+3o6MCiRYvw5JNP7tEGisjEUF2L1B7VtUjtUV2LTLwxPTQbY3D++efjtttuw7p169DZ2fkXl+nu7samTZvQ0dExpg3zg8AaV5AirdgLRR5zkljibYZ5rggmslziiDbwWG4OAENaz8exI7bJ0b/d0YkdIYlgShK+kCseIontLeYzGR6HUSRxHQBQ5h3rkcraf9vpezxeIHHEZXkklsgVqeN7fCwKJR6VkYDsY7If2TE2kSayroGdx63t2PVCex3kAh4X4opcAdkXAOCT2KF8sZe/U347nedl7FEKMakbAIgdm+6X+bYXi/ZYGD/N6yPb1ErnDXTb43jqsrPoMhHL/gMQOC4rLGYjdNT20BDfJ+z06EqGqavnn6voiCdkJ1xbBJIrFmmiTHRd+7B/36uhhdSvIy7Ed8TW+I5rtontx1fbogPoMlGR1yhLFywM8mMyTNsjYQCgua2NzvNI9EtU4lE3Azu66by58+2f2RUXE4T8XBtYotVeXif5Z7+OrBtX3KIp25eLI0ddkZhNAGiYwx8qiwP2hlelwcr7l8hx7zdRJrquA89DYLmvZRFRjqBCZ1wnLTYA2UyddXpM7qkBAB6/RpVj+z1cynGMl0uOyFPHOQksni7h10kTOSLtfPs84zuiFEk8GOAcdrCEt7Ljeauugd9rMM7nHH4pAAw/l/mw35PZjlsWqWtf7xisWLEC3//+93HTTTehsbERXV1d6OrqQj6/86Q+MDCAT33qU/jNb36DjRs3Yt26dTj99NPR2tqKM844YyxvJSITRHUtUntU1yK1R3UtMnnG9Jfma6+9FgBw4oknjpq+evVqnHXWWQiCAI8++ihuuOEG9PT0oKOjAyeddBJuueUWNDY2Vm2jRaR6VNcitUd1LVJ7VNcik2fM/zzbJZfL4Y477tirDRKRiaW6Fqk9qmuR2qO6Fpk8e5XTLCIiIiIiIlLL9NAsIiIiIiIiQuxxTvN4G8r3IjGVHe6ydfZuzfX1LXRd/X3b6DzXP3TxSafucokHxKdD3n0vIu1y6xp4t83Bvh46D47OgWFo7xwXOjpkR47OlH5gX65AOvkCQBjwjrieo/V3qWTviBf4/Hc8jlmISavuwLGvAN5NL5uzd3IEgGLZfmz4xt7ZMI7d/9SqFqVTGWRSlWMfkU7Yrq6tw81PbFJZvlwS2GsnIt13AcDLOLq3k1Op67gMfEctOjrm1tXZv5cWOTo25/t28O0IWOdvR0dLR6dOgI+Tz7r6O8rA1dE002g/d7q6CpdLvPOnq+t1ObanAaQs55HE1Rq9Rs1dNAthWHlctLTYu6n6Hh9rlpIBAKWyIymB/NNVEqAAwJ3kYEj9Ns6eT5dJyrxuDFw5uKRjtOU+aFiY5fciSJH7l0F+bsk28O7ZSczfK8PSA1yXtzKvkbRPEjQcHbfT9QvpvN7tL/J55FyRbW6pmBa5IktqlEliGFt3Y3IJcJ3LXaMXkHtMAEhIG+fIcS+eTfNjuViwn8sjx98RPcd1CI7rxqw59nPFQD+/DvUP8ON1MG+/5zaO8Quz9voEgHSOj1PUZx/furpmuoxxJIaw86nrfsL1dYRsjn9HPyEdyMNU5f17GLvuZ0bTX5pFRERERERECD00i4iIiIiIiBB6aBYREREREREh9NAsIiIiIiIiQuihWURERERERISYct2zhzulFQr2DmzGs3dzCwPeETKf5x32EkdnNp90UHZ17ItDvr6IdH70At4ds1BwdMd0dM8mzYHhO7rURRHvTOnBvsLA511OQ593ES0U+bwotM9zdc8G+Ppi8rmCkI8fbQ0JwPCPjBJpxWrIvhrev64OgbVi+DMWi/Yx4t2z+X5n6wKA2LGfkti+P0qkSycAeAk/JhJSH7Gj26vn8+MvcnwuBGT8nJ2f+TwkZNtd5Wb45wo8PvAxeS84lvEcte1H9rpxHRe+43iKHWMYkTFMLAdaqbTztTOprmPSrTQi3a4Tz9FhPOHHQ9nRdTkp28c7ce1XsgwAGN/+XmVHB29392xXV3W27XyZiIw5wLcxcoyf77jGJo5W2B7s7+Xqnu283yBpE65lfMc+cS3HUgJsywzfS8ykui4U7fegQWDfR8Zz3Ds53o+tDwBicu4tkW0DAJM47hvIfXXAywmxrYP4S3xXckXefn/vurcvuO5rSDKDYTf9ACJHGkziucbJvh2x4++trtpg986e65hxPOe4/u7LumfD8lxSLO7+fbhnplj1P/fcc1i4kEcHiNSiTZs2YcGCBZO9GeNKtS0zjepapPaorkVqz+7U9ZR7aE6SBJs3b0ZjYyM8z0NfXx8WLlyITZs2oanJntE8U2gsXlYrY2GMQX9/P+bPn+/8LX8teGVt9/f318T+q4ZaOZaroVbGQnU9vfdfNdTKsVwNtTIWquvpvf+qoVaO5WqolbEYS11PuX+e7fu+9Um/qalpWu+UatJYvKwWxqK5mQfF15JX1rb30j/HrYX9Vy0ai5fVwliorqf3/qsWjcXLamEsVNfTe/9Vi8biZbUwFrtb17X9qzIRERERERGRvaCHZhERERERERFiyj80ZzIZXHLJJchkMpO9KZNOY/EyjcX0pv33Mo3FyzQW05v238s0Fi/TWExv2n8v01i8bCaOxZRrBCYiIiIiIiIyVUz5vzSLiIiIiIiITBY9NIuIiIiIiIgQemgWERERERERIfTQLCIiIiIiIkLooVlERERERESEmNIPzddccw06OzuRzWZx9NFH47/+678me5PG3d13343TTz8d8+fPh+d5+PGPfzxqvjEGK1euxPz585HL5XDiiSfisccem5yNHWerVq3Ca1/7WjQ2NmLevHl4xzvegT/84Q+jXjOTxqNWqK5V16rr2jMT6xpQbQ9TXdeumVjbquudVNejTdmH5ltuuQUXXHABLr74Yjz44IN44xvfiOXLl+PZZ5+d7E0bV4ODgzjiiCNw1VVXWed/7WtfwxVXXIGrrroK9913H9rb23HKKaegv79/grd0/K1fvx4rVqzAhg0bsHbtWkRRhGXLlmFwcHDkNTNpPGqB6lp1rbquPTO1rgHV9jDVdW2aqbWtut5Jdb0LM0W97nWvMx/5yEdGTTvkkEPMZz/72UnaookHwNx2220j/50kiWlvbzdf/epXR6YVCgXT3NxsrrvuuknYwom1detWA8CsX7/eGKPxmI5U16rrXamupz/V9U6q7ZeprmuDalt1/Uozva6n5F+aS6USHnjgASxbtmzU9GXLluHee++dpK2afE8//TS6urpGjUsmk8HSpUtnxLj09vYCAGbPng1A4zHdqK7tZvpxrLqe3lTX3Ew+llXX059q224mH8szva6n5EPztm3bEMcx2traRk1va2tDV1fXJG3V5Bv+7DNxXIwxuPDCC3H88cdj8eLFAGb2eExHqmu7mXwcq66nP9U1N1OPZdV1bVBt283UY1l1DYSTvQEunueN+m9jTMW0mWgmjst5552HRx55BPfcc0/FvJk4HtOZ9pfdTBwX1XXt0P7iZtrYqK5ri/aZ3UwbF9X1FP1Lc2trK4IgqPgtxdatWyt+mzGTtLe3A8CMG5fzzz8ft99+O+666y4sWLBgZPpMHY/pSnVtN1OPY9V1bVBdczPxWFZd1w7Vtt1MPJZV1ztNyYfmdDqNo48+GmvXrh01fe3atViyZMkkbdXk6+zsRHt7+6hxKZVKWL9+fU2OizEG5513Hm699Vbceeed6OzsHDV/po3HdKe6tptpx7HquraorrmZdCyrrmuPattuJh3LqutdTGzfsd138803m1QqZb773e+axx9/3FxwwQWmvr7ebNy4cbI3bVz19/ebBx980Dz44IMGgLniiivMgw8+aJ555hljjDFf/epXTXNzs7n11lvNo48+at773veajo4O09fXN8lbXn0f/ehHTXNzs1m3bp3ZsmXLyM/Q0NDIa2bSeNQC1bXqWnVde2ZqXRuj2h6muq5NM7W2Vdc7qa5Hm7IPzcYYc/XVV5tFixaZdDptjjrqqJEW57XsrrvuMgAqfj70oQ8ZY3a2d7/kkktMe3u7yWQy5oQTTjCPPvro5G70OLGNAwCzevXqkdfMpPGoFapr1bXquvbMxLo2RrU9THVdu2Zibauud1Jdj+YZY0z1/34tIiIiIiIiMv1Nye80i4iIiIiIiEwFemgWERERERERIfTQLCIiIiIiIkLooVlERERERESE0EOziIiIiIiICKGHZhERERERERFCD80iIiIiIiIihB6aRURERERERAg9NIuIiIiIiIgQemgWERERERERIfTQLCIiIiIiIkLooVlERERERESE0EOziIiIiIiICKGHZhERERERERFCD80iIiIiIiIihB6aRURERERERAg9NIuIiIiIiIgQM/Kh+d/+7d/geR7uv//+qqzP8zycd955VVnXK9e5cuXKqq5zv/32g+d5FT8f+chH9nidJ5544qh15XI5HHHEEbjyyiuRJEkVt95u3bp18DwP69at26PlV65caR2TbDZb3Q2VcTdT6/qGG27AmWeeiYMPPhi+72O//fbb63VO97p+7LHHcO655+INb3gD6uvr92pdMvlmam2/0gsvvIA5c+bA8zz8x3/8xx6vZ7rX9q4+8IEPwPM8nHbaaVVZn0ycmVrXH/7wh7F48WK0tLQgl8vhoIMOwqc//Wls27Ztj9c53ev6Bz/4AU444QS0tbUhk8lg/vz5OP3003HvvfdWd0P3UjjZGyAT67jjjsO//Mu/jJrW1ta2V+t81atehRtvvBEAsHXrVlx33XX4xCc+gS1btuDyyy/fq3VPlF/84hdobm4e+W/fn5G/T5Jp6N///d/R1dWF173udUiSBOVyuSrrnc51ff/99+PHP/4xjjzySLzpTW/CT3/608neJJG9smLFiqr9Mnc61/Yr/fznP8ePf/xjNDU1TfamiOy2wcFB/MM//AMOOOAAZLNZ3H///fjyl7+MNWvW4MEHH0Q6nd6j9U7nuu7u7sZxxx2Hj3/842htbcWWLVtwxRVX4IQTTsCvf/1rLF26dLI3EYAemmeclpYWvP71r6/qOnO53Kh1Ll++HIcccgiuuuoqfOlLX0IqlapYxhiDQqGAXC5X1W3ZU0cffTRaW1snezNExuyOO+4Y+SXPaaedht/97ndVWe90rusPfvCD+NCHPgQA+I//+A89NMu09v/+3//DHXfcgauvvnrkuN4b07m2h/X29uKcc87BZZddhm984xuTvTkiu+0HP/jBqP8++eST0djYiHPPPRf33HMPTj755D1a73Sua9u/EFi+fDnmzp2L7373u1PmoVl/TiMKhQI++clP4q/+6q/Q3NyM2bNn4w1veAN+8pOf0GW+9a1v4aCDDkImk8Fhhx2Gm2++ueI1XV1dOOecc7BgwQKk02l0dnbi0ksvRRRF4/lxJlQqlcLRRx+NoaEhvPjiiwBe/mcz1113HQ499FBkMhlcf/31AIAnn3wS73vf+zBv3jxkMhkceuihuPrqqyvW+8QTT+DUU09FXV0dWltb8ZGPfAT9/f0T+tlkeqvFup6ofxUxnepa/1Jk5qnF2gaA7du3Y8WKFfjyl7+Mfffdd1zeYzrV9rBPfvKT6OjowMc+9rGqrE+mplqt613NnTsXABCG1ftb5nSs61dqbGxENput6pjsramzJVNMsVjE9u3b8alPfQr77LMPSqUSfvWrX+Gd73wnVq9ejb/9278d9frbb78dd911F774xS+ivr4e11xzDd773vciDEO8613vAoCRf0Lp+z6+8IUvYP/998dvfvMbfOlLX8LGjRuxevXqMW/nWWedheuvvx5PP/30bn2X8e6770ZjYyMKhQIOPPBAnH322bjgggsQBMGY39vlqaeeQhiGmDVr1si0H//4x/iv//ovfOELX0B7ezvmzZuHxx9/HEuWLMG+++6Lr3/962hvb8cdd9yBj33sY9i2bRsuueQSADu/z7V06VKkUilcc801aGtrw4033mj97dS6detw0kkn4ZJLLtnt76K8+tWvxtatW9Ha2oq3vOUt+NKXvjRuNygyeWq1rifKdKtrmTlqtbY/9rGPobOzE+eddx7uvvvuMb/f7ppOtf2rX/0KN9xwA+67776q37vI1FKrdQ0AURShWCzioYcewuc//3kcf/zxOO6448b83i7Tqa4BII5jJEmC559/HqtWrYIxBitWrKjKWFSFmYFWr15tAJj77rtvt5eJosiUy2Vz9tlnmyOPPHLUPAAml8uZrq6uUa8/5JBDzAEHHDAy7ZxzzjENDQ3mmWeeGbX8v/zLvxgA5rHHHhu1zksuueQvbtff/d3fmSAIzMaNG//ia88991zzve99z6xfv978+Mc/Nu9///sNAPOBD3zgLy7LLF261Bx++OGmXC6bcrlsNm/ebD772c8aAObd7373qM/T3Nxstm/fPmr5t7zlLWbBggWmt7d31PTzzjvPZLPZkdf/4z/+o/E8zzz00EOjXnfKKacYAOauu+4ambZu3ToTBIG59NJL/+L233DDDebLX/6yWbNmjbnzzjvNV7/6VTN79mzT1tZmnnvuubEOh0yimVrXr/S2t73NLFq0aEzL2Ez3un6lH/3oRxXrkullptb2z372M5NKpcyjjz5qjDHmrrvuMgDMj370o7+4LDPda7u/v9/st99+5qKLLhqZtmjRIvO2t71tt8dApoaZWtfGGPOb3/zGABj5eetb32r6+vp2a1mb6V7Xww4++OCRMeno6DD33HPPbi87EfTQ7PDDH/7QLFmyxNTX1486uLPZ7KjXATCnnXZaxfKXXHKJAWA2bdpkjDFmn332MaeffvrIQT3889hjjxkA5pprrhm1zt0p1L113nnnGQDmf//3f/do+aVLl44aGwAmlUqZ97///aanp2fkdQDMGWecMWrZfD5vwjA0559/fsWYrFmzxgAwa9asMcYY87rXvc4sXry44v2H92U1b4h/+9vfGt/3zcc+9rGqrVPGn+q6ug/NtVLXemie/mZibff09Jh99tnHfO5znxuZVq2H5ulc2ytWrDAHHnigyefzI9P00Dw9zcS6HjYwMGDuu+8+s379evONb3zDdHR0mGOPPdYMDg7u0fqme10P+93vfmd++9vfmh/96EfmTW96k2lsbJxS127982zi1ltvxd/8zd/g3e9+Nz796U+jvb0dYRji2muvxfe+972K17e3t9Np3d3dWLBgAV544QX89Kc/tX4ZH8BetZvfUx/4wAdw1VVXYcOGDTjyyCP3aB37778/br755pGops7OTtTV1VW8rqOjY9R/d3d3I4oifPOb38Q3v/lN67qHx6S7uxudnZ0V823jvrde97rX4aCDDsKGDRuqvm6ZXDOlrquh1upaalut1fbFF1+MVCqF8847Dz09PQCAgYEBAMDQ0BB6enrQ3NwMz/PGvO7pWtv/8z//g2uuuQa33norCoUCCoUCACBJEkRRhJ6eHuRyOWQymT1+D5laaq2uh9XX1+OYY44BAJxwwgk49thj8frXvx7f+ta38IlPfGKP1jld6/qVDj/8cAA778Pf8Y534Mgjj8THP/5xPPzww1VZ/97SQzPx/e9/H52dnbjllltGXZSKxaL19V1dXXTanDlzAACtra14zWtegy9/+cvWdcyfP39vN3vMjDEA9q5xTjabHSl+l10v7rNmzUIQBPjgBz9Iv7MwXJxz5sxxjnG1GWPUTKgGzZS6roZarGupXbVW27/73e+wceNG683ocAftHTt2oKWlZczrnq61/fjjj8MYgzPOOKNi3qZNmzBr1iz867/+Ky644II9fg+ZWmqtrpljjjkGvu/jj3/84x6vY7rWNROGIY466ij88Ic/rPq695QemgnP85BOp0cdXF1dXbRj369//Wu88MILI5nHcRzjlltuwf77748FCxYA2BkHs2bNGuy///6jvpQ/mW644QYAqHoM1e6oq6vDSSedhAcffBCvec1rnNl0J510Er72ta/h4YcfxhFHHDEy/aabbqr6dm3YsAFPPvmkunLWoJlS15Npqta11LZaq+0rr7xy5C/Mwx566CF84hOfwMqVK7F06VI0NDRM6DZNdm2feuqpuOuuuyqmn3nmmejs7MSqVatwwAEH7PH6Zeqptbpm1q9fjyRJJuX4ney6ZgqFAjZs2DClanpGPzTfeeed2LhxY8X0t771rTjttNNw66234txzz8W73vUubNq0CZdddhk6Ojrw5JNPVizT2tqKk08+GZ///OdHOvY98cQTo1rdf/GLX8TatWuxZMkSfOxjH8PBBx+MQqGAjRs3Ys2aNbjuuutGinp3nX322bj++uvx1FNPYdGiRfR1N910E2699Va87W1vw6JFi9DT04Mf/ehHuPnmm3HWWWeNOviBnSeqpUuXYt26dWPanrH6xje+geOPPx5vfOMb8dGPfhT77bcf+vv78ac//Qk//elPceeddwIALrjgAnzve9/D2972NnzpS18a6dj3xBNPVKxz/fr1eNOb3oQvfOEL+MIXvuB8/yOOOAIf+MAHcOihhyKbzeJ//ud/8M///M9ob2/HZz7zmXH5zDK+ZlJdAzv/+vL4448D2HkzMTQ0hP/4j/8AABx22GE47LDDRl47U+p6aGgIa9asAYCRr1msX78e27ZtQ319PZYvX17lTywTYSbV9l/91V/ReYcffjhOPPHEUdNmQm23t7db//KezWYxZ86cijGR6WEm1fXPfvYzfOc738Hb3/52LFq0COVyGffffz+uvPJKHHDAAfjwhz886vUzoa4BYMmSJXj729+OQw89FM3Nzdi4cSOuvfZaPPXUU7jtttvG5TPviRn90PyP//iP1ulPP/00/r//7//D1q1bcd111+F73/seXvWqV+Gzn/0snnvuOVx66aUVy7z97W/H4Ycfjs997nN49tlnsf/+++PGG2/Ee97znpHXdHR04P7778dll12Gf/7nf8Zzzz2HxsZGdHZ24tRTT92j33jFcYw4jkf+mTXzqle9Cj09Pfinf/ondHd3I5VK4fDDD8c111yDc845Z9Rrh783tev3HsbDYYcdhv/93//FZZddhs997nPYunUrWlpacOCBB+Ktb33ryOva29uxfv16fPzjH8dHP/pR1NXV4YwzzsBVV12F//N//s+odRpjRtrW7877f/vb38aWLVtQKpUwf/58nHnmmfjCF74wIZ9fqm8m1TUA/PCHP6zY9ne/+90AMCrqYSbV9datW0fGYNjwOCxatMh6gyZT30yr7d01k2pbas9MqusDDjgA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9w/Ftm07zmXF9Rlb8qU5l8vhfe97Hw4fPnzO9sOHD+O6667bpF5tvr1792JycvKccWm32zhy5EhfjkuWZbjtttvw0EMP4ZFHHsHevXvPad9u43GpU1zbtts8Vlz3F8U1t53msuK6/yi2bdtpLiuuz7OxecfevG9/+9tZFEXZv/zLv2S/+tWvsjvuuCMbGBjIjh07ttldu6iq1Wr2zDPPZM8880wGILvnnnuyZ555JnvllVeyLMuyr3zlK1m5XM4eeuih7Lnnnss+/elPZ1NTU1mlUtnknq+/v/mbv8nK5XL26KOPZjMzM6tf9Xp99Xu203j0A8W14lpx3X+2a1xnmWL7LMV1f9qusa24PkNxfa4t+9KcZVn2j//4j9mePXuyXC6Xvfe9711Ncd7PfvzjH2cAer5uvvnmLMvOpHf/8pe/nE1OTmZxHGfXX3999txzz21upy8SaxwAZPfdd9/q92yn8egXimvFteK6/2zHuM4yxfZZiuv+tR1jW3F9huL6XF6WZdn6//5aRERERERE5NK3Jf9Ns4iIiIiIiMhWoJdmEREREREREUIvzSIiIiIiIiKEXppFRERERERECL00i4iIiIiIiBB6aRYREREREREh9NIsIiIiIiIiQuilWURERERERITQS7OIiIiIiIgIoZdmEREREREREUIvzSIiIiIiIiLE/wFgv/uzQlSjoQAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "fig,ax = plt.subplots(4,4, figsize=(10,10))\n", "ax = ax.ravel()\n", "\n", "#Change the dimension to fit into the model\n", "test_dataset = TensorDataset(test_x, test_y)\n", "test_loader = DataLoader(test_dataset, batch_size=64, shuffle=True)\n", "\n", "x_test, t_test = next(iter(test_loader))\n", "print('t_test.shape: ',t_test.shape)\n", "print('x_test.shape: ',x_test.shape)\n", "# t_test = test_labels.transpose()\n", "\n", "cnn.eval()\n", "with torch.no_grad():\n", "\n", " # Retrieve output from the image\n", " # idx_to_plot = 2\n", " count=0\n", " for idx_to_plot in range(16):\n", " image = x_test[idx_to_plot,:,:,:]\n", " image_orig = image.clone().permute(1,2,0)\n", " image = torch.FloatTensor(image).to('cuda')\n", "\n", " # Make input tensor require gradient\n", " image = image[None,:].requires_grad_()\n", " output = cnn(image)\n", "\n", " # Catch the output\n", " _, predicted = torch.max(output.data, 1)\n", "\n", " ax[count].imshow(image_orig[:,:,0:3].numpy().astype(np.uint64))\n", " ax[count].set_title('Label : {}, Pred: {}'.format(str(np.argmax(t_test[idx_to_plot,:].numpy())),predicted.cpu().numpy()[0]))\n", " count+=1\n", "\n", " fig.tight_layout()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "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.10.12" } }, "nbformat": 4, "nbformat_minor": 4 }