Skip to content

Instantly share code, notes, and snippets.

@daniel-e
Last active January 7, 2022 20:21
Show Gist options
  • Save daniel-e/d8e433cdbb28c5b8972cf65023bca1ee to your computer and use it in GitHub Desktop.
Save daniel-e/d8e433cdbb28c5b8972cf65023bca1ee to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 85,
"metadata": {},
"outputs": [],
"source": [
"import torch\n",
"from torchvision import datasets, transforms\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "code",
"execution_count": 86,
"metadata": {},
"outputs": [],
"source": [
"# Transform PIL image into a tensor. The values are in the range [0, 1]\n",
"t = transforms.ToTensor()\n",
"\n",
"# Load datasets for training and testing.\n",
"mnist_training = datasets.MNIST(root='/tmp/mnist', train=True, download=True, transform=t)\n",
"mnist_val = datasets.MNIST(root='/tmp/mnist', train=False, download=True, transform=t)"
]
},
{
"cell_type": "code",
"execution_count": 87,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 864x288 with 16 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# Plot some digits.\n",
"\n",
"cols = 8\n",
"rows = 2\n",
"\n",
"fig, axes = plt.subplots(nrows=rows, ncols=cols, figsize=(1.5*cols, 2*rows))\n",
"for i, ax in enumerate(axes.flatten()):\n",
" image, label = mnist_training[i] # returns PIL image with its labels\n",
" ax.set_title(f\"Label: {label}\")\n",
" ax.imshow(image.squeeze(0), cmap='gray') # we get a 1x28x28 tensor -> remove first dimension\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 88,
"metadata": {},
"outputs": [],
"source": [
"# Create a simple neural network with one hidden layer with 256 neurons.\n",
"model = torch.nn.Sequential(\n",
" torch.nn.Linear(28*28, 256),\n",
" torch.nn.ReLU(),\n",
" torch.nn.Linear(256, 10)\n",
")\n",
"\n",
"# Use Adam as optimizer.\n",
"opt = torch.optim.Adam(params=model.parameters(), lr=0.01)\n",
"\n",
"# Use CrossEntropyLoss for as loss function.\n",
"loss_fn = torch.nn.CrossEntropyLoss()\n",
"\n",
"# We train the model with batches of 500 examples.\n",
"batch_size = 500\n",
"train_loader = torch.utils.data.DataLoader(mnist_training, batch_size=batch_size, shuffle=True)"
]
},
{
"cell_type": "code",
"execution_count": 89,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch: 0, Loss: 0.1814579963684082\n",
"Epoch: 1, Loss: 0.07897494733333588\n",
"Epoch: 2, Loss: 0.061483509838581085\n",
"Epoch: 3, Loss: 0.054685574024915695\n",
"Epoch: 4, Loss: 0.047717854380607605\n",
"Epoch: 5, Loss: 0.03222307562828064\n",
"Epoch: 6, Loss: 0.025303684175014496\n",
"Epoch: 7, Loss: 0.04362534359097481\n",
"Epoch: 8, Loss: 0.019005214795470238\n",
"Epoch: 9, Loss: 0.013590291142463684\n"
]
}
],
"source": [
"# Training of the model. We use 10 epochs.\n",
"losses = []\n",
"\n",
"for epoch in range(10):\n",
" for imgs, labels in train_loader:\n",
" n = len(imgs)\n",
" # Reshape data from [500, 1, 28, 28] to [500, 784] and use the model to make predictions.\n",
" predictions = model(imgs.view(n, -1)) \n",
" # Compute the loss.\n",
" loss = loss_fn(predictions, labels) \n",
" opt.zero_grad()\n",
" loss.backward()\n",
" opt.step()\n",
" losses.append(float(loss))\n",
" print(f\"Epoch: {epoch}, Loss: {float(loss)}\")\n"
]
},
{
"cell_type": "code",
"execution_count": 90,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x7fb10e00e220>]"
]
},
"execution_count": 90,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# Plot learning curve.\n",
"plt.plot(losses)"
]
},
{
"cell_type": "code",
"execution_count": 91,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.9742"
]
},
"execution_count": 91,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Determine the accuracy of our clasifier\n",
"# =======================================\n",
"\n",
"# Load all 10000 images from the validation set.\n",
"n = 10000\n",
"loader = torch.utils.data.DataLoader(mnist_val, batch_size=n)\n",
"images, labels = iter(loader).next()\n",
"\n",
"# The tensor images has the shape [10000, 1, 28, 28]. Reshape the tensor to\n",
"# [10000, 784] as our model expected a flat vector.\n",
"data = images.view(n, -1)\n",
"\n",
"# Use our model to compute the class scores for all images. The result is a\n",
"# tensor with shape [10000, 10]. Row i stores the scores for image images[i].\n",
"# Column j stores the score for class j.\n",
"predictions = model(data)\n",
"\n",
"# For each row determine the column index with the maximum score. This is the\n",
"# predicted class.\n",
"predicted_classes = torch.argmax(predictions, dim=1)\n",
"\n",
"# Accuracy = number of correctly classified images divided by the total number\n",
"# of classified images.\n",
"sum(predicted_classes.numpy() == labels.numpy()) / n"
]
}
],
"metadata": {
"interpreter": {
"hash": "3c31154c2e6d078d13498c87eb48ca372ee3ad3d9153e56081b43cdb07df7cf4"
},
"kernelspec": {
"display_name": "Python 3.8.10 64-bit ('venv': venv)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.10"
},
"orig_nbformat": 4
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment