{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from fastai import *\n", "from fastai.vision import *\n", "from fastai.vision.models import efficientnet\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" ] }, { "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 0x7f44861c4c80>>,\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": [ { "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=Sequential(\n", " (0): Sequential(\n", " (0): Conv2d(3, 64, kernel_size=(7, 7), stride=(2, 2), padding=(3, 3), bias=False)\n", " (1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (2): ReLU(inplace=True)\n", " (3): MaxPool2d(kernel_size=3, stride=2, padding=1, dilation=1, ceil_mode=False)\n", " (4): Sequential(\n", " (0): Bottleneck(\n", " (conv1): Conv2d(64, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (relu): ReLU(inplace=True)\n", " (downsample): Sequential(\n", " (0): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " )\n", " )\n", " (1): Bottleneck(\n", " (conv1): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (relu): ReLU(inplace=True)\n", " )\n", " (2): Bottleneck(\n", " (conv1): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (relu): ReLU(inplace=True)\n", " )\n", " )\n", " (5): Sequential(\n", " (0): Bottleneck(\n", " (conv1): Conv2d(256, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (relu): ReLU(inplace=True)\n", " (downsample): Sequential(\n", " (0): Conv2d(256, 512, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", " (1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " )\n", " )\n", " (1): Bottleneck(\n", " (conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (relu): ReLU(inplace=True)\n", " )\n", " (2): Bottleneck(\n", " (conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (relu): ReLU(inplace=True)\n", " )\n", " (3): Bottleneck(\n", " (conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (relu): ReLU(inplace=True)\n", " )\n", " )\n", " (6): Sequential(\n", " (0): Bottleneck(\n", " (conv1): Conv2d(512, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (relu): ReLU(inplace=True)\n", " (downsample): Sequential(\n", " (0): Conv2d(512, 1024, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", " (1): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " )\n", " )\n", " (1): Bottleneck(\n", " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (relu): ReLU(inplace=True)\n", " )\n", " (2): Bottleneck(\n", " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (relu): ReLU(inplace=True)\n", " )\n", " (3): Bottleneck(\n", " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (relu): ReLU(inplace=True)\n", " )\n", " (4): Bottleneck(\n", " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (relu): ReLU(inplace=True)\n", " )\n", " (5): Bottleneck(\n", " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (relu): ReLU(inplace=True)\n", " )\n", " (6): Bottleneck(\n", " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (relu): ReLU(inplace=True)\n", " )\n", " (7): Bottleneck(\n", " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (relu): ReLU(inplace=True)\n", " )\n", " (8): Bottleneck(\n", " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (relu): ReLU(inplace=True)\n", " )\n", " (9): Bottleneck(\n", " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (relu): ReLU(inplace=True)\n", " )\n", " (10): Bottleneck(\n", " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (relu): ReLU(inplace=True)\n", " )\n", " (11): Bottleneck(\n", " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (relu): ReLU(inplace=True)\n", " )\n", " (12): Bottleneck(\n", " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (relu): ReLU(inplace=True)\n", " )\n", " (13): Bottleneck(\n", " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (relu): ReLU(inplace=True)\n", " )\n", " (14): Bottleneck(\n", " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (relu): ReLU(inplace=True)\n", " )\n", " (15): Bottleneck(\n", " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (relu): ReLU(inplace=True)\n", " )\n", " (16): Bottleneck(\n", " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (relu): ReLU(inplace=True)\n", " )\n", " (17): Bottleneck(\n", " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (relu): ReLU(inplace=True)\n", " )\n", " (18): Bottleneck(\n", " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (relu): ReLU(inplace=True)\n", " )\n", " (19): Bottleneck(\n", " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (relu): ReLU(inplace=True)\n", " )\n", " (20): Bottleneck(\n", " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (relu): ReLU(inplace=True)\n", " )\n", " (21): Bottleneck(\n", " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (relu): ReLU(inplace=True)\n", " )\n", " (22): Bottleneck(\n", " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (relu): ReLU(inplace=True)\n", " )\n", " )\n", " (7): Sequential(\n", " (0): Bottleneck(\n", " (conv1): Conv2d(1024, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", " (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (relu): ReLU(inplace=True)\n", " (downsample): Sequential(\n", " (0): Conv2d(1024, 2048, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", " (1): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " )\n", " )\n", " (1): Bottleneck(\n", " (conv1): Conv2d(2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (relu): ReLU(inplace=True)\n", " )\n", " (2): Bottleneck(\n", " (conv1): Conv2d(2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (relu): ReLU(inplace=True)\n", " )\n", " )\n", " )\n", " (1): Sequential(\n", " (0): AdaptiveConcatPool2d(\n", " (ap): AdaptiveAvgPool2d(output_size=1)\n", " (mp): AdaptiveMaxPool2d(output_size=1)\n", " )\n", " (1): Flatten()\n", " (2): BatchNorm1d(4096, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (3): Dropout(p=0.25, inplace=False)\n", " (4): Linear(in_features=4096, out_features=512, bias=True)\n", " (5): ReLU(inplace=True)\n", " (6): BatchNorm1d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (7): Dropout(p=0.5, inplace=False)\n", " (8): Linear(in_features=512, out_features=5, bias=True)\n", " )\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=Sequential(\n", " (0): Sequential(\n", " (0): Conv2d(3, 64, kernel_size=(7, 7), stride=(2, 2), padding=(3, 3), bias=False)\n", " (1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (2): ReLU(inplace=True)\n", " (3): MaxPool2d(kernel_size=3, stride=2, padding=1, dilation=1, ceil_mode=False)\n", " (4): Sequential(\n", " (0): Bottleneck(\n", " (conv1): Conv2d(64, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (relu): ReLU(inplace=True)\n", " (downsample): Sequential(\n", " (0): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " )\n", " )\n", " (1): Bottleneck(\n", " (conv1): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (relu): ReLU(inplace=True)\n", " )\n", " (2): Bottleneck(\n", " (conv1): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (relu): ReLU(inplace=True)\n", " )\n", " )\n", " (5): Sequential(\n", " (0): Bottleneck(\n", " (conv1): Conv2d(256, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (relu): ReLU(inplace=True)\n", " (downsample): Sequential(\n", " (0): Conv2d(256, 512, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", " (1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " )\n", " )\n", " (1): Bottleneck(\n", " (conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (relu): ReLU(inplace=True)\n", " )\n", " (2): Bottleneck(\n", " (conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (relu): ReLU(inplace=True)\n", " )\n", " (3): Bottleneck(\n", " (conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (relu): ReLU(inplace=True)\n", " )\n", " )\n", " (6): Sequential(\n", " (0): Bottleneck(\n", " (conv1): Conv2d(512, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (relu): ReLU(inplace=True)\n", " (downsample): Sequential(\n", " (0): Conv2d(512, 1024, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", " (1): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " )\n", " )\n", " (1): Bottleneck(\n", " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (relu): ReLU(inplace=True)\n", " )\n", " (2): Bottleneck(\n", " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (relu): ReLU(inplace=True)\n", " )\n", " (3): Bottleneck(\n", " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (relu): ReLU(inplace=True)\n", " )\n", " (4): Bottleneck(\n", " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (relu): ReLU(inplace=True)\n", " )\n", " (5): Bottleneck(\n", " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (relu): ReLU(inplace=True)\n", " )\n", " (6): Bottleneck(\n", " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (relu): ReLU(inplace=True)\n", " )\n", " (7): Bottleneck(\n", " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (relu): ReLU(inplace=True)\n", " )\n", " (8): Bottleneck(\n", " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (relu): ReLU(inplace=True)\n", " )\n", " (9): Bottleneck(\n", " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (relu): ReLU(inplace=True)\n", " )\n", " (10): Bottleneck(\n", " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (relu): ReLU(inplace=True)\n", " )\n", " (11): Bottleneck(\n", " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (relu): ReLU(inplace=True)\n", " )\n", " (12): Bottleneck(\n", " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (relu): ReLU(inplace=True)\n", " )\n", " (13): Bottleneck(\n", " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (relu): ReLU(inplace=True)\n", " )\n", " (14): Bottleneck(\n", " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (relu): ReLU(inplace=True)\n", " )\n", " (15): Bottleneck(\n", " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (relu): ReLU(inplace=True)\n", " )\n", " (16): Bottleneck(\n", " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (relu): ReLU(inplace=True)\n", " )\n", " (17): Bottleneck(\n", " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (relu): ReLU(inplace=True)\n", " )\n", " (18): Bottleneck(\n", " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (relu): ReLU(inplace=True)\n", " )\n", " (19): Bottleneck(\n", " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (relu): ReLU(inplace=True)\n", " )\n", " (20): Bottleneck(\n", " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (relu): ReLU(inplace=True)\n", " )\n", " (21): Bottleneck(\n", " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (relu): ReLU(inplace=True)\n", " )\n", " (22): Bottleneck(\n", " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (relu): ReLU(inplace=True)\n", " )\n", " )\n", " (7): Sequential(\n", " (0): Bottleneck(\n", " (conv1): Conv2d(1024, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", " (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (relu): ReLU(inplace=True)\n", " (downsample): Sequential(\n", " (0): Conv2d(1024, 2048, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", " (1): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " )\n", " )\n", " (1): Bottleneck(\n", " (conv1): Conv2d(2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (relu): ReLU(inplace=True)\n", " )\n", " (2): Bottleneck(\n", " (conv1): Conv2d(2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (relu): ReLU(inplace=True)\n", " )\n", " )\n", " )\n", " (1): Sequential(\n", " (0): AdaptiveConcatPool2d(\n", " (ap): AdaptiveAvgPool2d(output_size=1)\n", " (mp): AdaptiveMaxPool2d(output_size=1)\n", " )\n", " (1): Flatten()\n", " (2): BatchNorm1d(4096, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (3): Dropout(p=0.25, inplace=False)\n", " (4): Linear(in_features=4096, out_features=512, bias=True)\n", " (5): ReLU(inplace=True)\n", " (6): BatchNorm1d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (7): Dropout(p=0.5, inplace=False)\n", " (8): Linear(in_features=512, out_features=5, bias=True)\n", " )\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): Conv2d(3, 64, kernel_size=(7, 7), stride=(2, 2), padding=(3, 3), bias=False)\n", " (1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (2): ReLU(inplace=True)\n", " (3): MaxPool2d(kernel_size=3, stride=2, padding=1, dilation=1, ceil_mode=False)\n", " (4): Conv2d(64, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (5): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (6): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (7): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (8): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (9): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (10): ReLU(inplace=True)\n", " (11): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (12): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (13): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (14): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (15): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (16): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (17): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\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, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (21): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (22): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (23): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (24): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (25): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (26): ReLU(inplace=True)\n", " (27): Conv2d(256, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (28): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (29): Conv2d(128, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", " (30): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (31): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (32): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (33): ReLU(inplace=True)\n", " (34): Conv2d(256, 512, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", " (35): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (36): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (37): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (38): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (39): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (40): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\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, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (44): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (45): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (46): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (47): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\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, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (51): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (52): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (53): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (54): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (55): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (56): ReLU(inplace=True)\n", "), Sequential(\n", " (0): Conv2d(512, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (2): Conv2d(256, 256, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", " (3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (4): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (5): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (6): ReLU(inplace=True)\n", " (7): Conv2d(512, 1024, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", " (8): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (9): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (10): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (11): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (12): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (13): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (14): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (15): ReLU(inplace=True)\n", " (16): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (17): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (18): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (19): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (20): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (21): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (22): ReLU(inplace=True)\n", " (23): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (24): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (25): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (26): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (27): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (28): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (29): ReLU(inplace=True)\n", " (30): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (31): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (32): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (33): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (34): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (35): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (36): ReLU(inplace=True)\n", " (37): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (38): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (39): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (40): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (41): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (42): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (43): ReLU(inplace=True)\n", " (44): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (45): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (46): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (47): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (48): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (49): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (50): ReLU(inplace=True)\n", " (51): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (52): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (53): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (54): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (55): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (56): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (57): ReLU(inplace=True)\n", " (58): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (59): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (60): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (61): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (62): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (63): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (64): ReLU(inplace=True)\n", " (65): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (66): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (67): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (68): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (69): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (70): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (71): ReLU(inplace=True)\n", " (72): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (73): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (74): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (75): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (76): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (77): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (78): ReLU(inplace=True)\n", " (79): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (80): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (81): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (82): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (83): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (84): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (85): ReLU(inplace=True)\n", " (86): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (87): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (88): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (89): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (90): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (91): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (92): ReLU(inplace=True)\n", " (93): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (94): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (95): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (96): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (97): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (98): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (99): ReLU(inplace=True)\n", " (100): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (101): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (102): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (103): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (104): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (105): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (106): ReLU(inplace=True)\n", " (107): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (108): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (109): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (110): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (111): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (112): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (113): ReLU(inplace=True)\n", " (114): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (115): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (116): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (117): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (118): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (119): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (120): ReLU(inplace=True)\n", " (121): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (122): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (123): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (124): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (125): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (126): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (127): ReLU(inplace=True)\n", " (128): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (129): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (130): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (131): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (132): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (133): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (134): ReLU(inplace=True)\n", " (135): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (136): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (137): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (138): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (139): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (140): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (141): ReLU(inplace=True)\n", " (142): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (143): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (144): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (145): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (146): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (147): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (148): ReLU(inplace=True)\n", " (149): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (150): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (151): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (152): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (153): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (154): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (155): ReLU(inplace=True)\n", " (156): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (157): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (158): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (159): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (160): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (161): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (162): ReLU(inplace=True)\n", " (163): Conv2d(1024, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (164): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (165): Conv2d(512, 512, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", " (166): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (167): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (168): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (169): ReLU(inplace=True)\n", " (170): Conv2d(1024, 2048, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", " (171): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (172): Conv2d(2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (173): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (174): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (175): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (176): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (177): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (178): ReLU(inplace=True)\n", " (179): Conv2d(2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (180): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (181): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (182): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (183): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (184): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (185): ReLU(inplace=True)\n", "), Sequential(\n", " (0): AdaptiveAvgPool2d(output_size=1)\n", " (1): AdaptiveMaxPool2d(output_size=1)\n", " (2): Flatten()\n", " (3): BatchNorm1d(4096, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (4): Dropout(p=0.25, inplace=False)\n", " (5): Linear(in_features=4096, out_features=512, bias=True)\n", " (6): ReLU(inplace=True)\n", " (7): BatchNorm1d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (8): Dropout(p=0.5, inplace=False)\n", " (9): Linear(in_features=512, 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): Conv2d(3, 64, kernel_size=(7, 7), stride=(2, 2), padding=(3, 3), bias=False)\n", " (1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (2): ReLU(inplace=True)\n", " (3): MaxPool2d(kernel_size=3, stride=2, padding=1, dilation=1, ceil_mode=False)\n", " (4): Conv2d(64, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (5): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (6): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (7): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (8): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (9): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (10): ReLU(inplace=True)\n", " (11): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (12): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (13): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (14): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (15): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (16): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (17): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\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, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (21): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (22): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (23): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (24): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (25): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (26): ReLU(inplace=True)\n", " (27): Conv2d(256, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (28): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (29): Conv2d(128, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", " (30): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (31): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (32): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (33): ReLU(inplace=True)\n", " (34): Conv2d(256, 512, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", " (35): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (36): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (37): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (38): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (39): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (40): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\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, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (44): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (45): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (46): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (47): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\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, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (51): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (52): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (53): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (54): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (55): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (56): ReLU(inplace=True)\n", "), Sequential(\n", " (0): Conv2d(512, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (2): Conv2d(256, 256, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", " (3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (4): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (5): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (6): ReLU(inplace=True)\n", " (7): Conv2d(512, 1024, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", " (8): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (9): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (10): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (11): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (12): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (13): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (14): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (15): ReLU(inplace=True)\n", " (16): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (17): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (18): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (19): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (20): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (21): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (22): ReLU(inplace=True)\n", " (23): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (24): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (25): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (26): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (27): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (28): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (29): ReLU(inplace=True)\n", " (30): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (31): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (32): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (33): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (34): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (35): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (36): ReLU(inplace=True)\n", " (37): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (38): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (39): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (40): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (41): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (42): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (43): ReLU(inplace=True)\n", " (44): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (45): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (46): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (47): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (48): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (49): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (50): ReLU(inplace=True)\n", " (51): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (52): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (53): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (54): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (55): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (56): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (57): ReLU(inplace=True)\n", " (58): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (59): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (60): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (61): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (62): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (63): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (64): ReLU(inplace=True)\n", " (65): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (66): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (67): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (68): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (69): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (70): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (71): ReLU(inplace=True)\n", " (72): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (73): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (74): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (75): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (76): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (77): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (78): ReLU(inplace=True)\n", " (79): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (80): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (81): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (82): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (83): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (84): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (85): ReLU(inplace=True)\n", " (86): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (87): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (88): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (89): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (90): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (91): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (92): ReLU(inplace=True)\n", " (93): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (94): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (95): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (96): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (97): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (98): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (99): ReLU(inplace=True)\n", " (100): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (101): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (102): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (103): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (104): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (105): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (106): ReLU(inplace=True)\n", " (107): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (108): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (109): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (110): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (111): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (112): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (113): ReLU(inplace=True)\n", " (114): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (115): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (116): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (117): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (118): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (119): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (120): ReLU(inplace=True)\n", " (121): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (122): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (123): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (124): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (125): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (126): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (127): ReLU(inplace=True)\n", " (128): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (129): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (130): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (131): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (132): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (133): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (134): ReLU(inplace=True)\n", " (135): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (136): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (137): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (138): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (139): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (140): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (141): ReLU(inplace=True)\n", " (142): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (143): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (144): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (145): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (146): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (147): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (148): ReLU(inplace=True)\n", " (149): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (150): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (151): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (152): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (153): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (154): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (155): ReLU(inplace=True)\n", " (156): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (157): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (158): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (159): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (160): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (161): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (162): ReLU(inplace=True)\n", " (163): Conv2d(1024, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (164): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (165): Conv2d(512, 512, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", " (166): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (167): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (168): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (169): ReLU(inplace=True)\n", " (170): Conv2d(1024, 2048, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", " (171): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (172): Conv2d(2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (173): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (174): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (175): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (176): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (177): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (178): ReLU(inplace=True)\n", " (179): Conv2d(2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (180): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (181): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", " (182): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (183): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n", " (184): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (185): ReLU(inplace=True)\n", "), Sequential(\n", " (0): AdaptiveAvgPool2d(output_size=1)\n", " (1): AdaptiveMaxPool2d(output_size=1)\n", " (2): Flatten()\n", " (3): BatchNorm1d(4096, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (4): Dropout(p=0.25, inplace=False)\n", " (5): Linear(in_features=4096, out_features=512, bias=True)\n", " (6): ReLU(inplace=True)\n", " (7): BatchNorm1d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (8): Dropout(p=0.5, inplace=False)\n", " (9): Linear(in_features=512, out_features=5, bias=True)\n", ")], add_time=True, silent=False)" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "learner = cnn_learner(fold_data, models.resnet101, metrics=our_metrics).to_fp16()\n", "learner" ] }, { "cell_type": "code", "execution_count": 13, "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
02.252474#na#00:11

\n", "\n", "

\n", " \n", " \n", " 83.33% [40/48 00:09<00:01 7.5227]\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": 14, "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.7337570.7519250.7164950.7107830.7557740.7368010.73781200:14
11.2737870.4765630.8453610.8328870.8644550.8551190.86809500:14
21.0622740.5109430.8247420.8171800.8511270.8390820.85149700:14
30.8916240.2638950.8762890.8836790.8823940.8823080.88517700:15
40.8104580.3554300.8917530.8909600.8980610.8950100.89196800:15
50.8031880.3627270.8969070.8931730.9064110.9018300.89458000:14
60.7217640.2391870.9175260.9120850.9261280.9222350.91863000:14
70.6084300.3380200.8917530.8871060.9045510.8993600.91952400:14
80.5336150.3181960.9072160.9058340.9138850.9119870.88763700:14
90.4729720.2455160.9226800.9196780.9298320.9269580.91991400:15
100.4704900.2688670.9020620.9063950.9038800.9035370.88338300:15
110.4138020.1732820.9484540.9520540.9547350.9540900.95221600:14
120.4088880.1973090.9329900.9369300.9278580.9291220.91018900:14
130.3510570.2006170.9536080.9588560.9597310.9592190.95411100:15
140.3250930.1638680.9484540.9498180.9594640.9572570.97341500:15
150.2808290.1962270.9587630.9614820.9630720.9618270.95599800:14
160.2601220.2058600.9432990.9432710.9432430.9428110.94115300:15
170.2517460.1337390.9587630.9639740.9592570.9600980.96651900:15
180.2571980.1699660.9587630.9599340.9596350.9592360.93773000:15
190.2352700.1876010.9484540.9463150.9509350.9498000.94015400:14
200.2093210.1963630.9536080.9555400.9553800.9550450.94641100:15
210.1811270.1794620.9484540.9506090.9509350.9506180.94495100:15
220.1857820.1609030.9536080.9548120.9551910.9550020.94625100:15
230.1893290.1578690.9587630.9596250.9628830.9620030.95998400:15
240.1898900.1506760.9536080.9548120.9551910.9550020.94625100:15
250.1685340.1670270.9536080.9548120.9551910.9550020.94625100:14
260.1456770.1593110.9536080.9548120.9551910.9550020.94625100:15
270.1229610.1622900.9484540.9506090.9509350.9506180.94495100:14
280.1531920.1823180.9536080.9548120.9551910.9550020.94625100:15
290.1478660.1557660.9536080.9548120.9551910.9550020.94625100:15
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Better model found at epoch 0 with accuracy value: 0.7164948582649231.\n", "Better model found at epoch 1 with accuracy value: 0.8453608155250549.\n", "Better model found at epoch 3 with accuracy value: 0.876288652420044.\n", "Better model found at epoch 4 with accuracy value: 0.8917526006698608.\n", "Better model found at epoch 5 with accuracy value: 0.8969072103500366.\n", "Better model found at epoch 6 with accuracy value: 0.9175257682800293.\n", "Better model found at epoch 9 with accuracy value: 0.9226804375648499.\n", "Better model found at epoch 11 with accuracy value: 0.9484536051750183.\n", "Better model found at epoch 13 with accuracy value: 0.9536082744598389.\n", "Better model found at epoch 15 with accuracy value: 0.9587628841400146.\n" ] } ], "source": [ "learner.fit_one_cycle(30, max_lr=slice(1.5e-03), callbacks=model_callback(learner, \"best-resnet101-sipak-multiclass-fold1-stage1\"))\n", "learner.save(\"last-resnet101-sipak-multiclass-fold1-stage1\")" ] }, { "cell_type": "code", "execution_count": 16, "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.324476#na#00:12

\n", "\n", "

\n", " \n", " \n", " 18.75% [9/48 00:05<00:25 0.8665]\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-resnet101-sipak-multiclass-fold1-stage1\")\n", "learner = to_fp16(learner)\n", "learner.unfreeze()\n", "learner.lr_find()\n", "learner.recorder.plot()" ] }, { "cell_type": "code", "execution_count": 17, "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.2491610.2004320.9484540.9464620.9541830.9522510.94822700:17
10.2673380.1848770.9587630.9599340.9596350.9592360.94366100:16
20.2652550.1894210.9536080.9564220.9537920.9537540.94248900:16
30.2481500.1955210.9484540.9460630.9461000.9458380.92412200:16
40.2798920.1854180.9484540.9458390.9507460.9496330.93569900:16
50.2534330.2044130.9536080.9561500.9553800.9548250.94237900:16
60.2354910.1935550.9587630.9564590.9630720.9608800.95152300:16
70.2560610.1888360.9587630.9601640.9628830.9619370.95569200:16
80.2980840.1962790.9587630.9560640.9582370.9571600.93965600:16
90.2484660.2075850.9484540.9512010.9509350.9505410.94069500:16
100.2487480.1953260.9536080.9563110.9586280.9575370.95437400:16
110.2505120.2141030.9536080.9505340.9537920.9529120.94219900:16
120.2311210.2123060.9484540.9517710.9495370.9494250.94543900:16
130.2238810.1925230.9639180.9602860.9673270.9653110.95282900:16
140.2329980.1874300.9484540.9526200.9462890.9466380.92919200:16
150.2359790.1833200.9639180.9651550.9673270.9662510.95731700:17
160.2319870.1798800.9536080.9505640.9584390.9567030.95382300:15
170.2332310.1911510.9536080.9501870.9551910.9540580.94168100:16
180.2175150.1884430.9536080.9548120.9551910.9550020.94625100:16
190.2209460.1839890.9587630.9553690.9628830.9609850.95118600:16
200.2285360.1866570.9536080.9513570.9586280.9565780.94988100:16
210.2327530.1892530.9587630.9614820.9630720.9618270.95599800:16
220.2227380.1852410.9536080.9563110.9586280.9575370.95437400:17
230.2400490.1867730.9639180.9602860.9673270.9653110.95282900:17
240.2675560.1854020.9484540.9512010.9509350.9505410.94069500:16
250.2596580.1905570.9639180.9602860.9673270.9653110.95282900:17
260.2325630.1934640.9587630.9549990.9628830.9610590.95546800:16
270.2307120.1850130.9536080.9556900.9584390.9577800.95818900:16
280.2142040.1993810.9536080.9551540.9551910.9549290.94197600:16
290.2025830.1862660.9536080.9563110.9586280.9575370.95437400:16
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Better model found at epoch 0 with accuracy value: 0.9484536051750183.\n", "Better model found at epoch 1 with accuracy value: 0.9587628841400146.\n", "Better model found at epoch 13 with accuracy value: 0.9639175534248352.\n" ] } ], "source": [ "learner.fit_one_cycle(30, max_lr=slice(1.5e-06), callbacks=model_callback(learner, \"best-resnet101-sipak-multiclass-fold1-stage2\"))\n", "learner.save(\"last-resnet101-sipak-multiclass-fold1-stage2\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Fold-2" ] }, { "cell_type": "code", "execution_count": 18, "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": 18, "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": 20, "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.251005#na#00:11

\n", "\n", "

\n", " \n", " \n", " 50.00% [24/48 00:08<00:08 0.6896]\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-resnet101-sipak-multiclass-fold1-stage2\")\n", "learner = to_fp16(learner)\n", "learner.data = fold_data\n", "learner.freeze()\n", "learner = to_fp16(learner)\n", "learner.lr_find()\n", "learner.recorder.plot()" ] }, { "cell_type": "code", "execution_count": 21, "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.2254540.0716060.9792750.9846150.9800470.9806470.98133500:14
10.2438060.0722980.9792750.9846150.9800470.9806470.98133500:14
20.2784660.0796340.9637310.9732320.9646400.9655380.95943300:14
30.2601630.0701870.9740930.9811320.9755020.9761570.97970500:15
40.2581680.0589130.9844560.9882960.9837510.9845390.97820100:14
50.2713820.0662110.9792750.9846150.9800470.9806470.98133500:15
60.2626760.0620330.9844560.9882350.9837510.9844520.98288100:14
70.3019060.0786390.9740930.9811320.9755020.9761570.97970500:15
80.2912950.0675540.9844560.9872910.9832880.9840240.98293400:14
90.2617140.0643270.9792750.9846150.9800470.9806470.98133500:16
100.2723660.0635110.9792750.9844620.9800470.9807350.97665600:14
110.2902140.0672950.9740930.9800700.9763430.9767350.97521600:14
120.2833310.0620680.9740930.9797680.9758810.9764480.97985200:15
130.2739540.0654180.9844560.9882960.9837510.9845390.97820100:13
140.2668430.0613970.9844560.9882350.9837510.9844520.98288100:15
150.2383760.0738490.9792750.9846150.9800470.9806470.98133500:15
160.2461290.0687060.9689120.9754250.9721770.9725450.97376200:14
170.2661290.0572000.9844560.9872910.9832880.9840240.98293400:15
180.2779720.0605490.9792750.9846150.9800470.9806470.98133500:15
190.2713810.0800620.9689120.9757260.9672520.9685120.96133500:15
200.2430830.0631890.9740930.9797680.9758810.9764480.97985200:15
210.2530320.0607970.9896370.9920000.9874550.9882430.98442900:14
220.2340980.0621180.9792750.9844620.9800470.9807350.97665600:14
230.2751730.0664740.9740930.9800700.9763430.9767350.97521600:15
240.2877840.0645300.9844560.9882350.9837510.9844520.98288100:14
250.2910230.0642970.9844560.9882350.9837510.9844520.98288100:15
260.2771260.0657690.9792750.9846150.9800470.9806470.98133500:14
270.2755730.0651780.9689120.9754250.9721770.9725450.97376200:15
280.2536280.0714250.9740930.9797680.9758810.9764480.97985200:15
290.2646870.0662670.9689120.9754250.9721770.9725450.97376200:15
" ], "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 4 with accuracy value: 0.984455943107605.\n", "Better model found at epoch 21 with accuracy value: 0.9896373152732849.\n" ] } ], "source": [ "learner.fit_one_cycle(30, max_lr=slice(6e-07), callbacks=model_callback(learner, \"best-resnet101-sipak-multiclass-fold2-stage1\"))\n", "learner.save(\"last-resnet101-sipak-multiclass-fold2-stage1\")" ] }, { "cell_type": "code", "execution_count": 23, "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.280903#na#00:12

\n", "\n", "

\n", " \n", " \n", " 16.67% [8/48 00:05<00:29 0.5799]\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-resnet101-sipak-multiclass-fold2-stage1\")\n", "learner = to_fp16(learner)\n", "learner.unfreeze()\n", "learner.lr_find()\n", "learner.recorder.plot()" ] }, { "cell_type": "code", "execution_count": 24, "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.3151870.0630410.9792750.9846150.9800470.9806470.98133500:16
10.2799550.0535320.9844560.9882350.9837510.9844520.98288100:16
20.2249870.0589060.9896370.9922820.9874550.9883280.97974700:16
30.2058950.0623300.9792750.9846150.9800470.9806470.98133500:17
40.1974130.0601300.9792750.9836900.9800470.9805640.97675300:16
50.1915240.0590910.9792750.9835880.9795840.9803200.97672800:16
60.1841290.0643750.9740930.9809120.9712050.9726700.96219900:17
70.1530720.0640000.9689120.9751360.9713350.9719810.96898800:16
80.1778570.0647450.9740930.9791110.9758810.9763630.97529200:17
90.1675560.0574700.9740930.9799130.9750390.9759220.97040000:16
100.1378740.0605070.9689120.9749940.9704930.9712740.96885800:16
110.1449330.0875540.9637310.9710860.9659480.9667470.96718200:16
120.1237080.0727660.9689120.9709720.9713350.9712380.96460900:16
130.1482990.0586620.9740930.9788970.9792510.9791510.99233000:16
140.1332450.0451160.9792750.9831270.9829550.9829080.99386100:16
150.0939550.0581290.9689120.9748910.9751680.9750890.98615200:17
160.0923920.0720030.9689120.9746720.9755470.9752870.98625000:17
170.1005320.0652650.9689120.9744220.9751680.9749460.98620800:15
180.0938150.0666250.9792750.9827010.9834180.9831880.98930600:16
190.0894650.0626460.9792750.9825760.9825760.9825760.99384200:16
200.0800740.0575430.9740930.9788970.9792510.9791510.99233000:16
210.0692910.0573220.9792750.9833490.9830390.9830220.99382300:16
220.0684460.0582210.9792750.9834180.9834180.9834180.99384200:15
230.0620770.0727770.9740930.9789090.9793350.9791540.98769700:16
240.0682380.0781420.9637310.9714670.9710860.9708490.98457300:17
250.0599810.0566520.9792750.9831520.9834180.9833350.98926200:16
260.0482530.0687500.9740930.9794000.9788720.9789480.99227500:16
270.0645870.0761330.9637310.9705090.9713800.9710080.98477700:16
280.0497760.0634740.9740930.9790040.9797140.9795450.98773400:17
290.0461930.0676630.9689120.9748910.9751680.9750890.98615200: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 1 with accuracy value: 0.984455943107605.\n", "Better model found at epoch 2 with accuracy value: 0.9896373152732849.\n" ] } ], "source": [ "learner.fit_one_cycle(30, max_lr=slice(1.8e-04), callbacks=model_callback(learner, \"best-resnet101-sipak-multiclass-fold2-stage2\"))\n", "learner.save(\"last-resnet101-sipak-multiclass-fold2-stage2\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Fold-3" ] }, { "cell_type": "code", "execution_count": 25, "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": 25, "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": 26, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "
\n", " \n", " \n", " 33.33% [1/3 00:11<00:23]\n", "
\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.233279#na#00:11

\n", "\n", "

\n", " \n", " \n", " 50.00% [24/48 00:08<00:08 0.6153]\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-resnet101-sipak-multiclass-fold2-stage2\")\n", "learner = to_fp16(learner)\n", "learner.data = fold_data\n", "learner.freeze()\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.2510790.0492690.9896370.9913890.9921970.9920090.99691800:16
10.2196830.0660090.9792750.9829790.9785060.9791660.98160000:14
20.2081050.0686500.9689120.9762330.9755300.9753470.99077200:15
30.2311040.0655830.9844560.9885380.9875000.9875240.99537000:14
40.2150110.1007730.9533680.9638700.9579760.9590430.97217400:15
50.2121650.1462080.9533680.9641080.9574460.9586530.98137300:14
60.1792540.1660710.9378240.9492180.9497730.9486970.96472000:15
70.2076230.1532470.9585490.9684030.9678790.9679610.98296900:15
80.2070550.1368010.9481870.9593120.9587880.9588700.97058300:15
90.2399480.1507780.9326420.9489530.9432120.9435030.96612900:14
100.2247390.1581800.9326420.9436420.9470450.9451510.95941100:15
110.2311150.1559520.9274610.9426320.9378250.9385620.94786700:14
120.1935040.1905420.9378240.9435510.9454760.9446530.93632200:14
130.1979290.1997260.9274610.9402660.9375220.9367740.94574400:14
140.1872450.1505200.9533680.9612510.9578250.9578600.97257000:15
150.1601910.1930940.9326420.9368960.9427490.9408110.94307700:14
160.1582820.1993450.9274610.9421250.9379000.9366110.95809500:15
170.1282170.1793990.9326420.9379000.9413100.9394250.93873600:14
180.1159520.1882940.9274610.9425400.9376730.9381020.95737100:15
190.1180800.1504060.9378240.9509650.9458550.9462390.96496600:14
200.1047350.1806010.9326420.9419830.9471970.9457220.97126400:15
210.1242090.1741050.9274610.9355210.9418940.9403710.94782100:14
220.1101430.1815190.9222800.9393400.9331280.9338550.94647100:14
230.1238370.1687540.9430050.9516700.9509310.9501900.95033900:15
240.1070050.1598390.9430050.9557890.9504000.9505570.96660700:15
250.1001580.1695000.9430050.9557890.9504000.9505570.96660700:15
260.1082370.1586710.9481870.9593370.9591670.9591230.97531700:15
270.0874750.1642770.9430050.9557890.9504000.9505570.96660700:15
280.0784870.1819790.9430050.9557890.9504000.9505570.96660700:14
290.0697180.1731210.9481870.9595920.9545670.9549200.96801200:15
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Better model found at epoch 0 with accuracy value: 0.9896373152732849.\n" ] } ], "source": [ "learner.fit_one_cycle(30, max_lr=slice(1.2e-03), callbacks=model_callback(learner, \"best-resnet101-sipak-multiclass-fold3-stage1\"))\n", "learner.save(\"last-resnet101-sipak-multiclass-fold3-stage1\")" ] }, { "cell_type": "code", "execution_count": 30, "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.315675#na#00:12

\n", "\n", "

\n", " \n", " \n", " 8.33% [4/48 00:04<00:50 0.4543]\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-resnet101-sipak-multiclass-fold3-stage1\")\n", "learner = to_fp16(learner)\n", "learner.unfreeze()\n", "learner.lr_find()\n", "learner.recorder.plot()" ] }, { "cell_type": "code", "execution_count": 31, "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.2264130.0466990.9896370.9919840.9916670.9916480.99691500:16
10.1945020.0410510.9844560.9877330.9875000.9873470.99538800:15
20.2112310.0564260.9844560.9872340.9880300.9876670.99081900:17
30.2072010.0400631.0000001.0000001.0000001.0000001.00000000:17
40.2402100.0490450.9896370.9913890.9921970.9920090.99691800:16
50.2225160.0527380.9792750.9835980.9838640.9835460.98928400:16
60.2214410.0462890.9948190.9959180.9963640.9962500.99845300:16
70.2314020.0498230.9844560.9870490.9880300.9877470.99539300:16
80.2277130.0444710.9896370.9913890.9921970.9920090.99691800:16
90.2209670.0538050.9844560.9871380.9885610.9881710.99079100:17
100.2367450.0548140.9844560.9876640.9880300.9879270.99537400:16
110.2354880.0532960.9844560.9870490.9880300.9877470.99539300:16
120.2229500.0496880.9948190.9959180.9963640.9962500.99845300:16
130.2159170.0543030.9792750.9829790.9843940.9839170.98929400:16
140.2121900.0449841.0000001.0000001.0000001.0000001.00000000:16
150.2090630.0527950.9792750.9829790.9843940.9839170.98929400:16
160.2403140.0445990.9948190.9955560.9958330.9957480.99845800:16
170.2197000.0485650.9844560.9870490.9880300.9877470.99539300:17
180.1893960.0379950.9948190.9959180.9963640.9962500.99845300:16
190.2078820.0526360.9740930.9789850.9802270.9796430.98780800:16
200.2102190.0635810.9792750.9829710.9785060.9792530.98922800:15
210.1946640.0509650.9948190.9959180.9963640.9962500.99845300:16
220.2048930.0481220.9844560.9876640.9880300.9879270.99537400:16
230.2055170.0494320.9844560.9870490.9880300.9877470.99539300:16
240.2095090.0455470.9948190.9955560.9958330.9957480.99845800:15
250.2251890.0420520.9948190.9955560.9958330.9957480.99845800:16
260.2197700.0455170.9948190.9964290.9958330.9959280.99845200:16
270.2266950.0528220.9948190.9959180.9963640.9962500.99845300:16
280.2075380.0360620.9948190.9955560.9958330.9957480.99845800:17
290.2234390.0435590.9896370.9913890.9921970.9920090.99691800:16
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Better model found at epoch 0 with accuracy value: 0.9896373152732849.\n", "Better model found at epoch 3 with accuracy value: 1.0.\n" ] } ], "source": [ "learner.fit_one_cycle(30, max_lr=slice(6e-07), callbacks=model_callback(learner, \"best-resnet101-sipak-multiclass-fold3-stage2\"))\n", "learner.save(\"last-resnet101-sipak-multiclass-fold3-stage2\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Fold-4" ] }, { "cell_type": "code", "execution_count": 32, "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": 32, "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": 33, "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.201269#na#00:12

\n", "\n", "

\n", " \n", " \n", " 47.92% [23/48 00:07<00:08 0.7158]\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-resnet101-sipak-multiclass-fold3-stage2\")\n", "learner = to_fp16(learner)\n", "learner.data = fold_data\n", "learner.freeze()\n", "learner = to_fp16(learner)\n", "learner.lr_find()\n", "learner.recorder.plot()" ] }, { "cell_type": "code", "execution_count": 34, "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.2524290.0847950.9740930.9755520.9805560.9792610.97140300:15
10.2059520.0969860.9689120.9716330.9763890.9750060.97000200:14
20.1874800.0886810.9740930.9755520.9805560.9792610.97140300:14
30.2171490.0818100.9792750.9796300.9847220.9834950.97281300:15
40.2436000.0902630.9740930.9755990.9802780.9792350.96664000:15
50.2466940.0809620.9740930.9755520.9805560.9792610.97140300:14
60.2280900.0899500.9740930.9755520.9805560.9792610.97140300:14
70.2178430.0918550.9740930.9755520.9805560.9792610.97140300:15
80.2126600.0881220.9689120.9716330.9763890.9750060.97000200:15
90.2361640.0891500.9740930.9755520.9805560.9792610.97140300:14
100.2266060.0779480.9740930.9755520.9805560.9792610.97140300:15
110.2171360.0874620.9740930.9755520.9805560.9792610.97140300:15
120.2135050.0945140.9740930.9755520.9805560.9792610.97140300:14
130.2491110.0940090.9740930.9755520.9805560.9792610.97140300:16
140.2465840.1073580.9637310.9679600.9726850.9711100.96414300:14
150.2242900.0790600.9689120.9714400.9761110.9750120.96524600:15
160.2152250.0886000.9740930.9755520.9805560.9792610.97140300:15
170.2044710.0880160.9689120.9714400.9761110.9750120.96524600:14
180.2059980.0843610.9689120.9712080.9761110.9749230.96979300:15
190.1824140.0940640.9740930.9755520.9805560.9792610.97140300:14
200.1897140.0924280.9689120.9714400.9761110.9750120.96524600:15
210.2091400.0841120.9740930.9755520.9805560.9792610.97140300:14
220.2165650.0894800.9740930.9755520.9805560.9792610.97140300:16
230.1879380.0825800.9740930.9755520.9805560.9792610.97140300:15
240.2032400.0945780.9740930.9755990.9802780.9792350.96664000:15
250.2241830.0873520.9740930.9755520.9805560.9792610.97140300:15
260.1796150.0928450.9740930.9755520.9805560.9792610.97140300:15
270.2061960.0930850.9740930.9755990.9802780.9792350.96664000:14
280.1862900.0911310.9740930.9755520.9805560.9792610.97140300:15
290.1843280.0895090.9689120.9716330.9763890.9750060.97000200:15
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Better model found at epoch 0 with accuracy value: 0.9740932583808899.\n", "Better model found at epoch 3 with accuracy value: 0.9792746305465698.\n" ] } ], "source": [ "learner.fit_one_cycle(30, max_lr=slice(3e-06), callbacks=model_callback(learner, \"best-resnet101-sipak-multiclass-fold4-stage1\"))\n", "learner.save(\"last-resnet101-sipak-multiclass-fold4-stage1\")" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "
\n", " \n", " \n", " 33.33% [1/3 00:13<00:27]\n", "
\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.338839#na#00:13

\n", "\n", "

\n", " \n", " \n", " 16.67% [8/48 00:05<00:29 0.6735]\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.purge()\n", "learner.load(\"best-resnet101-sipak-multiclass-fold4-stage1\")\n", "learner = to_fp16(learner)\n", "learner.unfreeze()\n", "learner.lr_find()\n", "learner.recorder.plot()" ] }, { "cell_type": "code", "execution_count": 37, "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.2373720.0894380.9740930.9755520.9805560.9792610.97140300:17
10.1991980.0874160.9740930.9755520.9805560.9792610.97140300:20
20.2169930.0961720.9689120.9716330.9763890.9750060.97000200:20
30.2127930.0850780.9792750.9796300.9847220.9834950.97281300:17
40.2142100.0983370.9740930.9755520.9805560.9792610.97140300:22
50.2100290.0949610.9792750.9796300.9847220.9834950.97281300:16
60.2044350.0931330.9637310.9674470.9719440.9707690.96386100:17
70.2348170.0944100.9689120.9714400.9761110.9750120.96524600:18
80.1999850.0830760.9740930.9755520.9805560.9792610.97140300:19
90.1650550.0960880.9792750.9796300.9847220.9834950.97281300:19
100.1690970.1000870.9792750.9796300.9847220.9834950.97281300:17
110.1598860.0956010.9740930.9755520.9805560.9792610.97140300:19
120.1642540.1128330.9585490.9632880.9676850.9664650.96199400:20
130.1566570.0978280.9792750.9796300.9847220.9834950.97281300:20
140.1584430.0928760.9740930.9755520.9805560.9792610.97140300:18
150.1758550.0971630.9740930.9755520.9805560.9792610.97140300:18
160.1635280.0909050.9689120.9714400.9761110.9750120.96524600:18
170.1557290.1131830.9740930.9755520.9805560.9792610.97140300:20
180.1907950.1079780.9740930.9756960.9805560.9794180.97129000:19
190.1720400.1037060.9689120.9712080.9761110.9749230.96979300:17
200.1706900.0989880.9740930.9755520.9805560.9792610.97140300:18
210.1426510.0974100.9740930.9755520.9805560.9792610.97140300:17
220.1383760.1040370.9740930.9752860.9798150.9787440.97129000:17
230.1369090.0990490.9689120.9712080.9761110.9749230.96979300:20
240.1395860.0978170.9637310.9670190.9716670.9705610.96817200:18
250.1288820.1082210.9792750.9800240.9842590.9832360.97278800:16
260.1292540.1048870.9637310.9675300.9713890.9703400.96794800:16
270.1517060.0977300.9792750.9796300.9847220.9834950.97281300:20
280.1509810.1021930.9792750.9796300.9847220.9834950.97281300:18
290.1358700.0970110.9740930.9754490.9802780.9791350.97120300:17
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Better model found at epoch 0 with accuracy value: 0.9740932583808899.\n", "Better model found at epoch 3 with accuracy value: 0.9792746305465698.\n" ] } ], "source": [ "learner.fit_one_cycle(30, max_lr=slice(2.7e-05), callbacks=model_callback(learner, \"best-resnet101-sipak-multiclass-fold4-stage2\"))\n", "learner.save(\"last-resnet101-sipak-multiclass-fold4-stage2\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Fold-5" ] }, { "cell_type": "code", "execution_count": 38, "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": 38, "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": 41, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "
\n", " \n", " \n", " 33.33% [1/3 00:11<00:23]\n", "
\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.233659#na#00:11

\n", "\n", "

\n", " \n", " \n", " 50.00% [24/48 00:09<00:09 0.6411]\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.purge()\n", "learner.load(\"best-resnet101-sipak-multiclass-fold4-stage2\")\n", "learner = to_fp16(learner)\n", "learner.data = fold_data\n", "learner.freeze()\n", "learner = to_fp16(learner)\n", "learner.lr_find()\n", "learner.recorder.plot()" ] }, { "cell_type": "code", "execution_count": 42, "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.2514200.0297960.9948190.9963640.9957450.9958430.99847100:16
10.2532170.0272720.9948190.9963640.9957450.9958430.99847100:15
20.2643320.0300950.9948190.9963640.9957450.9958430.99847100:14
30.2418470.0253570.9948190.9963640.9957450.9958430.99847100:15
40.2385560.0289830.9948190.9963640.9957450.9958430.99847100:17
50.2245890.0249300.9948190.9963640.9957450.9958430.99847100:15
60.2115240.0273830.9948190.9963640.9957450.9958430.99847100:16
70.2090090.0256150.9948190.9963640.9957450.9958430.99847100:15
80.1817000.0258870.9948190.9963640.9957450.9958430.99847100:16
90.2029410.0273270.9948190.9963640.9957450.9958430.99847100:15
100.2057790.0238680.9948190.9963640.9957450.9958430.99847100:16
110.1934450.0250190.9948190.9963640.9957450.9958430.99847100:16
120.2045730.0322520.9948190.9963640.9957450.9958430.99847100:14
130.1896100.0245400.9948190.9963640.9957450.9958430.99847100:17
140.2172280.0274040.9948190.9963640.9957450.9958430.99847100:16
150.2159650.0288640.9896370.9920410.9920410.9920410.99694300:17
160.2039760.0293720.9948190.9963640.9957450.9958430.99847100:16
170.1947690.0276740.9948190.9963640.9957450.9958430.99847100:16
180.2215200.0257790.9948190.9963640.9957450.9958430.99847100:16
190.2230550.0265980.9896370.9920410.9920410.9920410.99694300:15
200.2521240.0275090.9948190.9963640.9957450.9958430.99847100:17
210.2358760.0336470.9948190.9963640.9957450.9958430.99847100:18
220.2198260.0246100.9948190.9963640.9957450.9958430.99847100:15
230.2310280.0264320.9896370.9920410.9920410.9920410.99694300:18
240.2268830.0280680.9948190.9963640.9957450.9958430.99847100:18
250.2135530.0260220.9948190.9963640.9957450.9958430.99847100:14
260.2131980.0229860.9948190.9963640.9957450.9958430.99847100:17
270.1936770.0270450.9948190.9963640.9957450.9958430.99847100:16
280.2063990.0246690.9948190.9963640.9957450.9958430.99847100:18
290.2217660.0259860.9948190.9958330.9962960.9961790.99847200:15
" ], "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" ] } ], "source": [ "learner.fit_one_cycle(30, max_lr=slice(1e-06), callbacks=model_callback(learner, \"best-resnet101-sipak-multiclass-fold5-stage1\"))\n", "learner.save(\"last-resnet101-sipak-multiclass-fold5-stage1\")" ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "
\n", " \n", " \n", " 33.33% [1/3 00:13<00:27]\n", "
\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.326871#na#00:13

\n", "\n", "

\n", " \n", " \n", " 12.50% [6/48 00:04<00:32 0.5110]\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(\"last-resnet101-sipak-multiclass-fold5-stage1\") # change to best if last not better\n", "learner = to_fp16(learner)\n", "learner.unfreeze()\n", "learner.lr_find()\n", "learner.recorder.plot()" ] }, { "cell_type": "code", "execution_count": 44, "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.1935180.0205220.9948190.9963640.9957450.9958430.99847100:18
10.1982060.0261620.9948190.9963640.9957450.9958430.99847100:19
20.2190100.0270060.9896370.9920410.9920410.9920410.99694300:17
30.2215810.0258690.9948190.9963640.9957450.9958430.99847100:20
40.1935960.0277570.9948190.9963640.9957450.9958430.99847100:18
50.2137280.0273560.9948190.9963640.9957450.9958430.99847100:17
60.2187610.0314410.9948190.9963640.9957450.9958430.99847100:19
70.1863690.0300130.9948190.9963640.9957450.9958430.99847100:16
80.1991480.0209640.9948190.9963640.9957450.9958430.99847100:18
90.2106090.0242480.9948190.9963640.9957450.9958430.99847100:21
100.2204030.0266210.9948190.9963640.9957450.9958430.99847100:17
110.2431600.0243490.9948190.9963640.9957450.9958430.99847100:19
120.2336920.0294170.9948190.9963640.9957450.9958430.99847100:17
130.2211080.0248510.9948190.9963640.9957450.9958430.99847100:17
140.2294050.0258850.9948190.9963640.9957450.9958430.99847100:19
150.2296720.0271930.9948190.9963640.9957450.9958430.99847100:17
160.2368970.0256500.9896370.9920410.9920410.9920410.99694300:17
170.2148040.0299690.9948190.9963640.9957450.9958430.99847100:17
180.2224670.0271050.9948190.9963640.9957450.9958430.99847100:18
190.2049090.0253710.9948190.9963640.9957450.9958430.99847100:18
200.2294770.0252730.9948190.9963640.9957450.9958430.99847100:17
210.2169990.0290960.9948190.9963640.9957450.9958430.99847100:19
220.2013640.0288820.9948190.9963640.9957450.9958430.99847100:19
230.2168540.0273590.9948190.9963640.9957450.9958430.99847100:17
240.2630090.0289650.9948190.9963640.9957450.9958430.99847100:19
250.2232000.0269850.9948190.9963640.9957450.9958430.99847100:18
260.2538160.0282410.9948190.9963640.9957450.9958430.99847100:19
270.2429020.0270640.9948190.9963640.9957450.9958430.99847100:16
280.2369880.0281840.9896370.9920410.9920410.9920410.99694300:18
290.2167970.0260650.9948190.9963640.9957450.9958430.99847100:19
" ], "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" ] } ], "source": [ "learner.fit_one_cycle(30, max_lr=slice(9e-07), callbacks=model_callback(learner, \"best-resnet101-sipak-multiclass-fold5-stage2\"))\n", "learner.save(\"last-resnet101-sipak-multiclass-fold5-stage2\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Exporting the final model" ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [], "source": [ "learner.freeze()\n", "learner.export(\"best-resnet101-sipak-multiclass.pkl\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Testing on 30 images (in valid folder)" ] }, { "cell_type": "code", "execution_count": 46, "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": 46, "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": 47, "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": 48, "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": 49, "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": 50, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['abnormal_Dyskeratotic',\n", " 'abnormal_Koilocytotic',\n", " 'benign_Metaplastic',\n", " 'normal_Parabasal',\n", " 'normal_Superficial-Intermediate']" ] }, "execution_count": 50, "metadata": {}, "output_type": "execute_result" } ], "source": [ "multi_classes = all_data.classes\n", "multi_classes" ] }, { "cell_type": "code", "execution_count": 51, "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": 52, "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": 53, "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": 54, "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": 55, "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": 56, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " accuracy precision recall f_beta kappa_score\n", "0 0.963918 0.960286 0.967327 0.965311 0.952829\n", "1 0.989637 0.992282 0.987455 0.988328 0.979747\n", "2 1.000000 1.000000 1.000000 1.000000 1.000000\n", "3 0.979275 0.979630 0.984722 0.983495 0.972813\n", "4 0.994819 0.996364 0.995745 0.995843 0.998471\n", "*-**-**-**-**-**-**-**-**-**-*\n", "Results :-\n", "Accuracy : 98.5530 % | 1.1147 %\n", "Precision : 98.5712 % | 1.2604 %\n", "Recall : 98.7050 % | 0.8820 %\n", "F_beta : 98.6595 % | 0.9754 %\n", "Kappa_score : 98.0772 % | 1.4771 %\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": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.9" } }, "nbformat": 4, "nbformat_minor": 4 }