Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save pratu16x7/472d8b5233c3403b38124cad4f58a8fe to your computer and use it in GitHub Desktop.
Save pratu16x7/472d8b5233c3403b38124cad4f58a8fe to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"name": "A Walk in the Kingdom of PyTorch.ipynb",
"provenance": [],
"collapsed_sections": [
"EKzhsnQ3qt8A"
]
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
},
"language_info": {
"name": "python"
},
"accelerator": "GPU"
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "ZRCE5Xv3f3mJ"
},
"source": [
"# A Walk in the Kingdom of PyTorch \n",
"\n",
"---\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "EKzhsnQ3qt8A"
},
"source": [
"# The Townsfolk: Tensors\n",
"\n",
"\n",
"\n",
"In physics, a Tensor is just another name for a 3D vector (alongside the 1D Vectors, and 2D Matrices).\n",
"\n",
"In Nueral Network libaries though, it is the name given to the single object that can be *any* vector-like thing, not just 1 or 3 dimensional but *n-dimensional*. For this reason, they are very similar in basic operations to numpy's nd-arrays.\n",
"\n",
"One neat trick that they can do is that they can be asked to run on GPU to accelerate calculations. Pretty cool right?\n",
"\n",
"Let's see how they work in Pytorch."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "9vv1pJ6Gqy2b"
},
"source": [
"## Creation"
]
},
{
"cell_type": "code",
"metadata": {
"id": "u534F3wNtRsI"
},
"source": [
"import torch\n",
"import numpy as np"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "XyMD6hqORH7-",
"outputId": "3dfe2f3d-1c14-4e4f-d484-f3992e59aa0d"
},
"source": [
"# Create a tensor\n",
"\n",
"# with normal array ...\n",
"\n",
"data = [[1, 2], [3, 4]]\n",
"x_data = torch.tensor(data)\n",
"x_data"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"tensor([[1, 2],\n",
" [3, 4]])"
]
},
"metadata": {},
"execution_count": 49
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "2SK8b_1uReb3",
"outputId": "f7bcc21e-1e82-4dc2-d7dd-6dd5f01d5f8c"
},
"source": [
"# ... or with a numpy array\n",
"\n",
"np_array = np.array(data)\n",
"x_np1 = torch.tensor(np_array)\n",
"\n",
"# (numpy also is given a special from_numpy method, we'll see a difference later)\n",
"\n",
"np_array = np.array(data)\n",
"x_np2 = torch.from_numpy(np_array)\n",
"\n",
"print(x_np1) \n",
"print(x_np2)\n",
"print(x_data == x_np1)"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"tensor([[1, 2],\n",
" [3, 4]])\n",
"tensor([[1, 2],\n",
" [3, 4]])\n",
"tensor([[True, True],\n",
" [True, True]])\n"
]
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "TU1144O9SgKG",
"outputId": "459a398b-7b75-4660-cf01-96d87583b3fa"
},
"source": [
"# ... or from another tensor, allows overriding\n",
"\n",
"x_ones = torch.ones_like(x_data)\n",
"x_zeros = torch.zeros_like(x_data)\n",
"x_rand = torch.rand_like(x_data, dtype=torch.float) # you have to overide the dtype to float\n",
"print(x_ones)\n",
"print(x_zeros) \n",
"print(x_rand)"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"tensor([[1, 1],\n",
" [1, 1]])\n",
"tensor([[0, 0],\n",
" [0, 0]])\n",
"tensor([[0.4641, 0.3852],\n",
" [0.4496, 0.3193]])\n"
]
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "TZ5nojteWUJX",
"outputId": "fe396c46-2097-4921-dd3b-b63f4261fdc2"
},
"source": [
"# ... or from scratch, just given a shape\n",
"shape = (2, 3,)\n",
"\n",
"rand_tensor = torch.rand(shape)\n",
"ones_tensor = torch.ones(shape)\n",
"zeros_tensor = torch.zeros(shape)\n",
"\n",
"print(rand_tensor)\n",
"print(ones_tensor) \n",
"print(zeros_tensor)"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"tensor([[0.3932, 0.9893, 0.1747],\n",
" [0.0287, 0.3320, 0.9412]])\n",
"tensor([[1., 1., 1.],\n",
" [1., 1., 1.]])\n",
"tensor([[0., 0., 0.],\n",
" [0., 0., 0.]])\n"
]
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "deICMViCq1LV"
},
"source": [
"## What can they do?"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "uwX7_Zdsr3yI"
},
"source": [
"### Properties and access"
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "4CPnb-XbaTrG",
"outputId": "ae73537c-5578-45f9-a3c0-8b65c410a38b"
},
"source": [
"# They know their shape, datatype and ... device?!\n",
"\n",
"tensor = torch.rand(3, 4)\n",
"\n",
"tensor.shape, tensor.dtype, tensor.device"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"(torch.Size([3, 4]), torch.float32, device(type='cpu'))"
]
},
"metadata": {},
"execution_count": 53
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "slEYRrKCa3KC",
"outputId": "df2c24f0-75ce-47f3-87cb-f1cb676c4b82"
},
"source": [
"# So put 'em on a GPU if you have one\n",
"\n",
"if torch.cuda.is_available():\n",
" tensor = tensor.to('cuda')\n",
"tensor.device"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"device(type='cuda', index=0)"
]
},
"metadata": {},
"execution_count": 54
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "b5vX7Wbec1JZ",
"outputId": "4365a415-e305-43fb-8cf7-90c4a1b42e9b"
},
"source": [
"# Size is n of rows x n of cols, but matrices are created col-first\n",
"# so the shape/size should actually be read as col-size x row-size\n",
"# col is the 0th dimension, row is the 1st\n",
"tensor = torch.ones(4,3)\n",
"tensor[1:2,1:3] = 0\n",
"tensor"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"tensor([[1., 1., 1.],\n",
" [1., 0., 0.],\n",
" [1., 1., 1.],\n",
" [1., 1., 1.]])"
]
},
"metadata": {},
"execution_count": 55
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "DyI57IdGroY7"
},
"source": [
"### Operations"
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "RnmHwbVOfY03",
"outputId": "bcef424e-95b7-4c40-b6e6-8be503f1fcb6"
},
"source": [
"# Concatenate\n",
"\n",
"t1 = torch.cat([tensor, tensor, tensor], dim=1)\n",
"t1"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"tensor([[1., 1., 1., 1., 1., 1., 1., 1., 1.],\n",
" [1., 0., 0., 1., 0., 0., 1., 0., 0.],\n",
" [1., 1., 1., 1., 1., 1., 1., 1., 1.],\n",
" [1., 1., 1., 1., 1., 1., 1., 1., 1.]])"
]
},
"metadata": {},
"execution_count": 56
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "mmCrkMgegXdw",
"outputId": "ca2158db-99f7-4871-c92b-a7cd1e75160d"
},
"source": [
"# Multiply element-wise\n",
"\n",
"tensor * tensor"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"tensor([[1., 1., 1.],\n",
" [1., 0., 0.],\n",
" [1., 1., 1.],\n",
" [1., 1., 1.]])"
]
},
"metadata": {},
"execution_count": 57
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "2UHlrWlZmvpG",
"outputId": "71cadf60-72b6-407b-a73d-255caaa43e04"
},
"source": [
"# Multiply cross product\n",
"\n",
"tensor @ tensor.T"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"tensor([[3., 1., 3., 3.],\n",
" [1., 1., 1., 1.],\n",
" [3., 1., 3., 3.],\n",
" [3., 1., 3., 3.]])"
]
},
"metadata": {},
"execution_count": 58
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "t5ojIik0nm-E",
"outputId": "52381d30-2536-4ac1-d707-88a1c7d7ca1d"
},
"source": [
"# _ operation are in place: they will change your tensor, don't use them much\n",
"\n",
"tensor.add_(5)\n",
"tensor"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"tensor([[6., 6., 6.],\n",
" [6., 5., 5.],\n",
" [6., 6., 6.],\n",
" [6., 6., 6.]])"
]
},
"metadata": {},
"execution_count": 59
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "R0rWN5KYruHh"
},
"source": [
"### Quantum Entanglement?!"
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "A6s2gdVUn5CQ",
"outputId": "1401f09d-113a-44c6-ffb2-4d3ac06153c5"
},
"source": [
"\n",
"t = torch.ones(5)\n",
"n = t.numpy() # special numpy method on tensors\n",
"\n",
"t, n"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"(tensor([1., 1., 1., 1., 1.]), array([1., 1., 1., 1., 1.], dtype=float32))"
]
},
"metadata": {},
"execution_count": 60
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "I9l3T6fDoybo",
"outputId": "7e8f4043-ccad-430d-d4de-0820b15a250e"
},
"source": [
"# Bridge (telepathy) with numpy\n",
"\n",
"t.add_(2)\n",
"\n",
"t, n"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"(tensor([3., 3., 3., 3., 3.]), array([3., 3., 3., 3., 3.], dtype=float32))"
]
},
"metadata": {},
"execution_count": 61
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "kdf_ri7po7x8",
"outputId": "53ace00d-4ef8-47db-c28e-42efc7694c33"
},
"source": [
"# Even in the case of the earlier created from_numpy will present the same effect\n",
"# But not from the one created from the tensor method\n",
"\n",
"n = np.array([1,2])\n",
"t1 = torch.from_numpy(n)\n",
"t2 = torch.tensor(n)\n",
"\n",
"np.add(n, 3, out=n)\n",
"\n",
"n, t1, t2"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"(array([4, 5]), tensor([4, 5]), tensor([1, 2]))"
]
},
"metadata": {},
"execution_count": 62
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "gsfLhrsOd2EM"
},
"source": [
"# The Omnipresent Force: `torch.autograd`\n",
"\n",
"## Auto-what?\n",
"\n",
"\n",
"\n",
"Nueral networks learn by seeing how much their calculation differs from the real value (error). Based on this, they make changes in their parameters<sup>1</sup> to perform fresh, more correct calculations.\n",
"\n",
"But how?\n",
"\n",
"Turns out, if we take the gradient (derivative) of the error with respect to the parameters, and evaluate it for every parameter and subtract this from its current value, we'll have a more correct value. This happens due to a phenomena called Gradient Descent, which we'll take a look at later.\n",
"\n",
"Usually there are many parameters involved, and calculating the gradients for all of them can get pretty expensive if not done efficiently. For this reason, **`torch.autograd`** is the automatic differentiation engine the helps do these calculations effectively.\n",
"\n",
"<br>\n",
"<sup><sup>1</sup> formally consisting of weigths and biases</sup>"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Aju9y_3Pr1vJ"
},
"source": [
"## Let us manifest `autograd`"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "3gb-yI3WnMvU"
},
"source": [
"### Step 1: Get a model and data"
]
},
{
"cell_type": "code",
"metadata": {
"id": "OvjgzdUoeN0Q"
},
"source": [
"import torch\n",
"\n",
"from torchvision.models import resnet18"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "WcTE_shCdWrZ"
},
"source": [
"model = resnet18(pretrained=True)"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "j0bhc8HZmE46",
"outputId": "15044ee9-cdcb-42a0-f868-9655241e9ab1"
},
"source": [
"data = torch.rand(1, 3, 64, 64) # Simulate 1 image, with 3 channels, and 64x64 resolution\n",
"data.shape"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"torch.Size([1, 3, 64, 64])"
]
},
"metadata": {},
"execution_count": 65
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "CWIya0XlmTjw",
"outputId": "d8e04062-eb09-465f-c67f-c400f9ad1638"
},
"source": [
"labels = torch.rand(1, 1000) # Why is this a 1000 size array when there's only 1 image?\n",
" # Oh, a label for a single image can be anything\n",
" # Even a 1000-size array \n",
"labels.shape"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"torch.Size([1, 1000])"
]
},
"metadata": {},
"execution_count": 66
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "-ejDgxH0nVBc"
},
"source": [
"### Step 2: Make our first guess ... (Forward Pass)"
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "okA5b7Qlmnoi",
"outputId": "bbb168b4-e8e1-421d-ae6e-97049eb42520"
},
"source": [
"guess = model(data)\n",
"guess.shape, type(guess), guess.requires_grad"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"(torch.Size([1, 1000]), torch.Tensor, True)"
]
},
"metadata": {},
"execution_count": 67
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "qrxzZUfTq-6Y"
},
"source": [
"Notice how the returned guess has `requires_grad` to `True`.\n",
"\n",
"This likely means it will enable us to perform backward pass later."
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "zt_7gkYwnnnE",
"outputId": "b33702a9-a60a-4c73-ae78-096adb69f529"
},
"source": [
"# How wrong were we?\n",
"losses = guess - labels\n",
"loss = losses.sum()\n",
"loss"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"tensor(-505.7589, grad_fn=<SumBackward0>)"
]
},
"metadata": {},
"execution_count": 68
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "DDdlqlynrNVe"
},
"source": [
"Despite labels not having `requires_grad`, the difference (loss) will be grad-enabled because of `guess`. "
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "1ArYDP6Wo5rf"
},
"source": [
"### Step 3: ... And refine it (Backward Pass)\n",
"\n",
"The trickier part, where we try to calculate the gradients. \n",
"\n",
"Much happens behind the scenes here.\n",
"\n",
"Loss is secretly made up (or \"is a function\") of the parameter tensors because of `guess` being made up of them (another quantum entanglement!).\n",
"\n",
"After doing a `backward()`, the respective gradient get deposited in the `.grad ` of each of the parameters, evaluated at their current value."
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "uhaJe4TYvHIz",
"outputId": "87d4ddec-acc6-47c0-84dd-ce2910085d12"
},
"source": [
"for param in list(model.parameters())[:10]:\n",
" print(param.grad)"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"None\n",
"None\n",
"None\n",
"None\n",
"None\n",
"None\n",
"None\n",
"None\n",
"None\n",
"None\n"
]
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "wC656vrCpNLS",
"outputId": "5435099a-b345-4f5f-f541-211a090f1fe8"
},
"source": [
"loss.backward() # This has to be done only once\n",
"loss"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"tensor(-505.7589, grad_fn=<SumBackward0>)"
]
},
"metadata": {},
"execution_count": 70
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "BNLrpLoUuv7O",
"outputId": "335b3034-ed8e-49da-bbe4-ceedf179ec8c"
},
"source": [
"for param in list(model.parameters())[:10]:\n",
" print(param.grad.shape)"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"torch.Size([64, 3, 7, 7])\n",
"torch.Size([64])\n",
"torch.Size([64])\n",
"torch.Size([64, 64, 3, 3])\n",
"torch.Size([64])\n",
"torch.Size([64])\n",
"torch.Size([64, 64, 3, 3])\n",
"torch.Size([64])\n",
"torch.Size([64])\n",
"torch.Size([64, 64, 3, 3])\n"
]
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "_5Od8Xwjyz_f"
},
"source": [
"### Step 4: Parameters are ready: kickstart the learning"
]
},
{
"cell_type": "code",
"metadata": {
"id": "j6kXruP0yguG"
},
"source": [
"# We'll load up an optimizer with the prepared (.grad-added) parameters.\n",
"\n",
"learner = torch.optim.SGD(model.parameters(), lr=1e-2, momentum=0.9)\n",
" # lr: learning rate "
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "oj2hvQZL0WHd"
},
"source": [
"We'll load up an optimizer with the prepared (`.grad`-added) parameters.\n",
"\n",
"And then step: in which the optimizer will adjust every param by its gradient stored in .grad (multiplied by the learning rate)\n"
]
},
{
"cell_type": "code",
"metadata": {
"id": "z1so6-EGzqMn"
},
"source": [
"# Kickstart! The optimizer will adjust every param by \n",
"# its gradient stored in .grad (multiplied by the learning rate)\n",
"\n",
"learner.step()"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "cJhVqzD-wtnJ"
},
"source": [
"# The Magical All-answering Beings: Neural Networks\n",
"\n",
"\n",
"Now that you know on high-level how `autograd` works, we can use it to build something that can learn on it's own.\n",
"\n",
"A Neural Network.\n",
"\n",
"Neural Networks can take some labelled input data, and learn over time which labels belong to which kinds of data *in general*: a well-trained Neural network can thus label new (same format) data that it has never seen before with good accuracy.\n",
"\n",
"We'll first take a look at the two core parts of a Network:\n",
"- Layers\n",
"- Training\n"
]
},
{
"cell_type": "code",
"metadata": {
"id": "CaHyw1ax8MfQ"
},
"source": [
"import torch\n",
"import torch.nn as nn\n",
"import torch.nn.functional as F"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "jJsH1nGHzuoY"
},
"source": [
"## Lay out the Network (Layers)"
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "CWEJuGlo8VYO",
"outputId": "a7b68100-f30b-45dd-e769-a91551dec5b3"
},
"source": [
"class Net(nn.Module):\n",
" def __init__(self):\n",
" super(Net, self).__init__()\n",
"\n",
" ip = 5 # input_img_or_filter_dim\n",
" c1 = 6 # Conv layer 1 channels\n",
" c2 = 16 # Conv layer 2 channels\n",
" h1 = 120 # hidden (Fully-connected) layer 1 weights\n",
" h2 = 84 # hidden (Fully-connected/FC) layer 2 weights\n",
" op = 10 # Output layer size (10 for 10 classes)\n",
"\n",
" self.conv1 = nn.Conv2d(1, c1, ip) # 1 input image channel\n",
" # 6 output image channel\n",
" # 5x5 convolution filter/kernel\n",
" # (6 5x5 filters)\n",
" self.conv2 = nn.Conv2d(c1, c2, ip)\n",
" self.fc1 = nn.Linear(c2 * ip * ip, h1)\n",
" self.fc2 = nn.Linear(h1, h2)\n",
" self.fc3 = nn.Linear(h2, op)\n",
"\n",
" self.plrlu = lambda x: F.max_pool2d(F.relu(x), (2, 2))\n",
"\n",
" def forward(self, x):\n",
" print(x.shape)\n",
"\n",
" x = self.plrlu(self.conv1(x))\n",
" print(x.shape)\n",
"\n",
" x = self.plrlu(self.conv2(x))\n",
" print(x.shape)\n",
"\n",
" x = torch.flatten(x, 1) # Better spread out now to get fully connected\n",
" print(x.shape)\n",
"\n",
" x = F.relu(self.fc1(x))\n",
" print(x.shape)\n",
"\n",
" x = F.relu(self.fc2(x))\n",
" print(x.shape)\n",
"\n",
" x = self.fc3(x) # No relu here only? \n",
" # I'd have expected the reverse\n",
" # Relu only here at output and nowhere else\n",
" print(x.shape)\n",
"\n",
" return x\n",
"\n",
" # No def backward(self), backward pass is already implemented for us \n",
"\n",
"\n",
"net = Net()\n",
"print(net) # Oh neat, nn.Modules all override the print method to display \n",
" # something useful"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Net(\n",
" (conv1): Conv2d(1, 6, kernel_size=(5, 5), stride=(1, 1))\n",
" (conv2): Conv2d(6, 16, kernel_size=(5, 5), stride=(1, 1))\n",
" (fc1): Linear(in_features=400, out_features=120, bias=True)\n",
" (fc2): Linear(in_features=120, out_features=84, bias=True)\n",
" (fc3): Linear(in_features=84, out_features=10, bias=True)\n",
")\n"
]
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "Al1MycJa_ss0",
"outputId": "9b857d9d-db64-40d6-f54b-3905f4427962"
},
"source": [
"for param in list(net.parameters()):\n",
" print(param.shape)"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"torch.Size([6, 1, 5, 5])\n",
"torch.Size([6])\n",
"torch.Size([16, 6, 5, 5])\n",
"torch.Size([16])\n",
"torch.Size([120, 400])\n",
"torch.Size([120])\n",
"torch.Size([84, 120])\n",
"torch.Size([84])\n",
"torch.Size([10, 84])\n",
"torch.Size([10])\n"
]
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "z4Kl_9ZtBUsN"
},
"source": [
"### See the output on a dummy input"
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "wmCojAuJuMfy",
"outputId": "63c396eb-54bd-4464-dbc1-fe6ed80c0172"
},
"source": [
"input = torch.randn(1, 1, 32, 32) # 1 1-channel 32x32 image\n",
"output = net(input)\n",
"\n",
"output"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"torch.Size([1, 1, 32, 32])\n",
"torch.Size([1, 6, 14, 14])\n",
"torch.Size([1, 16, 5, 5])\n",
"torch.Size([1, 400])\n",
"torch.Size([1, 120])\n",
"torch.Size([1, 84])\n",
"torch.Size([1, 10])\n"
]
},
{
"output_type": "execute_result",
"data": {
"text/plain": [
"tensor([[-0.0800, 0.0386, 0.0245, -0.0215, -0.0008, 0.0954, -0.0176, 0.1636,\n",
" 0.0275, -0.1029]], grad_fn=<AddmmBackward>)"
]
},
"metadata": {},
"execution_count": 77
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "COz5SZ9Buh4C",
"outputId": "17ad0e3b-2710-4ec3-e32e-803e663c27ac"
},
"source": [
"for param in list(net.parameters()):\n",
" print(param.grad)"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"None\n",
"None\n",
"None\n",
"None\n",
"None\n",
"None\n",
"None\n",
"None\n",
"None\n",
"None\n"
]
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "lR8T1XW29O8A",
"outputId": "36bcfa6a-a323-422f-8c42-00d8f36667b9"
},
"source": [
"net.zero_grad()\n",
"for param in list(net.parameters()): print(param.grad)"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"None\n",
"None\n",
"None\n",
"None\n",
"None\n",
"None\n",
"None\n",
"None\n",
"None\n",
"None\n"
]
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "3NY4OnrH9SJ7"
},
"source": [
"# Just see how the gradients are stored in the params, when the dependent output\n",
"# variable is graded (backpropped)\n",
"\n",
"# output.backward(torch.randn(1, 10))\n",
"# for param in list(net.parameters()): print(param.grad.shape)"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "3z_afIHHBnZA"
},
"source": [
"### Loss and backprop"
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "dVBXAxxh9-rP",
"outputId": "9dcb6b28-66cd-4ad6-e763-afa45ffcdb46"
},
"source": [
"# Loss\n",
"\n",
"dummy_target = torch.randn(1, 10)\n",
"dummy_target - output"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"tensor([[ 1.1072, 0.0320, -0.2226, -0.1343, 0.5771, -0.5376, -0.8254, -0.1960,\n",
" 0.4683, -1.2450]], grad_fn=<SubBackward0>)"
]
},
"metadata": {},
"execution_count": 81
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "Jsxvp9Md-fNx",
"outputId": "512376ea-4de2-41c0-83a0-7cb7cb83fc32"
},
"source": [
"criterion = nn.MSELoss()\n",
"\n",
"loss = criterion(output, dummy_target)\n",
"loss"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"tensor(0.4405, grad_fn=<MseLossBackward>)"
]
},
"metadata": {},
"execution_count": 82
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "DiAntHUC-4B-",
"outputId": "c2271de9-a0e9-4283-b1b7-88a3a6cfcfc8"
},
"source": [
"print(loss.grad_fn)\n",
"print(loss.grad_fn.next_functions)\n",
"print(loss.grad_fn.next_functions[0][0].next_functions)\n",
"print(loss.grad_fn.next_functions[0][0].next_functions[0][0])\n",
"print(loss.grad_fn.next_functions[0][0].next_functions[1][0])\n",
"print(loss.grad_fn.next_functions[0][0].next_functions[2][0])\n",
"print(loss.grad_fn.next_functions[0][0].next_functions[0][0].next_functions) # ()\n",
"print(loss.grad_fn.next_functions[0][0].next_functions[1][0].next_functions)\n",
"print(loss.grad_fn.next_functions[0][0].next_functions[2][0].next_functions)\n",
"print(loss.grad_fn.next_functions[0][0].next_functions[1][0].next_functions[0][0].next_functions)\n",
"print(loss.grad_fn.next_functions[0][0].next_functions[2][0].next_functions[0][0].next_functions) # ()\n",
"print(loss.grad_fn.next_functions[0][0].next_functions[1][0].next_functions[0][0].next_functions[0][0].next_functions) # ()\n",
"print(loss.grad_fn.next_functions[0][0].next_functions[1][0].next_functions[0][0].next_functions[1][0].next_functions)\n",
"print(loss.grad_fn.next_functions[0][0].next_functions[1][0].next_functions[0][0].next_functions[2][0].next_functions)\n",
"print(loss.grad_fn.next_functions[0][0].next_functions[1][0].next_functions[0][0].next_functions[1][0].next_functions[0][0].next_functions)\n",
"print(loss.grad_fn.next_functions[0][0].next_functions[1][0].next_functions[0][0].next_functions[2][0].next_functions[0][0].next_functions) # ()"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"<MseLossBackward object at 0x7f75378de410>\n",
"((<AddmmBackward object at 0x7f75378f9150>, 0), (None, 0))\n",
"((<AccumulateGrad object at 0x7f75378def50>, 0), (<ReluBackward0 object at 0x7f75378f9410>, 0), (<TBackward object at 0x7f75378f9210>, 0))\n",
"<AccumulateGrad object at 0x7f75378f9550>\n",
"<ReluBackward0 object at 0x7f75378f9910>\n",
"<TBackward object at 0x7f75378f9f50>\n",
"()\n",
"((<AddmmBackward object at 0x7f75378f9f50>, 0),)\n",
"((<AccumulateGrad object at 0x7f75378f9690>, 0),)\n",
"((<AccumulateGrad object at 0x7f75378f9510>, 0), (<ReluBackward0 object at 0x7f75378f9110>, 0), (<TBackward object at 0x7f75378f9250>, 0))\n",
"()\n",
"()\n",
"((<AddmmBackward object at 0x7f75378f9c50>, 0),)\n",
"((<AccumulateGrad object at 0x7f75378fd710>, 0),)\n",
"((<AccumulateGrad object at 0x7f75378fd210>, 0), (<ViewBackward object at 0x7f75378fd550>, 0), (<TBackward object at 0x7f75378fd850>, 0))\n",
"()\n"
]
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "DVGGIpdjCpnA",
"outputId": "d7d27ebf-feed-4b44-9e32-149a38742217"
},
"source": [
"net.zero_grad() # Because we ran backward on output\n",
"for param in list(net.parameters()): print(param.grad)\n",
"list(net.parameters())[0].grad"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"None\n",
"None\n",
"None\n",
"None\n",
"None\n",
"None\n",
"None\n",
"None\n",
"None\n",
"None\n"
]
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "QmhdgeQR-6tj",
"outputId": "4e5b18d5-d756-4e2e-8fc0-65d649172ccd"
},
"source": [
"print(\"bias grad BEFORE BACKWARD:\")\n",
"print(net.conv1.bias.grad)\n",
"\n",
"loss.backward()\n",
"\n",
"print(\"bias grad AFTER BACKWARD:\")\n",
"print(net.conv1.bias.grad)"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"bias grad BEFORE BACKWARD:\n",
"None\n",
"bias grad AFTER BACKWARD:\n",
"tensor([-0.0117, 0.0033, -0.0004, 0.0131, -0.0046, 0.0156])\n"
]
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "HV3IjFMBD0s7"
},
"source": [
"### Update the Weigths\n",
"\n",
"A simple `weight = weight - learning_rate * gradient`"
]
},
{
"cell_type": "code",
"metadata": {
"id": "2zLMW7FzDqCd"
},
"source": [
"# A simple one: weight = weight - learning_rate * gradient\n",
"\n",
"learning_rate = 0.01\n",
"for param in net.parameters():\n",
" param.data.sub_(param.grad.data * learning_rate) # .data lets you access \n",
" # the real numbers inside"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "P0p9jXGnElpu"
},
"source": [
"But let's do a general way, that allows us to choose different update-types"
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "YZQjqrQ3Eunx",
"outputId": "26a6c2e9-cd07-4872-cb88-e48c8f4130b9"
},
"source": [
"import torch.optim as optim\n",
"\n",
"learner = optim.SGD(net.parameters(), lr=learning_rate)\n",
"\n",
"# This has to be done in an epoch loop, i.e. until weights are no longer being \n",
"# updated by a large amount (convergence)\n",
"\n",
"learner.zero_grad()\n",
"\n",
"output = net(input)\n",
"loss = criterion(output, dummy_target)\n",
"loss.backward()\n",
"learner.step "
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"torch.Size([1, 1, 32, 32])\n",
"torch.Size([1, 6, 14, 14])\n",
"torch.Size([1, 16, 5, 5])\n",
"torch.Size([1, 400])\n",
"torch.Size([1, 120])\n",
"torch.Size([1, 84])\n",
"torch.Size([1, 10])\n"
]
},
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<bound method SGD.step of SGD (\n",
"Parameter Group 0\n",
" dampening: 0\n",
" lr: 0.01\n",
" momentum: 0\n",
" nesterov: False\n",
" weight_decay: 0\n",
")>"
]
},
"metadata": {},
"execution_count": 87
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "wZahAH4rGH1h"
},
"source": [
"# Taming the Beings: Training, with Knowledge (data)\n",
"\n",
"Let's take all we have seen and try it out with real data, and see it we can train our Neural Network what we want it to do: Classify some images.\n",
"\n",
"We'll take all we've learned, and try to build a Neural Network in 4 stages:\n",
"- Data\n",
"- Layers\n",
"- Training\n",
"- Test\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "1S9jE_1Jky4I"
},
"source": [
"## Data"
]
},
{
"cell_type": "code",
"metadata": {
"id": "g1NKb956HAAR"
},
"source": [
"import torch\n",
"import torchvision\n",
"from torchvision.transforms import Compose, ToTensor, Normalize\n",
"from torchvision.datasets import CIFAR10\n",
"from torchvision.utils import make_grid\n",
"from torch.utils.data import DataLoader"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "GiO7unPdNgMP",
"outputId": "55052ef6-0893-49ee-a1de-67e55290cb60"
},
"source": [
"transform = Compose([\n",
" ToTensor(), \n",
" Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))\n",
"])\n",
"\n",
"# Compose because we want to apply one after the other (function composition)\n",
"# https://discuss.pytorch.org/t/understanding-transform-normalize/21730\n",
"# 0.5 mean and std for each channel, so we can do (input - mean)/std\n",
"# Why: https://stats.stackexchange.com/questions/185853/why-do-we-need-to-normalize-the-images-before-we-put-them-into-cnn\n",
"\n",
"# Same transform on both training and testing images\n",
"trainset = CIFAR10(root='./data', train=True, download=True, transform=transform)\n",
"testset = CIFAR10(root='./data', train=False, download=True, transform=transform)\n",
"\n",
"classes = trainset.classes\n",
"classes"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Files already downloaded and verified\n",
"Files already downloaded and verified\n"
]
},
{
"output_type": "execute_result",
"data": {
"text/plain": [
"['airplane',\n",
" 'automobile',\n",
" 'bird',\n",
" 'cat',\n",
" 'deer',\n",
" 'dog',\n",
" 'frog',\n",
" 'horse',\n",
" 'ship',\n",
" 'truck']"
]
},
"metadata": {},
"execution_count": 89
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "N2MJwPNsXBvs",
"outputId": "8b3d0b38-9d2d-4929-eb8d-9e32794ae553"
},
"source": [
"batch_size = 4 # Get 4 images at a time\n",
"trainloader = DataLoader(trainset, batch_size=batch_size, shuffle=True, num_workers=2)\n",
"testloader = DataLoader(testset, batch_size=batch_size, shuffle=True, num_workers=2)\n",
"\n",
"len(list(iter(trainloader))[0][0]) # it gets both images and labels, so 2 sets of 4 "
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"4"
]
},
"metadata": {},
"execution_count": 90
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 639
},
"id": "1oRby3k6Z9Wh",
"outputId": "2301b768-655a-43dc-faef-10d6c5229bb3"
},
"source": [
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"\n",
"images, labels = iter(trainloader).next() # Get 4 images\n",
"\n",
"# fn to Reverse the normalize and then the tensor operations\n",
"un_norm_tensor = lambda transformed_image: (transformed_image * 0.5 + 0.5).numpy()\n",
"\n",
"plt.imshow(np.transpose(un_norm_tensor(images[0]))) # It is in (3, 32, 32) for some reason\n",
" # transpose it to make it (32, 32, 3)\n",
" # But now its rotated for some reason\n",
"plt.show()\n",
"\n",
"# Use make grid to show all\n",
"plt.imshow(np.transpose(un_norm_tensor(make_grid(images)))) # Transpose the (3, 32, 32)\n",
"plt.show()\n",
"\n",
"plt.imshow(np.transpose(un_norm_tensor(make_grid(images)), (1, 2, 0))) # Rotate it\n",
"plt.show()\n",
"\n",
"# let's make it a lambda\n",
"untransform_loader_image = lambda image: np.transpose(un_norm_tensor(image), (1, 2, 0))"
],
"execution_count": null,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
}
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
}
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "m1gZk5Vxk154"
},
"source": [
"## Layers"
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "9rprLcsvhZHI",
"outputId": "4c4edacd-2e61-42c0-a577-54e7b6a369d3"
},
"source": [
"import torch.nn as nn\n",
"import torch.nn.functional as F\n",
"\n",
"class Net(nn.Module):\n",
" def __init__(self):\n",
" super(Net, self).__init__()\n",
"\n",
" ip_ch = 3 # Input channels\n",
" fl = 5 # input_img_or_filter_dim\n",
" c1 = 6 # Conv layer 1 channels\n",
" c2 = 16 # Conv layer 2 channels\n",
" h1 = 120 # hidden (Fully-connected) layer 1 weights\n",
" h2 = 84 # hidden (Fully-connected/FC) layer 2 weights\n",
" op = 10 # Output layer size (10 for 10 classes)\n",
"\n",
" self.conv1 = nn.Conv2d(ip_ch, c1, fl) # 1 input image channel\n",
" # 6 output image channel\n",
" # 5x5 convolution filter/kernel\n",
" # (6 5x5 filters)\n",
" self.conv2 = nn.Conv2d(c1, c2, fl)\n",
" self.fc1 = nn.Linear(c2 * fl * fl, h1)\n",
" self.fc2 = nn.Linear(h1, h2)\n",
" self.fc3 = nn.Linear(h2, op)\n",
"\n",
" self.plrlu = lambda x: F.max_pool2d(F.relu(x), (2, 2))\n",
"\n",
" def forward(self, x):\n",
" # print(x.shape)\n",
"\n",
" x = self.plrlu(self.conv1(x))\n",
" # print(x.shape)\n",
"\n",
" x = self.plrlu(self.conv2(x))\n",
" # print(x.shape)\n",
"\n",
" x = torch.flatten(x, 1) # Better spread out now to get fully connected\n",
" # print(x.shape)\n",
"\n",
" x = F.relu(self.fc1(x))\n",
" # print(x.shape)\n",
"\n",
" x = F.relu(self.fc2(x))\n",
" # print(x.shape)\n",
"\n",
" x = self.fc3(x) # No relu here only? \n",
" # I'd have expected the reverse\n",
" # Relu only here at output and nowhere else\n",
" # print(x.shape)\n",
"\n",
" return x\n",
"\n",
" # No def backward(self), backward pass is already implemented for us \n",
"\n",
"\n",
"net = Net()\n",
"print(net) # Oh neat, nn.Modules all override the print method to display \n",
" # something useful"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Net(\n",
" (conv1): Conv2d(3, 6, kernel_size=(5, 5), stride=(1, 1))\n",
" (conv2): Conv2d(6, 16, kernel_size=(5, 5), stride=(1, 1))\n",
" (fc1): Linear(in_features=400, out_features=120, bias=True)\n",
" (fc2): Linear(in_features=120, out_features=84, bias=True)\n",
" (fc3): Linear(in_features=84, out_features=10, bias=True)\n",
")\n"
]
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "-87Pg2_Bk4f0"
},
"source": [
"## Learning"
]
},
{
"cell_type": "code",
"metadata": {
"id": "Tn0mY6iDk64J"
},
"source": [
"import torch.optim as optim\n",
"\n",
"learner = optim.SGD(net.parameters(), lr=1e-3, momentum=0.9)\n",
"criterion = nn.CrossEntropyLoss()"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "1HrmisPSeQ1Y",
"outputId": "a4b8b74c-adcd-4167-bc6f-3745b0158665"
},
"source": [
"epochs = 2\n",
"\n",
"losses = []\n",
"\n",
"for epoch in range(epochs):\n",
" loss_this_epoch = 0.0\n",
"\n",
" for i, (images, labels) in enumerate(trainloader):\n",
" # reset grads\n",
" learner.zero_grad()\n",
"\n",
" # forward, backward, step\n",
" outputs = net(images)\n",
" loss = criterion(outputs, labels)\n",
" loss.backward()\n",
" learner.step()\n",
"\n",
" # record\n",
" loss_this_epoch += loss.item() # item??\n",
" if i % 2001 == 2000: \n",
" print(f'Epoch {epoch}, datapoint {i}: loss {loss_this_epoch/2000}')\n",
" losses.append(loss_this_epoch/2000)\n",
" loss_this_epoch = 0.0\n",
"\n",
"print('Finished Training')"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Epoch 0, datapoint 2000: loss 2.254654600441456\n",
"Epoch 0, datapoint 4001: loss 1.920637723892927\n",
"Epoch 0, datapoint 6002: loss 1.7129589468240738\n",
"Epoch 0, datapoint 8003: loss 1.5715022478699685\n",
"Epoch 0, datapoint 10004: loss 1.5053658578172326\n",
"Epoch 0, datapoint 12005: loss 1.4653505848795176\n",
"Epoch 1, datapoint 2000: loss 1.3994004766792059\n",
"Epoch 1, datapoint 4001: loss 1.384651391647756\n",
"Epoch 1, datapoint 6002: loss 1.3639276622608305\n",
"Epoch 1, datapoint 8003: loss 1.3616641736105084\n",
"Epoch 1, datapoint 10004: loss 1.3217484525740146\n",
"Epoch 1, datapoint 12005: loss 1.3164479488693177\n",
"Finished Training\n"
]
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "VFF4Cd7go5uX",
"outputId": "af7544a9-f703-4b32-e4d2-3cdb959ae696"
},
"source": [
"plt.plot(losses)"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x7f753785a410>]"
]
},
"metadata": {},
"execution_count": 95
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
}
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "1r2OFp8rjzH9"
},
"source": [
"# Let's freeze and save!\n",
"\n",
"torch.save(net.state_dict(), './cifar_net.pth')"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "94BGBz9UoAxK"
},
"source": [
"## Testing\n",
"\n",
"*on new data (testset)*"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "_avzFuWFtrke"
},
"source": [
"### Just a few images"
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 155
},
"id": "BwgAcMtrn_T5",
"outputId": "5fa370de-3ce8-4c7d-e3cb-d388526d9842"
},
"source": [
"# Get test data\n",
"\n",
"images, labels = iter(testloader).next()\n",
"\n",
"plt.imshow(untransform_loader_image(make_grid(images)))\n",
"plt.show()\n",
"\n",
"print([classes[label_i] for label_i in labels])"
],
"execution_count": null,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
}
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"['dog', 'deer', 'automobile', 'truck']\n"
]
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "INWyilrerJnG",
"outputId": "75edba52-406c-4f3a-8723-76d5d2e6448e"
},
"source": [
"# Get the saved model\n",
"\n",
"net = Net() # You can't get from scratch :P\n",
" # You have to define it first, and then only load its state\n",
" # You have to correct, only then will you get a\n",
" # <All keys matched successfully> message\n",
"net.load_state_dict(torch.load('./cifar_net.pth'))"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<All keys matched successfully>"
]
},
"metadata": {},
"execution_count": 98
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "1o55FY_ksJBT",
"outputId": "98cb4a7d-3e8c-4019-9287-735ba92a5a6c"
},
"source": [
"outputs = net(images) # You'll get values for all 10 classes\n",
"outputs"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"tensor([[ 1.3937, -2.7532, 1.7236, 1.2371, 0.6387, 0.6092, -0.3808, -1.1589,\n",
" -0.0941, -1.7402],\n",
" [-1.1631, -2.8776, 3.0789, 0.8084, 2.2799, 1.1491, 0.4097, 0.7001,\n",
" -2.8655, -2.7271],\n",
" [-0.4672, -2.5493, 1.6762, 1.2806, 0.5419, 2.0329, -0.4902, 0.4723,\n",
" -1.1087, -1.6603],\n",
" [ 2.4262, 3.0024, -1.2674, -1.8859, -0.7803, -2.1909, -2.8662, -1.8068,\n",
" 0.9987, 2.3770]], grad_fn=<AddmmBackward>)"
]
},
"metadata": {},
"execution_count": 99
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "X1qf0R8Usl5B",
"outputId": "7c09b5e4-4895-45b4-af34-c26c17390611"
},
"source": [
"# So take max, that's your predicted\n",
"\n",
"actual_max_predicted_values, their_indices = torch.max(outputs, 1)\n",
"\n",
"predicted = [classes[label_i] for label_i in their_indices]\n",
"predicted"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"['bird', 'bird', 'dog', 'automobile']"
]
},
"metadata": {},
"execution_count": 100
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "jTLsbAUfthAF"
},
"source": [
"Wow! Pretty neat!"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "uY77_QsUtxHO"
},
"source": [
"### Full dataset"
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "gYn2pj7lsrsg",
"outputId": "262bc969-cb27-4df2-d538-7c0505f03eda"
},
"source": [
"correct = 0\n",
"total = 0\n",
"\n",
"# We don't need no grads as we are only testing\n",
"with torch.no_grad():\n",
"\n",
" for images, labels in testloader:\n",
" outputs = net(images)\n",
"\n",
" _, predicted = torch.max(outputs.data, 1)\n",
"\n",
" total += labels.size(0)\n",
" correct += (predicted == labels).sum().item()\n",
"\n",
"print(f\"Accuracy on all {total} images: {correct*100/total}%\")"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Accuracy on all 10000 images: 54.32%\n"
]
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "zaNapt5fyoFd"
},
"source": [
"Way better than chance (10% for each class) :D\n",
"\n",
"\n",
"Which classes performed the least?"
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "6vt5gOvyy7oJ",
"outputId": "c8584314-df26-4cc6-d676-17322c71aee3"
},
"source": [
"# prepare to count predictions for each class\n",
"correct_pred = {classname: 0 for classname in classes}\n",
"total_pred = {classname: 0 for classname in classes}\n",
"\n",
"# again no gradients needed\n",
"with torch.no_grad():\n",
" for data in testloader:\n",
" images, labels = data\n",
" outputs = net(images)\n",
" _, predictions = torch.max(outputs, 1)\n",
" # collect the correct predictions for each class\n",
" for label, prediction in zip(labels, predictions):\n",
" if label == prediction:\n",
" correct_pred[classes[label]] += 1\n",
" total_pred[classes[label]] += 1\n",
"\n",
"\n",
"# print accuracy for each class\n",
"for classname, correct_count in correct_pred.items():\n",
" accuracy = 100 * float(correct_count) / total_pred[classname]\n",
" print(\"Accuracy for class {:5s} is: {:.1f} %\".format(classname,\n",
" accuracy))"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Accuracy for class airplane is: 66.4 %\n",
"Accuracy for class automobile is: 63.0 %\n",
"Accuracy for class bird is: 41.5 %\n",
"Accuracy for class cat is: 17.5 %\n",
"Accuracy for class deer is: 46.5 %\n",
"Accuracy for class dog is: 59.7 %\n",
"Accuracy for class frog is: 48.8 %\n",
"Accuracy for class horse is: 61.7 %\n",
"Accuracy for class ship is: 67.8 %\n",
"Accuracy for class truck is: 70.3 %\n"
]
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "KTHuhADDzbyX"
},
"source": [
"# Awakening the Dragon: The GPU\n",
" "
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "0BKUPVHCzZqr",
"outputId": "52a5c459-2d7a-4a08-851c-89a972aa588d"
},
"source": [
"device = torch.device(\"cuda:0\" if torch.cuda.is_available() else \"cpu\")\n",
"\n",
"# Assuming that we are on a CUDA machine, this should print a CUDA device:\n",
"\n",
"device"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"device(type='cuda', index=0)"
]
},
"metadata": {},
"execution_count": 103
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "WkjTbPvEzxN3",
"outputId": "c3bbfa20-7597-47d9-b71c-bb552febd7f5"
},
"source": [
"net.to(device)"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"Net(\n",
" (conv1): Conv2d(3, 6, kernel_size=(5, 5), stride=(1, 1))\n",
" (conv2): Conv2d(6, 16, kernel_size=(5, 5), stride=(1, 1))\n",
" (fc1): Linear(in_features=400, out_features=120, bias=True)\n",
" (fc2): Linear(in_features=120, out_features=84, bias=True)\n",
" (fc3): Linear(in_features=84, out_features=10, bias=True)\n",
")"
]
},
"metadata": {},
"execution_count": 104
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "blzXcjW_0Ctj"
},
"source": [
"inputs, labels = data[0].to(device), data[1].to(device)"
],
"execution_count": null,
"outputs": []
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment