Skip to content

Instantly share code, notes, and snippets.

@rafaelvareto
Last active January 16, 2024 01:21
Show Gist options
  • Save rafaelvareto/b92d59d5dab1d0bfcf1e495fdcc4eb26 to your computer and use it in GitHub Desktop.
Save rafaelvareto/b92d59d5dab1d0bfcf1e495fdcc4eb26 to your computer and use it in GitHub Desktop.
openloss_tutorial.ipynb
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"<a href=\"https://colab.research.google.com/gist/rafaelvareto/b92d59d5dab1d0bfcf1e495fdcc4eb26/openloss_tutorial.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "ZX7zSI18QxEv"
},
"source": [
"# Open-set evaluation on E-MNIST and K-MNIST with PyTorch\n",
"\n",
"This notebook is a simple example of how Maximal-Entropy Loss (MEL) outperforms the conventional Cross-Entropy Loss in open-set classification tasks. As thoroughly described in two peer-reviewed papers ([journal](https://doi.org/10.1016/j.imavis.2023.104862),[conference](https://doi.org/10.1109/SIBGRAPI59091.2023.10347168)), MEL increases the entropy for negative samples and attaches a penalty to known target classes in pursuance of gallery specialization.\n",
"\n",
"> Cross-Entropy Loss requires an additional class encompassing negative samples during training time (27th category) whereas Maximal-Entropy Loss expects negative samples to hold negative target ids (label < 0).\n",
"\n",
"> The following code explains how MEL can be used with the PyTorch framework.\n",
"* Letters from E-MNIST dataset are employed as the target known classes (gallery set).\n",
"* Digits from MNIST dataset are used as negative training samples.\n",
"* Korean digits from K-MNIST provides unknown samples popping up during evaluation time."
]
},
{
"cell_type": "code",
"source": [
"#@title Installing Dependencies\n",
"\n",
"!pip install bob.measure\n",
"!pip install openloss"
],
"metadata": {
"id": "cGwxg9bYpdmB"
},
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "bGU6NwlsXFSt"
},
"outputs": [],
"source": [
"#@title Import Dependencies\n",
"\n",
"import bob.measure\n",
"import openloss\n",
"import torch\n",
"import torchvision"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "_bNfVLRUYqZA"
},
"outputs": [],
"source": [
"#@title Define Hyperparameters\n",
"\n",
"input_size = 784\n",
"hidden_size = 1024\n",
"\n",
"batch_size = 100\n",
"learn_rate = 3e-4\n",
"num_epochs = 15"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "lCsBCXMwbpH5"
},
"outputs": [],
"source": [
"#@title Downloading E-MNIST & K-MNIST data\n",
"\n",
"# Training data\n",
"train_data = torchvision.datasets.EMNIST(\n",
" root='./data', split='letters', train=True, transform=torchvision.transforms.ToTensor(), download=True\n",
")\n",
"train_neg_data_cel = torchvision.datasets.EMNIST(\n",
" root='./data', split='mnist', train=True, transform=torchvision.transforms.ToTensor(), download=True,\n",
" target_transform=lambda _:len(train_data.classes)\n",
")\n",
"train_neg_data_mel = torchvision.datasets.EMNIST(\n",
" root='./data', split='mnist', train=True, transform=torchvision.transforms.ToTensor(), download=True,\n",
" target_transform=lambda _:-1\n",
")\n",
"\n",
"# Evaluation data\n",
"probe_data = torchvision.datasets.EMNIST(\n",
" root='./data', split='letters', train=False, transform=torchvision.transforms.ToTensor(), download=True\n",
")\n",
"probe_unk_data_cel = torchvision.datasets.KMNIST(\n",
" root='./data', train=False, transform=torchvision.transforms.ToTensor(), download=True,\n",
" target_transform=lambda _:len(train_data.classes)\n",
")\n",
"probe_unk_data_mel = torchvision.datasets.KMNIST(\n",
" root='./data', train=False, transform=torchvision.transforms.ToTensor(), download=True,\n",
" target_transform=lambda _:-1\n",
")"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "rfDPBdnYgfGp"
},
"outputs": [],
"source": [
"#@title Concatenating & Loading datasets\n",
"\n",
"train_loader_cel = torch.utils.data.DataLoader(\n",
" dataset=torch.utils.data.ConcatDataset([train_data, train_neg_data_cel]),\n",
" batch_size=batch_size, shuffle=True\n",
")\n",
"train_loader_mel = torch.utils.data.DataLoader(\n",
" dataset=torch.utils.data.ConcatDataset([train_data, train_neg_data_mel]),\n",
" batch_size=batch_size, shuffle=True\n",
")\n",
"\n",
"probe_loader_cel = torch.utils.data.DataLoader(\n",
" dataset=torch.utils.data.ConcatDataset([probe_data, probe_unk_data_cel]),\n",
" batch_size=batch_size, shuffle=False\n",
")\n",
"probe_loader_mel = torch.utils.data.DataLoader(\n",
" dataset=torch.utils.data.ConcatDataset([probe_data, probe_unk_data_mel]),\n",
" batch_size=batch_size, shuffle=False\n",
")"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "fL-YXTvghaz_"
},
"outputs": [],
"source": [
"#@title Define Model and MEL classes\n",
"\n",
"class NeuralNetwork(torch.nn.Module):\n",
" def __init__(self, input_size, hidden_size, num_classes):\n",
" super(NeuralNetwork, self).__init__()\n",
" self.fc01 = torch.nn.Linear(input_size, hidden_size)\n",
" self.relu = torch.nn.ReLU()\n",
" self.fc02 = torch.nn.Linear(hidden_size, num_classes)\n",
"\n",
" def forward(self, x):\n",
" out = self.fc01(x)\n",
" out = self.relu(out)\n",
" out = self.fc02(out)\n",
" return out"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "-3EPEqbjjfAT"
},
"outputs": [],
"source": [
"#@title Build the model\n",
"\n",
"device = 'cuda:0' if torch.cuda.is_available() else 'cpu'\n",
"num_classes = len(train_data.classes)\n",
"num_samples = len(train_data) + len(train_neg_data_cel)\n",
"\n",
"model_cel = NeuralNetwork(input_size, hidden_size, num_classes+1).to(device)\n",
"model_mel = NeuralNetwork(input_size, hidden_size, num_classes).to(device)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "ePLIwvAFj2zH"
},
"outputs": [],
"source": [
"#@title Define Cost functions & Optimizers\n",
"\n",
"criterion_cel = torch.nn.CrossEntropyLoss(reduction='mean')\n",
"criterion_mel = openloss.MaximalEntropyLoss(num_classes=num_classes, margin=0.5, reduction='mean')\n",
"\n",
"optimizer_cel = torch.optim.Adam(model_cel.parameters(), lr=learn_rate)\n",
"optimizer_mel = torch.optim.Adam(model_mel.parameters(), lr=learn_rate)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "u75Xa5VckuTH",
"outputId": "ddf7e03d-44f3-40ae-e314-404f1ceb4afa"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training network with Cross-Entropy Loss\n",
"Epoch [1/15]\t[300/1848 = 1.3191] [600/1848 = 1.0328] [900/1848 = 0.8079] [1200/1848 = 0.6967] [1500/1848 = 0.6887] [1800/1848 = 0.5803] \n",
"Epoch [2/15]\t[300/1848 = 0.6316] [600/1848 = 0.6248] [900/1848 = 0.6778] [1200/1848 = 0.4207] [1500/1848 = 0.5554] [1800/1848 = 0.4496] \n",
"Epoch [3/15]\t[300/1848 = 0.4082] [600/1848 = 0.3918] [900/1848 = 0.4528] [1200/1848 = 0.3786] [1500/1848 = 0.3951] [1800/1848 = 0.4657] \n",
"Epoch [4/15]\t[300/1848 = 0.3174] [600/1848 = 0.5494] [900/1848 = 0.5841] [1200/1848 = 0.4429] [1500/1848 = 0.4614] [1800/1848 = 0.3229] \n",
"Epoch [5/15]\t[300/1848 = 0.3562] [600/1848 = 0.4165] [900/1848 = 0.4437] [1200/1848 = 0.4330] [1500/1848 = 0.3143] [1800/1848 = 0.5487] \n",
"Epoch [6/15]\t[300/1848 = 0.2810] [600/1848 = 0.2796] [900/1848 = 0.4146] [1200/1848 = 0.2920] [1500/1848 = 0.3870] [1800/1848 = 0.3592] \n",
"Epoch [7/15]\t[300/1848 = 0.3491] [600/1848 = 0.4434] [900/1848 = 0.2464] [1200/1848 = 0.3436] [1500/1848 = 0.2543] [1800/1848 = 0.2565] \n",
"Epoch [8/15]\t[300/1848 = 0.3977] [600/1848 = 0.2892] [900/1848 = 0.3723] [1200/1848 = 0.2756] [1500/1848 = 0.3353] [1800/1848 = 0.3320] \n",
"Epoch [9/15]\t[300/1848 = 0.3092] [600/1848 = 0.3115] [900/1848 = 0.3045] [1200/1848 = 0.2261] [1500/1848 = 0.2911] [1800/1848 = 0.2054] \n",
"Epoch [10/15]\t[300/1848 = 0.1486] [600/1848 = 0.4474] [900/1848 = 0.1663] [1200/1848 = 0.2507] [1500/1848 = 0.2484] [1800/1848 = 0.5103] \n",
"Epoch [11/15]\t[300/1848 = 0.2425] [600/1848 = 0.2604] [900/1848 = 0.2603] [1200/1848 = 0.2777] [1500/1848 = 0.3113] [1800/1848 = 0.2458] \n",
"Epoch [12/15]\t[300/1848 = 0.2184] [600/1848 = 0.1910] [900/1848 = 0.1943] [1200/1848 = 0.3508] [1500/1848 = 0.2591] [1800/1848 = 0.2616] \n",
"Epoch [13/15]\t[300/1848 = 0.2858] [600/1848 = 0.1947] [900/1848 = 0.1665] [1200/1848 = 0.2220] [1500/1848 = 0.2763] [1800/1848 = 0.1566] \n",
"Epoch [14/15]\t[300/1848 = 0.2674] [600/1848 = 0.2125] [900/1848 = 0.1449] [1200/1848 = 0.2455] [1500/1848 = 0.2159] [1800/1848 = 0.2552] \n",
"Epoch [15/15]\t[300/1848 = 0.2064] [600/1848 = 0.2750] [900/1848 = 0.3080] [1200/1848 = 0.2190] [1500/1848 = 0.2955] [1800/1848 = 0.1682] \n",
"Training network with Maximal-Entropy Loss\n",
"Epoch [1/15]\t[300/1848 = 2.2881] [600/1848 = 2.1260] [900/1848 = 2.0720] [1200/1848 = 1.9765] [1500/1848 = 1.8796] [1800/1848 = 1.7293] \n",
"Epoch [2/15]\t[300/1848 = 1.9387] [600/1848 = 1.7789] [900/1848 = 1.6595] [1200/1848 = 1.4682] [1500/1848 = 1.6029] [1800/1848 = 1.9263] \n",
"Epoch [3/15]\t[300/1848 = 1.6872] [600/1848 = 1.8431] [900/1848 = 1.3831] [1200/1848 = 2.2339] [1500/1848 = 1.7945] [1800/1848 = 1.4387] \n",
"Epoch [4/15]\t[300/1848 = 1.3946] [600/1848 = 1.9433] [900/1848 = 1.4671] [1200/1848 = 1.7856] [1500/1848 = 1.5913] [1800/1848 = 1.4531] \n",
"Epoch [5/15]\t[300/1848 = 1.1340] [600/1848 = 1.3471] [900/1848 = 1.5600] [1200/1848 = 1.3287] [1500/1848 = 1.2284] [1800/1848 = 1.4017] \n",
"Epoch [6/15]\t[300/1848 = 1.4419] [600/1848 = 1.3205] [900/1848 = 1.3468] [1200/1848 = 1.6891] [1500/1848 = 1.3360] [1800/1848 = 1.5187] \n",
"Epoch [7/15]\t[300/1848 = 1.3123] [600/1848 = 1.3725] [900/1848 = 1.4318] [1200/1848 = 1.3849] [1500/1848 = 1.6194] [1800/1848 = 1.4615] \n",
"Epoch [8/15]\t[300/1848 = 1.1954] [600/1848 = 1.4519] [900/1848 = 1.6195] [1200/1848 = 1.3001] [1500/1848 = 1.3851] [1800/1848 = 1.3715] \n",
"Epoch [9/15]\t[300/1848 = 1.5820] [600/1848 = 1.2637] [900/1848 = 1.3042] [1200/1848 = 1.5714] [1500/1848 = 1.2808] [1800/1848 = 1.5628] \n",
"Epoch [10/15]\t[300/1848 = 1.6933] [600/1848 = 1.3179] [900/1848 = 1.3250] [1200/1848 = 1.3822] [1500/1848 = 1.3070] [1800/1848 = 1.5055] \n",
"Epoch [11/15]\t[300/1848 = 1.1019] [600/1848 = 1.6998] [900/1848 = 1.4937] [1200/1848 = 1.3926] [1500/1848 = 1.4391] [1800/1848 = 1.4541] \n",
"Epoch [12/15]\t[300/1848 = 1.6115] [600/1848 = 1.4365] [900/1848 = 1.3045] [1200/1848 = 1.4203] [1500/1848 = 1.5660] [1800/1848 = 1.3486] \n",
"Epoch [13/15]\t[300/1848 = 1.3794] [600/1848 = 1.3641] [900/1848 = 1.4275] [1200/1848 = 1.5101] [1500/1848 = 1.5873] [1800/1848 = 1.4084] \n",
"Epoch [14/15]\t[300/1848 = 1.2511] [600/1848 = 1.3520] [900/1848 = 1.3668] [1200/1848 = 1.1975] [1500/1848 = 1.2604] [1800/1848 = 1.5201] \n",
"Epoch [15/15]\t[300/1848 = 1.2493] [600/1848 = 1.5097] [900/1848 = 1.3566] [1200/1848 = 1.4217] [1500/1848 = 1.3549] [1800/1848 = 1.2613] \n"
]
}
],
"source": [
"#@title Define Training and Evaluating classes\n",
"\n",
"def train_network(loader, model, criterion, optimizer, num_epochs, num_samples, device):\n",
" for epoch_id in range(num_epochs):\n",
" print(f'Epoch [{epoch_id+1}/{num_epochs}]', end='\\t')\n",
" for batch_id ,(images,labels) in enumerate(loader):\n",
" images = images.view(-1,28*28).to(device)\n",
" labels = labels.to(device)\n",
"\n",
" optimizer.zero_grad()\n",
" outputs = model(images)\n",
" loss = criterion(outputs, labels)\n",
" loss.backward()\n",
" optimizer.step()\n",
"\n",
" if (batch_id+1) % 300 == 0:\n",
" print(f'[{batch_id+1}/{num_samples//batch_size} = {loss.item():.4f}]', end=' ')\n",
" print()\n",
" return model\n",
"\n",
"print('Training network with Cross-Entropy Loss')\n",
"model_cel = train_network(train_loader_cel, model_cel, criterion_cel, optimizer_cel, num_epochs, num_samples, device)\n",
"print('Training network with Maximal-Entropy Loss')\n",
"model_mel = train_network(train_loader_mel, model_mel, criterion_mel, optimizer_mel, num_epochs, num_samples, device)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "l6JRaN9ZIjdw"
},
"outputs": [],
"source": [
"#@title Evaluating the accuracy of the models\n",
"\n",
"def evaluate_network(loader, model, neg_class=-1, device='cpu'):\n",
" neg_pos_scores, overall_accuracy = list(), list()\n",
" for (images, labels) in loader:\n",
" images = images.view(-1,28*28).to(device)\n",
" labels = labels.to(device)\n",
"\n",
" results = model(images)\n",
" for (result, label) in zip(results, labels):\n",
" neg = [value.item() for (idx,value) in enumerate(result) if idx != label]\n",
" pos = result[label].item() if label != neg_class else None\n",
" neg_pos_scores.append( (neg, pos) )\n",
" return neg_pos_scores\n",
"\n",
"neg_pos_scores_cel = evaluate_network(probe_loader_cel, model_cel, len(train_data.classes), device=device)\n",
"neg_pos_scores_mel = evaluate_network(probe_loader_mel, model_mel, device=device)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 477
},
"id": "Z8pZqkpQXYL0",
"outputId": "5f551f69-4dd9-4ef2-a9f4-d4736e91d14d"
},
"outputs": [
{
"data": {
"image/png": "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999p3LgxhQoV4tatW5w5c4bdu3czdepU4+C9smXL8s033zB48GCqVKlC+/btKVGiBBEREezbtw83NzfjX7n58uWjZs2a7Ny5k549e1KyZElsbW1p166d8S+0R2k0GhYuXEizZs3o2rUr7du3p3Tp0pw+fZpffvkFV1dXFi1aZGy+t7QRI0YYn9srr7yCvb09u3fv5sSJE7Rt25bff//9mc/RvXt3fv75Z3777TfKly9P+/btSU5OZtWqVVSvXp1z58498znq1q3L0KFDmTVrFuXLl6dTp07Y29vz66+/4unpme7YlX79+rF//36++eYbihUrRosWLQgMDCQyMpILFy6wY8cO+vbty5w5c546rlKlSlGoUCGWL1+Ovb09QUFBaDQaevfuTVBQ0LM8ZRPNmzfngw8+YMqUKZQpU4YOHToQEBBAWFgYu3btolatWsb5+t566y02btxIvXr16NKlC+7u7vz333/s2rWLTp06pUnKwXAX0759+2jZsiUvvvgiDg4OVKpUibZt22YY08cff8zOnTuZPXs2+/bto1GjRoSHh7NixQru3r3L7NmzKVKkiMVeg0e99957pKSkMGnSJKpXr06dOnWoVq2acTqOHTt2cObMGZOBufb29gwfPpzJkydTpUoVOnbsSEpKCps2bcLf3z/d8TKZFRAQQKNGjdiyZQt2dnZUqFDBpNUkVenSpZk/fz79+vWjXLlytGzZkpIlS5KcnMzly5fZuXMnBQsWzLC152EajYaOHTsyd+5cjh8/nuaO2Hz58rFhwwbatWvH/PnzWbduHa1bt8bX15ewsDDWrVvHjRs3qFy5Mr///nuGU66UKVOGcuXKmbzvzp07R5s2bUwS3gIFCrBq1SrjNDRNmjShXLlyaDQarly5wp49e4iIiEh3jFNWeOONN/jss89YvHgxY8aMMbaY+/v78+eff9KuXTumTJnC4sWLadmyJfnz5zdOx3Hnzh2aNm3KypUr03xeN2jQgDVr1tC7d2969+7N5MmTadiwIQULFiQ6Opr//vuPf//9FxcXlzTjglKn4XjllVey5kUwh5Vu2X9u8UjlWq1WqwoUKKBeeOEF9dprr6n169dnWP1UKaViYmLU1KlT1QsvvKBcXFyUo6OjCg4OVq1bt1bfffedio2NNdl//fr1qlatWsrFxcV4zofrmej1erVo0SLVuHFj5enp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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from matplotlib import pyplot\n",
"\n",
"bob.measure.plot.detection_identification_curve(neg_pos_scores_cel, label='CEL-based')\n",
"bob.measure.plot.detection_identification_curve(neg_pos_scores_mel, label='MEL-based')\n",
"pyplot.rcParams.update({'font.size': 12})\n",
"pyplot.title('Detection and Identification Curve (Open ROC)')\n",
"pyplot.xlabel('False Positive Identification Rate')\n",
"pyplot.ylabel('True Positive Identification Rate')\n",
"pyplot.legend(loc='best')\n",
"pyplot.xlim([1e-1, 1.00])\n",
"pyplot.xticks([1e-1, 5e-1, 1.0])\n",
"pyplot.grid(True)\n",
"pyplot.show()"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "ttwFa4dLetrC"
},
"source": []
}
],
"metadata": {
"accelerator": "GPU",
"colab": {
"gpuType": "T4",
"provenance": [],
"toc_visible": true,
"include_colab_link": true
},
"kernelspec": {
"display_name": "Python 3",
"name": "python3"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment