{ "nbformat": 4, "nbformat_minor": 0, "metadata": { "colab": { "name": "Sipakmed K-Fold CV in fastai.ipynb", "provenance": [], "machine_shape": "hm" }, "kernelspec": { "name": "python3", "display_name": "Python 3" }, "accelerator": "GPU", "widgets": { "application/vnd.jupyter.widget-state+json": { "b138df8514524d63bd8527cc50c2cd06": { "model_module": "@jupyter-widgets/controls", "model_name": "HBoxModel", "state": { "_view_name": "HBoxView", "_dom_classes": [], "_model_name": "HBoxModel", "_view_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_view_count": null, "_view_module_version": "1.5.0", "box_style": "", "layout": "IPY_MODEL_01a7e9cdba0146ad893c004555928dfe", "_model_module": "@jupyter-widgets/controls", "children": [ "IPY_MODEL_407d99c38c0846cab7f2749ce26cd2d1", "IPY_MODEL_cee996f3137b4f8eb1aebd42096f0932" ] } }, "01a7e9cdba0146ad893c004555928dfe": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "state": { "_view_name": "LayoutView", "grid_template_rows": null, "right": null, "justify_content": null, "_view_module": "@jupyter-widgets/base", "overflow": null, "_model_module_version": "1.2.0", "_view_count": null, "flex_flow": null, "width": null, "min_width": null, "border": null, "align_items": null, "bottom": null, "_model_module": "@jupyter-widgets/base", "top": null, "grid_column": null, "overflow_y": null, "overflow_x": null, "grid_auto_flow": null, "grid_area": null, "grid_template_columns": null, "flex": null, "_model_name": "LayoutModel", "justify_items": null, "grid_row": null, "max_height": null, "align_content": null, "visibility": null, "align_self": null, "height": null, "min_height": null, "padding": null, "grid_auto_rows": null, "grid_gap": null, "max_width": null, "order": null, "_view_module_version": "1.2.0", "grid_template_areas": null, "object_position": null, "object_fit": null, "grid_auto_columns": null, "margin": null, "display": null, "left": null } }, "407d99c38c0846cab7f2749ce26cd2d1": { "model_module": "@jupyter-widgets/controls", "model_name": "IntProgressModel", "state": { "_view_name": "ProgressView", "style": "IPY_MODEL_f8ce7babea0d42b3ba29ffab88c974c6", "_dom_classes": [], "description": "", "_model_name": "IntProgressModel", "bar_style": "success", "max": 87306240, "_view_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "value": 87306240, "_view_count": null, "_view_module_version": "1.5.0", "orientation": "horizontal", "min": 0, "description_tooltip": null, "_model_module": "@jupyter-widgets/controls", "layout": "IPY_MODEL_e37d04b94e604732848fa1121d61501e" } }, "cee996f3137b4f8eb1aebd42096f0932": { "model_module": "@jupyter-widgets/controls", "model_name": "HTMLModel", "state": { "_view_name": "HTMLView", "style": "IPY_MODEL_5be2cae548df444ab864573ec0e67465", "_dom_classes": [], "description": "", "_model_name": "HTMLModel", "placeholder": "​", "_view_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "value": "100% 83.3M/83.3M [00:00<00:00, 93.3MB/s]", "_view_count": null, "_view_module_version": "1.5.0", "description_tooltip": null, "_model_module": "@jupyter-widgets/controls", "layout": "IPY_MODEL_16e4ce8dd3d64db294ec54d37eceeb67" } }, "f8ce7babea0d42b3ba29ffab88c974c6": { "model_module": "@jupyter-widgets/controls", "model_name": "ProgressStyleModel", "state": { "_view_name": "StyleView", "_model_name": "ProgressStyleModel", "description_width": "", "_view_module": "@jupyter-widgets/base", "_model_module_version": "1.5.0", "_view_count": null, "_view_module_version": "1.2.0", "bar_color": null, "_model_module": "@jupyter-widgets/controls" } }, "e37d04b94e604732848fa1121d61501e": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "state": { "_view_name": "LayoutView", "grid_template_rows": null, "right": null, "justify_content": null, "_view_module": "@jupyter-widgets/base", "overflow": null, "_model_module_version": "1.2.0", "_view_count": null, "flex_flow": null, "width": null, "min_width": null, "border": null, "align_items": null, "bottom": null, "_model_module": "@jupyter-widgets/base", "top": null, "grid_column": null, "overflow_y": null, "overflow_x": null, "grid_auto_flow": null, "grid_area": null, "grid_template_columns": null, "flex": null, "_model_name": "LayoutModel", "justify_items": null, "grid_row": null, "max_height": null, "align_content": null, "visibility": null, "align_self": null, "height": null, "min_height": null, "padding": null, "grid_auto_rows": null, "grid_gap": null, "max_width": null, "order": null, "_view_module_version": "1.2.0", "grid_template_areas": null, "object_position": null, "object_fit": null, "grid_auto_columns": null, "margin": null, "display": null, "left": null } }, "5be2cae548df444ab864573ec0e67465": { "model_module": "@jupyter-widgets/controls", "model_name": "DescriptionStyleModel", "state": { "_view_name": "StyleView", "_model_name": "DescriptionStyleModel", "description_width": "", "_view_module": "@jupyter-widgets/base", "_model_module_version": "1.5.0", "_view_count": null, "_view_module_version": "1.2.0", "_model_module": "@jupyter-widgets/controls" } }, "16e4ce8dd3d64db294ec54d37eceeb67": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "state": { "_view_name": "LayoutView", "grid_template_rows": null, "right": null, "justify_content": null, "_view_module": "@jupyter-widgets/base", "overflow": null, "_model_module_version": "1.2.0", "_view_count": null, "flex_flow": null, "width": null, "min_width": null, "border": null, "align_items": null, "bottom": null, "_model_module": "@jupyter-widgets/base", "top": null, "grid_column": null, "overflow_y": null, "overflow_x": null, "grid_auto_flow": null, "grid_area": null, "grid_template_columns": null, "flex": null, "_model_name": "LayoutModel", "justify_items": null, "grid_row": null, "max_height": null, "align_content": null, "visibility": null, "align_self": null, "height": null, "min_height": null, "padding": null, "grid_auto_rows": null, "grid_gap": null, "max_width": null, "order": null, "_view_module_version": "1.2.0", "grid_template_areas": null, "object_position": null, "object_fit": null, "grid_auto_columns": null, "margin": null, "display": null, "left": null } } } } }, "cells": [ { "cell_type": "code", "metadata": { "id": "-MzdfcwC5qDr", "colab_type": "code", "outputId": "3bf81e0e-4592-48a6-e5ce-f506a5fa6d75", "colab": { "base_uri": "https://localhost:8080/", "height": 207 } }, "source": [ "!rm -r ../root/.kaggle\n", "!mkdir ../root/.kaggle\n", "!cp kaggle.json ../root/.kaggle\n", "!chmod 600 ../root/.kaggle/kaggle.json\n", "!rm -r sample_data\n", "!pip install efficientnet-pytorch" ], "execution_count": 2, "outputs": [ { "output_type": "stream", "text": [ "Collecting efficientnet-pytorch\n", " Downloading https://files.pythonhosted.org/packages/b8/cb/0309a6e3d404862ae4bc017f89645cf150ac94c14c88ef81d215c8e52925/efficientnet_pytorch-0.6.3.tar.gz\n", "Requirement already satisfied: torch in /usr/local/lib/python3.6/dist-packages (from efficientnet-pytorch) (1.4.0)\n", "Building wheels for collected packages: efficientnet-pytorch\n", " Building wheel for efficientnet-pytorch (setup.py) ... \u001b[?25l\u001b[?25hdone\n", " Created wheel for efficientnet-pytorch: filename=efficientnet_pytorch-0.6.3-cp36-none-any.whl size=12422 sha256=bf187f2821eb28440af51051fb3ad361f9750358f4be50775066a9b6244b5a99\n", " Stored in directory: /root/.cache/pip/wheels/42/1e/a9/2a578ba9ad04e776e80bf0f70d8a7f4c29ec0718b92d8f6ccd\n", "Successfully built efficientnet-pytorch\n", "Installing collected packages: efficientnet-pytorch\n", "Successfully installed efficientnet-pytorch-0.6.3\n" ], "name": "stdout" } ] }, { "cell_type": "code", "metadata": { "id": "x_hAUAh_6Dk3", "colab_type": "code", "outputId": "cf11e1a4-5075-40da-9ee0-548a71e9b4b2", "colab": { "base_uri": "https://localhost:8080/", "height": 68 } }, "source": [ "!kaggle datasets download umangjpatel/pap-smear-datasets --unzip\n", "!rm -r herlev_pap_smear\n", "!rm -r sipakmed_fci_pap_smear" ], "execution_count": 3, "outputs": [ { "output_type": "stream", "text": [ "Downloading pap-smear-datasets.zip to /content\n", "100% 6.44G/6.44G [02:18<00:00, 38.9MB/s]\n", "100% 6.44G/6.44G [02:18<00:00, 49.9MB/s]\n" ], "name": "stdout" } ] }, { "cell_type": "code", "metadata": { "id": "xJbKpakU6S6r", "colab_type": "code", "colab": {} }, "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" ], "execution_count": 0, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "WtLde_oj6Uqv", "colab_type": "code", "outputId": "5e753f05-d3d0-4633-f71e-620e34bf6038", "colab": { "base_uri": "https://localhost:8080/", "height": 68 } }, "source": [ "path = Path(\".\")\n", "path.ls()" ], "execution_count": 5, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "[PosixPath('.config'),\n", " PosixPath('kaggle.json'),\n", " PosixPath('sipakmed_wsi_pap_smear')]" ] }, "metadata": { "tags": [] }, "execution_count": 5 } ] }, { "cell_type": "code", "metadata": { "id": "e0L5bOab7Li0", "colab_type": "code", "outputId": "885b5951-b556-406d-f1bb-02583090bef9", "colab": { "base_uri": "https://localhost:8080/", "height": 306 } }, "source": [ "data_init = (ImageList.from_folder(path/\"sipakmed_wsi_pap_smear\")\n", " .split_none()\n", " .label_from_folder())\n", "data_init" ], "execution_count": 6, "outputs": [ { "output_type": "execute_result", "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", "abnormal_Dyskeratotic,abnormal_Dyskeratotic,abnormal_Dyskeratotic,abnormal_Dyskeratotic,abnormal_Dyskeratotic\n", "Path: sipakmed_wsi_pap_smear;\n", "\n", "Valid: LabelList (0 items)\n", "x: ImageList\n", "\n", "y: CategoryList\n", "\n", "Path: sipakmed_wsi_pap_smear;\n", "\n", "Test: None" ] }, "metadata": { "tags": [] }, "execution_count": 6 } ] }, { "cell_type": "code", "metadata": { "id": "qg07Zti59Sg5", "colab_type": "code", "outputId": "5c8e3a59-55c9-4cff-8346-fe291d70b640", "colab": { "base_uri": "https://localhost:8080/", "height": 34 } }, "source": [ "skf = StratifiedKFold(n_splits=3, shuffle=True, random_state=0)\n", "skf" ], "execution_count": 7, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "StratifiedKFold(n_splits=3, random_state=0, shuffle=True)" ] }, "metadata": { "tags": [] }, "execution_count": 7 } ] }, { "cell_type": "code", "metadata": { "id": "-r38w3l8ExI1", "colab_type": "code", "colab": {} }, "source": [ "!mkdir sipakmed_wsi_pap_smear/models" ], "execution_count": 0, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "Btupbe9q9V2M", "colab_type": "code", "colab": {} }, "source": [ "def model_callback(model, model_name):\n", " return [SaveModelCallback(model, every=\"improvement\", monitor=\"accuracy\", name=model_name)]" ], "execution_count": 0, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "rLkuRJBZWLix", "colab_type": "code", "colab": {} }, "source": [ "def find_appropriate_lr(model, lr_diff = 15, loss_threshold = .05, adjust_value = 1, plot = True):\n", " #Run the Learning Rate Finder\n", " model.lr_find()\n", " \n", " #Get loss values and their corresponding gradients, and get lr values\n", " losses = np.array(model.recorder.losses)\n", " assert(lr_diff < len(losses))\n", " loss_grad = np.gradient(losses)\n", " lrs = model.recorder.lrs\n", " \n", " #Search for index in gradients where loss is lowest before the loss spike\n", " #Initialize right and left idx using the lr_diff as a spacing unit\n", " #Set the local min lr as -1 to signify if threshold is too low\n", " r_idx = -1\n", " l_idx = r_idx - lr_diff\n", " while (l_idx >= -len(losses)) and (abs(loss_grad[r_idx] - loss_grad[l_idx]) > loss_threshold):\n", " local_min_lr = lrs[l_idx]\n", " r_idx -= 1\n", " l_idx -= 1\n", "\n", " lr_to_use = local_min_lr * adjust_value\n", " \n", " if plot:\n", " # plots the gradients of the losses in respect to the learning rate change\n", " plt.plot(loss_grad)\n", " plt.plot(len(losses)+l_idx, loss_grad[l_idx],markersize=10,marker='o',color='red')\n", " plt.ylabel(\"Loss\")\n", " plt.xlabel(\"Index of LRs\")\n", " plt.show()\n", "\n", " plt.plot(np.log10(lrs), losses)\n", " plt.ylabel(\"Loss\")\n", " plt.xlabel(\"Log 10 Transform of Learning Rate\")\n", " loss_coord = np.interp(np.log10(lr_to_use), np.log10(lrs), losses)\n", " plt.plot(np.log10(lr_to_use), loss_coord, markersize=10,marker='o',color='red')\n", " plt.show()\n", " \n", " return lr_to_use" ], "execution_count": 0, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "YJ_fRg52-CCa", "colab_type": "code", "outputId": "5c9e3e71-a9a3-4c04-9946-6543d3647c1c", "colab": { "base_uri": "https://localhost:8080/", "height": 1000, "referenced_widgets": [ "b138df8514524d63bd8527cc50c2cd06", "01a7e9cdba0146ad893c004555928dfe", "407d99c38c0846cab7f2749ce26cd2d1", "cee996f3137b4f8eb1aebd42096f0932", "f8ce7babea0d42b3ba29ffab88c974c6", "e37d04b94e604732848fa1121d61501e", "5be2cae548df444ab864573ec0e67465", "16e4ce8dd3d64db294ec54d37eceeb67" ] } }, "source": [ "i = 0\n", "with gpu_mem_restore_ctx():\n", " model_name = input(\"Enter the model name : \")\n", " for train_idx, valid_idx in skf.split(data_init.x.items, data_init.y.items):\n", " print(\"&*\" * 50)\n", " print(f\"FOLD-{i}\")\n", " fold_data = (ImageList.from_folder(path/\"sipakmed_wsi_pap_smear\")\n", " .split_by_idxs(train_idx, valid_idx)\n", " .label_from_folder()\n", " .transform(get_transforms(flip_vert=True, max_warp=0.0, max_rotate=60.0, max_zoom=0.50), size=224)\n", " .databunch()\n", " .normalize(imagenet_stats))\n", " if i == 0:\n", " learner = cnn_learner(fold_data, models.resnet34, metrics=[accuracy, Precision(), Recall(), FBeta(beta=1), KappaScore(weights=\"quadratic\")]).to_fp16()\n", " else:\n", " load_name = model_name + f\"-stage2-fold{i-1}\"\n", " learner.purge()\n", " learner.load(load_name)\n", " stage1_name = model_name + f\"-stage1-fold{i}\"\n", " learner.fit_one_cycle(20, max_lr=slice(1e-03, 1e-02), callbacks=model_callback(learner, stage1_name))\n", " learner.load(stage1_name)\n", " learner.unfreeze()\n", " stage2_name = model_name + f\"-stage2-fold{i}\"\n", " learner.fit_one_cycle(10, max_lr=slice(1e-06, 1e-05), callbacks=model_callback(learner, stage2_name))\n", " i += 1\n", " print(\"&*\" * 50)" ], "execution_count": 11, "outputs": [ { "output_type": "stream", "text": [ "Enter the model name : best-rn34-sipak\n", "&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*\n", "FOLD-0\n" ], "name": "stdout" }, { "output_type": "stream", "text": [ "Downloading: \"https://download.pytorch.org/models/resnet34-333f7ec4.pth\" to /root/.cache/torch/checkpoints/resnet34-333f7ec4.pth\n" ], "name": "stderr" }, { "output_type": "display_data", "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "b138df8514524d63bd8527cc50c2cd06", "version_minor": 0, "version_major": 2 }, "text/plain": [ "HBox(children=(IntProgress(value=0, max=87306240), HTML(value='')))" ] }, "metadata": { "tags": [] } }, { "output_type": "stream", "text": [ "\n" ], "name": "stdout" }, { "output_type": "display_data", "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", "
epochtrain_lossvalid_lossaccuracyprecisionrecallf_betakappa_scoretime
02.0620641.0300140.6397520.6537420.6691310.6452040.64398600:38
11.5103390.8072160.8074530.8132730.8379950.8254490.83448500:38
21.2106760.7844250.8136650.8322880.8298990.8310920.85797000:38
31.0214360.6237500.8322980.8528260.8401450.8464380.87055900:38
40.9141070.5503510.8260870.8317800.8548360.8431500.83554400:38
50.7919410.5592800.8509320.8652820.8717160.8684870.88645000:38
60.6998850.4471780.8695650.8780160.8863350.8821560.87910700:38
70.6195690.4718890.8819880.9002190.8973990.8988070.89514700:38
80.5427250.3545900.8850930.8928260.9007400.8967660.90506500:38
90.4659720.3173550.8975160.9027370.9073420.9050340.90395000:38
100.4123940.3158350.9006210.9184850.9072950.9128560.92702300:38
110.3643500.3083540.9006210.9097840.9137480.9117620.91430600:38
120.3214830.3634960.8757760.8896820.8915250.8906030.90444600:39
130.2836750.3264940.9099380.9173020.9243660.9208210.92697200:39
140.2546770.2905710.9161490.9257800.9260570.9259190.93378100:39
150.2286040.2849110.9161490.9230010.9254780.9242380.92587700:39
160.2065540.2767730.9161490.9296320.9253430.9274820.93262100:39
170.1940370.2668820.9161490.9282210.9252070.9267120.93266100:39
180.1825180.2604080.9099380.9173110.9204540.9188800.91952600:39
190.1728570.2626800.9099380.9173110.9204540.9188800.91952600:39
" ], "text/plain": [ "" ] }, "metadata": { "tags": [] } }, { "output_type": "stream", "text": [ "Better model found at epoch 0 with accuracy value: 0.6397515535354614.\n" ], "name": "stdout" }, { "output_type": "stream", "text": [ "/usr/local/lib/python3.6/dist-packages/fastai/metrics.py:191: UserWarning: average=`binary` was selected for a non binary case. Value for average has now been set to `macro` instead.\n", " warn(\"average=`binary` was selected for a non binary case. Value for average has now been set to `macro` instead.\")\n" ], "name": "stderr" }, { "output_type": "stream", "text": [ "Better model found at epoch 1 with accuracy value: 0.8074533939361572.\n", "Better model found at epoch 2 with accuracy value: 0.8136646151542664.\n", "Better model found at epoch 3 with accuracy value: 0.8322981595993042.\n", "Better model found at epoch 5 with accuracy value: 0.850931704044342.\n", "Better model found at epoch 6 with accuracy value: 0.8695651888847351.\n", "Better model found at epoch 7 with accuracy value: 0.8819875717163086.\n", "Better model found at epoch 8 with accuracy value: 0.8850931525230408.\n", "Better model found at epoch 9 with accuracy value: 0.8975155353546143.\n", "Better model found at epoch 10 with accuracy value: 0.9006211161613464.\n", "Better model found at epoch 13 with accuracy value: 0.909937858581543.\n", "Better model found at epoch 14 with accuracy value: 0.9161490797996521.\n" ], "name": "stdout" }, { "output_type": "display_data", "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", "
epochtrain_lossvalid_lossaccuracyprecisionrecallf_betakappa_scoretime
00.1217350.2868000.9130430.9214160.9235250.9203490.92606000:39
10.1124100.2854510.9130430.9214160.9235250.9224700.92606000:39
20.1311950.2901110.9130430.9214160.9235250.9224700.92606000:39
30.1197250.2854310.9099380.9183520.9213030.9198250.92519000:38
40.1198200.2810510.9068320.9160770.9186370.9173550.92144300:38
50.1157730.2806190.9099380.9183520.9213030.9198250.92519000:39
60.1219760.2788850.9130430.9207580.9260650.9234040.92909100:39
70.1178740.2805140.9130430.9227560.9238350.9232950.93290500:39
80.1122980.2828190.9099380.9206380.9182790.9194570.93190800:39
90.1165830.2769580.9130430.9206210.9238350.9222250.92592800:38
" ], "text/plain": [ "" ] }, "metadata": { "tags": [] } }, { "output_type": "stream", "text": [ "Better model found at epoch 0 with accuracy value: 0.9130434989929199.\n", "&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*\n", "&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*\n", "FOLD-1\n" ], "name": "stdout" }, { "output_type": "display_data", "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", "
epochtrain_lossvalid_lossaccuracyprecisionrecallf_betakappa_scoretime
00.3173320.8900260.7826090.8361210.7743430.7927050.84009700:38
10.3781861.7880990.7360250.7936840.7571620.7749930.56462500:39
20.45238110.0418580.4161490.6945630.4374530.5368100.59936300:39
30.4909003.8897550.7173910.7304040.7476770.7389400.69154200:38
40.4800952.9190660.6428570.7080450.6835520.6955830.52098200:39
50.48227212.2966740.5434780.6712150.6246240.6470820.39178700:38
60.4812681.1384390.7391300.8179660.6744070.7392820.58350100:38
70.4583210.6149720.8385090.8648090.8593820.8620870.86899500:38
80.4474600.4957940.8540370.8538660.8830970.8682350.87479200:38
90.4202750.6798730.8229810.8679960.8573140.8626220.90517300:38
100.3798830.7900370.7639750.8109050.7955980.8031780.76331000:38
110.3535540.2655840.8850930.9126290.8958200.9041460.93947500:38
120.3201370.2510900.9192550.9301880.9244610.9273160.95141700:38
130.2864750.2878830.9223600.9260090.9344220.9301960.93059500:38
140.2557100.2841750.9161490.9307600.9294370.9300980.94745200:38
150.2265280.2315430.9161490.9297240.9316990.9307100.94282500:38
160.2040960.1983980.9223600.9316850.9366830.9341780.94283100:38
170.1809870.1796890.9285710.9386950.9411280.9399100.95150400:39
180.1609350.1689560.9285710.9388360.9411280.9399810.95399300:38
190.1458220.1732140.9316770.9413730.9433500.9423610.95488200:38
" ], "text/plain": [ "" ] }, "metadata": { "tags": [] } }, { "output_type": "stream", "text": [ "/usr/local/lib/python3.6/dist-packages/fastai/metrics.py:191: UserWarning: average=`binary` was selected for a non binary case. Value for average has now been set to `macro` instead.\n", " warn(\"average=`binary` was selected for a non binary case. Value for average has now been set to `macro` instead.\")\n" ], "name": "stderr" }, { "output_type": "stream", "text": [ "Better model found at epoch 0 with accuracy value: 0.782608687877655.\n", "Better model found at epoch 7 with accuracy value: 0.8385093212127686.\n", "Better model found at epoch 8 with accuracy value: 0.8540372848510742.\n", "Better model found at epoch 11 with accuracy value: 0.8850931525230408.\n", "Better model found at epoch 12 with accuracy value: 0.9192546606063843.\n", "Better model found at epoch 13 with accuracy value: 0.9223602414131165.\n", "Better model found at epoch 17 with accuracy value: 0.9285714030265808.\n", "Better model found at epoch 19 with accuracy value: 0.9316770434379578.\n" ], "name": "stdout" }, { "output_type": "display_data", "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", "
epochtrain_lossvalid_lossaccuracyprecisionrecallf_betakappa_scoretime
00.0605390.1712630.9316770.9418260.9433500.9424060.95739800:38
10.0616790.1731780.9316770.9414130.9433500.9423800.95750000:38
20.0639200.1730650.9285710.9388360.9411280.9399810.95399300:38
30.0674520.1686260.9285710.9388360.9411280.9399810.95399300:38
40.0708190.1699570.9316770.9414130.9433500.9423800.95750000:39
50.0743720.1720420.9285710.9388360.9411280.9399810.95399300:39
60.0710050.1754860.9285710.9388360.9411280.9399810.95399300:39
70.0722800.1737550.9285710.9388360.9411280.9399810.95399300:39
80.0721580.1715000.9285710.9388360.9411280.9399810.95399300:39
90.0750940.1745240.9316770.9414130.9433500.9423800.95750000:39
" ], "text/plain": [ "" ] }, "metadata": { "tags": [] } }, { "output_type": "stream", "text": [ "Better model found at epoch 0 with accuracy value: 0.9316770434379578.\n", "&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*\n", "&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*\n", "FOLD-2\n" ], "name": "stdout" }, { "output_type": "display_data", "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", "
epochtrain_lossvalid_lossaccuracyprecisionrecallf_betakappa_scoretime
00.1257010.2042400.9223600.9343790.9362000.9339570.95024100:39
10.1181820.3159550.9068320.9160550.9268750.9214330.93799000:39
20.1411790.5927830.8726710.9018020.8903120.8960200.91458100:39
30.1811031.6333220.7329190.7360690.7551690.7454970.77962500:39
40.272628173.7367250.298137nan0.2685790.0000000.30339500:39
50.341687141.0978390.6894410.8458440.6603740.7416900.52787000:38
60.39944412.2420450.7546580.7986000.7723110.7852360.69971900:39
70.3818620.6216070.8788820.9017360.8894700.8955610.90674700:39
80.3779460.6981800.7981370.8351250.8216640.8283400.74771400:38
90.3903310.6536140.7701860.8654340.7533420.8055070.80035700:39
100.3843460.4682420.8571430.8912460.8809770.8860820.89980000:38
110.3593220.3058290.8757760.8983840.8990180.8987010.90582300:38
120.3258420.3083630.8944100.8919620.9171360.9043740.92522700:39
130.2902180.2686850.9037270.9084020.9208350.9145770.91993300:38
140.2680930.2365270.9161490.9311210.9300340.9305770.95123300:39
150.2507600.2207340.9285710.9454890.9376210.9415380.95624100:38
160.2215670.1828830.9316770.9430190.9472630.9451360.96757200:38
170.1992320.1997350.9254660.9382110.9425090.9403550.96062400:39
180.1805120.2003630.9223600.9355040.9398420.9376680.96225700:39
190.1633370.2032350.9223600.9355040.9398420.9376680.96225700:38
" ], "text/plain": [ "" ] }, "metadata": { "tags": [] } }, { "output_type": "stream", "text": [ "/usr/local/lib/python3.6/dist-packages/fastai/metrics.py:191: UserWarning: average=`binary` was selected for a non binary case. Value for average has now been set to `macro` instead.\n", " warn(\"average=`binary` was selected for a non binary case. Value for average has now been set to `macro` instead.\")\n" ], "name": "stderr" }, { "output_type": "stream", "text": [ "Better model found at epoch 0 with accuracy value: 0.9223602414131165.\n", "Better model found at epoch 15 with accuracy value: 0.9285714030265808.\n", "Better model found at epoch 16 with accuracy value: 0.9316770434379578.\n" ], "name": "stdout" }, { "output_type": "display_data", "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", "
epochtrain_lossvalid_lossaccuracyprecisionrecallf_betakappa_scoretime
00.0944420.1846410.9347830.9456580.9493500.9473440.96833100:38
10.1014680.1859930.9347830.9456580.9493500.9475010.96833100:38
20.0982940.1868410.9285710.9405190.9445960.9425530.96396900:38
30.0978240.1874350.9316770.9430590.9472630.9451560.96494300:38
40.1011080.1871500.9347830.9456580.9493500.9475010.96833100:38
50.1052070.1856230.9378880.9483810.9518820.9501280.96917100:38
60.1084600.1891790.9347830.9456580.9493500.9475010.96833100:38
70.1024820.1871560.9347830.9456580.9493500.9475010.96833100:38
80.1017870.1880790.9347830.9455030.9494850.9474900.96846300:38
90.1020390.1857400.9378880.9483810.9518820.9501280.96917100:38
" ], "text/plain": [ "" ] }, "metadata": { "tags": [] } }, { "output_type": "stream", "text": [ "Better model found at epoch 0 with accuracy value: 0.9347826242446899.\n", "Better model found at epoch 5 with accuracy value: 0.9378882050514221.\n", "&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*\n" ], "name": "stdout" } ] }, { "cell_type": "code", "metadata": { "id": "YSezyQT5B1oY", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 306 }, "outputId": "b7a8363a-3837-4a51-e6f6-6c1ff4a09caf" }, "source": [ "full_data = (ImageList.from_folder(path/\"sipakmed_wsi_pap_smear\")\n", " .split_none()\n", " .label_from_folder()\n", " .transform(get_transforms(flip_vert=True, max_warp=0.0, max_rotate=60.0, max_zoom=0.50), size=224)\n", " .databunch()\n", " .normalize(imagenet_stats))\n", "full_data" ], "execution_count": 12, "outputs": [ { "output_type": "execute_result", "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", "abnormal_Dyskeratotic,abnormal_Dyskeratotic,abnormal_Dyskeratotic,abnormal_Dyskeratotic,abnormal_Dyskeratotic\n", "Path: sipakmed_wsi_pap_smear;\n", "\n", "Valid: LabelList (0 items)\n", "x: ImageList\n", "\n", "y: CategoryList\n", "\n", "Path: sipakmed_wsi_pap_smear;\n", "\n", "Test: None" ] }, "metadata": { "tags": [] }, "execution_count": 12 } ] }, { "cell_type": "code", "metadata": { "id": "pEsj03BHY_ie", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 311 }, "outputId": "cd371553-c425-4d48-83ea-1572d132094d" }, "source": [ "learner.load(\"best-rn34-sipak-stage2-fold2\")\n", "interp = ClassificationInterpretation.from_learner(learner, ds_type=DatasetType.Train)\n", "interp.plot_confusion_matrix(figsize=(7, 7))" ], "execution_count": 13, "outputs": [ { "output_type": "display_data", "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "metadata": { "tags": [] } }, { "output_type": "display_data", "data": { "image/png": "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\nwZs0WMUAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] } } ] }, { "cell_type": "code", "metadata": { "id": "w-SEiQMkZR_5", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 527 }, "outputId": "3737129a-f8a7-4ba8-d08c-6d80852d07a4" }, "source": [ "interp.plot_confusion_matrix(figsize=(7, 7))" ], "execution_count": 14, "outputs": [ { "output_type": "display_data", "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] } } ] }, { "cell_type": "code", "metadata": { "id": "MqqCmCRqZesK", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 119 }, "outputId": "f8f55924-d587-4296-9fe6-03ef264af5d9" }, "source": [ "learner_32 = to_fp32(learner)\n", "learner_32.validate(dl=full_data.train_dl, metrics=[accuracy, Precision(average=\"macro\"), Recall(average=\"macro\"), FBeta(beta=1, average=\"macro\"), KappaScore(weights=\"quadratic\")])" ], "execution_count": 17, "outputs": [ { "output_type": "display_data", "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "metadata": { "tags": [] } }, { "output_type": "execute_result", "data": { "text/plain": [ "[0.106774084,\n", " tensor(0.9656),\n", " tensor(0.9719),\n", " tensor(0.9727),\n", " tensor(0.9722),\n", " tensor(0.9819)]" ] }, "metadata": { "tags": [] }, "execution_count": 17 } ] }, { "cell_type": "code", "metadata": { "id": "jZqKfmZGZjFw", "colab_type": "code", "colab": {} }, "source": [ "" ], "execution_count": 0, "outputs": [] } ] }