|
| 1 | +{ |
| 2 | + "cells": [ |
| 3 | + { |
| 4 | + "cell_type": "markdown", |
| 5 | + "metadata": {}, |
| 6 | + "source": [ |
| 7 | + "# VISUALIZING MODELS, DATA, AND TRAINING WITH TENSORBOARD" |
| 8 | + ] |
| 9 | + }, |
| 10 | + { |
| 11 | + "cell_type": "markdown", |
| 12 | + "metadata": {}, |
| 13 | + "source": [ |
| 14 | + "# From \n", |
| 15 | + "# https://pytorch.org/tutorials/intermediate/tensorboard_tutorial.html" |
| 16 | + ] |
| 17 | + }, |
| 18 | + { |
| 19 | + "cell_type": "markdown", |
| 20 | + "metadata": {}, |
| 21 | + "source": [ |
| 22 | + "### Steps in Tensorboard \n", |
| 23 | + "### 1. Set up TensorBoard.\n", |
| 24 | + "### 2. Write to TensorBoard.\n", |
| 25 | + "### 3. Inspect a model architecture using TensorBoard.\n", |
| 26 | + "### 4. Use TensorBoard to create interactive versions of the visualizations we created in last tutorial, with less code" |
| 27 | + ] |
| 28 | + }, |
| 29 | + { |
| 30 | + "cell_type": "markdown", |
| 31 | + "metadata": {}, |
| 32 | + "source": [ |
| 33 | + "## Use Boilerplate code as in the CIFAR-10:" |
| 34 | + ] |
| 35 | + }, |
| 36 | + { |
| 37 | + "cell_type": "code", |
| 38 | + "execution_count": 1, |
| 39 | + "metadata": {}, |
| 40 | + "outputs": [], |
| 41 | + "source": [ |
| 42 | + "# imports\n", |
| 43 | + "import matplotlib.pyplot as plt\n", |
| 44 | + "import numpy as np\n", |
| 45 | + "\n", |
| 46 | + "import torch\n", |
| 47 | + "import torchvision\n", |
| 48 | + "import torchvision.transforms as transforms\n", |
| 49 | + "\n", |
| 50 | + "import torch.nn as nn\n", |
| 51 | + "import torch.nn.functional as F\n", |
| 52 | + "import torch.optim as optim\n", |
| 53 | + "\n", |
| 54 | + "# transforms\n", |
| 55 | + "transform = transforms.Compose(\n", |
| 56 | + " [transforms.ToTensor(),\n", |
| 57 | + " transforms.Normalize((0.5,), (0.5,))])\n", |
| 58 | + "\n", |
| 59 | + "# datasets\n", |
| 60 | + "trainset = torchvision.datasets.FashionMNIST('./data',\n", |
| 61 | + " download=True,\n", |
| 62 | + " train=True,\n", |
| 63 | + " transform=transform)\n", |
| 64 | + "testset = torchvision.datasets.FashionMNIST('./data',\n", |
| 65 | + " download=True,\n", |
| 66 | + " train=False,\n", |
| 67 | + " transform=transform)\n", |
| 68 | + "\n", |
| 69 | + "# dataloaders\n", |
| 70 | + "trainloader = torch.utils.data.DataLoader(trainset, batch_size=4,\n", |
| 71 | + " shuffle=True, num_workers=2)\n", |
| 72 | + "\n", |
| 73 | + "\n", |
| 74 | + "testloader = torch.utils.data.DataLoader(testset, batch_size=4,\n", |
| 75 | + " shuffle=False, num_workers=2)\n", |
| 76 | + "\n", |
| 77 | + "# constant for classes\n", |
| 78 | + "classes = ('T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat',\n", |
| 79 | + " 'Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle Boot')\n", |
| 80 | + "\n", |
| 81 | + "# helper function to show an image\n", |
| 82 | + "# (used in the `plot_classes_preds` function below)\n", |
| 83 | + "def matplotlib_imshow(img, one_channel=False):\n", |
| 84 | + " if one_channel:\n", |
| 85 | + " img = img.mean(dim=0)\n", |
| 86 | + " img = img / 2 + 0.5 # unnormalize\n", |
| 87 | + " npimg = img.numpy()\n", |
| 88 | + " if one_channel:\n", |
| 89 | + " plt.imshow(npimg, cmap=\"Greys\")\n", |
| 90 | + " else:\n", |
| 91 | + " plt.imshow(np.transpose(npimg, (1, 2, 0)))" |
| 92 | + ] |
| 93 | + }, |
| 94 | + { |
| 95 | + "cell_type": "markdown", |
| 96 | + "metadata": {}, |
| 97 | + "source": [ |
| 98 | + "# Model \n", |
| 99 | + "# Minor modifications (images are now one channel instead of three, and 28x28 instead of 32x32:)" |
| 100 | + ] |
| 101 | + }, |
| 102 | + { |
| 103 | + "cell_type": "code", |
| 104 | + "execution_count": 2, |
| 105 | + "metadata": {}, |
| 106 | + "outputs": [], |
| 107 | + "source": [ |
| 108 | + "class Net(nn.Module):\n", |
| 109 | + " def __init__(self):\n", |
| 110 | + " super(Net, self).__init__()\n", |
| 111 | + " self.conv1 = nn.Conv2d(1, 6, 5)\n", |
| 112 | + " self.pool = nn.MaxPool2d(2, 2)\n", |
| 113 | + " self.conv2 = nn.Conv2d(6, 16, 5)\n", |
| 114 | + " self.fc1 = nn.Linear(16 * 4 * 4, 120)\n", |
| 115 | + " self.fc2 = nn.Linear(120, 84)\n", |
| 116 | + " self.fc3 = nn.Linear(84, 10)\n", |
| 117 | + "\n", |
| 118 | + " def forward(self, x):\n", |
| 119 | + " x = self.pool(F.relu(self.conv1(x)))\n", |
| 120 | + " x = self.pool(F.relu(self.conv2(x)))\n", |
| 121 | + " x = x.view(-1, 16 * 4 * 4)\n", |
| 122 | + " x = F.relu(self.fc1(x))\n", |
| 123 | + " x = F.relu(self.fc2(x))\n", |
| 124 | + " x = self.fc3(x)\n", |
| 125 | + " return x\n", |
| 126 | + "\n", |
| 127 | + "\n", |
| 128 | + "net = Net()" |
| 129 | + ] |
| 130 | + }, |
| 131 | + { |
| 132 | + "cell_type": "code", |
| 133 | + "execution_count": 3, |
| 134 | + "metadata": {}, |
| 135 | + "outputs": [], |
| 136 | + "source": [ |
| 137 | + "# Set up criterion and optimizer\n", |
| 138 | + "criterion = nn.CrossEntropyLoss()\n", |
| 139 | + "optimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0.9)" |
| 140 | + ] |
| 141 | + }, |
| 142 | + { |
| 143 | + "cell_type": "markdown", |
| 144 | + "metadata": {}, |
| 145 | + "source": [ |
| 146 | + "## 1. Set up TensorBoard" |
| 147 | + ] |
| 148 | + }, |
| 149 | + { |
| 150 | + "cell_type": "code", |
| 151 | + "execution_count": 4, |
| 152 | + "metadata": {}, |
| 153 | + "outputs": [], |
| 154 | + "source": [ |
| 155 | + "from torch.utils.tensorboard import SummaryWriter\n", |
| 156 | + "\n", |
| 157 | + "# default `log_dir` is \"runs\" - we'll be more specific here\n", |
| 158 | + "# it creates a runs/fashion_mnist_experiment_1 folder.\n", |
| 159 | + "writer = SummaryWriter('runs/fashion_mnist_experiment_1')" |
| 160 | + ] |
| 161 | + }, |
| 162 | + { |
| 163 | + "cell_type": "markdown", |
| 164 | + "metadata": {}, |
| 165 | + "source": [ |
| 166 | + "## 2. Writing to TensorBoard" |
| 167 | + ] |
| 168 | + }, |
| 169 | + { |
| 170 | + "cell_type": "code", |
| 171 | + "execution_count": 5, |
| 172 | + "metadata": {}, |
| 173 | + "outputs": [ |
| 174 | + { |
| 175 | + "data": { |
| 176 | + "image/png": "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\n", |
| 177 | + "text/plain": [ |
| 178 | + "<Figure size 432x288 with 1 Axes>" |
| 179 | + ] |
| 180 | + }, |
| 181 | + "metadata": { |
| 182 | + "needs_background": "light" |
| 183 | + }, |
| 184 | + "output_type": "display_data" |
| 185 | + } |
| 186 | + ], |
| 187 | + "source": [ |
| 188 | + "# get some random training images\n", |
| 189 | + "dataiter = iter(trainloader)\n", |
| 190 | + "images, labels = dataiter.next()\n", |
| 191 | + "\n", |
| 192 | + "# create grid of images\n", |
| 193 | + "img_grid = torchvision.utils.make_grid(images)\n", |
| 194 | + "\n", |
| 195 | + "# show images\n", |
| 196 | + "matplotlib_imshow(img_grid, one_channel=True)\n", |
| 197 | + "\n", |
| 198 | + "# write to tensorboard\n", |
| 199 | + "writer.add_image('four_fashion_mnist_images', img_grid)" |
| 200 | + ] |
| 201 | + }, |
| 202 | + { |
| 203 | + "cell_type": "code", |
| 204 | + "execution_count": 6, |
| 205 | + "metadata": {}, |
| 206 | + "outputs": [], |
| 207 | + "source": [ |
| 208 | + "%load_ext tensorboard" |
| 209 | + ] |
| 210 | + }, |
| 211 | + { |
| 212 | + "cell_type": "code", |
| 213 | + "execution_count": 9, |
| 214 | + "metadata": {}, |
| 215 | + "outputs": [ |
| 216 | + { |
| 217 | + "data": { |
| 218 | + "text/plain": [ |
| 219 | + "Reusing TensorBoard on port 6006 (pid 7256), started 0:01:11 ago. (Use '!kill 7256' to kill it.)" |
| 220 | + ] |
| 221 | + }, |
| 222 | + "metadata": {}, |
| 223 | + "output_type": "display_data" |
| 224 | + }, |
| 225 | + { |
| 226 | + "data": { |
| 227 | + "text/html": [ |
| 228 | + "\n", |
| 229 | + " <iframe id=\"tensorboard-frame-ee9465fe0576b007\" width=\"100%\" height=\"800\" frameborder=\"0\">\n", |
| 230 | + " </iframe>\n", |
| 231 | + " <script>\n", |
| 232 | + " (function() {\n", |
| 233 | + " const frame = document.getElementById(\"tensorboard-frame-ee9465fe0576b007\");\n", |
| 234 | + " const url = new URL(\"/\", window.location);\n", |
| 235 | + " url.port = 6006;\n", |
| 236 | + " frame.src = url;\n", |
| 237 | + " })();\n", |
| 238 | + " </script>\n", |
| 239 | + " " |
| 240 | + ], |
| 241 | + "text/plain": [ |
| 242 | + "<IPython.core.display.HTML object>" |
| 243 | + ] |
| 244 | + }, |
| 245 | + "metadata": {}, |
| 246 | + "output_type": "display_data" |
| 247 | + } |
| 248 | + ], |
| 249 | + "source": [ |
| 250 | + "%tensorboard --logdir runs" |
| 251 | + ] |
| 252 | + }, |
| 253 | + { |
| 254 | + "cell_type": "markdown", |
| 255 | + "metadata": {}, |
| 256 | + "source": [ |
| 257 | + "## run tensorboard --logdir=runs\n", |
| 258 | + "## Then go to https://localhost:6006" |
| 259 | + ] |
| 260 | + }, |
| 261 | + { |
| 262 | + "cell_type": "markdown", |
| 263 | + "metadata": {}, |
| 264 | + "source": [ |
| 265 | + "## 3. Inspect the model using TensorBoard" |
| 266 | + ] |
| 267 | + }, |
| 268 | + { |
| 269 | + "cell_type": "code", |
| 270 | + "execution_count": 8, |
| 271 | + "metadata": {}, |
| 272 | + "outputs": [], |
| 273 | + "source": [ |
| 274 | + "writer.add_graph(net, images)\n", |
| 275 | + "writer.close()" |
| 276 | + ] |
| 277 | + }, |
| 278 | + { |
| 279 | + "cell_type": "code", |
| 280 | + "execution_count": null, |
| 281 | + "metadata": {}, |
| 282 | + "outputs": [], |
| 283 | + "source": [] |
| 284 | + } |
| 285 | + ], |
| 286 | + "metadata": { |
| 287 | + "kernelspec": { |
| 288 | + "display_name": "Python 3", |
| 289 | + "language": "python", |
| 290 | + "name": "python3" |
| 291 | + }, |
| 292 | + "language_info": { |
| 293 | + "codemirror_mode": { |
| 294 | + "name": "ipython", |
| 295 | + "version": 3 |
| 296 | + }, |
| 297 | + "file_extension": ".py", |
| 298 | + "mimetype": "text/x-python", |
| 299 | + "name": "python", |
| 300 | + "nbconvert_exporter": "python", |
| 301 | + "pygments_lexer": "ipython3", |
| 302 | + "version": "3.7.6" |
| 303 | + } |
| 304 | + }, |
| 305 | + "nbformat": 4, |
| 306 | + "nbformat_minor": 4 |
| 307 | +} |
0 commit comments