{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from fastai import *\n", "from fastai.vision import *\n", "from fastai.utils.ipython import *\n", "from fastai.callbacks.tracker import SaveModelCallback\n", "from sklearn.model_selection import StratifiedKFold\n", "import matplotlib.pyplot as plt\n", "from functools import partial\n", "import pretrainedmodels" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[PosixPath('../../../Dataset/Herlev Dataset/abnormal_moderate-dysplastic'),\n", " PosixPath('../../../Dataset/Herlev Dataset/normal_superficiel'),\n", " PosixPath('../../../Dataset/Herlev Dataset/abnormal_light-dysplastic'),\n", " PosixPath('../../../Dataset/Herlev Dataset/abnormal_severe-dysplastic'),\n", " PosixPath('../../../Dataset/Herlev Dataset/normal_columnar'),\n", " PosixPath('../../../Dataset/Herlev Dataset/normal_intermediate'),\n", " PosixPath('../../../Dataset/Herlev Dataset/abnormal_carcinoma-in-situ'),\n", " PosixPath('../../../Dataset/Herlev Dataset/models')]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "path = Path(\".\")\n", "data_path = path / \"..\" / \"..\" / \"..\" / \"Dataset\" / \"Herlev Dataset\"\n", "data_path.ls()" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "LabelLists;\n", "\n", "Train: LabelList (917 items)\n", "x: ImageList\n", "Image (3, 83, 146),Image (3, 106, 116),Image (3, 129, 119),Image (3, 108, 110),Image (3, 209, 173)\n", "y: CategoryList\n", "abnormal_moderate-dysplastic,abnormal_moderate-dysplastic,abnormal_moderate-dysplastic,abnormal_moderate-dysplastic,abnormal_moderate-dysplastic\n", "Path: ../../../Dataset/Herlev Dataset;\n", "\n", "Valid: LabelList (0 items)\n", "x: ImageList\n", "\n", "y: CategoryList\n", "\n", "Path: ../../../Dataset/Herlev Dataset;\n", "\n", "Test: None" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data_init = (ImageList.from_folder(data_path)\n", " .split_none()\n", " .label_from_folder())\n", "data_init" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "StratifiedKFold(n_splits=5, random_state=0, shuffle=True)" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "skf = StratifiedKFold(n_splits=5, shuffle=True, random_state=0)\n", "skf" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "tfms = get_transforms(flip_vert=True, max_warp=0.0, max_rotate=30.0)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[ .new_type at 0x7f565c2cd400>>,\n", " Precision(average='macro', pos_label=1, eps=1e-09),\n", " Recall(average='macro', pos_label=1, eps=1e-09),\n", " FBeta(average='macro', pos_label=1, eps=1e-09, beta=2),\n", " KappaScore(weights='quadratic')]" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "our_metrics = [accuracy, Precision(average=\"macro\"), Recall(average=\"macro\"), FBeta(average=\"macro\"), KappaScore(weights=\"quadratic\")]\n", "our_metrics" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "idxs = [[train_idx, val_idx] for train_idx, val_idx in skf.split(data_init.x.items, data_init.y.items)]" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "def model_callback(model, model_name):\n", " return [SaveModelCallback(model, every=\"improvement\", monitor=\"accuracy\", name=model_name)]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Fold-1" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "ImageDataBunch;\n", "\n", "Train: LabelList (733 items)\n", "x: ImageList\n", "Image (3, 64, 64),Image (3, 64, 64),Image (3, 64, 64),Image (3, 64, 64),Image (3, 64, 64)\n", "y: CategoryList\n", "abnormal_moderate-dysplastic,abnormal_moderate-dysplastic,abnormal_moderate-dysplastic,abnormal_moderate-dysplastic,abnormal_moderate-dysplastic\n", "Path: ../../../Dataset/Herlev Dataset;\n", "\n", "Valid: LabelList (184 items)\n", "x: ImageList\n", "Image (3, 64, 64),Image (3, 64, 64),Image (3, 64, 64),Image (3, 64, 64),Image (3, 64, 64)\n", "y: CategoryList\n", "abnormal_moderate-dysplastic,abnormal_moderate-dysplastic,abnormal_moderate-dysplastic,abnormal_moderate-dysplastic,abnormal_moderate-dysplastic\n", "Path: ../../../Dataset/Herlev Dataset;\n", "\n", "Test: None" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fold_idxs = idxs[0]\n", "fold_data = (ImageList.from_folder(data_path)\n", " .split_by_idxs(fold_idxs[0], fold_idxs[1])\n", " .label_from_folder()\n", " .transform(tfms, size=64)\n", " .databunch(bs=64)\n", " .normalize(imagenet_stats))\n", "fold_data" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "model_name = 'vgg19_bn' # could be fbresnet152 or inceptionresnetv2\n", "model_cadene = pretrainedmodels.__dict__[model_name](num_classes=1000, pretrained='imagenet')" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "VGG(\n", " (avgpool): AdaptiveAvgPool2d(output_size=(7, 7))\n", " (_features): Sequential(\n", " (0): Conv2d(3, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (2): ReLU(inplace=True)\n", " (3): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (4): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (5): ReLU(inplace=True)\n", " (6): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)\n", " (7): Conv2d(64, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (8): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (9): ReLU(inplace=True)\n", " (10): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (11): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (12): ReLU(inplace=True)\n", " (13): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)\n", " (14): Conv2d(128, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (15): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (16): ReLU(inplace=True)\n", " (17): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (18): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (19): ReLU(inplace=True)\n", " (20): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (21): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (22): ReLU(inplace=True)\n", " (23): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (24): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (25): ReLU(inplace=True)\n", " (26): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)\n", " (27): Conv2d(256, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (28): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (29): ReLU(inplace=True)\n", " (30): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (31): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (32): ReLU(inplace=True)\n", " (33): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (34): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (35): ReLU(inplace=True)\n", " (36): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (37): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (38): ReLU(inplace=True)\n", " (39): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)\n", " (40): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (41): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (42): ReLU(inplace=True)\n", " (43): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (44): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (45): ReLU(inplace=True)\n", " (46): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (47): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (48): ReLU(inplace=True)\n", " (49): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (50): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (51): ReLU(inplace=True)\n", " (52): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)\n", " )\n", " (linear0): Linear(in_features=2048, out_features=4096, bias=True)\n", " (relu0): ReLU(inplace=True)\n", " (dropout0): Dropout(p=0.5, inplace=False)\n", " (linear1): Linear(in_features=4096, out_features=4096, bias=True)\n", " (relu1): ReLU(inplace=True)\n", " (dropout1): Dropout(p=0.5, inplace=False)\n", " (last_linear): Linear(in_features=4096, out_features=7, bias=True)\n", ")" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model_cadene.linear0 = torch.nn.Linear(in_features=512 * 2 * 2, out_features=4096)\n", "model_cadene.last_linear = torch.nn.Linear(model_cadene.last_linear.in_features, int(fold_data.c))\n", "model_cadene.input_size = [3, 64, 64]\n", "model_cadene" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Learner(data=ImageDataBunch;\n", "\n", "Train: LabelList (733 items)\n", "x: ImageList\n", "Image (3, 64, 64),Image (3, 64, 64),Image (3, 64, 64),Image (3, 64, 64),Image (3, 64, 64)\n", "y: CategoryList\n", "abnormal_moderate-dysplastic,abnormal_moderate-dysplastic,abnormal_moderate-dysplastic,abnormal_moderate-dysplastic,abnormal_moderate-dysplastic\n", "Path: ../../../Dataset/Herlev Dataset;\n", "\n", "Valid: LabelList (184 items)\n", "x: ImageList\n", "Image (3, 64, 64),Image (3, 64, 64),Image (3, 64, 64),Image (3, 64, 64),Image (3, 64, 64)\n", "y: CategoryList\n", "abnormal_moderate-dysplastic,abnormal_moderate-dysplastic,abnormal_moderate-dysplastic,abnormal_moderate-dysplastic,abnormal_moderate-dysplastic\n", "Path: ../../../Dataset/Herlev Dataset;\n", "\n", "Test: None, model=VGG(\n", " (avgpool): AdaptiveAvgPool2d(output_size=(7, 7))\n", " (_features): Sequential(\n", " (0): Conv2d(3, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (2): ReLU(inplace=True)\n", " (3): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (4): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (5): ReLU(inplace=True)\n", " (6): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)\n", " (7): Conv2d(64, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (8): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (9): ReLU(inplace=True)\n", " (10): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (11): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (12): ReLU(inplace=True)\n", " (13): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)\n", " (14): Conv2d(128, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (15): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (16): ReLU(inplace=True)\n", " (17): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (18): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (19): ReLU(inplace=True)\n", " (20): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (21): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (22): ReLU(inplace=True)\n", " (23): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (24): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (25): ReLU(inplace=True)\n", " (26): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)\n", " (27): Conv2d(256, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (28): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (29): ReLU(inplace=True)\n", " (30): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (31): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (32): ReLU(inplace=True)\n", " (33): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (34): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (35): ReLU(inplace=True)\n", " (36): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (37): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (38): ReLU(inplace=True)\n", " (39): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)\n", " (40): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (41): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (42): ReLU(inplace=True)\n", " (43): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (44): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (45): ReLU(inplace=True)\n", " (46): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (47): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (48): ReLU(inplace=True)\n", " (49): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (50): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (51): ReLU(inplace=True)\n", " (52): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)\n", " )\n", " (linear0): Linear(in_features=2048, out_features=4096, bias=True)\n", " (relu0): ReLU(inplace=True)\n", " (dropout0): Dropout(p=0.5, inplace=False)\n", " (linear1): Linear(in_features=4096, out_features=4096, bias=True)\n", " (relu1): ReLU(inplace=True)\n", " (dropout1): Dropout(p=0.5, inplace=False)\n", " (last_linear): Linear(in_features=4096, out_features=7, bias=True)\n", "), opt_func=functools.partial(, betas=(0.9, 0.99)), loss_func=FlattenedLoss of CrossEntropyLoss(), metrics=[, Precision(average='macro', pos_label=1, eps=1e-09), Recall(average='macro', pos_label=1, eps=1e-09), FBeta(average='macro', pos_label=1, eps=1e-09, beta=2), KappaScore(weights='quadratic')], true_wd=True, bn_wd=True, wd=0.01, train_bn=True, path=PosixPath('../../../Dataset/Herlev Dataset'), model_dir='models', callback_fns=[functools.partial(, add_time=True, silent=False)], callbacks=[MixedPrecision\n", "learn: Learner(data=ImageDataBunch;\n", "\n", "Train: LabelList (733 items)\n", "x: ImageList\n", "Image (3, 64, 64),Image (3, 64, 64),Image (3, 64, 64),Image (3, 64, 64),Image (3, 64, 64)\n", "y: CategoryList\n", "abnormal_moderate-dysplastic,abnormal_moderate-dysplastic,abnormal_moderate-dysplastic,abnormal_moderate-dysplastic,abnormal_moderate-dysplastic\n", "Path: ../../../Dataset/Herlev Dataset;\n", "\n", "Valid: LabelList (184 items)\n", "x: ImageList\n", "Image (3, 64, 64),Image (3, 64, 64),Image (3, 64, 64),Image (3, 64, 64),Image (3, 64, 64)\n", "y: CategoryList\n", "abnormal_moderate-dysplastic,abnormal_moderate-dysplastic,abnormal_moderate-dysplastic,abnormal_moderate-dysplastic,abnormal_moderate-dysplastic\n", "Path: ../../../Dataset/Herlev Dataset;\n", "\n", "Test: None, model=VGG(\n", " (avgpool): AdaptiveAvgPool2d(output_size=(7, 7))\n", " (_features): Sequential(\n", " (0): Conv2d(3, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (2): ReLU(inplace=True)\n", " (3): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (4): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (5): ReLU(inplace=True)\n", " (6): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)\n", " (7): Conv2d(64, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (8): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (9): ReLU(inplace=True)\n", " (10): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (11): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (12): ReLU(inplace=True)\n", " (13): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)\n", " (14): Conv2d(128, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (15): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (16): ReLU(inplace=True)\n", " (17): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (18): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (19): ReLU(inplace=True)\n", " (20): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (21): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (22): ReLU(inplace=True)\n", " (23): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (24): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (25): ReLU(inplace=True)\n", " (26): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)\n", " (27): Conv2d(256, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (28): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (29): ReLU(inplace=True)\n", " (30): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (31): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (32): ReLU(inplace=True)\n", " (33): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (34): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (35): ReLU(inplace=True)\n", " (36): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (37): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (38): ReLU(inplace=True)\n", " (39): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)\n", " (40): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (41): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (42): ReLU(inplace=True)\n", " (43): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (44): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (45): ReLU(inplace=True)\n", " (46): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (47): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (48): ReLU(inplace=True)\n", " (49): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (50): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (51): ReLU(inplace=True)\n", " (52): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)\n", " )\n", " (linear0): Linear(in_features=2048, out_features=4096, bias=True)\n", " (relu0): ReLU(inplace=True)\n", " (dropout0): Dropout(p=0.5, inplace=False)\n", " (linear1): Linear(in_features=4096, out_features=4096, bias=True)\n", " (relu1): ReLU(inplace=True)\n", " (dropout1): Dropout(p=0.5, inplace=False)\n", " (last_linear): Linear(in_features=4096, out_features=7, bias=True)\n", "), opt_func=functools.partial(, betas=(0.9, 0.99)), loss_func=FlattenedLoss of CrossEntropyLoss(), metrics=[, Precision(average='macro', pos_label=1, eps=1e-09), Recall(average='macro', pos_label=1, eps=1e-09), FBeta(average='macro', pos_label=1, eps=1e-09, beta=2), KappaScore(weights='quadratic')], true_wd=True, bn_wd=True, wd=0.01, train_bn=True, path=PosixPath('../../../Dataset/Herlev Dataset'), model_dir='models', callback_fns=[functools.partial(, add_time=True, silent=False)], callbacks=[...], layer_groups=[Sequential(\n", " (0): AdaptiveAvgPool2d(output_size=(7, 7))\n", " (1): Conv2d(3, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (3): ReLU(inplace=True)\n", " (4): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (5): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (6): ReLU(inplace=True)\n", " (7): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)\n", " (8): Conv2d(64, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (9): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (10): ReLU(inplace=True)\n", " (11): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (12): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (13): ReLU(inplace=True)\n", " (14): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)\n", " (15): Conv2d(128, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (16): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (17): ReLU(inplace=True)\n", " (18): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (19): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (20): ReLU(inplace=True)\n", " (21): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (22): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (23): ReLU(inplace=True)\n", " (24): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (25): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (26): ReLU(inplace=True)\n", " (27): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)\n", " (28): Conv2d(256, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (29): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (30): ReLU(inplace=True)\n", " (31): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (32): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (33): ReLU(inplace=True)\n", " (34): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (35): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (36): ReLU(inplace=True)\n", " (37): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (38): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (39): ReLU(inplace=True)\n", " (40): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)\n", " (41): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (42): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (43): ReLU(inplace=True)\n", " (44): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (45): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (46): ReLU(inplace=True)\n", " (47): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (48): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (49): ReLU(inplace=True)\n", " (50): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (51): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (52): ReLU(inplace=True)\n", " (53): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)\n", " (54): Linear(in_features=2048, out_features=4096, bias=True)\n", " (55): ReLU(inplace=True)\n", " (56): Dropout(p=0.5, inplace=False)\n", " (57): Linear(in_features=4096, out_features=4096, bias=True)\n", " (58): ReLU(inplace=True)\n", " (59): Dropout(p=0.5, inplace=False)\n", " (60): Linear(in_features=4096, out_features=7, bias=True)\n", ")], add_time=True, silent=False)\n", "loss_scale: 65536\n", "max_noskip: 1000\n", "dynamic: True\n", "clip: None\n", "flat_master: False\n", "max_scale: 16777216\n", "loss_fp32: True], layer_groups=[Sequential(\n", " (0): AdaptiveAvgPool2d(output_size=(7, 7))\n", " (1): Conv2d(3, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (3): ReLU(inplace=True)\n", " (4): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (5): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (6): ReLU(inplace=True)\n", " (7): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)\n", " (8): Conv2d(64, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (9): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (10): ReLU(inplace=True)\n", " (11): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (12): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (13): ReLU(inplace=True)\n", " (14): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)\n", " (15): Conv2d(128, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (16): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (17): ReLU(inplace=True)\n", " (18): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (19): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (20): ReLU(inplace=True)\n", " (21): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (22): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (23): ReLU(inplace=True)\n", " (24): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (25): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (26): ReLU(inplace=True)\n", " (27): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)\n", " (28): Conv2d(256, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (29): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (30): ReLU(inplace=True)\n", " (31): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (32): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (33): ReLU(inplace=True)\n", " (34): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (35): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (36): ReLU(inplace=True)\n", " (37): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (38): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (39): ReLU(inplace=True)\n", " (40): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)\n", " (41): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (42): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (43): ReLU(inplace=True)\n", " (44): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (45): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (46): ReLU(inplace=True)\n", " (47): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (48): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (49): ReLU(inplace=True)\n", " (50): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", " (51): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (52): ReLU(inplace=True)\n", " (53): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)\n", " (54): Linear(in_features=2048, out_features=4096, bias=True)\n", " (55): ReLU(inplace=True)\n", " (56): Dropout(p=0.5, inplace=False)\n", " (57): Linear(in_features=4096, out_features=4096, bias=True)\n", " (58): ReLU(inplace=True)\n", " (59): Dropout(p=0.5, inplace=False)\n", " (60): Linear(in_features=4096, out_features=7, bias=True)\n", ")], add_time=True, silent=False)" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "learner = Learner(fold_data, model_cadene, metrics=our_metrics).to_fp16()\n", "learner" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "VGG\n", "======================================================================\n", "Layer (type) Output Shape Param # Trainable \n", "======================================================================\n", "Conv2d [64, 64, 64] 1,792 True \n", "______________________________________________________________________\n", "BatchNorm2d [64, 64, 64] 128 True \n", "______________________________________________________________________\n", "ReLU [64, 64, 64] 0 False \n", "______________________________________________________________________\n", "Conv2d [64, 64, 64] 36,928 True \n", "______________________________________________________________________\n", "BatchNorm2d [64, 64, 64] 128 True \n", "______________________________________________________________________\n", "ReLU [64, 64, 64] 0 False \n", "______________________________________________________________________\n", "MaxPool2d [64, 32, 32] 0 False \n", "______________________________________________________________________\n", "Conv2d [128, 32, 32] 73,856 True \n", "______________________________________________________________________\n", "BatchNorm2d [128, 32, 32] 256 True \n", "______________________________________________________________________\n", "ReLU [128, 32, 32] 0 False \n", "______________________________________________________________________\n", "Conv2d [128, 32, 32] 147,584 True \n", "______________________________________________________________________\n", "BatchNorm2d [128, 32, 32] 256 True \n", "______________________________________________________________________\n", "ReLU [128, 32, 32] 0 False \n", "______________________________________________________________________\n", "MaxPool2d [128, 16, 16] 0 False \n", "______________________________________________________________________\n", "Conv2d [256, 16, 16] 295,168 True \n", "______________________________________________________________________\n", "BatchNorm2d [256, 16, 16] 512 True \n", "______________________________________________________________________\n", "ReLU [256, 16, 16] 0 False \n", "______________________________________________________________________\n", "Conv2d [256, 16, 16] 590,080 True \n", "______________________________________________________________________\n", "BatchNorm2d [256, 16, 16] 512 True \n", "______________________________________________________________________\n", "ReLU [256, 16, 16] 0 False \n", "______________________________________________________________________\n", "Conv2d [256, 16, 16] 590,080 True \n", "______________________________________________________________________\n", "BatchNorm2d [256, 16, 16] 512 True \n", "______________________________________________________________________\n", "ReLU [256, 16, 16] 0 False \n", "______________________________________________________________________\n", "Conv2d [256, 16, 16] 590,080 True \n", "______________________________________________________________________\n", "BatchNorm2d [256, 16, 16] 512 True \n", "______________________________________________________________________\n", "ReLU [256, 16, 16] 0 False \n", "______________________________________________________________________\n", "MaxPool2d [256, 8, 8] 0 False \n", "______________________________________________________________________\n", "Conv2d [512, 8, 8] 1,180,160 True \n", "______________________________________________________________________\n", "BatchNorm2d [512, 8, 8] 1,024 True \n", "______________________________________________________________________\n", "ReLU [512, 8, 8] 0 False \n", "______________________________________________________________________\n", "Conv2d [512, 8, 8] 2,359,808 True \n", "______________________________________________________________________\n", "BatchNorm2d [512, 8, 8] 1,024 True \n", "______________________________________________________________________\n", "ReLU [512, 8, 8] 0 False \n", "______________________________________________________________________\n", "Conv2d [512, 8, 8] 2,359,808 True \n", "______________________________________________________________________\n", "BatchNorm2d [512, 8, 8] 1,024 True \n", "______________________________________________________________________\n", "ReLU [512, 8, 8] 0 False \n", "______________________________________________________________________\n", "Conv2d [512, 8, 8] 2,359,808 True \n", "______________________________________________________________________\n", "BatchNorm2d [512, 8, 8] 1,024 True \n", "______________________________________________________________________\n", "ReLU [512, 8, 8] 0 False \n", "______________________________________________________________________\n", "MaxPool2d [512, 4, 4] 0 False \n", "______________________________________________________________________\n", "Conv2d [512, 4, 4] 2,359,808 True \n", "______________________________________________________________________\n", "BatchNorm2d [512, 4, 4] 1,024 True \n", "______________________________________________________________________\n", "ReLU [512, 4, 4] 0 False \n", "______________________________________________________________________\n", "Conv2d [512, 4, 4] 2,359,808 True \n", "______________________________________________________________________\n", "BatchNorm2d [512, 4, 4] 1,024 True \n", "______________________________________________________________________\n", "ReLU [512, 4, 4] 0 False \n", "______________________________________________________________________\n", "Conv2d [512, 4, 4] 2,359,808 True \n", "______________________________________________________________________\n", "BatchNorm2d [512, 4, 4] 1,024 True \n", "______________________________________________________________________\n", "ReLU [512, 4, 4] 0 False \n", "______________________________________________________________________\n", "Conv2d [512, 4, 4] 2,359,808 True \n", "______________________________________________________________________\n", "BatchNorm2d [512, 4, 4] 1,024 True \n", "______________________________________________________________________\n", "ReLU [512, 4, 4] 0 False \n", "______________________________________________________________________\n", "MaxPool2d [512, 2, 2] 0 False \n", "______________________________________________________________________\n", "Linear [4096] 8,392,704 True \n", "______________________________________________________________________\n", "ReLU [4096] 0 False \n", "______________________________________________________________________\n", "Dropout [4096] 0 False \n", "______________________________________________________________________\n", "Linear [4096] 16,781,312 True \n", "______________________________________________________________________\n", "ReLU [4096] 0 False \n", "______________________________________________________________________\n", "Dropout [4096] 0 False \n", "______________________________________________________________________\n", "Linear [7] 28,679 True \n", "______________________________________________________________________\n", "\n", "Total params: 45,238,087\n", "Total trainable params: 45,238,087\n", "Total non-trainable params: 0\n", "Optimized with 'torch.optim.adam.Adam', betas=(0.9, 0.99)\n", "Using true weight decay as discussed in https://www.fast.ai/2018/07/02/adam-weight-decay/ \n", "Loss function : FlattenedLoss\n", "======================================================================\n", "Callbacks functions applied \n", " MixedPrecision" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "learner.summary()" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "
\n", " \n", " \n", " 70.00% [7/10 00:11<00:04]\n", "
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
epochtrain_lossvalid_lossaccuracyprecisionrecallf_betakappa_scoretime
01.943380#na#00:01
11.943366#na#00:01
21.940636#na#00:01
31.918666#na#00:01
41.816351#na#00:01
51.907458#na#00:01
64.293433#na#00:01

\n", "\n", "

\n", " \n", " \n", " 45.45% [5/11 00:01<00:01 6.5785]\n", "
\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "LR Finder is complete, type {learner_name}.recorder.plot() to see the graph.\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "learner.lr_find()\n", "learner.recorder.plot()" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
epochtrain_lossvalid_lossaccuracyprecisionrecallf_betakappa_scoretime
01.9369601.9286270.217391nan0.1478170.092869-0.04999700:03
11.9147781.8434220.255435nan0.1739430.124671-0.31468300:02
21.8522521.5745350.375000nan0.2719670.221299-0.08206700:02
31.6762131.3448590.5271740.6459120.5111730.4967790.71887000:02
41.4946271.5624010.5054350.5865790.5637450.5412240.60310900:02
51.3570851.4923250.5706520.6250460.6029180.5961800.71037500:02
61.2602542.2359510.5271740.5902700.5432950.5185720.47666900:02
71.1950071.3311550.5652170.5505520.5621410.5492230.64586800:02
81.1346571.6329710.5108700.5065720.5635280.5417300.64237900:02
91.0932181.4232960.5652170.6315570.5946820.5779380.66512500:02
101.0566371.3003810.5760870.5947940.6321540.6109080.67352600:02
111.0233111.1690750.5923910.6396900.6132820.6054380.71403800:02
120.9637751.2716220.6141300.7242350.6490560.6478450.76226600:02
130.9231531.2512810.5652170.6457910.6126490.6034170.73975700:02
140.8822551.0592910.6358700.6781620.6671840.6642390.76267200:02
150.8290251.1858180.6358700.7024930.6533010.6512020.74701500:02
160.7945291.2392720.5652170.6040490.5976540.5917110.72107700:02
170.7637601.1484090.6521740.7412720.6708690.6747130.73814200:02
180.7261301.0619520.6793480.7655250.6973140.7030850.77744000:02
190.6797031.0825350.6521740.7312170.6768010.6817690.76013500:02
200.6319091.1246570.6304350.6913230.6588890.6612130.76334900:02
210.5955461.2336540.6467390.7164280.6706110.6771340.75793200:02
220.5650241.1661380.6413040.7147760.6672920.6719920.77749500:02
230.5409541.0803810.6630430.7198200.6991010.7016830.79547900:02
240.5011211.1157210.6576090.7162930.6945370.6971850.77857800:02
250.4673461.1352940.6576090.7097720.6817980.6855160.77219100:02
260.4378631.1499620.6630430.7139990.6863620.6905540.77195000:02
270.4132971.1489190.6739130.7287230.7022290.7066000.77642900:02
280.3952441.1581000.6739130.7301260.7033280.7077280.77339900:02
290.3778191.1399860.6793480.7352280.7080900.7125540.78385800:02
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Better model found at epoch 0 with accuracy value: 0.21739129722118378.\n", "Better model found at epoch 1 with accuracy value: 0.2554347813129425.\n", "Better model found at epoch 2 with accuracy value: 0.375.\n", "Better model found at epoch 3 with accuracy value: 0.5271739363670349.\n", "Better model found at epoch 5 with accuracy value: 0.570652186870575.\n", "Better model found at epoch 10 with accuracy value: 0.5760869383811951.\n", "Better model found at epoch 11 with accuracy value: 0.592391312122345.\n", "Better model found at epoch 12 with accuracy value: 0.614130437374115.\n", "Better model found at epoch 14 with accuracy value: 0.635869562625885.\n", "Better model found at epoch 17 with accuracy value: 0.6521739363670349.\n", "Better model found at epoch 18 with accuracy value: 0.679347813129425.\n" ] } ], "source": [ "learner.fit_one_cycle(30, max_lr=slice(5e-04), callbacks=model_callback(learner, \"best-base-vgg19-herlev-multiclass-fold1\"))\n", "learner.save(\"last-base-vgg19-herlev-multiclass-fold1\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Fold-2" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "ImageDataBunch;\n", "\n", "Train: LabelList (733 items)\n", "x: ImageList\n", "Image (3, 64, 64),Image (3, 64, 64),Image (3, 64, 64),Image (3, 64, 64),Image (3, 64, 64)\n", "y: CategoryList\n", "abnormal_moderate-dysplastic,abnormal_moderate-dysplastic,abnormal_moderate-dysplastic,abnormal_moderate-dysplastic,abnormal_moderate-dysplastic\n", "Path: ../../../Dataset/Herlev Dataset;\n", "\n", "Valid: LabelList (184 items)\n", "x: ImageList\n", "Image (3, 64, 64),Image (3, 64, 64),Image (3, 64, 64),Image (3, 64, 64),Image (3, 64, 64)\n", "y: CategoryList\n", "abnormal_moderate-dysplastic,abnormal_moderate-dysplastic,abnormal_moderate-dysplastic,abnormal_moderate-dysplastic,abnormal_moderate-dysplastic\n", "Path: ../../../Dataset/Herlev Dataset;\n", "\n", "Test: None" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fold_idxs = idxs[1]\n", "fold_data = (ImageList.from_folder(data_path)\n", " .split_by_idxs(fold_idxs[0], fold_idxs[1])\n", " .label_from_folder()\n", " .transform(tfms, size=64)\n", " .databunch(bs=64)\n", " .normalize(imagenet_stats))\n", "fold_data" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "
\n", " \n", " \n", " 60.00% [6/10 00:09<00:06]\n", "
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
epochtrain_lossvalid_lossaccuracyprecisionrecallf_betakappa_scoretime
00.628175#na#00:01
10.638794#na#00:01
20.605542#na#00:01
30.589290#na#00:01
40.636293#na#00:01
51.020105#na#00:01

\n", "\n", "

\n", " \n", " \n", " 63.64% [7/11 00:01<00:00 1.9460]\n", "
\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "LR Finder is complete, type {learner_name}.recorder.plot() to see the graph.\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "learner.load(\"best-base-vgg19-herlev-multiclass-fold1\")\n", "learner.data = fold_data\n", "learner = to_fp16(learner)\n", "learner.lr_find()\n", "learner.recorder.plot()" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
epochtrain_lossvalid_lossaccuracyprecisionrecallf_betakappa_scoretime
00.6315990.3853920.8532610.8788300.8703920.8690190.91719500:02
10.6014210.3708120.8641300.8918590.8864570.8852600.93178200:02
20.5866460.3696560.8750000.8917320.8917010.8909990.93937300:02
30.5671610.3695210.8641300.8850220.8827160.8826620.93750500:02
40.5509710.3745980.8586960.8829630.8881730.8862440.91512900:02
50.5422310.3986640.8478260.8695460.8751730.8730980.91517800:02
60.5322900.4745130.8206520.8547190.8465570.8461330.88605000:02
70.5145580.4202540.8641300.8915880.8891700.8889370.90060500:02
80.5061130.5936780.7826090.8312240.8047980.7988070.90891600:02
90.5069980.4575690.8206520.8532310.8540770.8536400.88318600:02
100.4942370.5570470.8152170.8542460.8376270.8393510.88548600:02
110.4905790.7374870.7663040.8156290.7708270.7708680.82344500:02
120.4861570.6452680.7717390.8078580.8092280.8073700.86677200:02
130.4783810.5776970.7934780.8203770.8321070.8275000.87015900:02
140.4599800.5211200.8152170.8513350.8492160.8478350.89764100:02
150.4350710.5975840.7826090.8127450.8119940.8113320.84551300:02
160.4102450.6239580.8097830.8393020.8381030.8347860.89738600:02
170.3910180.6596300.8097830.8464200.8320850.8317030.85875200:02
180.3720280.5880390.8097830.8393470.8312990.8311050.86244400:02
190.3553290.5819980.8315220.8682000.8595380.8581720.89544700:02
200.3427320.5169600.8152170.8535070.8480330.8487550.88021700:02
210.3162090.4898120.8423910.8700810.8678430.8679040.88873100:02
220.2991520.5568160.8152170.8434870.8411640.8404920.88422000:02
230.2855530.5210550.8369570.8655600.8638180.8632960.88689100:02
240.2733920.5391320.8423910.8691150.8674810.8670680.88996000:02
250.2584340.5484490.8315220.8599810.8586940.8584440.89025900:02
260.2354380.5575260.8315220.8600650.8586940.8582330.88834200:02
270.2308380.5532170.8315220.8600650.8586940.8582330.88834200:02
280.2226880.5469790.8315220.8600650.8586940.8582330.88834200:02
290.2147190.5488100.8260870.8559080.8550310.8544380.88752500:02
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Better model found at epoch 0 with accuracy value: 0.85326087474823.\n", "Better model found at epoch 1 with accuracy value: 0.864130437374115.\n", "Better model found at epoch 2 with accuracy value: 0.875.\n" ] } ], "source": [ "learner.fit_one_cycle(30, max_lr=slice(2e-04), callbacks=model_callback(learner, \"best-base-vgg19-herlev-multiclass-fold2\"))\n", "learner.save(\"last-base-vgg19-herlev-multiclass-fold2\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Fold-3" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "ImageDataBunch;\n", "\n", "Train: LabelList (734 items)\n", "x: ImageList\n", "Image (3, 64, 64),Image (3, 64, 64),Image (3, 64, 64),Image (3, 64, 64),Image (3, 64, 64)\n", "y: CategoryList\n", "abnormal_moderate-dysplastic,abnormal_moderate-dysplastic,abnormal_moderate-dysplastic,abnormal_moderate-dysplastic,abnormal_moderate-dysplastic\n", "Path: ../../../Dataset/Herlev Dataset;\n", "\n", "Valid: LabelList (183 items)\n", "x: ImageList\n", "Image (3, 64, 64),Image (3, 64, 64),Image (3, 64, 64),Image (3, 64, 64),Image (3, 64, 64)\n", "y: CategoryList\n", "abnormal_moderate-dysplastic,abnormal_moderate-dysplastic,abnormal_moderate-dysplastic,abnormal_moderate-dysplastic,abnormal_moderate-dysplastic\n", "Path: ../../../Dataset/Herlev Dataset;\n", "\n", "Test: None" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fold_idxs = idxs[2]\n", "fold_data = (ImageList.from_folder(data_path)\n", " .split_by_idxs(fold_idxs[0], fold_idxs[1])\n", " .label_from_folder()\n", " .transform(tfms, size=64)\n", " .databunch(bs=64)\n", " .normalize(imagenet_stats))\n", "fold_data" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "
\n", " \n", " \n", " 70.00% [7/10 00:10<00:04]\n", "
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
epochtrain_lossvalid_lossaccuracyprecisionrecallf_betakappa_scoretime
00.574042#na#00:01
10.579885#na#00:01
20.567901#na#00:01
30.548423#na#00:01
40.599344#na#00:01
51.147401#na#00:01
62.006556#na#00:01

\n", "\n", "

\n", " \n", " \n", " 0.00% [0/11 00:00<00:00]\n", "
\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "LR Finder is complete, type {learner_name}.recorder.plot() to see the graph.\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "learner.load(\"best-base-vgg19-herlev-multiclass-fold2\")\n", "learner.data = fold_data\n", "learner = to_fp16(learner)\n", "learner.lr_find()\n", "learner.recorder.plot()" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
epochtrain_lossvalid_lossaccuracyprecisionrecallf_betakappa_scoretime
00.5833450.3006230.8961750.9110830.9203750.9172480.93872200:02
10.5787980.3007000.8852460.9009300.9106870.9070000.92434100:02
20.5536890.2858910.9125680.9221370.9348250.9305680.94513900:02
30.5422990.2808430.9016390.9134000.9239460.9203320.93380600:02
40.5311920.2800940.8961750.9142240.9206080.9178030.94594500:02
50.5226440.3092430.8961750.9114060.9258620.9194850.92415300:02
60.5326910.3788210.8524590.8782280.8877390.8828610.91064300:02
70.5240340.4231830.8306010.8486370.8720070.8610370.87766500:02
80.5119640.3724470.8743170.8957050.9091950.9043510.91694000:02
90.5030960.6177250.7431690.7802340.7883290.7780140.83588600:02
100.4978820.4964290.8251370.8569620.8512730.8507260.86954100:02
110.4813180.5668540.7868850.8155640.8275110.8210450.87297400:02
120.4700610.4824150.8306010.8533710.8580160.8537240.87562900:02
130.4556130.4144270.8633880.8897430.8784630.8795740.89606700:02
140.4355510.6324210.7868850.8389010.8182080.8148960.84531100:02
150.4269020.5149160.8251370.8516120.8588610.8559920.86543300:02
160.4151480.4904860.8142080.8390260.8531890.8486960.86236300:02
170.4053470.4669120.8469950.8711490.8856190.8813370.88350000:02
180.3893150.5190650.8306010.8579920.8746720.8666830.86981000:02
190.3703400.4370820.8524590.8766260.8883000.8849270.88239100:02
200.3495280.4492590.8633880.8915250.8922210.8917210.87316700:02
210.3296210.4504880.8579240.8769230.8838880.8817770.88752900:02
220.3137270.4994310.8469950.8736780.8802270.8763910.88784000:02
230.2948790.5206110.8524590.8832020.8897510.8861250.88926100:02
240.2721570.5357120.8524590.8784780.8901480.8858590.88543000:02
250.2583010.5368250.8579240.8831910.8947460.8904140.90087300:02
260.2481670.5169070.8524590.8776360.8886290.8852730.88690800:02
270.2391350.5058310.8743170.8977850.9068140.9037960.89687200:02
280.2304160.5066080.8579240.8822740.8933910.8898200.89489500:02
290.2203290.5063300.8579240.8822740.8933910.8898200.89489500:02
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Better model found at epoch 0 with accuracy value: 0.8961748480796814.\n", "Better model found at epoch 2 with accuracy value: 0.9125683307647705.\n" ] } ], "source": [ "learner.fit_one_cycle(30, max_lr=slice(2e-04), callbacks=model_callback(learner, \"best-base-vgg19-herlev-multiclass-fold3\"))\n", "learner.save(\"last-base-vgg19-herlev-multiclass-fold3\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Fold-4" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "ImageDataBunch;\n", "\n", "Train: LabelList (734 items)\n", "x: ImageList\n", "Image (3, 64, 64),Image (3, 64, 64),Image (3, 64, 64),Image (3, 64, 64),Image (3, 64, 64)\n", "y: CategoryList\n", "abnormal_moderate-dysplastic,abnormal_moderate-dysplastic,abnormal_moderate-dysplastic,abnormal_moderate-dysplastic,abnormal_moderate-dysplastic\n", "Path: ../../../Dataset/Herlev Dataset;\n", "\n", "Valid: LabelList (183 items)\n", "x: ImageList\n", "Image (3, 64, 64),Image (3, 64, 64),Image (3, 64, 64),Image (3, 64, 64),Image (3, 64, 64)\n", "y: CategoryList\n", "abnormal_moderate-dysplastic,abnormal_moderate-dysplastic,abnormal_moderate-dysplastic,abnormal_moderate-dysplastic,abnormal_moderate-dysplastic\n", "Path: ../../../Dataset/Herlev Dataset;\n", "\n", "Test: None" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fold_idxs = idxs[3]\n", "fold_data = (ImageList.from_folder(data_path)\n", " .split_by_idxs(fold_idxs[0], fold_idxs[1])\n", " .label_from_folder()\n", " .transform(tfms, size=64)\n", " .databunch(bs=64)\n", " .normalize(imagenet_stats))\n", "fold_data" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "
\n", " \n", " \n", " 70.00% [7/10 00:10<00:04]\n", "
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
epochtrain_lossvalid_lossaccuracyprecisionrecallf_betakappa_scoretime
00.530669#na#00:01
10.530249#na#00:01
20.528439#na#00:01
30.505607#na#00:01
40.567458#na#00:01
50.892130#na#00:01
61.420646#na#00:01

\n", "\n", "

\n", " \n", " \n", " 9.09% [1/11 00:00<00:08 1.9865]\n", "
\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "LR Finder is complete, type {learner_name}.recorder.plot() to see the graph.\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "learner.load(\"best-base-vgg19-herlev-multiclass-fold3\")\n", "learner.data = fold_data\n", "learner = to_fp16(learner)\n", "learner.lr_find()\n", "learner.recorder.plot()" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
epochtrain_lossvalid_lossaccuracyprecisionrecallf_betakappa_scoretime
00.5361520.3225600.8797810.8976830.8987520.8980010.94886100:02
10.5135990.3212190.8852460.9068110.9097500.9086420.95379800:02
20.5134270.3234710.8743170.8939780.9004590.8982010.93751200:02
30.5029950.3729440.8797810.8951360.8986360.8959660.94006100:02
40.4964660.4334590.8524590.8786120.8772280.8750000.93249200:02
50.5094250.5689770.7759560.8434170.8044770.8025470.90059700:02
60.5024230.4892590.8415300.8777700.8756440.8734420.92432600:02
70.4934891.2952400.6939890.7634440.7386040.7295920.86736000:02
80.5259171.2331510.6994540.7622570.7490640.7325680.85316300:02
90.5583440.6471410.7759560.8219020.8037550.8026530.86564900:02
100.5680810.6361820.7650270.8127340.7908930.7903630.84789200:02
110.5570630.6837790.7322400.7918830.7572990.7613220.86338300:02
120.5496050.7031700.7814210.8382940.8165760.8155820.88362900:02
130.5263180.6905410.7595630.7960370.7840520.7815910.88548600:02
140.5040460.7540850.7595630.8146830.8025290.8003320.87529700:02
150.4901150.6621570.7814210.8063540.8092010.8054460.86473800:02
160.4846520.5802470.8087430.8310550.8393890.8341840.89401300:02
170.4750270.6079970.7923500.8411030.8203590.8219630.90704700:02
180.4452510.5425580.7923500.8124230.8150090.8119760.90405700:02
190.4255860.5483450.7923500.8221270.8305870.8249370.90755600:02
200.4049750.5271040.8142080.8483390.8450580.8443130.92363400:02
210.3745780.6452000.7759560.7984700.8100390.8062030.89451000:02
220.3478680.6195230.8196720.8479470.8444260.8440840.91802600:02
230.3221640.5834750.8142080.8437830.8405770.8405980.92522300:02
240.3079470.5928260.8032790.8284700.8297670.8283390.91799300:02
250.2817210.6025040.8032790.8306390.8284120.8272260.91774500:02
260.2633210.6020410.8087430.8408430.8379360.8368700.91897300:02
270.2447430.6005390.7978140.8296830.8325920.8306240.91734700:02
280.2278690.6012170.8087430.8400060.8405280.8381860.91923800:02
290.2209390.6022710.8032790.8381720.8326130.8322150.91801500:02
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Better model found at epoch 0 with accuracy value: 0.8797814249992371.\n", "Better model found at epoch 1 with accuracy value: 0.8852459192276001.\n" ] } ], "source": [ "learner.fit_one_cycle(30, max_lr=slice(3.2e-04), callbacks=model_callback(learner, \"best-base-vgg19-herlev-multiclass-fold4\"))\n", "learner.save(\"last-base-vgg19-herlev-multiclass-fold4\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Fold-5" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "ImageDataBunch;\n", "\n", "Train: LabelList (734 items)\n", "x: ImageList\n", "Image (3, 64, 64),Image (3, 64, 64),Image (3, 64, 64),Image (3, 64, 64),Image (3, 64, 64)\n", "y: CategoryList\n", "abnormal_moderate-dysplastic,abnormal_moderate-dysplastic,abnormal_moderate-dysplastic,abnormal_moderate-dysplastic,abnormal_moderate-dysplastic\n", "Path: ../../../Dataset/Herlev Dataset;\n", "\n", "Valid: LabelList (183 items)\n", "x: ImageList\n", "Image (3, 64, 64),Image (3, 64, 64),Image (3, 64, 64),Image (3, 64, 64),Image (3, 64, 64)\n", "y: CategoryList\n", "abnormal_moderate-dysplastic,abnormal_moderate-dysplastic,abnormal_moderate-dysplastic,abnormal_moderate-dysplastic,abnormal_moderate-dysplastic\n", "Path: ../../../Dataset/Herlev Dataset;\n", "\n", "Test: None" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fold_idxs = idxs[4]\n", "fold_data = (ImageList.from_folder(data_path)\n", " .split_by_idxs(fold_idxs[0], fold_idxs[1])\n", " .label_from_folder()\n", " .transform(tfms, size=64)\n", " .databunch(bs=64)\n", " .normalize(imagenet_stats))\n", "fold_data" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "
\n", " \n", " \n", " 60.00% [6/10 00:09<00:06]\n", "
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
epochtrain_lossvalid_lossaccuracyprecisionrecallf_betakappa_scoretime
00.498030#na#00:01
10.492233#na#00:01
20.500634#na#00:01
30.496956#na#00:01
40.555213#na#00:01
51.143389#na#00:01

\n", "\n", "

\n", " \n", " \n", " 36.36% [4/11 00:00<00:01 1.5185]\n", "
\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "LR Finder is complete, type {learner_name}.recorder.plot() to see the graph.\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "learner.load(\"best-base-vgg19-herlev-multiclass-fold4\")\n", "learner.data = fold_data\n", "learner = to_fp16(learner)\n", "learner.lr_find()\n", "learner.recorder.plot()" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
epochtrain_lossvalid_lossaccuracyprecisionrecallf_betakappa_scoretime
00.5337390.2942320.8961750.9163470.9175170.9165340.93316000:02
10.5157440.2900550.9071040.9250010.9286280.9271800.94728500:02
20.5273750.2928350.9016390.9200870.9214850.9206090.93410200:02
30.5424060.2921410.9071040.9250010.9286280.9271800.94728500:02
40.5232310.2946260.9016390.9200870.9214850.9206090.93410200:02
50.5247400.2958490.9016390.9200870.9214850.9206090.93410200:02
60.5263370.2912830.9071040.9250010.9286280.9271800.94728500:02
70.5142590.2934830.9071040.9250010.9286280.9271800.94728500:02
80.5128580.2971010.9071040.9250010.9286280.9271800.94728500:02
90.5140440.2927970.9016390.9195410.9202220.9199070.93411000:02
100.5095030.2895280.9016390.9200870.9214850.9206090.93410200:02
110.5049080.2914900.9016390.9195410.9202220.9199070.93411000:02
120.5077660.2903280.9016390.9196140.9189590.9189930.93422000:02
130.5150800.2888170.9071040.9237880.9238850.9237910.93494800:02
140.5124990.2956870.9071040.9239440.9251480.9245480.93494000:02
150.5121650.2969360.9016390.9144210.9156250.9148140.93377100:02
160.5063020.2975600.9071040.9239440.9251480.9245480.93494000:02
170.5098340.2954200.9071040.9239440.9251480.9245480.93494000:02
180.5029560.2985210.9071040.9239440.9251480.9245480.93494000:02
190.4971100.2981860.9071040.9239440.9251480.9245480.93494000:02
200.5013510.3021410.9071040.9239440.9251480.9245480.93494000:02
210.4994580.2998330.9071040.9239440.9251480.9245480.93494000:02
220.5055280.2933890.8907100.9116760.9122860.9117500.93222400:02
230.5044840.2918600.8961750.9152660.9152960.9151310.93338300:02
240.4965660.2993660.9016390.9197270.9202220.9198270.93421200:02
250.4943900.2946260.9071040.9239440.9251480.9245480.93494000:02
260.4908040.2967140.9071040.9239440.9251480.9245480.93494000:02
270.4859220.2989900.9071040.9239440.9251480.9245480.93494000:02
280.4902340.2945340.9071040.9239440.9251480.9245480.93494000:02
290.4950910.2928990.9071040.9239440.9251480.9245480.93494000:02
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Better model found at epoch 0 with accuracy value: 0.8961748480796814.\n", "Better model found at epoch 1 with accuracy value: 0.9071038365364075.\n" ] } ], "source": [ "learner.fit_one_cycle(30, max_lr=slice(1.7e-06), callbacks=model_callback(learner, \"best-base-vgg19-herlev-multiclass-fold5\"))\n", "learner.save(\"last-base-vgg19-herlev-multiclass-fold5\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Exporting model" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [], "source": [ "learner.load(\"best-base-vgg19-herlev-multiclass-fold5\")\n", "learner.export(\"best-base-vgg19-herlev-multiclass-5fold.pkl\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Results (save results.csv first)" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " accuracy precision recall f_beta kappa_score\n", "0 0.907104 0.925001 0.928628 0.927180 0.947285\n", "1 0.885246 0.906811 0.909750 0.908642 0.953798\n", "2 0.912568 0.922137 0.934825 0.930568 0.945139\n", "3 0.875000 0.891732 0.891701 0.890999 0.939373\n", "4 0.679348 0.765525 0.697314 0.703085 0.777440\n", "*-**-**-**-**-**-**-**-**-**-*\n", "Results :-\n", "Accuracy : 85.1853 % | 6.9002 %\n", "Precision : 88.2241 % | 4.6686 %\n", "Recall : 87.2444 % | 7.0052 %\n", "F_beta : 87.2095 % | 6.7604 %\n", "Kappa_score : 91.2607 % | 5.4067 %\n" ] } ], "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import pandas as pd\n", "\n", "def compute_results(fname):\n", " df = pd.read_csv(fname)\n", " print(df)\n", " print(\"*-*\" * 10)\n", " print(\"Results :-\")\n", " mean_df = np.mean(df, axis=0)\n", " mean_error_df = np.mean(np.abs(mean_df - df), axis=0)\n", " for col, mean, error in zip(list(df.columns), list(mean_df.values), list(mean_error_df.values)):\n", " print(f\"{col.capitalize()} : {mean * 100:.4f} % | { error * 100:.4f} %\")\n", "\n", "compute_results(\"results.csv\")" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "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.6.9" } }, "nbformat": 4, "nbformat_minor": 4 }