Created
November 25, 2021 23:35
-
-
Save ShairozS/5b29ca60acc0845b424dbc0059e0fc61 to your computer and use it in GitHub Desktop.
Train MNIST with contrastive triplet loss
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Training on MNIST Dataset with Triplet Loss\n", | |
"-------------------------" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"D:\\Research\\ContrastiveRepresentationLearning\n" | |
] | |
} | |
], | |
"source": [ | |
"import os\n", | |
"#import torchsummary\n", | |
"import matplotlib.pyplot as plt\n", | |
"import torch\n", | |
"import numpy as np\n", | |
"import cv2\n", | |
"from torch import nn\n", | |
"from torch.utils.data import Dataset, DataLoader, SubsetRandomSampler\n", | |
"from torchvision import transforms, models\n", | |
"\n", | |
"os.chdir('..'); os.chdir('..')\n", | |
"print(os.getcwd()) # Should be .\\ContrastiveLearning\n", | |
"from Code.trainers import Trainer\n", | |
"#from Code.models import SiameseNet\n", | |
"from Code.losses import form_triplets, ContrastiveLoss\n", | |
"from Code.dataloaders import LabeledContrastiveDataset\n", | |
"from Code.utils import extract_embeddings, plot_embeddings\n", | |
"\n", | |
"\n", | |
"\n", | |
"\n", | |
"# Hyperparameters\n", | |
"N = 3000\n", | |
"EMB_SIZE = 32\n", | |
"DEVICE = 'cuda'\n", | |
"LR = 0.0005\n", | |
"EPOCHS = 10\n", | |
"MARGIN = 1.0\n", | |
"NAME = 'MNIST_TRIPLET_LOSS_' + '_'.join([str(N), str(EMB_SIZE), str(LR), str(EPOCHS), str(MARGIN)])\n", | |
"\n", | |
"# Reproduciblity\n", | |
"SEED = 911\n", | |
"torch.manual_seed(SEED)\n", | |
"torch.backends.cudnn.deterministic = True\n", | |
"torch.backends.cudnn.benchmark = False\n", | |
"np.random.seed(SEED)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Create Dataloader and Inspect Data\n", | |
"---------------------" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"root = r'D:\\Data\\Imagery\\MNIST\\MNIST'\n", | |
"mean, std = 0.1307, 0.3081\n", | |
"\n", | |
"tfms = transforms.Compose([\n", | |
" transforms.ToTensor(),\n", | |
" transforms.Normalize((mean,), (std,))\n", | |
" ])\n", | |
"\n", | |
"\n", | |
"lcd = LabeledContrastiveDataset(root, transforms=tfms)\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 3, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"torch.Size([10, 1, 28, 28])\n", | |
"torch.Size([10, 1, 28, 28])\n" | |
] | |
}, | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"C:\\Users\\Shair\\.conda\\envs\\pytorch\\lib\\site-packages\\torchvision\\transforms\\functional.py:114: UserWarning: The given NumPy array is not writeable, and PyTorch does not support non-writeable tensors. This means you can write to the underlying (supposedly non-writeable) NumPy array using the tensor. You may want to copy the array to protect its data or make it writeable before converting it to a tensor. This type of warning will be suppressed for the rest of this program. (Triggered internally at ..\\torch\\csrc\\utils\\tensor_numpy.cpp:143.)\n", | |
" img = torch.from_numpy(pic.transpose((2, 0, 1))).contiguous()\n" | |
] | |
} | |
], | |
"source": [ | |
"datadict = lcd.__getitem__(4)\n", | |
"print(datadict[\"x1\"].shape); print(datadict[\"x2\"].shape)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 4, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"from torchvision import transforms\n", | |
"\n", | |
"\n", | |
"train_sampler = SubsetRandomSampler(range(int(N*0.9)))\n", | |
"test_sampler = SubsetRandomSampler(range(int(N*0.9), N))\n", | |
"\n", | |
"siamese_train_loader = torch.utils.data.DataLoader(lcd, batch_size=None, sampler=train_sampler)\n", | |
"siamese_test_loader = torch.utils.data.DataLoader(lcd, batch_size=None, shuffle=test_sampler)\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Model\n", | |
"------------" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 5, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"\n" | |
] | |
} | |
], | |
"source": [ | |
"embedding_net = models.resnet18()\n", | |
"embedding_net.conv1 = nn.Conv2d(1, 64, (7,7), (2,2), (3,3))\n", | |
"embedding_net.fc = nn.Linear(512, EMB_SIZE)\n", | |
"model = embedding_net\n", | |
"model.train(); print() ; #torchsummary.summary(model, input_size = [(1,28,28),(1, 28, 28)], device=DEVICE)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Training\n", | |
"-------------------------" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 6, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"class TripletLoss(nn.Module):\n", | |
" \n", | |
" def __init__(self, margin, norm, miner):\n", | |
" super(TripletLoss, self).__init__()\n", | |
" self.loss = nn.TripletMarginLoss(margin, norm)\n", | |
" self.miner = miner\n", | |
" \n", | |
" def forward(self, x, y):\n", | |
" a, p, n = self.miner(x, y)\n", | |
" return(self.loss(a,p,n))\n", | |
" \n", | |
" \n", | |
"TL = ContrastiveLoss(margin=1.0, mode='triplets')\n", | |
"\n", | |
"t = Trainer(model = model, \n", | |
" dataloader = siamese_train_loader,\n", | |
" lr=LR,\n", | |
" loss_function= TL)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 7, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
" 0%| | 0/2700 [00:00<?, ?it/s]" | |
] | |
}, | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"----- Epoch: 0 -----\n" | |
] | |
}, | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"100%|██████████████████████████████████████████████████████████████████████████████| 2700/2700 [01:52<00:00, 24.00it/s]\n", | |
" 0%| | 3/2700 [00:00<01:51, 24.09it/s]" | |
] | |
}, | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"Avg train loss: 0.21114463511037887\n", | |
"----- Epoch: 1 -----\n" | |
] | |
}, | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"100%|██████████████████████████████████████████████████████████████████████████████| 2700/2700 [01:51<00:00, 24.11it/s]\n", | |
" 0%| | 3/2700 [00:00<01:49, 24.56it/s]" | |
] | |
}, | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"Avg train loss: 0.13589056040674188\n", | |
"----- Epoch: 2 -----\n" | |
] | |
}, | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"100%|██████████████████████████████████████████████████████████████████████████████| 2700/2700 [01:53<00:00, 23.71it/s]\n", | |
" 0%| | 3/2700 [00:00<01:49, 24.73it/s]" | |
] | |
}, | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"Avg train loss: 0.10390172110855794\n", | |
"----- Epoch: 3 -----\n" | |
] | |
}, | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"100%|██████████████████████████████████████████████████████████████████████████████| 2700/2700 [01:52<00:00, 24.07it/s]\n", | |
" 0%| | 3/2700 [00:00<01:50, 24.38it/s]" | |
] | |
}, | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"Avg train loss: 0.0842619685555861\n", | |
"----- Epoch: 4 -----\n" | |
] | |
}, | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"100%|██████████████████████████████████████████████████████████████████████████████| 2700/2700 [01:52<00:00, 24.05it/s]\n", | |
" 0%| | 3/2700 [00:00<01:49, 24.59it/s]" | |
] | |
}, | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"Avg train loss: 0.07334132929354033\n", | |
"----- Epoch: 5 -----\n" | |
] | |
}, | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"100%|██████████████████████████████████████████████████████████████████████████████| 2700/2700 [01:52<00:00, 23.94it/s]\n", | |
" 0%| | 3/2700 [00:00<01:52, 23.99it/s]" | |
] | |
}, | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"Avg train loss: 0.06533128698030446\n", | |
"----- Epoch: 6 -----\n" | |
] | |
}, | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"100%|██████████████████████████████████████████████████████████████████████████████| 2700/2700 [01:51<00:00, 24.15it/s]\n", | |
" 0%| | 3/2700 [00:00<01:51, 24.23it/s]" | |
] | |
}, | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"Avg train loss: 0.05845108959283751\n", | |
"----- Epoch: 7 -----\n" | |
] | |
}, | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"100%|██████████████████████████████████████████████████████████████████████████████| 2700/2700 [01:51<00:00, 24.16it/s]\n", | |
" 0%| | 3/2700 [00:00<01:51, 24.19it/s]" | |
] | |
}, | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"Avg train loss: 0.05141863693237274\n", | |
"----- Epoch: 8 -----\n" | |
] | |
}, | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"100%|██████████████████████████████████████████████████████████████████████████████| 2700/2700 [01:51<00:00, 24.13it/s]\n", | |
" 0%| | 3/2700 [00:00<01:50, 24.39it/s]" | |
] | |
}, | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"Avg train loss: 0.04743843640161989\n", | |
"----- Epoch: 9 -----\n" | |
] | |
}, | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"100%|██████████████████████████████████████████████████████████████████████████████| 2700/2700 [01:51<00:00, 24.15it/s]" | |
] | |
}, | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"Avg train loss: 0.043700399544134225\n" | |
] | |
}, | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"\n" | |
] | |
} | |
], | |
"source": [ | |
"losses = t.train(EPOCHS, print_every=1)#, writer = writer)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 8, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"Text(0.5, 0, 'Epochs')" | |
] | |
}, | |
"execution_count": 8, | |
"metadata": {}, | |
"output_type": "execute_result" | |
}, | |
{ | |
"data": { | |
"image/png": "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\n", | |
"text/plain": [ | |
"<Figure size 432x288 with 1 Axes>" | |
] | |
}, | |
"metadata": { | |
"needs_background": "light" | |
}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"plt.plot(losses)\n", | |
"plt.title(\"Training Loss - Triplet Loss\")\n", | |
"plt.ylabel(\"Train loss\"); plt.xlabel(\"Epochs\")\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 9, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"[0.21114463511037887,\n", | |
" 0.06063648570310492,\n", | |
" 0.03992404251219004,\n", | |
" 0.025342710896670555,\n", | |
" 0.029658772245357224,\n", | |
" 0.025281075414125182,\n", | |
" 0.017169905268035815,\n", | |
" 0.002191468309119281,\n", | |
" 0.015596832155597103,\n", | |
" 0.010058067826763295]" | |
] | |
}, | |
"execution_count": 9, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"losses" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Inspecting Embeddings\n", | |
"-------------------" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 10, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"EMBS_TO_VISUALIZE = N - int(N*0.9)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 11, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"performing PCA to reduce embeddings to 2 dimensions\n", | |
"0.5584684 % variance explained using PCA\n" | |
] | |
} | |
], | |
"source": [ | |
"test_embs = extract_embeddings(siamese_test_loader, model, EMBS_TO_VISUALIZE, reduce_to_dimension=2)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 12, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div>\n", | |
"<style scoped>\n", | |
" .dataframe tbody tr th:only-of-type {\n", | |
" vertical-align: middle;\n", | |
" }\n", | |
"\n", | |
" .dataframe tbody tr th {\n", | |
" vertical-align: top;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>Emb</th>\n", | |
" <th>Label</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td>[1.9465842, 1.9470881]</td>\n", | |
" <td>5</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>[-0.8707288, -1.3512108]</td>\n", | |
" <td>2</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td>[-0.45471096, 1.8426472]</td>\n", | |
" <td>9</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3</th>\n", | |
" <td>[1.1143692, -1.8616936]</td>\n", | |
" <td>8</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td>[-1.1564724, 2.1490877]</td>\n", | |
" <td>4</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" Emb Label\n", | |
"0 [1.9465842, 1.9470881] 5\n", | |
"1 [-0.8707288, -1.3512108] 2\n", | |
"2 [-0.45471096, 1.8426472] 9\n", | |
"3 [1.1143692, -1.8616936] 8\n", | |
"4 [-1.1564724, 2.1490877] 4" | |
] | |
}, | |
"execution_count": 12, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"test_embs.head()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 13, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"image/png": "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\n", | |
"text/plain": [ | |
"<Figure size 401.625x360 with 1 Axes>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"plot_embeddings(test_embs)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Saving Model\n", | |
"-------------------------" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 14, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"model saved to: D:\\Research\\ContrastiveRepresentationLearning\\Outputs\\Weights\\\\MNIST_TRIPLET_LOSS_3000_32_0.0005_10_1.0\n" | |
] | |
} | |
], | |
"source": [ | |
"outpath = os.getcwd() + r'\\Outputs\\Weights\\\\' + NAME \n", | |
"torch.save(model.state_dict(), outpath); print(\"model saved to: \" + outpath)" | |
] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "Python 3", | |
"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.8" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 4 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment