Computer_Vision/Chapter04/CNN_on_FashionMNIST.ipynb

611 lines
165 KiB
Plaintext
Raw Permalink Normal View History

2024-02-13 03:34:51 +01:00
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"name": "CNN_on_FashionMNIST.ipynb",
"provenance": [],
"include_colab_link": true
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
},
"accelerator": "GPU"
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"<a href=\"https://colab.research.google.com/github/PacktPublishing/Modern-Computer-Vision-with-PyTorch/blob/master/Chapter04/CNN_on_FashionMNIST.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"cell_type": "code",
"metadata": {
"id": "lKXHmN72oSr-"
},
"source": [
"from torchvision import datasets\n",
"import torch\n",
"data_folder = '/content/' # This can be any directory you want to download FMNIST to\n",
"fmnist = datasets.FashionMNIST(data_folder, download=True, train=True)"
],
"execution_count": 15,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "8quMVIspoXAc"
},
"source": [
"tr_images = fmnist.data\n",
"tr_targets = fmnist.targets"
],
"execution_count": 16,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "pCybp42UoYfD"
},
"source": [
"val_fmnist = datasets.FashionMNIST(data_folder, download=True, train=False)\n",
"val_images = val_fmnist.data\n",
"val_targets = val_fmnist.targets"
],
"execution_count": 17,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "_wf7B5v_oZpV"
},
"source": [
"import matplotlib.pyplot as plt\n",
"%matplotlib inline\n",
"import numpy as np\n",
"from torch.utils.data import Dataset, DataLoader\n",
"import torch\n",
"import torch.nn as nn\n",
"device = 'cuda' if torch.cuda.is_available() else 'cpu'"
],
"execution_count": 18,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "DeG0gLx4oavL"
},
"source": [
"class FMNISTDataset(Dataset):\n",
" def __init__(self, x, y):\n",
" x = x.float()/255\n",
" x = x.view(-1,1,28,28)\n",
" self.x, self.y = x, y \n",
" def __getitem__(self, ix):\n",
" x, y = self.x[ix], self.y[ix] \n",
" return x.to(device), y.to(device)\n",
" def __len__(self): \n",
" return len(self.x)\n",
"\n",
"from torch.optim import SGD, Adam\n",
"def get_model():\n",
" model = nn.Sequential(\n",
" nn.Conv2d(1, 64, kernel_size=3),\n",
" nn.MaxPool2d(2),\n",
" nn.ReLU(),\n",
" nn.Conv2d(64, 128, kernel_size=3),\n",
" nn.MaxPool2d(2),\n",
" nn.ReLU(),\n",
" nn.Flatten(),\n",
" nn.Linear(3200, 256),\n",
" nn.ReLU(),\n",
" nn.Linear(256, 10)\n",
" ).to(device)\n",
"\n",
" loss_fn = nn.CrossEntropyLoss()\n",
" optimizer = Adam(model.parameters(), lr=1e-3)\n",
" return model, loss_fn, optimizer\n",
"\n",
"def train_batch(x, y, model, opt, loss_fn):\n",
" prediction = model(x)\n",
" batch_loss = loss_fn(prediction, y)\n",
" batch_loss.backward()\n",
" optimizer.step()\n",
" optimizer.zero_grad()\n",
" return batch_loss.item()\n",
"\n",
"@torch.no_grad()\n",
"def accuracy(x, y, model):\n",
" model.eval()\n",
" prediction = model(x)\n",
" max_values, argmaxes = prediction.max(-1)\n",
" is_correct = argmaxes == y\n",
" return is_correct.cpu().numpy().tolist()\n"
],
"execution_count": 19,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "-VxMySqHoyUc"
},
"source": [
"def get_data(): \n",
" train = FMNISTDataset(tr_images, tr_targets) \n",
" trn_dl = DataLoader(train, batch_size=32, shuffle=True)\n",
" val = FMNISTDataset(val_images, val_targets) \n",
" val_dl = DataLoader(val, batch_size=len(val_images), shuffle=True)\n",
" return trn_dl, val_dl"
],
"execution_count": 20,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "MKIE_sjtpRP6"
},
"source": [
"@torch.no_grad()\n",
"def val_loss(x, y, model):\n",
" model.eval()\n",
" prediction = model(x)\n",
" val_loss = loss_fn(prediction, y)\n",
" return val_loss.item()"
],
"execution_count": 21,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "r2hKhLHQpSqx"
},
"source": [
"trn_dl, val_dl = get_data()\n",
"model, loss_fn, optimizer = get_model()"
],
"execution_count": 22,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "WQmmjw70pUe9",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "e8836519-77c7-4b75-f009-d7fd3cd03e14"
},
"source": [
"!pip install torch_summary\n",
"from torchsummary import summary\n",
"model, loss_fn, optimizer = get_model()\n",
"summary(model, torch.zeros(1,1,28,28));"
],
"execution_count": 23,
"outputs": [
{
"output_type": "stream",
"text": [
"Requirement already satisfied: torch_summary in /usr/local/lib/python3.6/dist-packages (1.4.3)\n",
"==========================================================================================\n",
"Layer (type:depth-idx) Output Shape Param #\n",
"==========================================================================================\n",
"├─Conv2d: 1-1 [-1, 64, 26, 26] 640\n",
"├─MaxPool2d: 1-2 [-1, 64, 13, 13] --\n",
"├─ReLU: 1-3 [-1, 64, 13, 13] --\n",
"├─Conv2d: 1-4 [-1, 128, 11, 11] 73,856\n",
"├─MaxPool2d: 1-5 [-1, 128, 5, 5] --\n",
"├─ReLU: 1-6 [-1, 128, 5, 5] --\n",
"├─Flatten: 1-7 [-1, 3200] --\n",
"├─Linear: 1-8 [-1, 256] 819,456\n",
"├─ReLU: 1-9 [-1, 256] --\n",
"├─Linear: 1-10 [-1, 10] 2,570\n",
"==========================================================================================\n",
"Total params: 896,522\n",
"Trainable params: 896,522\n",
"Non-trainable params: 0\n",
"Total mult-adds (M): 10.13\n",
"==========================================================================================\n",
"Input size (MB): 0.00\n",
"Forward/backward pass size (MB): 0.45\n",
"Params size (MB): 3.42\n",
"Estimated Total Size (MB): 3.87\n",
"==========================================================================================\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "97CcIWOBpXuw",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "8b16304b-81dd-4a4b-ea15-bab0508a8cc2"
},
"source": [
"train_losses, train_accuracies = [], []\n",
"val_losses, val_accuracies = [], []\n",
"for epoch in range(5):\n",
" print(epoch)\n",
" train_epoch_losses, train_epoch_accuracies = [], []\n",
" for ix, batch in enumerate(iter(trn_dl)):\n",
" x, y = batch\n",
" batch_loss = train_batch(x, y, model, optimizer, loss_fn)\n",
" train_epoch_losses.append(batch_loss) \n",
" train_epoch_loss = np.array(train_epoch_losses).mean()\n",
"\n",
" for ix, batch in enumerate(iter(trn_dl)):\n",
" x, y = batch\n",
" is_correct = accuracy(x, y, model)\n",
" train_epoch_accuracies.extend(is_correct)\n",
" train_epoch_accuracy = np.mean(train_epoch_accuracies)\n",
"\n",
" for ix, batch in enumerate(iter(val_dl)):\n",
" x, y = batch\n",
" val_is_correct = accuracy(x, y, model)\n",
" validation_loss = val_loss(x, y, model)\n",
" val_epoch_accuracy = np.mean(val_is_correct)\n",
"\n",
" train_losses.append(train_epoch_loss)\n",
" train_accuracies.append(train_epoch_accuracy)\n",
" val_losses.append(validation_loss)\n",
" val_accuracies.append(val_epoch_accuracy)"
],
"execution_count": 24,
"outputs": [
{
"output_type": "stream",
"text": [
"0\n",
"1\n",
"2\n",
"3\n",
"4\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "l9N0n1k0paJx",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 337
},
"outputId": "2b7a2e49-476c-45b5-f57c-9327eb98a662"
},
"source": [
"epochs = np.arange(5)+1\n",
"import matplotlib.ticker as mtick\n",
"import matplotlib.pyplot as plt\n",
"import matplotlib.ticker as mticker\n",
"%matplotlib inline\n",
"plt.subplot(211)\n",
"plt.plot(epochs, train_losses, 'bo', label='Training loss')\n",
"plt.plot(epochs, val_losses, 'r', label='Validation loss')\n",
"plt.gca().xaxis.set_major_locator(mticker.MultipleLocator(1))\n",
"plt.title('Training and validation loss with CNN')\n",
"plt.xlabel('Epochs')\n",
"plt.ylabel('Loss')\n",
"plt.legend()\n",
"plt.grid('off')\n",
"plt.show()\n",
"plt.subplot(212)\n",
"plt.plot(epochs, train_accuracies, 'bo', label='Training accuracy')\n",
"plt.plot(epochs, val_accuracies, 'r', label='Validation accuracy')\n",
"plt.gca().xaxis.set_major_locator(mticker.MultipleLocator(1))\n",
"plt.title('Training and validation accuracy with CNN')\n",
"plt.xlabel('Epochs')\n",
"plt.ylabel('Accuracy')\n",
"#plt.ylim(0.8,1)\n",
"plt.gca().set_yticklabels(['{:.0f}%'.format(x*100) for x in plt.gca().get_yticks()]) \n",
"plt.legend()\n",
"plt.grid('off')\n",
"plt.show()"
],
"execution_count": 25,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
},
{
"output_type": "display_data",
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "CeIvkLO8p3ou",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 1000
},
"outputId": "adc7a483-310d-4b72-8ab4-7ddc713603d3"
},
"source": [
"preds = []\n",
"ix = 24300\n",
"for px in range(-5,6):\n",
" img = tr_images[ix]/255.\n",
" img = img.view(28, 28)\n",
" img2 = np.roll(img, px, axis=1)\n",
" img3 = torch.Tensor(img2).view(-1,1,28,28).to(device)\n",
" np_output = model(img3).cpu().detach().numpy()\n",
" pred = np.exp(np_output)/np.sum(np.exp(np_output))\n",
" preds.append(pred)\n",
" plt.imshow(img2)\n",
" plt.title(fmnist.classes[pred[0].argmax()])\n",
" plt.show()"
],
"execution_count": 30,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
},
{
"output_type": "display_data",
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
},
{
"output_type": "display_data",
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
},
{
"output_type": "display_data",
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
},
{
"output_type": "display_data",
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
},
{
"output_type": "display_data",
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
},
{
"output_type": "display_data",
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
},
{
"output_type": "display_data",
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAPsAAAEICAYAAACZA4KlAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAATsUlEQVR4nO3de5CddX3H8fd3N3thl9w2ISHEmJAQqzFqtFtExYpjazE6RceRgXEoOGhwapxi7QwO2kodO8PYIuC0Y40FjNZimSqaTqkK0UoZlbLGkATB3NyQhCQbLrltsvdv/9hnnSXu8z3Lue/+Pq+ZnT37fM/vnG9O9rPPOed3nudn7o6ITH8NtW5ARKpDYRdJhMIukgiFXSQRCrtIIhR2kUQo7CKJUNinCTM7Ne5rxMzOjPv5g7XuT2rP9KGa6cfMuoEPu/tDE9RmuPtQ9buqrx5SpD37NGdml5nZATO7ycwOA/eYWYuZ3WFmz2Rfd5hZS3b968zskbNuw83souzyWjP7lZmdNLODZvZX4673HjPbambHzOynZvbacbXurIdtQK+ZzajOIyBjFPY0nA90AEuBdcCngUuANcDrgIuBz0zytu4CbnD3mcBq4EcAZvZ64G7gBmAe8BVg09gfkczVwLuBOdqzV5/CnoYR4LPu3u/uZ4APAp9z9x53Pwr8LXDNJG9rEFhlZrPc/QV335JtXwd8xd0fdfdhd98I9DP6R2XMl9x9f9aDVJnCnoaj7t437ucLgH3jft6XbZuM9wNrgX1m9hMze1O2fSnwyewp/DEzOwYsOet29xfXvpSDwp6Gs9+FfYbRcI55ebYNoBdoGyuY2fkvuiH3x9z9CmAB8F3gvqy0H/g7d58z7qvN3e8N+pAqUtjTdC/wGTM7z8zmA38D/GtWexx4tZmtMbNW4JaxQWbWbGYfNLPZ7j4InGD0JQLAV4GPmtkbbVS7mb3bzGZW7V8lIYU9TZ8HuoBtwHZgS7YNd98JfA54CNgFPHLW2GuAbjM7AXyU0df/uHsX8BHgH4EXgN3AdRX+d8hLoHl2kURozy6SCIVdJBEKu0giFHaRRFT188nN1uKttFfzLpPX9MrGsN5oI2G9bzj+FWmw+A1ex/LHFph2L/TW8Yjn3zbAjIb8f9vwSLyf852DBe69PvXRy4D3T/jAlBR2M7scuBNoBP7F3W+Nrt9KO2+0d5Ryl/ISnXfPnLDe0dwb1p88fn5YP2dGHIookK2N8dihkfgPVaE/RHNa8j+Ve2KgNRw7/PZnwnq9etQ359aKfhpvZo3APwHvAlYBV5vZqmJvT0Qqq5TX7BcDu919r7sPAN8CrihPWyJSbqWEfTEvPrDhQLbtRcxsnZl1mVnXIP0l3J2IlKLi78a7+wZ373T3ziZaCg8QkYooJewHGT2EcczLsm0iUodKCftjwEozu9DMmoGrgE3laUtEyq3oqTd3HzKz9cAPGJ16u9vdnyhbZzJpDe35n124Z2n+VAzAPSeWhPUlrc+H9eXNR8P63oHzcms7e+NpvYvaesL6yeF4+uzEUH79A+d1hWM3sDysT0UlzbO7+wPAA2XqRUQqSB+XFUmEwi6SCIVdJBEKu0giFHaRRCjsIonQelvTwKl3rs6t3XfqqXDswYG5Jd1370hzWG9rGMitXdB6LBw77PG+aG/v/LA+o2E4t1ao78aFC8L68JH4MwD1SHt2kUQo7CKJUNhFEqGwiyRCYRdJhMIukghNvU0Dhy/J/5v95Jl42fVCp5J+7TnxkuqHh2bHt0/+7e/pzT/8FeBNc/YUqO8N67vO5E+fHR+OT2l++H0rwvp5/6ypNxGpUwq7SCIUdpFEKOwiiVDYRRKhsIskQmEXSYTm2aeBRWsO59YKLWs84vFKqb88vTSs94/Ev0KLW17IrRVaQba7Lz6E9eUt8Wmu957KH39OgRVkX1iTf3gsQPwJgfqkPbtIIhR2kUQo7CKJUNhFEqGwiyRCYRdJhMIukgjNs08D6y/8UW5td1+8LHLP4MywXmie/tJZO8P6gYF5ubXzm0+EY9/cviusbzmzLKwva8+fh49OcQ3Q0B7Pw09FJYXdzLqBk8AwMOTuneVoSkTKrxx79re7+7NluB0RqSC9ZhdJRKlhd+CHZvYLM1s30RXMbJ2ZdZlZ1yD9Jd6diBSr1Kfxl7r7QTNbADxoZk+5+8Pjr+DuG4ANALOsw0u8PxEpUkl7dnc/mH3vAe4HLi5HUyJSfkWH3czazWzm2GXgncCOcjUmIuVVytP4hcD9ZjZ2O//m7t8vS1fykry19WBurdA8+2Wz4iWdlzfFEy2DBZZVntXQl1vr86Zw7BP9i8P6kcFZYT3q7ehA/PmCeR2nwvpUVHTY3X0v8Loy9iIiFaSpN5FEKOwiiVDYRRKhsIskQmEXSYQOcZ0CGtraih773GC8NPFD/a8O6z3954b1pW3x6Zz/cv7/5taeH4lPY91q8WGmTRaf7nkP+Us2v6I1//TbAP/91KqwPjes1ift2UUSobCLJEJhF0mEwi6SCIVdJBEKu0giFHaRRGiefQo487Z4LnzfUP5c9qG+2eHYQksXv2pmPB99Y8djYf2aPR/Irb113u5w7MfnPhHW/753RViPThe9py9/Dh6A51ri+hSkPbtIIhR2kUQo7CKJUNhFEqGwiyRCYRdJhMIukgjNs08BJ5fE/01PD3UUfdsLW+Jlkw/3x6drntsYH2s/vD5/nv8n/oZw7E0Pxks2tzXGy4n1DOT3XuhY+IaBeKnqqUh7dpFEKOwiiVDYRRKhsIskQmEXSYTCLpIIhV0kEZpnnwIG5sRzvoOe/9945Ey8NPGJwdaw/p4F28L6107Ex4WP7IiXhI4MejwXPjNYDhrg8b4lubWO5t5wbNPJBOfZzexuM+sxsx3jtnWY2YNmtiv7PhXPmS+SlMk8jf8acPlZ2z4FbHb3lcDm7GcRqWMFw+7uDwNnr/FzBbAxu7wReG+Z+xKRMiv2NftCdz+UXT4MLMy7opmtA9YBtFL8mmUiUpqS3413dwc8qG9w905372xi+p3ET2SqKDbsR8xsEUD2vad8LYlIJRQb9k3Atdnla4HvlacdEamUgq/Zzexe4DJgvpkdAD4L3ArcZ2bXA/uAKyvZZOqC058DsK9/fm6tqSGeq57VFM9Vf2h2d1j/o/Xrw3obj4b1yGXb8885D/DXF/1XWP8f/73c2pnh5nBsgUPlp6SCYXf3q3NK7yhzLyJSQfq4rEgiFHaRRCjsIolQ2EUSobCLJEKHuE4BLcdyP6AIwOmR/Gmk04PxFNOS9mNF9TSm7f7ip9YKefax3E9hA9C0ciisD43k78uePhUfqDnSGJanJO3ZRRKhsIskQmEXSYTCLpIIhV0kEQq7SCIUdpFEaJ59Cmg9Fh+m+vSZ/DnjBovn6C9qi887cttzq8N6JbUdjk/nPOzxvur4wDm5tX1H43n2Bbvix3wq0p5dJBEKu0giFHaRRCjsIolQ2EUSobCLJEJhF0mE5tmngMa+eK68JThd9AXtx8OxF7bE8+w3b8o7ufCoFfw8rNuM/F8xH4qPR5/9m8GwfnIkfx4d4MDzc/Lvu7s9HHt8WTzHH4+uT9qziyRCYRdJhMIukgiFXSQRCrtIIhR2kUQo7CKJ0Dz7FDDcEs/5XnjOs7m1nsGZ4dh5jafCevuBEvcHjcEJ2AvMs7ftfj6sF+p96bz88fu3xI/Lwq54KeupqOD/pJndbWY9ZrZj3LZbzOygmW3NvtZWtk0RKdVk/mx/Dbh8gu23u/ua7OuB8rYlIuVWMOzu/jAQP58SkbpXyguy9Wa2LXuan3tCLzNbZ2ZdZtY1SH8JdycipSg27F8GVgBrgEPAbXlXdPcN7t7p7p1NtBR5dyJSqqLC7u5H3H3Y3UeArwIXl7ctESm3osJuZovG/fg+YEfedUWkPhScZzeze4HLgPlmdgD4LHCZma0BHOgGbqhgj8mbuT0+5nyE/Hn4RkbCsU0Wnx+9/VA8vhAfjOfSI8M794T1H596VVh/47zu3Nqsd8fz6PsOvCKs5x8pX78Kht3dJzp7w
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
},
{
"output_type": "display_data",
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
},
{
"output_type": "display_data",
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
},
{
"output_type": "display_data",
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "n-YPXmWxqon7",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "8b0df65f-2ee9-4343-fc6b-5dc0f639df14"
},
"source": [
"np.array(preds).shape"
],
"execution_count": 27,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"(11, 1, 10)"
]
},
"metadata": {
"tags": []
},
"execution_count": 27
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "Xnz-eFGTp4G8",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 625
},
"outputId": "71714277-f31b-4ebf-fd55-a03984dff7ea"
},
"source": [
"import seaborn as sns\n",
"fig, ax = plt.subplots(1,1, figsize=(12,10))\n",
"plt.title('Probability of each class for various translations')\n",
"sns.heatmap(np.array(preds).reshape(11,10), annot=True, ax=ax, fmt='.2f', xticklabels=fmnist.classes, yticklabels=[str(i)+str(' pixels') for i in range(-5,6)], cmap='gray')"
],
"execution_count": 28,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x7f6f58fa99b0>"
]
},
"metadata": {
"tags": []
},
"execution_count": 28
},
{
"output_type": "display_data",
"data": {
"image/png": "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
"text/plain": [
"<Figure size 864x720 with 2 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "JTsjWPuyqNNU"
},
"source": [
""
],
"execution_count": 28,
"outputs": []
}
]
}