├── src
├── cover.png
└── teaser.gif
├── LICENSE
├── .gitignore
├── README.md
└── exps
├── toy_regression.py
└── notebooks
└── mnist_classification.ipynb
/src/cover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cvlab-epfl/iter_unc/HEAD/src/cover.png
--------------------------------------------------------------------------------
/src/teaser.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cvlab-epfl/iter_unc/HEAD/src/teaser.gif
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2024 CVLAB @ EPFL
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Byte-compiled / optimized / DLL files
2 | __pycache__/
3 | *.py[cod]
4 | *$py.class
5 |
6 | # C extensions
7 | *.so
8 |
9 | # Distribution / packaging
10 | .Python
11 | build/
12 | develop-eggs/
13 | dist/
14 | downloads/
15 | eggs/
16 | .eggs/
17 | lib/
18 | lib64/
19 | parts/
20 | sdist/
21 | var/
22 | wheels/
23 | share/python-wheels/
24 | *.egg-info/
25 | .installed.cfg
26 | *.egg
27 | MANIFEST
28 |
29 | # PyInstaller
30 | # Usually these files are written by a python script from a template
31 | # before PyInstaller builds the exe, so as to inject date/other infos into it.
32 | *.manifest
33 | *.spec
34 |
35 | # Installer logs
36 | pip-log.txt
37 | pip-delete-this-directory.txt
38 |
39 | # Unit test / coverage reports
40 | htmlcov/
41 | .tox/
42 | .nox/
43 | .coverage
44 | .coverage.*
45 | .cache
46 | nosetests.xml
47 | coverage.xml
48 | *.cover
49 | *.py,cover
50 | .hypothesis/
51 | .pytest_cache/
52 | cover/
53 |
54 | # Translations
55 | *.mo
56 | *.pot
57 |
58 | # Django stuff:
59 | *.log
60 | local_settings.py
61 | db.sqlite3
62 | db.sqlite3-journal
63 |
64 | # Flask stuff:
65 | instance/
66 | .webassets-cache
67 |
68 | # Scrapy stuff:
69 | .scrapy
70 |
71 | # Sphinx documentation
72 | docs/_build/
73 |
74 | # PyBuilder
75 | .pybuilder/
76 | target/
77 |
78 | # Jupyter Notebook
79 | .ipynb_checkpoints
80 |
81 | # IPython
82 | profile_default/
83 | ipython_config.py
84 |
85 | # pyenv
86 | # For a library or package, you might want to ignore these files since the code is
87 | # intended to run in multiple environments; otherwise, check them in:
88 | # .python-version
89 |
90 | # pipenv
91 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
92 | # However, in case of collaboration, if having platform-specific dependencies or dependencies
93 | # having no cross-platform support, pipenv may install dependencies that don't work, or not
94 | # install all needed dependencies.
95 | #Pipfile.lock
96 |
97 | # poetry
98 | # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
99 | # This is especially recommended for binary packages to ensure reproducibility, and is more
100 | # commonly ignored for libraries.
101 | # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
102 | #poetry.lock
103 |
104 | # pdm
105 | # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
106 | #pdm.lock
107 | # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
108 | # in version control.
109 | # https://pdm.fming.dev/#use-with-ide
110 | .pdm.toml
111 |
112 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
113 | __pypackages__/
114 |
115 | # Celery stuff
116 | celerybeat-schedule
117 | celerybeat.pid
118 |
119 | # SageMath parsed files
120 | *.sage.py
121 |
122 | # Environments
123 | .env
124 | .venv
125 | env/
126 | venv/
127 | ENV/
128 | env.bak/
129 | venv.bak/
130 |
131 | # Spyder project settings
132 | .spyderproject
133 | .spyproject
134 |
135 | # Rope project settings
136 | .ropeproject
137 |
138 | # mkdocs documentation
139 | /site
140 |
141 | # mypy
142 | .mypy_cache/
143 | .dmypy.json
144 | dmypy.json
145 |
146 | # Pyre type checker
147 | .pyre/
148 |
149 | # pytype static type analyzer
150 | .pytype/
151 |
152 | # Cython debug symbols
153 | cython_debug/
154 |
155 | # PyCharm
156 | # JetBrains specific template is maintained in a separate JetBrains.gitignore that can
157 | # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
158 | # and can be added to the global gitignore or merged into this file. For a more nuclear
159 | # option (not recommended) you can uncomment the following to ignore the entire idea folder.
160 | #.idea/
161 |
162 | **/.DS_Store
163 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Enabling Uncertainty Estimation in Iterative Neural Networks
2 |
3 | 
4 |
5 | [](https://arxiv.org/abs/2403.16732)
6 | [](https://www.python.org/downloads/release/python-31014/)
7 | [](https://pytorch.org/)
8 | [](https://github.com/cvlab-epfl/iter_unc/blob/main/LICENSE)
9 |
10 | ### [Project Page](https://www.norange.io/projects/unc_iter/) | [ICML Paper]() | [Poster](https://icml.cc/virtual/2024/poster/34213)
11 |
12 | > **For a quick tryout of the method, check the Colab notebooks below!**
13 |
14 | > **Please also refer to the [Zigzag](https://github.com/cvlab-epfl/zigzag) paper, which served as the foundation for our work.**
15 |
16 | ## Abstract
17 |
18 | Turning pass-through network architectures into iterative ones, which use their own output as input, is a well-known approach for boosting performance. In this paper, we argue that such architectures offer an additional benefit: The convergence rate of their successive outputs is highly correlated with the accuracy of the value to which they converge. Thus, we can use the convergence rate as a useful proxy for uncertainty. This results in an approach to uncertainty estimation that provides state-of-the-art estimates at a much lower computational cost than techniques like Ensembles, and without requiring any modifications to the original iterative model. We demonstrate its practical value by embedding it in two application domains: road detection in aerial images and the estimation of aerodynamic properties of 2D and 3D shapes.
19 |
20 | ## TL;DR
21 |
22 |
23 |
24 |
25 |
26 |
27 | **Uncertainty in recursive models:** Such models use their initial predictions as inputs to produce subsequent predictions. We display the output of three consecutive iterations of a network trained to compute distance maps to road pixels. **(Top:)** All roads are clearly visible. The three maps are similar and the per pixel variance is low. **(Bottom:)** The road in the red square is tree-covered. It is eventually detected properly but the variance is high.
28 |
29 | ## Experiments
30 |
31 | ### 1D Regression
32 |
33 | **Uncertainty Estimation for Regression:** The task is to regress $y$-axis values for $x$-axis data points drawn from the range $x \in [-1, 1.3]$ using a third-degree polynomial with added Gaussian noise. The method displays higher uncertainty or iteration variance for out-of-distribution inputs and lower for in-distribution samples.
34 |
35 | [](https://colab.research.google.com/github/cvlab-epfl/iter_unc/blob/main/exps/notebooks/toy_regression.ipynb)
36 |
37 | ### MNIST Classification
38 |
39 | **MNIST vs FashionMNIST:** We train the networks on MNIST and compute the accuracy and calibration metrics (rAULC). We then use the uncertainty measure they produce to classify images from the test sets of MNIST and FashionMNIST as being within the MNIST distribution or not to compute the OOD metrics, ROC- and PR-AUCs. We use a standard architecture with several convolution and pooling layers, followed by fully connected layers with LeakyReLU activations.
40 |
41 | [](https://colab.research.google.com/github/cvlab-epfl/iter_unc/blob/main/exps/notebooks/mnist_classification.ipynb)
42 |
43 | ### Delineation Experiments (TBD)
44 |
45 | In these experiments, we focus on the delineation task, particularly for road detection in aerial imagery. This task requires precise identification and outlining of narrow, intricate features within varied image datasets. Our experiments utilized the U-Net architecture, known for its efficacy in image segmentation. We employed it to classify pixels within the images as belonging to the target structures (roads) or not, producing a binary map as the final output. The networks were trained and tested on two public datasets, "RoadTracer" and "Massachusetts," which encompass a diverse range of urban and rural landscapes, thereby providing a comprehensive benchmark for our methods.
46 |
47 | ## Citation
48 |
49 | If you find this code useful, please consider citing our paper:
50 |
51 | > Durasov, Nikita, et al. "Enabling Uncertainty Estimation in Iterative Neural Networks", ICML, 2024.
52 |
53 | ```bibtex
54 | @inproceedings{
55 | durasov2024enabling,
56 | title={Enabling Uncertainty Estimation in Iterative Neural Networks},
57 | author={Nikita Durasov and Doruk Oner and Jonathan Donier and Hieu Le and Pascal Fua},
58 | booktitle={Forty-first International Conference on Machine Learning},
59 | year={2024}
60 | }
61 | ```
62 |
63 | > Durasov, Nikita, et al. "ZigZag: Universal Sampling-free Uncertainty Estimation Through Two-Step Inference." TMLR 20224.
64 |
65 | ```bibtex
66 | @article{durasov2024zigzag,
67 | title = {ZigZag: Universal Sampling-free Uncertainty Estimation Through Two-Step Inference},
68 | author = {Nikita Durasov and Nik Dorndorf and Hieu Le and Pascal Fua},
69 | journal = {Transactions on Machine Learning Research},
70 | issn = {2835-8856},
71 | year = {2024}
72 | }
73 | ```
74 |
--------------------------------------------------------------------------------
/exps/toy_regression.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | """simple_regression.ipynb
3 |
4 | Automatically generated by Colab.
5 |
6 | Original file is located at
7 | https://colab.research.google.com/drive/1687Kj81qQYGJ3BBoWiVYbtfHYrlm0DA6
8 |
9 | # Training Dataset
10 | """
11 |
12 | import numpy as np
13 |
14 | import matplotlib.cm as cm # Import cm for colormap
15 | import matplotlib.pyplot as plt
16 |
17 | seed = 42
18 |
19 | import torch
20 | torch.manual_seed(seed)
21 |
22 | import numpy as np
23 | np.random.seed(seed)
24 |
25 | import random
26 | random.seed(seed)
27 |
28 | ###### Generate Data ######
29 | def polynom(X):
30 | return 0 + X + -5 * X**2 + 1.5*X ** 3
31 |
32 | def generate(N=1000):
33 | X = np.random.uniform(-1, 1.5, N)
34 | Y = 0 + X + -5 * X**2 + 1.5*X ** 3
35 | Y += np.random.randn(Y.shape[0]) / 5
36 | return torch.tensor(X).float()[:, None], torch.tensor(Y)[:, None].float()
37 |
38 | X_data, Y_data = generate(100)
39 | Y_data += 3.5
40 | Y_data /= 15
41 | Y_data -= 0.2
42 |
43 | ###### Data Visualization ######
44 | fig, (ax) = plt.subplots(1, 1, figsize=(10, 6))
45 | X_min, X_max = -5, 5
46 |
47 | ax.grid()
48 | ax.scatter(X_data, Y_data, color="seagreen", label="data")
49 |
50 | Y_min, Y_max = -0.9, 0.7
51 | ax.fill_between([-1, 1.5], Y_min, Y_max, color='seagreen', alpha=0.1, label="In-distibution Region")
52 | ax.fill_between([1.5, X_max], Y_min, Y_max, color='red', alpha=0.1, label="Out-of-distibution Region")
53 | ax.fill_between([X_min, -1], Y_min, Y_max, color='red', alpha=0.1)
54 |
55 | ax.legend(fontsize=15, ncol=2, loc='upper left', framealpha=0.7)
56 | ax.grid()
57 | ax.set_xlim(X_min, X_max)
58 | ax.set_ylim(Y_min, Y_max)
59 | ax.set_yticks(np.linspace(Y_min, Y_max, 8).round(2))
60 | ax.set_yticklabels(np.linspace(Y_min, Y_max, 8).round(2), fontsize=15)
61 | ax.set_xticks(range(-5, 5, 1))
62 | ax.set_xticklabels(range(-5, 5, 1), fontsize=15)
63 | ax.grid()
64 |
65 | ###### Model Architechture ######
66 |
67 | import torch
68 | import numpy as np
69 | import matplotlib.pyplot as plt
70 | import torch.optim as optim
71 |
72 | A = -1 # initial value of the second argument
73 | class Net(torch.nn.Module):
74 |
75 | def __init__(self, hidden_layer=100):
76 | super().__init__()
77 |
78 | self.hidden_layer = hidden_layer
79 | self.fc1 = torch.nn.Linear(2, hidden_layer)
80 | self.fc2 = torch.nn.Linear(hidden_layer, 1)
81 | self.activation = torch.nn.LeakyReLU()
82 |
83 | def forward(self, x, y=None):
84 |
85 | if y is None:
86 | x = torch.concat([x, -A * torch.ones([x.shape[0], 1])], dim=1)
87 |
88 | else:
89 | x = torch.concat([x, y], dim=1)
90 |
91 | x = self.activation(self.fc1(x))
92 | x = self.fc2(x)
93 |
94 | return x
95 |
96 | ###### Optimization Step ######
97 | I = 3 # number of iterations
98 | def step(epoch, model, optimizer, criterion, X_data, Y_data, l_gradient_penalty):
99 |
100 | model.train()
101 | optimizer.zero_grad()
102 |
103 | Y_0 = network(X_data, -A*torch.ones_like(Y_data))
104 | loss = criterion(Y_0, Y_data)
105 |
106 | Y_t = Y_0
107 | for _ in range(I):
108 | Y_t = network(X_data, Y_t)
109 | loss += criterion(Y_t, Y_data)
110 |
111 | loss.backward()
112 | optimizer.step()
113 |
114 | return loss.item()
115 |
116 | epochs = 150
117 |
118 | network = Net(hidden_layer=128)
119 |
120 | criterion = torch.nn.MSELoss()
121 | optimizer = optim.Adam(network.parameters(), lr=0.05)
122 |
123 | network.train()
124 |
125 | ###### Training ######
126 | for epoch in range(epochs):
127 | network.train()
128 | step(epoch, network, optimizer, criterion, X_data, Y_data, 3e-4)
129 |
130 | ###### Visualize Final Result ######
131 | network.eval()
132 |
133 | X_min, X_max = -5, 5
134 | Xt = torch.linspace(X_min, X_max, 100)[:, None]
135 |
136 | Y_1 = network(Xt)
137 | Y_t = Y_1.detach()
138 |
139 | preds = [Y_t]
140 | for _ in range(I):
141 | Y_t = network(Xt, Y_t)
142 | Y_t = Y_t.detach()
143 | Y_final = Y_t
144 | preds.append(Y_final)
145 |
146 | preds = torch.stack(preds)
147 |
148 | error = torch.std(preds, dim=0).detach()
149 |
150 | # Create figure and subplots
151 | fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(20, 6))
152 |
153 | ax = ax1
154 | ax.grid()
155 |
156 | cmap = cm.get_cmap('winter', len(preds)) # 'winter' colormap goes from blue to green
157 |
158 | ax.scatter(X_data, Y_data, color="seagreen", label="data")
159 | for i, p in enumerate(preds):
160 | color = cmap(i)
161 | ax.plot(Xt, p, c=color, label=f"$y_{i}$")
162 |
163 | Y_min, Y_max = -0.9, 0.7
164 | ax.fill_between([-1, 1.5], Y_min, Y_max, color='seagreen', alpha=0.1, label="In-distibution Region")
165 | ax.fill_between([1.5, X_max], Y_min, Y_max, color='red', alpha=0.1, label="Out-of-distibution Region")
166 | ax.fill_between([X_min, -1], Y_min, Y_max, color='red', alpha=0.1)
167 | ax.fill_between(Xt[:, 0], preds.min(dim=0)[0][:, 0], preds.max(dim=0)[0][:, 0], alpha=0.4, color="skyblue", label="$\sigma_{pred}$")
168 |
169 | ax.legend(fontsize=15, ncol=2, loc='upper left', framealpha=0.7)
170 | ax.grid()
171 | ax.set_xlim(X_min, X_max)
172 | ax.set_ylim(Y_min, Y_max)
173 | ax.set_yticks(np.linspace(Y_min, Y_max, 8).round(2))
174 | ax.set_yticklabels(np.linspace(Y_min, Y_max, 8).round(2), fontsize=15)
175 | ax.set_xticks(range(-5, 5, 1))
176 | ax.set_xticklabels(range(-5, 5, 1), fontsize=15)
177 | ax.grid()
178 |
179 | ax = ax2
180 | ax.set_title("Iteration Variance")
181 | plt.plot(Xt[:, 0], error, c="dodgerblue", label="Iteration Variance")
182 | ax.fill_between([-1, 1.5], 0, 1, color='seagreen', alpha=0.1, label="In-distibution Region")
183 | ax.fill_between([1.5, X_max], 0, 1, color='red', alpha=0.1, label="Out-of-distibution Region")
184 | ax.fill_between([X_min, -1], 0, 1, color='red', alpha=0.1)
185 | ax.legend(fontsize=15, loc='upper left', framealpha=0.7)
186 | ax.grid(True)
187 | ax.set_xlim(-5, 5)
188 | ax.set_ylim(0, 1)
189 | ax.set_xticks(range(-5, 5, 1))
190 | ax.set_xticklabels(range(-5, 5, 1), fontsize=15)
191 |
192 | fig.suptitle(f"Epoch #{epoch}", fontsize=16)
193 |
194 | plt.tight_layout()
195 | plt.show()
196 |
197 |
--------------------------------------------------------------------------------
/exps/notebooks/mnist_classification.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "nbformat": 4,
3 | "nbformat_minor": 0,
4 | "metadata": {
5 | "colab": {
6 | "provenance": [],
7 | "gpuType": "T4"
8 | },
9 | "kernelspec": {
10 | "name": "python3",
11 | "display_name": "Python 3"
12 | },
13 | "language_info": {
14 | "name": "python"
15 | },
16 | "accelerator": "GPU"
17 | },
18 | "cells": [
19 | {
20 | "cell_type": "markdown",
21 | "source": [
22 | "# MNIST Classification with Iterative Uncertainty\n",
23 | "\n",
24 | "In this notebook, we will implement a simple neural network to classify handwritten digits from the MNIST dataset using PyTorch. On top of it, we will apply the iterative uncertainty approach and evaluate its uncertainty quality in terms of out-of-distribution detection."
25 | ],
26 | "metadata": {
27 | "id": "zhr7Isu5wkQj"
28 | }
29 | },
30 | {
31 | "cell_type": "code",
32 | "source": [
33 | "import torch\n",
34 | "import torchvision\n",
35 | "import numpy as np\n",
36 | "import random\n",
37 | "\n",
38 | "n_epochs = 3 # number of epochs for training\n",
39 | "batch_size_train = 64 # batch size for training\n",
40 | "batch_size_test = 1000 # batch size for testing\n",
41 | "learning_rate = 0.01 # learning rate for Adam\n",
42 | "momentum = 0.5 # optimizer momentum\n",
43 | "log_interval = 10 # logging interval for metrics\n",
44 | "device = \"cuda\"\n",
45 | "\n",
46 | "# fixing random seeds\n",
47 | "random_seed = 6\n",
48 | "torch.backends.cudnn.enabled = False\n",
49 | "torch.manual_seed(random_seed)\n",
50 | "np.random.seed(random_seed)\n",
51 | "random.seed(random_seed)"
52 | ],
53 | "metadata": {
54 | "id": "N17oLGkpHftI"
55 | },
56 | "execution_count": 1,
57 | "outputs": []
58 | },
59 | {
60 | "cell_type": "markdown",
61 | "source": [
62 | "# Train / Test data loading\n",
63 | "\n",
64 | "The MNIST dataset is a collection of handwritten digits commonly used for training and testing in the field of machine learning. It contains 70,000 grayscale images of handwritten digits, split into 60,000 training images and 10,000 test images. Each image is 28x28 pixels in size and represents a digit from 0 to 9."
65 | ],
66 | "metadata": {
67 | "id": "lx0CY2jPw_Fn"
68 | }
69 | },
70 | {
71 | "cell_type": "code",
72 | "source": [
73 | "train_loader = torch.utils.data.DataLoader(\n",
74 | " torchvision.datasets.MNIST('./MNIST/', train=True, download=True,\n",
75 | " transform=torchvision.transforms.Compose([\n",
76 | " torchvision.transforms.ToTensor(),\n",
77 | " torchvision.transforms.Normalize(\n",
78 | " (0.1307,), (0.3081,))\n",
79 | " ])),\n",
80 | " batch_size=batch_size_train, shuffle=True)\n",
81 | "\n",
82 | "test_loader = torch.utils.data.DataLoader(\n",
83 | " torchvision.datasets.MNIST('./MNIST/', train=False, download=True,\n",
84 | " transform=torchvision.transforms.Compose([\n",
85 | " torchvision.transforms.ToTensor(),\n",
86 | " torchvision.transforms.Normalize(\n",
87 | " (0.1307,), (0.3081,))\n",
88 | " ])),\n",
89 | " batch_size=batch_size_test, shuffle=True)"
90 | ],
91 | "metadata": {
92 | "id": "wIp68p_WHlVt"
93 | },
94 | "execution_count": 2,
95 | "outputs": []
96 | },
97 | {
98 | "cell_type": "code",
99 | "source": [
100 | "import matplotlib.pyplot as plt\n",
101 | "\n",
102 | "images, targets = next(iter(train_loader))\n",
103 | "\n",
104 | "# Number of images you want to display\n",
105 | "num_images = 10\n",
106 | "\n",
107 | "# Create a figure and a row of subplots\n",
108 | "fig, axes = plt.subplots(1, num_images, figsize=(15, 3))\n",
109 | "\n",
110 | "# Plot each image on a separate subplot\n",
111 | "for i in range(num_images):\n",
112 | " axes[i].imshow(images[i, 0], cmap='gray')\n",
113 | " axes[i].axis('off') # Hide axis\n",
114 | "\n",
115 | "plt.show()"
116 | ],
117 | "metadata": {
118 | "id": "90b10PHvxE7i",
119 | "outputId": "955d5cde-8ded-41b3-bc74-d979fc1b7e4e",
120 | "colab": {
121 | "base_uri": "https://localhost:8080/",
122 | "height": 155
123 | }
124 | },
125 | "execution_count": 3,
126 | "outputs": [
127 | {
128 | "output_type": "display_data",
129 | "data": {
130 | "text/plain": [
131 | ""
132 | ],
133 | "image/png": "iVBORw0KGgoAAAANSUhEUgAABJ4AAAB2CAYAAACJS1kWAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAfzUlEQVR4nO3dd5QUVfbA8YeEIUhaRBbJoKQjSzyukpOB7IIiSJIgwUMOi0heQF2SIBkkuyaWICBZYBEEXARciRIWBMk5g4TfH79znu8+t5vqmqqZ7prv56/7zu2uejOP6u4p+t6X7MGDBw8UAAAAAAAA4LFHEnsCAAAAAAAACCZuPAEAAAAAAMAX3HgCAAAAAACAL7jxBAAAAAAAAF9w4wkAAAAAAAC+4MYTAAAAAAAAfMGNJwAAAAAAAPiCG08AAAAAAADwRQqnD0yWLJmf80AEHjx44NmxWNfowboGk5frqhRrG024ZoOJdQ0m1jWYeI8NLq7ZYGJdg8nJuvKNJwAAAAAAAPiCG08AAAAAAADwBTeeAAAAAAAA4AtuPAEAAAAAAMAX3HgCAAAAAACAL7jxBAAAAAAAAF9w4wkAAAAAAAC+4MYTAAAAAAAAfMGNJwAAAAAAAPiCG08AAAAAAADwRYrEngAAAAAAAPjfWrZsKcYfffSRGB89elTH6dKlE7kjR47oeNCgQSK3fPlybyYIPATfeAIAAAAAAIAvuPEEAAAAAAAAXyR78ODBA0cPTJbM77nAIYdL5gjrGj2Cuq7ly5cX4yFDhui4UqVKIZ936NAhMT516pQYb9++XccDBgwQucuXL0c8T794ua5KRdfa2qpVq6bjevXqiVy2bNl03LBhQ5GbMmWKGN+5c8fV+SdOnKjjffv2uTpGJIJ6zUYiT548Oq5YsaLIFS1aVIyHDh2q4+vXr7s6X4kSJcR48+bNOk6dOrXINWvWTMcff/yx43OwrsHEugZTUnqPTWq4ZpVq0aKFjmfMmCFybn8/Z86cEeMnnnjC1XHcSorr2q1bNzHu37+/jjNmzOj4ON98840Y165dW8fXrl1zOTtvOFlXvvEEAAAAAAAAX3DjCQAAAAAAAL7gxhMAAAAAAAB8QY+nGJQUa2OTgiCt64IFC3Rcs2ZNkUuZMqWrY9o/k/n76tixo8hNmjTJ1Tn8kJT6T5i152XLlk3w869YsULHnTp1ErnDhw97fr4gXbPhpEqVSsddunQRuV69euk4S5YsYY9TunRpHe/cudPVXDJkyCDGBw8eDHn+H3/8Ucd2b6hwksq6JjWsazAlpfdYk91H0eyh9/TTT4vc2bNnxfidd97R8fTp00XO699nfCTFa7ZNmzZi/OGHH+o4Li5O5Nz+fn799VcxNj9D2/8e/BDUda1Ro4YYT548Wcc5c+YUObe/A/vnNXs8LV++3NUxvUKPJwAAAAAAACQabjwBAAAAAADAF5TaeaxBgwYhx0WKFBG5pUuX6tjcVvFhgvoVxaQulte1ZcuWYmx+vTRFihSOj3Pr1i0dHzhwQOQKFCggxmnSpNHxiRMnRK5KlSo6PnTokOPz+yHIZQBZs2YVY3Nr+3z58iX0dIT//Oc/YlyyZEnPzxHL12wkpk2bpuNWrVq5Po4XpXa2WbNm6bhZs2Yit2rVKh3bX4EPJ5bXtVy5cmL8+OOP67hWrVoi9/rrr+v4559/FrmNGzeGPMexY8fEeM2aNTo2yxuVUurKlSsPmXHCiYZ1HTdunBgnZlmT/TPYW3GPHj1ax3apVjQJ8nus7bHHHtPx/v37RS5z5sw6ttfrD3/4gxgnT55cx0OGDBG5gQMHxnueXomGazYhPPvsszpevXq1yJmfde2fYeHChWI8e/ZsHc+cOVPkMmXKFPI4N27c0PHzzz8vclu2bAk3dVeCtK5mWevatWtFzrzuwrULiYR9nHPnzunY/nz21VdfuTqHW5TaAQAAAAAAINFw4wkAAAAAAAC+4MYTAAAAAAAAfOG8+QpCatu2rY7N3jZKyXpHs4ZWqch63wRF5cqVxXjdunU6Xr9+vcj961//0vGgQYNCHsc+Zjj2Oewx3HnppZfE2Om/7aZNm4qx2ffs6tWrYZ/buHFjHdt9M+rUqaPjMWPGOJoLImf3kdi1a5eOE7vHk31+83WC6z68J598UowbNmwY8rHLli3TcZ48eUTu4MGDYnzmzBlX83nkkd/+j6xPnz4i16RJE0dzC7KCBQvq+NVXXxW5VKlS6djsFaKUfI01+8MopVTdunV1bPdtMI+plFIDBgzQsd0rKrFfB6KN/e/V7Ltib3F+9OhRX+di9guy56KU7FFq/htD4unevbuO7WvW7BVr9udSSqlGjRqJ8cSJE3Xcq1cvkYumHk9BZfbeU0qpCRMm6Nh+nTbZ/bjef/99MTb7pNq9+Ozr2/Tf//5Xx9u3bw/5OPxerly5dGz3Ugtn+fLlOs6QIYPI5c6dO+Tz7MdmyZJFx2+//bbIJXSPJyf4xhMAAAAAAAB8wY0nAAAAAAAA+CLZA4f7+SX2doXhxMXF6bhSpUoiZ26nHB/p06fX8YIFC0SuWrVqOrZ/TzNmzNBx69atPZlLLG9DaZbWKRVZmZwfzJKbKlWqJN5EVOytq1n+Ype0mNux2lv+Tpo0Scfjx48XObe/g7Fjx4pxzZo1dVy8eHGRs0te/ZaUtno2t3Lv1q2bL+cwv4Zul3iGY74X1KhRw5O5xNo161StWrXEePHixSEfa15fZqllfGTNmlWMzbKQ+vXrh3zeiRMnxNh8b/7pp58cnz+o6+qVevXqibH5mcguD8ufP3+CzMmJaFhXc+ttpZTq3LmzjsuUKSNyr7/+uo737dvn6nzh7N27V4wLFSokxteuXdPxCy+8IHJ+bLHuVlJ6jzVfi5966imRK1WqlI5v3rwZ9jgXLlzQcerUqUUubdq08Zmip6LhmvXDnDlzxNhpybjZRuJhdu7cKcbFihXTsfn5XSn5Gbpr166Oz+FWkNZ106ZNOv7zn/8c8nH2PM1yul9++cXx+czrXCmlOnbsqGP7NaFChQqOj+sFJ+vKN54AAAAAAADgC248AQAAAAAAwBfceAIAAAAAAIAvnO15HgXMHktm3wallJo8ebKO7d4QyZMnd3U+eyvDadOm6bhq1aoiZ9ZK21u3v/vuu67OHySDBg3ScWL3dLKZ8zHn+b/GkMzeahUrVhS5Q4cO6fiZZ54RObNvhFfsHk9mzbO9vfjs2bM9Pz/+n1nrbsZeSpHit7cte6vY6tWr+3JOhDZr1iwd2z1qbGaPA/s91ny9tftY2NuGmxYtWqTjvn37ilwkfZ0Qmv2+bW/pfebMGR1zDYZn90Fr27atju3+T5FszR1Kjhw5xLhp06Y6Lly4sMjZ/TkuX76s4yNHjsR7LnDGXPeWLVuKnNmLdPr06SL3sL5OiB7ma6ZS8tq7ePGiyLVo0cLxcc1/Hzlz5gx5jkuXLomc/bcrnDM/14TrN2X3p4ykr5Np+/btYtyqVStXxyldurSO7b/hTPbfbOb9EDf4xhMAAAAAAAB8wY0nAAAAAAAA+CJqS+3MLbOVUmrkyJE6btOmjcgdP35cxyVLlvTknPPnzxc5c/vC69evi9ywYcN0/MEHH7g+f1DYX8sfOHBggp5//fr1IXPhSv3seVJqF575te4lS5aInFmOapfJ+FFqZ78mmMKV6SD2mFv9RlLWs3btWh9mE0zfffedGJtf/bevJ3MLdrtEzizHVUqpBg0a6Lhhw4aO53Pr1i0djx8/XuT69++v4zt37jg+JqTatWuLsbn19ptvvhn2ub1799bx4cOHvZ1YEmKX4Xnhr3/9qxh36tQp5GNv374txgMGDNDxqVOnvJ0YQjK3ZB8xYkTIx+3cudPxMe2yyrRp0+r4+++/dz45eGLw4MFivHLlSh2fPHlS5Mx2Lrb8+fOL8eeff67jTJkyhXze3LlzxZhSWvfMEka7XNn05Zdf+j4XuxWRWbZbt25dkatVq5aOM2TIIHLnz5/XcfPmzb2cIt94AgAAAAAAgD+48QQAAAAAAABfcOMJAAAAAAAAvoiqHk/mtuf9+vUTObPfwJQpU0TO7KsUyfbJ5laCSik1Y8aM/3k+pZRavXq1ju0aebZsltatW+f7OcwtQ8P1dFJK9moK1+MJ3jHrimvWrCly9vXrlrn19BtvvOHJMRF97B4G9lbuodi9+L7++mvP5hR0Z8+eFWNz+1y7Z4zZK2TevHkilzJlSlfnt3tM9enTR8cPe72Hc2ZvvKlTp4qcuS30sWPHRM7uhzhnzhwfZodwsmfPruPy5cuLXIcOHULmwjF7qSql1MyZM13ODvGxatUqHW/cuFHkzPUsUaKEyJnXrN1rxt4CPVWqVDq2X7fhv6tXr4qx+TdmJN566y0xNj97h7N8+XJX58PvjRs3TsdmfzZb3rx5xdirvlotW7bUsd1n+tFHHw35PPP1Ytu2bSK3Y8cOHZv9x7zAN54AAAAAAADgC248AQAAAAAAwBeJWmqXO3duMZ48ebKO7S2bza8hdu/eXeTMbd3dnk8pWV5nb1/ZqFEjHZtbS+P3zDI4pdyX3pnbjZrlcog+n332mRjXr19fx02aNBE5s+Tp4MGDjs9RpkwZMZ4/f76Os2XLJnIHDhzQ8aeffur4HIgOFStW1PGSJUtEziwRCOf48eNivH379vhPLIlyus17JKV1mzZtEuO///3vOt66davInTt3zvFx4ZxZtrh7926RK1CggI7Nr+QrpdQ333zj67zwcGbJeu3atT05Zrt27cT4xRdf1PGkSZNEzvxMbr/WIn7u3bun427duomc+Vmrc+fOIleyZEkdT58+XeTi4uJCns8us0H0ssuc7Ws2nNatW+uYUjvvOC2ZW7FihRiXLVtWx/Y9h3A+//xzMTbbmaRJkybk8y5duiTGy5Yt07H978jpfRU3+MYTAAAAAAAAfMGNJwAAAAAAAPiCG08AAAAAAADwRaL2eKpWrZoYZ8qUScf2VqDffvutjt3WHtrbcufLl0+MzXPaWwvT18k5e7trs+dT5cqVRc6sV7Z7Q7FtduxYuHChGJu1xOXKlRO5ESNG6PjVV18Vubt37+r4hRdeEDm7Ptp+jTCNHz9ex6dPnw75OEQuefLkOrb7bu3Zs0fH9nbB4bzyyitibP4bCbcdrO3MmTM6tv9tIbwUKX77ONCjRw+R69u3ryfnMLcatntu3b9/35NzwDmzx57Z41Ip+d48YMAAkevUqZMYd+nSxYfZIZw5c+boOFyPpx9++EGMN2zYoOORI0eKXM+ePcW4evXqOrZ7Bv3444867t+/v8gtXrw45HwQme+//16Mzf6H7777rsg1btxYxxUqVAh7XLOnm9kTE/5Jnz69jtOlS+f4ee3bt9ex3eMp3PtmmzZtxHj27NmOzwnnjh49quOhQ4eKXL9+/XT81FNPiZx5/dq9aOvUqRPyfPbn5XB/C5l/i9l/UyVW31O+8QQAAAAAAABfcOMJAAAAAAAAvkj2INx3tMwHWtvpulW4cGEd26UzuXLlCvk8c7vWSLYdNOddpEgRkTNLC2z2doXmV9LsbYfNMsDLly87nptbDpfMEa/WNZqtW7dOx3apn2nw4MFiPGjQIJ9m9L8FaV07dOigY3ObdKUiK50y2T+T+fsyv/avlFLFixd3dQ4/eLmuSiXM2pplz127dhW5WrVq6bhUqVIiZ5ZYmNs+KyVfU2vUqCFyZmmkUkrlzZs3kulqZonYmDFjXB0jErF8zT7yiPx/J7PsJlzplP3+V6hQIR2He09VSqkFCxbo+LXXXhO5aCq1i+V19UrKlCl1vGnTJpGzy/JefvllHa9cudLXecVHkNbVvNbi4uJCPs4sX1dKqdu3bzs+h3lcu7xy+PDhOr53757I7dy5U8d2eYcfbSti8T3WD2Zpld0uxLZ582Ydm9uxK5Uwf8c4FWvXbObMmXVcv359kTM/S9l/jzoV7nOwrUSJEmK8a9cuV+f0Q6ytq1ujRo3Scffu3UXO7Wce+7ObeZwTJ06InFmGbZdd+8HJuvKNJwAAAAAAAPiCG08AAAAAAADwBTeeAAAAAAAA4IsE7/FkbufYtGlTx88zzx9JbagXz3vYc82ayiFDhojcw+qs3UgqtbFecfr7oseTP3bs2CHGf/rTn1wdJ9w1af/uPvnkEx1PmTJF5Ox+JX6Lhf4T5ja/Ssn+e88++6yrY9o/95UrV3Rs9/lKnjy5q3PY24G/8847Orb7jvgh1q5Z8/f84Ycfipy5ZbNt4sSJOn7vvfdEzuwFZPcQsP9dmVq2bCnG5vbwiS3W1tVvZg8npZSaP3++GG/YsEHHVapUSYgpucK6eqdRo0Y6/tvf/iZy5rbhZr9HpeRnYq/6usXCe2xCMLdZ/+KLLxw/b+zYsWLcrVs3z+YUX7F2zfbr10/H9t8Qbv8eDXWMhx2HHk+JL2PGjDq2+1N79W9gyZIlOh46dKjIbdu2zdU53KLHEwAAAAAAABINN54AAAAAAADgC248AQAAAAAAwBcpEvqEzZo1i/cx3NZzxqcONNxzc+TIoePJkyeLnNn/YsKECa7PD/fWr1+v48qVKyfaPOAf+/ps0qSJjosWLSpytWrV0vHp06f9nViMGDBggBi77etkstfErHWPj9WrV+t43LhxIpcQfZ1iSYoU8i1++PDhOrZ7Op07d07HzZs3F7mvv/5ax3fv3g15PrPHiFKyV5hS8t+E3X/iH//4h45Zx+iyaNEiMX777bfFuE+fPjouV66cyCV0Tz0kjM8++0zH9vvoypUrdWz2h1NKqevXr+t47ty5Ps0uaUidOrUYv/jiiyEfa/9t8vTTT+u4Xbt2IhdNPZ6inf1ZqXfv3ok0k9+bN2+eGL/55ps63rhxY0JPJ0mIi4sTY/u90gtmX2ml5LqePXvW8/N5jW88AQAAAAAAwBfceAIAAAAAAIAvkj1wuJ+fV9sV9ujRI2Ru6dKlOr506ZLjY65Zs0bHdlnNd999p2Nz+1ellLp161bIY2bPnl2Mq1WrpmOzVEcppUqVKqXjDBkyiNyZM2d0XLVqVZHbs2dPyPOHk1S2oXRr3bp1Yuy0vG7w4MFibG+F6rcgrWv58uV1/OWXX4pcpkyZdHzx4kWRmzRpko7trdntn+nRRx/VcZcuXUSuWLFiIedmfv3Yfk3wQ7Ru9Zw7d24d21uuZsmSxZNzeMH+92OWc3m1Hbdb0X7N2mUA4cqezC3QDx8+7Mn57ePkyZMn5GPN9+79+/d7cn63on1dE1uNGjXEePHixTqeNWuWyJllAImNdU0YQ4YM0XHfvn1Fbu/evTquXr26yJ08edLV+aL1PdZvHTp0EGOzncfmzZtFzv67ZdSoUTpu3LixyKVNm9arKcZbtF+zCxYsEOO6deuGfOzy5ct1fOPGDZFr0KCBo/PZP0Mkvx/znPbfo/ZnQL9F+7pGomDBgjoeOXKkyNWsWVPH8Vk705gxY8S4Z8+ero7jByc/E994AgAAAAAAgC+48QQAAAAAAABfcOMJAAAAAAAAvkjx8Id4y6wrdsve6jN//vw63r17t8iZ9ZV2P5lw7O1hd+7cqWP7ZzB7GLz//vsilzVrVh2vXbtW5F5++WUdb9myxfHcEJ7Tnk629evXezqPpKxVq1Y6Nns6KSX7t9WuXVvk3F4Hn376qRibPUjmzJkjcmavg6S89be5hXI09XSyma/vSimVI0cOHR87diyhpxNYfvRJeOONN8TY7L9nn8/sM5LQ/fUQGbNXiVLys5XdtwdJz4YNG3Tcq1cvkStSpIiOO3bsKHJ2Pyj8XuHChXU8YMAAkTOvQ7vvpd03N3ny5DreunWrhzMMHvN3pZT8N1yiRAmRC/c+avYlzZs3r+Pnmb2ZzGtLKaVeeumlkM+zpUuXTsd2L1yzv6pt6tSpOj548KDj8yUVLVu21LF5zyESR44cEePLly+LcfHixV0dNxrxjScAAAAAAAD4ghtPAAAAAAAA8EWCl9q59cQTT+jY3p43derUOra3toykvM6tadOm6djewnTYsGE6vnnzpsgdOHDA34klEV6VZVBq5506dero+NtvvxW5pk2b6vjo0aOenM/8CrFSSt27d0/Hhw4dEjlz69O2bduKXFIqtStdunRiT8GRYsWKifG+fft0/NFHH4ncxIkTdbx//35/JxYwuXPn1rF9zbh17dq1kDl7291z5855ck74L3369GJslqKY/46QNK1evVrHdjl0gQIFdFy2bNkEm1OsSpMmjRiPHTtWx9myZRO5wYMH63jbtm0iV69ePTE2S5uHDx8e73kGmVlap5RsvWILt518xYoVQz4u3PPMz9N2WWT79u3FeODAgTo2S/tsadOmFePu3buHfOxf/vIXHZttLJRKmqV3P//8sxib7R/CeeQR+V0f87OsXTJ5//59MTZL8cqUKSNy5jqH+8wVLfjGEwAAAAAAAHzBjScAAAAAAAD4ghtPAAAAAAAA8EXM9Hgy61bN7USVUmr8+PE6TuxtmHft2iXGdl01vFG5cmUdm/82IlWlShUPZoNwTp06JcZO+zrZ280+88wzYly/fn0d21t4Z86cWcf2trEtWrTQ8cmTJx3NBdHD7Olnb8edMmVKHb/11lsJNqcg+Oc//6njhg0bityOHTt0fOHChZDHyJAhgxiHWwO7V0W47ZwRXapWrSrGmTJl0vFPP/2UwLOJbUWLFtVxnjx5RM58j7M/927ZskXHvXr18ml27mTPnl3Hdi8Zk93/Eb/XtWtXMX7++ed1bPekHD16dMjjmH2ClFLqzp07Op4/f348Zhh8zZs39/0c58+f1/HHH38scuZ1Yq6bUkp98MEHYmz2Apo5c6bIhev5FE6+fPl0bPdY7t27t6tjxrJI+nOZ7L5NZl9L+zNX586dQ56jQoUKIpcxY0Yd0+MJAAAAAAAASRY3ngAAAAAAAOCLmCm1M7++3bp1a5GbO3duQk8HicwstYvE+vXrw47hjbNnz+rY3IpVKaWuXr2q408++UTkzPK6ggULipxdhhDu663m68W0adNE7ocffgj5PMTP9evXdbxw4UKRa9OmjY4LFSokcv369RPjmjVr6jhdunSOz3/lyhXHj00KzK9yK6XU5cuXdWx+PVspWS61atUqkTO/vm/Gtj/+8Y9ibJcHmRYvXizG9+7dC/lYJK6cOXOKcY8ePcT4xo0bOravZUh26Zn5GeSxxx5zfJwVK1Z4NaV4M0vrlJKlf3YOkXnllVdC5kaNGiXG5merBg0aiFyzZs3E2CyR2rlzZzxmGHx79+71/JgXL14U45EjR+p4xIgRro9rfu4qVaqUyJllm+FKYMPx43eRVD333HP/Mw46vvEEAAAAAAAAX3DjCQAAAAAAAL7gxhMAAAAAAAB8keyBw30AkyVL5vdc4JDTrRudiNV1dfs7GDx4sBgPGjTIg9l4I0jrWqNGDR2PGzdO5MytWSNh/0y//PKLjpcuXSpyEyZM0PGuXbtcnc8rXq6rUt6trdkjxNyiORK7d+8W4z59+uj4q6++cjcxJXsTVKtWTeTat2+v40uXLomcuf340aNHXZ/fqVi7Zs3tlGfPni1yZl+tVKlSuTq+/TPcvHlTjIcPH67jYcOGidzdu3ddndMPsbaufkifPr2OJ0+eLHKNGjUSY3P77xYtWvg7sXiIhnWdMmWKGKdOnVrHdh+ecMx+eqdOnQr5uG3btomx2b8tLi5O5OzeXWYfGrtnX6tWrXRs94tx2tcpd+7cYnz8+HFHz7NF63usW5UqVdLx2rVrRc7s42T38DH7KLZr107kDh48KMbm6/358+fdT9Zn0XDNJk+eXIy7d++u4/fee0/k9uzZo+O6deuKnPl++Ouvv4rchQsXXM0tElmzZtWx3TuzQ4cOIZ9n9nWaM2eOyN2/f9/VXKJhXd0yP+cqpVSnTp10/Pjjj4d8nj3PSH4H5mfdZcuWiZx5rdufuRKak5+JbzwBAAAAAADAF9x4AgAAAAAAgC8otYtBsfwVRbcqV64sxuvWrXP8XLO8LppK62xBXdcnn3xSjKdOnarjokWLitzy5ct1nD9/fpEzyzmUkl/5vX37drzn6ZdoLQMoX768ju1SRbPMxi6xWLJkiY4XLVokcpcvX/ZkbuGYW47funVL5K5du+b7+U1BumbNEqmBAweKXJ48eUI+z1zzefPmidyaNWvE2M5HqyCtq1Pm64FS8vU2V65cIrd161YxNt+f79y54/3kPBIN65otWzYxNksj3G5xHqtOnz4txm7XJ1rfY90yWxXYJetmaZP9fpchQwYd//vf/xa51q1bi3FityBwKhquWXgvSOtqlha/9tprIlenTh0d23/HRvI76Nmzp47HjBkT2QQTEKV2AAAAAAAASDTceAIAAAAAAIAvuPEEAAAAAAAAX9DjKQYFqTbWqfj8zPR4QmIKWv8J/IZrNpiCuq5m7zallBoyZIiO27dvL3LmFuuTJk0SubFjx4qxucV7NAvquiZ1QXuPzZEjh46/+OILkXvuued0fOjQIZGbMWOGjkeNGiVy0dx7LRyu2WBiXYOJHk8AAAAAAABINNx4AgAAAAAAgC8otYtBSeUriubWk+vWrXP8PLO0TqnoLq8zJZV1TWqCVgaA33DNBlNQ13XKlCli3KZNGx2PHj1a5EaOHKlje9v7WBXUdU3qeI8NLq7ZYGJdg4lSOwAAAAAAACQabjwBAAAAAADAF9x4AgAAAAAAgC/o8RSDqI2VPZ/MXlBKxe7PxLoGE/0ngotrNphY12BiXYOJ99jg4poNJtY1mOjxBAAAAAAAgETDjScAAAAAAAD4glK7GMRXFIOJdQ0mygCCi2s2mFjXYGJdg4n32ODimg0m1jWYKLUDAAAAAABAouHGEwAAAAAAAHzBjScAAAAAAAD4wnGPJwAAAAAAACASfOMJAAAAAAAAvuDGEwAAAAAAAHzBjScAAAAAAAD4ghtPAAAAAAAA8AU3ngAAAAAAAOALbjwBAAAAAADAF9x4AgAAAAAAgC+48QQAAAAAAABfcOMJAAAAAAAAvvg/5qJZGsmbcAoAAAAASUVORK5CYII=\n"
134 | },
135 | "metadata": {}
136 | }
137 | ]
138 | },
139 | {
140 | "cell_type": "markdown",
141 | "source": [
142 | "## NN Architechture (Iterative schema)\n",
143 | "\n",
144 | "We define a simple neural network model with several Conv2D layers followed by pooling layers and some fully connected layers. The input layer takes 28x28 MNIST images. The hidden layers have (320, 50) and (50, 50) units respectively, and the output layer has 10 units (one for each digit).\n",
145 | "\n",
146 | "The only difference from the common architecture is that the forward function, in addition to taking an input image, can also take the output from the previous step. Therefore, our model can process inputs iteratively.\n"
147 | ],
148 | "metadata": {
149 | "id": "wpdY17tRxRTG"
150 | }
151 | },
152 | {
153 | "cell_type": "code",
154 | "source": [
155 | "import torch.nn as nn\n",
156 | "import torch.nn.functional as F\n",
157 | "import torch.optim as optim\n",
158 | "\n",
159 | "class Net(nn.Module):\n",
160 | " def __init__(self):\n",
161 | " super(Net, self).__init__()\n",
162 | " self.conv1 = nn.Conv2d(1, 10, kernel_size=5)\n",
163 | " self.conv2 = nn.Conv2d(10, 20, kernel_size=5)\n",
164 | " self.fc1 = nn.Linear(320, 50)\n",
165 | " self.fc2 = nn.Linear(50, 50)\n",
166 | " self.fc3 = nn.Linear(50, 10)\n",
167 | " self.activation = nn.ELU()\n",
168 | "\n",
169 | " self.cf = nn.Linear(10, 50)\n",
170 | "\n",
171 | " def forward(self, x, pred_prob=None):\n",
172 | " x = self.activation(F.max_pool2d(self.conv1(x), 2))\n",
173 | " x = self.activation(F.max_pool2d(self.conv2(x), 2))\n",
174 | " x = x.view(-1, 320)\n",
175 | " x = self.activation(self.fc1(x))\n",
176 | "\n",
177 | " # iterative part, if \"pred_prob\"\n",
178 | " # is not None, we use it for inference\n",
179 | " if pred_prob is not None:\n",
180 | " pred_prob = torch.nn.functional.softmax(pred_prob, 1)\n",
181 | " x += self.activation(self.cf(pred_prob))\n",
182 | "\n",
183 | " x = self.activation(self.fc2(x))\n",
184 | " x = self.fc3(x)\n",
185 | " return F.log_softmax(x)"
186 | ],
187 | "metadata": {
188 | "id": "t3CXPKqeHlzW"
189 | },
190 | "execution_count": 4,
191 | "outputs": []
192 | },
193 | {
194 | "cell_type": "markdown",
195 | "source": [
196 | "# Model Training"
197 | ],
198 | "metadata": {
199 | "id": "sGGLrajiykjK"
200 | }
201 | },
202 | {
203 | "cell_type": "code",
204 | "source": [
205 | "network = Net().to(device)\n",
206 | "optimizer = optim.Adam(network.parameters(), lr=learning_rate)\n",
207 | "\n",
208 | "train_losses = []\n",
209 | "train_counter = []\n",
210 | "test_losses = []\n",
211 | "test_counter = [i*len(train_loader.dataset) for i in range(n_epochs + 1)]"
212 | ],
213 | "metadata": {
214 | "id": "Av8yDtCaHwE1"
215 | },
216 | "execution_count": 5,
217 | "outputs": []
218 | },
219 | {
220 | "cell_type": "code",
221 | "source": [
222 | "# helper function for training inference\n",
223 | "def inference_train(x, N = 3):\n",
224 | " preds = []\n",
225 | " pred = None\n",
226 | " for _ in range(N):\n",
227 | " pred = network(x, pred)\n",
228 | " preds.append(pred)\n",
229 | " return torch.cat(preds)\n",
230 | "\n",
231 | "# helper function for testing inference\n",
232 | "def inference_test(x, N = 3):\n",
233 | " preds = []\n",
234 | " pred = None\n",
235 | " for _ in range(N):\n",
236 | " pred = torch.nn.functional.softmax(network(x, pred), 1)\n",
237 | " preds.append(pred)\n",
238 | "\n",
239 | " # similar to ensembles, final predictions\n",
240 | " # is an average of predictions\n",
241 | " return sum(preds) / N"
242 | ],
243 | "metadata": {
244 | "id": "xdh7CeqpH8Rs"
245 | },
246 | "execution_count": 6,
247 | "outputs": []
248 | },
249 | {
250 | "cell_type": "code",
251 | "source": [
252 | "def train(epoch):\n",
253 | " network.train()\n",
254 | " for batch_idx, (data, target) in enumerate(train_loader):\n",
255 | "\n",
256 | " data = data.to(device)\n",
257 | " target = target.to(device)\n",
258 | "\n",
259 | " optimizer.zero_grad()\n",
260 | " output = inference_train(data)\n",
261 | "\n",
262 | " # For further details, see Eq. 4 in https://arxiv.org/pdf/2403.16732\n",
263 | " # The first input with an additional \"blank\" channel, the first term in Eq. 1\n",
264 | " loss = F.nll_loss(output, target.tile(3))\n",
265 | "\n",
266 | " loss.backward()\n",
267 | " optimizer.step()\n",
268 | " if batch_idx % log_interval == 0:\n",
269 | " print('Train Epoch: {} [{}/{} ({:.0f}%)]\\tLoss: {:.6f}'.format(\n",
270 | " epoch, batch_idx * len(data), len(train_loader.dataset),\n",
271 | " 100. * batch_idx / len(train_loader), loss.item()))\n",
272 | " train_losses.append(loss.item())\n",
273 | " train_counter.append(\n",
274 | " (batch_idx*64) + ((epoch-1)*len(train_loader.dataset)))\n",
275 | "\n",
276 | "def test():\n",
277 | " network.eval()\n",
278 | " test_loss = 0\n",
279 | " correct = 0\n",
280 | " with torch.no_grad():\n",
281 | " for data, target in test_loader:\n",
282 | " data = data.to(device)\n",
283 | " target = target.to(device)\n",
284 | " output = inference_test(data)\n",
285 | " test_loss += F.nll_loss(output, target, size_average=False).item()\n",
286 | " pred = output.data.max(1, keepdim=True)[1]\n",
287 | " correct += pred.eq(target.data.view_as(pred)).sum()\n",
288 | " test_loss /= len(test_loader.dataset)\n",
289 | " test_losses.append(test_loss)\n",
290 | " print('\\nTest set: Avg. loss: {:.4f}, Accuracy: {}/{} ({:.0f}%)\\n'.format(\n",
291 | " test_loss, correct, len(test_loader.dataset),\n",
292 | " 100. * correct / len(test_loader.dataset)))"
293 | ],
294 | "metadata": {
295 | "id": "l8J7gph4IBK-"
296 | },
297 | "execution_count": 7,
298 | "outputs": []
299 | },
300 | {
301 | "cell_type": "code",
302 | "source": [
303 | "test()\n",
304 | "for epoch in range(1, n_epochs + 1):\n",
305 | " train(epoch)\n",
306 | " test()\n",
307 | "\n",
308 | "for param_group in optimizer.param_groups:\n",
309 | " param_group['lr'] = 1e-3\n",
310 | "\n",
311 | "for _ in range(2):\n",
312 | " train(epoch)\n",
313 | " test()"
314 | ],
315 | "metadata": {
316 | "colab": {
317 | "base_uri": "https://localhost:8080/"
318 | },
319 | "id": "SQwPqCUtIELo",
320 | "outputId": "219030a6-b56a-4031-d1e0-9662e267e33f"
321 | },
322 | "execution_count": 8,
323 | "outputs": [
324 | {
325 | "output_type": "stream",
326 | "name": "stderr",
327 | "text": [
328 | ":31: UserWarning: Implicit dimension choice for log_softmax has been deprecated. Change the call to include dim=X as an argument.\n",
329 | " return F.log_softmax(x)\n",
330 | "/usr/local/lib/python3.10/dist-packages/torch/nn/_reduction.py:42: UserWarning: size_average and reduce args will be deprecated, please use reduction='sum' instead.\n",
331 | " warnings.warn(warning.format(ret))\n"
332 | ]
333 | },
334 | {
335 | "output_type": "stream",
336 | "name": "stdout",
337 | "text": [
338 | "\n",
339 | "Test set: Avg. loss: -0.1003, Accuracy: 1781/10000 (18%)\n",
340 | "\n",
341 | "Train Epoch: 1 [0/60000 (0%)]\tLoss: 2.312376\n",
342 | "Train Epoch: 1 [640/60000 (1%)]\tLoss: 1.144794\n",
343 | "Train Epoch: 1 [1280/60000 (2%)]\tLoss: 0.467108\n",
344 | "Train Epoch: 1 [1920/60000 (3%)]\tLoss: 0.602299\n",
345 | "Train Epoch: 1 [2560/60000 (4%)]\tLoss: 0.497253\n",
346 | "Train Epoch: 1 [3200/60000 (5%)]\tLoss: 0.241655\n",
347 | "Train Epoch: 1 [3840/60000 (6%)]\tLoss: 0.283207\n",
348 | "Train Epoch: 1 [4480/60000 (7%)]\tLoss: 0.301319\n",
349 | "Train Epoch: 1 [5120/60000 (9%)]\tLoss: 0.293853\n",
350 | "Train Epoch: 1 [5760/60000 (10%)]\tLoss: 0.265691\n",
351 | "Train Epoch: 1 [6400/60000 (11%)]\tLoss: 0.175180\n",
352 | "Train Epoch: 1 [7040/60000 (12%)]\tLoss: 0.286978\n",
353 | "Train Epoch: 1 [7680/60000 (13%)]\tLoss: 0.053208\n",
354 | "Train Epoch: 1 [8320/60000 (14%)]\tLoss: 0.179960\n",
355 | "Train Epoch: 1 [8960/60000 (15%)]\tLoss: 0.142399\n",
356 | "Train Epoch: 1 [9600/60000 (16%)]\tLoss: 0.080546\n",
357 | "Train Epoch: 1 [10240/60000 (17%)]\tLoss: 0.230218\n",
358 | "Train Epoch: 1 [10880/60000 (18%)]\tLoss: 0.307157\n",
359 | "Train Epoch: 1 [11520/60000 (19%)]\tLoss: 0.316138\n",
360 | "Train Epoch: 1 [12160/60000 (20%)]\tLoss: 0.254721\n",
361 | "Train Epoch: 1 [12800/60000 (21%)]\tLoss: 0.171003\n",
362 | "Train Epoch: 1 [13440/60000 (22%)]\tLoss: 0.273300\n",
363 | "Train Epoch: 1 [14080/60000 (23%)]\tLoss: 0.064190\n",
364 | "Train Epoch: 1 [14720/60000 (25%)]\tLoss: 0.292505\n",
365 | "Train Epoch: 1 [15360/60000 (26%)]\tLoss: 0.099401\n",
366 | "Train Epoch: 1 [16000/60000 (27%)]\tLoss: 0.321094\n",
367 | "Train Epoch: 1 [16640/60000 (28%)]\tLoss: 0.156088\n",
368 | "Train Epoch: 1 [17280/60000 (29%)]\tLoss: 0.551294\n",
369 | "Train Epoch: 1 [17920/60000 (30%)]\tLoss: 0.109925\n",
370 | "Train Epoch: 1 [18560/60000 (31%)]\tLoss: 0.060247\n",
371 | "Train Epoch: 1 [19200/60000 (32%)]\tLoss: 0.017538\n",
372 | "Train Epoch: 1 [19840/60000 (33%)]\tLoss: 0.154289\n",
373 | "Train Epoch: 1 [20480/60000 (34%)]\tLoss: 0.164849\n",
374 | "Train Epoch: 1 [21120/60000 (35%)]\tLoss: 0.104086\n",
375 | "Train Epoch: 1 [21760/60000 (36%)]\tLoss: 0.261193\n",
376 | "Train Epoch: 1 [22400/60000 (37%)]\tLoss: 0.080790\n",
377 | "Train Epoch: 1 [23040/60000 (38%)]\tLoss: 0.309249\n",
378 | "Train Epoch: 1 [23680/60000 (39%)]\tLoss: 0.038709\n",
379 | "Train Epoch: 1 [24320/60000 (41%)]\tLoss: 0.208796\n",
380 | "Train Epoch: 1 [24960/60000 (42%)]\tLoss: 0.018224\n",
381 | "Train Epoch: 1 [25600/60000 (43%)]\tLoss: 0.165220\n",
382 | "Train Epoch: 1 [26240/60000 (44%)]\tLoss: 0.111875\n",
383 | "Train Epoch: 1 [26880/60000 (45%)]\tLoss: 0.081600\n",
384 | "Train Epoch: 1 [27520/60000 (46%)]\tLoss: 0.040166\n",
385 | "Train Epoch: 1 [28160/60000 (47%)]\tLoss: 0.168901\n",
386 | "Train Epoch: 1 [28800/60000 (48%)]\tLoss: 0.041811\n",
387 | "Train Epoch: 1 [29440/60000 (49%)]\tLoss: 0.152959\n",
388 | "Train Epoch: 1 [30080/60000 (50%)]\tLoss: 0.113740\n",
389 | "Train Epoch: 1 [30720/60000 (51%)]\tLoss: 0.089509\n",
390 | "Train Epoch: 1 [31360/60000 (52%)]\tLoss: 0.188480\n",
391 | "Train Epoch: 1 [32000/60000 (53%)]\tLoss: 0.253904\n",
392 | "Train Epoch: 1 [32640/60000 (54%)]\tLoss: 0.244142\n",
393 | "Train Epoch: 1 [33280/60000 (55%)]\tLoss: 0.286333\n",
394 | "Train Epoch: 1 [33920/60000 (57%)]\tLoss: 0.075342\n",
395 | "Train Epoch: 1 [34560/60000 (58%)]\tLoss: 0.195837\n",
396 | "Train Epoch: 1 [35200/60000 (59%)]\tLoss: 0.148247\n",
397 | "Train Epoch: 1 [35840/60000 (60%)]\tLoss: 0.240426\n",
398 | "Train Epoch: 1 [36480/60000 (61%)]\tLoss: 0.056933\n",
399 | "Train Epoch: 1 [37120/60000 (62%)]\tLoss: 0.191502\n",
400 | "Train Epoch: 1 [37760/60000 (63%)]\tLoss: 0.144343\n",
401 | "Train Epoch: 1 [38400/60000 (64%)]\tLoss: 0.178543\n",
402 | "Train Epoch: 1 [39040/60000 (65%)]\tLoss: 0.156982\n",
403 | "Train Epoch: 1 [39680/60000 (66%)]\tLoss: 0.231199\n",
404 | "Train Epoch: 1 [40320/60000 (67%)]\tLoss: 0.193805\n",
405 | "Train Epoch: 1 [40960/60000 (68%)]\tLoss: 0.430056\n",
406 | "Train Epoch: 1 [41600/60000 (69%)]\tLoss: 0.039209\n",
407 | "Train Epoch: 1 [42240/60000 (70%)]\tLoss: 0.271172\n",
408 | "Train Epoch: 1 [42880/60000 (71%)]\tLoss: 0.039059\n",
409 | "Train Epoch: 1 [43520/60000 (72%)]\tLoss: 0.083934\n",
410 | "Train Epoch: 1 [44160/60000 (74%)]\tLoss: 0.143705\n",
411 | "Train Epoch: 1 [44800/60000 (75%)]\tLoss: 0.014715\n",
412 | "Train Epoch: 1 [45440/60000 (76%)]\tLoss: 0.034582\n",
413 | "Train Epoch: 1 [46080/60000 (77%)]\tLoss: 0.046080\n",
414 | "Train Epoch: 1 [46720/60000 (78%)]\tLoss: 0.142156\n",
415 | "Train Epoch: 1 [47360/60000 (79%)]\tLoss: 0.485598\n",
416 | "Train Epoch: 1 [48000/60000 (80%)]\tLoss: 0.328156\n",
417 | "Train Epoch: 1 [48640/60000 (81%)]\tLoss: 0.087537\n",
418 | "Train Epoch: 1 [49280/60000 (82%)]\tLoss: 0.017084\n",
419 | "Train Epoch: 1 [49920/60000 (83%)]\tLoss: 0.011264\n",
420 | "Train Epoch: 1 [50560/60000 (84%)]\tLoss: 0.027894\n",
421 | "Train Epoch: 1 [51200/60000 (85%)]\tLoss: 0.208086\n",
422 | "Train Epoch: 1 [51840/60000 (86%)]\tLoss: 0.125015\n",
423 | "Train Epoch: 1 [52480/60000 (87%)]\tLoss: 0.127294\n",
424 | "Train Epoch: 1 [53120/60000 (88%)]\tLoss: 0.238284\n",
425 | "Train Epoch: 1 [53760/60000 (90%)]\tLoss: 0.030879\n",
426 | "Train Epoch: 1 [54400/60000 (91%)]\tLoss: 0.089591\n",
427 | "Train Epoch: 1 [55040/60000 (92%)]\tLoss: 0.049601\n",
428 | "Train Epoch: 1 [55680/60000 (93%)]\tLoss: 0.666180\n",
429 | "Train Epoch: 1 [56320/60000 (94%)]\tLoss: 0.067744\n",
430 | "Train Epoch: 1 [56960/60000 (95%)]\tLoss: 0.048680\n",
431 | "Train Epoch: 1 [57600/60000 (96%)]\tLoss: 0.164761\n",
432 | "Train Epoch: 1 [58240/60000 (97%)]\tLoss: 0.180428\n",
433 | "Train Epoch: 1 [58880/60000 (98%)]\tLoss: 0.137088\n",
434 | "Train Epoch: 1 [59520/60000 (99%)]\tLoss: 0.089983\n",
435 | "\n",
436 | "Test set: Avg. loss: -0.9662, Accuracy: 9717/10000 (97%)\n",
437 | "\n",
438 | "Train Epoch: 2 [0/60000 (0%)]\tLoss: 0.021369\n",
439 | "Train Epoch: 2 [640/60000 (1%)]\tLoss: 0.112997\n",
440 | "Train Epoch: 2 [1280/60000 (2%)]\tLoss: 0.182833\n",
441 | "Train Epoch: 2 [1920/60000 (3%)]\tLoss: 0.109863\n",
442 | "Train Epoch: 2 [2560/60000 (4%)]\tLoss: 0.066127\n",
443 | "Train Epoch: 2 [3200/60000 (5%)]\tLoss: 0.312570\n",
444 | "Train Epoch: 2 [3840/60000 (6%)]\tLoss: 0.107947\n",
445 | "Train Epoch: 2 [4480/60000 (7%)]\tLoss: 0.129223\n",
446 | "Train Epoch: 2 [5120/60000 (9%)]\tLoss: 0.006381\n",
447 | "Train Epoch: 2 [5760/60000 (10%)]\tLoss: 0.038859\n",
448 | "Train Epoch: 2 [6400/60000 (11%)]\tLoss: 0.013144\n",
449 | "Train Epoch: 2 [7040/60000 (12%)]\tLoss: 0.020549\n",
450 | "Train Epoch: 2 [7680/60000 (13%)]\tLoss: 0.011785\n",
451 | "Train Epoch: 2 [8320/60000 (14%)]\tLoss: 0.231971\n",
452 | "Train Epoch: 2 [8960/60000 (15%)]\tLoss: 0.147990\n",
453 | "Train Epoch: 2 [9600/60000 (16%)]\tLoss: 0.171210\n",
454 | "Train Epoch: 2 [10240/60000 (17%)]\tLoss: 0.147863\n",
455 | "Train Epoch: 2 [10880/60000 (18%)]\tLoss: 0.333462\n",
456 | "Train Epoch: 2 [11520/60000 (19%)]\tLoss: 0.023902\n",
457 | "Train Epoch: 2 [12160/60000 (20%)]\tLoss: 0.224719\n",
458 | "Train Epoch: 2 [12800/60000 (21%)]\tLoss: 0.025668\n",
459 | "Train Epoch: 2 [13440/60000 (22%)]\tLoss: 0.064675\n",
460 | "Train Epoch: 2 [14080/60000 (23%)]\tLoss: 0.037010\n",
461 | "Train Epoch: 2 [14720/60000 (25%)]\tLoss: 0.050318\n",
462 | "Train Epoch: 2 [15360/60000 (26%)]\tLoss: 0.083974\n",
463 | "Train Epoch: 2 [16000/60000 (27%)]\tLoss: 0.138085\n",
464 | "Train Epoch: 2 [16640/60000 (28%)]\tLoss: 0.217917\n",
465 | "Train Epoch: 2 [17280/60000 (29%)]\tLoss: 0.116676\n",
466 | "Train Epoch: 2 [17920/60000 (30%)]\tLoss: 0.034423\n",
467 | "Train Epoch: 2 [18560/60000 (31%)]\tLoss: 0.032855\n",
468 | "Train Epoch: 2 [19200/60000 (32%)]\tLoss: 0.225311\n",
469 | "Train Epoch: 2 [19840/60000 (33%)]\tLoss: 0.006941\n",
470 | "Train Epoch: 2 [20480/60000 (34%)]\tLoss: 0.072871\n",
471 | "Train Epoch: 2 [21120/60000 (35%)]\tLoss: 0.058232\n",
472 | "Train Epoch: 2 [21760/60000 (36%)]\tLoss: 0.015516\n",
473 | "Train Epoch: 2 [22400/60000 (37%)]\tLoss: 0.105818\n",
474 | "Train Epoch: 2 [23040/60000 (38%)]\tLoss: 0.127326\n",
475 | "Train Epoch: 2 [23680/60000 (39%)]\tLoss: 0.212847\n",
476 | "Train Epoch: 2 [24320/60000 (41%)]\tLoss: 0.173671\n",
477 | "Train Epoch: 2 [24960/60000 (42%)]\tLoss: 0.158303\n",
478 | "Train Epoch: 2 [25600/60000 (43%)]\tLoss: 0.514192\n",
479 | "Train Epoch: 2 [26240/60000 (44%)]\tLoss: 0.491562\n",
480 | "Train Epoch: 2 [26880/60000 (45%)]\tLoss: 0.124600\n",
481 | "Train Epoch: 2 [27520/60000 (46%)]\tLoss: 0.151669\n",
482 | "Train Epoch: 2 [28160/60000 (47%)]\tLoss: 0.042192\n",
483 | "Train Epoch: 2 [28800/60000 (48%)]\tLoss: 0.102364\n",
484 | "Train Epoch: 2 [29440/60000 (49%)]\tLoss: 0.048251\n",
485 | "Train Epoch: 2 [30080/60000 (50%)]\tLoss: 0.084469\n",
486 | "Train Epoch: 2 [30720/60000 (51%)]\tLoss: 0.548334\n",
487 | "Train Epoch: 2 [31360/60000 (52%)]\tLoss: 0.256530\n",
488 | "Train Epoch: 2 [32000/60000 (53%)]\tLoss: 0.018591\n",
489 | "Train Epoch: 2 [32640/60000 (54%)]\tLoss: 0.255403\n",
490 | "Train Epoch: 2 [33280/60000 (55%)]\tLoss: 0.034644\n",
491 | "Train Epoch: 2 [33920/60000 (57%)]\tLoss: 0.044591\n",
492 | "Train Epoch: 2 [34560/60000 (58%)]\tLoss: 0.040136\n",
493 | "Train Epoch: 2 [35200/60000 (59%)]\tLoss: 0.105666\n",
494 | "Train Epoch: 2 [35840/60000 (60%)]\tLoss: 0.225017\n",
495 | "Train Epoch: 2 [36480/60000 (61%)]\tLoss: 0.076942\n",
496 | "Train Epoch: 2 [37120/60000 (62%)]\tLoss: 0.142982\n",
497 | "Train Epoch: 2 [37760/60000 (63%)]\tLoss: 0.008805\n",
498 | "Train Epoch: 2 [38400/60000 (64%)]\tLoss: 0.030216\n",
499 | "Train Epoch: 2 [39040/60000 (65%)]\tLoss: 0.525962\n",
500 | "Train Epoch: 2 [39680/60000 (66%)]\tLoss: 0.081722\n",
501 | "Train Epoch: 2 [40320/60000 (67%)]\tLoss: 0.293573\n",
502 | "Train Epoch: 2 [40960/60000 (68%)]\tLoss: 0.278041\n",
503 | "Train Epoch: 2 [41600/60000 (69%)]\tLoss: 0.066600\n",
504 | "Train Epoch: 2 [42240/60000 (70%)]\tLoss: 0.083429\n",
505 | "Train Epoch: 2 [42880/60000 (71%)]\tLoss: 0.176400\n",
506 | "Train Epoch: 2 [43520/60000 (72%)]\tLoss: 0.070648\n",
507 | "Train Epoch: 2 [44160/60000 (74%)]\tLoss: 0.136096\n",
508 | "Train Epoch: 2 [44800/60000 (75%)]\tLoss: 0.072206\n",
509 | "Train Epoch: 2 [45440/60000 (76%)]\tLoss: 0.044717\n",
510 | "Train Epoch: 2 [46080/60000 (77%)]\tLoss: 0.054737\n",
511 | "Train Epoch: 2 [46720/60000 (78%)]\tLoss: 0.155012\n",
512 | "Train Epoch: 2 [47360/60000 (79%)]\tLoss: 0.033407\n",
513 | "Train Epoch: 2 [48000/60000 (80%)]\tLoss: 0.572021\n",
514 | "Train Epoch: 2 [48640/60000 (81%)]\tLoss: 0.045251\n",
515 | "Train Epoch: 2 [49280/60000 (82%)]\tLoss: 0.180520\n",
516 | "Train Epoch: 2 [49920/60000 (83%)]\tLoss: 0.084542\n",
517 | "Train Epoch: 2 [50560/60000 (84%)]\tLoss: 0.150355\n",
518 | "Train Epoch: 2 [51200/60000 (85%)]\tLoss: 0.001370\n",
519 | "Train Epoch: 2 [51840/60000 (86%)]\tLoss: 0.027981\n",
520 | "Train Epoch: 2 [52480/60000 (87%)]\tLoss: 0.023305\n",
521 | "Train Epoch: 2 [53120/60000 (88%)]\tLoss: 0.031542\n",
522 | "Train Epoch: 2 [53760/60000 (90%)]\tLoss: 0.161370\n",
523 | "Train Epoch: 2 [54400/60000 (91%)]\tLoss: 0.013536\n",
524 | "Train Epoch: 2 [55040/60000 (92%)]\tLoss: 0.026579\n",
525 | "Train Epoch: 2 [55680/60000 (93%)]\tLoss: 0.022276\n",
526 | "Train Epoch: 2 [56320/60000 (94%)]\tLoss: 0.105375\n",
527 | "Train Epoch: 2 [56960/60000 (95%)]\tLoss: 0.092841\n",
528 | "Train Epoch: 2 [57600/60000 (96%)]\tLoss: 0.091326\n",
529 | "Train Epoch: 2 [58240/60000 (97%)]\tLoss: 0.110826\n",
530 | "Train Epoch: 2 [58880/60000 (98%)]\tLoss: 0.081717\n",
531 | "Train Epoch: 2 [59520/60000 (99%)]\tLoss: 0.092696\n",
532 | "\n",
533 | "Test set: Avg. loss: -0.9776, Accuracy: 9831/10000 (98%)\n",
534 | "\n",
535 | "Train Epoch: 3 [0/60000 (0%)]\tLoss: 0.063463\n",
536 | "Train Epoch: 3 [640/60000 (1%)]\tLoss: 0.114469\n",
537 | "Train Epoch: 3 [1280/60000 (2%)]\tLoss: 0.006183\n",
538 | "Train Epoch: 3 [1920/60000 (3%)]\tLoss: 0.039701\n",
539 | "Train Epoch: 3 [2560/60000 (4%)]\tLoss: 0.106729\n",
540 | "Train Epoch: 3 [3200/60000 (5%)]\tLoss: 0.012483\n",
541 | "Train Epoch: 3 [3840/60000 (6%)]\tLoss: 0.236577\n",
542 | "Train Epoch: 3 [4480/60000 (7%)]\tLoss: 0.063634\n",
543 | "Train Epoch: 3 [5120/60000 (9%)]\tLoss: 0.061753\n",
544 | "Train Epoch: 3 [5760/60000 (10%)]\tLoss: 0.052922\n",
545 | "Train Epoch: 3 [6400/60000 (11%)]\tLoss: 0.190764\n",
546 | "Train Epoch: 3 [7040/60000 (12%)]\tLoss: 0.058996\n",
547 | "Train Epoch: 3 [7680/60000 (13%)]\tLoss: 0.022317\n",
548 | "Train Epoch: 3 [8320/60000 (14%)]\tLoss: 0.007046\n",
549 | "Train Epoch: 3 [8960/60000 (15%)]\tLoss: 0.080138\n",
550 | "Train Epoch: 3 [9600/60000 (16%)]\tLoss: 0.063802\n",
551 | "Train Epoch: 3 [10240/60000 (17%)]\tLoss: 0.041988\n",
552 | "Train Epoch: 3 [10880/60000 (18%)]\tLoss: 0.098359\n",
553 | "Train Epoch: 3 [11520/60000 (19%)]\tLoss: 0.153680\n",
554 | "Train Epoch: 3 [12160/60000 (20%)]\tLoss: 0.464352\n",
555 | "Train Epoch: 3 [12800/60000 (21%)]\tLoss: 0.070375\n",
556 | "Train Epoch: 3 [13440/60000 (22%)]\tLoss: 0.018513\n",
557 | "Train Epoch: 3 [14080/60000 (23%)]\tLoss: 0.022059\n",
558 | "Train Epoch: 3 [14720/60000 (25%)]\tLoss: 0.003471\n",
559 | "Train Epoch: 3 [15360/60000 (26%)]\tLoss: 0.019260\n",
560 | "Train Epoch: 3 [16000/60000 (27%)]\tLoss: 0.055360\n",
561 | "Train Epoch: 3 [16640/60000 (28%)]\tLoss: 0.185760\n",
562 | "Train Epoch: 3 [17280/60000 (29%)]\tLoss: 0.094002\n",
563 | "Train Epoch: 3 [17920/60000 (30%)]\tLoss: 0.088621\n",
564 | "Train Epoch: 3 [18560/60000 (31%)]\tLoss: 0.202922\n",
565 | "Train Epoch: 3 [19200/60000 (32%)]\tLoss: 0.217287\n",
566 | "Train Epoch: 3 [19840/60000 (33%)]\tLoss: 0.022548\n",
567 | "Train Epoch: 3 [20480/60000 (34%)]\tLoss: 0.064074\n",
568 | "Train Epoch: 3 [21120/60000 (35%)]\tLoss: 0.217457\n",
569 | "Train Epoch: 3 [21760/60000 (36%)]\tLoss: 0.041618\n",
570 | "Train Epoch: 3 [22400/60000 (37%)]\tLoss: 0.426640\n",
571 | "Train Epoch: 3 [23040/60000 (38%)]\tLoss: 0.064455\n",
572 | "Train Epoch: 3 [23680/60000 (39%)]\tLoss: 0.029709\n",
573 | "Train Epoch: 3 [24320/60000 (41%)]\tLoss: 0.374250\n",
574 | "Train Epoch: 3 [24960/60000 (42%)]\tLoss: 0.019916\n",
575 | "Train Epoch: 3 [25600/60000 (43%)]\tLoss: 0.077315\n",
576 | "Train Epoch: 3 [26240/60000 (44%)]\tLoss: 0.120163\n",
577 | "Train Epoch: 3 [26880/60000 (45%)]\tLoss: 0.007376\n",
578 | "Train Epoch: 3 [27520/60000 (46%)]\tLoss: 0.048888\n",
579 | "Train Epoch: 3 [28160/60000 (47%)]\tLoss: 0.148275\n",
580 | "Train Epoch: 3 [28800/60000 (48%)]\tLoss: 0.070750\n",
581 | "Train Epoch: 3 [29440/60000 (49%)]\tLoss: 0.353416\n",
582 | "Train Epoch: 3 [30080/60000 (50%)]\tLoss: 0.076076\n",
583 | "Train Epoch: 3 [30720/60000 (51%)]\tLoss: 0.074755\n",
584 | "Train Epoch: 3 [31360/60000 (52%)]\tLoss: 0.120992\n",
585 | "Train Epoch: 3 [32000/60000 (53%)]\tLoss: 0.245001\n",
586 | "Train Epoch: 3 [32640/60000 (54%)]\tLoss: 0.023723\n",
587 | "Train Epoch: 3 [33280/60000 (55%)]\tLoss: 0.081988\n",
588 | "Train Epoch: 3 [33920/60000 (57%)]\tLoss: 0.150652\n",
589 | "Train Epoch: 3 [34560/60000 (58%)]\tLoss: 0.028882\n",
590 | "Train Epoch: 3 [35200/60000 (59%)]\tLoss: 0.078787\n",
591 | "Train Epoch: 3 [35840/60000 (60%)]\tLoss: 0.063896\n",
592 | "Train Epoch: 3 [36480/60000 (61%)]\tLoss: 0.012244\n",
593 | "Train Epoch: 3 [37120/60000 (62%)]\tLoss: 0.090776\n",
594 | "Train Epoch: 3 [37760/60000 (63%)]\tLoss: 0.207105\n",
595 | "Train Epoch: 3 [38400/60000 (64%)]\tLoss: 0.006419\n",
596 | "Train Epoch: 3 [39040/60000 (65%)]\tLoss: 0.035537\n",
597 | "Train Epoch: 3 [39680/60000 (66%)]\tLoss: 0.145132\n",
598 | "Train Epoch: 3 [40320/60000 (67%)]\tLoss: 0.049233\n",
599 | "Train Epoch: 3 [40960/60000 (68%)]\tLoss: 0.056022\n",
600 | "Train Epoch: 3 [41600/60000 (69%)]\tLoss: 0.593132\n",
601 | "Train Epoch: 3 [42240/60000 (70%)]\tLoss: 0.180111\n",
602 | "Train Epoch: 3 [42880/60000 (71%)]\tLoss: 0.065261\n",
603 | "Train Epoch: 3 [43520/60000 (72%)]\tLoss: 0.024525\n",
604 | "Train Epoch: 3 [44160/60000 (74%)]\tLoss: 0.086528\n",
605 | "Train Epoch: 3 [44800/60000 (75%)]\tLoss: 0.120266\n",
606 | "Train Epoch: 3 [45440/60000 (76%)]\tLoss: 0.077596\n",
607 | "Train Epoch: 3 [46080/60000 (77%)]\tLoss: 0.043466\n",
608 | "Train Epoch: 3 [46720/60000 (78%)]\tLoss: 0.120706\n",
609 | "Train Epoch: 3 [47360/60000 (79%)]\tLoss: 0.015336\n",
610 | "Train Epoch: 3 [48000/60000 (80%)]\tLoss: 0.051106\n",
611 | "Train Epoch: 3 [48640/60000 (81%)]\tLoss: 0.118524\n",
612 | "Train Epoch: 3 [49280/60000 (82%)]\tLoss: 0.023619\n",
613 | "Train Epoch: 3 [49920/60000 (83%)]\tLoss: 0.203596\n",
614 | "Train Epoch: 3 [50560/60000 (84%)]\tLoss: 0.005664\n",
615 | "Train Epoch: 3 [51200/60000 (85%)]\tLoss: 0.076866\n",
616 | "Train Epoch: 3 [51840/60000 (86%)]\tLoss: 0.049961\n",
617 | "Train Epoch: 3 [52480/60000 (87%)]\tLoss: 0.099215\n",
618 | "Train Epoch: 3 [53120/60000 (88%)]\tLoss: 0.239370\n",
619 | "Train Epoch: 3 [53760/60000 (90%)]\tLoss: 0.044627\n",
620 | "Train Epoch: 3 [54400/60000 (91%)]\tLoss: 0.134020\n",
621 | "Train Epoch: 3 [55040/60000 (92%)]\tLoss: 0.125089\n",
622 | "Train Epoch: 3 [55680/60000 (93%)]\tLoss: 0.096078\n",
623 | "Train Epoch: 3 [56320/60000 (94%)]\tLoss: 0.087274\n",
624 | "Train Epoch: 3 [56960/60000 (95%)]\tLoss: 0.128849\n",
625 | "Train Epoch: 3 [57600/60000 (96%)]\tLoss: 0.022029\n",
626 | "Train Epoch: 3 [58240/60000 (97%)]\tLoss: 0.014636\n",
627 | "Train Epoch: 3 [58880/60000 (98%)]\tLoss: 0.124867\n",
628 | "Train Epoch: 3 [59520/60000 (99%)]\tLoss: 0.113813\n",
629 | "\n",
630 | "Test set: Avg. loss: -0.9710, Accuracy: 9783/10000 (98%)\n",
631 | "\n",
632 | "Train Epoch: 3 [0/60000 (0%)]\tLoss: 0.034476\n",
633 | "Train Epoch: 3 [640/60000 (1%)]\tLoss: 0.415755\n",
634 | "Train Epoch: 3 [1280/60000 (2%)]\tLoss: 0.181356\n",
635 | "Train Epoch: 3 [1920/60000 (3%)]\tLoss: 0.086929\n",
636 | "Train Epoch: 3 [2560/60000 (4%)]\tLoss: 0.029738\n",
637 | "Train Epoch: 3 [3200/60000 (5%)]\tLoss: 0.016178\n",
638 | "Train Epoch: 3 [3840/60000 (6%)]\tLoss: 0.001996\n",
639 | "Train Epoch: 3 [4480/60000 (7%)]\tLoss: 0.051265\n",
640 | "Train Epoch: 3 [5120/60000 (9%)]\tLoss: 0.060758\n",
641 | "Train Epoch: 3 [5760/60000 (10%)]\tLoss: 0.007387\n",
642 | "Train Epoch: 3 [6400/60000 (11%)]\tLoss: 0.016684\n",
643 | "Train Epoch: 3 [7040/60000 (12%)]\tLoss: 0.027652\n",
644 | "Train Epoch: 3 [7680/60000 (13%)]\tLoss: 0.083977\n",
645 | "Train Epoch: 3 [8320/60000 (14%)]\tLoss: 0.031926\n",
646 | "Train Epoch: 3 [8960/60000 (15%)]\tLoss: 0.071717\n",
647 | "Train Epoch: 3 [9600/60000 (16%)]\tLoss: 0.001477\n",
648 | "Train Epoch: 3 [10240/60000 (17%)]\tLoss: 0.023606\n",
649 | "Train Epoch: 3 [10880/60000 (18%)]\tLoss: 0.022856\n",
650 | "Train Epoch: 3 [11520/60000 (19%)]\tLoss: 0.067140\n",
651 | "Train Epoch: 3 [12160/60000 (20%)]\tLoss: 0.020441\n",
652 | "Train Epoch: 3 [12800/60000 (21%)]\tLoss: 0.000635\n",
653 | "Train Epoch: 3 [13440/60000 (22%)]\tLoss: 0.017227\n",
654 | "Train Epoch: 3 [14080/60000 (23%)]\tLoss: 0.022927\n",
655 | "Train Epoch: 3 [14720/60000 (25%)]\tLoss: 0.027828\n",
656 | "Train Epoch: 3 [15360/60000 (26%)]\tLoss: 0.032064\n",
657 | "Train Epoch: 3 [16000/60000 (27%)]\tLoss: 0.026003\n",
658 | "Train Epoch: 3 [16640/60000 (28%)]\tLoss: 0.029695\n",
659 | "Train Epoch: 3 [17280/60000 (29%)]\tLoss: 0.000279\n",
660 | "Train Epoch: 3 [17920/60000 (30%)]\tLoss: 0.000815\n",
661 | "Train Epoch: 3 [18560/60000 (31%)]\tLoss: 0.030595\n",
662 | "Train Epoch: 3 [19200/60000 (32%)]\tLoss: 0.004104\n",
663 | "Train Epoch: 3 [19840/60000 (33%)]\tLoss: 0.012980\n",
664 | "Train Epoch: 3 [20480/60000 (34%)]\tLoss: 0.140954\n",
665 | "Train Epoch: 3 [21120/60000 (35%)]\tLoss: 0.036284\n",
666 | "Train Epoch: 3 [21760/60000 (36%)]\tLoss: 0.056631\n",
667 | "Train Epoch: 3 [22400/60000 (37%)]\tLoss: 0.001214\n",
668 | "Train Epoch: 3 [23040/60000 (38%)]\tLoss: 0.229223\n",
669 | "Train Epoch: 3 [23680/60000 (39%)]\tLoss: 0.018490\n",
670 | "Train Epoch: 3 [24320/60000 (41%)]\tLoss: 0.122923\n",
671 | "Train Epoch: 3 [24960/60000 (42%)]\tLoss: 0.027173\n",
672 | "Train Epoch: 3 [25600/60000 (43%)]\tLoss: 0.006939\n",
673 | "Train Epoch: 3 [26240/60000 (44%)]\tLoss: 0.038346\n",
674 | "Train Epoch: 3 [26880/60000 (45%)]\tLoss: 0.083031\n",
675 | "Train Epoch: 3 [27520/60000 (46%)]\tLoss: 0.144066\n",
676 | "Train Epoch: 3 [28160/60000 (47%)]\tLoss: 0.002842\n",
677 | "Train Epoch: 3 [28800/60000 (48%)]\tLoss: 0.047957\n",
678 | "Train Epoch: 3 [29440/60000 (49%)]\tLoss: 0.032559\n",
679 | "Train Epoch: 3 [30080/60000 (50%)]\tLoss: 0.075398\n",
680 | "Train Epoch: 3 [30720/60000 (51%)]\tLoss: 0.000979\n",
681 | "Train Epoch: 3 [31360/60000 (52%)]\tLoss: 0.039745\n",
682 | "Train Epoch: 3 [32000/60000 (53%)]\tLoss: 0.087644\n",
683 | "Train Epoch: 3 [32640/60000 (54%)]\tLoss: 0.245594\n",
684 | "Train Epoch: 3 [33280/60000 (55%)]\tLoss: 0.263317\n",
685 | "Train Epoch: 3 [33920/60000 (57%)]\tLoss: 0.057245\n",
686 | "Train Epoch: 3 [34560/60000 (58%)]\tLoss: 0.024240\n",
687 | "Train Epoch: 3 [35200/60000 (59%)]\tLoss: 0.079506\n",
688 | "Train Epoch: 3 [35840/60000 (60%)]\tLoss: 0.001688\n",
689 | "Train Epoch: 3 [36480/60000 (61%)]\tLoss: 0.024482\n",
690 | "Train Epoch: 3 [37120/60000 (62%)]\tLoss: 0.090378\n",
691 | "Train Epoch: 3 [37760/60000 (63%)]\tLoss: 0.111796\n",
692 | "Train Epoch: 3 [38400/60000 (64%)]\tLoss: 0.034894\n",
693 | "Train Epoch: 3 [39040/60000 (65%)]\tLoss: 0.047220\n",
694 | "Train Epoch: 3 [39680/60000 (66%)]\tLoss: 0.135415\n",
695 | "Train Epoch: 3 [40320/60000 (67%)]\tLoss: 0.040737\n",
696 | "Train Epoch: 3 [40960/60000 (68%)]\tLoss: 0.015579\n",
697 | "Train Epoch: 3 [41600/60000 (69%)]\tLoss: 0.007837\n",
698 | "Train Epoch: 3 [42240/60000 (70%)]\tLoss: 0.000603\n",
699 | "Train Epoch: 3 [42880/60000 (71%)]\tLoss: 0.020224\n",
700 | "Train Epoch: 3 [43520/60000 (72%)]\tLoss: 0.026869\n",
701 | "Train Epoch: 3 [44160/60000 (74%)]\tLoss: 0.001488\n",
702 | "Train Epoch: 3 [44800/60000 (75%)]\tLoss: 0.007323\n",
703 | "Train Epoch: 3 [45440/60000 (76%)]\tLoss: 0.005850\n",
704 | "Train Epoch: 3 [46080/60000 (77%)]\tLoss: 0.011149\n",
705 | "Train Epoch: 3 [46720/60000 (78%)]\tLoss: 0.017864\n",
706 | "Train Epoch: 3 [47360/60000 (79%)]\tLoss: 0.034819\n",
707 | "Train Epoch: 3 [48000/60000 (80%)]\tLoss: 0.021358\n",
708 | "Train Epoch: 3 [48640/60000 (81%)]\tLoss: 0.006743\n",
709 | "Train Epoch: 3 [49280/60000 (82%)]\tLoss: 0.003964\n",
710 | "Train Epoch: 3 [49920/60000 (83%)]\tLoss: 0.011560\n",
711 | "Train Epoch: 3 [50560/60000 (84%)]\tLoss: 0.000351\n",
712 | "Train Epoch: 3 [51200/60000 (85%)]\tLoss: 0.016029\n",
713 | "Train Epoch: 3 [51840/60000 (86%)]\tLoss: 0.040337\n",
714 | "Train Epoch: 3 [52480/60000 (87%)]\tLoss: 0.021229\n",
715 | "Train Epoch: 3 [53120/60000 (88%)]\tLoss: 0.086175\n",
716 | "Train Epoch: 3 [53760/60000 (90%)]\tLoss: 0.008898\n",
717 | "Train Epoch: 3 [54400/60000 (91%)]\tLoss: 0.021425\n",
718 | "Train Epoch: 3 [55040/60000 (92%)]\tLoss: 0.002073\n",
719 | "Train Epoch: 3 [55680/60000 (93%)]\tLoss: 0.053018\n",
720 | "Train Epoch: 3 [56320/60000 (94%)]\tLoss: 0.001988\n",
721 | "Train Epoch: 3 [56960/60000 (95%)]\tLoss: 0.010265\n",
722 | "Train Epoch: 3 [57600/60000 (96%)]\tLoss: 0.001524\n",
723 | "Train Epoch: 3 [58240/60000 (97%)]\tLoss: 0.048560\n",
724 | "Train Epoch: 3 [58880/60000 (98%)]\tLoss: 0.017292\n",
725 | "Train Epoch: 3 [59520/60000 (99%)]\tLoss: 0.004543\n",
726 | "\n",
727 | "Test set: Avg. loss: -0.9860, Accuracy: 9886/10000 (99%)\n",
728 | "\n",
729 | "Train Epoch: 3 [0/60000 (0%)]\tLoss: 0.000774\n",
730 | "Train Epoch: 3 [640/60000 (1%)]\tLoss: 0.005242\n",
731 | "Train Epoch: 3 [1280/60000 (2%)]\tLoss: 0.087029\n",
732 | "Train Epoch: 3 [1920/60000 (3%)]\tLoss: 0.042792\n",
733 | "Train Epoch: 3 [2560/60000 (4%)]\tLoss: 0.035679\n",
734 | "Train Epoch: 3 [3200/60000 (5%)]\tLoss: 0.000884\n",
735 | "Train Epoch: 3 [3840/60000 (6%)]\tLoss: 0.008985\n",
736 | "Train Epoch: 3 [4480/60000 (7%)]\tLoss: 0.017822\n",
737 | "Train Epoch: 3 [5120/60000 (9%)]\tLoss: 0.000644\n",
738 | "Train Epoch: 3 [5760/60000 (10%)]\tLoss: 0.007079\n",
739 | "Train Epoch: 3 [6400/60000 (11%)]\tLoss: 0.003289\n",
740 | "Train Epoch: 3 [7040/60000 (12%)]\tLoss: 0.014545\n",
741 | "Train Epoch: 3 [7680/60000 (13%)]\tLoss: 0.037752\n",
742 | "Train Epoch: 3 [8320/60000 (14%)]\tLoss: 0.012087\n",
743 | "Train Epoch: 3 [8960/60000 (15%)]\tLoss: 0.036052\n",
744 | "Train Epoch: 3 [9600/60000 (16%)]\tLoss: 0.040073\n",
745 | "Train Epoch: 3 [10240/60000 (17%)]\tLoss: 0.049330\n",
746 | "Train Epoch: 3 [10880/60000 (18%)]\tLoss: 0.001090\n",
747 | "Train Epoch: 3 [11520/60000 (19%)]\tLoss: 0.013898\n",
748 | "Train Epoch: 3 [12160/60000 (20%)]\tLoss: 0.003239\n",
749 | "Train Epoch: 3 [12800/60000 (21%)]\tLoss: 0.167850\n",
750 | "Train Epoch: 3 [13440/60000 (22%)]\tLoss: 0.011250\n",
751 | "Train Epoch: 3 [14080/60000 (23%)]\tLoss: 0.026054\n",
752 | "Train Epoch: 3 [14720/60000 (25%)]\tLoss: 0.015770\n",
753 | "Train Epoch: 3 [15360/60000 (26%)]\tLoss: 0.003927\n",
754 | "Train Epoch: 3 [16000/60000 (27%)]\tLoss: 0.024283\n",
755 | "Train Epoch: 3 [16640/60000 (28%)]\tLoss: 0.002161\n",
756 | "Train Epoch: 3 [17280/60000 (29%)]\tLoss: 0.036340\n",
757 | "Train Epoch: 3 [17920/60000 (30%)]\tLoss: 0.000880\n",
758 | "Train Epoch: 3 [18560/60000 (31%)]\tLoss: 0.101127\n",
759 | "Train Epoch: 3 [19200/60000 (32%)]\tLoss: 0.004294\n",
760 | "Train Epoch: 3 [19840/60000 (33%)]\tLoss: 0.008890\n",
761 | "Train Epoch: 3 [20480/60000 (34%)]\tLoss: 0.005472\n",
762 | "Train Epoch: 3 [21120/60000 (35%)]\tLoss: 0.065323\n",
763 | "Train Epoch: 3 [21760/60000 (36%)]\tLoss: 0.069902\n",
764 | "Train Epoch: 3 [22400/60000 (37%)]\tLoss: 0.001641\n",
765 | "Train Epoch: 3 [23040/60000 (38%)]\tLoss: 0.076958\n",
766 | "Train Epoch: 3 [23680/60000 (39%)]\tLoss: 0.032411\n",
767 | "Train Epoch: 3 [24320/60000 (41%)]\tLoss: 0.034886\n",
768 | "Train Epoch: 3 [24960/60000 (42%)]\tLoss: 0.010985\n",
769 | "Train Epoch: 3 [25600/60000 (43%)]\tLoss: 0.005426\n",
770 | "Train Epoch: 3 [26240/60000 (44%)]\tLoss: 0.032913\n",
771 | "Train Epoch: 3 [26880/60000 (45%)]\tLoss: 0.126640\n",
772 | "Train Epoch: 3 [27520/60000 (46%)]\tLoss: 0.037310\n",
773 | "Train Epoch: 3 [28160/60000 (47%)]\tLoss: 0.008347\n",
774 | "Train Epoch: 3 [28800/60000 (48%)]\tLoss: 0.046984\n",
775 | "Train Epoch: 3 [29440/60000 (49%)]\tLoss: 0.009953\n",
776 | "Train Epoch: 3 [30080/60000 (50%)]\tLoss: 0.002314\n",
777 | "Train Epoch: 3 [30720/60000 (51%)]\tLoss: 0.085070\n",
778 | "Train Epoch: 3 [31360/60000 (52%)]\tLoss: 0.016453\n",
779 | "Train Epoch: 3 [32000/60000 (53%)]\tLoss: 0.045299\n",
780 | "Train Epoch: 3 [32640/60000 (54%)]\tLoss: 0.000546\n",
781 | "Train Epoch: 3 [33280/60000 (55%)]\tLoss: 0.241897\n",
782 | "Train Epoch: 3 [33920/60000 (57%)]\tLoss: 0.005824\n",
783 | "Train Epoch: 3 [34560/60000 (58%)]\tLoss: 0.060355\n",
784 | "Train Epoch: 3 [35200/60000 (59%)]\tLoss: 0.002446\n",
785 | "Train Epoch: 3 [35840/60000 (60%)]\tLoss: 0.006852\n",
786 | "Train Epoch: 3 [36480/60000 (61%)]\tLoss: 0.001183\n",
787 | "Train Epoch: 3 [37120/60000 (62%)]\tLoss: 0.004089\n",
788 | "Train Epoch: 3 [37760/60000 (63%)]\tLoss: 0.011785\n",
789 | "Train Epoch: 3 [38400/60000 (64%)]\tLoss: 0.102750\n",
790 | "Train Epoch: 3 [39040/60000 (65%)]\tLoss: 0.010851\n",
791 | "Train Epoch: 3 [39680/60000 (66%)]\tLoss: 0.005771\n",
792 | "Train Epoch: 3 [40320/60000 (67%)]\tLoss: 0.030049\n",
793 | "Train Epoch: 3 [40960/60000 (68%)]\tLoss: 0.005349\n",
794 | "Train Epoch: 3 [41600/60000 (69%)]\tLoss: 0.003538\n",
795 | "Train Epoch: 3 [42240/60000 (70%)]\tLoss: 0.063063\n",
796 | "Train Epoch: 3 [42880/60000 (71%)]\tLoss: 0.012078\n",
797 | "Train Epoch: 3 [43520/60000 (72%)]\tLoss: 0.000568\n",
798 | "Train Epoch: 3 [44160/60000 (74%)]\tLoss: 0.000667\n",
799 | "Train Epoch: 3 [44800/60000 (75%)]\tLoss: 0.095291\n",
800 | "Train Epoch: 3 [45440/60000 (76%)]\tLoss: 0.002779\n",
801 | "Train Epoch: 3 [46080/60000 (77%)]\tLoss: 0.005778\n",
802 | "Train Epoch: 3 [46720/60000 (78%)]\tLoss: 0.057257\n",
803 | "Train Epoch: 3 [47360/60000 (79%)]\tLoss: 0.007636\n",
804 | "Train Epoch: 3 [48000/60000 (80%)]\tLoss: 0.069810\n",
805 | "Train Epoch: 3 [48640/60000 (81%)]\tLoss: 0.002557\n",
806 | "Train Epoch: 3 [49280/60000 (82%)]\tLoss: 0.139816\n",
807 | "Train Epoch: 3 [49920/60000 (83%)]\tLoss: 0.060314\n",
808 | "Train Epoch: 3 [50560/60000 (84%)]\tLoss: 0.000701\n",
809 | "Train Epoch: 3 [51200/60000 (85%)]\tLoss: 0.001461\n",
810 | "Train Epoch: 3 [51840/60000 (86%)]\tLoss: 0.225825\n",
811 | "Train Epoch: 3 [52480/60000 (87%)]\tLoss: 0.014944\n",
812 | "Train Epoch: 3 [53120/60000 (88%)]\tLoss: 0.041378\n",
813 | "Train Epoch: 3 [53760/60000 (90%)]\tLoss: 0.042047\n",
814 | "Train Epoch: 3 [54400/60000 (91%)]\tLoss: 0.020290\n",
815 | "Train Epoch: 3 [55040/60000 (92%)]\tLoss: 0.010125\n",
816 | "Train Epoch: 3 [55680/60000 (93%)]\tLoss: 0.003389\n",
817 | "Train Epoch: 3 [56320/60000 (94%)]\tLoss: 0.131909\n",
818 | "Train Epoch: 3 [56960/60000 (95%)]\tLoss: 0.051108\n",
819 | "Train Epoch: 3 [57600/60000 (96%)]\tLoss: 0.006570\n",
820 | "Train Epoch: 3 [58240/60000 (97%)]\tLoss: 0.067857\n",
821 | "Train Epoch: 3 [58880/60000 (98%)]\tLoss: 0.006648\n",
822 | "Train Epoch: 3 [59520/60000 (99%)]\tLoss: 0.149868\n",
823 | "\n",
824 | "Test set: Avg. loss: -0.9873, Accuracy: 9892/10000 (99%)\n",
825 | "\n"
826 | ]
827 | }
828 | ]
829 | },
830 | {
831 | "cell_type": "markdown",
832 | "source": [
833 | "# Out-of-distribution Detection (FashionMNIST)\n",
834 | "\n",
835 | "The FashionMNIST dataset serves as an out-of-distribution (OOD) dataset for the MNIST dataset, providing a more challenging and diverse set of images. While MNIST consists of 70,000 grayscale images of handwritten digits (0-9), FashionMNIST contains 70,000 grayscale images of various clothing items, including t-shirts, trousers, pullovers, dresses, coats, sandals, shirts, sneakers, bags, and ankle boots. Both datasets have the same structure, with 28x28 pixel images and 10 classes, making FashionMNIST a suitable alternative for evaluating models trained on MNIST. By using FashionMNIST as OOD data, we can assess the robustness our model when exposed to visually different, yet structurally similar, data."
836 | ],
837 | "metadata": {
838 | "id": "EIXcgft4zcwM"
839 | }
840 | },
841 | {
842 | "cell_type": "code",
843 | "source": [
844 | "train_fashion_loader = torch.utils.data.DataLoader(\n",
845 | " torchvision.datasets.FashionMNIST('./FMNIST/', train=True, download=True,\n",
846 | " transform=torchvision.transforms.Compose([\n",
847 | " torchvision.transforms.ToTensor(),\n",
848 | " torchvision.transforms.Normalize(\n",
849 | " (0.1307,), (0.3081,))\n",
850 | " ])),\n",
851 | " batch_size=batch_size_train, shuffle=True)\n",
852 | "\n",
853 | "test_fashion_loader = torch.utils.data.DataLoader(\n",
854 | " torchvision.datasets.FashionMNIST('./FMNIST/', train=False, download=True,\n",
855 | " transform=torchvision.transforms.Compose([\n",
856 | " torchvision.transforms.ToTensor(),\n",
857 | " torchvision.transforms.Normalize(\n",
858 | " (0.1307,), (0.3081,))\n",
859 | " ])),\n",
860 | " batch_size=batch_size_test, shuffle=True)"
861 | ],
862 | "metadata": {
863 | "id": "LfO5qfyIISEk"
864 | },
865 | "execution_count": 9,
866 | "outputs": []
867 | },
868 | {
869 | "cell_type": "code",
870 | "source": [
871 | "import matplotlib.pyplot as plt\n",
872 | "\n",
873 | "images, targets = next(iter(test_fashion_loader))\n",
874 | "\n",
875 | "# Number of images you want to display\n",
876 | "num_images = 10\n",
877 | "\n",
878 | "# Create a figure and a row of subplots\n",
879 | "fig, axes = plt.subplots(1, num_images, figsize=(15, 3))\n",
880 | "\n",
881 | "# Plot each image on a separate subplot\n",
882 | "for i in range(num_images):\n",
883 | " axes[i].imshow(images[i, 0], cmap='gray')\n",
884 | " axes[i].axis('off') # Hide axis\n",
885 | "\n",
886 | "plt.show()"
887 | ],
888 | "metadata": {
889 | "id": "3i5gW6af0QXT",
890 | "outputId": "7b8279b6-bcd5-4f2e-8af1-07617fa77fd4",
891 | "colab": {
892 | "base_uri": "https://localhost:8080/",
893 | "height": 155
894 | }
895 | },
896 | "execution_count": 10,
897 | "outputs": [
898 | {
899 | "output_type": "display_data",
900 | "data": {
901 | "text/plain": [
902 | ""
903 | ],
904 | "image/png": "iVBORw0KGgoAAAANSUhEUgAABJ4AAAB2CAYAAACJS1kWAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAzTklEQVR4nO29e9id45n+f3VMq0UTkZ1sCElIQiRChtikCJOo4qBtmEpKVY3SGtWaduRop0aP6VB1tDVmaKstYRimM1RLxzRiqNrviV0iCRISiYSEqtn5/fW9f+d1yrqz3jfvStb7+nz+uu7jWut5nvXcz71Zz3Gf5/2+d955550AAAAAAAAAAADoYv5oU18AAAAAAAAAAAD0THjxBAAAAAAAAAAALYEXTwAAAAAAAAAA0BJ48QQAAAAAAAAAAC2BF08AAAAAAAAAANASePEEAAAAAAAAAAAtgRdPAAAAAAAAAADQEnjxBAAAAAAAAAAALeGPm/3g+973vlZeR4fo06dPKv/+978v8dtvv51yf/RH//+7tf/7v//r9Dm32mqrdR4zImLNmjWdPm5neOedd7rsWO1Ur+91qNeeSVfWawR12050tzar5/BrP+qoo0r8gQ98IOWuu+66Lr+WGTNmpPKSJUtKfPvtt3f5+TpCd6vX7spmm21W4kGDBqWcPg9O7Tmu0VPr1a/l2GOPLfE///M/d/q4++23X4kffPDBlPvDH/7Q6eP+P3wu3dk5OmNsz6Wntlln//33L/Gdd97ZJcecOHFiKj/wwANdctyu4L1Sr+81mqlXVjwBAAAAAAAAAEBL4MUTAAAAAAAAAAC0BF48AQAAAAAAAABAS3jfO00KLTeGhvL9739/if/7v/875aZPn17i2bNnp9xVV11V4pNPPrkl13bjjTeW+OCDD065ww8/vMS33XZbytV+U2dBG9szoV57JvhP9Fy6c5tVT4mIiAMOOKDE7pV4//33l3hD/JdGjRpV4ilTpjT83AsvvJDKN910U6fP2Rm6c722M34vTjjhhBLvuuuuKfc3f/M3JX7jjTeqx1Fqddfd6vVDH/pQiT/5yU+m3Iknnljifv36pdzmm29e4m233TblXn755XUeP+Ld3m5z584t8ZFHHplyl19+eYnvuOOOlNP2qh6srYIxtueyqdpsZ33kdIwbN25cyml56NChKXfooYeWuH///in32GOPldjHRvfGU18n98nTsVvH9IiIp59+usQvvvhiw1xX0d36YmgOPJ4AAAAAAAAAAGCTwYsnAAAAAAAAAABoCW0ltfvjP/7jEv/P//xPyvXu3bvE8+fPTzldHqzLHCMili9f3vB8ta1cXU538803l1iXKkdEjBgxosT/+7//m3K139RZWKLYM6FeeybIAHou3bnNfuMb30hlHZ903PLcW2+9lXLPP/98if1+uJxg4MCBJV64cGHKbbnlliV2WfoPf/jDd/+AFtKd63Vj4M+Hzntq965Xr16p/J3vfKfEPle7/vrrS/zII4+k3GabbVZinbet7/ztWK/bbbddiX/+85+nnM5R+/Tpk3LaDr1NqjTm6KOPTjmV1+l9jHj3Nu4q1Rk7dmzK6bzbn4fVq1eXeNGiRSmn/U5XSXgYY3su7dhmhw0bVuIvfvGLKbfbbruV+M0330y51157rcTPPvtsym2zzTYldhn6+PHjS7xixYqU++AHP5jK+v/YJer6+12ip32z/zdes2ZNif/2b/825Vz61yztWK+w4SC1AwAAAAAAAACATQYvngAAAAAAAAAAoCXw4gkAAAAAAAAAAFpCW3k8Nbt9pW/nPGnSpBK7plZ1s+tD/Sfuu+++lBs8eHCJr7jiipT73Oc+1/Q5ugK0sT0T6rVngv9Ez6U7t1ndrj4i+zq8//3vT7lVq1aV+L/+679Szv1dauj47Nusq+eEe8+4r0Sr6c712tnzd3U/tS7cJ2jatGkNP7t27doS//jHP065Zq/Vf7v7QW0IXVWv//Ef/1Hi7bffPuXeeOONEvu1q6+W+i1F5Ptz2WWXpdzFF19c4oceeijlrrnmmlQ+66yzSrxs2bJ1/4B4t7ep0rdv31R+6aWXSjx58uSG3+sIjLE9l43VF3tOz9u/f/+Uu/LKK0vsnsPaTrzN6rjm4+Yf/vCHEruPsPovDRkyJOXUY9HPv8MOO6Sc9hPat0Tk8d/9iPv161di/S8cEXH++eeXePHixdEs7TDG+jzHvSU7wxlnnJHKt9xyS4m7ytPu2GOPTeU5c+aU+NVXX+2Sc3QWPJ4AAAAAAAAAAGCTwYsnAAAAAAAAAABoCc2vkd8INLv0TreDjchL/32Jvh5Tt8CMiBgxYkQqz507t8QrV65MOV0yeccddzS8Nt+GsiuXdgMA9AR8mbn3k1qufbYj/euBBx5YYl9m/sADD5T4vdKHb7nllqms99nvgY6jDz/8cMrp+Fs7ZkTE22+/XWJfzq/32ZfAQ+fRuqtJEnzuVJNPfeITn0jl0aNHl9jlWlOnTi2xS1ZefPHFEuuzEZG3CXfLBJUT1K57Y8gHO8oJJ5yQykOHDi2xy9k233zzEvu8V9uP3ztth6eddlrKXXLJJSV2id7nP//5VFaJbe0++3FUsvLKK6+knMoJP/WpT6WcPzsAG4taX/Gtb30rlRctWlTi1157LeW22mqrhsfUsdLHWG3fw4cPTzmdr7i0TvuIiNwX+xir5S222CIa4d9bvXp1iX0+dPzxx5f43HPPbXjMdsSldTW7n5EjR5Z4+vTpKadzS73/ERFHHXVUidesWZNyOo65TZBaD0REHHzwwSVesmRJys2cObPEPlZqH/vCCy9EO8CKJwAAAAAAAAAAaAm8eAIAAAAAAAAAgJbAiycAAAAAAAAAAGgJbeXxpNT05L4l4e67717iFStWpJxuQ+naWEf1lr5ltOo9/RwK27ACdJ7a1uyuO4fuhdZtR+qyI5/VrYZPOumklBs4cGCJ3b9GPZ7cw6Cm++9uqI+Ee0z07t27xG+99VbKqW9Fnz59Uu71118vsXu9+Dm0Lr1eR40aVWLfolo9a9wLATqPPs81Tyf3Jbr88stTecqUKSWeNm1aym299dYlVk+niPws7bHHHil34403lnjChAkpd+uttzZ13e2I3quIfP0+f9Q28vvf/z7l1NvF74F6ibgHjPqR+Dxbt3SPyH1h7T57Tr1T3PdN59ZHHHFEyuHxBO3CQQcdVOIxY8ak3KOPPlri3XbbLeUef/zxErv3mo6PPpeojY36Pffw8bbn/12Vmo+iXo/nPvzhD5d47dq1KbfzzjuX2H2U1/efe1Pj/W1tfnfppZeW2L2htB/1nNaX182OO+7Y8Hvu6adeYv5caf0MHjw45f7hH/6hxGeeeWbKLViwIDYFrHgCAAAAAAAAAICWwIsnAAAAAAAAAABoCW0rtauhS7AjIo455piGn9WtXGvbN0fk5XK+1FCXK8+ZM6fh+bq7FANgU9IRWZVKg1y+sMsuu5RYZUIRWXKlx/Dzu2xItzA9/fTTG16Xy4veq9RkVr6MWLdOj8jLilWqE5H74o997GMppzIS3+ZYJdq6bNrpyPLr7oYuya5J7VQ+F5HHRm8zOo76UnJvQ9oWfbm4bivvS8D79etXYqR2ncefZZW/+hbeAwYMKLHe/4iIn/3sZ6l86KGHlniHHXZIuQsuuKDE8+bNSzl9Hl1mrf2FX5u2bZXJdgdcNljrX2rjkUrvXE6nx/QxVbdmd6mdl2vX5vNnReU/3rerjHefffZpeAyATcmJJ55Y4lWrVqWc9o3+X1FzLkvTNtsRWxZtw94m/TjaLmtzUZfV6nG8z1i8eHGJXR6rv8ll1j/60Y8anr8dqPVvs2fPTmWdh9bu64MPPpjKOl/RcTIiYuXKlSVWW6CId89f9Vnq27dvyqmcWf+nRESMHTu2xF/5yldS7tRTT33X9W8M+IcEAAAAAAAAAAAtgRdPAAAAAAAAAADQEnjxBAAAAAAAAAAALaFbejzdf//9qaz69pr20vXr7imguvTatu6+7aHSk/xAAFqBttGaT8T3v//9VFatckTdx0mP21kNvOdUR33llVem3H333dfwfD0NvS9+j/Teet2qT8w3v/nNlLvzzjtT+bDDDiuxb8mrW7D7OVQXr55OEXlbWaen19n/Y/vtty+xe8b079+/xAsXLkw5HTv9nutY6R5P7n+hvk7+WfV+GTRoUMqpp0G7b9Hcbuiz7fOTiRMnlnjy5Mkppz5fr776asq555P6X/z1X/91yj3xxBMNr03r3J859bxYvnx5yulYoJ5FEe9u9+2G+6epz9UWW2yRcuoB4u1V+16fk2ob9e/p8+Bbsdc8wLzd1+a66uHnY7P65fgxtA9asWJFw+MDdDUzZ85MZW0n7vG07bbblti3r9f/p+5lqeOh+yjVxljF24z/r1V8jNXj+rXVfDVPOumkErs3o/o/jRgxouG1eV+zqaiNh5/85CdLfMABB6TcmjVrSuz+WHqf3dfrueeeK/Eee+yRctpvP/nkkynnz9X8+fNL/PDDD6ec+lzreBIRsWzZshLvvPPODb933XXXxcaCFU8AAAAAAAAAANASePEEAAAAAAAAAAAtoW2ldrVlvLWl9r60X5fAuXzO5RW69NGPw/J+gK6hJrVTeYVuZ+vfi8hLSF955ZWU0/7DpQbatr1P0Jwvp1WZUm0pdC3XE9Dl0zXZ8Re+8IVU3muvvUr89a9/PeV8C9ivfe1rJR45cmTKvfTSSyXWrWojsiTIt/b91re+VeITTjgh5X75y1+W2Pv+2m/sbuizqdLRiCyfchmALt/2rdtrS+h92bd+1mVFCxYsKLG2tYiIYcOGlfihhx5qeD7oGCqvcMmaSuQeeOCBlLv88su7/Fr+8z//M5UnTJhQYu+LVa42atSolFPJnktNNhXTp08vsT/3eo3etj74wQ+u83MReTysWUM42ra97XZEeq7n1C3VI3Jf4tIcrUuXbJ511lkl1jEA1k1N6t4RLr300lS+9tprS3zbbbd16pjdDR+rhgwZUmKVWUVk+ejuu++ecosWLSrxgw8+mHIDBw4ssc9dlNqY6nXs/2Nr/YJ+1o+jczCfO+nc7eKLL254bd5HTZ06tcS//vWvG35vY1J7t6AWEPr/IiLiO9/5Tom/9KUvpZyOowcddFDK7bnnniX2+6Nz2euvvz7ltC+MyDI5fz60Xn/729+mnEoGe/funXI/+clPSozUDgAAAAAAAAAAuj28eAIAAAAAAAAAgJbAiycAAAAAAAAAAGgJ3dLjyVEPDte0uldF7RzqXeK598p22wCtpuZDoFr6Z555JuV0S/WI7CvhWzarzt09e7SPcI8ELdf6oM9+9rOprB4oHem7ugPe99U8jy655JIS61bpERGnn356id0zwdFtZz/3uc81PI577/3jP/5jiXVb44jsU/DYY481PHdPqz+lT58+JfbtlNVzwj0EtM34GKs+NO714p4C6sWmW1JHRNx3330lHjNmTMq5Fwx0Dm/LTz/99Drj9VF7Brzda39fm1epP1tE9pzy56jG8OHDS9yR39RKhg4dWmL3q9KxSz1gIvK9W758ecp5+22W2lzWx+aa76l6J/oW4urV6GOs/sbVq1ennG9b/17B75G2E89p31ybSx1++OGp/Itf/CKV1VPP/Y1OOeWUEteel5rHlG9Hf84555T4lltuSbnzzjuv4Tk2Fjp38fKkSZNSTr2AfMxTvx8ft7TN+H9TrXOfz+rY7J6ljtaJ14/+x9XYP+v9tNbrgAEDUk6vx+cN2he3I1dffXUq6zjmbeu4444rsfdb6uM0d+7clPvVr35V4rPPPjvlRo8eXWKd10a8uw50LPM6UO8ob3crVqwo8TbbbJNyOub+y7/8S8qpL6GjfUJn5suseAIAAAAAAAAAgJbAiycAAAAAAAAAAGgJbSu16wi6ZNCXx+kyMF9a6JIR/a7n+vfvv8HXCe+mtn1vs1vD+jJhldtERMyZM6fEV1xxRQeurjEq+/JtUX0pPWSarVeXEtS2c3bpR225cW3puC5Z9c+pTOjUU09NuVmzZpVYl1p3V/SeeX3pcuSvfvWrDb/35S9/uanjr+scymWXXZbK2vYmTpyYcpMnTy6xSrciIu69996G51Bq8uzuji59d3mMSi9UkheR69xRWYBuDxyRJTcR+d66dPbhhx8usbch32YemkfnQB2xDNA+1ZfTexvRMbC29L629bfLNFRGq5KEiDw/8/F26623LrHP+TYV3/ve99YZR0SMHz++xC6TOPnkk0vsMgmVNPp91XvpdaX33O9PRywm9Bwu/XjkkUdKrFKPiIibb765xBtzC+92pjb+ebtQjjjiiFQ+99xzSzx27NiUcwnQFltsUeKnnnoq5SZMmFDiIUOGpNzSpUtLXLvuiy++OJW1v999991TTrd19+elHbjnnntS+aMf/WjDzx500EEldvnUokWLSrzlllumnNaz92kqc/XnwetAyy7Lq/XNWs86FkdEzJgxo8QupW5HtF/z+6WWCz5/XLZsWYn9v+LXvva1Ep9//vkpp32s2wQcfPDBJfY56I9+9KMS+3zZ3zksXLiwxP6fc7/99iuxW5QoLmWuSWO1/3jiiScaHrMzsOIJAAAAAAAAAABaAi+eAAAAAAAAAACgJfDiCQAAAAAAAAAAWkKP8HhSzbp7Q6j20vXq7guj22K6x0Wz9OStuDtLzVOgtjW7MmzYsFRWvfiUKVNS7q677krln//85yU+5JBDUk79nxy9Vtfb6vbIXufqb+D+Uz3B/2dDaXYrTq9z325b66fWtjvi8VTzNdEtVF0rfeWVV5bYfRfaFfUNcB8Q1X77s//d7363xL5duW7D7NR8ozqCatiPPPLIlHPNfiPc/2LXXXctsXquRGTvg4suuqjp62xHtN/0LYHV50N9ECLqXnzax/nn1G8nIrev3r17p1zNR6p2fmiejvgv1eZOteP6GF/zqKnhHmSK9h8+xqo3oM/x2pFHH310nXFEnh+pf09ExEMPPVTi2hjnfbv2+zVvqIjsrebPjvoh7rTTTin37W9/u8RXXXVV9GT0fq7PC61Z9t577xKfdtppDXM777xzyqkX0e23355y2267bSpr3+z99Ntvv13iO++8M+V+8YtfrPN8EdkHxz2MVq5cWWL3BDvzzDNLrH6Z7UJHPCnVo0rvY0T9P6a2PR8L9Xvev/q11Hzz9Fn1+bTO8x577LGU6w6+TkptzFE/sddffz3l9N76/0o95tlnn51yehx/Vm699daG16K+Tt4+/Tif/vSnS3zjjTemnP7nHTduXMPzvfzyy6ms/ZPnLrjgghK7p9mGvudgNgcAAAAAAAAAAC2BF08AAAAAAAAAANAS2nYdsi8B1qVdJ554YsPv+XIxXSrsS/vnz5+fyrr1sy4jjsjbf+65554p9+CDD5a4I0syexI1+ZTeg9r98K0/dfmtL+XWpYa+bes3vvGNVJ45c2aJdUvKiIiRI0eWWLcTj8i/aeDAgSmn1+O/V7ei9W1J9VnpyNbW3Y3adqY1tJ25hMLrR5cN+2e1TlzOqd9zdBtbv25dju4ypcMPP7zhMdsF75tqMtd99923xN///vdT7mc/+1mJL7nkkqbP11UyZJUQaNuOyBJI7T8iInbYYYcS+xbROm4sWbIk5XRJum7x3h1RiYP3hfq8u7xSl/p7vaqkwvv3rbbaKpW1j/c2WxsnXLIAzVMbZ7RN1tpnR9purb/vbB+g0vaIiFdeeaXE/qyo1K5dqNWBjpUuzdL5q28zX5tLqcTQ+/na2OzH1Ov2z+o5XnzxxZTbYostGl6bnt/P165WFTWZeLN2Ec7RRx9d4vPOOy/l9Blevnx5yul4dNNNNzU8vm+PrhK5iDzOqUQuIten9+FnnHHGOuOILDny/2KKWxXonLkd8Tpvtg25RE3/R+hc07/n7aAjUvNa26/J+XSM1f7V6cj/lo3VnmvvC04//fSUU4ny6NGjU07rZPjw4Smn885DDz005VSW9sUvfjHltA5c2qfzbJetLl68OJUPPvjgEvs4seOOO5Z4zJgxKaf/Qfv165dygwYNKrG311122aXEN9xwQ8odddRRsSGw4gkAAAAAAAAAAFoCL54AAAAAAAAAAKAl8OIJAAAAAAAAAABaQtt6PNX061/4whdSWbeod03rdttt1/CYqm+MyJpX9/JQzah7nkyePLmp6+7J6P1RX4KIfJ/dZ0u3NT/ssMNS7tprry3x+eefn3JaV9dcc03KPfnkkw3P71pg1bF63amvhHt+6XPm2tjHH398nbHTrn4GnaG2nbNT+92zZ88u8bJly6rH1GfAt82u+cXU/Bpq/iTNbo2sWuxNjd4z/626fau3Id2e1b2Sfve73zV17lpfWNPkr4+pU6eW2D0U+vbtu844IvsW+Lbl6jf03HPPNbxW1+h3N/R3uo/DiBEj1vm5iOzx5F58/lnFt9Su5fS43p/UfNmgzqYeZ3z7b6XZ+ZJ76qkHjnuV6Njc2e3su5paHdTGHJ3bOjrm+finfi1+bv2s3x//bG38qPmDrVmzpuF1N+sr1k40+5x+5CMfSeXPfvazJd5///0bHtPnkDquab8cEfHmm2+WWH0LI/Lc28dY92pSXyX3l1HvG/eY0rnwG2+8kXJa9napde3zaf8v1u7Unlv9bT5uaV/o91V90WqehutrM9r/+Vhda3ud9Zxthzbs16DP72mnnZZy6uPk91k9Sz/zmc+knLYff8+g5/C+WL3W1q5dm3IrV64ssfeZPuZpezr22GNTTvvx7373u9GIAw88sOH51bs1ImLGjBklHjVqVMppP3fHHXc0PF8jWPEEAAAAAAAAAAAtgRdPAAAAAAAAAADQEtpKaleTwKgsZM8990w53XbQly3rUmWX7vgyO1226pKwefPmldiXzA4ePLjEL730UsrVflM74JIGLXdkmbpu0+hLG3Up3t13351ys2bNKrEvzb3xxhsbXqc+A75EdNy4cal85ZVXlviII45IOd1S9t577005vVavVy83S7s/D53Ff0uzv+2iiy5K5d12263ELlP0JayKL93WJc2+3Fmf69r3Osuuu+66wcfoLDUJ29Zbb51yf/d3f1fiW2+9NeUGDBhQ4rPOOivlmpXa1a5tfcuz9VpPOumklNOtXHVr6YgskXZZnJ7ft1zv1atXiX0MUSlZZ7fObhe0Xfr27EOGDCmx97cqA/D25GOlUpPaeR3UZD21tg9dw4bIX2ttu7ZNuH5PZe8ReVvqpUuXptwTTzxRYm+vKmGpydi6A9q/ef1oG/X2oWOc91laH35Mv186HtaeD8/VpEKdlfRsTLyPO/7440vscpWPfvSjJVYZXESuB5UrR+T68+/p2OVtRvtUlcpE5C3g1aoiIuIv/uIvUvmrX/1qiX/605+mnG6f7jI4/R+lsiW/Np9b6e/w/t1lRd0Z/S0+56r1TSqL82elJo/1Z1Xvs89ntb78ODrG+/jf3VB7CH/Wnn766RJPnDgx5XROPH/+/JRTW5gXXngh5bTd+f+Wv/zLvyzxGWeckXLbb799iSdNmpRyU6ZMSWX9r/rjH/845bR/cssandv6c6XywVNOOSXl9L75GHLBBReU+JBDDomO0r2fLgAAAAAAAAAAaFt48QQAAAAAAAAAAC2BF08AAAAAAAAAANAS2so4oeYpoBpG1wPrttCuaVXfIPWJini31lx1tK4LVa8o3xLxe9/7Xol9m8N29/HprDePs/fee5dYdbIRdV8U9W+ZOXNmyukW777d+/Tp00t88cUXp9x5552XymPGjCnxpz/96YbXsjFo9+dhY3DOOeeU+PTTT0859e5w7bqXtf26Xl7L3ieotr2ms3e0f6pp4Gvby7eaWh/qnkd6r3/729+mnLYT97SrUfN6qXmCfPzjH09l9WLz49x8880l9vrT7aTdQ0j9DVT3HpG9VNyboiehY5z7L6ne37079Jn2Pky9Idw3ws+hbdj9L/r06VNi9yJw/z9onmY9dTZkW+xa29acexHpmK9eORHZZ8afh5133rnEL774Ysp1xJuy3amNMzXvrFpOqflGebn2HHmu1oe2w/br6+Pf/u3fUlnnt+6rpL49/t9Ay96Haf/n90/9Zp955pmUGzlyZIl9vqLXpseIiJg9e3bD46gPTURub/5MDBw4MBqh7dvrWZ8JH18mTJhQYh+b25HaPP6tt94qcd++fVNu4cKFJfaxsfb/s9b2fH6rcyK/zzon0ut0ulsfeuGFF6byHnvsUWJtnxER9913X4nXrFmTckceeWSJv/nNb6bcVVddVeKrr7465dRz+E/+5E9S7txzzy2xzpUicv/gvk36HzciYujQoSVWL9yIXJfur3f77beX+Je//GXK6X3r379/ymkfOGzYsJQ74IADSnzZZZdFR2HFEwAAAAAAAAAAtARePAEAAAAAAAAAQEvgxRMAAAAAAAAAALSEbuPxpJ4j7uuhuknXI6vGdcGCBSmnnhIREYMHDy6xa1xVL/3GG2+k3NSpUxted7ujWtiIiIMPPrjEqg2NiHjuuedKvGrVqpRTrXnN08nRe3nppZemnJZdf3rPPfeU2Otqr732SmX1gBo1alTKqXfJoEGDUk619a4F1ufMdfbqleKaf/XZUd+wdqVZj4ka7h+g2mnVW0fktuyeTv5cqSbeNfD6XT9OzbdCz1HzlKp5QT366KMNc13B2LFjU3n8+PEldj+IZcuWldg9nrRNeT+gv69fv35NX1utD1eN+owZM1JOPVsislfFCy+8kHLqU+DXpn4H7guj9en+CosXLy6x1633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\n"
905 | },
906 | "metadata": {}
907 | }
908 | ]
909 | },
910 | {
911 | "cell_type": "code",
912 | "source": [
913 | "# Computing OOD metrics\n",
914 | "\n",
915 | "network.eval()\n",
916 | "\n",
917 | "uncertainties = np.array([])\n",
918 | "labels = np.array([])\n",
919 | "eps = 1e-10\n",
920 | "\n",
921 | "with torch.no_grad():\n",
922 | " for data, target in test_loader:\n",
923 | "\n",
924 | " data = data.to(device)\n",
925 | " prob = inference_test(data)\n",
926 | " uncertainty = (-prob * torch.log(prob + eps)).sum(dim=1).cpu().detach().numpy()\n",
927 | " label = np.zeros_like(uncertainty)\n",
928 | "\n",
929 | " uncertainties = np.concatenate([uncertainties, uncertainty])\n",
930 | " labels = np.concatenate([labels, label])\n",
931 | "\n",
932 | "with torch.no_grad():\n",
933 | " for data, target in test_fashion_loader:\n",
934 | "\n",
935 | " data = data.to(device)\n",
936 | "\n",
937 | " prob = inference_test(data)\n",
938 | " uncertainty = (-prob * torch.log(prob + eps)).sum(dim=1).cpu().detach().numpy()\n",
939 | " label = np.ones_like(uncertainty)\n",
940 | "\n",
941 | " uncertainties = np.concatenate([uncertainties, uncertainty])\n",
942 | " labels = np.concatenate([labels, label])"
943 | ],
944 | "metadata": {
945 | "colab": {
946 | "base_uri": "https://localhost:8080/"
947 | },
948 | "id": "siZj8y_8IVDg",
949 | "outputId": "0281b8fa-98ed-490e-c464-c5b806083a7a"
950 | },
951 | "execution_count": 11,
952 | "outputs": [
953 | {
954 | "output_type": "stream",
955 | "name": "stderr",
956 | "text": [
957 | ":31: UserWarning: Implicit dimension choice for log_softmax has been deprecated. Change the call to include dim=X as an argument.\n",
958 | " return F.log_softmax(x)\n"
959 | ]
960 | }
961 | ]
962 | },
963 | {
964 | "cell_type": "code",
965 | "source": [
966 | "import sklearn.metrics\n",
967 | "roc_auc = sklearn.metrics.roc_auc_score(labels, uncertainties)\n",
968 | "precision, recall, thresholds = sklearn.metrics.precision_recall_curve(labels, uncertainties)\n",
969 | "pr_auc = sklearn.metrics.auc(recall, precision)\n",
970 | "\n",
971 | "# evaluate ROC- and PR-AUC metrics, see https://arxiv.org/abs/1802.10501 for more details\n",
972 | "print(f\"ROC AUC: {roc_auc:.4f} \")\n",
973 | "print(f\"PR AUC: {pr_auc:.4f}\")"
974 | ],
975 | "metadata": {
976 | "id": "Lxy3IUwzMK_x",
977 | "outputId": "0051f24c-f1bd-49f0-8f5a-82443d59cea8",
978 | "colab": {
979 | "base_uri": "https://localhost:8080/"
980 | }
981 | },
982 | "execution_count": 12,
983 | "outputs": [
984 | {
985 | "output_type": "stream",
986 | "name": "stdout",
987 | "text": [
988 | "ROC AUC: 0.9536 \n",
989 | "PR AUC: 0.9517\n"
990 | ]
991 | }
992 | ]
993 | },
994 | {
995 | "cell_type": "code",
996 | "source": [
997 | "# Plot ROC curve\n",
998 | "fpr, tpr, _ = sklearn.metrics.roc_curve(labels, uncertainties)\n",
999 | "plt.figure()\n",
1000 | "plt.plot(fpr, tpr, label=f'ROC curve (area = {roc_auc:.2f})')\n",
1001 | "plt.plot([0, 1], [0, 1], 'g--', label=\"Random classifier\")\n",
1002 | "plt.hlines(1, xmin=0, xmax=1, color='k', linestyle=\"--\")\n",
1003 | "plt.vlines(0, ymin=0, ymax=1, color='k', linestyle=\"--\")\n",
1004 | "plt.xlim([-0.01, 1.05])\n",
1005 | "plt.ylim([0.0, 1.05])\n",
1006 | "plt.xlabel('False Positive Rate')\n",
1007 | "plt.ylabel('True Positive Rate')\n",
1008 | "plt.title('Receiver Operating Characteristic')\n",
1009 | "plt.grid()\n",
1010 | "plt.legend(loc=\"lower right\")\n",
1011 | "plt.show()\n",
1012 | "\n",
1013 | "# Plot PR curve\n",
1014 | "plt.figure()\n",
1015 | "plt.plot(recall, precision, label=f'PR curve (area = {pr_auc:.2f})')\n",
1016 | "plt.hlines(1, xmin=0, xmax=1, color='k', linestyle=\"--\")\n",
1017 | "plt.vlines(1, ymin=0, ymax=1, color='k', linestyle=\"--\")\n",
1018 | "plt.xlabel('Recall')\n",
1019 | "plt.ylabel('Precision')\n",
1020 | "plt.title('Precision-Recall curve')\n",
1021 | "plt.xlim([-0.01, 1.05])\n",
1022 | "plt.ylim([0.0, 1.05])\n",
1023 | "plt.grid()\n",
1024 | "plt.legend(loc=\"lower left\")\n",
1025 | "plt.show()\n"
1026 | ],
1027 | "metadata": {
1028 | "id": "qGoMn6os0oZl",
1029 | "outputId": "e351b1aa-21ed-45f0-b8d3-bd336647afaa",
1030 | "colab": {
1031 | "base_uri": "https://localhost:8080/",
1032 | "height": 947
1033 | }
1034 | },
1035 | "execution_count": 13,
1036 | "outputs": [
1037 | {
1038 | "output_type": "display_data",
1039 | "data": {
1040 | "text/plain": [
1041 | ""
1042 | ],
1043 | "image/png": "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\n"
1044 | },
1045 | "metadata": {}
1046 | },
1047 | {
1048 | "output_type": "display_data",
1049 | "data": {
1050 | "text/plain": [
1051 | ""
1052 | ],
1053 | "image/png": "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omqhZ8+eWLx4MQwGAz7++GMolUo8/vjjOH78OIxGI3r37u0Qbzabcd999wEAjh49im7duomFze1SUlIwY8YM7Nq1C6mpqbDZbDAajbh06VKVvy4icj0WN0RULXh4eKBRo0YAgG+++QZt27bF0qVL0apVKwDAxo0bUbt2bYd9NBoNAECn05V57FGjRiEjIwMLFy5EvXr1oNFoEBUVBbPZXAWvhIikxuKGiKoduVyO6dOnIyYmBqdPn4ZGo8GlS5fQo0ePEuPbtGmDb7/9FhaLpcSzN/v27cPnn3+OAQMGAAAuX76M9PT0Kn0NRCQdDigmomppyJAhUCgU+OKLL/Dqq69iypQp+Pbbb3H27FkcPnwYn376Kb799lsAwOTJk5GdnY2nnnoKBw8eRFJSEv773//i1KlTAIDGjRvjv//9L06cOIH//e9/GD58+B3P9hBRzcUzN0RULSmVSkyePBnz5s3D+fPnERQUhLi4OJw7dw6+vr5o3749pk+fDgAICAjAjh078Nprr6FHjx5QKBRo164dunbtCgBYunQpnnvuObRv3x7h4eF477338Oqrr0r58oioCskEQRCkToKIiIjIWdgtRURERG6FxQ0RERG5FRY3RERE5FZY3BAREZFbYXFDREREboXFDREREbkVFjdERETkVljcEBERkVthcUNERERuhcUNERERuRUWN0RERORWWNwQERGRW/l/Q0W/WRFaKssAAAAASUVORK5CYII=\n"
1054 | },
1055 | "metadata": {}
1056 | }
1057 | ]
1058 | },
1059 | {
1060 | "cell_type": "code",
1061 | "source": [],
1062 | "metadata": {
1063 | "id": "tMHnbvfr0sdC"
1064 | },
1065 | "execution_count": null,
1066 | "outputs": []
1067 | }
1068 | ]
1069 | }
--------------------------------------------------------------------------------