diff --git a/ConfusionMatrix.png b/ConfusionMatrix.png
new file mode 100644
index 0000000000000000000000000000000000000000..a227f0868f21b1f380b529c087cef4cf05451413
Binary files /dev/null and b/ConfusionMatrix.png differ
diff --git a/acc_train.txt b/acc_train.txt
new file mode 100644
index 0000000000000000000000000000000000000000..3a8f0666a319d1c268221036675b00193ab7f522
--- /dev/null
+++ b/acc_train.txt
@@ -0,0 +1 @@
+60.59137725830078,71.66165161132812,76.8459701538086,81.20057678222656,84.1463394165039,85.36028289794922,87.16448974609375,88.48980712890625,89.44759368896484,90.41095733642578,91.26294708251953,91.27407836914062,91.45783996582031,92.3432388305664,92.52700805664062,93.01703643798828,93.25091552734375,93.71310424804688,93.8578872680664,93.65184783935547,94.06949615478516,94.53168487548828,94.26995849609375,94.40917205810547,94.62635040283203,94.77669525146484,94.9883041381836,95.22775268554688,95.1776351928711,95.48390197753906,95.51174926757812,95.52288055419922,95.62311553955078,95.84585571289062,95.82915496826172,95.84585571289062,95.95166015625,96.10201263427734,96.24679565429688,96.35816955566406,96.18553924560547,96.21895599365234,96.28577423095703,96.62545776367188,96.50294494628906,96.7646713256836,96.80364990234375,96.90388488769531,96.90388488769531,96.93729400634766,96.53636169433594,96.73126220703125,96.88160705566406,96.7646713256836,96.63102722167969,96.74796295166016,96.88160705566406,97.0263900756836,97.13219451904297,96.97627258300781,97.06536865234375,97.11548614501953,97.34379577636719,97.13776397705078,97.43846130371094,97.26026916503906,97.42733001708984,97.44403076171875,97.51085662841797,97.6556396484375,97.42176055908203,97.65007019042969,97.60552215576172,97.61109161376953,97.50528717041016,97.7837142944336,97.74473571777344,97.80599212646484,97.80042266845703,97.7892837524414,97.96190643310547,97.93963623046875,98.01202392578125,98.1623764038086,98.1623764038086,97.90621948242188,98.28488159179688,98.29045104980469,97.94520568847656,98.28488159179688,98.26818084716797,98.46864318847656,98.37954711914062,98.39625549316406,98.31272888183594,98.2960205078125,98.40739440917969,98.53546905517578,98.32386016845703,98.53546905517578,
\ No newline at end of file
diff --git a/acc_valid.txt b/acc_valid.txt
new file mode 100644
index 0000000000000000000000000000000000000000..b1603cdbb22dd6f05056fbccf9c507a375136dc8
--- /dev/null
+++ b/acc_valid.txt
@@ -0,0 +1 @@
+72.81468963623047,74.82518005371094,54.16666793823242,53.263404846191406,42.16200637817383,88.5489501953125,57.7214469909668,30.09906768798828,86.85897827148438,84.73193359375,88.92774200439453,89.7727279663086,89.51049041748047,69.87179565429688,88.78205108642578,86.21794891357422,91.20046997070312,91.52098083496094,88.92774200439453,92.97785949707031,61.188812255859375,89.07342529296875,89.13170623779297,93.0361328125,82.22611236572266,91.89977264404297,82.10955810546875,92.22028350830078,93.85198211669922,92.22028350830078,94.2599105834961,93.26923370361328,91.05477905273438,93.06526947021484,92.62820434570312,94.11421966552734,93.4149169921875,93.9102554321289,93.61888122558594,94.34732055664062,94.49301147460938,92.5407943725586,93.4149169921875,94.2599105834961,94.46387481689453,94.28904724121094,94.93006896972656,94.05594635009766,94.2016372680664,94.72611236572266,94.23077392578125,94.37645721435547,93.79370880126953,94.43473052978516,95.10489654541016,93.96853637695312,94.90093231201172,94.43473052978516,95.10489654541016,93.47319793701172,94.23077392578125,94.60955810546875,93.18182373046875,94.28904724121094,95.22145080566406,94.46387481689453,93.50233459472656,93.706298828125,94.55128479003906,94.34732055664062,94.31818389892578,94.72611236572266,93.24009704589844,94.78438568115234,94.69696807861328,94.84265899658203,94.81352233886719,92.89044189453125,94.81352233886719,94.66783142089844,94.55128479003906,94.6386947631836,94.81352233886719,94.55128479003906,94.28904724121094,95.22145080566406,94.93006896972656,94.98834991455078,94.5804214477539,95.01748657226562,94.37645721435547,95.16316986083984,95.134033203125,94.93006896972656,94.6386947631836,93.76457214355469,94.49301147460938,95.04662322998047,94.52214813232422,94.60955810546875,
\ No newline at end of file
diff --git a/helper_evaluation.py b/helper_evaluation.py
new file mode 100644
index 0000000000000000000000000000000000000000..7c98054fa174fe9085d7aa493f8dcce4d7ce1018
--- /dev/null
+++ b/helper_evaluation.py
@@ -0,0 +1,78 @@
+# imports from installed libraries
+import os
+import numpy as np
+import random
+import torch
+from distutils.version import LooseVersion as Version
+from itertools import product
+from tqdm import tqdm
+
+def set_all_seeds(seed):
+    os.environ["PL_GLOBAL_SEED"] = str(seed)
+    random.seed(seed)
+    np.random.seed(seed)
+    torch.manual_seed(seed)
+    torch.cuda.manual_seed_all(seed)
+
+
+def set_deterministic():
+    if torch.cuda.is_available():
+        torch.backends.cudnn.benchmark = False
+        torch.backends.cudnn.deterministic = True
+
+    if torch.__version__ <= Version("1.7"):
+        torch.set_deterministic(True)
+    else:
+        torch.use_deterministic_algorithms(True)
+
+
+def compute_accuracy(model, data_loader, device):
+
+    with torch.no_grad():
+
+        correct_pred, num_examples = 0, 0
+
+        for i, (features, targets) in enumerate(tqdm(data_loader)):
+
+            features = features.to(device)
+            targets = targets.float().to(device)
+
+            logits = model(features)
+            _, predicted_labels = torch.max(logits, 1)
+
+            num_examples += targets.size(0)
+            correct_pred += (predicted_labels == targets).sum()
+    return correct_pred.float()/num_examples * 100
+
+
+def compute_confusion_matrix(model, data_loader, device):
+
+    all_targets, all_predictions = [], []
+    with torch.no_grad():
+
+        for i, (features, targets) in enumerate(data_loader):
+
+            features = features.to(device)
+            targets = targets
+            logits = model(features)
+            _, predicted_labels = torch.max(logits, 1)
+            all_targets.extend(targets.to('cpu'))
+            all_predictions.extend(predicted_labels.to('cpu'))
+
+    all_predictions = all_predictions
+    all_predictions = np.array(all_predictions)
+    all_targets = np.array(all_targets)
+        
+    class_labels = np.unique(np.concatenate((all_targets, all_predictions)))
+    if class_labels.shape[0] == 1:
+        if class_labels[0] != 0:
+            class_labels = np.array([0, class_labels[0]])
+        else:
+            class_labels = np.array([class_labels[0], 1])
+    n_labels = class_labels.shape[0]
+    lst = []
+    z = list(zip(all_targets, all_predictions))
+    for combi in product(class_labels, repeat=2):
+        lst.append(z.count(combi))
+    mat = np.asarray(lst)[:, None].reshape(n_labels, n_labels)
+    return mat
\ No newline at end of file
diff --git a/helper_plotting.py b/helper_plotting.py
new file mode 100644
index 0000000000000000000000000000000000000000..5498f50a93086926825f30c514bd3d0fd54ba01c
--- /dev/null
+++ b/helper_plotting.py
@@ -0,0 +1,190 @@
+# imports from installed libraries
+import os
+import matplotlib.pyplot as plt
+import numpy as np
+import torch
+
+
+def plot_training_loss(minibatch_loss_list, num_epochs, iter_per_epoch,
+                       results_dir=None, averaging_iterations=100):
+
+    plt.figure()
+    ax1 = plt.subplot(1, 1, 1)
+    ax1.plot(range(len(minibatch_loss_list)),
+             (minibatch_loss_list), label='Minibatch Loss')
+
+    if len(minibatch_loss_list) > 1000:
+        ax1.set_ylim([
+            0, np.max(minibatch_loss_list[1000:])*1.5
+            ])
+    ax1.set_xlabel('Iterations')
+    ax1.set_ylabel('Loss')
+
+    ax1.plot(np.convolve(minibatch_loss_list,
+                         np.ones(averaging_iterations,)/averaging_iterations,
+                         mode='valid'),
+             label='Running Average')
+    ax1.legend()
+
+    ###################
+    # Set scond x-axis
+    ax2 = ax1.twiny()
+    newlabel = list(range(num_epochs+1))
+
+    newpos = [e*iter_per_epoch for e in newlabel]
+
+    ax2.set_xticks(newpos[::10])
+    ax2.set_xticklabels(newlabel[::10])
+
+    ax2.xaxis.set_ticks_position('bottom')
+    ax2.xaxis.set_label_position('bottom')
+    ax2.spines['bottom'].set_position(('outward', 45))
+    ax2.set_xlabel('Epochs')
+    ax2.set_xlim(ax1.get_xlim())
+    ###################
+
+    plt.tight_layout()
+
+    if results_dir is not None:
+        image_path = os.path.join(results_dir, 'plot_training_loss.pdf')
+        plt.savefig(image_path)
+
+
+def plot_accuracy(train_acc_list, valid_acc_list, results_dir):
+
+    num_epochs = len(train_acc_list)
+
+    plt.plot(np.arange(1, num_epochs+1),
+             train_acc_list, label='Training')
+    plt.plot(np.arange(1, num_epochs+1),
+             valid_acc_list, label='Validation')
+
+    plt.xlabel('Epoch')
+    plt.ylabel('Accuracy')
+    plt.legend()
+
+    plt.tight_layout()
+
+    if results_dir is not None:
+        image_path = os.path.join(
+            results_dir, 'plot_acc_training_validation.pdf')
+        plt.savefig(image_path)
+
+
+def show_examples(model, data_loader, unnormalizer=None, class_dict=None):
+    
+        
+    for batch_idx, (features, targets) in enumerate(data_loader):
+
+        with torch.no_grad():
+            features = features
+            targets = targets
+            logits = model(features)
+            predictions = torch.argmax(logits, dim=1)
+        break
+
+    fig, axes = plt.subplots(nrows=3, ncols=5,
+                             sharex=True, sharey=True)
+    
+    if unnormalizer is not None:
+        for idx in range(features.shape[0]):
+            features[idx] = unnormalizer(features[idx])
+    nhwc_img = np.transpose(features, axes=(0, 2, 3, 1))
+    
+    if nhwc_img.shape[-1] == 1:
+        nhw_img = np.squeeze(nhwc_img.numpy(), axis=3)
+
+        for idx, ax in enumerate(axes.ravel()):
+            ax.imshow(nhw_img[idx], cmap='binary')
+            if class_dict is not None:
+                ax.title.set_text(f'P: {class_dict[predictions[idx].item()]}'
+                                  f'\nT: {class_dict[targets[idx].item()]}')
+            else:
+                ax.title.set_text(f'P: {predictions[idx]} | T: {targets[idx]}')
+            ax.axison = False
+
+    else:
+
+        for idx, ax in enumerate(axes.ravel()):
+            ax.imshow(nhwc_img[idx])
+            if class_dict is not None:
+                ax.title.set_text(f'P: {class_dict[predictions[idx].item()]}'
+                                  f'\nT: {class_dict[targets[idx].item()]}')
+            else:
+                ax.title.set_text(f'P: {predictions[idx]} | T: {targets[idx]}')
+            ax.axison = False
+    plt.tight_layout()
+    plt.show()
+
+
+def plot_confusion_matrix(conf_mat,
+                          hide_spines=False,
+                          hide_ticks=False,
+                          figsize=None,
+                          cmap=None,
+                          colorbar=False,
+                          show_absolute=True,
+                          show_normed=False,
+                          class_names=None):
+
+    if not (show_absolute or show_normed):
+        raise AssertionError('Both show_absolute and show_normed are False')
+    if class_names is not None and len(class_names) != len(conf_mat):
+        raise AssertionError('len(class_names) should be equal to number of'
+                             'classes in the dataset')
+
+    total_samples = conf_mat.sum(axis=1)[:, np.newaxis]
+    normed_conf_mat = conf_mat.astype('float') / total_samples
+
+    fig, ax = plt.subplots(figsize=figsize)
+    ax.grid(False)
+    if cmap is None:
+        cmap = plt.cm.Blues
+
+    if figsize is None:
+        figsize = (len(conf_mat)*1.25, len(conf_mat)*1.25)
+
+    if show_normed:
+        matshow = ax.matshow(normed_conf_mat, cmap=cmap)
+    else:
+        matshow = ax.matshow(conf_mat, cmap=cmap)
+
+    if colorbar:
+        fig.colorbar(matshow)
+
+    for i in range(conf_mat.shape[0]):
+        for j in range(conf_mat.shape[1]):
+            cell_text = ""
+            if show_absolute:
+                cell_text += format(conf_mat[i, j], 'd')
+                if show_normed:
+                    cell_text += "\n" + '('
+                    cell_text += format(normed_conf_mat[i, j], '.2f') + ')'
+            else:
+                cell_text += format(normed_conf_mat[i, j], '.2f')
+            ax.text(x=j,
+                    y=i,
+                    s=cell_text,
+                    va='center',
+                    ha='center',
+                    color="white" if normed_conf_mat[i, j] > 0.5 else "black")
+    
+    if class_names is not None:
+        tick_marks = np.arange(len(class_names))
+        plt.xticks(tick_marks, class_names, rotation=90)
+        plt.yticks(tick_marks, class_names)
+        
+    if hide_spines:
+        ax.spines['right'].set_visible(False)
+        ax.spines['top'].set_visible(False)
+        ax.spines['left'].set_visible(False)
+        ax.spines['bottom'].set_visible(False)
+    ax.yaxis.set_ticks_position('left')
+    ax.xaxis.set_ticks_position('bottom')
+    if hide_ticks:
+        ax.axes.get_yaxis().set_ticks([])
+        ax.axes.get_xaxis().set_ticks([])
+
+    plt.xlabel('predicted label')
+    plt.ylabel('true label')
+    return fig, ax
\ No newline at end of file
diff --git a/inceptionv3.ipynb b/inceptionv3.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..4654a2ab446e1fd3f25ef71d788c8257daece978
--- /dev/null
+++ b/inceptionv3.ipynb
@@ -0,0 +1,1889 @@
+{
+ "cells": [
+  {
+   "cell_type": "code",
+   "execution_count": 1,
+   "id": "17767f9b",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "import torch\n",
+    "import torch.nn as nn\n",
+    "import torch.nn.functional as F\n",
+    "import torchvision\n",
+    "import matplotlib.pyplot as plt\n",
+    "import numpy as np\n",
+    "import torch.optim as optim\n",
+    "import os\n",
+    "from distutils.version import LooseVersion as Version\n",
+    "from itertools import product\n",
+    "from helper_evaluation import set_all_seeds, set_deterministic, compute_confusion_matrix\n",
+    "from helper_plotting import plot_training_loss, plot_accuracy, show_examples, plot_confusion_matrix"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "id": "d01df462",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "/home/user/anaconda3/lib/python3.8/site-packages/torchvision/models/inception.py:80: FutureWarning: The default weight initialization of inception_v3 will be changed in future releases of torchvision. If you wish to keep the old behavior (which leads to long initialization times due to scipy/scipy#11299), please set init_weights=True.\n",
+      "  warnings.warn('The default weight initialization of inception_v3 will be changed in future releases of '\n"
+     ]
+    }
+   ],
+   "source": [
+    "import torchvision.models as models\n",
+    "net = models.inception_v3()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 3,
+   "id": "754cb9a3",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "net.Conv2d_1a_3x3.conv = nn.Conv2d(1, 32, kernel_size=(3, 3), stride=(2, 2), bias=False)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 4,
+   "id": "0d2b4c59",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "net.fc = nn.Linear(in_features=2048, out_features=3, bias=True)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 5,
+   "id": "f0f91921",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "net.aux_logits=False"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 6,
+   "id": "fd36529f",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "Inception3(\n",
+       "  (Conv2d_1a_3x3): BasicConv2d(\n",
+       "    (conv): Conv2d(1, 32, kernel_size=(3, 3), stride=(2, 2), bias=False)\n",
+       "    (bn): BatchNorm2d(32, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "  )\n",
+       "  (Conv2d_2a_3x3): BasicConv2d(\n",
+       "    (conv): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), bias=False)\n",
+       "    (bn): BatchNorm2d(32, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "  )\n",
+       "  (Conv2d_2b_3x3): BasicConv2d(\n",
+       "    (conv): Conv2d(32, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
+       "    (bn): BatchNorm2d(64, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "  )\n",
+       "  (maxpool1): MaxPool2d(kernel_size=3, stride=2, padding=0, dilation=1, ceil_mode=False)\n",
+       "  (Conv2d_3b_1x1): BasicConv2d(\n",
+       "    (conv): Conv2d(64, 80, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
+       "    (bn): BatchNorm2d(80, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "  )\n",
+       "  (Conv2d_4a_3x3): BasicConv2d(\n",
+       "    (conv): Conv2d(80, 192, kernel_size=(3, 3), stride=(1, 1), bias=False)\n",
+       "    (bn): BatchNorm2d(192, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "  )\n",
+       "  (maxpool2): MaxPool2d(kernel_size=3, stride=2, padding=0, dilation=1, ceil_mode=False)\n",
+       "  (Mixed_5b): InceptionA(\n",
+       "    (branch1x1): BasicConv2d(\n",
+       "      (conv): Conv2d(192, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
+       "      (bn): BatchNorm2d(64, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch5x5_1): BasicConv2d(\n",
+       "      (conv): Conv2d(192, 48, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
+       "      (bn): BatchNorm2d(48, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch5x5_2): BasicConv2d(\n",
+       "      (conv): Conv2d(48, 64, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2), bias=False)\n",
+       "      (bn): BatchNorm2d(64, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch3x3dbl_1): BasicConv2d(\n",
+       "      (conv): Conv2d(192, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
+       "      (bn): BatchNorm2d(64, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch3x3dbl_2): BasicConv2d(\n",
+       "      (conv): Conv2d(64, 96, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
+       "      (bn): BatchNorm2d(96, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch3x3dbl_3): BasicConv2d(\n",
+       "      (conv): Conv2d(96, 96, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
+       "      (bn): BatchNorm2d(96, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch_pool): BasicConv2d(\n",
+       "      (conv): Conv2d(192, 32, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
+       "      (bn): BatchNorm2d(32, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "  )\n",
+       "  (Mixed_5c): InceptionA(\n",
+       "    (branch1x1): BasicConv2d(\n",
+       "      (conv): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
+       "      (bn): BatchNorm2d(64, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch5x5_1): BasicConv2d(\n",
+       "      (conv): Conv2d(256, 48, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
+       "      (bn): BatchNorm2d(48, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch5x5_2): BasicConv2d(\n",
+       "      (conv): Conv2d(48, 64, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2), bias=False)\n",
+       "      (bn): BatchNorm2d(64, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch3x3dbl_1): BasicConv2d(\n",
+       "      (conv): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
+       "      (bn): BatchNorm2d(64, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch3x3dbl_2): BasicConv2d(\n",
+       "      (conv): Conv2d(64, 96, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
+       "      (bn): BatchNorm2d(96, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch3x3dbl_3): BasicConv2d(\n",
+       "      (conv): Conv2d(96, 96, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
+       "      (bn): BatchNorm2d(96, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch_pool): BasicConv2d(\n",
+       "      (conv): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
+       "      (bn): BatchNorm2d(64, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "  )\n",
+       "  (Mixed_5d): InceptionA(\n",
+       "    (branch1x1): BasicConv2d(\n",
+       "      (conv): Conv2d(288, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
+       "      (bn): BatchNorm2d(64, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch5x5_1): BasicConv2d(\n",
+       "      (conv): Conv2d(288, 48, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
+       "      (bn): BatchNorm2d(48, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch5x5_2): BasicConv2d(\n",
+       "      (conv): Conv2d(48, 64, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2), bias=False)\n",
+       "      (bn): BatchNorm2d(64, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch3x3dbl_1): BasicConv2d(\n",
+       "      (conv): Conv2d(288, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
+       "      (bn): BatchNorm2d(64, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch3x3dbl_2): BasicConv2d(\n",
+       "      (conv): Conv2d(64, 96, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
+       "      (bn): BatchNorm2d(96, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch3x3dbl_3): BasicConv2d(\n",
+       "      (conv): Conv2d(96, 96, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
+       "      (bn): BatchNorm2d(96, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch_pool): BasicConv2d(\n",
+       "      (conv): Conv2d(288, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
+       "      (bn): BatchNorm2d(64, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "  )\n",
+       "  (Mixed_6a): InceptionB(\n",
+       "    (branch3x3): BasicConv2d(\n",
+       "      (conv): Conv2d(288, 384, kernel_size=(3, 3), stride=(2, 2), bias=False)\n",
+       "      (bn): BatchNorm2d(384, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch3x3dbl_1): BasicConv2d(\n",
+       "      (conv): Conv2d(288, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
+       "      (bn): BatchNorm2d(64, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch3x3dbl_2): BasicConv2d(\n",
+       "      (conv): Conv2d(64, 96, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
+       "      (bn): BatchNorm2d(96, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch3x3dbl_3): BasicConv2d(\n",
+       "      (conv): Conv2d(96, 96, kernel_size=(3, 3), stride=(2, 2), bias=False)\n",
+       "      (bn): BatchNorm2d(96, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "  )\n",
+       "  (Mixed_6b): InceptionC(\n",
+       "    (branch1x1): BasicConv2d(\n",
+       "      (conv): Conv2d(768, 192, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
+       "      (bn): BatchNorm2d(192, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch7x7_1): BasicConv2d(\n",
+       "      (conv): Conv2d(768, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
+       "      (bn): BatchNorm2d(128, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch7x7_2): BasicConv2d(\n",
+       "      (conv): Conv2d(128, 128, kernel_size=(1, 7), stride=(1, 1), padding=(0, 3), bias=False)\n",
+       "      (bn): BatchNorm2d(128, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch7x7_3): BasicConv2d(\n",
+       "      (conv): Conv2d(128, 192, kernel_size=(7, 1), stride=(1, 1), padding=(3, 0), bias=False)\n",
+       "      (bn): BatchNorm2d(192, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch7x7dbl_1): BasicConv2d(\n",
+       "      (conv): Conv2d(768, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
+       "      (bn): BatchNorm2d(128, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch7x7dbl_2): BasicConv2d(\n",
+       "      (conv): Conv2d(128, 128, kernel_size=(7, 1), stride=(1, 1), padding=(3, 0), bias=False)\n",
+       "      (bn): BatchNorm2d(128, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch7x7dbl_3): BasicConv2d(\n",
+       "      (conv): Conv2d(128, 128, kernel_size=(1, 7), stride=(1, 1), padding=(0, 3), bias=False)\n",
+       "      (bn): BatchNorm2d(128, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch7x7dbl_4): BasicConv2d(\n",
+       "      (conv): Conv2d(128, 128, kernel_size=(7, 1), stride=(1, 1), padding=(3, 0), bias=False)\n",
+       "      (bn): BatchNorm2d(128, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch7x7dbl_5): BasicConv2d(\n",
+       "      (conv): Conv2d(128, 192, kernel_size=(1, 7), stride=(1, 1), padding=(0, 3), bias=False)\n",
+       "      (bn): BatchNorm2d(192, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch_pool): BasicConv2d(\n",
+       "      (conv): Conv2d(768, 192, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
+       "      (bn): BatchNorm2d(192, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "  )\n",
+       "  (Mixed_6c): InceptionC(\n",
+       "    (branch1x1): BasicConv2d(\n",
+       "      (conv): Conv2d(768, 192, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
+       "      (bn): BatchNorm2d(192, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch7x7_1): BasicConv2d(\n",
+       "      (conv): Conv2d(768, 160, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
+       "      (bn): BatchNorm2d(160, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch7x7_2): BasicConv2d(\n",
+       "      (conv): Conv2d(160, 160, kernel_size=(1, 7), stride=(1, 1), padding=(0, 3), bias=False)\n",
+       "      (bn): BatchNorm2d(160, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch7x7_3): BasicConv2d(\n",
+       "      (conv): Conv2d(160, 192, kernel_size=(7, 1), stride=(1, 1), padding=(3, 0), bias=False)\n",
+       "      (bn): BatchNorm2d(192, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch7x7dbl_1): BasicConv2d(\n",
+       "      (conv): Conv2d(768, 160, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
+       "      (bn): BatchNorm2d(160, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch7x7dbl_2): BasicConv2d(\n",
+       "      (conv): Conv2d(160, 160, kernel_size=(7, 1), stride=(1, 1), padding=(3, 0), bias=False)\n",
+       "      (bn): BatchNorm2d(160, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch7x7dbl_3): BasicConv2d(\n",
+       "      (conv): Conv2d(160, 160, kernel_size=(1, 7), stride=(1, 1), padding=(0, 3), bias=False)\n",
+       "      (bn): BatchNorm2d(160, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch7x7dbl_4): BasicConv2d(\n",
+       "      (conv): Conv2d(160, 160, kernel_size=(7, 1), stride=(1, 1), padding=(3, 0), bias=False)\n",
+       "      (bn): BatchNorm2d(160, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch7x7dbl_5): BasicConv2d(\n",
+       "      (conv): Conv2d(160, 192, kernel_size=(1, 7), stride=(1, 1), padding=(0, 3), bias=False)\n",
+       "      (bn): BatchNorm2d(192, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch_pool): BasicConv2d(\n",
+       "      (conv): Conv2d(768, 192, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
+       "      (bn): BatchNorm2d(192, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "  )\n",
+       "  (Mixed_6d): InceptionC(\n",
+       "    (branch1x1): BasicConv2d(\n",
+       "      (conv): Conv2d(768, 192, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
+       "      (bn): BatchNorm2d(192, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch7x7_1): BasicConv2d(\n",
+       "      (conv): Conv2d(768, 160, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
+       "      (bn): BatchNorm2d(160, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch7x7_2): BasicConv2d(\n",
+       "      (conv): Conv2d(160, 160, kernel_size=(1, 7), stride=(1, 1), padding=(0, 3), bias=False)\n",
+       "      (bn): BatchNorm2d(160, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch7x7_3): BasicConv2d(\n",
+       "      (conv): Conv2d(160, 192, kernel_size=(7, 1), stride=(1, 1), padding=(3, 0), bias=False)\n",
+       "      (bn): BatchNorm2d(192, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch7x7dbl_1): BasicConv2d(\n",
+       "      (conv): Conv2d(768, 160, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
+       "      (bn): BatchNorm2d(160, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch7x7dbl_2): BasicConv2d(\n",
+       "      (conv): Conv2d(160, 160, kernel_size=(7, 1), stride=(1, 1), padding=(3, 0), bias=False)\n",
+       "      (bn): BatchNorm2d(160, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch7x7dbl_3): BasicConv2d(\n",
+       "      (conv): Conv2d(160, 160, kernel_size=(1, 7), stride=(1, 1), padding=(0, 3), bias=False)\n",
+       "      (bn): BatchNorm2d(160, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch7x7dbl_4): BasicConv2d(\n",
+       "      (conv): Conv2d(160, 160, kernel_size=(7, 1), stride=(1, 1), padding=(3, 0), bias=False)\n",
+       "      (bn): BatchNorm2d(160, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch7x7dbl_5): BasicConv2d(\n",
+       "      (conv): Conv2d(160, 192, kernel_size=(1, 7), stride=(1, 1), padding=(0, 3), bias=False)\n",
+       "      (bn): BatchNorm2d(192, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch_pool): BasicConv2d(\n",
+       "      (conv): Conv2d(768, 192, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
+       "      (bn): BatchNorm2d(192, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "  )\n",
+       "  (Mixed_6e): InceptionC(\n",
+       "    (branch1x1): BasicConv2d(\n",
+       "      (conv): Conv2d(768, 192, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
+       "      (bn): BatchNorm2d(192, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch7x7_1): BasicConv2d(\n",
+       "      (conv): Conv2d(768, 192, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
+       "      (bn): BatchNorm2d(192, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch7x7_2): BasicConv2d(\n",
+       "      (conv): Conv2d(192, 192, kernel_size=(1, 7), stride=(1, 1), padding=(0, 3), bias=False)\n",
+       "      (bn): BatchNorm2d(192, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch7x7_3): BasicConv2d(\n",
+       "      (conv): Conv2d(192, 192, kernel_size=(7, 1), stride=(1, 1), padding=(3, 0), bias=False)\n",
+       "      (bn): BatchNorm2d(192, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch7x7dbl_1): BasicConv2d(\n",
+       "      (conv): Conv2d(768, 192, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
+       "      (bn): BatchNorm2d(192, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch7x7dbl_2): BasicConv2d(\n",
+       "      (conv): Conv2d(192, 192, kernel_size=(7, 1), stride=(1, 1), padding=(3, 0), bias=False)\n",
+       "      (bn): BatchNorm2d(192, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch7x7dbl_3): BasicConv2d(\n",
+       "      (conv): Conv2d(192, 192, kernel_size=(1, 7), stride=(1, 1), padding=(0, 3), bias=False)\n",
+       "      (bn): BatchNorm2d(192, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch7x7dbl_4): BasicConv2d(\n",
+       "      (conv): Conv2d(192, 192, kernel_size=(7, 1), stride=(1, 1), padding=(3, 0), bias=False)\n",
+       "      (bn): BatchNorm2d(192, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch7x7dbl_5): BasicConv2d(\n",
+       "      (conv): Conv2d(192, 192, kernel_size=(1, 7), stride=(1, 1), padding=(0, 3), bias=False)\n",
+       "      (bn): BatchNorm2d(192, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch_pool): BasicConv2d(\n",
+       "      (conv): Conv2d(768, 192, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
+       "      (bn): BatchNorm2d(192, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "  )\n",
+       "  (AuxLogits): InceptionAux(\n",
+       "    (conv0): BasicConv2d(\n",
+       "      (conv): Conv2d(768, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
+       "      (bn): BatchNorm2d(128, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (conv1): BasicConv2d(\n",
+       "      (conv): Conv2d(128, 768, kernel_size=(5, 5), stride=(1, 1), bias=False)\n",
+       "      (bn): BatchNorm2d(768, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (fc): Linear(in_features=768, out_features=1000, bias=True)\n",
+       "  )\n",
+       "  (Mixed_7a): InceptionD(\n",
+       "    (branch3x3_1): BasicConv2d(\n",
+       "      (conv): Conv2d(768, 192, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
+       "      (bn): BatchNorm2d(192, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch3x3_2): BasicConv2d(\n",
+       "      (conv): Conv2d(192, 320, kernel_size=(3, 3), stride=(2, 2), bias=False)\n",
+       "      (bn): BatchNorm2d(320, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch7x7x3_1): BasicConv2d(\n",
+       "      (conv): Conv2d(768, 192, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
+       "      (bn): BatchNorm2d(192, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch7x7x3_2): BasicConv2d(\n",
+       "      (conv): Conv2d(192, 192, kernel_size=(1, 7), stride=(1, 1), padding=(0, 3), bias=False)\n",
+       "      (bn): BatchNorm2d(192, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch7x7x3_3): BasicConv2d(\n",
+       "      (conv): Conv2d(192, 192, kernel_size=(7, 1), stride=(1, 1), padding=(3, 0), bias=False)\n",
+       "      (bn): BatchNorm2d(192, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch7x7x3_4): BasicConv2d(\n",
+       "      (conv): Conv2d(192, 192, kernel_size=(3, 3), stride=(2, 2), bias=False)\n",
+       "      (bn): BatchNorm2d(192, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "  )\n",
+       "  (Mixed_7b): InceptionE(\n",
+       "    (branch1x1): BasicConv2d(\n",
+       "      (conv): Conv2d(1280, 320, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
+       "      (bn): BatchNorm2d(320, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch3x3_1): BasicConv2d(\n",
+       "      (conv): Conv2d(1280, 384, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
+       "      (bn): BatchNorm2d(384, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch3x3_2a): BasicConv2d(\n",
+       "      (conv): Conv2d(384, 384, kernel_size=(1, 3), stride=(1, 1), padding=(0, 1), bias=False)\n",
+       "      (bn): BatchNorm2d(384, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch3x3_2b): BasicConv2d(\n",
+       "      (conv): Conv2d(384, 384, kernel_size=(3, 1), stride=(1, 1), padding=(1, 0), bias=False)\n",
+       "      (bn): BatchNorm2d(384, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch3x3dbl_1): BasicConv2d(\n",
+       "      (conv): Conv2d(1280, 448, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
+       "      (bn): BatchNorm2d(448, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch3x3dbl_2): BasicConv2d(\n",
+       "      (conv): Conv2d(448, 384, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
+       "      (bn): BatchNorm2d(384, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch3x3dbl_3a): BasicConv2d(\n",
+       "      (conv): Conv2d(384, 384, kernel_size=(1, 3), stride=(1, 1), padding=(0, 1), bias=False)\n",
+       "      (bn): BatchNorm2d(384, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch3x3dbl_3b): BasicConv2d(\n",
+       "      (conv): Conv2d(384, 384, kernel_size=(3, 1), stride=(1, 1), padding=(1, 0), bias=False)\n",
+       "      (bn): BatchNorm2d(384, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch_pool): BasicConv2d(\n",
+       "      (conv): Conv2d(1280, 192, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
+       "      (bn): BatchNorm2d(192, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "  )\n",
+       "  (Mixed_7c): InceptionE(\n",
+       "    (branch1x1): BasicConv2d(\n",
+       "      (conv): Conv2d(2048, 320, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
+       "      (bn): BatchNorm2d(320, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch3x3_1): BasicConv2d(\n",
+       "      (conv): Conv2d(2048, 384, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
+       "      (bn): BatchNorm2d(384, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch3x3_2a): BasicConv2d(\n",
+       "      (conv): Conv2d(384, 384, kernel_size=(1, 3), stride=(1, 1), padding=(0, 1), bias=False)\n",
+       "      (bn): BatchNorm2d(384, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch3x3_2b): BasicConv2d(\n",
+       "      (conv): Conv2d(384, 384, kernel_size=(3, 1), stride=(1, 1), padding=(1, 0), bias=False)\n",
+       "      (bn): BatchNorm2d(384, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch3x3dbl_1): BasicConv2d(\n",
+       "      (conv): Conv2d(2048, 448, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
+       "      (bn): BatchNorm2d(448, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch3x3dbl_2): BasicConv2d(\n",
+       "      (conv): Conv2d(448, 384, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
+       "      (bn): BatchNorm2d(384, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch3x3dbl_3a): BasicConv2d(\n",
+       "      (conv): Conv2d(384, 384, kernel_size=(1, 3), stride=(1, 1), padding=(0, 1), bias=False)\n",
+       "      (bn): BatchNorm2d(384, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch3x3dbl_3b): BasicConv2d(\n",
+       "      (conv): Conv2d(384, 384, kernel_size=(3, 1), stride=(1, 1), padding=(1, 0), bias=False)\n",
+       "      (bn): BatchNorm2d(384, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "    (branch_pool): BasicConv2d(\n",
+       "      (conv): Conv2d(2048, 192, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
+       "      (bn): BatchNorm2d(192, eps=0.001, momentum=0.1, affine=True, track_running_stats=True)\n",
+       "    )\n",
+       "  )\n",
+       "  (avgpool): AdaptiveAvgPool2d(output_size=(1, 1))\n",
+       "  (dropout): Dropout(p=0.5, inplace=False)\n",
+       "  (fc): Linear(in_features=2048, out_features=3, bias=True)\n",
+       ")"
+      ]
+     },
+     "execution_count": 6,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "net"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 7,
+   "id": "35ed82d4",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "if torch.cuda.is_available():\n",
+    "    net = net.cuda()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 8,
+   "id": "9039d0ba",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "criterion = nn.CrossEntropyLoss()\n",
+    "optimizer = optim.SGD(net.parameters(), lr=0.01, momentum=0.9)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 9,
+   "id": "82f5a0c9",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "from torchvision import datasets, transforms\n",
+    "from torch.utils.data import DataLoader, random_split"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 10,
+   "id": "25136ecd",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "def UploadData(path, train):\n",
+    "    #set up transforms for train and test datasets\n",
+    "    train_transforms = transforms.Compose([transforms.Grayscale(num_output_channels=1), transforms.Resize(512), transforms.CenterCrop(511), transforms.RandomRotation(30),transforms.RandomHorizontalFlip(), transforms.transforms.ToTensor()]) \n",
+    "    valid_transforms = transforms.Compose([transforms.Grayscale(num_output_channels=1), transforms.Resize(512), transforms.CenterCrop(511), transforms.transforms.ToTensor()]) \n",
+    "    #test_transforms = transforms.Compose([transforms.Grayscale(num_output_channels=1), transforms.Resize(512), transforms.CenterCrop(511), transforms.ToTensor()])\n",
+    "    \n",
+    "    #set up datasets from Image Folders\n",
+    "    train_dataset = datasets.ImageFolder(path + '/train', transform=train_transforms)\n",
+    "    valid_dataset = datasets.ImageFolder(path + '/validation', transform=valid_transforms)\n",
+    "    #test_dataset = datasets.ImageFolder(path + '/test', transform=test_transforms)\n",
+    "\n",
+    "    #set up dataloaders with batch size of 32\n",
+    "    trainloader = torch.utils.data.DataLoader(train_dataset, batch_size=10, shuffle=True)\n",
+    "    validloader = torch.utils.data.DataLoader(valid_dataset, batch_size=3, shuffle=True)\n",
+    "    #testloader = torch.utils.data.DataLoader(test_dataset, batch_size=32, shuffle=True)\n",
+    "  \n",
+    "    return trainloader, validloader #, testloader"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 11,
+   "id": "36c1e09d",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "trainloader, validloader = UploadData(\"/home/user/research/CXR_Covid-19_Challenge\", True) #, testloader"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 12,
+   "id": "291f8643",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "{'covid': 0, 'normal': 1, 'pneumonia': 2}"
+      ]
+     },
+     "execution_count": 12,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "trainloader.dataset.class_to_idx"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 13,
+   "id": "8955b17d",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "class_dict = {0: 'covid',\n",
+    "              1: 'normal',\n",
+    "              2: 'pneumonia',\n",
+    "              }\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 14,
+   "id": "b1234549",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "playsound is relying on another python subprocess. Please use `pip install pygobject` if you want playsound to run more efficiently.\n"
+     ]
+    }
+   ],
+   "source": [
+    "import time\n",
+    "from tqdm import tqdm\n",
+    "from playsound import playsound\n",
+    "def convert(seconds):\n",
+    "    return time.strftime(\"%H:%M:%S\", time.gmtime(seconds))"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 15,
+   "id": "9e3b169f",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "#net.load_state_dict(torch.load(\"/home/user/research/resnet18/resent_model_100_e.pth\"))"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 16,
+   "id": "c0cb959e",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "f1 = open(\"loss_train.txt\",\"r\")\n",
+    "f2 = open(\"loss_valid.txt\",\"r\")\n",
+    "f3 = open(\"acc_train.txt\",\"r\")\n",
+    "f4 = open(\"acc_valid.txt\",\"r\")\n",
+    "loss_train_list = list(map(float,f1.read().split(\",\")[:-1]))\n",
+    "loss_valid_list = list(map(float,f2.read().split(\",\")[:-1]))\n",
+    "acc_train_list = list(map(float,f3.read().split(\",\")[:-1]))\n",
+    "acc_valid_list = list(map(float,f4.read().split(\",\")[:-1]))\n",
+    "f1.close()\n",
+    "f2.close()\n",
+    "f3.close()\n",
+    "f4.close()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 17,
+   "id": "ec8191c8",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "50\n",
+      "50\n",
+      "50\n",
+      "50\n"
+     ]
+    }
+   ],
+   "source": [
+    "print(len(loss_train_list))\n",
+    "print(len(loss_valid_list))\n",
+    "print(len(acc_train_list))\n",
+    "print(len(acc_valid_list))"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 18,
+   "id": "dbc639ac",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "min_valid_loss = 176.70111268254743 #np.inf "
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 19,
+   "id": "f4740bf5",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "<All keys matched successfully>"
+      ]
+     },
+     "execution_count": 19,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "net.load_state_dict(torch.load(\"/home/user/research/inception/inception_model_weights.pth\"))"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 20,
+   "id": "4de4f21c",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "  0%|          | 0/1796 [00:00<?, ?it/s]/home/user/anaconda3/lib/python3.8/site-packages/torch/nn/functional.py:718: UserWarning: Named tensors and all their associated APIs are an experimental feature and subject to change. Please do not use them for anything important until they are released as stable. (Triggered internally at  /pytorch/c10/core/TensorImpl.h:1156.)\n",
+      "  return torch.max_pool2d(input, kernel_size, stride, padding, dilation, ceil_mode)\n",
+      "100%|██████████| 1796/1796 [26:58<00:00,  1.11it/s]\n",
+      "100%|██████████| 1144/1144 [01:33<00:00, 12.19it/s]\n",
+      "  0%|          | 0/1796 [00:00<?, ?it/s]"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Epoch 51 \tTraining Loss: 0.09165445734263657 \tValidation Loss: 0.17152209940613636 \t time: 00:28:32\n",
+      "Train Accuracy : 96.53636169433594 \tValidation Accuracy : 94.23077392578125\n"
+     ]
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "100%|██████████| 1796/1796 [21:22<00:00,  1.40it/s]\n",
+      "100%|██████████| 1144/1144 [01:37<00:00, 11.72it/s]\n",
+      "  0%|          | 0/1796 [00:00<?, ?it/s]"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Epoch 52 \tTraining Loss: 0.09221583802063996 \tValidation Loss: 0.16037222628516629 \t time: 00:23:00\n",
+      "Train Accuracy : 96.73126220703125 \tValidation Accuracy : 94.37645721435547\n"
+     ]
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "100%|██████████| 1796/1796 [22:16<00:00,  1.34it/s]\n",
+      "100%|██████████| 1144/1144 [01:42<00:00, 11.19it/s]\n",
+      "  0%|          | 0/1796 [00:00<?, ?it/s]"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Epoch 53 \tTraining Loss: 0.08847045124473309 \tValidation Loss: 0.2036763697891736 \t time: 00:23:58\n",
+      "Train Accuracy : 96.88160705566406 \tValidation Accuracy : 93.79370880126953\n"
+     ]
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "100%|██████████| 1796/1796 [22:47<00:00,  1.31it/s]\n",
+      "100%|██████████| 1144/1144 [01:44<00:00, 10.99it/s]\n",
+      "  0%|          | 0/1796 [00:00<?, ?it/s]"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Epoch 54 \tTraining Loss: 0.08789863544174668 \tValidation Loss: 0.1687593689412151 \t time: 00:24:31\n",
+      "Train Accuracy : 96.7646713256836 \tValidation Accuracy : 94.43473052978516\n"
+     ]
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "100%|██████████| 1796/1796 [22:57<00:00,  1.30it/s]\n",
+      "100%|██████████| 1144/1144 [01:43<00:00, 11.02it/s]\n"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Epoch 55 \tTraining Loss: 0.09500338172477096 \tValidation Loss: 0.14177400080895142 \t time: 00:24:41\n",
+      "Train Accuracy : 96.63102722167969 \tValidation Accuracy : 95.10489654541016\n",
+      "Validation Loss Decreased( 176.70111268254743 ---> 162.18945692544042 ) \t Saving The Model\n"
+     ]
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "100%|██████████| 1796/1796 [23:07<00:00,  1.29it/s]\n",
+      "100%|██████████| 1144/1144 [01:42<00:00, 11.19it/s]\n",
+      "  0%|          | 0/1796 [00:00<?, ?it/s]"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Epoch 56 \tTraining Loss: 0.09031265778825509 \tValidation Loss: 0.18278716804204703 \t time: 00:24:49\n",
+      "Train Accuracy : 96.74796295166016 \tValidation Accuracy : 93.96853637695312\n"
+     ]
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "100%|██████████| 1796/1796 [23:03<00:00,  1.30it/s]\n",
+      "100%|██████████| 1144/1144 [01:44<00:00, 10.96it/s]\n",
+      "  0%|          | 0/1796 [00:00<?, ?it/s]"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Epoch 57 \tTraining Loss: 0.08620208682385942 \tValidation Loss: 0.14799000272867793 \t time: 00:24:48\n",
+      "Train Accuracy : 96.88160705566406 \tValidation Accuracy : 94.90093231201172\n"
+     ]
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "100%|██████████| 1796/1796 [23:10<00:00,  1.29it/s]\n",
+      "100%|██████████| 1144/1144 [01:44<00:00, 10.92it/s]\n",
+      "  0%|          | 0/1796 [00:00<?, ?it/s]"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Epoch 58 \tTraining Loss: 0.08300438247726585 \tValidation Loss: 0.1600002346522127 \t time: 00:24:55\n",
+      "Train Accuracy : 97.0263900756836 \tValidation Accuracy : 94.43473052978516\n"
+     ]
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "100%|██████████| 1796/1796 [23:09<00:00,  1.29it/s]\n",
+      "100%|██████████| 1144/1144 [01:46<00:00, 10.77it/s]\n",
+      "  0%|          | 0/1796 [00:00<?, ?it/s]"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Epoch 59 \tTraining Loss: 0.08226122751776815 \tValidation Loss: 0.14605365284565963 \t time: 00:24:55\n",
+      "Train Accuracy : 97.13219451904297 \tValidation Accuracy : 95.10489654541016\n"
+     ]
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "100%|██████████| 1796/1796 [23:07<00:00,  1.29it/s]\n",
+      "100%|██████████| 1144/1144 [01:45<00:00, 10.85it/s]\n",
+      "  0%|          | 0/1796 [00:00<?, ?it/s]"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Epoch 60 \tTraining Loss: 0.08579505991390575 \tValidation Loss: 0.18423723773755435 \t time: 00:24:52\n",
+      "Train Accuracy : 96.97627258300781 \tValidation Accuracy : 93.47319793701172\n"
+     ]
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "100%|██████████| 1796/1796 [24:58<00:00,  1.20it/s]\n",
+      "100%|██████████| 1144/1144 [02:00<00:00,  9.47it/s]\n",
+      "  0%|          | 0/1796 [00:00<?, ?it/s]"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Epoch 61 \tTraining Loss: 0.08214815120575526 \tValidation Loss: 0.17847097962048566 \t time: 00:26:59\n",
+      "Train Accuracy : 97.06536865234375 \tValidation Accuracy : 94.23077392578125\n"
+     ]
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "100%|██████████| 1796/1796 [23:48<00:00,  1.26it/s]\n",
+      "100%|██████████| 1144/1144 [01:40<00:00, 11.39it/s]\n",
+      "  0%|          | 0/1796 [00:00<?, ?it/s]"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Epoch 62 \tTraining Loss: 0.07662939100897298 \tValidation Loss: 0.16315428260541065 \t time: 00:25:29\n",
+      "Train Accuracy : 97.11548614501953 \tValidation Accuracy : 94.60955810546875\n"
+     ]
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "100%|██████████| 1796/1796 [21:46<00:00,  1.37it/s]\n",
+      "100%|██████████| 1144/1144 [01:37<00:00, 11.78it/s]\n",
+      "  0%|          | 0/1796 [00:00<?, ?it/s]"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Epoch 63 \tTraining Loss: 0.07747971859184274 \tValidation Loss: 0.22504110104722083 \t time: 00:23:24\n",
+      "Train Accuracy : 97.34379577636719 \tValidation Accuracy : 93.18182373046875\n"
+     ]
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "100%|██████████| 1796/1796 [21:54<00:00,  1.37it/s]\n",
+      "100%|██████████| 1144/1144 [01:41<00:00, 11.24it/s]\n",
+      "  0%|          | 0/1796 [00:00<?, ?it/s]"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Epoch 64 \tTraining Loss: 0.07793970416078122 \tValidation Loss: 0.1685476378482461 \t time: 00:23:36\n",
+      "Train Accuracy : 97.13776397705078 \tValidation Accuracy : 94.28904724121094\n"
+     ]
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "100%|██████████| 1796/1796 [22:23<00:00,  1.34it/s]\n",
+      "100%|██████████| 1144/1144 [01:36<00:00, 11.81it/s]\n",
+      "  0%|          | 0/1796 [00:00<?, ?it/s]"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Epoch 65 \tTraining Loss: 0.07176851012418552 \tValidation Loss: 0.1624539961414715 \t time: 00:24:00\n",
+      "Train Accuracy : 97.43846130371094 \tValidation Accuracy : 95.22145080566406\n"
+     ]
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "100%|██████████| 1796/1796 [21:45<00:00,  1.38it/s]\n",
+      "100%|██████████| 1144/1144 [01:39<00:00, 11.44it/s]\n",
+      "  0%|          | 0/1796 [00:00<?, ?it/s]"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Epoch 66 \tTraining Loss: 0.07633045756118612 \tValidation Loss: 0.16267618834170236 \t time: 00:23:25\n",
+      "Train Accuracy : 97.26026916503906 \tValidation Accuracy : 94.46387481689453\n"
+     ]
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "100%|██████████| 1796/1796 [22:27<00:00,  1.33it/s]\n",
+      "100%|██████████| 1144/1144 [01:42<00:00, 11.16it/s]\n",
+      "  0%|          | 0/1796 [00:00<?, ?it/s]"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Epoch 67 \tTraining Loss: 0.07321558582663341 \tValidation Loss: 0.21929416910379954 \t time: 00:24:09\n",
+      "Train Accuracy : 97.42733001708984 \tValidation Accuracy : 93.50233459472656\n"
+     ]
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "100%|██████████| 1796/1796 [21:46<00:00,  1.37it/s]\n",
+      "100%|██████████| 1144/1144 [01:37<00:00, 11.78it/s]\n",
+      "  0%|          | 0/1796 [00:00<?, ?it/s]"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Epoch 68 \tTraining Loss: 0.07049886439466706 \tValidation Loss: 0.20767059386729905 \t time: 00:23:23\n",
+      "Train Accuracy : 97.44403076171875 \tValidation Accuracy : 93.706298828125\n"
+     ]
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "100%|██████████| 1796/1796 [22:08<00:00,  1.35it/s]\n",
+      "100%|██████████| 1144/1144 [01:40<00:00, 11.42it/s]\n",
+      "  0%|          | 0/1796 [00:00<?, ?it/s]"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Epoch 69 \tTraining Loss: 0.06958261082941226 \tValidation Loss: 0.20314688874566306 \t time: 00:23:48\n",
+      "Train Accuracy : 97.51085662841797 \tValidation Accuracy : 94.55128479003906\n"
+     ]
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "100%|██████████| 1796/1796 [22:12<00:00,  1.35it/s]\n",
+      "100%|██████████| 1144/1144 [01:37<00:00, 11.77it/s]\n",
+      "  0%|          | 0/1796 [00:00<?, ?it/s]"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Epoch 70 \tTraining Loss: 0.06615839365227791 \tValidation Loss: 0.21894106984455217 \t time: 00:23:49\n",
+      "Train Accuracy : 97.6556396484375 \tValidation Accuracy : 94.34732055664062\n"
+     ]
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "100%|██████████| 1796/1796 [22:12<00:00,  1.35it/s]\n",
+      "100%|██████████| 1144/1144 [01:42<00:00, 11.16it/s]\n",
+      "  0%|          | 0/1796 [00:00<?, ?it/s]"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Epoch 71 \tTraining Loss: 0.07073798872735443 \tValidation Loss: 0.1854989590078617 \t time: 00:23:55\n",
+      "Train Accuracy : 97.42176055908203 \tValidation Accuracy : 94.31818389892578\n"
+     ]
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "100%|██████████| 1796/1796 [22:02<00:00,  1.36it/s]\n",
+      "100%|██████████| 1144/1144 [01:41<00:00, 11.27it/s]\n",
+      "  0%|          | 0/1796 [00:00<?, ?it/s]"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Epoch 72 \tTraining Loss: 0.06759932948314919 \tValidation Loss: 0.16438417145409634 \t time: 00:23:44\n",
+      "Train Accuracy : 97.65007019042969 \tValidation Accuracy : 94.72611236572266\n"
+     ]
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "100%|██████████| 1796/1796 [22:45<00:00,  1.32it/s]\n",
+      "100%|██████████| 1144/1144 [01:42<00:00, 11.19it/s]\n",
+      "  0%|          | 0/1796 [00:00<?, ?it/s]"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Epoch 73 \tTraining Loss: 0.06808185780105781 \tValidation Loss: 0.20492887748025262 \t time: 00:24:27\n",
+      "Train Accuracy : 97.60552215576172 \tValidation Accuracy : 93.24009704589844\n"
+     ]
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "100%|██████████| 1796/1796 [22:49<00:00,  1.31it/s]\n",
+      "100%|██████████| 1144/1144 [01:38<00:00, 11.64it/s]\n",
+      "  0%|          | 0/1796 [00:00<?, ?it/s]"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Epoch 74 \tTraining Loss: 0.0662040773194995 \tValidation Loss: 0.15864856163937738 \t time: 00:24:27\n",
+      "Train Accuracy : 97.61109161376953 \tValidation Accuracy : 94.78438568115234\n"
+     ]
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "100%|██████████| 1796/1796 [23:54<00:00,  1.25it/s]\n",
+      "100%|██████████| 1144/1144 [01:57<00:00,  9.71it/s]\n",
+      "  0%|          | 0/1796 [00:00<?, ?it/s]"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Epoch 75 \tTraining Loss: 0.06631172326392323 \tValidation Loss: 0.17424752525398982 \t time: 00:25:52\n",
+      "Train Accuracy : 97.50528717041016 \tValidation Accuracy : 94.69696807861328\n"
+     ]
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "100%|██████████| 1796/1796 [25:56<00:00,  1.15it/s]\n",
+      "100%|██████████| 1144/1144 [01:59<00:00,  9.60it/s]\n",
+      "  0%|          | 0/1796 [00:00<?, ?it/s]"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Epoch 76 \tTraining Loss: 0.060300969062300605 \tValidation Loss: 0.1800764260328554 \t time: 00:27:55\n",
+      "Train Accuracy : 97.7837142944336 \tValidation Accuracy : 94.84265899658203\n"
+     ]
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "100%|██████████| 1796/1796 [26:14<00:00,  1.14it/s]\n",
+      "100%|██████████| 1144/1144 [02:06<00:00,  9.06it/s]\n",
+      "  0%|          | 0/1796 [00:00<?, ?it/s]"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Epoch 77 \tTraining Loss: 0.0631895532683778 \tValidation Loss: 0.17779819888212697 \t time: 00:28:20\n",
+      "Train Accuracy : 97.74473571777344 \tValidation Accuracy : 94.81352233886719\n"
+     ]
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "100%|██████████| 1796/1796 [26:40<00:00,  1.12it/s]\n",
+      "100%|██████████| 1144/1144 [02:00<00:00,  9.48it/s]\n",
+      "  0%|          | 0/1796 [00:00<?, ?it/s]"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Epoch 78 \tTraining Loss: 0.06198645626303477 \tValidation Loss: 0.22541044369261604 \t time: 00:28:41\n",
+      "Train Accuracy : 97.80599212646484 \tValidation Accuracy : 92.89044189453125\n"
+     ]
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "100%|██████████| 1796/1796 [26:45<00:00,  1.12it/s]\n",
+      "100%|██████████| 1144/1144 [01:59<00:00,  9.59it/s]\n",
+      "  0%|          | 0/1796 [00:00<?, ?it/s]"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Epoch 79 \tTraining Loss: 0.06146746539060868 \tValidation Loss: 0.16276436379049866 \t time: 00:28:44\n",
+      "Train Accuracy : 97.80042266845703 \tValidation Accuracy : 94.81352233886719\n"
+     ]
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "100%|██████████| 1796/1796 [26:38<00:00,  1.12it/s]\n",
+      "100%|██████████| 1144/1144 [02:01<00:00,  9.39it/s]\n",
+      "  0%|          | 0/1796 [00:00<?, ?it/s]"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Epoch 80 \tTraining Loss: 0.061250413641016646 \tValidation Loss: 0.185863304678096 \t time: 00:28:40\n",
+      "Train Accuracy : 97.7892837524414 \tValidation Accuracy : 94.66783142089844\n"
+     ]
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "100%|██████████| 1796/1796 [26:28<00:00,  1.13it/s]\n",
+      "100%|██████████| 1144/1144 [02:00<00:00,  9.48it/s]\n",
+      "  0%|          | 0/1796 [00:00<?, ?it/s]"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Epoch 81 \tTraining Loss: 0.055994985836952726 \tValidation Loss: 0.19503489832381585 \t time: 00:28:28\n",
+      "Train Accuracy : 97.96190643310547 \tValidation Accuracy : 94.55128479003906\n"
+     ]
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "100%|██████████| 1796/1796 [24:30<00:00,  1.22it/s]\n",
+      "100%|██████████| 1144/1144 [01:50<00:00, 10.40it/s]\n",
+      "  0%|          | 0/1796 [00:00<?, ?it/s]"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Epoch 82 \tTraining Loss: 0.05786731395727391 \tValidation Loss: 0.1772332505598556 \t time: 00:26:20\n",
+      "Train Accuracy : 97.93963623046875 \tValidation Accuracy : 94.6386947631836\n"
+     ]
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "100%|██████████| 1796/1796 [24:25<00:00,  1.23it/s]\n",
+      "100%|██████████| 1144/1144 [01:50<00:00, 10.34it/s]\n",
+      "  0%|          | 0/1796 [00:00<?, ?it/s]"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Epoch 83 \tTraining Loss: 0.05508038126183864 \tValidation Loss: 0.17212355645936103 \t time: 00:26:16\n",
+      "Train Accuracy : 98.01202392578125 \tValidation Accuracy : 94.81352233886719\n"
+     ]
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "100%|██████████| 1796/1796 [24:29<00:00,  1.22it/s]\n",
+      "100%|██████████| 1144/1144 [01:50<00:00, 10.38it/s]\n",
+      "  0%|          | 0/1796 [00:00<?, ?it/s]"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Epoch 84 \tTraining Loss: 0.05333144986953854 \tValidation Loss: 0.18769453135639058 \t time: 00:26:19\n",
+      "Train Accuracy : 98.1623764038086 \tValidation Accuracy : 94.55128479003906\n"
+     ]
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "100%|██████████| 1796/1796 [24:27<00:00,  1.22it/s]\n",
+      "100%|██████████| 1144/1144 [01:50<00:00, 10.32it/s]\n",
+      "  0%|          | 0/1796 [00:00<?, ?it/s]"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Epoch 85 \tTraining Loss: 0.05195518812915562 \tValidation Loss: 0.2188312843085706 \t time: 00:26:18\n",
+      "Train Accuracy : 98.1623764038086 \tValidation Accuracy : 94.28904724121094\n"
+     ]
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "100%|██████████| 1796/1796 [24:26<00:00,  1.22it/s]\n",
+      "100%|██████████| 1144/1144 [01:51<00:00, 10.27it/s]\n",
+      "  0%|          | 0/1796 [00:00<?, ?it/s]"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Epoch 86 \tTraining Loss: 0.05557021407121344 \tValidation Loss: 0.16567276273672485 \t time: 00:26:18\n",
+      "Train Accuracy : 97.90621948242188 \tValidation Accuracy : 95.22145080566406\n"
+     ]
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "100%|██████████| 1796/1796 [24:25<00:00,  1.23it/s]\n",
+      "100%|██████████| 1144/1144 [01:51<00:00, 10.30it/s]\n",
+      "  0%|          | 0/1796 [00:00<?, ?it/s]"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Epoch 87 \tTraining Loss: 0.04761978305685298 \tValidation Loss: 0.17063623352618648 \t time: 00:26:16\n",
+      "Train Accuracy : 98.28488159179688 \tValidation Accuracy : 94.93006896972656\n"
+     ]
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "100%|██████████| 1796/1796 [24:30<00:00,  1.22it/s]\n",
+      "100%|██████████| 1144/1144 [01:51<00:00, 10.24it/s]\n",
+      "  0%|          | 0/1796 [00:00<?, ?it/s]"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Epoch 88 \tTraining Loss: 0.04825140143763275 \tValidation Loss: 0.20191060677620382 \t time: 00:26:21\n",
+      "Train Accuracy : 98.29045104980469 \tValidation Accuracy : 94.98834991455078\n"
+     ]
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "100%|██████████| 1796/1796 [24:35<00:00,  1.22it/s]\n",
+      "100%|██████████| 1144/1144 [01:51<00:00, 10.24it/s]\n",
+      "  0%|          | 0/1796 [00:00<?, ?it/s]"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Epoch 89 \tTraining Loss: 0.05780107012915506 \tValidation Loss: 0.174123426197158 \t time: 00:26:26\n",
+      "Train Accuracy : 97.94520568847656 \tValidation Accuracy : 94.5804214477539\n"
+     ]
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "100%|██████████| 1796/1796 [24:50<00:00,  1.21it/s]\n",
+      "100%|██████████| 1144/1144 [01:53<00:00, 10.11it/s]\n",
+      "  0%|          | 0/1796 [00:00<?, ?it/s]"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Epoch 90 \tTraining Loss: 0.0488213468202301 \tValidation Loss: 0.1821983714126591 \t time: 00:26:43\n",
+      "Train Accuracy : 98.28488159179688 \tValidation Accuracy : 95.01748657226562\n"
+     ]
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "100%|██████████| 1796/1796 [24:34<00:00,  1.22it/s]\n",
+      "100%|██████████| 1144/1144 [01:49<00:00, 10.48it/s]\n",
+      "  0%|          | 0/1796 [00:00<?, ?it/s]"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Epoch 91 \tTraining Loss: 0.04786794898898365 \tValidation Loss: 0.21106482365035026 \t time: 00:26:24\n",
+      "Train Accuracy : 98.26818084716797 \tValidation Accuracy : 94.37645721435547\n"
+     ]
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "100%|██████████| 1796/1796 [24:37<00:00,  1.22it/s]\n",
+      "100%|██████████| 1144/1144 [01:52<00:00, 10.19it/s]\n",
+      "  0%|          | 0/1796 [00:00<?, ?it/s]"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Epoch 92 \tTraining Loss: 0.04460614188660565 \tValidation Loss: 0.18981046517962916 \t time: 00:26:29\n",
+      "Train Accuracy : 98.46864318847656 \tValidation Accuracy : 95.16316986083984\n"
+     ]
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "100%|██████████| 1796/1796 [24:37<00:00,  1.22it/s]\n",
+      "100%|██████████| 1144/1144 [01:53<00:00, 10.12it/s]\n",
+      "  0%|          | 0/1796 [00:00<?, ?it/s]"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Epoch 93 \tTraining Loss: 0.04528368343457531 \tValidation Loss: 0.19061526675608978 \t time: 00:26:30\n",
+      "Train Accuracy : 98.37954711914062 \tValidation Accuracy : 95.134033203125\n"
+     ]
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "100%|██████████| 1796/1796 [24:40<00:00,  1.21it/s]\n",
+      "100%|██████████| 1144/1144 [01:53<00:00, 10.11it/s]\n",
+      "  0%|          | 0/1796 [00:00<?, ?it/s]"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Epoch 94 \tTraining Loss: 0.04315999560623736 \tValidation Loss: 0.18479735974127254 \t time: 00:26:34\n",
+      "Train Accuracy : 98.39625549316406 \tValidation Accuracy : 94.93006896972656\n"
+     ]
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "100%|██████████| 1796/1796 [24:45<00:00,  1.21it/s]\n",
+      "100%|██████████| 1144/1144 [01:51<00:00, 10.22it/s]\n",
+      "  0%|          | 0/1796 [00:00<?, ?it/s]"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Epoch 95 \tTraining Loss: 0.045449965668429 \tValidation Loss: 0.21741512184906572 \t time: 00:26:37\n",
+      "Train Accuracy : 98.31272888183594 \tValidation Accuracy : 94.6386947631836\n"
+     ]
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "100%|██████████| 1796/1796 [24:46<00:00,  1.21it/s]\n",
+      "100%|██████████| 1144/1144 [01:51<00:00, 10.30it/s]\n",
+      "  0%|          | 0/1796 [00:00<?, ?it/s]"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Epoch 96 \tTraining Loss: 0.04930824305741191 \tValidation Loss: 0.22110039089647493 \t time: 00:26:37\n",
+      "Train Accuracy : 98.2960205078125 \tValidation Accuracy : 93.76457214355469\n"
+     ]
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "100%|██████████| 1796/1796 [24:44<00:00,  1.21it/s]\n",
+      "100%|██████████| 1144/1144 [01:51<00:00, 10.30it/s]\n",
+      "  0%|          | 0/1796 [00:00<?, ?it/s]"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Epoch 97 \tTraining Loss: 0.04283826560632438 \tValidation Loss: 0.20986085644259478 \t time: 00:26:35\n",
+      "Train Accuracy : 98.40739440917969 \tValidation Accuracy : 94.49301147460938\n"
+     ]
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "100%|██████████| 1796/1796 [24:38<00:00,  1.22it/s]\n",
+      "100%|██████████| 1144/1144 [01:51<00:00, 10.29it/s]\n",
+      "  0%|          | 0/1796 [00:00<?, ?it/s]"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Epoch 98 \tTraining Loss: 0.04108247859154013 \tValidation Loss: 0.2100832273115594 \t time: 00:26:29\n",
+      "Train Accuracy : 98.53546905517578 \tValidation Accuracy : 95.04662322998047\n"
+     ]
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "100%|██████████| 1796/1796 [24:46<00:00,  1.21it/s]\n",
+      "100%|██████████| 1144/1144 [01:53<00:00, 10.12it/s]\n",
+      "  0%|          | 0/1796 [00:00<?, ?it/s]"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Epoch 99 \tTraining Loss: 0.04423610125145301 \tValidation Loss: 0.20389257205650918 \t time: 00:26:39\n",
+      "Train Accuracy : 98.32386016845703 \tValidation Accuracy : 94.52214813232422\n"
+     ]
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "100%|██████████| 1796/1796 [24:53<00:00,  1.20it/s]\n",
+      "100%|██████████| 1144/1144 [01:54<00:00,  9.97it/s]\n"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Epoch 100 \tTraining Loss: 0.04032945076981576 \tValidation Loss: 0.19798582192817635 \t time: 00:26:48\n",
+      "Train Accuracy : 98.53546905517578 \tValidation Accuracy : 94.60955810546875\n",
+      "total time :  21:27:42\n"
+     ]
+    },
+    {
+     "data": {
+      "image/png": "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\n",
+      "text/plain": [
+       "<Figure size 432x288 with 1 Axes>"
+      ]
+     },
+     "metadata": {
+      "needs_background": "light"
+     },
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "# loss_train_list = []\n",
+    "# loss_valid_list = []\n",
+    "# acc_train_list = []\n",
+    "# acc_valid_list = []\n",
+    "\n",
+    "epochs = 50\n",
+    "total_time = time.time()\n",
+    "for e in range(epochs):\n",
+    "    start_time=time.time()\n",
+    "    train_loss = 0.0\n",
+    "    right_train = 0\n",
+    "    total_train = 0\n",
+    "    for data, labels in tqdm(trainloader):\n",
+    "        # Transfer Data to GPU if available\n",
+    "        if torch.cuda.is_available():\n",
+    "            data, labels = data.cuda(), labels.cuda()\n",
+    "         \n",
+    "        # Clear the gradients\n",
+    "        optimizer.zero_grad()\n",
+    "        net.train()\n",
+    "        # Forward Pass\n",
+    "        target = net(data)\n",
+    "        _, predicted = torch.max(target, 1)\n",
+    "        # Find the Loss\n",
+    "        loss = criterion(target,labels)\n",
+    "        # Calculate gradients\n",
+    "        loss.backward()\n",
+    "        # Update Weights\n",
+    "        optimizer.step()\n",
+    "        # Calculate Loss\n",
+    "        train_loss += loss.item()\n",
+    "        correct = (predicted == labels).float().sum()\n",
+    "        right_train+=correct.float()\n",
+    "        total_train+=len(predicted)\n",
+    "     \n",
+    "    valid_loss = 0.0\n",
+    "    right_valid = 0\n",
+    "    total_valid = 0\n",
+    "    net.eval()     # Optional when not using Model Specific layer\n",
+    "    all_targets, all_predictions = [], []\n",
+    "    for data, labels in tqdm(validloader):\n",
+    "        # Transfer Data to GPU if available\n",
+    "        if torch.cuda.is_available():\n",
+    "            data, labels = data.cuda(), labels.cuda()\n",
+    "         \n",
+    "        # Forward Pass\n",
+    "        target = net(data)\n",
+    "        _, predicted = torch.max(target, 1)\n",
+    "        # Find the Loss\n",
+    "        loss = criterion(target,labels)\n",
+    "        # Calculate Loss\n",
+    "        valid_loss += loss.item()\n",
+    "        correct = (predicted == labels).float().sum()\n",
+    "        right_valid+=correct.float()\n",
+    "        total_valid+=len(predicted)\n",
+    "        all_targets.extend(labels.to('cpu'))\n",
+    "        all_predictions.extend(predicted.to('cpu'))\n",
+    "    ftloss = train_loss / len(trainloader)\n",
+    "    fvloss = valid_loss / len(validloader)\n",
+    "    ftacc = float(right_train*100/total_train)\n",
+    "    fvacc = float(right_valid*100/total_valid)\n",
+    "    loss_train_list.append(ftloss)\n",
+    "    loss_valid_list.append(fvloss)\n",
+    "    acc_train_list.append(ftacc)\n",
+    "    acc_valid_list.append(fvacc)\n",
+    "    print('Epoch',e+51, '\\tTraining Loss:',ftloss,'\\tValidation Loss:',fvloss,\"\\t time:\",convert(time.time()-start_time))\n",
+    "    print(\"Train Accuracy :\",ftacc,\"\\tValidation Accuracy :\",fvacc)\n",
+    "    if min_valid_loss > valid_loss:\n",
+    "        print(\"Validation Loss Decreased(\",min_valid_loss,\"--->\",valid_loss,\") \\t Saving The Model\")\n",
+    "        min_valid_loss = valid_loss\n",
+    "        all_predictions = np.array(all_predictions)\n",
+    "        all_targets = np.array(all_targets)\n",
+    "        class_labels = np.unique(np.concatenate((all_targets, all_predictions)))\n",
+    "        if class_labels.shape[0] == 1:\n",
+    "            if class_labels[0] != 0:\n",
+    "                class_labels = np.array([0, class_labels[0]])\n",
+    "            else:\n",
+    "                class_labels = np.array([class_labels[0], 1])\n",
+    "        n_labels = class_labels.shape[0]\n",
+    "        lst = []\n",
+    "        z = list(zip(all_targets, all_predictions))\n",
+    "        for combi in product(class_labels, repeat=2):\n",
+    "            lst.append(z.count(combi))\n",
+    "        mat = np.asarray(lst)[:, None].reshape(n_labels, n_labels)\n",
+    "        plot_confusion_matrix(mat, class_names=class_dict.values())\n",
+    "        plt.savefig(\"ConfusionMatrix.png\")\n",
+    "        # Saving State Dict\n",
+    "        torch.save(net.state_dict(), '/home/user/research/inception/inception_model_weights.pth')\n",
+    "        torch.save(net,\"/home/user/research/inception/inception_model.pt\")\n",
+    "print(\"total time : \",convert(time.time()-total_time))\n",
+    "playsound('/home/user/research/audio')"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 24,
+   "id": "13786d1d",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "torch.save(net.state_dict(), '/home/user/research/inception/inception_model_100e_weights.pth')\n",
+    "torch.save(net,\"/home/user/research/inception/inception_model_100e.pt\")"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "7292be62",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# loss_train_list = []\n",
+    "# loss_valid_list = []\n",
+    "# acc_train_list = []\n",
+    "# acc_valid_list = []\n",
+    "# f = open(\"stats.txt\",\"r\")\n",
+    "# for i in f.readlines():\n",
+    "#     if \"Loss\" in i and \"Epoch\" in i:\n",
+    "#         e,t,v,time = i.split(\"\\t\")\n",
+    "#         train_acc = t.split(\" \")[-2]\n",
+    "#         valid_acc = v.split(\" \")[-2]\n",
+    "#         loss_train_list.append(float(train_acc))\n",
+    "#         loss_valid_list.append(float(valid_acc))\n",
+    "#     if \"Accuracy\" in i:\n",
+    "#         t,v = i.split(\"\\t\")\n",
+    "#         train_acc = t.split(\" \")[-2]\n",
+    "#         valid_acc = v.split(\" \")[-1]\n",
+    "#         acc_train_list.append(float(train_acc))\n",
+    "#         acc_valid_list.append(float(valid_acc))"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 21,
+   "id": "166cc6e2",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYIAAAEWCAYAAABrDZDcAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAABHGklEQVR4nO2deXxU1d3/399ZsicESNh3pSKbgAi4Y7VWUNFWVKoW9amlavtzeWxrbWvVPo+t7aMWd6ptFRW1Fjdq0dYdcQdERFFBAQlrEsi+zsz5/XHuJJPJzGQSMiST+b5fr3nNnXvPvffcOzPnc7/LOUeMMSiKoiipi6urK6AoiqJ0LSoEiqIoKY4KgaIoSoqjQqAoipLiqBAoiqKkOCoEiqIoKY4KwX4gIi+IyIWdXbYrEZEtInJSAo77uohc4iyfLyL/iadsB84zTESqRMTd0bp2d0TkRhF5dD/2/6WI/KUz65RIRGSmiBTFWXa/7k2c54j7N5Ysv8eUEwLnSwm+AiJSG/L5/PYcyxgzyxizuLPLdkdE5DoRWRFhfYGINIjI+HiPZYxZYow5uZPq1UK4jDFfG2NyjDH+zjh+2LmMiBzc2cc90BhjfmeM6ZDQtoVzj3aLiCdknUdE9ohIl3Vach4+gv/zWue/39QWtOdY7fmNJfL32JmknBA4X0qOMSYH+Bo4PWTdkmC50B+yAsAjwFEiMjJs/TzgY2PM+i6ok9JODtDvugyYFfJ5NrDvAJw3Ks7DR/B/PwvYEdYWNNHdn94TQcoJQTSC5qeIXCsiu4AHRaS3iDwvIsUiss9ZHhKyT6i74yIRWSkitzplN4vIrA6WHSkiK0SkUkReFpF7opm7cdbxf0TkLed4/xGRgpDt3xeRrSJSKiK/inZ/jDFFwKvA98M2zQcWt1WPsDpfJCIrQz5/S0Q+E5FyEbkbkJBtB4nIq079SkRkiYjkO9seAYYB/3Se7H4uIiOcp1KPU2aQiCwTkb0isklEfhhy7BtF5EkRedi5N5+IyNRo9yAaItLLOUaxcy9/LSIuZ9vBIvKGc20lIvJ3Z72IyJ+cJ+VyEVknUawq5/fwhlPHl4DQ76+V20RCrCTnGpeKyKMiUgFcJCHuk5D7daGIfO3U8Vchx8oUkcXOd7rBucdtuWkewf4ugswHHg6rY6zvJVNEHnLO+SlwRIR9n3Lu92YRuaKN+sTEOdd9IrJcRKqBE0TkVBH5UEQqRGSbiNwYUj78Nxb1P9aess72+dL8f7xeEuSqDUeFoCUDgD7AcGAB9v486HweBtQCd8fYfzrwOfaP+kfgryIiHSj7GPA+0Be4kdaNbyjx1PE84GKgH5AG/BRARMYC9znHH+ScL2Lj7bA4tC4icggwCXg8znq0wvkTPAX8GnsvvgSODi0C/N6p36HAUOw9wRjzfVpadX+McIrHgSJn/7nA70TkxJDtc4AngHxgWTx1jsBdQC9gFHA8tuG72Nn2P8B/gN7Ye3uXs/5k4DjgG865zwVKoxz/MWA19v78D9DeWNMZwFLnPEuilDkGOAQ4EfiNiBzqrL8BGIG9tm8BF8RxvmeB40QkX6xoHws8F1Ym1vdyA3CQ8/o2IdfrCOw/gY+AwU59rxKRb8dRr1icB9wM5AIrgWrs95gPnApcJiJntrF/q/9Ye8o6/8d7gfOBgdjf1OAOXk/7MMak7AvYApzkLM8EGoCMGOUnAftCPr8OXOIsXwRsCtmWBRhgQHvKYhtRH5AVsv1R4NE4rylSHX8d8vly4EVn+TfAEyHbsp17cFKUY2cBFcBRzuebgec6eK9WOsvzgXdDygm2gbgkynHPBD6M9B06n0c499KDFQ0/kBuy/ffAQ87yjcDLIdvGArUx7q0BDg5b5wbqgbEh634EvO4sPwzcDwwJ2++bwBfADMAV45zB30N2yLrHgr8H7O+2KMbv+kZgRdj2G0P2D96vISHb3wfmOctfAd8O2XZJ+Pki3SPgL859uBR4wFlnnDJtfS9fAaeEbFsQPCf2AerrsHNeBzwYfm0x6tjingEPAQ+3sc9C4E/hv7E4/mPtKfsb4PGw/1vU/2NnvtQiaEmxMaYu+EFEskTkz46pVgGsAPIlug9xV3DBGFPjLOa0s+wgYG/IOoBt0SocZx13hSzXhNRpUOixjTHVRH8qDdbzH8B8x3o5H2sldOReBQmvgwn9LCL9ROQJEdnuHPdRQlwjcRx7rzGmMmTdVlo+ZYXfmwxpnx+9APtUtzXKOX6OFbf3xbqe/gvAGPMq1vq4B9gtIveLSF6Ua9jnfDehx28PUX8/IcT1G4nzWGAFcD4R3EK0/b2EnzP0eocDg0SkLPgCfgn0j7Ne0WhxXSIyXURec9xP5VhBi/W7i3b/2lM2/L9QQ4z/Y2eiQtCS8KyGa7Dm8nRjTB7WlIcQH3YC2An0EZGskHVDY5TfnzruDD22c86+beyzGDgH6ybIBZ7fz3qE10Foeb2/x34vE53jXhB2zFiZKDuw9zI3ZN0wYHsbdWoPJUAjtoFqdQ5jzC5jzA+NMYOwT8j3ipN5ZIy50xhzODAO6yL6WYTj7wR6i0h22PGDVGOfHIGmQGdh2DH2J1tnJy3dhbF+i6G8iXVv9Me6WkJp63tp8Zug5fVuAzYbY/JDXrnGmNlx1isa4ffoMayrcKgxphewiMT+7yHsXotIJm3/HzsFFYLY5GJ93WUi0gfru0woxpitwCrgRhFJE5EjgdMTVMelwGkicoyIpAG/pe3fxJvYrJD7sW6lhv2sx7+AcSLyXedJ/AqsiyxILlDlHHcwrRvL3Vj/dSuMMduAt4Hfi0iGiEwEfkB0P3k8pDnHyhCRDGfdk8DNIpIrIsOB/8ZaLojI2dIcNN+HbXD8InKE89TpxTbmdVh3Sfg1BH8PNzm/h2No+Xv4AmvFnOoc69dA+n5cXzhPAteJTQYYDPwknp0cy+50YE7QHxSyra3vJfScQ4D/F7L7+0CF2KSOTBFxi8h4EWkRUO4EcrFWS52ITMP69RPNUuB0ETnK+T/eROLFB1AhaIuFQCb2qe9d4MUDdN7zgSOxZuH/An/H+qEjsZAO1tEY8wnwY+zTz05sQxUzI8T5Uz+MfQIONfk7VA9jTAlwNnAL9npHA2+FFLkJmAKUY0Xj6bBD/B74teMmiBSg+x7WT7sDeAa4wRjzUjx1i8InWMELvi7GNlTVWN/2Suz9/JtT/gjgPbG56suAK40xm4E8rO98H9b1UQrcGuWc52F943uxAtt0340x5Vg/81+wT9TVtPEdtpPfOsfbDLyMbayi/RZbYIz5xPmNRSLW93IT9p5sxgbaHwk5ph8rMJOc7SXYa+/VjmuKh8uB34pIJdZ3/2QnH78Vzr36f9jkhZ1AJbCHOO/3/iBhYq10Q8SmHH5mjEm4RaIosRCRy7CB5OO7ui49HRHJwVrfo52Hh4ShFkE3xHEbHCQiLhE5BZv+92wXV0tJQURkoIgc7fwWD8HGgp7p6nr1VETkdCfxIhtrIX6MzQJLKNp7tnsyAOsC6Ys1yy8zxnzYtVVSUpQ04M/ASOzT6RPYXHclMZyBdYUJNjY0LzzGkgjUNaQoipLiqGtIURQlxUk611BBQYEZMWJEV1dDURQlqVi9enWJMSa8jwmQhEIwYsQIVq1a1dXVUBRFSSpEJGqPdHUNKYqipDgqBIqiKCmOCoGiKEqKk3Qxgkg0NjZSVFREXV1d24WTnIyMDIYMGYLX6+3qqiiK0kPoEUJQVFREbm4uI0aMIPo8MMmPMYbS0lKKiooYOTJ8xkhFUZSO0SNcQ3V1dfTt27dHiwCAiNC3b9+UsHwURTlw9AghAHq8CARJletUFOXA0WOEoMuor4LG2q6uhaIoSodRIdhfyosoK/qce+9t/zhcs2fPpqysrPPrpCiK0g5UCPYXE6CsrDyiEPj9rSacasHy5cvJz89PUMUURVHio0dkDXUthl/89v/48ssvmTRpEl6vl5ycHAYOHMjatWv59NNPOfPMM9m2bRt1dXVceeWVLFiwAGgeLqOqqopZs2ZxzDHH8PbbbzN48GCee+45MjMzu/jaFEVJBXqcENz0z0/4dEdFpx5z7KA8bjh9XOSNJsAt11/D+o1bWLt2La+//jqnnnoq69evb0rx/Nvf/kafPn2ora3liCOO4KyzzqJv35ZzUm/cuJHHH3+cBx54gHPOOYennnqKCy64oFOvQ1EUJRI9TggOOMZg5yNvZtq0aS3y/O+8806eecZO6rRt2zY2btzYSghGjhzJpEmTADj88MPZsmVLImutKIrSRI8TgqhP7gnDOGLQTHZ2dtPy66+/zssvv8w777xDVlYWM2fOjNgPID09vWnZ7XZTW6uZSIqiHBg0WLy/mAC5OdlUVlZG3FxeXk7v3r3Jysris88+49133z3AFVQURYlNj7MIDiiOJdC3dz5HH30048ePJzMzk/79+zcVOeWUU1i0aBETJ07kkEMOYcaMGV1VW0VRlIgk3ZzFU6dONeET02zYsIFDDz2080/mbwSXGySK4RTww6514MmAfgk4fxQSdr2KovRYRGS1MWZqpG3qGoqGCcCeDVCzN1Yh5y25xFRRFCUUFYJomAAYPwR8McoEBUCFQFGU5EWFIBomjqd9tQQURekBJEwIRCRDRN4XkY9E5BMRuSlCmZkiUi4ia53XbxJVn3ZjAsGFGIWcMioIiqIkMYnMGqoHvmmMqRIRL7BSRF4wxoTnT75pjDktgfXoGPG4fdQ1pChKDyBhQmBsOlKV89HrvJKoxTQt3iIX0WCxoijJT0JjBCLiFpG1wB7gJWPMexGKHem4j14QkYjdgkVkgYisEpFVxcXFiaxyM/G4huJyH7UmJycHgB07djB37tyIZWbOnEl4mqyiKEoiSKgQGGP8xphJwBBgmoiMDyuyBhhujDkMuAt4Nspx7jfGTDXGTC0sLExklUNP2vI9cqE4ykRn0KBBLF26tEP7KoqidBYHJGvIGFMGvA6cEra+whhT5SwvB7wiUnAg6tQmcVkEdtu1N9/RYj6CG2+8kZtuuokTTzyRKVOmMGHCBJ577rlWu2/ZsoXx46021tbWMm/ePCZOnMi5556rYw0pinLASFiMQEQKgUZjTJmIZAInAX8IKzMA2G2MMSIyDStMpft14hd+Abs+3q9DALb/gK8WXF4YcgTMuqV1GUcI5p1xMlfdvIjLL78cgCeffJIXX3yRq6++mry8PEpKSpgxYwZz5syJOufwfffdR1ZWFuvWrWPdunVMmTJl/69BURQlDhKZNTQQWCwibmwD/6Qx5nkRuRTAGLMImAtcJiI+oBaYZ5JqzAtrNUweP4Y9e/awY8cOiouL6d27NwMHDuTqq69mxYoVuFwutm/fzu7duxkwYEDEI61YsYIrrrgCgIkTJzJx4sQDdhWKoqQ2icwaWgdMjrB+Ucjy3cDdnXriSE/uHaFmL5RthYx86DMycpkQzZp71lksXbqUXbt2MW/ePJYsWUJxcTGrV6/G6/UyYsSIiMNPhxLNWlAURUkk2rM4GnH1Iwg0Lc479xyeeOIJli5dyty5cykvL6dfv354vV5ee+01tm7dGvN0xx13HEuWLAFg/fr1rFu3bn+vQFEUJS50GOqoxNNruHnbuHFjqaysZPDgwQwcOJDzzz+f008/nalTpzJp0iTGjBkT82yXXXYZF198MRMnTmTSpElMmzatE65BURSlbVQIohFPqCK0jDF8/HFzkLqgoIB33nkn4m5VVbaf3YgRI1i/fj0AmZmZPPHEEx2vr6IoSgdR11A0TBwWQYhrKKk6TSuKooSgQhCVeMYRMhEXFUVRkokeIwSdnnXa7mGoD4wSJFV2raIoSUGPEIKMjAxKS0s7t5Fs1+ijxBdT2E+MMZSWlpKRkZHwcymKkjr0iGDxkCFDKCoqolMHpKvdB/WV4E6DkkDsMgB73eD2dt75o5CRkcGQIUMSfh5FUVKHHiEEXq+XkSOjdPrqKM/9BD58BPqPh8veilxm2RWwZrFd/tGbMFAnlFcUJfnoEa6hhOBvcN4b2y4Dsec2VhRF6caoEETD5wwHEYghBL765uWAP7H1URRFSRAqBNHwOU/7sZ70W1gEMQRDURSlG6NCEA2/87Tvj1cI1DWkKEpyokIQjaDbJ1YDH+oaihVLUBRF6caoEESjSQjaCBZ7s5xyGiNQFCU5USGIRtA1FKuB99VDWrZTTl1DiqIkJyoE0QhaBG2ljzZZBOoaUhQlOUmYEIhIhoi8LyIficgnInJThDIiIneKyCYRWSci3Wei3nhjBGoRKIqS5CTSIqgHvmmMOQyYBJwiIjPCyswCRjuvBcB9CaxP+whmBAUao48j5G8IEQKNESiKkpwkTAiMpcr56HVe4S3qGcDDTtl3gXwRGZioOrULX8j8wibKWEOhriHNGlIUJUlJaIxARNwishbYA7xkjHkvrMhgYFvI5yJnXfhxFojIKhFZ1akDy8XCF9JHIFojr64hRVF6AAkVAmOM3xgzCRgCTBOR8WFFJNJuEY5zvzFmqjFmamFhYQJqGgF/Pbic0USjNfIaLFYUpQdwQLKGjDFlwOvAKWGbioChIZ+HADsORJ1iEvDbxr/paT+WRaD9CBRFSW4SmTVUKCL5znImcBLwWVixZcB8J3toBlBujNmZqDrFTTBjKC3HvkcaZiIQsAIRLKOuIUVRkpREzkcwEFgsIm6s4DxpjHleRC4FMMYsApYDs4FNQA1wcQLrEz/BzmSx/P/BrCINFiuKkuQkTAiMMeuAyRHWLwpZNsCPE1WHDhMMFMdyDTWJRdA1pBaBoijJifYsjkQwdTSmReCIg1f7ESiKktyoEEQi6PaJFSMIxhG8GSAuzRpSFCVpUSGIhC+eGIFTxp0OLo+6hhRFSVpUCCLRSggiPO0H4whurxUCDRYripKkqBBEIq6sIaeMJ912PNMYgaIoSYoKQSTCLYKIMYKgRZAOLre6hhRFSVpUCCLRnhiBJ826hzRYrChKkqJCEAl/WM/iiP0IQi0CDRYripK8qBBEolWHshiuIU+a4xrSGIGiKMmJCkEkwjuURYoRtEgf9WrWkKIoSYsKQSSCjbw3DovAnaauIUVRkhoVgki0Z6whjwqBoijJjQpBJOJxDflCXENuFQJFUZIXFYJI+OMIFgfLeDRrSFGU5EaFIBK+etu4u9Ps55jpo2k6xISiKEmNCkEkfPXgybAdxaCN9FEdYkJRlORGhSAS/vrmJ32IkT4qtowOMaEoShKTyDmLh4rIayKyQUQ+EZErI5SZKSLlIrLWef0mUfVpF776Zt8/RLEInDIiOsSEoihJTSLnLPYB1xhj1ohILrBaRF4yxnwaVu5NY8xpCaxH+/E3hAlBlBhBMIagwWJFUZKYhFkExpidxpg1znIlsAEYnKjzdSq+OictNFaMoL6lEERyHymKoiQBByRGICIjsBPZvxdh85Ei8pGIvCAi4w5EfdrE19DcUQyixAgcqwHUIlAUJalJpGsIABHJAZ4CrjLGVIRtXgMMN8ZUichs4FlgdIRjLAAWAAwbNiyxFQYbCPZk2CAwEr0fgbqGFEXpASTUIhARL1YElhhjng7fboypMMZUOcvLAa+IFEQod78xZqoxZmphYWEiq2zx1VvXEDiNfKSpKuvDLAINFiuKkpwkMmtIgL8CG4wxt0cpM8Aph4hMc+pTmqg6xY2v3rqGwMkIasMicHu0H4GiKElLIl1DRwPfBz4WkbXOul8CwwCMMYuAucBlIuIDaoF5xhiTwDrFR9A1BNEDwa0sAnUNKYqSnCRMCIwxKwFpo8zdwN2JqkOHCc8IajN9VOcjUBQledGexZGI52m/lVioa0hRlOREhSASoamhbm/0ISaaxMKtwWJFUZIWFYJIBDuUQfRxhHyhweIoAWVFUZQkQIUgEr7QzmJRxhHSDmWKovQQVAgiEer2iZk+GiIEJgCBwIGro6IoSiehQhBOwG8b/tBGPmr6aEiwGNQqUBQlKVEhCMcXMik9RHf7hFsEoEKgKEpSokIQjj9kUnqIPcREcHTSWMNVK4qidHNUCMIJnYISIscIjGkdRwDtS6AoSlKiQhCOr86+e2LECIK9iENTTEPXK4qiJBEqBOH4HYvAHSM1NFjGEzLEBGiMQFGUpESFIJymYHGMGEEksQAVAkVRkhIVgnDChSDSEBORMotAhUBRlKREhSCcpqyhYCMfYYiJ8MwitwqBoijJiwpBOE1P+8H5CCIMMRHMLHKrRaAoSvKjQhBOPB3K/FFcQ5o1pChKEqJCEE4rt0+kGEF4sFj7ESiKkryoEITT1KEs6BqKFCMITx91+hFoz2JFUZKQRE5eP1REXhORDSLyiYhcGaGMiMidIrJJRNaJyJRE1SdumjqUhfQRaJU+GmEYCtAYgaIoSUkiJ6/3AdcYY9aISC6wWkReMsZ8GlJmFjDaeU0H7nPeu45IrqHwBj7SMBSgQqAoSlISl0UgIleKSJ7zBP9XEVkjIifH2scYs9MYs8ZZrgQ2AIPDip0BPGws7wL5IjKwA9fReYQ38hGHmAhPMQ0Gi1UIFEVJPuJ1Df2XMaYCOBkoBC4Gbon3JCIyApgMvBe2aTCwLeRzEa3FAhFZICKrRGRVcXFxvKftGJHGGmplEUTofQxqESiKkpTEKwTivM8GHjTGfBSyLvaOIjnAU8BVjphEOm4optUKY+43xkw1xkwtLCyMs8odJOJYQ9GGmAgfhlqFQFGU5CNeIVgtIv/BCsG/HZ9/m/MyiogXKwJLjDFPRyhSBAwN+TwE2BFnnRKDr94GiF3OrXF7W09D6YsWLNasIUVRko94heAHwC+AI4wxNYAX6x6KiogI8FdggzHm9ijFlgHzndjDDKDcGLMzzjolBl/IPAMQkhoa8rQf7Dim8xEoitIDiDdr6EhgrTGmWkQuAKYAd7Sxz9HA94GPRWSts+6XwDAAY8wiYDnWytgE1NCGuBwQ/PXNQWAIG2I6rbkMtByPCLRnsaIoSUm8QnAfcJiIHAb8HPuk/zBwfLQdjDEraSOOYIwxwI/jrMOBwVff3JkMIrt9NFisKEoPIl7XkM9ptM8A7jDG3AHkJq5aXYi/obkzGTS7fUJTQ/3hg85pPwJFUZKXeC2CShG5DuvqOVZE3Ng4Qc/DV9ccBIbIMQKf4z4Sx+BRi0BRlCQmXovgXKAe259gFzbX//8SVquuxBdmETQ97Ye4hvwNLeMIOh+BoihJTFxC4DT+S4BeInIaUGeMeTihNesq/NFiBBEsglhlFEVRkoR4h5g4B3gfOBs4B3hPROYmsmJdhq++pWsoYowgPMVU5yNQFCV5iTdG8CtsH4I9ACJSCLwMLE1UxboMXz1k5DV/jtaPIGKKqfYjUBQl+Yg3RuAKioBDaTv2TS5auYYixAiidjpTi0BRlOQjXovgRRH5N/C48/lcbGewnke4/z/SENP+hpbuIxGQCBPYKIqiJAFxCYEx5mcicha2t7AA9xtjnklozbqKVk/7EYaY9tW3zCyCyPMWKIqiJAFxT0xjjHkKO4Bcz8bfEFkIYlkEwXI6H4GiKElITCEQkUoiDAuNtQqMMSYvwrbkplWHsihDTHgzW+4XaW5jRVGUJCCmEBhjeuYwErHwhVkEEWME9ZCZ33I/l7qGFEVJTnpm5s/+ELWPQIz00WA5zRpSFCUJUSEIJeC3T/XxuIY8YTECt1f7ESiKkpSoEITSNLx0G8NHRAwWu7VnsaIoSYkKQSjBCWdCO5Q1DTER0sg31kQIFkeY5F5RFCUJUCEIxRc28xiEWAQhbp+GGkjLarmvBosVRUlSEiYEIvI3EdkjIuujbJ8pIuUistZ5/SZRdYmbvV/Z99yBzevCYwQBP/hqIS2n5b5qESiKkqTE3aGsAzwE3I2d0jIabxpjTktgHdrH1rfs+7AZzevCYwSNNfbdG24RaD8CRVGSk4RZBMaYFcDeRB0/IWx9G/qNg6w+zevCYwQN1fY9LbvlvjrEhKIoSUpXxwiOFJGPROQFERnXpTXx++Dr92D4US3Xh8cIogmBy6NZQ4qiJCWJdA21xRpguDGmSkRmA88CoyMVFJEFwAKAYcOGJaY2uz6CxuoYQtCGReDyaD8CRVGSki6zCIwxFcaYKmd5OeAVkYIoZe83xkw1xkwtLCxMTIW2vm3fw4UgfIiJqDEC7VmsKEpy0mVCICIDRESc5WlOXUq7qj5sfRv6HAS5A1quDx9ioqHKvmvWkKIoPYSEuYZE5HFgJlAgIkXADYAXwBizCJgLXCYiPqAWmGeMiTTSaeIJBKwQHHp6623hWUMNjkUQ3o9Ag8WKoiQpCRMCY8z32th+Nza9tOsp3gB1ZTD86NbbmmYfaytG4Nb5CBRFSUq6OmuoexAtPhDE7Q1JH00y19CyK+Cde7q6FoqidGNUCMB2JMsbAvlRMpJCM4KiBou7qWto0yuw+c2uroWiKN0YFQJjrEUw/CjrBopEaEZQ0DUUMWuoGwpBQ1WzFaMoihIBFYJ9W6BqNww/MnqZ0Ea+odqKgCvs1nXHISaMsSJQX9HVNVEUpRujQlBeZN/7HBS9TIsYQXXrQHF4me6Cv8GKU31lV9dEUZRujApBTYl9z47Yl80SHiMIdws1lelmFkF9Vct3RVGUCKgQVDtCkNWWEIRaBDlRynSzISaCsQG1CBRFiYEKQY3TmTl0xNFwwmME4Z3Jmsp0M9dQUAh8tdrHQVGUqKgQ1JRCRn7zmEKRiCdG0B1dQ8EMJ4AGtQoURYmMCkF1Sez4ALSOEURyDQWHmOiiUTIiEuoSUveQoihRUCGoKYkdH4CwGEFV9GAxdK84QahFoAFjRVGioEJQXQpZfWOXCR1QLqpryG3fu5N7KLQjmVoEiqJEQYWgpgSy2xAClydkGOqaKEIQnLegGwWMNUagKEocpLYQGGODxXG5hnx2uOrGGMFi6F4WgcYIFEWJg5QRgnqfny92V9LoDzSvrCuzDXdcweJGm4YJSRojUCFQFCUyKSME/1q3k5P/tIKtpSGNY3WwD0EbQhBMH402FwGAOziTWXdyDVUBzkB6GixWFCUKKSMEowptyueXxSFC0DS8RBwxgoA/thB0R9dQQxVkO3M8q0WgKEoUUkgIbOP9VagQxDO8BDS7hmIKQdgk992B+irIzAdPpgaLFUWJSsKEQET+JiJ7RGR9lO0iIneKyCYRWSciUxJVF4C8DC8FOel8VRziIolnwDloDhY3TUqTLBaBE9hOz1WLQFGUqCTSIngIOCXG9lnAaOe1ALgvgXUBrFXwVUmoa6g9MQJfyDSVSdSPIC0H0nNUCBRFiUrChMAYswLYG6PIGcDDxvIukC8iAxNVH4CDCrNbWgTVpbah9GbE3jE46UyDYxFEm48Aul+wOC3HsQg0WKwoSmS6MkYwGNgW8rnIWdcKEVkgIqtEZFVxcXGHTziqIId9NY3sq26wK2pK2u5VDM58xG3FCLqha6i+yloD6XlqESiKEpWuFIJIEwRHHLHNGHO/MWaqMWZqYWFhh0/YFDAucZ6Oq+MVgmCMIB4h6Gb9CNKyrVWgwWJFUaLQlUJQBAwN+TwE2JHIE7ZKIa2JY+RRCIkRRJm4HkKEoLu6hlQIFEWJTFcKwTJgvpM9NAMoN8bsTOQJh/bOxOuW5hTS6jiGl4BmiyCZXEMBf/OQ2RosVhQlBp5EHVhEHgdmAgUiUgTcAHgBjDGLgOXAbGATUANcnKi6BPG4XQzrk2UDxsbEN+ActOxH4MlozhAKLwPdRwgaQwLbPg0WK4oSnYQJgTHme21sN8CPE3X+aIwqzLEppA3V4KuLzyIIDkMdbQjqYBno+JSQxkDN3viEKR6CDX96Dvjr7cvXAJ60zjm+oig9hpTpWRxkVGE2W0ur8VU62UfxxAiCT/v1FZE7k8H+9yP44t9w+xio3NWx/cNpcmPlQFqus06tAkVRWpNyQnBQQQ6NfsOe3dvtinhjBAB15dEtgv2dj6D4M/A3wN6vOrZ/OMEsoWCwGKyQKYqihJF6QtDPNuTFu4vsivZYBDGFYD9jBEFLoKKTEqdCA9vpzhzLGjBWFCUCKScEowpso1hW4jS88fQjCPr/68ohLULqKOx/P4Iqpz6d5RoKjRE0WQTqGlIUpTUpJwS9s9PoneWlet9uu6LdFkFO5DL7Ox9BpVOfyk7KoG0aF8npWQxqESiKEpGEZQ11Z0YV5tBYUQzu9OgNeyihQhCpM1lomY66hposggQIgXE6bGvvYkVRIpCaQlCQjewphZy+IJFGuggj2Mg3Rpm4PrRMh2MEjkVQ0VlCEKHzm1oEiqJEIHVcQ1vfgQdPhboKRhXmkOXbhz8zzpz9YIwA4sga6oAQ1Fc2j2NU2UnB4vpQ11AwRqBCoChKa1JHCDzpsHUlrPorowqz6SuVVHl6xbevK8RwiioE+9GPIBggzulvl03EsffaR0OV7QXt9jS7vzRYrChKBFJHCAZPgYNOhLfvZsbQTPpKJZuq2piHIEioELQVI+hIsDgoBAMn2d7Otfvaf4xwggPOAbhcdlktAkVRIpA6QgBw3M+gpoRenz5Gf3cl6/Z52FVe1/Z+LSyCaFlD++EaqnLiA4Mm2/fOCBiHD4ehQ1ErihKF1BKC4UfC8GNg5ULSAzWUmjwWv7Ol7f1axAgS0I8gaBF0phDUV7UULR2KWlGUKKSWEAAc99OmVM2Bg4aw5N2tVNe38RQfd4xAOjbERNUu688vPMR+7ozMoYaq5h7FoEKgKEpUUk8IRs2EwVMBmDH+G1TU+Vi6uij2PvG4hoLlOhQs3m0DxbnOlM2d0bu4oaqlaKXnaLBYUZSIpJ4QiMDM60BcHHTIYUwZls/f3tqMPxAjUyfUNRQtWAwdF4KqXZA7ALwZkNmnc1JIG6rDXEM6b7GiKJFJPSEAGH0SXLsF+o/lkmNHsbW0huUfx3DHxOMaguYpLdtL5S5rEQDkDeoc11CkGEE8weLG2s7r1KYoSlKQmkIAkGH7EHx73ADGDMjltv98TqM/ELlsvELgcnfcNZQ7wC7nDuikrKGwGEG86aMrboVFR0Mgyr1QFKXHkVAhEJFTRORzEdkkIr+IsH2miJSLyFrn9ZtE1icSbpdw7Slj2FJaw+Pvfx25UNxC0AHXUGMt1Jc3WwS5A/dfCIyJECNwgsVtdVbbuRZqSqE8yr1QFKXHkTAhEBE3cA8wCxgLfE9ExkYo+qYxZpLz+m2i6hOLmYcUMn1kH+58ZSNVkTKI4o4ReNufNRQMDDdZBAOhak/Hp7wEO8FNwBfmGsqx63z1sfct2Wjf93zWcv3nL8IfRnROZzdFUboVibQIpgGbjDFfGWMagCeAMxJ4vg4jIvxi1hhKqhp4YEWEGcLaZRG0sx9BsDNZUAjyBgKmeX1HCB1nKEg8Q1E31kKZYwkUb2i57ctXrQjs/Kjj9VIUpVuSSCEYDGwL+VzkrAvnSBH5SEReEJFxCaxPTCYP683sCQN44M2v2FMZ1ts4KATutJbWQThuT/uHmGgaZyhoEQxy1u+Heyg4BHV4PwKIHTDe+xXguI7CLYJdH9v33Z90vF6KonRLEikEkcZ3DndQrwGGG2MOA+4Cno14IJEFIrJKRFYVFxd3bi1D+OnJh+DzG3748OqWLqKgEMSyBoLl2hsjaOUact47QwjCh5iA2BZByRf2Pad/S4sgEFAhUJQeTCKFoAgYGvJ5CNAiQd4YU2GMqXKWlwNeEWk1ZZgx5n5jzFRjzNTCwsKEVXhUYQ53nzeZ9dvL+a+HPqC2wXHzBK2Atiax6YgQVO2y+2X2sZ/zHItgf1I4m+YiyG1eF89Q1MH4wCGzofiL5syhfZsdS0KaBUFRlB5DIoXgA2C0iIwUkTRgHrAstICIDBCxM8OIyDSnPqUJrFObnDxuALefcxgfbNnLjx5dTb3P32wRxAoUQwctAqdXscv5KrIK7HH2p1NZsLEPzxqC2L2LSzZCr6F2pFZfLZRtset3rbPvI4+F4s/2L5CtKEq3I2FCYIzxAT8B/g1sAJ40xnwiIpeKyKVOsbnAehH5CLgTmGdMZwzGv3+cMWkwt3x3Aiu+KOb0u1by/tcRGtZIdNQiCKaOghWEnAH7N8xEpNnJ4rIIvoC+B0PhofZzME6w62N7bRPOthlJpZs6XjdFUbodCZ2q0nH3LA9btyhk+W7g7kTWoaOce8Qw+manc+M/P+GixWv4NAMa3BmkxdopKATVJbDuScjMh0nnxT5R5W7oPbzluryBULEfFkFHgsXG2AZ+0vnNg98Vb4Axs2HnOigcA4Om2PW710O/MR2vn6Io3YqUnLM4Xk4a259jRhfw51c3wDvw/vYGCnZVMGZAXuQd3F7Y9gHcdogVBHFBv0Obh5eORNUuGDqt5brcgVD8eccr3mQRhPUshugWQeVOKyAFoyEjD/KGhFgE6+ykPgXfsH0ldq+HCXM7Xj9FUboVqTvERJxkeN1c+S3bD66WdM6+7x1WbiyJXLjvwdYdM/1S+MHLkF0Iz18dvW+Br8H24g1mCgUJ7V1cXwnrn7Zl46UpRhAqBNmARBeCYKC4YLR97zfGWgSVu22fhgETwJNmrQXNHFKUHoUKQTy4XIBw1KHDGdw7k4sefJ/7Xv+SusawBn7OnfDTL+DbN8PQI+Dbv4MdH8Kqv0U+bnhnsiB5A6G+wu5311RYejG8d1/89W2ottaIN7N5nYgzAmmUYHEwdbTgG/a9cIwVh51r7eeBE+17/3Gwa338dVEUpdujQhAvbi/ZOXn849IjOWFMP/7w4meccOvr/P2Dr/GFDlYnId0nxp8FI4+HV/7HDhsRTlAIcsItAieF9PmrbTrp4MPh7bugoSa+ugaHoJawrhzpMQaeK91k9wnOidDvUDt/8gYn0WvABPvef5zNaKrZG19dFEXp9qgQxMvU/4JvnEJuhpcH5k/lsR9Op39eBtc+9TFH3vIqNzy3nvc37yUQOq+BCJx6m03FfP5qO4RDKE2dyfq3XD/8SBh2JJxxL1zyCpz8v1BdDKsfil6/xrrmAeUaKiNnOKXnwt4vYc3D8NIN8PHS5m3BjKGgeBQ6weBPl0H+8KbRWuk/3r6re0hRegwaLI6XWX9o8fGogwp45vK+vLJhD0+tKeKJD7ax+J2tDOuTxQ+PHcnZU4eS4XVbn/sJv4KXb4B7psPs/4ODvwVb34JVf7UHC7cI8ofBf73Y/Hn4UTDiWHjrDitI3oyW5bd9AI+eBdN+CCde33pSmiBZBbB1JXz9jv3s8sLAw2wdSzZa8QkSzByqr4BRxzevbxKC9bZfgaIoSY9aBPuBiHDS2P7cd8HhrLn+W9wxbxJ9stO4/rlPOPqWV7ntP5+zYWcF5ugr4cLn7bzEj50Dt30DFp9mG/Dpl7WOEUTiuJ/ZDKMPH2m5fseHVgQaKuGthbZHcH1VZIvgzHvggqfhyo/gms9tB7kXrrUup/JtzYFisNZDL6dj+IDDmtfn9LOCsns/4gTl29seBVVpk2XLlnHLLbck9Bw5OfaBYseOHcydGzlTbObMmaxatSrmcRYuXEhNTbNrc/bs2ZSVle13/W688UZuvfXW/T5OqqMWQSeRne7hjEmDmXPYIN7bvJdFb3zJ3a9t4q5XNzGibxbHfaOQERMe4ejiv9O/cj21M2bjG30avfJ7kRfuy4/EyONg6HRYudAOAZHVx/r1Hz4TMnvBhc/B4jPgxV9AY01zv4FQeo+wryAnXGfLv32X/RwqBGDdQ+XbmuMDYF1HA8Z33DW08SV44jzbJ2H+sy0D2kq7mDNnDnPmzDkg5xo0aBBLly5tu2AUFi5cyAUXXEBWlu2dv3z58jb2UA4kahF0MiLCjFF9eejiabz/y5P43XcmMLRPFk+v2c5vX9jEt1cdzqTPL+TIfxVy7ML3mPzbl7hk8Spe2bC7ZdC59YHh+J9DRRH8aSzcPAAWHWOf/C/8p+2rcMJ18OUrsH1N272gAY64xDb2bzhPlX3DhCDYaSxUCMC6h/ZsaD3UxL4t8NQPYfenkc8XFIG8wbDtPVj6g5bHqCtvHUdJQbZs2cKYMWO45JJLGD9+POeffz4vv/wyRx99NKNHj+b9998H4KGHHuInP/kJABdddBFXXHEFRx11FKNGjWrZaH/6HKx9nGuvvZZ77723afWNN97IbbfdRlVVFSeeeCJTpkxhwoQJPPfUP2Dr2zZ1OKRO48dbt2BtbS3zzj6LiYeO5txzzqa2tvk7u+yyy5g6dSrjxo3jhhtuAODOO+9kx44dnHDCCZxwwgkAjBgxgpISm4Z9++23M378eMaPH8/ChQubznfoQUP54ZyjGDduHCeffHKL80Ri7dq1zJgxg4kTJ/Kd73yHffv2NZ1/7NixTJw4kXnz5sGOD3nj1ZeYNGkSkyZNYvLkyVRWHoD5vAN+2L7a/g8+XgprHoGv32vu99OFqEWQQApz0zlv+jDOmz4MYwzltY1s21vL7oo66nx+6hoDbNxTyVOrt/Pyht30zvIyrG82A/LSGdgrk9H9cxgzII9DBuSSk+6Bg0+yLqbSjVBbZrN6Jp3X/JR/xCU2oFz8WdsD5IHtADfrD/DwGYBA34Nabj/iEhso7hU2eviACfbcK/4Ix19rp+jc/Sk88h3rvtr2Hix43VotQTa+DE+cb4Vn/nP2j/DCz+Bf/21jG+/eBx//wwalZ98KY89onfXUEUo2wdpHoeAQGHEM5A9te59EsPcr2LISJp4LnvQ2i2/atIl//OMf3H///RxxxBE89thjrFy5kmXLlvG73/2OZ599ttU+O3fuZOXKlXz22WfMmTPHunLWPQlPLwAM80ZfzFWP/J3LL78cgCeffJIXX3yRjIwMnnnmGfLy8igp2syMw8cx51IPImKty0fnQk2mzXx7+Sbue+AxsjZtYd25Gayr+4QpTzd3frz55pvp06cPfr+fE7/5TdY9ej1XzP0ut98+iNdee42CgpZjSq5evZoHH3yQ9957D2MM06dP5/hjj6X354+xcXMRj39rHw9c8TPOuf8TnnrqKS644ILWN8tJkpg/fz533XUXxx9/PL/5zW+46aabWLhwIbfccgubN28mfdcaypb9Cu6fya3PpnPP7Q9z9DdPoaqqioyMjJbH2/aetar7RxkZf/en8OatdnDIcd+xGYLZfaN/oZtXwL9/GWXQRoE+I8GTiR2gWeyxcgfZVPLcQdZ9nDvQ/tdzOn/gTRWCA4SIkJ+VRn5WGhPo1WLbT08+hFc27OGVDbvZVVHH5pJq3tpU2mIo7FGF2Uwaks+EIUMYkHcwvXp7yc9MY1B6Br2MsX9atxdO+b1tkOOxCABGzYTxc6Hk89Zumt4jbCMdzrjvwKZX4I0/2B/4jMtg2RU2BnLGvfD8VfCPC+GCZ2x/hnfuhld+a1NS5z9nBWL6Aisab94GaxbbeMXk78P2VXbfMafBtAVQV2aH7PBkwJAjrPtKxP5Za/fZsY8ixVgCfnjnHnjtZitaQfKH2+D7sBkw7Kjm47VF2Tb4+EnbGHqzIC0L+k+A0Sc3DxgYjY+Xwj+vtD23V/7JSRg4qXU5X729r66RjBw5kgkTrCU2btw4TjzxRESECRMmsGXLFucaA1ZgVj8EFds588QTcPlqGTt2LLt374bPX4BnLrUCmDeYyeseZM+WNHZs305xSQm9e/dm2LBhNDY28stf/pIVb7yGq+xrtu+tZff0PzCgdw784UpH3HdC7V5Y+SdWfO7higvOgxNPZOKbtzOxEFh+LfS9gSdfWM/9f/kLvrpqdm77ik+f/YCJmxdBpP6QgQArX3mB75x0FNl7PwVvJt895XjevOtHzMn/nJEDejFp9nxYeTuH9z3eXnfAbydJ+uJF2/v+7XdA6ijv9SZle7Zz/GEjIeDnwgsv5Oyzz4by7UwcUcD5xx7EmUNKOfPwIXDkTzj6rYX89w/O5vzLruW7513EkCFDbJ2KVtvEji1v2s+jvw3HXmMt7vJtUPqlfbD49Dk7um/+UPtA8+/rnBEEBIwzUGVOP9t4l31t69trKMy52z4MZfSy85cUf24ne9qzoXmcMmNsluDWt2zH0tDxy476fzaLsJNRIegGeN0uThk/gFPGNzdoxhi2l9Xy2c5KPt1Zwbqict7cVMLTH25vtX9uuofBvTNxu4TaRheneX7Axg2HUrz9bfpkpzGqMIcpw/KZMrw3vTK9lFTVU1xZT7rHzcH9cnB/58/tGyzPkw5nPQCjvwX/ugaenA+9R1qff9A6ee5y+NfV9k/w1etw6Okw5y7I7N18nG9ebxtVtxemzLfb/D4rHK//Hj57vvW5M3tb11LZ1zajCaDPKNtfY9AkG/iu3ee4yFbDIafCqbfafg9bVto/+MaX4KPH7b79J8DhF8LEc+z4Tp/9y253ex1raIjNstq8AjCQ3gsaq5vvV59RMONym31V9AFse9/Wa8AEGDDRnnP1gzBkGkz/kb2uR8+yQjfzF81utz0bHLfax+AfQDoNtkEQwSVCemM5+OpxuVz4fD7YuxnevgM2bYB/vgVf1ZLueQtKb4eh0zC+enjyQluv7z3edJ/nvvoAS391Jrt8ucw75iD47F8seeZlir/8iNWX9cFbspsRf86ibuw5MGIEuH8Ol66ELVvgudPg+g9h7dnI4fNh8gkw4Ry45yDY/QmbF57KrUvq+WDh9+m9+Z9c9FwGdYfNh+HboWYZ/PvXcPgc+Oo128Dddgjmo1qoNfDXJ+x9+KAOst1wxq9If/lxOO1PUF+B++0nqN23E+54wjbIabnWddlnFGRnW7dk7T5YOME+fNTmwZ498Kex/Oskw4rduSzbdwT/s3gXn1x7E7846Jucesc8lr95DzP+74+8/JvZjMmptFl12YUw64/2e3znXvjbyfaYxnHdpuXa5I0Zl9uHml3r7e9p50fWOnZ57ANKyUb7uzHAiTfYB6bwh60+o+CQWdH/a4GAHX2gcodNN+81pM2/Z0dQIeimiAhDemcxpHcWJ421/QyMMRRX1VNa1UBZTSNlNQ1sL6tl294atpfVYgxkpLnZ4b0QV6MfT1U9m0uqee3zPSzyRx7UNTvNzcQh+RzcL4d0j4t0r4usNA+FOekU5qbTK8vbdO40t5uRhdnWTQW28Rw63T6RTv9R85P55PPt+ETvLbLm7ul3wJQLWz95i8BxP225zu2BY66ypnbpJsgusFlK9RW2kd32nn1aGn6UbahFYPOb9ql79YPBA1uxOOuv9jgitmPegPEw41JngL0vbYO05mFY/lObPWWcnuLBwfU2vWyfhvOHw8zr4LB5zQMENtbB58utaC0PuYZeQ+1gg+/eZxsDgKOvgm/+2orLoafb4PzKhVboDjrRWjpvLbTuvFNugZfuh/JNsPh0u//616D2H7DtRsgYaxuE+46CsnqbVnzVQ/DJZXDkOBiXBpvfsDPl9T0ILniqOXHg9DuZt7uRH968mJKqRt64KAueeI7yd+vptzeAtzSf10b8nK07ro3+w3R7Oe6441iyZAknnHAC6z/7gnVf7oSHXqdi+7tkP/O/9Nr4NLsHHM8LX7/FzKFHwPl3kHvDICrfX0LBRkeUXB6YvoDjxnm56OZH+cV378I01PDMoz/lkXv/CN84EnjcNqzfuR+eXm0HP+w7yz4RHzLbDnlSdCPk5NDrmmvo/fChvDlwDseOzuORB/7J8YflEDhpAdvSx3DC1JM5xufjsSFDqKqqolRGMOHaF5nw9/N5Z9NePvvwbcbMGGW/5yN/3HzPZlwOHy6xnT/7HmQfePqPs+NxBRkwHgbcHP2eOYLeIVwu6wrKKbSiniBUCJIIEaFfbgb9cjPaLhxCXaOfj7eX8+HX+6hp8NMvN4PC3HQq6xpZu62MD78uY9lHO2jwBWj0B/AFIotGkEG9MhhRkE2G143HJaR5TqfPqyUU5FTSNyeN7DQPGYN+zEGT+1A1dCYUfIOMXZWIgD9gMAZ6ZXrpl5dOuscd+ST5Q8P8+QNt34Yp329d9sgfW0uiYrv9g6b3iu2uEYGCg+1r2g9tCu76p601c8hsZ95oB1+9naI0/I/szYDx37VusqJVVjAGT23e19dgYzUud0s/syfdit8Rl9h+JO8ustbL6JPhjHusO6HwJHjweCtWuQMgfwRMOQ4m94HVr9gn3xHfhd5Hwqdf2fuUXWCHNTnZSfG8Jsc+ybtC7q/LxbgFf6byrrcZPLIPA3/1ENSVcf7cMk6/6CqmPgOTpnzBmDGxR5a97LLLuPjii5k4cSKTJk1i2rRp4M3gsLk/ZfLz6xn35HuMGtXI0cc4/UzcHhb89/XMuuM2Bhb24bU334EHDoHjfsaUggIuKunDtPOuA+CSn1zD5JO/1+z+AtvgT/4+jNgD86OkioqweMkTXHrppdTU1DBq1CgefPRB/Dk5XHDCCZSX/xRjDFdffTX5+flcf/31vPbaa7jd6Yyd9F1m3fcQpEeI3aRlWzfm/tAZsa4EI91g+P92MXXqVNNWzrKyf9Q1+imurKe4qp7ymkZErAjVNvj5qqSKjbur+HpvTZNwNPgClFY3UF7bzvmagYKcNLLSmp9H0jwuctI95GZ4moTG7RKy0tz0zUmnb7aNs2R4XaR73GQ4Fkx2ups0t4vaRj81DX4afIGmbZleNy4RRMDtEvIyvWSnuZHu8AdtrLOWT/9x8TcYAX/LBl5R4kBEVhtjpkbaphaB0ooMr5uhfbIY2qeNGdnCaPAF2FvdQG2jn7qmV4C6Rj+1zgB9LhFcAmW1jewqr2NneV3T4H3GGBr8ASrrfFTW+SiurCdgDL6AobreR2lVQ5vWSrx43TZ4n+l1N7nE8jK89M5KIz/LS06GFZBMrxtfwFBV76OqzkeG10X/vAz652WQne7G5zf4A4aaBj9ltdZdV13vJ2AMAWNwiRWeXplectKtILldgs9vY0Dby2opqaonL2MtfbLT6JNtz5+flUZ+ppfcDCuK2ekevG4XbhFcLqG2oZHKukYq6nykuV3kZXrIzbDncbu6gcApSYUKgdJppHlcDOjVPrdVewim4JbXNlLvC1DfGHAsAF+IFeBusg7qfAFq6n3UNvoJGGzjHLDH2OfEWOoa/TT4A9Q1BqiobWTDrgrKahqpqvfR4Gvu1+F1C9npHmob/NT7ovf3EIEsrxu3yzbYfr+hsj5yIF4E+udmUJCbxuaSavZWN1BZt3/TgLoE+uak0y83nQyvG3/ACpUVJnsP0z1WzAb0yiArzUNZTQOl1fZeZKd5yMnwkJPuISvNTXa6FUSvW3C7XHjc0mSxZaV5qKxrZF+NjVmle9zOvtbaCgTsOT1uIcPjJt1rhSwo5TnpHvrnpZOb4W2qf6M/gM9vnPNJ97DaUgAVAiVpCE3BPRD4A4baRj9etzTFMowxVNT62FVRR22jH49Lmhq63llp5GZ4cIU9kfsDhqo6H1UNPgJOw+x2Cf3zMkjztIxlNPgCjtjZxrWy3lpHVXU+fIFAU8OelWYb45wMDz6/oaK2kYq6RvZWN7Cnop49lXU0+AO4XS7c4lhiLmuN1TT42VJazbtflVLb6Kd3lrVEMtPc7Kmop6reR2VdIzUN/k6zwGKRneYmzeOi2hHzUDwuceoOgnXvCeD1uOibnUZBTjr5WV4a/YZ6n59GvyHT6yYn3UNmmmPteezx0zwu0tyCx+2ipsFPRW0jlXU++mTb/jvD+2SRleaIpzHsLKtj454qNu2pREQ4qDCHUYXZ9M/LaHJZpntcjtXmJcPjxm/s9wOQ4XU1uTfrfQFqG/zUNPopr7EPM7WNPgpy0hnQK4OC7PRWv5ughex1uVpt62wSKgQicgpwB+AG/mKMuSVsuzjbZwM1wEXGmDWJrJOixIvbJc0ZUg4iQq8sb1M2VbzHiXefNI+LwlybsdUdaHAaMF/AJhE0+AKOUPiobvCRl+GhT3Y6vTK9Tduq6n0Yxy3mEqExYK23Op+f0JhkZZ2PXeV17Kqoo9EfIDvdQ06aB4/bhc/fnLgQtGQCxiYaGKDe56e0qoESJzMuzeMiw2MtsbLaRraX1VJT76PB33zuxpDMORFrkeSkeyitbmglQEG8bmFkQTbGwOuf72lxjM7E4xLrpvS68Dqxrup6H41+g0toci9eMH04PzxuVOefv9OP6CAibuAe4FtAEfCBiCwzxoSOPzALGO28pgP3Oe+KonQDgk/SPQHjxJsa/QEyPO6mp+xAwLC7so6vS2uo9wWsW0+Ewtw0hvfNxuu21+/zByjaV0tpdQP+gMHnCFylY0HVNQZwC7jdLjCmKT7W6A+QkeZuijn1chr1jDQ3JZX17KqoY3dFHbUNAep91irKTLNWTdAdGXSJJuoBIZEWwTRgkzHmKwAReQI4AwgVgjOAh419THhXRPJFZKAxZmcC66UoSgoiInjd0tSwB3G5hIG9MhnYK/YAiB63ixEF2YwoiLPXfhKRSKkfDGwL+VzkrGtvGURkgYisEpFVxcXFnV5RRVGUVCaRQhApuhHuYIunDMaY+40xU40xUwsLO3/AJUVRlFQmkUJQBIR2DR0C7OhAGUVRFCWBJFIIPgBGi8hIEUkD5gHLwsosA+aLZQZQrvEBRVGUA0vCgsXGGJ+I/AT4NzZ99G/GmE9E5FJn+yJgOTZ1dBM2ffTiRNVHURRFiUxC+xEYY5ZjG/vQdYtClg3w40TWQVEURYlNz0gQVhRFUTqMCoGiKEqKk3TDUItIMbC1g7sXACWdWJ1kIRWvOxWvGVLzulPxmqH91z3cGBMx/z7phGB/EJFV0cbj7smk4nWn4jVDal53Kl4zdO51q2tIURQlxVEhUBRFSXFSTQju7+oKdBGpeN2peM2QmteditcMnXjdKRUjUBRFUVqTahaBoiiKEoYKgaIoSoqTMkIgIqeIyOcisklEftHV9UkEIjJURF4TkQ0i8omIXOms7yMiL4nIRue9d1fXtbMREbeIfCgizzufU+Ga80VkqYh85nznR6bIdV/t/L7Xi8jjIpLR065bRP4mIntEZH3IuqjXKCLXOW3b5yLy7faeLyWEIGTazFnAWOB7IjK2a2uVEHzANcaYQ4EZwI+d6/wF8IoxZjTwivO5p3ElsCHkcypc8x3Ai8aYMcBh2Ovv0dctIoOBK4Cpxpjx2AEt59Hzrvsh4JSwdRGv0fmPzwPGOfvc67R5cZMSQkDItJnGmAYgOG1mj8IYs9MYs8ZZrsQ2DIOx17rYKbYYOLNLKpggRGQIcCrwl5DVPf2a84DjgL8CGGMajDFl9PDrdvAAmSLiAbKwc5j0qOs2xqwA9oatjnaNZwBPGGPqjTGbsaM5T2vP+VJFCOKaErMnISIjgMnAe0D/4DwPznu/LqxaIlgI/BwIhKzr6dc8CigGHnRcYn8RkWx6+HUbY7YDtwJfAzuxc5j8hx5+3Q7RrnG/27dUEYK4psTsKYhIDvAUcJUxpqKr65NIROQ0YI8xZnVX1+UA4wGmAPcZYyYD1SS/O6RNHL/4GcBIYBCQLSIXdG2tupz9bt9SRQhSZkpMEfFiRWCJMeZpZ/VuERnobB8I7Omq+iWAo4E5IrIF6/L7pog8Ss++ZrC/6SJjzHvO56VYYejp130SsNkYU2yMaQSeBo6i5183RL/G/W7fUkUI4pk2M+kREcH6jDcYY24P2bQMuNBZvhB47kDXLVEYY64zxgwxxozAfq+vGmMuoAdfM4AxZhewTUQOcVadCHxKD79urEtohohkOb/3E7GxsJ5+3RD9GpcB80QkXURGAqOB99t1ZGNMSrywU2J+AXwJ/Kqr65OgazwGaxKuA9Y6r9lAX2yWwUbnvU9X1zVB1z8TeN5Z7vHXDEwCVjnf97NA7xS57puAz4D1wCNAek+7buBxbAykEfvE/4NY1wj8ymnbPgdmtfd8OsSEoihKipMqriFFURQlCioEiqIoKY4KgaIoSoqjQqAoipLiqBAoiqKkOCoEinIAEZGZwRFSFaW7oEKgKIqS4qgQKEoEROQCEXlfRNaKyJ+d+Q6qROQ2EVkjIq+ISKFTdpKIvCsi60TkmeA48SJysIi8LCIfOfsc5Bw+J2QegSVOD1lF6TJUCBQlDBE5FDgXONoYMwnwA+cD2cAaY8wU4A3gBmeXh4FrjTETgY9D1i8B7jHGHIYdD2ens34ycBV2boxR2PGSFKXL8HR1BRSlG3IicDjwgfOwnokd4CsA/N0p8yjwtIj0AvKNMW846xcD/xCRXGCwMeYZAGNMHYBzvPeNMUXO57XACGBlwq9KUaKgQqAorRFgsTHmuhYrRa4PKxdrfJZY7p76kGU/+j9Uuhh1DSlKa14B5opIP2iaK3Y49v8y1ylzHrDSGFMO7BORY5313wfeMHYeiCIROdM5RrqIZB3Ii1CUeNEnEUUJwxjzqYj8GviPiLiwI0D+GDv5yzgRWQ2UY+MIYIcEXuQ09F8BFzvrvw/8WUR+6xzj7AN4GYoSNzr6qKLEiYhUGWNyuroeitLZqGtIURQlxVGLQFEUJcVRi0BRFCXFUSFQFEVJcVQIFEVRUhwVAkVRlBRHhUBRFCXF+f9BxyCWqVHPoQAAAABJRU5ErkJggg==\n",
+      "text/plain": [
+       "<Figure size 432x288 with 1 Axes>"
+      ]
+     },
+     "metadata": {
+      "needs_background": "light"
+     },
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "y_v = min(loss_valid_list)\n",
+    "x_v = loss_valid_list.index(y_v)+1\n",
+    "plt.plot(loss_train_list)\n",
+    "plt.plot(loss_valid_list)\n",
+    "plt.annotate(\"min validation loss\",(x_v,y_v))\n",
+    "plt.title('Training and Validation Loss during Model Training')\n",
+    "plt.ylabel('loss')\n",
+    "plt.xlabel('epoch')\n",
+    "plt.legend(['train', 'valid','minimum'], loc='upper left')\n",
+    "plt.show()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 22,
+   "id": "76657782",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "image/png": "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LnLSU8hJ93SxPsCK1/qqRgqzUsnPTO3V/Q9nY3YqaSkuxuZncO7pp/T4PDU1Ndx8883t4jB27NhBJww+n4+UlP5tvoe0OMR7wh8osrKy2t+/8sorvPDCC7z99ttkZmYyd+7ciGMV0tI6/Ilut5vm5uYBKetgJ9jbo7bZy/jCTHLTo48eb27z89qaSv67aisvf1GB2yWMzbcN9IaqRr7c1vXpMzPVzaicNEblpFOQldo+QMftEtI8btJSXHxd2ch1//mc/332C/YYlc267Y20hgQSi7LTGJWTxuryOirrW2P6wgHyMz2U5GcweUwO86eNZkJBFsX56YzOSWdkThr1LV7WVzXydWUjAWMozEqjIDuVvAwP2WkpZKa6KcxKIyO1qwskEDC4XB1dovebWABY6/fII4/k4IMP5p133mHvvffmnHPO4eqrr6aiooL77ruP2bNn895773HZZZfR3NxMRkYGd955J5MnT+bGG29k1apV3HHHHXzyySecdtppvPfee2RmZrZfa//99+eOO+5g2jT7P507dy5/+tOf8Pv9Ec8Zyl133cXy5cu56aabWLduHaeffjo+n48jj+zI2NPQ0MAJJ5xAdXU1Xq+X3//+95xwwgmd3L7z58/n4osvbrf0W1pauPDCC1m+fDkpKSnceOONfOtb3+Kuu+7iiSeeoKmpibVr13LiiSdyww03dLmfv/3tb3nyySdpbm7moIMO4tZbb0VE+Oqrr/jhD39IZWUlbrebhx9+mN12240bbriBe+65B5fLxVFHHcX111/P3Llz+eMf/0hpaSnbt2+ntLSU9evXc9ddd/H000/T0tJCY2MjTzzxRMT6Adx999388Y9/RESYMWMGN998MzNmzODLL78MZlRwich67HzUEX15Q1ockkVOTg719fURP6utrWXEiBFkZmby+eef884770TcT4mMMYbKhlY2VDWxfnsjG6qa2LCjiY1VjZRVN1MV1ttjdG4aEwutOLf4ArR6/dS3+Khr8dLQ6sMYyMvwMG/KKNI8LrbUtLChqpExeRmcMLOEA3YtYEJhlg2Qprg6+aFj8VVFPQ+vKOPz8noO3r2IKcW5TBmTw8SiLLLTOv52Pn+AbfWtbK62FsLWuhZGZKYyJi+d4rx0xuZnxBQ4gJE5aew6MpvDpnTzZkInYehSh6++4uGHH+a2225jv/324/777+eNN97giSee4LrrruOxxx5jypQpvPbaa6SkpPDCCy/wi1/8gkceeYTLLruMuXPn8uijj3Lttddy6623dhIGgIULF7J06VIWL15MeXk5W7ZsYdasWdTV1UU8ZzQuvfRSLrzwQs4++2z+8Y9/tG9PT0/n0UcfJTc3l+3bt3PAAQdw/PHHc/3117Nq1SpWrlwJ0MkqDx7/ySef8Pnnn3P44Yfz5ZdfArBy5Uo+/PBD0tLSmDx5Mpdccgm77BI6PAt+9KMf8Zvf/AaAs846i6eeeorjjjuOM844gyuvvJITTzyRlpYWAoEAzzzzDI899hjvvvsumZmZ7NixI+739fbbb/Pxxx9TUFCAz+eLWL/Vq1dz7bXX8uabb1JUVMSOHTvIyclh7ty5PP300yxYsACgAHgkmjCAikO/UFhYyJw5c5g+fToZGRmMHj26/bMjjzySW265hRkzZjB58mQOOOCAJJY0uRhjqGvx8eW2ej7aVMNHZbXsaGzF7XKR4nTv8zk9ORpafVTWt1JR34LX3/Go7XYJJfnW7334tDzrpslNJzs9hQ1VTU4PlkZcIuRleEjLSSM33UNuRgp5GR72m1jA7EkFeBJs9BNl91E5XHVU/FhQittFSX4GJfkZzJ5U0Kdl6C2TJk1ir732AmDatGnMmzcPEWGvvfZqb1Bra2tZtGgRa9asQUTwem1b43K5uOuuu5gxYwY/+MEPmDNnTpfzn3rqqcyfP5/FixezdOlSTjnllJjnjMabb77ZLh5nnXUWV1xxBWB/X7/4xS947bXXcLlcbN68mW3btsU81xtvvMEll1wCwJQpU5gwYUK7OMybN4+8vDwApk6dyoYNG7qIw8svv8wNN9xAU1MTO3bsYNq0acydO5fNmzdz4oknAla0AF544QXOOeecdtEsKIj//c+fP799v2j1e+mllzj55JMpKirqdN7zzz+fG264ISgORcCdsa6l4tBP3H///RG3p6Wl8cwzz0T8LPiHKyoq6tQN9mc/+1mfl68/qahr4ZUvK3nzq+3UNHlp8wVo89veLsbYxr622UtlfWsnd0tJfgZj8tLxBfz4AwECAfC4hRS3i+y0FHYtymJUbjpjctOYWJTFxMIsSkZk9HnDrlhCXZsul6t93eVy4fPZoPOvf/1rvvWtb/Hoo4+yfv165s6d237MmjVryM7OZsuWyMkOSkpKKCws5OOPP+ahhx7i1ltvjXvOaETKFnDfffdRWVnJihUr8Hg8TJw4MW66mVgddMJdvcF7EKSlpYWLLrqI5cuXs8suu3DNNdfQ0tIS9ZzGmIjlTklJIRAItJ8zlFAXdbT6RTvvnDlzWL9+Pa+++irYzkiruuwUWo5YHypKJLY3tPJxWQ0fbKjhg43VrC6vI8UlZKam4HYJ67Y3AjAqJ43i/AxS3UK6x4Xb5cItto/6N0bnMDInjZHZtqHfe5c8RuWkJ7lmcfD7bDcbVz91X6zZBB/cDaXnQm4Cg5u8LfD+7TCuFMb3wgI1Bl7/E3yyDI78A+z2rYQPra2tpaTEdrG86667Om2/9NJLee211/jRj37EsmXLOPnkk7scv3DhQm644QZqa2vbrZRo54zGnDlzePDBBznzzDO57777OpVh1KhReDweXn75ZTZssJOfRXT7Bnyw5DgO8XzGff/3Pxy269/4srKNjevWMjm9mg8at3e9cN0WKP8IivcGOhryoq2v0fD0PSy7/S1Onj2O3P9uYFyum8duvpoFZ11Ia+oI/H4/hx9+OL/97W85/fTT291KBQUFTJw4kRUrVjB71j4s+8dvIRDZcopWv3nz5nHiiSdy+eWXU1hY2H5egLPPPpvTTjsNIEKFOqPioESltsnL6vI6NlQ1sr6qibWVDazaXEt5rf0TuF3CnsU5HDW9GJdAU5ufFq+fU0rHMfcbo9izOGdo5H8yBj79N/z3l5AxAhbeDwURMuEaA+vfgJoNMHUBpGUndn6/D967FV66FryNsPpxOOcZyHJ6sG14Gx5eBKP2hAMugt3nw/rX4anLYcdayBoJF78HmVHcEq0NYAKQnhvh2l54+idWlNLz4J4FcNAlsOtZCRX95z//OYsWLeLGG2/ksMMOa99++eWXc9F5i/hG3Rv863+v4lunfJ9DDjmEUaOcRMwrH4CvX+HkwnQuffABfn3WYfDoD2HHOn6+6yYWXXQmN15xHofNjtCpZPMH8NZNsLkNXv8Tf73oKE7/5f/y1xv/j5NOPgUwUPEZZ8yZyHG3/43SPR5mZkk6U8YVwJrnKDzoO+1u36OOOoqLT50P1ethcz0XzZvCD295g732P4QUF9x1eDpp9x8PK9ugfjR8dDB4MqFsOfz7ZfggBaaeAEdcR37mCL5/6C7sdcRZTByZzX4TcsDbBFs+4J55Vfzg/67lN4t/jyctnYevOYsjv3kyK487jtLSUlJTUzn66KO57rrr+NlPLufUBUdzzw0/47BdfFDnhYfPgdrd7W+spRYat3PGMYdw3FkPUlpaysyZM5kyxQadpk2bxi9/+UsOPfRQ3G43++yzT7vInnHGGfzqV78CiBvgGNLjHIYD3a2vP2B4fvU2lry1ni21zZROKGD/SQWML8xkc3UzG3dYEfhkc22nvu8etzC+IJPpJXlMH2tHaO69Sx6ZqQk+X7TWQ2q2ffLub1rq4OOHoOor2LEOmnfAibdC4W7Rj6nfCpveg60fw7ZPITULRk6GEZPggyWw7jUYvRfUbrJ1OPVumHSIPdYY+PplePUG2OhMQZKeD7MvgL1OgYZtsONr8LfBjO92bqQ3r4CnfgLlK2GPI2DGqfD4xTByCix6Eta+CP/+AeSMsQ15/RbIGWuXIybBQT+CZ66A6SfDd27tOK/fC1+9CJ8shc//A1lF8IPXOgtIaz08/D346gU45H/g4MvhuV/D8n/BmBlw2oOQF2Xg1apH7HXT86F4BozZCzIKIMVxvXzxH3vdgBfyxsOFb1jxAVj/Jtx1jBVaX4ttQAFyS2ydMgts+ZuqoOw9OOUumGb99QQCcPthsH0NeDKgsTLuz4G0XBgxAarWdlxr5BSYMAeK9oCXr7Pf9+lLbV1aamHd63aZlmNFfvMH8OG9UL2uo6yzvme/+zduBHFB9mgrMt/8Kcy9Ctwh/42WOvu72rwc1r4MG960dd/zOFhwS8eDxOYP4IlLYNsq+3s75Gf2N/nubdBWD+5U+zsCmH4SnHxH/PqHsGzZMh5//HHuvffeuOMcVBwGOYnWt7K+lUc+KOPedzZQVt1MSX4GexbnsmLDDqqbOsxWERibl8GMcXnsNc4KwaSiLMbmZ+CO0bMlJo1VcFOp/eN9977En6iDfPqofSKfe5Vt5IIE/NBc0/GEDfZP/dhFULsRPFn2CX/HOth1LpwWOQ7EB3fD0z+1fzpxQeEe4G225wDbqB32a+vuqV4PD5xmhWfKMVBfbs/ftN02GAdfDqOnwdv/gM+f6nqtzCKYe6V92nz5OlhxF2SPgiOvtw2gCHz5X3jwdBgx0TZou8y2DXVajrUqPnoAimfahsOTYS2O126A0x+GbxwOWz6ER74PVWtsgz35aCuWu38bTnvAXqOtEe75DpS9D8f+GWYt6ijj5/+BR39gG9UzH4FRId2g/D548Rp46+8wdl/IKbaNV+2msHoWwoyFMHamtQimfwdOut02krfMAXHDD9+wv4W2JnvfPWFuxYAfbvmmtaYufh9SUq3r65HzbIM68zQrcNUb7PdQt9mKRVqe/U1kjbTfZc4YW2dfmxXh9a9bgdr0LrQ1wKipcMbDkDcu6k8QsEKw8W1b3l3ndjT+1Rvgv7+ALSvhhJsSc8t5W+C92+CFq+31T70bPl4Kr/2fFZkjfg9TTwSXE09r2mF/Ky219j+QWQRF34Bxs+Jfy+GSSy7hmWee4T//+Q+TJ09WcRjqfPbZZxSUTOKh9zexanMtG3fYdAc56R6mjbV5Xr6qaOD51dvwBQyzJxVw7pyJfHvP0aS4XQQCpn3Q07gRGZSMyOh5SoAdX8P9C2Heb2DPYzu2//eX8M7NgMDYfewfMZoLJJyKz+C2ufYpK7MQjv4/mHKsbSDf+rttpAt3h90Os66T92+Hgl3hhJutH14EXvsjvPQ7OOdZmHBgx7l9rfbpd8Wd9s9+2K9tw+5x0pS0Ntjz54/vXN6WWnjyUvvUP2KifdodV2qtgpSOoCWVX9oGKG+cLVNjJTx/NWx4w94LccH+P7RiEe7y+WQZPHI+TD3eWj3BMkXC1wq3HmIbylnnwKvXQ9YoOOp/YfJR4PbAO7fAs1fAEddZkbv/VCu4J98J0xZ0PWf5x3DfyfbcC++zQrH1Y/joQdu47nc+HPEH22AH70lrvd3f77X1DX726g3w8rVw4m322JX32e9i/P7xv/+vXoB7T7LXKj0XbtoPMvLggtc6Gs6e4vfB9i9sWWPd30QxpvuW8VcvwMPnQmsdYOxv6Kj/tVZVP5LICGkVh0FKwBia2/ys/ORTFv17M35j2G1kNhMKMtmlIJPaZi+rNteytrKB/MxUTtq3hO/uN57dR3XzqT3hAgXg7uPtnz+z0PrAs4ps0O6vM60JPOUYWHaObczPetQ+0cXC2wK3z7Mun5P/BS8shi0fQGqONbGL94Ypx1nXw/o3rMtgv+/D/MXWTRCkrQn+vq9tpM973v6B67fCQ2fZY+dcCof9prMboL8wxloGX70ApedYMYpGQ6W9h4k0OGXL4V/zrUBOPQGO/UtnQTMGHjoTvnwWSkqtaJ14K+z93ejnrF4P95xoRT9IWq4NWu/TNZVLVAJ+60ba8qEV+YN/At++OvHj7znRultKz7UunLMft2I+VNi+Bl64xroUp54wIJdMRBwwxgza16xZs0w4q1ev7rJtZycrK8sYY8zmzZvNSSedFHGfQw891Lz19jtmS02TWbOt3nxcVmM+2lRtXnhrhVn8xKdm/faGiMe1bFhh2sq7cU8qPjfm7Zu7XQfz/r+MuTrXmGd/YcziQmMePtduf/Iyu75jnV1f+4oxvy825r5Tu55j+Z32+Iov7PozV9pzfvGsXfd5jXnzb8Ys/Z4xX71kTCDQcay3xZjaLdHLt2KJPdenjxlTtsKYP04x5vdjjFn17+7XdWdl5YPGfPxw5/sSStMOY/483d6H9+9I7JwNlca88Rd73sovjfH7ela26g3GXLeLMTfPMcbb2r1jyz8x5uo8W+57T+7Z9ZVOAMtNnPZVeyvtRETK8WKModnrp9UbYENVE9n1bWSmuinKTiXT48Zdl85vDpwa+YTGkPbIIvt0evqDiRXijb/AR/fDvmd3fvqORW0ZPPcbG6A9/PfWN/7KH6BklvXnzzrHul8Adj3U+uVf/r11XRTPsNurN8B//sf6/d++CcbtZ/3hs38A3zjC7uNOsT1pIpGSFrv7596n2zjAf34OLTXWH33eczaQOlSIZQWAdVWc/YS1BHafl9g5s4qsZdVb8sfDRW/b30bQ3ZQoY6ZbS2Xl/TD/t70vi5IQOnqoH7jiiiu4+eab29evueYaFi9ezLx589h3333Za6+9ePzxx7sct379eqZPn06bL8CazVUcs+AkJk+dzoknnUpjUxP5WR6mjMlht1HZFOdlkJeZiiuWy2HH1zao2hY9Q2UnjIG1L9n39VsTP+apy8H44bi/WRfIwT+BUdPgv1eBy2MDp6HM/r51T7z+p45tr1wPCFzwqo1Z1G+zbqP5ixMrRzzcKfDtxdCw1cY9vv/y0BKGRCmYlLgw9DV5JZG70ybCsX+GS1bY7rzKgDC0LYdnroStn/TtOcfsBUddH3OXhQsXctlll7VnfVy6dCnPPvssl19+eZc8KOHjAAIGvqps4M7bbiEzM4tX317O2i9WM3fO/hRlp+OJkAkzKutetUtvgkn7Kj6zjSdYcQjt+hnwW5/xuDA35dZPYM1zMP93HX3/U1Jtr41/zYcDLuwaW8jItwHNN/5sg7bGDx8/aPvwj51pXwf/xApPb4OOoUw+En7wuu3G2N2nVyW5uD2Rx5Yo/cbQFocksc8++1BRUcGWLVuorKxkxIgRFBcXc/nll3fJgzJmjG04jTHUNbfR5g/gEvj8w/e4/LJLKc7PoHj/WcyYMSP6BY2B7V9C3i6QGpLc7GtHHHytiRU8aDVAh0gEWf24DSZf8kFn0ahxuntO+mbn/Uv2hctX226akTjwYnjnn1YgWuvsGIhv/rTj82DS/76mOMZ9VBSlnaEtDnGe8PuTk08+mWXLlrF161YWLlzYngflrXfeo9EHpdMns7GiBn+6nWbws/J6Nte04BLYfWS2nVc2XuPY1mgHeP15mu3jve/ZcPzf7WeBgB24BeBL0HJY+xJkj7HCUB+WoCzYY6V6fWdxqC+3y5yxXc+XM7rrtiBZRXYQ0Xu32h423/pl4t1bFUXpdzTm0E8sXLiQBx98sD2nTG1tLfkFRWyobuXJZ5+nbNNGdjS1UeOkmM5NT2FMbhqpbpsW+pBDDmnPE7Nq1So+/vjjzhcI+GwXuLYm60OfdAh8/DA0V9vPt31ihcOTabuExsPbAhvesl3p3KldLYe6LZ2XodtdKTbA210OusQOhsossi4lRVF2GpIiDiJyqYisEpFPReQyZ1uBiDwvImucZf+OAulnpk2bRn19PSUlJYwZM4b5x5/EO++9z8Kjv8Vbz9o8+FPG5DKtJA8RGFeQyYisjgFUF154IQ0NDcyYMYMbbriB2bNnd75AWxNgbMO68D44/FprIax8wH4edCntOtf2LY/Hpnfs8bvPs9ZDuOUQTRzqy+3+PYkN5JXAibfYkbPdHTWtKEq/MuBuJRGZDnwfmA20Ac+KyNPOtheNMdeLyJXAlcAVA12+vuSTTz4hYAybdjTj82Tz1POvUJKf0WWCleB8txMnTmxP1Z2RkcGDD8bofhrMERMMrBbPsN0/l99hg8DrXoUiJzdQ0L0Ui7Uv2Z5FE+ZYd1DQXRSkbnPnZfv2LYllEI3GXl0zdSqKknySYTnsCbxjjGkyxviAV4ETgROAJc4+S4AFSShbn+IPGNZvb6SmuY0xeemMGxEmDMbYYHFPRqm3NYE7zaZgCFJ6ns2ns/ZF6yLa9VDb/z8Ry2HtSzbdRFq2ze3SEMVyCBeN+nKbX0dRlCFFMsRhFXCIiBSKSCZwNLALMNoYUw7gLCN2cxGRC0RkuYgsr6xMICNjkvD6A3xd2UBjq59xIzIZlZPeOcDs99l0yxWrbXfQqrU2904iQmGMTUYWPkht2ol2oNPTP7WWxaRDbc6YgM9eLxoNFbYMwYRhOWM6j3PwttjEchAh5lAOuRGC0YqiDGoGXByMMZ8B/ws8DzwLfATEaLm6HH+bMabUGFM6cmTkIKhJcr6oVp+ftZUNtPoCTCjMpCArrE+9t8km/GptsE/pGfn26b62LLGeRf42CPgw4cnCPOkw8wzbo0hcMPFgSHEyXYZbD75WO25h3Wvw7i12264h4tBS0xHIDloLqdmd3Uqt9TbHkVoOijLkSEpA2hjzL2PMvsaYQ7CTTqwBtolIMYCzrOjJudPT06mqqkqaQDS3+Vhb0UggYJhUlEVuRtjk8K0NULnGPv0X7WGfuvPH2xfYwWbhtDV2tii8TRhjqGrwts9H207puXY5dh8rOtHE4dmrbLbTJcfZkco5xe0zWpHtDFoL9lgKCkLJvrY3VJsT76hzREMtB0UZciRlnIOIjDLGVIjIeOA7wIHAJGARcL2z7JpfIgHGjRtHWVkZ/epyamu0U0WmdG6YW71+qhrbcIlQmJ3KxtoI2ttUZUcs5xRD9caO7f42qK+A7aZz+mC/1z65Z4yweWnAzmHQWkf66DzG7TK+8/kLd7NjBoJpBjxRxKFhG+RPgAU3W4sgf3zH9JfBEc3122xOpKArqaTUWhr15fY69c52tRwUZciRrEFwj4hIIeAFLjbGVIvI9cBSETkP2Aic0pMTezweJk3q52H2f59lUzAs7Jivdm1lA6fe9CZj8zO4+7zZjM6NMh/yn/eyPYtCjgVszGHZqfCd/wd7ntqxfeM7dnvhHvCj9+2o4TuOtBbGgc9HvsahP+94HxSw8LEO3iY7NmHiwV2Pz3YGr4VbDsHUGXWbrTio5aAoQ5akiIMx5psRtlUBScoI1k38bZ2exOtavHz/7uWkpri445z9ogtD9XqbCO+gH3X9LGgVtNZ13t7qTIRetcZ2T51wsJ1xatb3Eitru1spLJbhbYk+wUmo5QDWckjLs11joUMU1HJQlCHL0E6f0V/4ve35igIBw08eWsnGqibuPX9/SvJjzCi17nW7nNhFG0PEob7z9pZauxS3neUso8A29OEJ8KLRLg5h+ZW8TR0WQjiZRfZ6wUB03RY7YC04nqF9zEO5nUIzNJ+ToihDAhWHnuBva890+veXvuKFzypYfPw0Dti1MPZx69+wDW+ktMMp6TYNRbg4BNenn2QndR/pzOdbkuDcscGYQ3hmVm9zdMvB5eo81qFus3UdpWbZCeVDxzxEyqmkKMqgR3Mr9QS/F3wtrK1s4KaX13D83mM5+8AJnff57Cl47lcd68bYKTQnHhw526iItR66iIPjZjr4Mpug7s2/2mk4g5PnxCPFEYAulkMMcQBnlHQw5rClI66QO7ZzKo3ejI5WFGWnRcWhJ/i9GG8zi59cTXqKm18fO7VrBtXPn4K3/m6tBbBZTes2d01tHUpEcai3YxZGTYU9DrdWS8msxNNZBye87xJzaIotDtljrOXga7OD5HJL7PbcsR1uJbUcFGXIouLQE/xttDY38tqXlVw2/xuMzEnruk/AGdf3ipM2fH2MeEOQtNzI4pCWY8Vgv/PttpIE4w3QIQDhloOvxWZsjUbQcqgvB0xXyyHgt+KhloOiDEk05tBdAn4wflqaG9ljVHZXd1IQv9cu179urYd1r1s/ftE3op87Nbtrb6WWOisaALt/G474A0z/TuLlDVoOoTEHY+JbDjnFNmVG9Xq73i4OJTbNR91m6+YKn+VNUZQhgYpDd3EafY9pY/Hx0/C4oxhfAZ/NiOptstbD9jXR4w1B0nLsILlQWus6ejK5XHBgN+c9aI85hIxz8LfZhj0lSpdb6OjJVL7SLnPHOcuxgIHNH9h1dSspypBE3Urd5I0vbTA2Q7wctFuM3kl+r23UD77cWg8NW2O7lCB6QDqth5OyQ0jMIUQcgum+Y7qVHIsgKAKhbiWAzcuddXUrKcpQRMWhG6zaXMsVD9lG0UWgw3UUiYDPToo+63sdT+GTDol9gWgB6aDl0BOCrqPQEdLB9zED0k6Zt3wAqTmQ7ghU0FIoW9F5XVGUIYWKQ4Jsrmnm3LvepzA9xC0UK4NqwGsnz/FkwBHX2ek3C3aNfZFI4tBS19Ew9wS3xw5o67bl4FgENRs7p8cIvi9f2fPpQRVF2elRcUgAYww/vGcFzV4/fzl1escHseZm9juWA9jZzk69O37307RcO09DaGbW3loOYGMLncTBETVPjJhD1kjAKW+oOKTngSfLGWHdw+lBFUXZ6dF/dgJ8VFbLJ5trueqoPdl1RMjcDHEtB3f3LhQphUZfiIMnmjjEsBzcIVZBcIwDWIFrjz9ovEFRhioqDgnw2IebSU1xcezexbanT5CYloPjVuoO4eLg91oBSsvr3nnCSUkPizkE3UoxYg5gxzqAzasUSlAcNOGeogxZVBzi4PUHePKjLczfczS56Z7O4hBrbuaAv8OtlChp2XYZFIfgsq/dSr4EAtLQMelPeEru8J5LiqIMOVQc4vD6mkqqGts4cR/n6Tm0h1JMcfDagG13CIpAW4NdBjOy9iYgDRFiDgkEpKGjO2uuWg6KMtxQcYjDvz/YzIhMD4d8w/G/d3IrxYg5+L09sBwcEQiOku4ry8GT3rmswfexBsFBiDio5aAoww0VhxjUt3h5fvU2jtt7LKkpzq1K2K3UC8uhi1upt5ZDRufcSolaDmNm2BTd+WEpQoLrebv0rlyKouy0aPqMGDyzaiutvgAL9glxq4S6lWJaDr7eB6SDFkSvYw5p0FLTsZ7IIDiAPY+DKcd07XW122Fw6j0w/oDelUtRlJ0WtRxi8NiHm5lYmMk+u+R3bEw45uCz3UG7Q39ZDp5wy6G5Y3ssRCJ3x3W5YerxiacNVxRl0KHiEIXaZi9vf13F8XuP7TxXQ7fcSt20HFLDeiv1WUA6LSzm0GRdXt2NiSiKMmxIijiIyOUi8qmIrBKRB0QkXUQKROR5EVnjLEcko2xBlq/fgTFw0O5FnT/o5FZKcIR0orjcTtruvu7KGsFyiBdvUBRlWDPg4iAiJcCPgVJjzHTADSwErgReNMbsAbzorCeNd9ftINXtYmaoSwnCLIc+HiENned0aK2z1ke8XkXxSEnrXNZ4czkoijLsSZZbKQXIEJEUIBPYApwALHE+XwIsSE7RLO+u28HMXfJJ94Q18P05Qhqc5HvOOIfQWeB6gyejc1l9LSoOiqLEZMDFwRizGfgjsBEoB2qNMc8Bo40x5c4+5cCoSMeLyAUislxElldWVvZLGRtafazaXMv+uxZ0/bBTQDqK5WAMmB6MkIbOmVn7Iq8SRB4El6LioChKdJLhVhqBtRImAWOBLBE5M9HjjTG3GWNKjTGlI0f2T7roDzZU4w8YZk+KJA6O5SDu6JZDcP7oHlsOwYB0L9N1B0lJt2IVFDZvs1oOiqLEJBlupW8D64wxlcYYL/Bv4CBgm4gUAzjLiiSUDYB311WR4hJmTYgQEw+KQ3pu9N5KwUa4u11ZIYLl0AfiEEzNHSyvBqQVRYlDMsRhI3CAiGSK7SM6D/gMeAJY5OyzCHg8CWUD4N2vdzC9JI/M1AiNe9AqSMuJLg4BRxy6O0IarBi0i0Nt34hDMKAdtHQ0IK0oShwGfIS0MeZdEVkGfAD4gA+B24BsYKmInIcVkFMGumwALV4/H5XVcO7BkyLv4G8DcdleRdFGSPt761YKya3UVzEHCLEcWmJP9KMoyrAnKekzjDFXA1eHbW7FWhFJ5YON1Xj9hgMmFUbewd8G7tSuQd5QgtZFj9xKzjgHY/pRHJrUraQoSkx0hHQY763bgUtg1sQoY/D8XisO4d1DQ2l3K/XQcjB+a5X0VUA6YsxB3UqKokRHxSGMd7/ewdSxuXZin0j422wsISU9elfW9oB0D8UBoGm7FZm+tBy8GpBWFCUxVBxCaPMF+GBjNbMnRnEpQYdbKTyZXSjtXVl7GJAGqN3ceb03tLuVmjuWajkoihIDFYcQvthaT6svELkLa5CgWyk8mV34PtBDcXAshbo+FIegEPhabdkCPh0EpyhKTFQcQviorAaAGePyou8UnOEtJSOBgHQv3EpBceiTQXBpdultDpnoR8VBUZToqDiE8HFZDQVZqYwbEaPhbHcrpUe3HHobkAao29J5vTekhFgOic7loCjKsEbFIYSPy2rZqySv8/wN4bRbDjG6svp705U13K3UF+LgWA6+5sSnCFUUZVij4gBgDM1tftZUNLB3LJcSdA5Ie5vteIRwejNCOtURg74MSIfGHNqnCNVBcIqiREfFYcfXcOOebPzwOfwBw17j8mPvHzoIDtM5S2v7Pn3pVurrmEPQraSWg6Io0VFxePk6qC+nat3HQJxgNDhupZSu3UNDCfjtsicB6ZQ0KyoN2+x6n8YcWjQgrShKQgxvcdi6Cj5ZBkDVjipG56YxOjeOuyU0IA2RR0n3xq0k4giCsQKUktr9c4TjTrFl8bWo5aAoSkIMb3F46XdOV1GhpqaaGfFcShAyziH4NB7BcujNCGnosBb6wmoIkpJuhSxY3t5OPaooypBm+IrDxnfgy2dhzmWYtGy8TXXMKInjUgJrFbg9/Wc5QEecoS/iDUGCvau0K6uiKAkwPMXBGHjhGsgeA/v/kDZ3Flm0MGOX/PjHtgekY1kOvUjZDf1nOXSKOahbSVGU6AxPcVj3Kmx8Gw79H0jNpIl0sqUpMcuhPStrLMuhF+McwKbthr4ZHR3Eo5aDoiiJk5T5HJLOxG/CyXfClGMBqPWnU+TxMiIrgeCvv61jEBxEHgjXmxHSEGI59LFbyauWg6IoiTE8xcHlhunfaV/d7vVQlNqW2LGdxjkQWRx21oC0r8UKhLh6XjZFUYYFw9OtFEJ1Yxs7vKnku6Ok3w7H77UWQdAtEym/Um9SdkP/WA6ejA63kifTdplVFEWJwrAXh7LqZurJINNESaIXTiJupd6k7IaQ3kp9aTmkdWRl1XiDoihxGPbiUFHfQqPJwONvjL+zMZ2nCYXYlkNv3Up9GZBOSe/IyqrioChKHAZcHERksoisDHnVichlIlIgIs+LyBpnGWPGnb6jsr6VRtJxexMQh4AfMPFjDoGdtStrs33pRD+KosRhwMXBGPOFMWamMWYmMAtoAh4FrgReNMbsAbzorPc7FfWtNJgMJOCNPu1nEL8TtE7YreTuWaH6JeagloOiKImTbLfSPGCtMWYDcAKwxNm+BFgwEAWoqG8hkJplV1obYu/cLg7ONKFI9BHSLk/Pg76pzjiHPu/K2twRkFYURYlBssVhIfCA8360MaYcwFmOinSAiFwgIstFZHllZWWvC1BZ34or6Ntvq4+9c2gXVZEOV02k/XoajAYo2RemLoBxpT0/RzjtMQcNSCuKEp+kiYOIpALHAw935zhjzG3GmFJjTOnIkSN7XY6K+lZSMxxx6I7lAM5UoZEsB3/vxhFkjIBTl0BmQc/PEY4nw5kJTt1KiqLEJ5mWw1HAB8YYZ+ICtolIMYCzrBiIQlTWt5KW5aTNaI1nOYTEHMAGdiPO59BLy6E/SEkDE4CWOhUHRVHikkxxOI0OlxLAE8Ai5/0i4PH+LoAxhor6VjKzHXFoi2c5BN1KjuWQkhbZcgjOM70zEeyh1Fyt4qAoSlySIg4ikgnMB/4dsvl6YL6IrHE+u76/y1HX7KPNFyArN99uiGc5BMLSYgRHHXfZz9fzbqz9RftUoY0akFYUJS5J8X0YY5qAwrBtVdjeSwNGZYNt2HPynCEVcS2HsJhDMF9Rl/28Pe/G2l+EWgtqOSiKEodk91ZKKhV1dlxDfr6jU3ED0hEsh2gpu3c6t1LIzG86CE5RlDgMa3GobLDiUFDg9ApKOCAdajlEC0jvxOKgloOiKHEY1uIQtBxG5WfZxjPuOIfwrqxRLAe/r+cT/fQXHhUHRVESZ3iLQ30LaSkuctJS7Kjk7rqVUtIGqeWgAWlFUWKTkDiIyKUikiuWf4nIByJyeH8Xrr+prG9lVG4aImKn5ux2QDojcj6m3o6Q7g9C4wyhVoSiKEoEErUczjXG1AGHAyOBcxiArqb9TUV9K6NynIYyLSdxyyFoFXjSo6Ts7uUI6f4g2JUV1HJQFCUuiYpDMIPc0cCdxpiPQrYNWirrWxmZ7TSaqTkJBKTD3UpRurLujCOktSuroijdIFFxWCEiz2HF4b8ikgME+q9YA0OF41YCHLdSTwLSzXYSoE777YwjpNVyUBQlcRJ9vD0PmAl8bYxpEpECrGtp0NLi9VPb7A2xHLKhdW3sgyJ1ZcXY7aGN704ZkA6xFlI05qAoSmwStRwOBL4wxtSIyJnAr4Da/itW/7PdGePQ2XLobm8lp5ENjzv4fTvhCGntraQoSuIkKg7/BJpEZG/g58AG4O5+K9UAUFHviEN7QDq3Zym7oWuPpZ19hLTGHBRFiUOi4uAzxhjsbG1/Ncb8FejDCY4HnkpHHEbmhLiVvI3OPNFRiNSVFbqOddgZ3Uoud0gvKxUHRVFik6g41IvIVcBZwNMi4gZ2stave3RYDiFuJYjtWuqSWynoVgrrseTfCS0H6LAeVBwURYlDouLwXaAVO95hK1AC/F+/lWoAqKxrQQQKshwrIDhvcyzXUrCLanBu6JiWw07WlRU6xEwD0oqixCEhcXAE4T4gT0SOBVqMMYM65lDZ0EphVhopbucWpDlespiWQ1uHSwliWA47qTikpNtgtAz6ISqKovQziabPOBV4DzgFOBV4V0RO7s+C9TcVda0dLiVIzHIIH78QfALvYjnshCOkwREHdSkpihKfRB9vfwnsZ4ypABCRkcALwLL+Klh/U9nQ2hGMhg7LobUu+kHhlkNKFMthZ3Yr+bQbq6Io8Uk05uAKCoNDVTeO3SnpYjkkFJAOdysFYw4R3Eo7q+Wg8QZFURIg0cfbZ0Xkv8ADzvp3gf/0T5H6n0DAsD3ccuiVWylEHIzZObuygrqVFEVJmITEwRjzPyJyEjAHm3DvNmPMoz29qIjkA7cD0wEDnAt8ATwETATWA6caY6p7eo1YVDe14QuYMMuhJwFpp6ENHSEdHCexM7qVJh8NbY3JLoWiKIOAhFswY8wjwCN9dN2/As8aY04WkVQgE/gF8KIx5noRuRK4Eriij67XifYxDrkhLpZ2yyFG8j2/N3LMIdRyCPjscmebCQ7gwIuSXQJFUQYJMVswEanHPtl3+Qgwxpjc7l5QRHKBQ4DvYU/SBrSJyAnAXGe3JcAr9JM4ZKWmcMb+49ljVHbHRk8GiDu+OIRaBJFyKwXC5nxQFEUZhMQUB2NMf6TI2BWoBO50cjWtAC4FRhtjyp3rlovIqH64NgDjCzO59sS9Om9MZDa4Lr2V0gDpbDmEj6JWFEUZhCSjx1EKsC/wT2PMPkAj1oWUECJygYgsF5HllZWVfVuy1DizwYW7lUS6TvgTdCvtjDEHRVGUBEmGOJQBZcaYd531ZVix2CYixQDOsiLSwcaY24wxpcaY0pEjR/ZtyeJN+ONv62oReNI7j3Non0pUxUFRlMHLgIuDk4pjk4hMdjbNA1YDTwCLnG2LgMcHumx2wp9uuJXA5lcKHSHdHpBWt5KiKIOXZD3eXgLc5/RU+ho7q5wLWCoi5wEbsak6Bpa0OPNIRxrcFm45tLuVVBwURRm8JEUcjDErgdIIH80b4KJ0Ji0b6sujfx7RckiPEpBWt5KiKIOXQZ0Co8+JF5AOeCOLg3ZlVRRliKHiEErcgLS3q0XgyYxsOWhAWlGUQYyKQyjBgLSJNO6PyG4lT0bk9BkakFYUZRCj4hBKWjYYf9csq0ESEge1HBRFGfyoOISS5mQDidZjKWJvpQzwNnXeB9RyUBRlUKPiEEq85HvdshxUHBRFGbyoOIQSa8IfY+wYhi7ikNlZHPw7cVZWRVGUBFFxCCXWhD/R3EVBt1IwiK25lRRFGQKoOIQSa8Iff5tdRnIrGX+HeKhbSVGUIYCKQyhBcYgUcwiKQ3ij78m0y2B+Jb/mVlIUZfCj4hBKrIB0LLcSdMQdtCuroihDABWHUDILwJMF79wMO77u/Fk0t1JKUByc7qzalVVRlCGAikMongw4Yyk0VMDt34aN73R8FivmACGWgwakFUUZ/Kg4hDPxYDj/RUjPhyXHwbrX7faobiUn5tBFHNRyUBRl8KLiEImi3eH8F2wD//lTdltcyyHcraSWg6IogxcVh2hkFkBuMTRss+vBQHOkQXAQISCtloOiKIMXFYdYZI+GekccEu2tpF1ZFUUZAqg4xCJ7dIfl0O5WiteVVQPSiqIMflQcYhFRHOLEHAJeEDeIDEwZFUVR+gEVh1jkjLapNFobuuFWipDWW1EUZZCRFN+HiKwH6gE/4DPGlIpIAfAQMBFYD5xqjKlORvnayR5tlw3bYlgOEbqyajBaUZRBTjIth28ZY2YaY0qd9SuBF40xewAvOuvJpZM4ROmt5PbY+EJoV1btxqooyiBnZ3IrnQAscd4vARYkrygOOWPsspPlEMEqCJ3TIeDTYLSiKIOeZImDAZ4TkRUicoGzbbQxphzAWY6KdKCIXCAiy0VkeWVlZf+WMmg51MewHKDzVKEBr7qVFEUZ9CTrEXeOMWaLiIwCnheRzxM90BhzG3AbQGlpqemvAgKQUWCtgIatkFtit0UTB1+Lfe/3qVtJUZRBT1IsB2PMFmdZATwKzAa2iUgxgLOsSEbZOuFyQdYom4jPHyMVtydTLQdFUYYUAy4OIpIlIjnB98DhwCrgCWCRs9si4PGBLltEckZD/dbovZUAUtK1K6uiKEOKZPg/RgOPih0klgLcb4x5VkTeB5aKyHnARuCUJJStK9mjoXZznJhDaEDarwFpRVEGPQPeihljvgb2jrC9Cpg30OWJS/Zo2LzCsRwEXO6u+3gyoGm7fR/wqjgoijLo2Zm6su6cZI+Gxu02puBOjZwWw5OhbiVFUYYUKg7xyBkNGKgvj+xSgrCAtI6QVhRl8KPiEI9sZyBczaboFoEnA7xOV9aAdmVVFGXwo+IQj+BAuNqyOJZDiFtJYw6KogxyVBzikRMcJV0ew3JIt24lY3Scg6IoQwIVh3hkBbN4mNhuJeO3VoPfpwFpRVEGPSoO8fCkQ3q+fR/LrQTWetCurIqiDAFUHBIhGHeIZTmAjTsE1HJQFGXwo+KQCMG4QyKWg19TdiuKMvhRcUiE7HjiEGo5qFtJUZTBj4pDIsR1KzmWg69FR0grijIkUHFIhOCMcNEsh5R0u2wPSKs4KIoyuFFxSISg5RCt0W+POTTbrKxqOSiKMshRcUiEhHsrNTkjpCNkblUURRlEqDgkQrcD0mo5KIoyuFFxSIREu7K2NYIJqFtJUZRBj4pDIqTngzstvluptc4utSuroiiDHG3FEkEEZn8fxh8Y+fN2cai3S7UcFEUZ5Kg4JMoR10b/zO2xcYYWtRwURRkaqFupr/BkhLiV1HJQFGVwkzRxEBG3iHwoIk856wUi8ryIrHGWI5JVth7hyeiwHHQmOEVRBjnJtBwuBT4LWb8SeNEYswfworM+eFDLQVGUIURSxEFExgHHALeHbD4BWOK8XwIsGOBi9Q5PpgakFUUZMiTLcvgL8HMgELJttDGmHMBZjopwHCJygYgsF5HllZWV/V7QhAl1K2lAWlGUQc6Ai4OIHAtUGGNW9OR4Y8xtxphSY0zpyJEj+7h0vcCTqeMcFEUZMiSjFZsDHC8iRwPpQK6I3AtsE5FiY0y5iBQDFUkoW88JjTmoW0lRlEHOgFsOxpirjDHjjDETgYXAS8aYM4EngEXObouAxwe6bL0iJd2mzgANSCuKMujZmcY5XA/MF5E1wHxnffAQzK8E2pVVUZRBT1JbMWPMK8ArzvsqYF4yy9Mrgik0QC0HRVEGPTuT5TC4CbUcNCCtKMogR8Whrwi1HDQgrSjKIEfFoa/o5FZSy0FRlMGNikNf0SkgrZaDoiiDGxWHvsKT3vFeA9KKogxyVBz6ik4BaXfyyqEoitIHqDj0FRqQVhRlCKHi0Fd0shxUHBRFGdyoOPQVajkoijKEUHHoK7Qrq6IoQwgVh75CR0grijKEUHHoK9StpCjKEELFoa9I0cR7iqIMHVQc+oqg5SAucOltVRRlcKOtWF8RFAe1GhRFGQKoOPQVbo8VBg1GK4oyBNCWrC/xZIIkuxCKoii9R8WhL/FkQMCX7FIoiqL0GnUr9SWeDO3GqijKkEAth77EkwEBf7JLoSiK0msG3HIQkXQReU9EPhKRT0VksbO9QESeF5E1znLEQJet13gyNF23oihDgmS4lVqBw4wxewMzgSNF5ADgSuBFY8wewIvO+uDCk6luJUVRhgQDLg7G0uCsepyXAU4AljjblwALBrpsvcaToeMcFEUZEiQl5iAibmAFsDvwD2PMuyIy2hhTDmCMKReRUVGOvQC4AGD8+PEDVeTE2P+H0Fyd7FIoiqL0mqSIgzHGD8wUkXzgURGZ3o1jbwNuAygtLTX9U8Iesvu8ZJdAURSlT0hqV1ZjTA3wCnAksE1EigGcZUXySqYoijK8SUZvpZGOxYCIZADfBj4HngAWObstAh4f6LIpiqIolmS4lYqBJU7cwQUsNcY8JSJvA0tF5DxgI3BKEsqmKIqikARxMMZ8DOwTYXsVoE57RVGUnQBNn6EoiqJ0QcVBURRF6YKKg6IoitIFFQdFURSlC2LMzjWOrDuISCWwoRenKAK291FxBgvDsc4wPOutdR4+dLfeE4wxI2PtMKjFobeIyHJjTGmyyzGQDMc6w/Cst9Z5+NAf9Va3kqIoitIFFQdFURSlC8NdHG5LdgGSwHCsMwzPemudhw99Xu9hHXNQFEVRIjPcLQdFURQlAioOiqIoSheGpTiIyJEi8oWIfCUig2+u6gQQkV1E5GUR+UxEPhWRS53tBSLyvIiscZYjkl3W/kBE3CLyoYg85awP6XqLSL6ILBORz53v/MChXmcAEbnc+X2vEpEHRCR9KNZbRO4QkQoRWRWyLWo9ReQqp337QkSO6Mk1h504OKnC/wEcBUwFThORqcktVb/gA35qjNkTOAC42KnnlcCLxpg9gBed9aHIpcBnIetDvd5/BZ41xkwB9sbWfUjXWURKgB8DpcaY6YAbWMjQrPdd2EnRQolYT+d/vhCY5hxzs9PudYthJw7AbOArY8zXxpg24EHghCSXqc8xxpQbYz5w3tdjG4sSbF2XOLstARYkpYD9iIiMA44Bbg/ZPGTrLSK5wCHAvwCMMW3OLItDts4hpAAZIpICZAJbGIL1Nsa8BuwI2xytnicADxpjWo0x64CvsO1etxiO4lACbApZL3O2DVlEZCJ2Do13gdHGmHKwAgKMSmLR+ou/AD8HAiHbhnK9dwUqgTsdV9rtIpLF0K4zxpjNwB+xk4OVA7XGmOcY4vUOIVo9+6SNG47iIBG2Ddn+vCKSDTwCXGaMqUt2efobETkWqDDGrEh2WQaQFGBf4J/GmH2ARoaGKyUmjo/9BGASMBbIEpEzk1uqnYI+aeOGoziUAbuErI/DmqJDDhHxYIXhPmPMv53N20Sk2Pm8GKhIVvn6iTnA8SKyHusyPExE7mVo17sMKDPGvOusL8OKxVCuM9j559cZYyqNMV7g38BBDP16B4lWzz5p44ajOLwP7CEik0QkFRu4eSLJZepzRESwPujPjDE3hnz0BLDIeb8IeHygy9afGGOuMsaMM8ZMxH63LxljzmQI19sYsxXYJCKTnU3zgNUM4To7bAQOEJFM5/c+DxtbG+r1DhKtnk8AC0UkTUQmAXsA73X77MaYYfcCjga+BNYCv0x2efqpjgdjTcmPgZXO62igENuzYY2zLEh2WfvxHswFnnLeD+l6AzOB5c73/RgwYqjX2an3YuBzYBVwD5A2FOsNPICNq3ixlsF5seoJ/NJp374AjurJNTV9hqIoitKF4ehWUhRFUeKg4qAoiqJ0QcVBURRF6YKKg6IoitIFFQdFURSlCyoOipIkRGRuMGusouxsqDgoiqIoXVBxUJQ4iMiZIvKeiKwUkVuduSIaRORPIvKBiLwoIiOdfWeKyDsi8rGIPBrMsS8iu4vICyLykXPMbs7ps0PmYbjPGemrKElHxUFRYiAiewLfBeYYY2YCfuAMIAv4wBizL/AqcLVzyN3AFcaYGcAnIdvvA/5hjNkbm/+n3Nm+D3AZdm6RXbG5oRQl6aQkuwCKspMzD5gFvO881GdgE5wFgIecfe4F/i0ieUC+MeZVZ/sS4GERyQFKjDGPAhhjWgCc871njClz1lcCE4E3+r1WihIHFQdFiY0AS4wxV3XaKPLrsP1i5aGJ5SpqDXnvR/+Tyk6CupUUJTYvAieLyChon7d3Ava/c7Kzz+nAG8aYWqBaRL7pbD8LeNXYeTTKRGSBc440EckcyEooSnfRpxRFiYExZrWI/Ap4TkRc2KyYF2Mn1JkmIiuAWmxcAmzq5Fucxv9r4Bxn+1nArSLyW+ccpwxgNRSl22hWVkXpASLSYIzJTnY5FKW/ULeSoiiK0gW1HBRFUZQuqOWgKIqidEHFQVEURemCioOiKIrSBRUHRVEUpQsqDoqiKEoX/j+rfpz9svXaQgAAAABJRU5ErkJggg==\n",
+      "text/plain": [
+       "<Figure size 432x288 with 1 Axes>"
+      ]
+     },
+     "metadata": {
+      "needs_background": "light"
+     },
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "y_a = max(acc_valid_list)\n",
+    "x_a = acc_valid_list.index(y_a)+1\n",
+    "plt.plot(acc_train_list)\n",
+    "plt.plot(acc_valid_list)\n",
+    "plt.annotate(\"max validation accuracy\",(x_a,y_a))\n",
+    "plt.title('Training and Validation Loss during Model Training')\n",
+    "plt.ylabel('loss')\n",
+    "plt.xlabel('epoch')\n",
+    "plt.legend(['train', 'valid'], loc='upper left')\n",
+    "plt.show()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 23,
+   "id": "d4c563a6",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "f1 = open(\"loss_train.txt\",\"w\")\n",
+    "f2 = open(\"loss_valid.txt\",\"w\")\n",
+    "f3 = open(\"acc_train.txt\",\"w\")\n",
+    "f4 = open(\"acc_valid.txt\",\"w\")\n",
+    "for i in range(len(loss_train_list)):\n",
+    "    f1.write(str(loss_train_list[i]))\n",
+    "    f1.write(\",\")\n",
+    "    f2.write(str(loss_valid_list[i]))\n",
+    "    f2.write(\",\")\n",
+    "    f3.write(str(acc_train_list[i]))\n",
+    "    f3.write(\",\")\n",
+    "    f4.write(str(acc_valid_list[i]))\n",
+    "    f4.write(\",\")\n",
+    "f1.close()\n",
+    "f2.close()\n",
+    "f3.close()\n",
+    "f4.close()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "e9084525",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "net.load_state_dict(torch.load(\"/home/user/research/inception/inception_model_weights.pth\"))"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 25,
+   "id": "3b6a2220",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "100%|██████████| 1144/1144 [01:06<00:00, 17.25it/s]"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "94.60955810546875\n"
+     ]
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "\n"
+     ]
+    }
+   ],
+   "source": [
+    "right = 0\n",
+    "total = 0\n",
+    "net.eval()\n",
+    "for data, labels in tqdm(validloader):\n",
+    "    if torch.cuda.is_available():\n",
+    "            data, labels = data.cuda(), labels.cuda()\n",
+    "    outputs = net(data)\n",
+    "    _, predicted = torch.max(outputs, 1)\n",
+    "    correct = (predicted == labels).float().sum()\n",
+    "    right+=correct.float()\n",
+    "    total = total+len(predicted)0 \\ol\n",
+    "print(float(right*100/total))"
+   ]
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "Python 3",
+   "language": "python",
+   "name": "python3"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 3
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython3",
+   "version": "3.8.8"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/loss_train.txt b/loss_train.txt
new file mode 100644
index 0000000000000000000000000000000000000000..d3892221878bc977a487f9ac60c8a3d9d3973e67
--- /dev/null
+++ b/loss_train.txt
@@ -0,0 +1 @@
+1.1035438804806341,0.7226075545878446,0.5927857020558719,0.4855417087383751,0.42466082714937775,0.3899900257610249,0.33965107956475976,0.3088414678495286,0.2893916949011927,0.26239258625865075,0.24367613917504974,0.236287816383571,0.23417071717115065,0.21140513792742907,0.20538419038578473,0.19501896397021903,0.18287320016237196,0.17879659134323164,0.171295881071395,0.17367128944810054,0.16889888298814962,0.15593305252522763,0.16150809311312375,0.14889712126819024,0.14728439946149172,0.14183516678818942,0.14214308556186903,0.13260898183909905,0.13150178402533158,0.12626396362086523,0.1243195203532862,0.12209497421210111,0.12278669627672056,0.11644445447141527,0.11643929763509502,0.11314545146687183,0.11227715401390395,0.1071929339383833,0.10536505841217854,0.1025733296694737,0.1052557724369013,0.10263119807659637,0.10232017596648244,0.09797717922651777,0.0962465678795243,0.09185824797468396,0.08947356818272058,0.09256357114334521,0.08656281119721079,0.08749571777711337,0.09165445734263657,0.09221583802063996,0.08847045124473309,0.08789863544174668,0.09500338172477096,0.09031265778825509,0.08620208682385942,0.08300438247726585,0.08226122751776815,0.08579505991390575,0.08214815120575526,0.07662939100897298,0.07747971859184274,0.07793970416078122,0.07176851012418552,0.07633045756118612,0.07321558582663341,0.07049886439466706,0.06958261082941226,0.06615839365227791,0.07073798872735443,0.06759932948314919,0.06808185780105781,0.0662040773194995,0.06631172326392323,0.060300969062300605,0.0631895532683778,0.06198645626303477,0.06146746539060868,0.061250413641016646,0.055994985836952726,0.05786731395727391,0.05508038126183864,0.05333144986953854,0.05195518812915562,0.05557021407121344,0.04761978305685298,0.04825140143763275,0.05780107012915506,0.0488213468202301,0.04786794898898365,0.04460614188660565,0.04528368343457531,0.04315999560623736,0.045449965668429,0.04930824305741191,0.04283826560632438,0.04108247859154013,0.04423610125145301,0.04032945076981576,
\ No newline at end of file
diff --git a/loss_valid.txt b/loss_valid.txt
new file mode 100644
index 0000000000000000000000000000000000000000..8d422d10ba23434426d846d23c7b6e14da8290dc
--- /dev/null
+++ b/loss_valid.txt
@@ -0,0 +1 @@
+0.7362933201909512,0.6163856863236329,1.3273141826035384,1.5671682171401458,3.5975048998270522,0.3208140740501673,1.60716543938882,3.7727238974062614,0.3727143925575459,0.39486539538513027,0.30012787602620505,0.2645583272986157,0.28670598589140556,0.877864682356586,0.31970177022714447,0.3537218891526128,0.23517900836004693,0.23142625330760383,0.29114914753153515,0.19204040009411208,1.383013668015098,0.29187787832020173,0.30029773062818627,0.20152319045968844,0.5768455127529731,0.23056407164745374,0.5357079009287545,0.2149459716328706,0.1735658104628493,0.22748694864047736,0.15573396021900965,0.19751328618058758,0.25568632156248966,0.19130310058533873,0.21698788530739277,0.17937653658909178,0.1841336501966603,0.17111435995329394,0.17860585031031706,0.16341808670263447,0.1674421660797369,0.20584173513718435,0.19133936254487285,0.17769178415356504,0.15445901458264635,0.17249739720020704,0.16489796243608087,0.18674146796817262,0.18428602356302096,0.15860075746543972,0.17152209940613636,0.16037222628516629,0.2036763697891736,0.1687593689412151,0.14177400080895142,0.18278716804204703,0.14799000272867793,0.1600002346522127,0.14605365284565963,0.18423723773755435,0.17847097962048566,0.16315428260541065,0.22504110104722083,0.1685476378482461,0.1624539961414715,0.16267618834170236,0.21929416910379954,0.20767059386729905,0.20314688874566306,0.21894106984455217,0.1854989590078617,0.16438417145409634,0.20492887748025262,0.15864856163937738,0.17424752525398982,0.1800764260328554,0.17779819888212697,0.22541044369261604,0.16276436379049866,0.185863304678096,0.19503489832381585,0.1772332505598556,0.17212355645936103,0.18769453135639058,0.2188312843085706,0.16567276273672485,0.17063623352618648,0.20191060677620382,0.174123426197158,0.1821983714126591,0.21106482365035026,0.18981046517962916,0.19061526675608978,0.18479735974127254,0.21741512184906572,0.22110039089647493,0.20986085644259478,0.2100832273115594,0.20389257205650918,0.19798582192817635,
\ No newline at end of file
diff --git a/stats.txt b/stats.txt
new file mode 100644
index 0000000000000000000000000000000000000000..f93af39cd3e4069aa5bd941e3a4c1ae3a48d4492
--- /dev/null
+++ b/stats.txt
@@ -0,0 +1,346 @@
+Epoch 1 	Training Loss: 1.1035438804806341 	Validation Loss: 0.7362933201909512 	 time: 00:28:19
+Train Accuracy : 60.59137725830078 	Validation Accuracy : 72.81468963623047
+Validation Loss Decreased( inf ---> 842.3195582984481 ) 	 Saving The Model
+
+100%|██████████| 1796/1796 [23:55<00:00,  1.25it/s]
+100%|██████████| 1144/1144 [01:36<00:00, 11.89it/s]
+
+Epoch 2 	Training Loss: 0.7226075545878446 	Validation Loss: 0.6163856863236329 	 time: 00:25:31
+Train Accuracy : 71.66165161132812 	Validation Accuracy : 74.82518005371094
+Validation Loss Decreased( 842.3195582984481 ---> 705.145225154236 ) 	 Saving The Model
+
+100%|██████████| 1796/1796 [21:41<00:00,  1.38it/s]
+100%|██████████| 1144/1144 [01:40<00:00, 11.41it/s]
+  0%|          | 0/1796 [00:00<?, ?it/s]
+
+Epoch 3 	Training Loss: 0.5927857020558719 	Validation Loss: 1.3273141826035384 	 time: 00:23:21
+Train Accuracy : 76.8459701538086 	Validation Accuracy : 54.16666793823242
+
+100%|██████████| 1796/1796 [22:25<00:00,  1.33it/s]
+100%|██████████| 1144/1144 [01:44<00:00, 10.94it/s]
+  0%|          | 0/1796 [00:00<?, ?it/s]
+
+Epoch 4 	Training Loss: 0.4855417087383751 	Validation Loss: 1.5671682171401458 	 time: 00:24:10
+Train Accuracy : 81.20057678222656 	Validation Accuracy : 53.263404846191406
+
+100%|██████████| 1796/1796 [28:16<00:00,  1.06it/s]
+100%|██████████| 1144/1144 [02:02<00:00,  9.31it/s]
+  0%|          | 0/1796 [00:00<?, ?it/s]
+
+Epoch 5 	Training Loss: 0.42466082714937775 	Validation Loss: 3.5975048998270522 	 time: 00:30:19
+Train Accuracy : 84.1463394165039 	Validation Accuracy : 42.16200637817383
+
+100%|██████████| 1796/1796 [27:13<00:00,  1.10it/s]
+100%|██████████| 1144/1144 [01:59<00:00,  9.55it/s]
+
+Epoch 6 	Training Loss: 0.3899900257610249 	Validation Loss: 0.3208140740501673 	 time: 00:29:13
+Train Accuracy : 85.36028289794922 	Validation Accuracy : 88.5489501953125
+Validation Loss Decreased( 705.145225154236 ---> 367.0113007133914 ) 	 Saving The Model
+
+100%|██████████| 1796/1796 [28:05<00:00,  1.07it/s]
+100%|██████████| 1144/1144 [02:03<00:00,  9.25it/s]
+  0%|          | 0/1796 [00:00<?, ?it/s]
+
+Epoch 7 	Training Loss: 0.33965107956475976 	Validation Loss: 1.60716543938882 	 time: 00:30:09
+Train Accuracy : 87.16448974609375 	Validation Accuracy : 57.7214469909668
+
+100%|██████████| 1796/1796 [28:21<00:00,  1.06it/s]
+100%|██████████| 1144/1144 [02:05<00:00,  9.15it/s]
+  0%|          | 0/1796 [00:00<?, ?it/s]
+
+Epoch 8 	Training Loss: 0.3088414678495286 	Validation Loss: 3.7727238974062614 	 time: 00:30:26
+Train Accuracy : 88.48980712890625 	Validation Accuracy : 30.09906768798828
+
+100%|██████████| 1796/1796 [29:04<00:00,  1.03it/s]
+100%|██████████| 1144/1144 [02:08<00:00,  8.92it/s]
+  0%|          | 0/1796 [00:00<?, ?it/s]
+
+Epoch 9 	Training Loss: 0.2893916949011927 	Validation Loss: 0.3727143925575459 	 time: 00:31:12
+Train Accuracy : 89.44759368896484 	Validation Accuracy : 86.85897827148438
+
+100%|██████████| 1796/1796 [28:35<00:00,  1.05it/s]
+100%|██████████| 1144/1144 [02:06<00:00,  9.05it/s]
+  0%|          | 0/1796 [00:00<?, ?it/s]
+
+Epoch 10 	Training Loss: 0.26239258625865075 	Validation Loss: 0.39486539538513027 	 time: 00:30:42
+Train Accuracy : 90.41095733642578 	Validation Accuracy : 84.73193359375
+
+100%|██████████| 1796/1796 [27:55<00:00,  1.07it/s]
+100%|██████████| 1144/1144 [01:46<00:00, 10.72it/s]
+
+Epoch 11 	Training Loss: 0.24367613917504974 	Validation Loss: 0.30012787602620505 	 time: 00:29:41
+Train Accuracy : 91.26294708251953 	Validation Accuracy : 88.92774200439453
+Validation Loss Decreased( 367.0113007133914 ---> 343.34629017397856 ) 	 Saving The Model
+
+100%|██████████| 1796/1796 [22:31<00:00,  1.33it/s]
+100%|██████████| 1144/1144 [01:41<00:00, 11.28it/s]
+
+Epoch 12 	Training Loss: 0.236287816383571 	Validation Loss: 0.2645583272986157 	 time: 00:24:12
+Train Accuracy : 91.27407836914062 	Validation Accuracy : 89.7727279663086
+Validation Loss Decreased( 343.34629017397856 ---> 302.6547264296164 ) 	 Saving The Model
+
+100%|██████████| 1796/1796 [23:48<00:00,  1.26it/s]
+100%|██████████| 1144/1144 [02:04<00:00,  9.19it/s]
+  0%|          | 0/1796 [00:00<?, ?it/s]
+
+Epoch 13 	Training Loss: 0.23417071717115065 	Validation Loss: 0.28670598589140556 	 time: 00:25:53
+Train Accuracy : 91.45783996582031 	Validation Accuracy : 89.51049041748047
+
+100%|██████████| 1796/1796 [31:12<00:00,  1.04s/it]
+100%|██████████| 1144/1144 [02:15<00:00,  8.45it/s]
+  0%|          | 0/1796 [00:00<?, ?it/s]
+
+Epoch 14 	Training Loss: 0.21140513792742907 	Validation Loss: 0.877864682356586 	 time: 00:33:27
+Train Accuracy : 92.3432388305664 	Validation Accuracy : 69.87179565429688
+
+100%|██████████| 1796/1796 [33:27<00:00,  1.12s/it]
+100%|██████████| 1144/1144 [02:01<00:00,  9.45it/s]
+  0%|          | 0/1796 [00:00<?, ?it/s]
+
+Epoch 15 	Training Loss: 0.20538419038578473 	Validation Loss: 0.31970177022714447 	 time: 00:35:28
+Train Accuracy : 92.52700805664062 	Validation Accuracy : 88.78205108642578
+
+100%|██████████| 1796/1796 [25:01<00:00,  1.20it/s]
+100%|██████████| 1144/1144 [01:51<00:00, 10.29it/s]
+  0%|          | 0/1796 [00:00<?, ?it/s]
+
+Epoch 16 	Training Loss: 0.19501896397021903 	Validation Loss: 0.3537218891526128 	 time: 00:26:52
+Train Accuracy : 93.01703643798828 	Validation Accuracy : 86.21794891357422
+
+100%|██████████| 1796/1796 [25:14<00:00,  1.19it/s]
+100%|██████████| 1144/1144 [01:59<00:00,  9.54it/s]
+
+Epoch 17 	Training Loss: 0.18287320016237196 	Validation Loss: 0.23517900836004693 	 time: 00:27:14
+Train Accuracy : 93.25091552734375 	Validation Accuracy : 91.20046997070312
+Validation Loss Decreased( 302.6547264296164 ---> 269.0447855638937 ) 	 Saving The Model
+
+100%|██████████| 1796/1796 [27:46<00:00,  1.08it/s]
+100%|██████████| 1144/1144 [02:08<00:00,  8.88it/s]
+
+Epoch 18 	Training Loss: 0.17879659134323164 	Validation Loss: 0.23142625330760383 	 time: 00:29:55
+Train Accuracy : 93.71310424804688 	Validation Accuracy : 91.52098083496094
+Validation Loss Decreased( 269.0447855638937 ---> 264.7516337838988 ) 	 Saving The Model
+
+100%|██████████| 1796/1796 [28:18<00:00,  1.06it/s]
+100%|██████████| 1144/1144 [02:06<00:00,  9.08it/s]
+  0%|          | 0/1796 [00:00<?, ?it/s]
+
+Epoch 19 	Training Loss: 0.171295881071395 	Validation Loss: 0.29114914753153515 	 time: 00:30:24
+Train Accuracy : 93.8578872680664 	Validation Accuracy : 88.92774200439453
+
+100%|██████████| 1796/1796 [28:28<00:00,  1.05it/s]
+100%|██████████| 1144/1144 [02:06<00:00,  9.02it/s]
+
+Epoch 20 	Training Loss: 0.17367128944810054 	Validation Loss: 0.19204040009411208 	 time: 00:30:35
+Train Accuracy : 93.65184783935547 	Validation Accuracy : 92.97785949707031
+Validation Loss Decreased( 264.7516337838988 ---> 219.69421770766422 ) 	 Saving The Model
+
+100%|██████████| 1796/1796 [25:03<00:00,  1.19it/s]
+100%|██████████| 1144/1144 [01:36<00:00, 11.83it/s]
+  0%|          | 0/1796 [00:00<?, ?it/s]
+
+Epoch 21 	Training Loss: 0.16889888298814962 	Validation Loss: 1.383013668015098 	 time: 00:26:40
+Train Accuracy : 94.06949615478516 	Validation Accuracy : 61.188812255859375
+
+100%|██████████| 1796/1796 [21:21<00:00,  1.40it/s]
+100%|██████████| 1144/1144 [01:37<00:00, 11.72it/s]
+  0%|          | 0/1796 [00:00<?, ?it/s]
+
+Epoch 22 	Training Loss: 0.15593305252522763 	Validation Loss: 0.29187787832020173 	 time: 00:22:59
+Train Accuracy : 94.53168487548828 	Validation Accuracy : 89.07342529296875
+
+100%|██████████| 1796/1796 [21:11<00:00,  1.41it/s]
+100%|██████████| 1144/1144 [01:34<00:00, 12.09it/s]
+  0%|          | 0/1796 [00:00<?, ?it/s]
+
+Epoch 23 	Training Loss: 0.16150809311312375 	Validation Loss: 0.30029773062818627 	 time: 00:22:46
+Train Accuracy : 94.26995849609375 	Validation Accuracy : 89.13170623779297
+
+100%|██████████| 1796/1796 [21:04<00:00,  1.42it/s]
+100%|██████████| 1144/1144 [01:35<00:00, 11.97it/s]
+  0%|          | 0/1796 [00:00<?, ?it/s]
+
+Epoch 24 	Training Loss: 0.14889712126819024 	Validation Loss: 0.20152319045968844 	 time: 00:22:40
+Train Accuracy : 94.40917205810547 	Validation Accuracy : 93.0361328125
+
+100%|██████████| 1796/1796 [21:27<00:00,  1.40it/s]
+100%|██████████| 1144/1144 [01:38<00:00, 11.60it/s]
+  0%|          | 0/1796 [00:00<?, ?it/s]
+
+Epoch 25 	Training Loss: 0.14728439946149172 	Validation Loss: 0.5768455127529731 	 time: 00:23:05
+Train Accuracy : 94.62635040283203 	Validation Accuracy : 82.22611236572266
+
+100%|██████████| 1796/1796 [21:50<00:00,  1.37it/s]
+100%|██████████| 1144/1144 [01:39<00:00, 11.49it/s]
+  0%|          | 0/1796 [00:00<?, ?it/s]
+
+Epoch 26 	Training Loss: 0.14183516678818942 	Validation Loss: 0.23056407164745374 	 time: 00:23:30
+Train Accuracy : 94.77669525146484 	Validation Accuracy : 91.89977264404297
+
+100%|██████████| 1796/1796 [22:00<00:00,  1.36it/s]
+100%|██████████| 1144/1144 [01:39<00:00, 11.53it/s]
+  0%|          | 0/1796 [00:00<?, ?it/s]
+
+Epoch 27 	Training Loss: 0.14214308556186903 	Validation Loss: 0.5357079009287545 	 time: 00:23:39
+Train Accuracy : 94.9883041381836 	Validation Accuracy : 82.10955810546875
+
+100%|██████████| 1796/1796 [21:53<00:00,  1.37it/s]
+100%|██████████| 1144/1144 [01:38<00:00, 11.67it/s]
+  0%|          | 0/1796 [00:00<?, ?it/s]
+
+Epoch 28 	Training Loss: 0.13260898183909905 	Validation Loss: 0.2149459716328706 	 time: 00:23:31
+Train Accuracy : 95.22775268554688 	Validation Accuracy : 92.22028350830078
+
+100%|██████████| 1796/1796 [21:31<00:00,  1.39it/s]
+100%|██████████| 1144/1144 [01:35<00:00, 11.93it/s]
+
+Epoch 29 	Training Loss: 0.13150178402533158 	Validation Loss: 0.1735658104628493 	 time: 00:23:07
+Train Accuracy : 95.1776351928711 	Validation Accuracy : 93.85198211669922
+Validation Loss Decreased( 219.69421770766422 ---> 198.5592871694996 ) 	 Saving The Model
+
+100%|██████████| 1796/1796 [21:33<00:00,  1.39it/s]
+100%|██████████| 1144/1144 [01:38<00:00, 11.62it/s]
+  0%|          | 0/1796 [00:00<?, ?it/s]
+
+Epoch 30 	Training Loss: 0.12626396362086523 	Validation Loss: 0.22748694864047736 	 time: 00:23:12
+Train Accuracy : 95.48390197753906 	Validation Accuracy : 92.22028350830078
+
+100%|██████████| 1796/1796 [21:39<00:00,  1.38it/s]
+100%|██████████| 1144/1144 [01:36<00:00, 11.89it/s]
+
+Epoch 31 	Training Loss: 0.1243195203532862 	Validation Loss: 0.15573396021900965 	 time: 00:23:15
+Train Accuracy : 95.51174926757812 	Validation Accuracy : 94.2599105834961
+Validation Loss Decreased( 198.5592871694996 ---> 178.15965049054705 ) 	 Saving The Model
+
+100%|██████████| 1796/1796 [22:13<00:00,  1.35it/s]
+100%|██████████| 1144/1144 [01:38<00:00, 11.56it/s]
+  0%|          | 0/1796 [00:00<?, ?it/s]
+
+Epoch 32 	Training Loss: 0.12209497421210111 	Validation Loss: 0.19751328618058758 	 time: 00:23:52
+Train Accuracy : 95.52288055419922 	Validation Accuracy : 93.26923370361328
+
+100%|██████████| 1796/1796 [21:36<00:00,  1.39it/s]
+100%|██████████| 1144/1144 [01:36<00:00, 11.83it/s]
+  0%|          | 0/1796 [00:00<?, ?it/s]
+
+Epoch 33 	Training Loss: 0.12278669627672056 	Validation Loss: 0.25568632156248966 	 time: 00:23:13
+Train Accuracy : 95.62311553955078 	Validation Accuracy : 91.05477905273438
+
+100%|██████████| 1796/1796 [21:38<00:00,  1.38it/s]
+100%|██████████| 1144/1144 [01:38<00:00, 11.62it/s]
+  0%|          | 0/1796 [00:00<?, ?it/s]
+
+Epoch 34 	Training Loss: 0.11644445447141527 	Validation Loss: 0.19130310058533873 	 time: 00:23:17
+Train Accuracy : 95.84585571289062 	Validation Accuracy : 93.06526947021484
+
+100%|██████████| 1796/1796 [21:47<00:00,  1.37it/s]
+100%|██████████| 1144/1144 [01:38<00:00, 11.57it/s]
+  0%|          | 0/1796 [00:00<?, ?it/s]
+
+Epoch 35 	Training Loss: 0.11643929763509502 	Validation Loss: 0.21698788530739277 	 time: 00:23:26
+Train Accuracy : 95.82915496826172 	Validation Accuracy : 92.62820434570312
+
+100%|██████████| 1796/1796 [22:49<00:00,  1.31it/s]
+100%|██████████| 1144/1144 [02:00<00:00,  9.53it/s]
+  0%|          | 0/1796 [00:00<?, ?it/s]
+
+Epoch 36 	Training Loss: 0.11314545146687183 	Validation Loss: 0.17937653658909178 	 time: 00:24:49
+Train Accuracy : 95.84585571289062 	Validation Accuracy : 94.11421966552734
+
+100%|██████████| 1796/1796 [28:41<00:00,  1.04it/s]
+100%|██████████| 1144/1144 [02:09<00:00,  8.87it/s]
+  0%|          | 0/1796 [00:00<?, ?it/s]
+
+Epoch 37 	Training Loss: 0.11227715401390395 	Validation Loss: 0.1841336501966603 	 time: 00:30:50
+Train Accuracy : 95.95166015625 	Validation Accuracy : 93.4149169921875
+
+100%|██████████| 1796/1796 [30:40<00:00,  1.02s/it]
+100%|██████████| 1144/1144 [02:10<00:00,  8.78it/s]
+  0%|          | 0/1796 [00:00<?, ?it/s]
+
+Epoch 38 	Training Loss: 0.1071929339383833 	Validation Loss: 0.17111435995329394 	 time: 00:32:50
+Train Accuracy : 96.10201263427734 	Validation Accuracy : 93.9102554321289
+
+100%|██████████| 1796/1796 [30:58<00:00,  1.04s/it]
+100%|██████████| 1144/1144 [02:10<00:00,  8.74it/s]
+  0%|          | 0/1796 [00:00<?, ?it/s]
+
+Epoch 39 	Training Loss: 0.10536505841217854 	Validation Loss: 0.17860585031031706 	 time: 00:33:09
+Train Accuracy : 96.24679565429688 	Validation Accuracy : 93.61888122558594
+
+100%|██████████| 1796/1796 [31:15<00:00,  1.04s/it]
+100%|██████████| 1144/1144 [02:11<00:00,  8.73it/s]
+  0%|          | 0/1796 [00:00<?, ?it/s]
+
+Epoch 40 	Training Loss: 0.1025733296694737 	Validation Loss: 0.16341808670263447 	 time: 00:33:26
+Train Accuracy : 96.35816955566406 	Validation Accuracy : 94.34732055664062
+
+100%|██████████| 1796/1796 [31:21<00:00,  1.05s/it]
+100%|██████████| 1144/1144 [02:12<00:00,  8.66it/s]
+  0%|          | 0/1796 [00:00<?, ?it/s]
+
+Epoch 41 	Training Loss: 0.1052557724369013 	Validation Loss: 0.1674421660797369 	 time: 00:33:34
+Train Accuracy : 96.18553924560547 	Validation Accuracy : 94.49301147460938
+
+100%|██████████| 1796/1796 [26:26<00:00,  1.13it/s]
+100%|██████████| 1144/1144 [02:00<00:00,  9.52it/s]
+  0%|          | 0/1796 [00:00<?, ?it/s]
+
+Epoch 42 	Training Loss: 0.10263119807659637 	Validation Loss: 0.20584173513718435 	 time: 00:28:26
+Train Accuracy : 96.21895599365234 	Validation Accuracy : 92.5407943725586
+
+100%|██████████| 1796/1796 [25:43<00:00,  1.16it/s]
+100%|██████████| 1144/1144 [01:59<00:00,  9.55it/s]
+  0%|          | 0/1796 [00:00<?, ?it/s]
+
+Epoch 43 	Training Loss: 0.10232017596648244 	Validation Loss: 0.19133936254487285 	 time: 00:27:43
+Train Accuracy : 96.28577423095703 	Validation Accuracy : 93.4149169921875
+
+100%|██████████| 1796/1796 [22:16<00:00,  1.34it/s]
+100%|██████████| 1144/1144 [01:33<00:00, 12.29it/s]
+  0%|          | 0/1796 [00:00<?, ?it/s]
+
+Epoch 44 	Training Loss: 0.09797717922651777 	Validation Loss: 0.17769178415356504 	 time: 00:23:49
+Train Accuracy : 96.62545776367188 	Validation Accuracy : 94.2599105834961
+
+100%|██████████| 1796/1796 [20:36<00:00,  1.45it/s]
+100%|██████████| 1144/1144 [01:32<00:00, 12.39it/s]
+
+Epoch 45 	Training Loss: 0.0962465678795243 	Validation Loss: 0.15445901458264635 	 time: 00:22:08
+Train Accuracy : 96.50294494628906 	Validation Accuracy : 94.46387481689453
+Validation Loss Decreased( 178.15965049054705 ---> 176.70111268254743 ) 	 Saving The Model
+
+100%|██████████| 1796/1796 [20:28<00:00,  1.46it/s]
+100%|██████████| 1144/1144 [01:33<00:00, 12.22it/s]
+  0%|          | 0/1796 [00:00<?, ?it/s]
+
+Epoch 46 	Training Loss: 0.09185824797468396 	Validation Loss: 0.17249739720020704 	 time: 00:22:01
+Train Accuracy : 96.7646713256836 	Validation Accuracy : 94.28904724121094
+
+100%|██████████| 1796/1796 [20:34<00:00,  1.45it/s]
+100%|██████████| 1144/1144 [01:34<00:00, 12.11it/s]
+  0%|          | 0/1796 [00:00<?, ?it/s]
+
+Epoch 47 	Training Loss: 0.08947356818272058 	Validation Loss: 0.16489796243608087 	 time: 00:22:09
+Train Accuracy : 96.80364990234375 	Validation Accuracy : 94.93006896972656
+
+100%|██████████| 1796/1796 [21:01<00:00,  1.42it/s]
+100%|██████████| 1144/1144 [01:35<00:00, 11.96it/s]
+  0%|          | 0/1796 [00:00<?, ?it/s]
+
+Epoch 48 	Training Loss: 0.09256357114334521 	Validation Loss: 0.18674146796817262 	 time: 00:22:37
+Train Accuracy : 96.90388488769531 	Validation Accuracy : 94.05594635009766
+
+100%|██████████| 1796/1796 [20:33<00:00,  1.46it/s]
+100%|██████████| 1144/1144 [01:34<00:00, 12.05it/s]
+  0%|          | 0/1796 [00:00<?, ?it/s]
+
+Epoch 49 	Training Loss: 0.08656281119721079 	Validation Loss: 0.18428602356302096 	 time: 00:22:08
+Train Accuracy : 96.90388488769531 	Validation Accuracy : 94.2016372680664
+
+100%|██████████| 1796/1796 [21:04<00:00,  1.42it/s]
+100%|██████████| 1144/1144 [01:38<00:00, 11.61it/s]
+  0%|          | 0/1796 [00:00<?, ?it/s]
+
+Epoch 50 	Training Loss: 0.08749571777711337 	Validation Loss: 0.15860075746543972 	 time: 00:22:43
+Train Accuracy : 96.93729400634766 	Validation Accuracy : 94.72611236572266