{ "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", "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/Sipakmed Dataset/wsi_dataset/train'),\n", " PosixPath('../../../Dataset/Sipakmed Dataset/wsi_dataset/test')]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "path = Path(\".\")\n", "data_path = path / \"..\" / \"..\" / \"..\" / \"Dataset\" / \"Sipakmed Dataset\" / \"wsi_dataset\"\n", "data_path.ls()" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "LabelLists;\n", "\n", "Train: LabelList (966 items)\n", "x: ImageList\n", "Image (3, 1536, 2048),Image (3, 1536, 2048),Image (3, 1536, 2048),Image (3, 1536, 2048),Image (3, 1536, 2048)\n", "y: CategoryList\n", "normal_Superficial-Intermediate,normal_Superficial-Intermediate,normal_Superficial-Intermediate,normal_Superficial-Intermediate,normal_Superficial-Intermediate\n", "Path: ../../../Dataset/Sipakmed Dataset/wsi_dataset/train;\n", "\n", "Valid: LabelList (0 items)\n", "x: ImageList\n", "\n", "y: CategoryList\n", "\n", "Path: ../../../Dataset/Sipakmed Dataset/wsi_dataset/train;\n", "\n", "Test: None" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data_init = (ImageList.from_folder(data_path / \"train\")\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=60.0, max_zoom=1.0)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "def model_callback(model, model_name):\n", " return [SaveModelCallback(model, every=\"improvement\", monitor=\"accuracy\", name=model_name)]" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[ .new_type at 0x7f3ff0523400>>,\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": 8, "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": 9, "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": 10, "metadata": {}, "outputs": [], "source": [ "def get_fold_data(fold_idxs, img_size, bs=16):\n", " return (ImageList.from_folder(data_path / \"train\")\n", " .split_by_idxs(fold_idxs[0], fold_idxs[1])\n", " .label_from_folder()\n", " .transform(tfms, size=img_size)\n", " .databunch(bs=bs)\n", " .normalize(imagenet_stats))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Fold-1" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "ImageDataBunch;\n", "\n", "Train: LabelList (772 items)\n", "x: ImageList\n", "Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224)\n", "y: CategoryList\n", "normal_Superficial-Intermediate,normal_Superficial-Intermediate,normal_Superficial-Intermediate,normal_Superficial-Intermediate,normal_Superficial-Intermediate\n", "Path: ../../../Dataset/Sipakmed Dataset/wsi_dataset/train;\n", "\n", "Valid: LabelList (194 items)\n", "x: ImageList\n", "Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224)\n", "y: CategoryList\n", "normal_Superficial-Intermediate,normal_Superficial-Intermediate,normal_Superficial-Intermediate,normal_Superficial-Intermediate,normal_Superficial-Intermediate\n", "Path: ../../../Dataset/Sipakmed Dataset/wsi_dataset/train;\n", "\n", "Test: None" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fold_data = get_fold_data(idxs[0], img_size=224, bs=16)\n", "fold_data" ] }, { "cell_type": "code", "execution_count": 12, "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": 20, "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=25088, 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=5, bias=True)\n", ")" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model_cadene.last_linear = torch.nn.Linear(model_cadene.last_linear.in_features, int(fold_data.c))\n", "model_cadene.input_size = [3, 224, 224]\n", "model_cadene" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Learner(data=ImageDataBunch;\n", "\n", "Train: LabelList (772 items)\n", "x: ImageList\n", "Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224)\n", "y: CategoryList\n", "normal_Superficial-Intermediate,normal_Superficial-Intermediate,normal_Superficial-Intermediate,normal_Superficial-Intermediate,normal_Superficial-Intermediate\n", "Path: ../../../Dataset/Sipakmed Dataset/wsi_dataset/train;\n", "\n", "Valid: LabelList (194 items)\n", "x: ImageList\n", "Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224)\n", "y: CategoryList\n", "normal_Superficial-Intermediate,normal_Superficial-Intermediate,normal_Superficial-Intermediate,normal_Superficial-Intermediate,normal_Superficial-Intermediate\n", "Path: ../../../Dataset/Sipakmed Dataset/wsi_dataset/train;\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=25088, 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=5, 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/Sipakmed Dataset/wsi_dataset/train'), model_dir='models', callback_fns=[functools.partial(, add_time=True, silent=False)], callbacks=[MixedPrecision\n", "learn: Learner(data=ImageDataBunch;\n", "\n", "Train: LabelList (772 items)\n", "x: ImageList\n", "Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224)\n", "y: CategoryList\n", "normal_Superficial-Intermediate,normal_Superficial-Intermediate,normal_Superficial-Intermediate,normal_Superficial-Intermediate,normal_Superficial-Intermediate\n", "Path: ../../../Dataset/Sipakmed Dataset/wsi_dataset/train;\n", "\n", "Valid: LabelList (194 items)\n", "x: ImageList\n", "Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224)\n", "y: CategoryList\n", "normal_Superficial-Intermediate,normal_Superficial-Intermediate,normal_Superficial-Intermediate,normal_Superficial-Intermediate,normal_Superficial-Intermediate\n", "Path: ../../../Dataset/Sipakmed Dataset/wsi_dataset/train;\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=25088, 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=5, 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/Sipakmed Dataset/wsi_dataset/train'), 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=25088, 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=5, 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=25088, 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=5, bias=True)\n", ")], add_time=True, silent=False)" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "learner = Learner(fold_data, model_cadene, metrics=our_metrics).to_fp16()\n", "learner" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "
\n", " \n", " \n", " 33.33% [1/3 02:25<04:50]\n", "
\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.379868#na#02:25

\n", "\n", "

\n", " \n", " \n", " 50.00% [24/48 00:07<00:07 4.9208]\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": 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
01.3261350.9256060.7422680.8350600.6870370.6922220.74250400:51
10.8413760.2249580.9432990.9537620.9537430.9521270.97197800:15
20.5097050.2320860.9278350.9386930.9248950.9261100.93238000:16
30.4255420.2444110.9226800.9220640.9357920.9296880.91537400:15
40.3645860.3573870.9020620.9308560.9052530.9081920.89767400:15
50.4321601.0167210.6237110.7930740.6506900.6430530.64301000:15
60.4278920.3425390.8969070.9201360.8882940.8922890.89992300:15
70.4779540.7494620.7268040.8007080.7539550.7375810.82905900:16
80.5242080.6182970.7731960.7999270.8114260.7798130.68408700:15
90.5797020.5204710.8608250.9047620.8485160.8536960.87607800:16
100.4874330.5693510.8453610.8719300.8483970.8470560.86031800:15
110.4279580.3414100.8917530.9125500.9042400.9037340.93864000:15
120.4180220.1324670.9639180.9731870.9568270.9592130.95809000:15
130.3883780.5548030.8402060.8867590.8580300.8482140.86624600:16
140.3402260.2948160.9226800.9431500.9117150.9161510.91857900:15
150.3666980.3621390.8865980.8924910.9038290.8980650.83448800:15
160.3402730.1789170.9587630.9699110.9492230.9525800.94794700:15
170.2786860.1605220.9536080.9652380.9513910.9531930.95713300:15
180.2618290.2027940.9226800.9404030.9317720.9320590.96274300:15
190.2109960.1440430.9587630.9711500.9485650.9519890.96662600:15
200.1789430.1191860.9690720.9764180.9675940.9688850.97419700:15
210.1657570.1348370.9793810.9834090.9793530.9801050.98181200:16
220.1430180.1054930.9742270.9791570.9702620.9719010.96822200:15
230.1257030.1094690.9690720.9752730.9708420.9715680.97884500:15
240.1233260.0845200.9742270.9755310.9750970.9751590.96840800:16
250.1038160.0912940.9793810.9834090.9793530.9801050.98181200:15
260.0687330.0903450.9793810.9834090.9793530.9801050.98181200:15
270.0615690.0973350.9742270.9799020.9716600.9730740.97555300:16
280.0495040.1014740.9742270.9799020.9716600.9730740.97555300:15
290.0490520.0909510.9793810.9834090.9793530.9801050.98181200:15
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Better model found at epoch 0 with accuracy value: 0.7422680258750916.\n", "Better model found at epoch 1 with accuracy value: 0.9432989954948425.\n", "Better model found at epoch 12 with accuracy value: 0.9639175534248352.\n", "Better model found at epoch 20 with accuracy value: 0.969072163105011.\n", "Better model found at epoch 21 with accuracy value: 0.9793814420700073.\n" ] } ], "source": [ "learner.fit_one_cycle(30, max_lr=slice(3e-04), callbacks=model_callback(learner, \"best-base-vgg19-sipak-multiclass-fold1\"))\n", "learner.save(\"last-base-vgg19-sipak-multiclass-fold1\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Fold-2" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "ImageDataBunch;\n", "\n", "Train: LabelList (773 items)\n", "x: ImageList\n", "Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224)\n", "y: CategoryList\n", "normal_Superficial-Intermediate,normal_Superficial-Intermediate,normal_Superficial-Intermediate,normal_Superficial-Intermediate,normal_Superficial-Intermediate\n", "Path: ../../../Dataset/Sipakmed Dataset/wsi_dataset/train;\n", "\n", "Valid: LabelList (193 items)\n", "x: ImageList\n", "Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224)\n", "y: CategoryList\n", "normal_Superficial-Intermediate,normal_Superficial-Intermediate,normal_Superficial-Intermediate,normal_Superficial-Intermediate,normal_Superficial-Intermediate\n", "Path: ../../../Dataset/Sipakmed Dataset/wsi_dataset/train;\n", "\n", "Test: None" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fold_data = get_fold_data(idxs[1], img_size=224, bs=16)\n", "fold_data" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "
\n", " \n", " \n", " 33.33% [1/3 00:10<00:21]\n", "
\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.096537#na#00:10

\n", "\n", "

\n", " \n", " \n", " 8.33% [4/48 00:05<00:57 0.1379]\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-sipak-multiclass-fold1\")\n", "learner = to_fp16(learner)\n", "learner.data = fold_data\n", "learner = to_fp16(learner)\n", "learner.lr_find()\n", "learner.recorder.plot()" ] }, { "cell_type": "code", "execution_count": 27, "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.1293820.0352470.9844560.9876150.9884260.9882370.99080100:15
10.1096510.0448910.9792750.9835180.9838800.9837840.98922900:16
20.1159380.0578520.9585490.9667080.9681400.9676820.98321200:16
30.1033640.0613850.9689120.9756080.9760100.9758360.99077200:15
40.2223870.3878620.9015540.9215410.8917860.8945730.89555700:15
50.2200080.1598930.9533680.9588570.9639730.9625170.97292800:15
60.4137550.5846950.8704660.8575850.8994070.8820950.88628200:16
70.3431120.4533230.8756480.9189160.8493000.8552890.82876100:15
80.3810080.6150560.8652850.9034600.8768840.8758760.84219100:15
90.3591210.5341330.8756480.9081730.8901840.8880890.90067700:15
100.3002610.4262880.8963730.9074740.9107710.9075410.87365400:16
110.2666371.2729510.7512950.7843530.7784440.7449280.55379200:15
120.3498210.2789310.9119170.9399010.9208720.9197370.95372700:15
130.2968720.2277280.9015540.9240290.9063490.9076620.90030000:15
140.2621090.1791720.9274610.9496680.9401520.9400080.96427700:16
150.1745760.1383720.9637310.9712570.9671680.9679210.97983100:16
160.1724900.1976850.9430050.9577120.9429190.9450450.96031200:17
170.1656870.1505630.9430050.9548080.9479730.9488570.95689600:15
180.1531600.1283270.9585490.9683430.9600100.9614180.97811000:15
190.1214210.2249600.9430050.9545600.9432140.9447670.94101800:15
200.1095830.1654480.9481870.9611610.9474650.9495220.94938700:15
210.1085200.1319630.9585490.9664440.9680560.9673990.98787100:16
220.1027030.1170220.9585490.9681870.9629170.9636920.98296900:15
230.0823650.1329050.9585490.9673770.9595470.9608770.97040100:15
240.0653390.1278170.9637310.9712040.9675470.9682110.98454200:16
250.0644890.0994520.9637310.9712040.9675470.9682110.98454200:16
260.0473130.1105280.9585490.9670370.9637590.9640040.98317800:16
270.0537520.1144180.9585490.9675000.9630020.9638390.97826900:16
280.0431620.1069420.9585490.9675000.9630020.9638390.97826900:16
290.0393860.1068620.9637310.9712040.9675470.9682110.98454200:15
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Better model found at epoch 0 with accuracy value: 0.984455943107605.\n" ] } ], "source": [ "learner.fit_one_cycle(30, max_lr=slice(3e-04), callbacks=model_callback(learner, \"best-base-vgg19-sipak-multiclass-fold2\"))\n", "learner.save(\"last-base-vgg19-sipak-multiclass-fold2\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Fold-3" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "ImageDataBunch;\n", "\n", "Train: LabelList (773 items)\n", "x: ImageList\n", "Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224)\n", "y: CategoryList\n", "normal_Superficial-Intermediate,normal_Superficial-Intermediate,normal_Superficial-Intermediate,normal_Superficial-Intermediate,normal_Superficial-Intermediate\n", "Path: ../../../Dataset/Sipakmed Dataset/wsi_dataset/train;\n", "\n", "Valid: LabelList (193 items)\n", "x: ImageList\n", "Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224)\n", "y: CategoryList\n", "normal_Superficial-Intermediate,normal_Superficial-Intermediate,normal_Superficial-Intermediate,normal_Superficial-Intermediate,normal_Superficial-Intermediate\n", "Path: ../../../Dataset/Sipakmed Dataset/wsi_dataset/train;\n", "\n", "Test: None" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fold_data = get_fold_data(idxs[2], img_size=224, bs=16)\n", "fold_data" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "
\n", " \n", " \n", " 33.33% [1/3 00:11<00:22]\n", "
\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.109072#na#00:11

\n", "\n", "

\n", " \n", " \n", " 20.83% [10/48 00:05<00:20 0.3439]\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-sipak-multiclass-fold2\")\n", "learner = to_fp16(learner)\n", "learner.data = fold_data\n", "learner = to_fp16(learner)\n", "learner.lr_find()\n", "learner.recorder.plot()" ] }, { "cell_type": "code", "execution_count": 32, "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.1321230.0447150.9792750.9840650.9838640.9838230.99382900:16
10.1210760.0445120.9792750.9840650.9838640.9838230.99382900:15
20.1089930.0461520.9792750.9840650.9838640.9838230.99382900:15
30.1176790.0428300.9792750.9840650.9838640.9838230.99382900:15
40.1016330.0466220.9740930.9796840.9802270.9800010.98770900:16
50.0997200.0455790.9740930.9796840.9802270.9800010.98770900:15
60.1028660.0512350.9740930.9796840.9802270.9800010.98770900:16
70.1094790.0494720.9792750.9840280.9843940.9842910.98920700:15
80.1071940.0607440.9740930.9796840.9802270.9800010.98770900:15
90.1029470.0506090.9792750.9840280.9843940.9842910.98920700:14
100.0960010.0480130.9792750.9840280.9843940.9842910.98920700:17
110.1085530.0413950.9844560.9886020.9880300.9881210.99535500:15
120.0842820.0506130.9792750.9840280.9843940.9842910.98920700:15
130.0878990.0518920.9792750.9840280.9843940.9842910.98920700:15
140.0680400.0462700.9844560.9886020.9880300.9881210.99535500:16
150.0726200.0472910.9844560.9886020.9880300.9881210.99535500:16
160.0643060.0502960.9792750.9840280.9843940.9842910.98920700:16
170.0964240.0632650.9792750.9840280.9843940.9842910.98920700:15
180.0874540.0541440.9792750.9840280.9843940.9842910.98920700:15
190.0772500.0616360.9792750.9840280.9843940.9842910.98920700:16
200.0747250.0545070.9792750.9840280.9843940.9842910.98920700:16
210.0755110.0563130.9792750.9840280.9843940.9842910.98920700:15
220.0794730.0551900.9844560.9886020.9880300.9881210.99535500:14
230.0807630.0591700.9792750.9840280.9843940.9842910.98920700:15
240.0690020.0570450.9792750.9840280.9843940.9842910.98920700:16
250.0935400.0552380.9792750.9840280.9843940.9842910.98920700:17
260.0860530.0554800.9792750.9840280.9843940.9842910.98920700:16
270.0802260.0654780.9792750.9840280.9843940.9842910.98920700:15
280.0600320.0529790.9844560.9886020.9880300.9881210.99535500:15
290.0691170.0526700.9792750.9840280.9843940.9842910.98920700:16
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Better model found at epoch 0 with accuracy value: 0.9792746305465698.\n", "Better model found at epoch 11 with accuracy value: 0.984455943107605.\n" ] } ], "source": [ "learner.fit_one_cycle(30, max_lr=slice(3e-06), callbacks=model_callback(learner, \"best-base-vgg19-sipak-multiclass-fold3\"))\n", "learner.save(\"last-base-vgg19-sipak-multiclass-fold3\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Fold-4" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "ImageDataBunch;\n", "\n", "Train: LabelList (773 items)\n", "x: ImageList\n", "Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224)\n", "y: CategoryList\n", "normal_Superficial-Intermediate,normal_Superficial-Intermediate,normal_Superficial-Intermediate,normal_Superficial-Intermediate,normal_Superficial-Intermediate\n", "Path: ../../../Dataset/Sipakmed Dataset/wsi_dataset/train;\n", "\n", "Valid: LabelList (193 items)\n", "x: ImageList\n", "Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224)\n", "y: CategoryList\n", "normal_Superficial-Intermediate,normal_Superficial-Intermediate,normal_Superficial-Intermediate,normal_Superficial-Intermediate,normal_Superficial-Intermediate\n", "Path: ../../../Dataset/Sipakmed Dataset/wsi_dataset/train;\n", "\n", "Test: None" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fold_data = get_fold_data(idxs[3], img_size=224, bs=16)\n", "fold_data" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "
\n", " \n", " \n", " 33.33% [1/3 00:12<00:25]\n", "
\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.115333#na#00:12

\n", "\n", "

\n", " \n", " \n", " 12.50% [6/48 00:05<00:38 0.1687]\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-sipak-multiclass-fold3\")\n", "learner = to_fp16(learner)\n", "learner.data = fold_data\n", "learner = to_fp16(learner)\n", "learner.lr_find()\n", "learner.recorder.plot()" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "
\n", " \n", " \n", " 53.33% [16/30 04:17<03:45]\n", "
\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \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.0890920.0430650.9948190.9956520.9962960.9961410.99388500:15
10.0991290.0419580.9844560.9877860.9879630.9878110.99085500:16
20.0893360.0370470.9896370.9919480.9921300.9920640.99235200:15
30.0863700.0428270.9896370.9919480.9921300.9920640.99235200:15
40.0850140.0383700.9896370.9919480.9921300.9920640.99235200:16
50.1004220.0347730.9896370.9919480.9921300.9920640.99235200:15
60.0813290.0397540.9896370.9919480.9921300.9920640.99235200:15
70.0839440.0404690.9896370.9919480.9921300.9920640.99235200:15
80.0848950.0456780.9844560.9877860.9879630.9878110.99085500:16
90.0878100.0459520.9844560.9877860.9879630.9878110.99085500:16
100.0805010.0361440.9896370.9919480.9921300.9920640.99235200:15
110.0908910.0417430.9948190.9956520.9962960.9961410.99388500:15
120.0842690.0406280.9948190.9956520.9962960.9961410.99388500:15
130.0890640.0403470.9896370.9919480.9921300.9920640.99235200:15
140.0795390.0385490.9896370.9919480.9921300.9920640.99235200:16
150.0833360.0357270.9896370.9919480.9921300.9920640.99235200:17

\n", "\n", "

\n", " \n", " \n", " 0.00% [0/48 00:00<00:00]\n", "
\n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Better model found at epoch 0 with accuracy value: 0.9948186278343201.\n" ] }, { "ename": "KeyboardInterrupt", "evalue": "", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mlearner\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfit_one_cycle\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m30\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmax_lr\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mslice\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m6.5e-07\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcallbacks\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mmodel_callback\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlearner\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"best-base-vgg19-sipak-multiclass-fold4\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0mlearner\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msave\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"last-base-vgg19-sipak-multiclass-fold4\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/.local/lib/python3.6/site-packages/fastai/train.py\u001b[0m in \u001b[0;36mfit_one_cycle\u001b[0;34m(learn, cyc_len, max_lr, moms, div_factor, pct_start, final_div, wd, callbacks, tot_epochs, start_epoch)\u001b[0m\n\u001b[1;32m 21\u001b[0m callbacks.append(OneCycleScheduler(learn, max_lr, moms=moms, div_factor=div_factor, pct_start=pct_start,\n\u001b[1;32m 22\u001b[0m final_div=final_div, tot_epochs=tot_epochs, start_epoch=start_epoch))\n\u001b[0;32m---> 23\u001b[0;31m \u001b[0mlearn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcyc_len\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmax_lr\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mwd\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mwd\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcallbacks\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mcallbacks\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 24\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 25\u001b[0m def fit_fc(learn:Learner, tot_epochs:int=1, lr:float=defaults.lr, moms:Tuple[float,float]=(0.95,0.85), start_pct:float=0.72,\n", "\u001b[0;32m~/.local/lib/python3.6/site-packages/fastai/basic_train.py\u001b[0m in \u001b[0;36mfit\u001b[0;34m(self, epochs, lr, wd, callbacks)\u001b[0m\n\u001b[1;32m 198\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mopt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlr\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mopt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mwd\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mlr\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mwd\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 199\u001b[0m \u001b[0mcallbacks\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mcb\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mcb\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcallback_fns\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mlistify\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdefaults\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mextra_callback_fns\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mlistify\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcallbacks\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 200\u001b[0;31m \u001b[0mfit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mepochs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmetrics\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmetrics\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcallbacks\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcallbacks\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0mcallbacks\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 201\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 202\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mcreate_opt\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlr\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0mFloats\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mwd\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0mFloats\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m0.\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m->\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/.local/lib/python3.6/site-packages/fastai/basic_train.py\u001b[0m in \u001b[0;36mfit\u001b[0;34m(epochs, learn, callbacks, metrics)\u001b[0m\n\u001b[1;32m 97\u001b[0m \u001b[0mcb_handler\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mset_dl\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlearn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtrain_dl\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 98\u001b[0m \u001b[0mcb_handler\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mon_epoch_begin\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 99\u001b[0;31m \u001b[0;32mfor\u001b[0m \u001b[0mxb\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0myb\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mprogress_bar\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlearn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtrain_dl\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mparent\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mpbar\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 100\u001b[0m \u001b[0mxb\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0myb\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcb_handler\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mon_batch_begin\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mxb\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0myb\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 101\u001b[0m \u001b[0mloss\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mloss_batch\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlearn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmodel\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mxb\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0myb\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlearn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mloss_func\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlearn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mopt\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcb_handler\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/.local/lib/python3.6/site-packages/fastprogress/fastprogress.py\u001b[0m in \u001b[0;36m__iter__\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 39\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtotal\u001b[0m \u001b[0;34m!=\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mupdate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 40\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 41\u001b[0;31m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mo\u001b[0m \u001b[0;32min\u001b[0m \u001b[0menumerate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgen\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 42\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mi\u001b[0m \u001b[0;34m>=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtotal\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mbreak\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 43\u001b[0m \u001b[0;32myield\u001b[0m \u001b[0mo\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/.local/lib/python3.6/site-packages/fastai/basic_data.py\u001b[0m in \u001b[0;36m__iter__\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 73\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m__iter__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 74\u001b[0m \u001b[0;34m\"Process and returns items from `DataLoader`.\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 75\u001b[0;31m \u001b[0;32mfor\u001b[0m \u001b[0mb\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdl\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32myield\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mproc_batch\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mb\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 76\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 77\u001b[0m \u001b[0;34m@\u001b[0m\u001b[0mclassmethod\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/.local/lib/python3.6/site-packages/torch/utils/data/dataloader.py\u001b[0m in \u001b[0;36m__next__\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 343\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 344\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m__next__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 345\u001b[0;31m \u001b[0mdata\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_next_data\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 346\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_num_yielded\u001b[0m \u001b[0;34m+=\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 347\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_dataset_kind\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0m_DatasetKind\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mIterable\u001b[0m \u001b[0;32mand\u001b[0m\u001b[0;31m \u001b[0m\u001b[0;31m\\\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/.local/lib/python3.6/site-packages/torch/utils/data/dataloader.py\u001b[0m in \u001b[0;36m_next_data\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 839\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 840\u001b[0m \u001b[0;32massert\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_shutdown\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_tasks_outstanding\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 841\u001b[0;31m \u001b[0midx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdata\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_get_data\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 842\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_tasks_outstanding\u001b[0m \u001b[0;34m-=\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 843\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/.local/lib/python3.6/site-packages/torch/utils/data/dataloader.py\u001b[0m in \u001b[0;36m_get_data\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 796\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_pin_memory\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 797\u001b[0m \u001b[0;32mwhile\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_pin_memory_thread\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mis_alive\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 798\u001b[0;31m \u001b[0msuccess\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdata\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_try_get_data\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 799\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0msuccess\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 800\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mdata\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/.local/lib/python3.6/site-packages/torch/utils/data/dataloader.py\u001b[0m in \u001b[0;36m_try_get_data\u001b[0;34m(self, timeout)\u001b[0m\n\u001b[1;32m 759\u001b[0m \u001b[0;31m# (bool: whether successfully get data, any: data if successful else None)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 760\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 761\u001b[0;31m \u001b[0mdata\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_data_queue\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtimeout\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mtimeout\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 762\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdata\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 763\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mException\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/usr/lib/python3.6/queue.py\u001b[0m in \u001b[0;36mget\u001b[0;34m(self, block, timeout)\u001b[0m\n\u001b[1;32m 171\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mremaining\u001b[0m \u001b[0;34m<=\u001b[0m \u001b[0;36m0.0\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 172\u001b[0m \u001b[0;32mraise\u001b[0m \u001b[0mEmpty\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 173\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnot_empty\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mwait\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mremaining\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 174\u001b[0m \u001b[0mitem\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_get\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 175\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnot_full\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnotify\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/usr/lib/python3.6/threading.py\u001b[0m in \u001b[0;36mwait\u001b[0;34m(self, timeout)\u001b[0m\n\u001b[1;32m 297\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 298\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mtimeout\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 299\u001b[0;31m \u001b[0mgotit\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mwaiter\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0macquire\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtimeout\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 300\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 301\u001b[0m \u001b[0mgotit\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mwaiter\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0macquire\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mKeyboardInterrupt\u001b[0m: " ] } ], "source": [ "learner.fit_one_cycle(30, max_lr=slice(6.5e-07), callbacks=model_callback(learner, \"best-base-vgg19-sipak-multiclass-fold4\"))\n", "learner.save(\"last-base-vgg19-sipak-multiclass-fold4\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Fold-5" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "ImageDataBunch;\n", "\n", "Train: LabelList (773 items)\n", "x: ImageList\n", "Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224)\n", "y: CategoryList\n", "normal_Superficial-Intermediate,normal_Superficial-Intermediate,normal_Superficial-Intermediate,normal_Superficial-Intermediate,normal_Superficial-Intermediate\n", "Path: ../../../Dataset/Sipakmed Dataset/wsi_dataset/train;\n", "\n", "Valid: LabelList (193 items)\n", "x: ImageList\n", "Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224)\n", "y: CategoryList\n", "normal_Superficial-Intermediate,normal_Superficial-Intermediate,normal_Superficial-Intermediate,normal_Superficial-Intermediate,normal_Superficial-Intermediate\n", "Path: ../../../Dataset/Sipakmed Dataset/wsi_dataset/train;\n", "\n", "Test: None" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fold_data = get_fold_data(idxs[4], img_size=224, bs=16)\n", "fold_data" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "
\n", " \n", " \n", " 33.33% [1/3 00:12<00:24]\n", "
\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.096429#na#00:12

\n", "\n", "

\n", " \n", " \n", " 10.42% [5/48 00:04<00:41 0.2137]\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": "iVBORw0KGgoAAAANSUhEUgAAAYgAAAEGCAYAAAB/+QKOAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nO3dd3yV5fn48c+VTRYJkECYCZuAzIiKA7c4sRWtuFut+vWnbbWttcu21vbrqrYqDlRcX/csVZS6xU1YAgnIJiEBcsg8JCfz/v1xzsEQTpKT8ZzxnOv9evEyecZ5rngg17nXdYsxBqWUUqqtqGAHoJRSKjRpglBKKeWTJgillFI+aYJQSinlkyYIpZRSPsUEO4DeMmDAAJOdnR3sMJRSKqysWLHCYYzJ8HXONgkiOzub/Pz8YIehlFJhRUR2tHdOu5iUUkr5pAlCKaWUT5oglFJK+aQJQimllE+aIJRSSvmkCUIppZRPmiCUUkr5pAlCKaXC2Gsrinnhm52WvLYmCKWUCmMvLS/ijZW7LHltTRBKKRXGSqrqyEpLsOS1NUEopVSYamkx7Kl2kdW3jyWvrwlCKaXClMNZT2OzYYi2IJRSSrVWUuUC0BaEUkqpg5VU1gHoGIRSSqmDeRPEYG1BKKWUaq20ykWf2GjSEmMteX1NEEopFaZKPVNcRcSS19cEoZRSYWpXpcuy7iXQBKGUUmGrtLKOrL7WDFCDJgillApLDU0tlDnryUrTFoRSSqlW9lS7MAbLFsmBJgillApLpRYvkgNNEEopFZYOrIHQFoRSSqnWSqo8q6i1BaGUUqq10koXffvEkhQfY9kzNEEopVQYKq2ydooraIJQSqmwVFLpYrCFU1xBE4RSSoWlknBvQYjIHBHZKCKbReQWH+ePE5GVItIkIvPanHtXRCpF5C0rY1RKqXBT19BMZW1j+LYgRCQaWACcDuQC80Ukt81lO4ErgOd9vMTdwKVWxaeUUuHKO4PJyimuYG0LYiaw2Riz1RjTALwIzG19gTFmuzHmW6Cl7c3GmA+AGgvjU0qpsFRaaf0iObA2QQwBilp9X+w51mtE5GoRyReR/LKyst58aaWUClkHWhBhnCAsZ4xZaIzJM8bkZWRkBDscpZQKCO8q6oF94y19jpUJYhcwrNX3Qz3HlFJK9UBppYuMlHjiY6ItfY6VCWI5MEZEckQkDrgQWGzh85RSKiKUVNUx2OIprmBhgjDGNAHXA0uBQuBlY8x6EblNRM4BEJHDRaQYOB94VETWe+8XkWXAK8BJIlIsIqdZFatSSoWT0iqX5QPUANYV8QCMMUuAJW2O3drq6+W4u5583XuslbEppVQ4MsZQUlnHsWMGWP6ssB6kVkqpSFNd10RtQ7PlM5hAE4RSSoWV7xfJaYJQSinVSql3HwiLV1GDJgillAorJZ5V1NrFpJRS6iAllXXERAkZKdYukgNNEEopFVZKq1wMTE0gOkosf5YmCKWUCiMllXWWV3H10gShlFJhJFCL5EAThFJKhY2WFsPuKldAZjCBJoiIUFReS2PzIVtuKKXCjGN/PQ3NLQGZwQSaIGyvoamFU+/7lFv/vS7YoSilesi7UVAgFsmBJgjbczjrqWts5sXlRazbVRXscJRSPXBgkVwAKrmCJgjbczjrATAGbvtPAcaYIEeklOquEm1BqN5UVuNOEBfkDeWb7eUsWbs7yBEppbqrtKqO+Jgo0hNjA/I8TRA2521BXH/CGMYPSuHvSwpxNTYHOSqlVHeUVLoYktYHEesXyYEmCNvztiAyU+O59excdlXW8dinW4MclVKqO0qq6gI2xRU0Qdiew9lASkIMCbHRzBo1gDkTB/HQx1vYXeUKdmhKqS4qrQzcIjnQBGF7Zc56MpK/L+r1uzMm0GwMd767IYhRKaW6qrG5hb01roDsRe2lCcLmymrqGdCq6uPw/olcdUwOb6zaxcqdFUGMTCnVFXuqXbQYyArQDCbQBGF7jjYtCIDrThhNZko8f/lPAS0tOu1VqXBQWhXYKa4AMQF7kgqKspp6jhtzcIJIjo/h5jnj+dUra3hz9S5+OH2oz3sraxt47uudvLh8J8nxseSNSGeG58/Q9MDNpFBKuau4AgHtYtIEYWOuxmZqXE0MSI475NwPpw3h2S+3c8c7Gzht4iCS4r//q7Bj334WfbaNl/OLqWtsZtao/kSJ8PrKYp79agcAmSnx5GWnM314OtNHpBMfE0VlbSMVtQ1U1jZSWdtARW0jlbWNVLsa+cnRORw1qn+gfnSlbMfbgghkF5MmCBvbt78BgAHJh+48FRUl3Hr2RM57+Ase/ngLvzptHCt2VPD4sq0sXb+b6Cjh7CmDueqYkeQOTgWgucWwYXc1K3dUkL+jghU7KjpceJcYF016YhzVrka2O/bz7i+OC8gmJ0rZUWllHSkJMSTHB+7XtiYIG/OugWhva8IZI9I5d+pgFi7byhdbHKzcWUlqQgzXzB7FFbOyGZh6cFM2OkqYOLgvEwf35dKjsgH3wNmqnZUApCfGkpYYR3piLH0TY4mPiQbgrW9LuP75VSxZW8rZUwZb9NMqZW+7PIvkAkkThI05PAnCVwvC6zenj+eDwr2UOev509m5XJA37KDups4MTE1gzqRBHV5zxqQsxmRu4v4PNnHmYVlEaStCqS4rraoLWJE+L00QNlbm7LgFAZDVtw9f/PZEEuNiLOv+iYoSfnbSGG54YRVL1pVy1mRtRSjVVaVVLqYMSwvoMy2d5ioic0Rko4hsFpFbfJw/TkRWikiTiMxrc+5yEdnk+XO5lXHalbcF0d/HIHVrKQmxlo8NnHFYFqMzk7n/g006tVapLnI1NlO+vyGgM5jAwgQhItHAAuB0IBeYLyK5bS7bCVwBPN/m3n7An4AjgJnAn0Qk3apY7arMWU9qQsyBsYBgiva0Ir7b4+SddVpRVqmuCMYaCLC2BTET2GyM2WqMaQBeBOa2vsAYs90Y8y3Qdj/M04D3jDHlxpgK4D1gjoWx2pLDWd9h91KgnXlYFqMykrQVoVQXeddABLIOE1ibIIYARa2+L/Yc67V7ReRqEckXkfyysrJuB2pXjpqGDgeoA83biti4p4Z312srQil/HVgkF8BKrhDmpTaMMQuNMXnGmLyMjIxghxNyykKsBQFw1uTB2opQqou8XUyD7DIGAewChrX6fqjnmNX3Kg9HTX1ItSDg+1bEht01LNVWhFJ+Ka2qY0ByXMDHE61MEMuBMSKSIyJxwIXAYj/vXQqcKiLpnsHpUz3HlJ9cjc3U1DeFXAsC3K2IkRlJ/EtbEUr5paTSFfABarAwQRhjmoDrcf9iLwReNsasF5HbROQcABE5XESKgfOBR0VkvefecuCvuJPMcuA2zzHlpwOrqEOsBQHuVsQNJ45mw+4a/lugrQilOlNSGfhFcmDxQjljzBJgSZtjt7b6ejnu7iNf9y4CFlkZn51596IekNLxGohgOXvyYB74YDP/+mAzp+YO0tXVSnWgtMrF0aMHBPy5YT1Irdr3fQsi8J86/BETHcX1J46msLSa/xbsCXY4SoWsalcjzvqmgM9gAk0QtuVweiq5hmgLAuCcKYPJGeCe0WSMjkUo5UtpZXAWyYEmCNvytiD6J4XeGIRXTHQU158wmoLSapau11aEUr4Ea5EcaIKwLYeznrTEWOJiQvstnjvVPaPprqUbaGxuu6BeKVVSFZxFcqAJwrYcztBbA+FLTHQUvzt9AlvL9vOcZ7c6pdT3SitdREcJmSmaIFQvKaupD8kprr6cNCGTo0f3558fbKKqtjHY4SgVUkqq6hiYEh+U3Rg1QdiUw1nPgBBcJOeLiPCHM3OpqmvkXx9sCnY4SoWUzXudDO2XGJRna4KwqXBqQQBMyErlR3nDeObL7WwtcwY7HKVCwt5qF98WV3HcmMCvgQBNELZU29DE/obmkJ7i6stNp44lPiaK/31nQ7BDUSokfLhhLwAn5w4MyvM1QdiQo8azBiKMWhAAmSkJXHfCaN4r2MMXWxzBDkepoHu/cA9D0vowbmBKUJ6vCcKG/NmLOlRdeUwOQ9L68Ne3CmnWQn4qgtU1NPPZZgen5A5EJDilaDRB2JC3DlM4jUF4JcRGc8vp4yksrebVFUWd36CUTX2+2YGrsYWTJmQGLQZNEDZ0oA5TGLYgAM6anMX04WncvfQ7nPVNwQ5HqaD4YMMekuNjOCKnf9Bi0ARhQ94WRL+k8Bqk9hIR/nhWLg5nPQ9/vDnY4SgVcC0thvcL9zJ7XEZQqyFogrChspp60hNjiY0O37d32vB05k4dzGPLtlFcURvscJQKqLW7qiirqefkIHYvgSYIW3KE4F7U3XHznPEIcNe7G4MdilIB9X7hHqKjhBPGaYJQvczhbAi7Ka6+DEnrw9XHjWTxmhJW7KgIdjhKBcz7hXuZMSKdtMTgdhNrgrChshp7tCAArp09isyUeP76VoHuX60iQnFFLYWl1ZwyITiL41rTBGFD4VLJ1R9J8TH8+rRxrC6q5N9rdgU7HKUs5109HczprV6aIGxmf30TtQ3NtmlBAJw3fSiTh/blznc2Utug016Vvb1XsIeRGUmMzEgOdiiaIOzGO8XVLi0IgKgo4dazctld7eKRj7cEOxylLFPjauSrrfs4OQS6l0AThO18nyDCcw1Ee/Ky+3H2lME8+ulWnfaqwkpZTT17a1x+Xbtsk4PGZqMJQlkj3FdRd+SW08cjglZ7VWHlxpdWc84Dnx/48NaR9wv2kJYYy/ThaQGIrHOaIGymzOmu5BqOdZg6MyStD9ccN4q3vy3lm23lwQ5HKb9s2lvD7moXP39xVYcFKJuaW/ho415OHJdJTIgscg2NKFSvKaupRyR8y2x05trZo8jqm8Btb63Xaa8q5Lkam9lTXc/4QSl8vnkf9733XbvXrtxZSUVtY9D2fvBFE4TNOJz19EuMC5lPIL2tT5y72uu6XdW8uqI42OEo1aHiijoArpk9kgvyhvLgR5v5cMMen9d+ULiH2Gjh2CDtHueLpb9FRGSOiGwUkc0icouP8/Ei8pLn/Nciku05HiciT4rIWhFZIyLHWxmnnZTV2GcNRHvOmTKY6cPTuGvpRmpcjcEOR6l2FXkmVAxLT+S2uZPIzUrlxpfWUFR+6ESL9wr3cOTI/qQkxAY6zHb5lSBEJElEojxfjxWRc0Skw59CRKKBBcDpQC4wX0Ry21x2JVBhjBkN3Afc6Tn+UwBjzGHAKcA/vM9XHbNLHaaOiAh/OnsiDmc9Cz7Saa8qdHkTwfB+iSTERvPwJdNpMYbrnluJq7H5wHVby5xsLdsfMrOXvPz9pfspkCAiQ4D/ApcCT3Vyz0xgszFmqzGmAXgRmNvmmrnA056vXwVOEvfWSbnAhwDGmL1AJZDnZ6wRzb2K2p7jD61NGZbGD6cPYdFn29ixb3+ww1HKp537aomPiTrwoW1E/yT+cf4U1u6q4ra3Cg5c90Fh6Kyebs3fBCHGmFrgh8BDxpjzgYmd3DMEaL0lWLHnmM9rjDFNQBXQH1gDnCMiMSKSA8wAhh0SlMjVIpIvIvllZWV+/ij2ZYyxVR2mzvxmznhiooW/LykMdihK+VRUUcuwfokHbRl66sRBXDN7JM9/vZPXPONo7xfuYfygFIamJwYrVJ/8ThAichRwMfC251i0NSEBsAh3QskH/gl8ATS3vcgYs9AYk2eMycvIyLAwnPCwv6EZV2OL7ccgvAamJnDd8aNYun4PX2x2BDscpQ6xs7yO4f0O/aX/61PHcUROP37/5lq+2rqP/B0VnBJCs5e8/E0QvwB+C7xhjFkvIiOBjzq5ZxcHf+of6jnm8xoRiQH6AvuMMU3GmBuNMVONMXOBNKD9+WEK+H6RXKQkCICrjh3JsH59+MO/1x3Up6tUsBljKC6vZVh6n0POxURH8cBF00hNiOXyRd/Q3GI4KcTGH8DPBGGM+cQYc44x5k7PYLHDGPOzTm5bDowRkRwRiQMuBBa3uWYxcLnn63nAh8YYIyKJIpIEICKnAE3GmAJUh7wrNSOliwkgITaav517GFvL9vPgh7o9qQodlbWN1NQ3McxHCwIgMyWBBy+aTlOLISMlnslD+gY4ws7F+HORiDwPXIu7m2c5kCoi/zLG3N3ePcaYJhG5HliKuztqkaf1cRuQb4xZDDwBPCsim4Fy3EkEIBNYKiItuFsZl3bvx4ssjghsQQAcNzaDH04fwiOfbOHMyVlMyEoNdkhKfT/FtZ0EATAzpx/3XziN6Ch3UcpQ41eCAHKNMdUicjHwDnALsAJoN0EAGGOWAEvaHLu11dcu4Hwf920HxvkZm/Ioi8AWhNcfz8zlk41l3PLat7x+3dFEh+A/NhVZdraa4tqRMydnBSKcbvF3DCLWs+7hXGCxMaYR0DoHIcZRU0+UjctsdCQ9KY5bz85lTXEVT32xPdjhKHUgQXTUggh1/iaIR4HtQBLwqYiMAKqtCkp1T5mznn5JcRH76fmcKYM5YVwG9yzd6HOlqlKBVFReR7+kOJLj/e2oCT3+DlLfb4wZYow5w7jtAE6wODbVRWU1DRE3/tCaiHD7Dw4jSuB3b6zFGG3kquApKq8N69YD+F9qo6+I3OtdlCYi/8DdmlAhpCwCymx0ZkhaH26eM55lmxy8sUr3sFbBU1The4prOPG3i2kRUANc4PlTDTxpVVCqexw19bbcB6KrLjlyBNOHp3HbWwV+bdKiVG9ram5hV4XvRXLhxN8EMcoY8ydPXaWtxpi/ACOtDEx1jTHGXYcpwlsQANFRwh3nTWZ/fRN/fUuXz6jAK61y0dRiIiZB1InIMd5vRORooM6akFR31NQ3Ud/Uoi0Ij7EDU7ju+NH8e3UJH23YG+xwVITxZw1EOPA3QVwLLBCR7SKyHXgQuMayqFSXHVgklxJ5U1zbc90JoxiTmczv31iLs74p2OGoCFLk5xqIUOfvLKY1xpgpwGRgsjFmGnCipZGpLonEOkydiY+J5o7zJlNa7eKv/9GuJhU4ReV1REcJWX0Tgh1Kj3RpEx5jTLUxxrv+4SYL4lFttLQYrntuBZ93Uq3U4WwAInMVdUdmjEjnf2aP4qX8Il7OL+r8BqV6wc7yWganJYT91r89iT4yV2MFmGN/PUvW7ubOdzd0OK/fO1tHWxCHuumUscwa1Z8/vrmOdbuqgh2OigBFFbVh370EPUsQugopABw17pbBt8VV5O+oaPe6spp6oqOE9EQdg2grJjqK++dPIz0xjv95bgVVtbqPtbJWUXktw0Js85/u6DBBiEiNiFT7+FMDDA5QjBGt9Tz+J5Zt6/C6SC6z0ZkByfEsuHg6u6tc3Pjyalpa9PONssb++iYczoawn8EEnSQIY0yKMSbVx58UY0z4FhgJI94EcfqkQfy3YHe7NYbKauq1e6kTM0ak84czc/lww14e+lj3jlDWKK5wrwCwfYJQwedNEDedMpYoEZ78fHu71+kAdecuO2oEc6cO5h/vfceyTbqPuep9/pb5DgeaIEKcw9lAXEwUozOTOXNyFi/nF1HjOrQP3eFsYECyjj90RkT43x8expjMZH72wip2Vep6T9W77LIGAjRBhDxvfSUR4cpjcnDWN/FyfvFB1xhjKKvRFoS/EuNieOSSGTQ2G657biX1TbqXteo9O8trSYqLJj0xNtih9JgmiBBX5qw/0DKYPDSNw7PTeeqLbTS3GmStdjXR0KxlNrpiZEYy95w/mTVFlVqvSfWq4gp3mW+R8J8wogkixDmcDQe1DK48Joei8jreK9h94Jiuou6eOZOyuPq4kfzfVzt5U0uDq16y0wb7QHhpgghxDufBs5NOyR3E0PQ+PPHZtoOuAV1F3R03nzaOvBHp/PHf69hd5Qp2OCrMGWMoKg//Mt9emiBCWEuLoXz/wbvERUcJV8zKZvn2Cr4trgS0BdETMdFR3HP+FBqbW/jt69/qLnSqRxzOBuoamzVBKOtV1DbQ3GIOmZ30o8OHkRwfc6AVoS2InskekMTNp43no41lvLqiuPMblGqHd4rrsH7hvZOclyaIEOYtwNd2E6CUhFguyBvG29+WsrvKhcPpLrOR1if8Z00EyxWzspmZ3Y/b3irQribVbcUV9pniCpogQlpHBfh+fHQ2Lcbw9JfbKaupp39SHFFaZqPboqKEu+ZN1q4m1SM797kTxFAb1GECTRAhraMEMaxfIqfmDuL5r3dSVF6n3Uu9QLuaVE/tLK8lMyWehNjoYIfSKzRBhDDv4HN76xuuPDaHqrpGvty6Tweoe4l2NamesEuZby9LE4SIzBGRjSKyWURu8XE+XkRe8pz/WkSyPcdjReRpEVkrIoUi8lsr4wxVZc564qKjSO3juy5i3oh0Jg/tC+gAdW9p3dV0i3Y1qS4qKq+zzRoIsDBBiEg0sAA4HcgF5otIbpvLrgQqjDGjgfuAOz3HzwfijTGHATOAa7zJI5I4ahronxzX7opMb/kN0CmuvSl7QBK/mTOej7WrSXVBQ1MLpVWaIPw1E9hsjNlqjGkAXgTmtrlmLvC05+tXgZPE/dvQAEkiEgP0ARqAaiJM20VyvpxxWBZnTs7ihHEZAYoqMlx+VDYzc7SrSfmvpLKOFgPD0u0xxRWsTRBDgNabABd7jvm8xhjTBFQB/XEni/1AKbATuMcYU972ASJytYjki0h+WZn9Sjc7WtVhak9sdBQLLprOESP7ByiqyBAVJdw9bzJNzUa7mpRfimw2xRVCd5B6JtCMe9e6HOCXIjKy7UXGmIXGmDxjTF5Ghv0+QfvTglDWGdE/id/MGcfHG8t4cXlR5zeoiPb9IjlNEP7YBQxr9f1QzzGf13i6k/oC+4CLgHeNMY3GmL3A50CehbGGnJYWwz5nwyGL5FRgXXZUNkeP7s+fFq9n1c729wRXamd5LXHRUQxMTQh2KL3GygSxHBgjIjkiEgdcCCxuc81i4HLP1/OAD427Lb8TOBFARJKAI4ENFsYacqrqGmlqMdqCCLKoKOHB+dMZmBrPNc+u0PEI1a7i8jqGpvex1b7wliUIz5jC9cBSoBB42RizXkRuE5FzPJc9AfQXkc3ATYB3KuwCIFlE1uNONE8aY761KtZQ9P0iOd0lLtjSk+J4/LLD2V/fxDXP5uNq1A2G1KF2ltcy1EbdSwC+J9j3EmPMEmBJm2O3tvrahXtKa9v7nL6OR5IyZ8eL5FRgjRuUwn0/msrVz67gt6+v5d4LpthiQxjVe4oqapkyrG+ww+hVoTpIHfHaK9SngufUiYP45SljeWPVLhZ+ujXY4agQUlXXSGVtI8NsUoPJSxNEiHLoHg8h6foTR3PmYVnc8e4GPtq4N9jhqBBRVG6/Ka6gCSJkaQnv0CQi3H3+ZCYMSuVnz69i815nsENSIcBb5ttOU1xBE0TIcji1hHeoSoyL4bHL84iLieLqZ/KpqmsMdkgqyOy4BgI0QYQsh7NBu5dC2JC0Pjx8yQyKKmr52QuraG7RldaRrKi8jr59Yulrsxa/JogQ5XDW6wB1iJuZ04/b5k7ik+/KuOe/G4MdjgqineW1ttlmtDVNECHKUdN5HSYVfPNnDmf+zGE8/PEWlm2yXz0w5R+77QPhpQkiBBljcDgbdI+HMHHrWRMZk5nMjS+tObDJk4ocLS2GYpvtA+GlCSIEVbuaaGhu0UVyYaJPXDQPXDSNGlcjv3xlDS06HhFR9tS4aGhusd0aCNAEEZI62otahabxg1L5w1m5fPpdGY9/povoIklReR1gvzUQoAkiJOkiufB0yRHDOW3iQO56dyNriiqDHY4KELtOcQVNECHp+zIbOkgdTkSEO8+bTGZKPD97cRU1Ll0fEQmKymsRcU99thtNECFIu5jCV1piHP+aP42i8lr++OY63YkuAhSV1zK4bx/iYuz369R+P5ENOJz1RAmkJ2oLIhwdnt2Pn580ljdXl/DayrZ7ZCm72b5vvy3XQIAmiJDkcNbTLyneVhuPRJrrTxzNETn9uPXf69hapvWa7KqlxbBhdw3jB6UGOxRLaIIIQWW6SC7sRUcJ/7xwKnExUdzwwirqm3STITvaWV5LbUMzuVmaIFSAlOkiOVvI6tuHu+dNYX1JNX97uzDY4SgLFJRWAzBBE4QKFHeZDU0QdnBK7kCuOiaHZ77cwUvLdwY7HNXLCkuriY4SxgxMDnYoltAEEWLcZTa0i8lObjl9PMeOGcAf3lzHih3lwQ5H9aKCkmpGZSSREBsd7FAsoQkixDjrm6hvatEWhI3EREfxwPxpDE7rwzXPrqS0qi7YIaleUlBabdvxB9AEEXIOLJLTBGEraYlxPHZZHnUNTVzz7ApcjTpoHe4q9jdQWuUid7AmCBUgBxbJ6SC17YwdmMK9P5rKt8VV/Pb1tbqILswV2nyAGjRBhJzv6zDpGIQdnTZxEDeePJY3Vu3iic+2BTsc1QN2n8EEmiAAqKprDJl56t4WhJb6tq8bThzNnImD+PuSQj79TjcZClcFpdVkpsTbujs44hPEdsd+Zv3vB/x7VUmwQwHcayBEoF+StiDsKipK+McFUxiTmcL1z69ku2N/sENS3VBQUm3r8QewOEGIyBwR2Sgim0XkFh/n40XkJc/5r0Uk23P8YhFZ3epPi4hMtSLGEf0TGdE/iYXLtobERi8OZz3piXHEREd87ra1pPgYHrssj6go4apn8rXya5hpaGphS5nT1t1LYGGCEJFoYAFwOpALzBeR3DaXXQlUGGNGA/cBdwIYY54zxkw1xkwFLgW2GWNWWxQnVx83ks17nXy0ca8Vj+gS3Ys6cgzvn8iCi6azzbGfm17WnejCyaa9NTQ2G1tPcQVrWxAzgc3GmK3GmAbgRWBum2vmAk97vn4VOElE2laom++51zJnTs5icN8EHv00+DuBuRfJ2bdPUx3s6NED+N0ZE3ivYA8LPtpsyTMamlpoaGqx5LUjVWFpDWDvAWqAGAtfewhQ1Or7YuCI9q4xxjSJSBXQH3C0uuZHHJpYelVsdBQ/OSaH298uZHVRJVOHpVn5uA45nA1Bfb4KvJ8cnc3a4kruff87Jg5J5cTxA3vttZuaWzjz/mVs37efMZkpTMhKJXdwKhOyUsjNSiVNS8p3S0FJNQmxUeQMSAp2KJayMkH0mIgcAanqa3cAABSISURBVNQaY9a1c/5q4GqA4cOH9+hZF84czr8+2MTCT7fw0MUzevRaPaEtiMgjIvzvDyfz3R4nP39xNYuvP6bXfvG8s243m/Y6mTt1MBW1jXy6qYzXVhYfOD+4bwK5g1OZPS6TH04bQlJ8SP9KCBkFpVWMH5Rq+5L8Vv5t2AUMa/X9UM8xX9cUi0gM0BfY1+r8hcAL7T3AGLMQWAiQl5fXow7c5PgYLjlyBI9+soUd+/Yzon/gPxnUNjRR29CsW41GoD5x0Tx66QzOefAzrn4mnzf+39Ek9/CXtTGGRz7ZwsiMJO67YCpRnl9me2tcFJbWUFhaTUFJNet2VfF+4TruemcD8/KGctlR2bb/ZNwTxhgKS2s447CsYIdiOSvHIJYDY0QkR0TicP+yX9zmmsXA5Z6v5wEfGs/yUhGJAi7A4vGH1n48K5voKOHxZcFZwOSocZfZ0DUQkWlYv0QevGg6W8qc/PqVNT1eab1sk4P1JdVcc9zIA8kBIDMlgdljM7h29ijunz+ND345m9evm8WJEzL5v692cMI9H3PFk9/w0ca9OnDuQ0mVi6q6RttPcQULE4Qxpgm4HlgKFAIvG2PWi8htInKO57IngP4ishm4CWg9FfY4oMgYE7CR48zUBM6dOoRXVhRRvr8hUI89oEzLbES8o0cP4LenT+Cddbt5+JMtPXqtRz7ZwsDUeM6dNqTD60SE6cPT+deF0/j8lhP5xcljWF9SzY+fXM5J937Cos+24axv6lEsdlJY4l5BnZuVEuRIrGfpZHtjzBJjzFhjzChjzN88x241xiz2fO0yxpxvjBltjJnZOhkYYz42xhxpZXy+XH3cSFyNLTzz5fZAP1pXUSsArjo2h7OnDObupRv5uJtTr1cXVfLFln1ceUwO8TH+l6LOTEngFyeP5fPfnMi/LpxKemIst71VwA8f+vzA389IV1BajQiMs+k2o63paqw2xgxM4cTxmTzz5Y6AV9w8UKhPE0REExHuPO8wxg1M4WcvrGLHvq6vtH7k4y2kJsQwf2b3Jm/ExUQxd+oQXr/uaJ768eHsLK/lose+0iSBewbTiH6JPR4jCgeaIHy4+riRlO9v4NUVxZ1f3Iu8YxD9daFcxEuMi2HhpXmICNc8u4LaBv+7eLaUOVlasJvLjsomJSG2x7EcPy6TRVe4k8T8hV9RVhPZSaJwt/1LbHhpgvDhiJx+TBnal8eXbaU5gIN0Dmc9aYmxxGqZDYV7pfUD86fx3Z4abnxptd9/Fxd+spW46CiuODq712KZNWoAT14xk+KKOi56LHKTRI2rkR37am2/gtpLfxP54C6/MYrt+2p5r2B3wJ6rayBUW8eNzeB3Z0xg6fo93P52QafX765y8fqqYi7IG9brf5eOGtWfJ398OMUVdcx/7Cv21rh69fXDwcbdkbGC2ksTRDvmTBrE8H6JPPrp1oBt7KJ7UStfrjp2JD85OocnP9/O48s6ntS36PNtNLcYfnrsSEtiOXKkO0nsqqhj/sLISxLePSC0iynCRUcJVx2bw6qdleTvqPB5TWNzCyt2lPP4sq3srur5PxSHs0FbEMqnP5w5gdMnDeL2twt5+9tSn9dU1Tby3Fc7OGvyYIb3T7QsliNH9uepHx9OaZXLnSSqIydJFJRUk5YYy6DUhGCHEhCaIDpw/oxhpCfG8ugn7k9tTc0trNpZwUMfb+bSJ75myl/+y3kPf8ntbxdyzbP5PS6IVlajXUzKt6go4b4fTSVvRDo3vryab7aVH3LN/329g/0NzVwz25rWQ2tHjOzPUz+eSWmViwsfi5wkUVhaTW5WKofWFLUnTRAd6BMXzaVHZfN+4Z4DCeEHD33BXe9uZE+1i/NnDOWRS6Zzz/lTWFNcxZ3vbuj2s1yNzTjrm8jQRXKqHQmx0Tx2WR5D0/vw02fy2by35sA5V2MzT36+jdljM5g4uG9A4pmZ04+nfjyT3VUu5kfAFNim5hY27K6JmPEH0ATRqcuPGsGA5DhKKus4d9oQHrxoGvl/OJn/3jibv8ydxJxJWcybMZQrZmXzxGfbeK9gT7eeU6Z7USs/pCfF8fSPZxIbLVy+aPmBMYBXVhTjcDZw7exRAY1nZk4/nrzicHZV1nHJ419TWRv4CgSBsn3ffuqbWiJmBhNoguhU/+R4lv/+ZD745fH87QeHcdbkwT67gX57xngmDUnlV6+sYVdlXZefo4vklL+G9Utk0RWHU76/gZ88tZyqukYe+3QrU4elceTIfgGP54iR/Xnssjy2lu3nskXfUG3T3fHWl0TWADVogvCLP/2N8THRPDh/Os0thhueX0ljc9fGIxxO9ycvTRDKH5OHpvHQxdMpLK3hrAeWsbO8lmtnjwpa3/ixYzJ46OLpFHhqOO23Ye2mgtJqYqOFURnJwQ4lYDRB9KLsAUnccd5hrNxZyT3/3dilex1aqE910QnjM7n93EkUldcxMiOJU3N7b6Oh7jg5dyD3z5/Gqp0VXPV0fsBL1VitsLSGMZkpxMVEzq/NyPlJA+SsyYO56IjhPPrJVj7a4H+hNYdnDKJ/ko5BKP/NnzmcBRdN54H50w4q6R0sZxyWxT8umMJX2/ZxzbMrqG+yT5IoKKmOqAFq0ARhiVvPymX8oBRuenk1pVX+jUc4nPWkJMSQEOt/5U2lwL2neqBmLvnjB9OG8vcfHMYn35Vxw/OrutzdGor21rhwOOsjavwBNEFYIiE2mgUXT6e+qYWfv7CaJj/+gTicDVrmW9nG/JnD+fPZufy3YA83vbwmoDXNvJpbDFV1jeyqrOtxS6aw1Ftiw/57QLRm/3q1QTIqI5m//+AwfvHSav75/iZ+ddq4Dq8v0zpMymauODoHV1MLd7yzgZgo4e55k4np5UKUxhgeW7aVZZsc1LiaqHE14qxvosbl3r7Xa0haH+6eN5lZowd06zkFBzYJiqwWhCYIC507bQhfbHGw4OPNzBrVv8O/nA5nPeMHRdanE2V/184eRWNTC/947ztcjc3868JpvTbIa4zh7qUbeejjLYwflEJmagJD0vqQHB9DSkIMyQkxJMfHEB8bzZOfbeOix7/milnZ/GbOePrEda0rt7C0miFpfUhLjKwxQk0QFvvLOZNYvr2C376xlqW/OK7dMQZHTT0DuvnpRqlQdsNJY+gTF83tbxdS92w+j1wyo1fG2h74cDMPfbyFi44Yzt/OndThFN9504dy57sbeOqL7XzyXRn/uGAK04en+/2sgtLqiOteAh2DsFyfuGj+du4kduyr5aGPNvu8pr6pmWpXk3YxKdu66tiRBwaur3jymx7vcf3IJ1u4973vmDdjKLfP7Tg5gPvf4Z/PmcjzPz2ChqYW5j38BXe9u8GvsQlXYzNby5wR170EmiACYtboAfxg2hAe/mQLm/c6Dzm/TxfJqQhw0RHDue+CqSzfXsElj39NVW33Vlw/+fk27nhnA2dPGcyd503u0vTeWaMG8O4vjmXejKE89PEW5j74+YHxhfZs3F1Di4mcPSBa0wQRIL8/cwJ9YqP5/RtrD9lf4vsyG5HVv6kiz7nThrDgIveK6wu7UeDvua938Jf/FDBn4iDuvWAK0d1Y+5GSEMtd86bw+GV5OJwNzF3wGb959Vue+3oHq4sqD1ngF2l7QLSmYxABMiA5nltOn8Dv3ljLayt3MW/G0APnvP9ItJKrigRzJg3iscvzuPqZfH706Jc8d9WRDOrb+f4Kr+QX8fs31nHi+Ezunz+tx1vznpw7kPdGpPPXtwpYsq6Ul/KLAPdeMKMyksjNSmXi4L58va2cpLhohqVbt8dGqNIEEUAXHj6M11YW8/clhZw0PpN0z6ppR412ManIMntsBk//ZCZXPrWc8x/9grvnTWF4v0QyU+J9ToX99+pd3Pzatxw7ZgAPXTy912ZCpSfFce+PpmKMobiijvUlVRSUVLO+pJqvtpbz5uoSwF21NhRWqgeaJogAiooS/vaDSZx1/2fc8c4G7pw3GXCvgQBtQajIcuTI/jz30yO5fNE3XLjwKwBE3B+UBqUmMDA1gUF94+kTG82iz7czM7sfCy/Ns6TagIgwrF8iw/olMmdS1oHj+5z1FJbWkD0g8loPoAki4MYPSuXKY3N49JOtnDdjKDNz+uFw1pMcr2U2VOSZOiyN92+azdpdleyuqmd3tYs9VS52V7sorqglf0c5lbWNHJHTj0VXHN7l9Qs91T85nmPGRO4HN00QQfDzk8bw1ppS/vDmWt664VjPXtQ6QK0iU0ZKPCeOb78SrauxmfiYqIjZ5jOUWDqLSUTmiMhGEdksIrf4OB8vIi95zn8tItmtzk0WkS9FZL2IrBUR2+wSnhgXw21zJ/LdHiePf7bVvUhOxx+U8ikhNlqTQ5BYliBEJBpYAJwO5ALzRSS3zWVXAhXGmNHAfcCdnntjgP8DrjXGTASOB2y1TdVJEwYyZ+Ig7v9gE5v2OjVBKKVCjpUtiJnAZmPMVmNMA/AiMLfNNXOBpz1fvwqcJO6PCqcC3xpj1gAYY/YZY+xTWN7jT+fkEi2Cw1nPgBTtYlJKhRYrE8QQoKjV98WeYz6vMcY0AVVAf2AsYERkqYisFJGbLYwzaLL69uGmU91VXrUFoZQKNaE6SB0DHAMcDtQCH4jICmPMB60vEpGrgasBhg8fHvAge8PlR42gfH89Z03O6vxipZQKICtbELuAYa2+H+o55vMaz7hDX2Af7tbGp8YYhzGmFlgCTG/7AGPMQmNMnjEmLyMjw4IfwXox0VH8+rTxjM6MvEqRSqnQZmWCWA6MEZEcEYkDLgQWt7lmMXC55+t5wIfGXahoKXCYiCR6EsdsoMDCWJVSSrVhWReTMaZJRK7H/cs+GlhkjFkvIrcB+caYxcATwLMishkox51EMMZUiMi9uJOMAZYYY962KlallFKHkraVRcNVXl6eyc/PD3YYSikVVjzju3m+zmm5b6WUUj5pglBKKeWTJgillFI+aYJQSinlkyYIpZRSPtlmFpOIlAE7fJzqi7uEhy/dOefruK9jAwBHO69tpY5+Jitfw997OruuK//f2ztut/ejO6+j74dvdn0/2jvnz7ERxhjfK42NMbb+AyzszXO+jrdzLD/Ufl4rX8Pfezq7riv/3yPl/ejO6+j7EVnvRxf/3/sdeyR0Mf2nl8/5Ot7R6wRab8TSndfw957OruvK//f2jtvt/ejO6+j74Ztd34/2zvXo/bBNF1OoEZF8087iExV4+n6EFn0/wkMktCCCZWGwA1AH0fcjtOj7EQa0BaGUUsonbUEopZTySROEUkopnzRBdEJEFonIXhFZ1417Z4jIWhHZLCL3e/bb9p67QUQ2iMh6Ebmrd6O2NyveExH5s4jsEpHVnj9n9H7k9mTVvxHP+V+KiBGRAb0XsfKXJojOPQXM6ea9DwM/BcZ4/swBEJETgLnAFGPMROCenocZUZ6il98Tj/uMMVM9f5b0LMSI8hQWvB8iMgw4FdjZw/hUN2mC6IQx5lPcmxkdICKjRORdEVkhIstEZHzb+0QkC0g1xnxl3DMBngHO9Zz+H+AOY0y95xl7rf0p7MWi90R1k4Xvx33Azbg3DVNBoAmiexYCNxhjZgC/Ah7ycc0Q3HtrexV7jgGMBY4Vka9F5BMROdzSaCNDT98TgOtF5FtPl0m6daFGhB69HyIyF9hljFljdaCqfZZtOWpXIpIMzAJeadVdGt/Fl4kB+gFHAocDL4vISKNzjrull96Th4G/4v60+lfgH8BPeivGSNLT90NEEoHf4e5eUkGkCaLrooBKY8zU1gdFJBpY4fl2Me5fOENbXTIU2OX5uhh43ZMQvhGRFtzFy8qsDNzGevyeGGP2tLrvMeAtKwO2uZ6+H6OAHGCNJ8EMBVaKyExjzG6LY1etaBdTFxljqoFtInI+gLhNMcY0txrgvNUYUwpUi8iRnpkZlwH/9rzMm8AJnvvHAnEEp7KlLfTGe+LpD/f6AdDlGTnKrafvhzFmrTEm0xiTbYzJxv2Baromh8DTBNEJEXkB+BIYJyLFInIlcDFwpYisAdbjnpHky3XA48BmYAvwjuf4ImCkZ1rgi8Dl2r3kP4vek7s80y2/xZ28b7TyZ7ATi94PFQK01IZSSimftAWhlFLKJ00QSimlfNIEoZRSyidNEEoppXzSBKGUUsonTRDK1kTEGeDnfdFLr3O8iFR5KstuEJFOCzqKyLkiktsbz1cKNEEo1SUi0mH1AWPMrF583DLPauRpwFkicnQn158LaIJQvUYThIo47VUaFZGzPQUUV4nI+yIy0HP8zyLyrIh8Djzr+X6RiHwsIltF5GetXtvp+e/xnvOveloAz3n3OhCRMzzHVoh7D4QOy3oYY+qA1XxfyO6nIrJcRNaIyGsikigis4BzgLs9rY5R/lRUVaojmiBUJGqv0uhnwJHGmGm4V7jf3OqeXOBkY8x8z/fjgdOAmcCfRCTWx3OmAb/w3DsSOFpEEoBHgdM9z8/oLFhPZdkxwKeeQ68bYw43xkwBCoErjTFf4K5v9GtPKYstHfycSvlFi/WpiNJJpdGhwEueukxxwLZWty72fJL3etuzn0e9iOwFBnJw6WqAb4wxxZ7nrgayASew1Rjjfe0XgKvbCfdYT6mKMcA/W9UimiQitwNpQDKwtIs/p1J+0QShIo3PSqMeDwD3GmMWi8jxwJ9bndvf5tr6Vl834/vfkj/XdGSZMeYsEckBvhKRl40xq3Hv4HauMWaNiFwBHO/j3o5+TqX8ol1MKqK0V2nUc7ov35dkv9yiEDbiLtSY7fn+R53d4Glt3AH8xnMoBSj1dGtd3OrSGs+5zn5OpfyiCULZXaKnwqj3z020X2n0z7i7ZFZgUfl1TzfVdcC7nufUAFV+3PoIcJwnsfwR+Br4HNjQ6poXgV97BtlH4X9FVaV80mquSgWYiCQbY5yeWU0LgE3GmPuCHZdSbWkLQqnA+6ln0Ho97m6tR4Mcj1I+aQtCKaWUT9qCUEop5ZMmCKWUUj5pglBKKeWTJgillFI+aYJQSinl0/8HduJ9tP0mBMwAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "learner.load(\"best-base-vgg19-sipak-multiclass-fold4\")\n", "learner = to_fp16(learner)\n", "learner.data = fold_data\n", "learner = to_fp16(learner)\n", "learner.lr_find()\n", "learner.recorder.plot()" ] }, { "cell_type": "code", "execution_count": 38, "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.0868320.0078371.0000001.0000001.0000001.0000001.00000000:17
10.1108830.0081401.0000001.0000001.0000001.0000001.00000000:16
20.1151400.0087481.0000001.0000001.0000001.0000001.00000000:16
30.1036630.0064821.0000001.0000001.0000001.0000001.00000000:16
40.1062510.0079361.0000001.0000001.0000001.0000001.00000000:16
50.0955900.0084851.0000001.0000001.0000001.0000001.00000000:16
60.1059470.0063681.0000001.0000001.0000001.0000001.00000000:15
70.0865660.0080291.0000001.0000001.0000001.0000001.00000000:15
80.0765810.0081041.0000001.0000001.0000001.0000001.00000000:15
90.0909200.0076011.0000001.0000001.0000001.0000001.00000000:15
100.0954090.0078131.0000001.0000001.0000001.0000001.00000000:16
110.0985530.0070691.0000001.0000001.0000001.0000001.00000000:15
120.0934060.0074571.0000001.0000001.0000001.0000001.00000000:16
130.0826020.0062711.0000001.0000001.0000001.0000001.00000000:16
140.0810440.0077571.0000001.0000001.0000001.0000001.00000000:15
150.0938180.0071101.0000001.0000001.0000001.0000001.00000000:15
160.1086380.0086991.0000001.0000001.0000001.0000001.00000000:15
170.0871550.0079681.0000001.0000001.0000001.0000001.00000000:17
180.0761110.0058951.0000001.0000001.0000001.0000001.00000000:16
190.0699420.0072941.0000001.0000001.0000001.0000001.00000000:15
200.0835500.0068691.0000001.0000001.0000001.0000001.00000000:16
210.0992430.0068741.0000001.0000001.0000001.0000001.00000000:15
220.0959760.0073581.0000001.0000001.0000001.0000001.00000000:16
230.0875320.0076551.0000001.0000001.0000001.0000001.00000000:14
240.0887290.0063721.0000001.0000001.0000001.0000001.00000000:15
250.0870260.0057091.0000001.0000001.0000001.0000001.00000000:17
260.0911160.0070091.0000001.0000001.0000001.0000001.00000000:16
270.0917850.0070871.0000001.0000001.0000001.0000001.00000000:15
280.0725750.0066521.0000001.0000001.0000001.0000001.00000000:15
290.0850810.0064811.0000001.0000001.0000001.0000001.00000000:16
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Better model found at epoch 0 with accuracy value: 1.0.\n" ] } ], "source": [ "learner.fit_one_cycle(30, max_lr=slice(1e-06), callbacks=model_callback(learner, \"best-base-vgg19-sipak-multiclass-fold5\"))\n", "learner.save(\"last-base-vgg19-sipak-multiclass-fold5\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Testing on 30 images (in valid folder)" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Learner(data=ImageDataBunch;\n", "\n", "Train: LabelList (773 items)\n", "x: ImageList\n", "Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224)\n", "y: CategoryList\n", "normal_Superficial-Intermediate,normal_Superficial-Intermediate,normal_Superficial-Intermediate,normal_Superficial-Intermediate,normal_Superficial-Intermediate\n", "Path: ../../../Dataset/Sipakmed Dataset/wsi_dataset/train;\n", "\n", "Valid: LabelList (193 items)\n", "x: ImageList\n", "Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224)\n", "y: CategoryList\n", "normal_Superficial-Intermediate,normal_Superficial-Intermediate,normal_Superficial-Intermediate,normal_Superficial-Intermediate,normal_Superficial-Intermediate\n", "Path: ../../../Dataset/Sipakmed Dataset/wsi_dataset/train;\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=25088, 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=5, 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/Sipakmed Dataset/wsi_dataset/train'), model_dir='models', callback_fns=[functools.partial(, add_time=True, silent=False)], callbacks=[MixedPrecision\n", "learn: Learner(data=ImageDataBunch;\n", "\n", "Train: LabelList (773 items)\n", "x: ImageList\n", "Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224)\n", "y: CategoryList\n", "normal_Superficial-Intermediate,normal_Superficial-Intermediate,normal_Superficial-Intermediate,normal_Superficial-Intermediate,normal_Superficial-Intermediate\n", "Path: ../../../Dataset/Sipakmed Dataset/wsi_dataset/train;\n", "\n", "Valid: LabelList (193 items)\n", "x: ImageList\n", "Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224)\n", "y: CategoryList\n", "normal_Superficial-Intermediate,normal_Superficial-Intermediate,normal_Superficial-Intermediate,normal_Superficial-Intermediate,normal_Superficial-Intermediate\n", "Path: ../../../Dataset/Sipakmed Dataset/wsi_dataset/train;\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=25088, 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=5, 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/Sipakmed Dataset/wsi_dataset/train'), 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=25088, 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=5, bias=True)\n", ")], add_time=True, silent=False)\n", "loss_scale: 32768.0\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=25088, 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=5, bias=True)\n", ")], add_time=True, silent=False)" ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "learner.load(\"last-base-vgg19-sipak-multiclass-fold5\")" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "ImageDataBunch;\n", "\n", "Train: LabelList (966 items)\n", "x: ImageList\n", "Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224)\n", "y: CategoryList\n", "normal_Superficial-Intermediate,normal_Superficial-Intermediate,normal_Superficial-Intermediate,normal_Superficial-Intermediate,normal_Superficial-Intermediate\n", "Path: ../../../Dataset/Sipakmed Dataset/wsi_dataset;\n", "\n", "Valid: LabelList (29 items)\n", "x: ImageList\n", "Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224)\n", "y: CategoryList\n", "normal_Superficial-Intermediate,normal_Superficial-Intermediate,normal_Superficial-Intermediate,normal_Superficial-Intermediate,normal_Superficial-Intermediate\n", "Path: ../../../Dataset/Sipakmed Dataset/wsi_dataset;\n", "\n", "Test: None" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ "all_data = (ImageList.from_folder(data_path)\n", " .split_by_folder(train=\"train\", valid=\"test\")\n", " .label_from_folder()\n", " .transform(None, size=224)\n", " .databunch(bs=1)\n", " .normalize(imagenet_stats))\n", "all_data" ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [], "source": [ "imgs, labels = all_data.valid_ds.x, all_data.valid_ds.y\n", "binary_classes = [\"Abnormal\", \"Benign\", \"Normal\"]" ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [], "source": [ "def get_label(label):\n", " if \"abnormal\" in label:\n", " return \"Abnormal\"\n", " elif \"normal\" in label:\n", " return \"Normal\"\n", " elif \"benign\" in label:\n", " return \"Benign\"\n", "\n", "y_preds, y_true = [], []\n", "for img, label in zip(imgs, labels):\n", " y_true.append(get_label(str(label)))\n", " y_preds.append(get_label(str(learner.predict(img)[0])))" ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [], "source": [ "multi_y_preds, multi_y_true = [], []\n", "for img, label in zip(imgs, labels):\n", " multi_y_true.append(str(label))\n", " multi_y_preds.append(str(learner.predict(img)[0]))" ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['abnormal_Dyskeratotic',\n", " 'abnormal_Koilocytotic',\n", " 'benign_Metaplastic',\n", " 'normal_Parabasal',\n", " 'normal_Superficial-Intermediate']" ] }, "execution_count": 44, "metadata": {}, "output_type": "execute_result" } ], "source": [ "multi_classes = all_data.classes\n", "multi_classes" ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [], "source": [ "from sklearn.metrics import confusion_matrix\n", "\n", "np.set_printoptions(precision=2)\n", "\n", "def plot_confusion_matrix(y_true, y_pred, classes, normalize=False, title=\"Confusion matrix\", cmap=plt.cm.Blues):\n", " cm = confusion_matrix(y_true, y_pred)\n", " if normalize:\n", " cm = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis]\n", " fig, ax = plt.subplots()\n", " im = ax.imshow(cm, interpolation='nearest', cmap=cmap)\n", " # We want to show all ticks...\n", " ax.set(xticks=np.arange(cm.shape[1]),\n", " yticks=np.arange(cm.shape[0]),\n", " # ... and label them with the respective list entries\n", " xticklabels=classes, yticklabels=classes,\n", " title=title,\n", " ylabel='Actual',\n", " xlabel='Predicted')\n", "\n", " # Rotate the tick labels and set their alignment.\n", " plt.setp(ax.get_xticklabels(), rotation=45, ha=\"right\",\n", " rotation_mode=\"anchor\")\n", "\n", " # Loop over data dimensions and create text annotations.\n", " fmt = '.2f' if normalize else 'd'\n", " thresh = cm.max() / 2.\n", " for i in range(cm.shape[0]):\n", " for j in range(cm.shape[1]):\n", " ax.text(j, i, format(cm[i, j], fmt),\n", " ha=\"center\", va=\"center\",\n", " color=\"white\" if cm[i, j] > thresh else \"black\")\n", " return ax" ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Plot non-normalized confusion matrix\n", "plot_confusion_matrix(y_true, y_preds, classes=binary_classes, title='Binary Confusion Matrix')\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Plot normalized confusion matrix\n", "plot_confusion_matrix(y_true, y_preds, normalize=True, classes=binary_classes, \n", " title='Normalized Binary Confusion Matrix')\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 48, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Plot normalized confusion matrix\n", "plot_confusion_matrix(multi_y_true, multi_y_preds, normalize=False, classes=multi_classes, \n", " title='Multi-class Confusion Matrix')\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 49, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Plot normalized confusion matrix\n", "plot_confusion_matrix(multi_y_true, multi_y_preds, normalize=True, classes=multi_classes, \n", " title='Normalized Multi-class Confusion Matrix')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Results (first save results.csv)" ] }, { "cell_type": "code", "execution_count": 50, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " accuracy precision recall f_beta kappa_score\n", "0 0.979381 0.983409 0.979353 0.980105 0.981812\n", "1 0.984456 0.987615 0.988426 0.988237 0.990801\n", "2 0.984456 0.988602 0.988030 0.988121 0.995355\n", "3 0.994819 0.995652 0.996296 0.996141 0.993885\n", "4 1.000000 1.000000 1.000000 1.000000 1.000000\n", "*-**-**-**-**-**-**-**-**-**-*\n", "Results :-\n", "Accuracy : 98.8622 % | 0.7030 %\n", "Precision : 99.1056 % | 0.5416 %\n", "Recall : 99.0421 % | 0.6182 %\n", "F_beta : 99.0521 % | 0.6040 %\n", "Kappa_score : 99.2371 % | 0.4851 %\n" ] } ], "source": [ "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": "markdown", "metadata": {}, "source": [ "# Exporting model" ] }, { "cell_type": "code", "execution_count": 51, "metadata": {}, "outputs": [], "source": [ "learner.export(\"best-base-vgg19-sipak-multiclass.pkl\")" ] } ], "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 }