{
"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",
" epoch \n",
" train_loss \n",
" valid_loss \n",
" accuracy \n",
" precision \n",
" recall \n",
" f_beta \n",
" kappa_score \n",
" time \n",
" \n",
" \n",
" \n",
" \n",
" 0 \n",
" 2.062064 \n",
" 1.030014 \n",
" 0.639752 \n",
" 0.653742 \n",
" 0.669131 \n",
" 0.645204 \n",
" 0.643986 \n",
" 00:38 \n",
" \n",
" \n",
" 1 \n",
" 1.510339 \n",
" 0.807216 \n",
" 0.807453 \n",
" 0.813273 \n",
" 0.837995 \n",
" 0.825449 \n",
" 0.834485 \n",
" 00:38 \n",
" \n",
" \n",
" 2 \n",
" 1.210676 \n",
" 0.784425 \n",
" 0.813665 \n",
" 0.832288 \n",
" 0.829899 \n",
" 0.831092 \n",
" 0.857970 \n",
" 00:38 \n",
" \n",
" \n",
" 3 \n",
" 1.021436 \n",
" 0.623750 \n",
" 0.832298 \n",
" 0.852826 \n",
" 0.840145 \n",
" 0.846438 \n",
" 0.870559 \n",
" 00:38 \n",
" \n",
" \n",
" 4 \n",
" 0.914107 \n",
" 0.550351 \n",
" 0.826087 \n",
" 0.831780 \n",
" 0.854836 \n",
" 0.843150 \n",
" 0.835544 \n",
" 00:38 \n",
" \n",
" \n",
" 5 \n",
" 0.791941 \n",
" 0.559280 \n",
" 0.850932 \n",
" 0.865282 \n",
" 0.871716 \n",
" 0.868487 \n",
" 0.886450 \n",
" 00:38 \n",
" \n",
" \n",
" 6 \n",
" 0.699885 \n",
" 0.447178 \n",
" 0.869565 \n",
" 0.878016 \n",
" 0.886335 \n",
" 0.882156 \n",
" 0.879107 \n",
" 00:38 \n",
" \n",
" \n",
" 7 \n",
" 0.619569 \n",
" 0.471889 \n",
" 0.881988 \n",
" 0.900219 \n",
" 0.897399 \n",
" 0.898807 \n",
" 0.895147 \n",
" 00:38 \n",
" \n",
" \n",
" 8 \n",
" 0.542725 \n",
" 0.354590 \n",
" 0.885093 \n",
" 0.892826 \n",
" 0.900740 \n",
" 0.896766 \n",
" 0.905065 \n",
" 00:38 \n",
" \n",
" \n",
" 9 \n",
" 0.465972 \n",
" 0.317355 \n",
" 0.897516 \n",
" 0.902737 \n",
" 0.907342 \n",
" 0.905034 \n",
" 0.903950 \n",
" 00:38 \n",
" \n",
" \n",
" 10 \n",
" 0.412394 \n",
" 0.315835 \n",
" 0.900621 \n",
" 0.918485 \n",
" 0.907295 \n",
" 0.912856 \n",
" 0.927023 \n",
" 00:38 \n",
" \n",
" \n",
" 11 \n",
" 0.364350 \n",
" 0.308354 \n",
" 0.900621 \n",
" 0.909784 \n",
" 0.913748 \n",
" 0.911762 \n",
" 0.914306 \n",
" 00:38 \n",
" \n",
" \n",
" 12 \n",
" 0.321483 \n",
" 0.363496 \n",
" 0.875776 \n",
" 0.889682 \n",
" 0.891525 \n",
" 0.890603 \n",
" 0.904446 \n",
" 00:39 \n",
" \n",
" \n",
" 13 \n",
" 0.283675 \n",
" 0.326494 \n",
" 0.909938 \n",
" 0.917302 \n",
" 0.924366 \n",
" 0.920821 \n",
" 0.926972 \n",
" 00:39 \n",
" \n",
" \n",
" 14 \n",
" 0.254677 \n",
" 0.290571 \n",
" 0.916149 \n",
" 0.925780 \n",
" 0.926057 \n",
" 0.925919 \n",
" 0.933781 \n",
" 00:39 \n",
" \n",
" \n",
" 15 \n",
" 0.228604 \n",
" 0.284911 \n",
" 0.916149 \n",
" 0.923001 \n",
" 0.925478 \n",
" 0.924238 \n",
" 0.925877 \n",
" 00:39 \n",
" \n",
" \n",
" 16 \n",
" 0.206554 \n",
" 0.276773 \n",
" 0.916149 \n",
" 0.929632 \n",
" 0.925343 \n",
" 0.927482 \n",
" 0.932621 \n",
" 00:39 \n",
" \n",
" \n",
" 17 \n",
" 0.194037 \n",
" 0.266882 \n",
" 0.916149 \n",
" 0.928221 \n",
" 0.925207 \n",
" 0.926712 \n",
" 0.932661 \n",
" 00:39 \n",
" \n",
" \n",
" 18 \n",
" 0.182518 \n",
" 0.260408 \n",
" 0.909938 \n",
" 0.917311 \n",
" 0.920454 \n",
" 0.918880 \n",
" 0.919526 \n",
" 00:39 \n",
" \n",
" \n",
" 19 \n",
" 0.172857 \n",
" 0.262680 \n",
" 0.909938 \n",
" 0.917311 \n",
" 0.920454 \n",
" 0.918880 \n",
" 0.919526 \n",
" 00:39 \n",
" \n",
" \n",
"
"
],
"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",
" epoch \n",
" train_loss \n",
" valid_loss \n",
" accuracy \n",
" precision \n",
" recall \n",
" f_beta \n",
" kappa_score \n",
" time \n",
" \n",
" \n",
" \n",
" \n",
" 0 \n",
" 0.121735 \n",
" 0.286800 \n",
" 0.913043 \n",
" 0.921416 \n",
" 0.923525 \n",
" 0.920349 \n",
" 0.926060 \n",
" 00:39 \n",
" \n",
" \n",
" 1 \n",
" 0.112410 \n",
" 0.285451 \n",
" 0.913043 \n",
" 0.921416 \n",
" 0.923525 \n",
" 0.922470 \n",
" 0.926060 \n",
" 00:39 \n",
" \n",
" \n",
" 2 \n",
" 0.131195 \n",
" 0.290111 \n",
" 0.913043 \n",
" 0.921416 \n",
" 0.923525 \n",
" 0.922470 \n",
" 0.926060 \n",
" 00:39 \n",
" \n",
" \n",
" 3 \n",
" 0.119725 \n",
" 0.285431 \n",
" 0.909938 \n",
" 0.918352 \n",
" 0.921303 \n",
" 0.919825 \n",
" 0.925190 \n",
" 00:38 \n",
" \n",
" \n",
" 4 \n",
" 0.119820 \n",
" 0.281051 \n",
" 0.906832 \n",
" 0.916077 \n",
" 0.918637 \n",
" 0.917355 \n",
" 0.921443 \n",
" 00:38 \n",
" \n",
" \n",
" 5 \n",
" 0.115773 \n",
" 0.280619 \n",
" 0.909938 \n",
" 0.918352 \n",
" 0.921303 \n",
" 0.919825 \n",
" 0.925190 \n",
" 00:39 \n",
" \n",
" \n",
" 6 \n",
" 0.121976 \n",
" 0.278885 \n",
" 0.913043 \n",
" 0.920758 \n",
" 0.926065 \n",
" 0.923404 \n",
" 0.929091 \n",
" 00:39 \n",
" \n",
" \n",
" 7 \n",
" 0.117874 \n",
" 0.280514 \n",
" 0.913043 \n",
" 0.922756 \n",
" 0.923835 \n",
" 0.923295 \n",
" 0.932905 \n",
" 00:39 \n",
" \n",
" \n",
" 8 \n",
" 0.112298 \n",
" 0.282819 \n",
" 0.909938 \n",
" 0.920638 \n",
" 0.918279 \n",
" 0.919457 \n",
" 0.931908 \n",
" 00:39 \n",
" \n",
" \n",
" 9 \n",
" 0.116583 \n",
" 0.276958 \n",
" 0.913043 \n",
" 0.920621 \n",
" 0.923835 \n",
" 0.922225 \n",
" 0.925928 \n",
" 00:38 \n",
" \n",
" \n",
"
"
],
"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",
" epoch \n",
" train_loss \n",
" valid_loss \n",
" accuracy \n",
" precision \n",
" recall \n",
" f_beta \n",
" kappa_score \n",
" time \n",
" \n",
" \n",
" \n",
" \n",
" 0 \n",
" 0.317332 \n",
" 0.890026 \n",
" 0.782609 \n",
" 0.836121 \n",
" 0.774343 \n",
" 0.792705 \n",
" 0.840097 \n",
" 00:38 \n",
" \n",
" \n",
" 1 \n",
" 0.378186 \n",
" 1.788099 \n",
" 0.736025 \n",
" 0.793684 \n",
" 0.757162 \n",
" 0.774993 \n",
" 0.564625 \n",
" 00:39 \n",
" \n",
" \n",
" 2 \n",
" 0.452381 \n",
" 10.041858 \n",
" 0.416149 \n",
" 0.694563 \n",
" 0.437453 \n",
" 0.536810 \n",
" 0.599363 \n",
" 00:39 \n",
" \n",
" \n",
" 3 \n",
" 0.490900 \n",
" 3.889755 \n",
" 0.717391 \n",
" 0.730404 \n",
" 0.747677 \n",
" 0.738940 \n",
" 0.691542 \n",
" 00:38 \n",
" \n",
" \n",
" 4 \n",
" 0.480095 \n",
" 2.919066 \n",
" 0.642857 \n",
" 0.708045 \n",
" 0.683552 \n",
" 0.695583 \n",
" 0.520982 \n",
" 00:39 \n",
" \n",
" \n",
" 5 \n",
" 0.482272 \n",
" 12.296674 \n",
" 0.543478 \n",
" 0.671215 \n",
" 0.624624 \n",
" 0.647082 \n",
" 0.391787 \n",
" 00:38 \n",
" \n",
" \n",
" 6 \n",
" 0.481268 \n",
" 1.138439 \n",
" 0.739130 \n",
" 0.817966 \n",
" 0.674407 \n",
" 0.739282 \n",
" 0.583501 \n",
" 00:38 \n",
" \n",
" \n",
" 7 \n",
" 0.458321 \n",
" 0.614972 \n",
" 0.838509 \n",
" 0.864809 \n",
" 0.859382 \n",
" 0.862087 \n",
" 0.868995 \n",
" 00:38 \n",
" \n",
" \n",
" 8 \n",
" 0.447460 \n",
" 0.495794 \n",
" 0.854037 \n",
" 0.853866 \n",
" 0.883097 \n",
" 0.868235 \n",
" 0.874792 \n",
" 00:38 \n",
" \n",
" \n",
" 9 \n",
" 0.420275 \n",
" 0.679873 \n",
" 0.822981 \n",
" 0.867996 \n",
" 0.857314 \n",
" 0.862622 \n",
" 0.905173 \n",
" 00:38 \n",
" \n",
" \n",
" 10 \n",
" 0.379883 \n",
" 0.790037 \n",
" 0.763975 \n",
" 0.810905 \n",
" 0.795598 \n",
" 0.803178 \n",
" 0.763310 \n",
" 00:38 \n",
" \n",
" \n",
" 11 \n",
" 0.353554 \n",
" 0.265584 \n",
" 0.885093 \n",
" 0.912629 \n",
" 0.895820 \n",
" 0.904146 \n",
" 0.939475 \n",
" 00:38 \n",
" \n",
" \n",
" 12 \n",
" 0.320137 \n",
" 0.251090 \n",
" 0.919255 \n",
" 0.930188 \n",
" 0.924461 \n",
" 0.927316 \n",
" 0.951417 \n",
" 00:38 \n",
" \n",
" \n",
" 13 \n",
" 0.286475 \n",
" 0.287883 \n",
" 0.922360 \n",
" 0.926009 \n",
" 0.934422 \n",
" 0.930196 \n",
" 0.930595 \n",
" 00:38 \n",
" \n",
" \n",
" 14 \n",
" 0.255710 \n",
" 0.284175 \n",
" 0.916149 \n",
" 0.930760 \n",
" 0.929437 \n",
" 0.930098 \n",
" 0.947452 \n",
" 00:38 \n",
" \n",
" \n",
" 15 \n",
" 0.226528 \n",
" 0.231543 \n",
" 0.916149 \n",
" 0.929724 \n",
" 0.931699 \n",
" 0.930710 \n",
" 0.942825 \n",
" 00:38 \n",
" \n",
" \n",
" 16 \n",
" 0.204096 \n",
" 0.198398 \n",
" 0.922360 \n",
" 0.931685 \n",
" 0.936683 \n",
" 0.934178 \n",
" 0.942831 \n",
" 00:38 \n",
" \n",
" \n",
" 17 \n",
" 0.180987 \n",
" 0.179689 \n",
" 0.928571 \n",
" 0.938695 \n",
" 0.941128 \n",
" 0.939910 \n",
" 0.951504 \n",
" 00:39 \n",
" \n",
" \n",
" 18 \n",
" 0.160935 \n",
" 0.168956 \n",
" 0.928571 \n",
" 0.938836 \n",
" 0.941128 \n",
" 0.939981 \n",
" 0.953993 \n",
" 00:38 \n",
" \n",
" \n",
" 19 \n",
" 0.145822 \n",
" 0.173214 \n",
" 0.931677 \n",
" 0.941373 \n",
" 0.943350 \n",
" 0.942361 \n",
" 0.954882 \n",
" 00:38 \n",
" \n",
" \n",
"
"
],
"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",
" epoch \n",
" train_loss \n",
" valid_loss \n",
" accuracy \n",
" precision \n",
" recall \n",
" f_beta \n",
" kappa_score \n",
" time \n",
" \n",
" \n",
" \n",
" \n",
" 0 \n",
" 0.060539 \n",
" 0.171263 \n",
" 0.931677 \n",
" 0.941826 \n",
" 0.943350 \n",
" 0.942406 \n",
" 0.957398 \n",
" 00:38 \n",
" \n",
" \n",
" 1 \n",
" 0.061679 \n",
" 0.173178 \n",
" 0.931677 \n",
" 0.941413 \n",
" 0.943350 \n",
" 0.942380 \n",
" 0.957500 \n",
" 00:38 \n",
" \n",
" \n",
" 2 \n",
" 0.063920 \n",
" 0.173065 \n",
" 0.928571 \n",
" 0.938836 \n",
" 0.941128 \n",
" 0.939981 \n",
" 0.953993 \n",
" 00:38 \n",
" \n",
" \n",
" 3 \n",
" 0.067452 \n",
" 0.168626 \n",
" 0.928571 \n",
" 0.938836 \n",
" 0.941128 \n",
" 0.939981 \n",
" 0.953993 \n",
" 00:38 \n",
" \n",
" \n",
" 4 \n",
" 0.070819 \n",
" 0.169957 \n",
" 0.931677 \n",
" 0.941413 \n",
" 0.943350 \n",
" 0.942380 \n",
" 0.957500 \n",
" 00:39 \n",
" \n",
" \n",
" 5 \n",
" 0.074372 \n",
" 0.172042 \n",
" 0.928571 \n",
" 0.938836 \n",
" 0.941128 \n",
" 0.939981 \n",
" 0.953993 \n",
" 00:39 \n",
" \n",
" \n",
" 6 \n",
" 0.071005 \n",
" 0.175486 \n",
" 0.928571 \n",
" 0.938836 \n",
" 0.941128 \n",
" 0.939981 \n",
" 0.953993 \n",
" 00:39 \n",
" \n",
" \n",
" 7 \n",
" 0.072280 \n",
" 0.173755 \n",
" 0.928571 \n",
" 0.938836 \n",
" 0.941128 \n",
" 0.939981 \n",
" 0.953993 \n",
" 00:39 \n",
" \n",
" \n",
" 8 \n",
" 0.072158 \n",
" 0.171500 \n",
" 0.928571 \n",
" 0.938836 \n",
" 0.941128 \n",
" 0.939981 \n",
" 0.953993 \n",
" 00:39 \n",
" \n",
" \n",
" 9 \n",
" 0.075094 \n",
" 0.174524 \n",
" 0.931677 \n",
" 0.941413 \n",
" 0.943350 \n",
" 0.942380 \n",
" 0.957500 \n",
" 00:39 \n",
" \n",
" \n",
"
"
],
"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",
" epoch \n",
" train_loss \n",
" valid_loss \n",
" accuracy \n",
" precision \n",
" recall \n",
" f_beta \n",
" kappa_score \n",
" time \n",
" \n",
" \n",
" \n",
" \n",
" 0 \n",
" 0.125701 \n",
" 0.204240 \n",
" 0.922360 \n",
" 0.934379 \n",
" 0.936200 \n",
" 0.933957 \n",
" 0.950241 \n",
" 00:39 \n",
" \n",
" \n",
" 1 \n",
" 0.118182 \n",
" 0.315955 \n",
" 0.906832 \n",
" 0.916055 \n",
" 0.926875 \n",
" 0.921433 \n",
" 0.937990 \n",
" 00:39 \n",
" \n",
" \n",
" 2 \n",
" 0.141179 \n",
" 0.592783 \n",
" 0.872671 \n",
" 0.901802 \n",
" 0.890312 \n",
" 0.896020 \n",
" 0.914581 \n",
" 00:39 \n",
" \n",
" \n",
" 3 \n",
" 0.181103 \n",
" 1.633322 \n",
" 0.732919 \n",
" 0.736069 \n",
" 0.755169 \n",
" 0.745497 \n",
" 0.779625 \n",
" 00:39 \n",
" \n",
" \n",
" 4 \n",
" 0.272628 \n",
" 173.736725 \n",
" 0.298137 \n",
" nan \n",
" 0.268579 \n",
" 0.000000 \n",
" 0.303395 \n",
" 00:39 \n",
" \n",
" \n",
" 5 \n",
" 0.341687 \n",
" 141.097839 \n",
" 0.689441 \n",
" 0.845844 \n",
" 0.660374 \n",
" 0.741690 \n",
" 0.527870 \n",
" 00:38 \n",
" \n",
" \n",
" 6 \n",
" 0.399444 \n",
" 12.242045 \n",
" 0.754658 \n",
" 0.798600 \n",
" 0.772311 \n",
" 0.785236 \n",
" 0.699719 \n",
" 00:39 \n",
" \n",
" \n",
" 7 \n",
" 0.381862 \n",
" 0.621607 \n",
" 0.878882 \n",
" 0.901736 \n",
" 0.889470 \n",
" 0.895561 \n",
" 0.906747 \n",
" 00:39 \n",
" \n",
" \n",
" 8 \n",
" 0.377946 \n",
" 0.698180 \n",
" 0.798137 \n",
" 0.835125 \n",
" 0.821664 \n",
" 0.828340 \n",
" 0.747714 \n",
" 00:38 \n",
" \n",
" \n",
" 9 \n",
" 0.390331 \n",
" 0.653614 \n",
" 0.770186 \n",
" 0.865434 \n",
" 0.753342 \n",
" 0.805507 \n",
" 0.800357 \n",
" 00:39 \n",
" \n",
" \n",
" 10 \n",
" 0.384346 \n",
" 0.468242 \n",
" 0.857143 \n",
" 0.891246 \n",
" 0.880977 \n",
" 0.886082 \n",
" 0.899800 \n",
" 00:38 \n",
" \n",
" \n",
" 11 \n",
" 0.359322 \n",
" 0.305829 \n",
" 0.875776 \n",
" 0.898384 \n",
" 0.899018 \n",
" 0.898701 \n",
" 0.905823 \n",
" 00:38 \n",
" \n",
" \n",
" 12 \n",
" 0.325842 \n",
" 0.308363 \n",
" 0.894410 \n",
" 0.891962 \n",
" 0.917136 \n",
" 0.904374 \n",
" 0.925227 \n",
" 00:39 \n",
" \n",
" \n",
" 13 \n",
" 0.290218 \n",
" 0.268685 \n",
" 0.903727 \n",
" 0.908402 \n",
" 0.920835 \n",
" 0.914577 \n",
" 0.919933 \n",
" 00:38 \n",
" \n",
" \n",
" 14 \n",
" 0.268093 \n",
" 0.236527 \n",
" 0.916149 \n",
" 0.931121 \n",
" 0.930034 \n",
" 0.930577 \n",
" 0.951233 \n",
" 00:39 \n",
" \n",
" \n",
" 15 \n",
" 0.250760 \n",
" 0.220734 \n",
" 0.928571 \n",
" 0.945489 \n",
" 0.937621 \n",
" 0.941538 \n",
" 0.956241 \n",
" 00:38 \n",
" \n",
" \n",
" 16 \n",
" 0.221567 \n",
" 0.182883 \n",
" 0.931677 \n",
" 0.943019 \n",
" 0.947263 \n",
" 0.945136 \n",
" 0.967572 \n",
" 00:38 \n",
" \n",
" \n",
" 17 \n",
" 0.199232 \n",
" 0.199735 \n",
" 0.925466 \n",
" 0.938211 \n",
" 0.942509 \n",
" 0.940355 \n",
" 0.960624 \n",
" 00:39 \n",
" \n",
" \n",
" 18 \n",
" 0.180512 \n",
" 0.200363 \n",
" 0.922360 \n",
" 0.935504 \n",
" 0.939842 \n",
" 0.937668 \n",
" 0.962257 \n",
" 00:39 \n",
" \n",
" \n",
" 19 \n",
" 0.163337 \n",
" 0.203235 \n",
" 0.922360 \n",
" 0.935504 \n",
" 0.939842 \n",
" 0.937668 \n",
" 0.962257 \n",
" 00:38 \n",
" \n",
" \n",
"
"
],
"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",
" epoch \n",
" train_loss \n",
" valid_loss \n",
" accuracy \n",
" precision \n",
" recall \n",
" f_beta \n",
" kappa_score \n",
" time \n",
" \n",
" \n",
" \n",
" \n",
" 0 \n",
" 0.094442 \n",
" 0.184641 \n",
" 0.934783 \n",
" 0.945658 \n",
" 0.949350 \n",
" 0.947344 \n",
" 0.968331 \n",
" 00:38 \n",
" \n",
" \n",
" 1 \n",
" 0.101468 \n",
" 0.185993 \n",
" 0.934783 \n",
" 0.945658 \n",
" 0.949350 \n",
" 0.947501 \n",
" 0.968331 \n",
" 00:38 \n",
" \n",
" \n",
" 2 \n",
" 0.098294 \n",
" 0.186841 \n",
" 0.928571 \n",
" 0.940519 \n",
" 0.944596 \n",
" 0.942553 \n",
" 0.963969 \n",
" 00:38 \n",
" \n",
" \n",
" 3 \n",
" 0.097824 \n",
" 0.187435 \n",
" 0.931677 \n",
" 0.943059 \n",
" 0.947263 \n",
" 0.945156 \n",
" 0.964943 \n",
" 00:38 \n",
" \n",
" \n",
" 4 \n",
" 0.101108 \n",
" 0.187150 \n",
" 0.934783 \n",
" 0.945658 \n",
" 0.949350 \n",
" 0.947501 \n",
" 0.968331 \n",
" 00:38 \n",
" \n",
" \n",
" 5 \n",
" 0.105207 \n",
" 0.185623 \n",
" 0.937888 \n",
" 0.948381 \n",
" 0.951882 \n",
" 0.950128 \n",
" 0.969171 \n",
" 00:38 \n",
" \n",
" \n",
" 6 \n",
" 0.108460 \n",
" 0.189179 \n",
" 0.934783 \n",
" 0.945658 \n",
" 0.949350 \n",
" 0.947501 \n",
" 0.968331 \n",
" 00:38 \n",
" \n",
" \n",
" 7 \n",
" 0.102482 \n",
" 0.187156 \n",
" 0.934783 \n",
" 0.945658 \n",
" 0.949350 \n",
" 0.947501 \n",
" 0.968331 \n",
" 00:38 \n",
" \n",
" \n",
" 8 \n",
" 0.101787 \n",
" 0.188079 \n",
" 0.934783 \n",
" 0.945503 \n",
" 0.949485 \n",
" 0.947490 \n",
" 0.968463 \n",
" 00:38 \n",
" \n",
" \n",
" 9 \n",
" 0.102039 \n",
" 0.185740 \n",
" 0.937888 \n",
" 0.948381 \n",
" 0.951882 \n",
" 0.950128 \n",
" 0.969171 \n",
" 00:38 \n",
" \n",
" \n",
"
"
],
"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": "iVBORw0KGgoAAAANSUhEUgAAAe4AAAH+CAYAAABawe3NAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0\ndHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nOzdd5gV5fnG8e8tiKLYiC0sFgQVQRFh\nMRZU7L1FLLGCxpL4i1Gj0SQmojHRxFhiizVC1AghsRewi6JIs2BvWMCGigWV4vL8/phZPC7LssDO\nmZ3D/bmuvdgzM2fmec/Rvc/7zjtzFBGYmZlZMSyRdwFmZmbWeA5uMzOzAnFwm5mZFYiD28zMrEAc\n3GZmZgXi4DYzMysQB7eZVSRJrSXdKelzSUMXYT+HSLqvKWvLi6StJL2Sdx22aOTruM0sT5IOBk4G\nOgNfAs8Af4qIxxdxv4cBvwC2iIhvF7nQZk5SAOtGxOt512LZco/bzHIj6WTgYuDPwGrAmsAVwN5N\nsPu1gFcXh9BuDEkt867BmoaD28xyIWkF4Gzg+Ii4JSK+iohZEXFnRJyabrOUpIslvZf+XCxpqXRd\nH0mTJP1K0keS3pfUP113FvAH4EBJ0yQdJWmApBtLjr+2pKgNNEn9JL0p6UtJEyUdUrL88ZLnbSFp\nTDoEP0bSFiXrHpH0R0kj0/3cJ2nlebS/tv5fl9S/j6TdJL0q6VNJvy3ZflNJT0r6LN32Mkmt0nUj\n0s2eTdt7YMn+T5P0AXB97bL0OR3TY/RIH7eTNEVSn0V6Yy1zDm4zy8vmwNLArQ1s8ztgM6A7sDGw\nKXBGyfrVgRWAKuAo4HJJK0XEmSS9+CER0SYirmuoEEnLApcAu0bEcsAWJEP2dbdrC9ydbvsD4ELg\nbkk/KNnsYKA/sCrQCjilgUOvTvIaVJF80LgGOBToCWwF/F5Sh3TbGuAkYGWS12574OcAEbF1us3G\naXuHlOy/LcnowzGlB46IN4DTgBslLQNcDwyKiEcaqNeaAQe3meXlB8DH8xnKPgQ4OyI+iogpwFnA\nYSXrZ6XrZ0XEPcA0YP2FrGc2sKGk1hHxfkS8UM82uwOvRcQNEfFtRNwMvAzsWbLN9RHxakR8A/yH\n5EPHvMwiOZ8/CxhMEsp/j4gv0+O/SPKBhYgYFxGj0uO+BVwFbNOINp0ZETPSer4nIq4BXgeeAn5I\n8kHJmjkHt5nl5RNg5fmce20HvF3y+O102Zx91An+r4E2C1pIRHwFHAgcB7wv6W5JnRtRT21NVSWP\nP1iAej6JiJr099pg/bBk/Te1z5e0nqS7JH0g6QuSEYV6h+FLTImI6fPZ5hpgQ+DSiJgxn22tGXBw\nm1lengRmAPs0sM17JMO8tdZMly2Mr4BlSh6vXroyIoZHxI4kPc+XSQJtfvXU1jR5IWtaEP8gqWvd\niFge+C2g+TynwcuGJLUhmRx4HTAgPRVgzZyD28xyERGfk5zXvTydlLWMpCUl7Srpr+lmNwNnSFol\nneT1B+DGee1zPp4Btpa0Zjox7je1KyStJmnv9Fz3DJIh99n17OMeYD1JB0tqKelAoAtw10LWtCCW\nA74ApqWjAT+rs/5DYJ0F3OffgbER8VOSc/dXLnKVljkHt5nlJiIuILmG+wxgCvAu8H/Abekm5wBj\ngeeACcD4dNnCHOt+YEi6r3F8P2yXSOt4D/iU5Nxx3WAkIj4B9gB+RTLU/2tgj4j4eGFqWkCnkEx8\n+5JkNGBInfUDgEHprPMD5rczSXsDu/BdO08GetTOprfmyzdgMTMzKxD3uM3MzArEwW1mZlYgDm4z\nM7MCcXCbmZkViG86b4udJZZePlq0WSXvMspmo7VWyrsEy8j8LuK2Yhs/ftzHETHXHysHty12WrRZ\nhZX2PjfvMspmxBV98y6hrFossfjEmbT4tHVx1HpJ1b1LH+ChcjMzs0JxcJuZmRWIg9vMzKxAHNxm\nZmYF4uA2MzMrEAe3mZlZgTi4zczMCsTBbWZmViAObjMzswJxcJuZmRWIg9vMzKxAHNxmZmYF4uA2\nMzMrEAe3mZlZgTi4zczMCsTBbWZmViAObjMzswJxcJuZmRWIg9vMzKxAHNxmZmYF4uA2MzMrEAe3\nmZlZgTi4zczMCsTBbWZmViAObrMmcnH/Xrxw0V48evbOc6372U7r8dF1B9C2TSsAdunejkcG7MRD\nZ+7Ifb/fgR91Wrnc5WZm+vTp9Om9GZv32oRem2zEn84ekHdJmTn26CNZq2o1qrtvlHcpZXPf8GF0\n67o+XTt34vy/npd3OZlqrm11cJs1kcEjJ3LQRSPmWt5updb06bo6737y1Zxlj730EX0G3Md2Z93P\nideP4cJ+1eUsNVNLLbUUdw17gCfHPM0To8fzwP3DGf3UqLzLysRhh/fjtrvuzbuMsqmpqeHEE47n\n9jvv5ennXmTo4Jt56cUX8y4rE825rQ7uRpA0Le8a6iOpn6TLGlg/QNJkSc9Iek3SLZK6LOSxHpHU\n5OkiaZ/G1JS2tV3J42sXti1ZGfXqx3z21cy5lv/xoO6cPfRZIr5b9tWMb+f8vsxSLb+3rugk0aZN\nGwBmzZrFrFmzkJRzVdnovdXWtF2pbd5llM2Y0aPp2LETHdZZh1atWrH/gQdx1523511WJppzWx3c\nOZHUskyHuigiukfEusAQ4CFJq5Tp2ABIatHA6n2AxgRwP2BOcEfETyOieXz8bcAu3dvx/mff8MKk\nz+dat9smVYw8Zxdu+mVvThw4JofqslNTU8MWm/ZgnTVWZ9vtd6DXpj/KuyRrAu+9N5n27deY87iq\nqj2TJ0/OsaLsNOe2OrjrkHSbpHGSXpB0TMnyi9JlD9YGX9oL/Yuk0ZJelbRVunxpSddLmiDpaUnb\npsv7SbpD0kPAg5L6SHpU0u2S3pR0nqRD0v1NkNQxfd6ekp5K9/WApNUWpm0RMQS4DzhY0naSbitp\n346SbpXUQtJASc+nNZxU5/VZIl1/Tvp4J0lPShovaaikNunyt9LXZjywv6SjJY2R9Kyk/0laRtIW\nwF7A+emoQEdJ3SWNkvRcWs9KkvoC1cBN6XatS0cAJO2SHv9ZSQ/O4309RtJYSWNnT/9iYV6+Bda6\nVQt+ufsG/OW2F+pdf8/Tk9nyjGEccdlITt9nw7LUVC4tWrTgidHjefmNdxg3ZgwvvvB83iWZVQwH\n99yOjIieJEFxgqQfAMsCYyOiK/AocGbJ9i0jYlPgxJLlxwMRERsBPwEGSVo6XdcD6BsR26SPNwaO\nAzYADgPWS/d3LfCLdJvHgc0iYhNgMPDrRWjfeKAz8DDQuaT33R/4J9AdqIqIDdP6ry9tK3AT8FpE\nnCFpZeAMYIeI6AGMBU4u2f6TiOgREYOBWyKiV0RsDLwEHBURTwB3AKemowJvAP8CTouIbsAE4MyI\n+G+670PS7b6pPUBa/zXAfum+96+v0RFxdURUR0T1Eksvv7Cv3QJZe5U2rLnysjw8YCfG/mV32q3U\nmgf+sCOrLr/097Yb9erHrLXKsnMmrlWSFVdcka236cP99w3PuxRrAu3aVTFp0rtzHk+ePImqqqoc\nK8pOc26rg3tuJ0h6FhgFrAGsC8wmGWYGuBHoXbL9Lem/44C10997p9sRES8DbwPrpevuj4hPS54/\nJiLej4gZwBskPWJIQqt2f+2B4ZImAKcCXRehfUrrCuAG4FBJKwKbA/cCbwLrSLpU0i5Aaff0KuD5\niPhT+ngzkmHukZKeAY4A1irZfkjJ7xtKeixtwyH1tUHSCsCKEfFoumgQsPV82rMZMCIiJqbt+nQ+\n25fNS5M/p+tJd1B92t1Un3Y37039hh3Ovp+PvphOh1XbzNluozVXpFXLJfh02tznx4toypQpfPbZ\nZwB88803PPTgA6y3/vo5V2VNobpXL15//TXemjiRmTNnMnTIYHbfY6+8y8pEc25ruc6zFoKkPsAO\nwOYR8bWkR4Cl69m0dCrRjPTfGhr3en5V5/GMkt9nlzyeXbK/S4ELI+KOtMYBjTjOvGxC0nuFpDd9\nJzAdGBoR3wJTJW0M7EwyEnAAcGS6/RPAtpIuiIjpJB8C7o+In8zjWKVtHQjsExHPSuoH9FmENjRL\nVx6zGVuuvwpt2yzFM+fvwV9vf4F/Pz6x3m336Nme/Tdfi29rZjN9Vg3HXFk5s64//OB9jv1pf2pq\napg9ezY/3m9/dt1tj7zLysQRhx7MiBGP8MnHH9Opwxqc8YcB9Ot/VN5lZaZly5Zc9PfL2HP3namp\nqeGIfkfSpeui9COar+bcVgf3960ATE1DuzNJbw6SkYm+JMPUB5MMXTfkMZJe5UOS1gPWBF4hGSZf\n2LpqZ0UcsZD7QNJ+wE7ArwAi4j1J75EOd6fbrAzMjIj/SXqFdOQgdR1JD/g/kn5MMipxuaROEfG6\npGVJhtlfrefwywHvS1qS5LWpbc+X6Toi4nNJUyVtFRGPkZw6eLTudnWMAq6Q1CEiJkpqm1ev+7ir\nGw7f6tPunvP7pfe+zKX3vpx1SbnYcKNujHxqXN5llMWgG/+ddwllt8uuu7HLrrvlXUZZNNe2Ori/\nbxhwnKSXSIK29i/xV8Cmks4APgIOnM9+rgD+kQ4Lfwv0i4gZi3BJzABgqKSpwENAhwV47kmSDiU5\nT/88sF1ETClZfxOwSkS8lD6uAq6XVHsa5TelO4uIC9Mh7RtIArgfcLOkpdJNzgDqC+7fA08BU9J/\na0N4MHCNpBNIPhwdAVwpaRmSYfv+6XYD0+XfkAzr19YzJZ1EeEta80fAjo15YczMikhRSReQ2gJT\nch340xFxXd61lMuSK3eMlfY+N+8yyubNK/rmXUJZtViiMq8Zr88idAasAFovqXERMdf9M9zjXoxJ\nGkcymvCrvGsxM7PGcXBXAEm/Y+7LoIaWzP6uV3rZm5mZFYiDuwKkAd1gSJuZWWXwddxmZmYF4uA2\nMzMrEAe3mZlZgTi4zczMCsTBbWZmViAObjMzswJxcJuZmRWIg9vMzKxAHNxmZmYF4uA2MzMrEAe3\nmZlZgTi4zczMCsTBbWZmViAObjMzswJxcJuZmRWIg9vMzKxAHNxmZmYF4uA2MzMrEAe3mZlZgTi4\nzczMCqRl3gWYldtGa63EiCv65l1G2ax6yMC8SyirT27un3cJZplyj9vMzKxAHNxmZmYF4uA2MzMr\nEAe3mZlZgTi4zczMCsTBbWZmViAObjMzswJxcJuZmRWIg9vMzKxAHNxmZmYF4uA2MzMrEAe3mZlZ\ngTi4zczMCsTBbWZmViAObjMzswJxcJuZmRWIg9vMzKxAHNxmZmYF4uA2MzMrEAe3mZlZgTi4zczM\nCsTBbWZmViAObjMzswJxcJuZmRWIg9vMzKxAHNxmZVJTU8OWP+pJ3333zLuUJnHlz3vz1nU/YcyF\n+85Z9rsDNuH1qw5k1Pl7M+r8vdl5k/YAVHdaec6yUX/bh702XSuvspvUsUcfyVpVq1HdfaO8Symb\n+4YPo1vX9enauRPn//W8vMvJVHNtq4PbrEyuuOwS1l+/c95lNJkbHn6Nfc65b67ll979Apudejub\nnXo7w5+eBMAL70xly9PuYLNTb2efc4ZzybFb0GIJlbvkJnfY4f247a578y6jbGpqajjxhOO5/c57\nefq5Fxk6+GZeevHFvMvKRHNuq4N7EUialncN9ZHUT9JlDawfIOmU9PelJd0vacB89vlE+u/akp5v\n4np/24htVpT085LH7ST9tynryNLkSZMYfu89HNH/qLxLaTIjX/qQT6fNaNS238ysoWZ2ALBUqxZE\nZFlZ+fTeamvartQ27zLKZszo0XTs2IkO66xDq1at2P/Ag7jrztvzLisTzbmtDu5mRlLLMh6rFfA/\nYFxEDGho24jYIsNS5hvcwIrAnOCOiPciom92JTWt0049iT/++TyWWKLy/5c7bpcNeOqCfbjy571Z\ncdlWc5b3WncVxl60L2Mu2JdfXv3EnCC34njvvcm0b7/GnMdVVe2ZPHlyjhVlpzm3tfL/ijQRSbdJ\nGifpBUnHlCy/KF32oKRV0mWPSPqLpNGSXpW0Vbp8aUnXS5og6WlJ26bL+0m6Q9JDwIOS+kh6VNLt\nkt6UdJ6kQ9L9TZDUMX3enpKeSvf1gKTVFqBJLYEhwGsRcXpJe06W9Hz6c2LJ8rlGFxpoTwtJf0v3\n8ZykX0jaTtJtJc/dUdKtks4DWkt6RtJNDdRwHtAx3e780p5/fcerp9ZjJI2VNPbjKVMW4GVadPfe\ncxerrLIqm/ToWdbj5uGa4S/R9f/+y2an3MYHU7/hvCM2nbNuzGtTqD7pVrY6/Q5O2bcbSy3ZIsdK\nzYrLwd14R0ZET6AaOEHSD4BlgbER0RV4FDizZPuWEbEpcGLJ8uOBiIiNgJ8AgyQtna7rAfSNiG3S\nxxsDxwEbAIcB66X7uxaoDabHgc0iYhNgMPDrBWjPr4GZEVEazj2B/sCPgM2AoyVt0sA+5tWeY4C1\nge4R0Q24CXgY6Fz74SY9zj/TDw3fRET3iDikgRpOB95Itzu1Th31He97IuLqiKiOiOqVV1ml7upM\njXriCe65+066rrcO/Q4/mBGPPMxP+x1W1hrK5aPPpzN7dhAB/3zgFXp2mvu1fmXy50ybPouua66Y\nQ4W2KNq1q2LSpHfnPJ48eRJVVVU5VpSd5txWB3fjnSDpWWAUsAawLjCbpNcKcCPQu2T7W9J/x5GE\nCun6GwEi4mXgbWC9dN39EfFpyfPHRMT7ETEDeAOonQU0oWR/7YHhkiYApwJdF6A9jwNbSFqvZFlv\n4NaI+CoipqVt2KqBfcyrPTsAV0XEt+m6TyMigBuAQyWtCGwO1DerZ0FroL7jzWf7sjrrnD/zyhvv\n8MKrbzLwX/9m6z7bcu3AG/IuKxOrr9h6zu97/WgtXnx3KgBrrdpmzmS0NVZelvWrVuTtj5rlFBFr\nQHWvXrz++mu8NXEiM2fOZOiQwey+x155l5WJ5tzWsp1PLTJJfUjCYfOI+FrSI8DS9WxaetKudtZO\nDY17nb+q87h01s/sksezS/Z3KXBhRNyR1jigEcepNQIYBNwrqXdEvL8Az11Y1wN3AtOBobVBa8U0\n8MQ+bN11dX6w3NK8dtWBnDNkPFt1/SHd1m5LAO98NI1fXDUSgC06r8av9u3Gt9/OZnYEJ17zBJ98\n2biJbc3ZEYcezIgRj/DJxx/TqcManPGHAfSroAmIdbVs2ZKL/n4Ze+6+MzU1NRzR70i6dF2Q/kJx\nNOe2OrgbZwVgahranUmGcCEZsehLMkx9MEkvtiGPAYcAD6U93TWBV0iGyRe2rtrZEkcs6JMj4n+S\nVgWGSdomrW9get5ZwL4kw/TzMq/23A8cK+nhiPhWUtu01/2epPeAM0g+CNWaJWnJiJjVQA1fAsvN\no456j7egr0c5bLVNH7bapk/eZTSJfhc/MteyQQ+9Vu+2N494g5tHvJFxReU36MZ/511C2e2y627s\nsutueZdRFs21rR4qb5xhQEtJL5FMkhqVLv8K2DSdJLUdcPZ89nMFsEQ6tD0E6JcOhS+sAcBQSeOA\njxdmBxHxD+BW4A7gRWAgMBp4Crg2Ip5u4Onzas+1wDvAc+nphYNLnnMT8G5EvFSy7Op025siYnx9\nNUTEJ8DIdALa+XXqaOh4ZmYVRVEpF1RaISi5vvzpiLgurxp69KyOEU+MzuvwZbfqIQPzLqGsPrm5\nf94llI1U/JvY2Ly1XlLjIqK67nIPlVvZpCMDXwG/yrsWM7OicnBXMEm/A/avs3hoRPwpj3rSy+nM\nzGwROLgrWBrQuYS0mZllw5PTzMzMCsTBbWZmViAObjMzswJxcJuZmRWIg9vMzKxAHNxmZmYF4uA2\nMzMrEAe3mZlZgTi4zczMCsTBbWZmViAObjMzswJxcJuZmRWIg9vMzKxAHNxmZmYF4uA2MzMrEAe3\nmZlZgTi4zczMCsTBbWZmViAObjMzswJpmXcBZnlosYTyLqFsPrm5f94llFXbTX+RdwllM3XMZXmX\nYDlwj9vMzKxAHNxmZmYF4uA2MzMrEAe3mZlZgTi4zczMCsTBbWZmViAObjMzswJxcJuZmRWIg9vM\nzKxAHNxmZmYF4uA2MzMrEAe3mZlZgTi4zczMCsTBbWZmViAObjMzswJxcJuZmRWIg9vMzKxAWs5r\nhaQ7gZjX+ojYK5OKzMzMbJ7mGdzA38pWhZmZmTXKPIM7Ih4tZyFmZmY2fw31uAGQtC5wLtAFWLp2\neUSsk2FdZmZmVo/GTE67HvgH8C2wLfAv4MYsizIzM7P6NSa4W0fEg4Ai4u2IGADsnm1ZZmZmVp/5\nDpUDMyQtAbwm6f+AyUCbbMsyMzOz+jSmx/1LYBngBKAncBhwRJZFmZmZWf3mG9wRMSYipkXEpIjo\nHxE/johR5SjOrBIce/SRrFW1GtXdN8q7lLKoxPZeeeYhvP3guYwd+ts5y244rz+jBp/OqMGn8/Ld\nZzFq8OkAHLRr9ZzlowafzlfjLqHbelV5ld7k7hs+jG5d16dr506c/9fz8i4nU821rYqY5z1Wkg2k\nh6nnRiwRsV1WRZllqUfP6hg5akzZjvf4YyNYtk0bju5/BGOfmVC24+Yl7/a23fQXTb7PLXt05Kuv\nZ3DtHw+nev8/z7X+vJP35fNp33Du1cO+t7xrp3b858Kj6brXWU1eE8DUMZdlst95qampYaMu63H3\nvfdT1b49vTfrxaAbb2aDLl3KWkc5NIe2tl5S4yKiuu7yxgyVnwKcmv78HngGGNu05VUeSWtLer4J\n9lMt6ZKmqKlknwMlfS1puZJlF0sKSSvP57m/bWh9I4/ddyGe10fSFiWPj5N0+KLUUi69t9qatiu1\nzbuMsqnE9o4c/waffv71PNfvt2MP/jNs3FzLD9ilJ0OHj8+ytLIaM3o0HTt2osM669CqVSv2P/Ag\n7rrz9rzLykRzbmtjhsrHlfyMjIiTgT7Zl2YAETE2Ik7IYNevA3sDpJMPtyOZeDg/ixTci6APMCe4\nI+LKiPhXTrWYzbFlj458+OmXvPHOlLnW9d2pB/8ZVjn9nPfem0z79mvMeVxV1Z7JkxvzZ6N4mnNb\n5xvcktqW/KwsaWdghTLUVglaSrpJ0kuS/itpGUk9JT0qaZyk4ZJ+CCDpEUl/kTRa0quStkqX95F0\nV/r7KpLul/SCpGslvZ2+J2unx7gmXXefpNbzqW0wcGD6ex9gJMm1+qTHOjSt5RlJV0lqIek8oHW6\n7KZ0u9vStrwg6ZiS50+TdFG6/EFJq9QtQNIfJI2R9LykqyUpXX6CpBclPSdpsKS1geOAk9JjbyVp\ngKRT0u07SXpA0rOSxkvqWM+xjpE0VtLYjz+e+w+s2cI6YJdqhtYTzr02XIuvp8/ixTfez6Eqq2SN\nGSofRzI0Pg54EvgVcFSWRVWQ9YErImID4AvgeOBSoG9E9AT+CfypZPuWEbEpcCJwZj37OxN4KCK6\nAv8F1ixZty5webruM2C/+dT2KrCKpJWAn5AEOQCSNiAJ9S0jojtQAxwSEacD30RE94g4JN38yLQt\n1cAJkn6QLl8WGJvW8+g82nNZRPSKiA2B1sAe6fLTgU0iohtwXES8BVwJXJQe+7E6+7kpbfvGJL3y\nuf5SRsTVEVEdEdUrrzzXZwizhdKixRLsvd3G/Lee4fD9d+5ZUb1tgHbtqpg06d05jydPnkRVVeVM\nvCvVnNvamODeICLWiYgOEbFuROwElG9mT7G9GxEj099vBHYGNgTul/QMcAbQvmT7W9J/xwFr17O/\n3qQBGxHDgKkl6yZGxDPzeX5dtwAHAT8CSsNwe5JL/8akdW4PzOsWtydIehYYBaxB8gECYDYwJP39\nxrT2uraV9JSkCSRD9V3T5c8BN0k6lJJRgPqk5+mrIuJWgIiYHhHzPhlp1oS2+9H6vPrWh0z+6LPv\nLZfEfjv1YOjwuc97F1l1r168/vprvDVxIjNnzmTokMHsvkdlflFkc25rY4L7iXqWPdnUhVSourPx\nvwReSHuN3SNio/SDUK0Z6b81NO7mOKVmlPze2OcPAf4I3B8Rs0uWCxhUUuf66R3zvkdSH2AHYPO0\nt/s0Jfezr+N7r4WkpYErSEYfNgKuKXnu7sDlQA+SDw8L+lo0K0ccejB9tt6CV199hU4d1mDg9dfl\nXVKmKrG9g87txyODfsV6a63G68P+yBH7bA7U9qrnDufePTox6YOpvDX5k3KXmqmWLVty0d8vY8/d\nd6b7Rhuw3/4H0KVr1/k/sYCac1sb+j7u1YEqknOam5D8MQdYnuSGLDZ/a0raPCKeBA4m6ZUeXbtM\n0pLAehHxQiP3NxI4APiLpJ2AlRaluIh4W9LvgAfqrHoQuF3SRRHxkaS2wHIR8TYwS9KSETGLZK7D\n1Ij4WlJnYLOSfSwB9CUZITgYeLzOMWpD+mNJbdJt/5tOlFsjIh6W9DjJiEAbkg89y9fThi8lTZK0\nT0TcJmkpoEVz6nUPuvHfeZdQVpXY3iN+M7De5cecWf/XNjw27jW2OeKCDCvKzy677sYuu+6Wdxll\n0Vzb2lBPZmegH8lQ7gV8F9xfkN/M4qJ5BThe0j+BF0nObw8HLpG0AsnrfzHQ2OA+C7hZ0mEkox4f\nkATaQt+CNiKuqmfZi5LOAO5Lg3QWyfn5t4GrgeckjQeOBI6T9FLa1tIb83wFbJru5yO+mwhXe4zP\nJF0DPJ+2o/b0SwvgxvT1EXBJuu2dJMG+N1D3Qt3DgKsknZ3Wuj/w5sK9ImZmzVtjbsCyX0T8r0z1\nWAPS3mRNRHwraXPgH+nksWZH0rSIaJb3tC/3DVisvLK4AUtzVe4bsFh5LcoNWHpKWrH2gaSVJJ3T\npNVZY61Jcs73WeAS4Oic6zEzszJrTHDvGhFzpkxGxFSg+Q36LwYi4rWI2CQiNk4vo2qw2yjp8vS6\n59Kf/mWqtVn2ts3Miq4xs3VbSFoqImYApDf2WCrbsqwpRMTxeddgZmZNqzHBfRPwoKTrSSYL9QMG\nZVmUmZmZ1W++wR0Rf0nPqe5Aci3ucGCtrAszMzOzuTXmHDfAhyShvT/JHa5eyqwiMzMzm6eGbsCy\nHsk9rH8CfExyly1FxLZlqs3MzMzqaGio/GWS+1fvERGvA0g6qSxVmZmZWb0aGir/Mcm3LD2cfl3k\n9nx39zQzMzPLwTyDOyJui9la8XMAACAASURBVIiDgM7AwyRfNbmqpH+k98k2MzOzMpvv5LSI+Coi\n/h0Re5Lct/xp4LTMKzMzM7O5NHZWOZDcNS0iro6I7bMqyMzMzOZtgYLbzMzM8uXgNjMzKxAHt5mZ\nWYE4uM3MzArEwW1mZlYgDm4zM7MCcXCbmZkViIPbzMysQBzcZmZmBeLgNjMzKxAHt5mZWYE09H3c\nZhVJgORvqK1UU8dclncJZXPVkxPzLqGsjt28Q94lNAvucZuZmRWIg9vMzKxAHNxmZmYF4uA2MzMr\nEAe3mZlZgTi4zczMCsTBbWZmViAObjMzswJxcJuZmRWIg9vMzKxAHNxmZmYF4uA2MzMrEAe3mZlZ\ngTi4zczMCsTBbWZmViAObjMzswJxcJuZmRWIg9vMzKxAHNxmZmYF4uA2MzMrEAe3mZlZgTi4zczM\nCsTBbWZmViAObjMzswJxcJuZmRWIg9usDO4bPoxuXdena+dOnP/X8/IuJ1OLU1uh8tv74Ttv8tcj\nd5/zc9ou3XjkP//k9ivO5c+H7sBf+u3Kdb87jq+//CLvUptcc31vFRF512BWVj17VsfIp8aW7Xg1\nNTVs1GU97r73fqrat6f3Zr0YdOPNbNClS9lqKJfFqa2Qf3uvenJiWY5Ta3ZNDWfutzknXXkrH73z\nJuv22JwWLVtyxz+SUNvrZ6dnevxjN++Q6f5L5f3eArReUuMiorrucve4F1OSHpE0138QJevfkjRB\n0nOS7pO0ehMdd6Ckvk2xr3nsv8F25WHM6NF07NiJDuusQ6tWrdj/wIO4687b8y4rE4tTW2Hxa++r\n455g5XZr0Xb1KjpvuhUtWrYEYO2um/D5lA9yrq5pNef31sFdQJJalulQ20ZEN2As8NvGPklSi+xK\nKp733ptM+/ZrzHlcVdWeyZMn51hRdhantsLi197xD91Jj+33nGv5U/cMZYPN+pS/oAw15/fWwZ0T\nSWtLeknSNZJeSHu1rSV1lzQq7eneKmmldPtHJF0saSzwy7Tn+o902zcl9ZH0z3SfA0uO8w9JY9Nj\nnLWQ5Y4AOjW0v7SH/hdJ44H9JR0taYykZyX9T9IyJfvbId3Hq5L2KHk9HpM0Pv3ZIl3+Q0kjJD0j\n6XlJWy1MuyQdk24/dsrHUxbyZTBbfH07ayYvjHyQ7tvu+r3l9/3rcpZo0ZKeO+6dU2WLHwd3vtYF\nLo+IrsBnwH7Av4DT0p7uBODMku1bRUR1RFyQPl4J2Bw4CbgDuAjoCmwkqXu6ze/ScyTdgG0kdVuI\nOvdIa5nf/j6JiB4RMRi4JSJ6RcTGwEvAUSXbrQ1sCuwOXClpaeAjYMeI6AEcCFySbnswMDwiugMb\nA88sTLsi4ur0tateZeVVFuIlWHjt2lUxadK7cx5PnjyJqqqqstZQLotTW2Hxau9Lox6l/bpdWa7t\nd///PHXvf3nhyYc47PcXISnH6ppec35vHdz5mhgRtUE0DugIrBgRj6bLBgFbl2w/pM7z74xkduEE\n4MOImBARs4EXSMIR4IC0F/w0SagvyMyKhyU9AywPnNuI/ZXWt2Hag54AHJJuW+s/ETE7Il4D3gQ6\nA0sC16TbDy3Z7xigv6QBwEYR8WUTtKusqnv14vXXX+OtiROZOXMmQ4cMZvc99sq7rEwsTm2Fxau9\n4x+8kx47fDdM/tJTj/LQv6/m6HOvptXSrXOsLBvN+b0t17lSq9+Mkt9rgBXns/1X83j+7Dr7mg20\nlNQBOAXoFRFT0yH0pRegvm0j4uPaB43YX2l9A4F9IuJZSf2APiXr6l7KECSjBh+S9KqXAKYDRMQI\nSVuT9M4HSroQeGwR21VWLVu25KK/X8aeu+9MTU0NR/Q7ki5du87/iQW0OLUVFp/2zvjma14Z+zgH\nnHLOnGX/u3gA386cyRUnHw7A2l26c8Apf8qrxCbXnN9bB3fz8jkwVdJWEfEYcBjw6Hye05DlScL0\nc0mrAbsCj5Rpf8sB70takqTHXTqrY39Jg4AOwDrAK8AKwKSImC3pCKAFgKS10uXXSFoK6AE828Tt\nytwuu+7GLrvulncZZbE4tRUWj/Yu1XoZ/nzX+O8tO+Pmh3Oqpnya63vr4G5+jiA577sMyTBy/4Xd\nUdrbfRp4GXgXGLkohS3g/n4PPAVMSf9drmTdO8Bokg8Cx0XEdElXAP+TdDgwjO96732AUyXNAqYB\nh0fExKZsl5lZkfgGLLbYKfcNWMyyUu4bsOStnDdgaQ58AxYzM7MK4KHyxZykp4Cl6iw+LCIm1Le9\nmZnly8G9mIuIH+Vdg5mZNZ6Hys3MzArEwW1mZlYgDm4zM7MCcXCbmZkViIPbzMysQBzcZmZmBeLg\nNjMzKxAHt5mZWYE4uM3MzArEwW1mZlYgDm4zM7MCcXCbmZkViIPbzMysQBzcZmZmBeLgNjMzKxAH\nt5mZWYE4uM3MzArEwW1mZlYgDm4zM7MCcXCbmZkVSMu8CzAzs4Vz7OYd8i6hrP4w7JW8S2gW3OM2\nMzMrEAe3mZlZgTi4zczMCsTBbWZmViAObjMzswJxcJuZmRWIg9vMzKxAHNxmZmYF4uA2MzMrEAe3\nmZlZgTi4zczMCsTBbWZmViAObjMzswJxcJuZmRWIg9vMzKxAHNxmZmYF4uA2MzMrEAe3mZlZgTi4\nzczMCsTBbWZmViAObjMzswJxcJuZmRWIg9vMzKxAHNxmZmYF4uA2MzMrEAe3WRncN3wY3bquT9fO\nnTj/r+flXU6mFqe2gttbacbeNpB//nwPrj9+T+48/2S+nTljzroHrzqHi/fvkWN1iYoNbkmPSKpu\nYP2RkiZIek7S85L2LkNNW0l6QdIzkqok/Xc+218rqct8tqm3nZL6SLprPs9dUdLPG1d9diQNlNQ3\n/b0xbT5R0jLlqW7R1dTUcOIJx3P7nffy9HMvMnTwzbz04ot5l5WJxamt4PZWWnu//ORDxt95A4dd\n9F/6X34nUTObl0fcDcAHr01g+rQvcq4w0SyDW1LLjPffHvgd0DsiugGbAc9lfMwWwCHAuRHRPSIm\nR0Tfhp4TET+NiCz/r1gRWKDgViKz/24a2eYTgcIE95jRo+nYsRMd1lmHVq1asf+BB3HXnbfnXVYm\nFqe2gttbie2dPbuGb2dOZ3bNt8ya8Q3Ltl2V2TU1PHL9+WzT/5S8ywMyDG5Ja0t6SdI1aS/zPkmt\nJXWXNCrt6d4qaaV0+0ckXSxpLPDLtBf2j3TbN9Me5D/TfQ4sOc4/JI1Nj3FWI8tbFfgSmAYQEdMi\nYmJJHdXp7ytLeiv9vZ+k29P1r0k6s6SGQyWNTnvSV6UhjaRpki6Q9CzwG+AA4I+Sbkpfn+fT7VpI\n+lva839O0i/qqWVh2llb34D0tXskfS1PSFedB3RM6z4/3fZUSWPSOs4qeS9fkfQv4HlgjbRt56f1\nPCBp05L971XSrvNL9ndsulySLkv3+UD6ftTW2mCb09rbAQ9LejhdtpOkJyWNlzRUUpsFeX2y9t57\nk2nffo05j6uq2jN58uQcK8rO4tRWcHsrrb3L/WA1eu17JFcduR1XHL4VSy27HB169Obpu2+i06bb\n0abtqvPfSRlk3eNeF7g8IroCnwH7Af8CTkt7uhOAM0u2bxUR1RFxQfp4JWBz4CTgDuAioCuwkaTu\n6Ta/i4hqoBuwjaRujajrWeBDYKKk6yXt2cj2bJq2oRuwv6RqSRsABwJbRkR3oIakZw2wLPBURGwc\nEeekbTg1Ig6ps99jgLWB7unrclM9x16YdpbqDOyctuFMSUsCpwNvpCMAp0raieQ92xToDvSUtHX6\n/HWBKyKia0S8nbbtofS9/RI4B9gR2Bc4O33OUcDnEdEL6AUcLalDus36QBfgcGCLedQ8V5sj4hLg\nPWDbiNhW0srAGcAOEdEDGAucXHdHko5JPwSMnfLxlAV86cxscTB92ue8/tSDHHPtA/xs0AhmTf+G\n5x+6jVceH0aPPQ/Nu7w5Mh2SBiZGxDPp7+OAjsCKEfFoumwQMLRk+yF1nn9nRISkCcCHETEBQNIL\nJEH3DHCApGNI2vJDkjBocNg7Imok7UISJtsDF0nqGRED5tOe+yPik7SGW4DewLdAT2CMJIDWwEfp\n9jXA/+azT4AdgCsj4tu0vk/r2WaB21nH3RExA5gh6SNgtXq22Sn9eTp93IYksN8B3o6IUSXbzgSG\npb9PAGZExKz0vVq7ZH/dlJ6/BlZI97c1cHNE1ADvSXpoHjU3ps2bpctHpq9/K+DJujuKiKuBqwF6\n9qyOeRwvE+3aVTFp0rtzHk+ePImqqqpyllA2i1Nbwe2ttPa+/cyTrLBae5ZZoS0A626xI0/cdCmz\nZs7gmmN2AmDWjG+45pidOPrq+3KrM+vgnlHyew3JOdWGfDWP58+us6/ZQMu093YK0CsipqZD6Es3\nprCICGA0MFrS/cD1wACSIK4diai7r7p/8AMQMCgiflPPYaan4bRIGtNOSfvy3ejFT+vZTd33or73\nXiTn4K+qs++1mfu9mZW+hlDy/kTEbH03R0HALyJieJ397VbPsamzTWPfW5F8oPrJ/PaZl+pevXj9\n9dd4a+JE2lVVMXTIYAbe8O+8y8rE4tRWcHsrrb3LrfJD3nv5WWZN/4aWSy3NO88+SfU+/eix52Fz\ntrl4/x65hjaUf3La58BUSVuljw8DHm1g+/lZniRQPpe0GrBrY54kqZ2k0jn93YG309/fIulBA9Sd\nPLajpLaSWgP7ACOBB4G+klZN991W0loL2I77gWNrA09S2zrr59vOiLg1HfLuHhFjG3ncL4HlSh4P\nB46sPUesZOb7opzUGQ78LB2WR9J6kpYFRgAHpufAfwhsW89zG2pzad2jgC0ldUqPsayk9Rah5ibX\nsmVLLvr7Zey5+85032gD9tv/ALp07Zp3WZlYnNoKbm+ltbfd+huz3pY78a8Tf8zA/9uLmB102+XA\nvMuaS9Y97vocAVyp5HKeN4H+C7ujiHhW0tPAy8C7JEHaGEsCf5PUDpgOTAGOS9f9DfhPOkR7d53n\njSYZ+m4P3FgbkJLOAO5TMtt6FnA8330QaIxrgfWA5yTNAq4BLmuCdjYoIj6RNFLJJLl70/PcGwBP\npsPO04BDSXroC+NakmHz8Up2OIXkA8+twHbAiyTD8PUNbTfU5quBYZLeS89z9wNulrRUuv4M4NWF\nrDkTu+y6G7vsOt+BhoqwOLUV3N5K0/uQE+h9yAnzXH/i0PFlrKZ++m600xqShkN1RPxf3rXYounZ\nszpGPtXYQQkzay7+MOyVvEsoq/P37DwunaD7Pc3yOm4zMzOrXx5D5WUl6SlgqTqLD6udod5YETEQ\nGNhEZZmZmS2Uig/uiPhR3jWYmZk1FQ+Vm5mZFYiD28zMrEAc3GZmZgXi4DYzMysQB7eZmVmBOLjN\nzMwKxMFtZmZWIA5uMzOzAnFwm5mZFYiD28zMrEAc3GZmZgXi4DYzMysQB7eZmVmBOLjNzMwKxMFt\nZmZWIA5uMzOzAnFwm5mZFYiD28zMrEAc3GZmZgXi4DYzMysQB7eZmVmBKCLyrsGsrCRNAd7O4dAr\nAx/ncNy8uL2Va3FqK+TX3rUiYpW6Cx3cZmUiaWxEVOddR7m4vZVrcWorNL/2eqjczMysQBzcZmZm\nBeLgNiufq/MuoMzc3sq1OLUVmll7fY7bzMysQNzjNjMzKxAHt5mZWYE4uM3MzAqkZd4FmJkVlaQO\nwPsRMT193BpYLSLeyrWwJiSpR0PrI2J8uWqxhCenmWVI0v3A/hHxWfp4JWBwROycb2XZkHQ8cFOd\n9v4kIq7It7JsSBoLbBERM9PHrYCREdEr38qajqSHG1gdEbFd2YopI0nLAL8C1oyIoyWtC6wfEXfl\nXJp73GYZW7k2xAAiYqqkVfMsKGNHR8TltQ/S9h4NVGRwAy1rQxsgImam4V0xImLbvGvIyfXAOGDz\n9PFkYCjg4DarcLMlrRkR7wBIWguo5GGuFpIU6VCepBZARQVZHVMk7RURdwBI2psKvoe3pA2BLsDS\ntcsi4l/5VZSpjhFxoKSfAETE15KUd1Hg4DbL2u+AxyU9CgjYCjgm35IyNQwYIumq9PGx6bJKdRxw\nk6TLSN7fd4HD8y0pG5LOBPqQBPc9wK7A40ClBvfMdM5C7YfQjsCMfEtK+By3WcYkrQxslj4cFRGV\n3CNbgiSst08X3Q9cGxE1+VWVPUltACJiWt61ZEXSBGBj4OmI2FjSasCNEbFjzqVlQtJOJB+8uwD3\nAVsC/SOioXP+ZeHgNsuApM4R8fK8ZuR6Jm6xSTo0Im6UdHJ96yPiwnLXlDVJoyNiU0njgG2BL4GX\nIqJzzqVlRtIPSD50i2b0odtD5WbZOJlkSPyCetYFUFEzcSX9JyIOSHtlc/UGIqJbDmVladn03+Xq\nWVepvaGxklYEriGZtDUNeDLfkrIj6cGI2B64u55luXKP2yxDkpauvca3oWVFJ+mHEfF+OvluLhHx\ndrlrKgdJW0bEyPktqzSS1gaWj4jnci6lyUlaGlgGeJjknH7thLTlgWHNYYTBd04zy9YTjVxWaBHx\nfvrrzyPi7dIf4Od51paxSxu5rPAkbSmpdqShN9BvXh/UCu5YkhGFzum/tT+3A5flWNcc7nGbZUDS\n6kAVcCNwMN//1H5lc/jUngVJ4yOiR51lz1XaULmkzYEtgBOBi0pWLQ/sGxEb51JYhiQ9RzI5rRsw\nELgWOCAitsmzrqxI+kVENMsPYT7HbZaNnYF+QHugdKLSl8Bv8ygoS5J+RtKzXif9A19rOaASh41b\nAW1I/oaWnuf+AuibS0XZ+zYiIr1W/bKIuE7SUXkXlZWIuLS5XrfuHrdZhiTtFxH/y7uOrElaAVgJ\nOBc4vWTVlxHxaT5VZU/SWrXn79NL4dpExBc5l5WJ9F4Ew4D+wNbAR8CzEbFRroVlZF7XrUdE7h/M\nfI7bLFsPSrpQ0tj054I05CpKRHweEW9FxE+AFYE905818q0sc+dKWj499/s88KKkU/MuKiMHktyA\n5KiI+IBkNOn8fEvKVF+S+xF8EBH9SU4TNIv/dx3cZtm6jmR4/ID05wuSeyBXJEknADcBq6Y/N0r6\nRb5VZapL2sPeB7gX6AAclm9J2YiIDyLiwoh4LH38TnMYNs7QNxExG/hW0vIkIwzN4oOoz3GbZatj\nROxX8vgsSc/kVk32fgr8KCK+ApD0F5JrfZvlJJ8msKSkJUmC+7KImCWpIs8/StqM5H3cgOQcfwtg\nWkQ0i15oBprtdesObrNsfSOpd0Q8DsklNcA3OdeUJQGltzet4bsZ9ZXoKuAt4FlgRHp5VEWe4ya5\nFOogkm/Iqia5J/t6uVaUoYiovYzxSknDaEbXrXtymlmGJG1M8iUMtb2SqcARzeUPQFNLbwF6BHBr\numgfYFBEXDTvZ1UWSS0j4tu862hqksZGRHXp5X2Sno6ITfKurSkV4XbF7nGbZeuL9AsZlgeIiC8k\ndci7qKxExIWSHiG5QQckX8rwdI4lZU7S7kBXSi4ZAs7OqZwsfZ1+1/gzkv4KvE9lzpP6FXA0zfh2\nxe5xm2VoHjckGRcRPfOqKUuSboiIw+a3rFJIupLk9pjbktyQpC8wOiIq7vrm9DTAhyTnt08iGUW6\nIiJez7WwxZB73GYZkNSZpBe2gqQfl6xanu/3zCpN19IHkloAFfkhJbVFRHRLh4/PknQByezyihMR\nb6c97rWBW4BXImJmvlU1vTr/v84lIm4pVy3z4uA2y8b6wB58d01zrS9JhuEqiqTfkNwRrrWk2slZ\nAmYCV+dWWPZqJxp+Lakd8AnwwxzryUx6SuBK4A2S97aDpGMjotI+qNT+/7oqyW1tH0ofb0vyPQO5\nB7eHys0yJGnziGgWl5CUg6RzI+I3eddRLpJ+T3KJ1PbA5STnQK+NiN/nWlgGJL0M7FE7NC6pI3B3\nBd93/z6SiaTvp49/CAyMiJ3zrczBbZap9CsCj6LO5KWIODK3ojIk6RaSc73D0ptXLDYkLQUsHRGf\n511LFiSNiYheJY9Fcj6/VwNPKyxJL0XEBiWPlwBeKF2WFw+Vm2XrBuBlki8dORs4BHgp14qydQXJ\nvawvlTQUuD4iXsm5pibX0HlQSc3iPGhTKWnrWEn3AP8hGVnYHxiTW2HZe1DScODm9PGBwAM51jOH\ne9xmGaq9zrX22tf0LluPRcRmedeWpfR+7D8Bfge8S3L3qRsjYlauhTURSQ3dtjYqaURlPm0lvY93\nRZK0L8kXqgCMiIhbG9q+XNzjNstWbVB9ln5F4Ackk14qlqQfAIeS3LP7aZJ7l/cmuTFLn/wqazqV\nHFZ1LU5trcd4km+4e0DSMpKWi4gv8y7KwW2WraslrQScAdxB8h3OFTdxqZakW0lm1N8A7Fk7sQcY\nImlsfpVlI/2QcibJB5MAHgfOjohPci0sA4vhfI2jgWOAtkBHoIpkVv32edYFlXnXG7NmIZ3M8kVE\nTI2IERGxTkSsGhFX5V1bhi6JiC4RcW5JaAMQEdV5FZWhwcAUYD+Sm69MAYbkWlF2bgBWJ5mv8SjJ\n13rm3vvM0PHAlqT3no+I12gmo2UObrOMpLOqf513HWXWJf1GJQAkrSTp5w09oeB+GBF/jIiJ6c85\nwGp5F5WRTullbl9FxCBgd+BHOdeUpRmlN5iR1JJkVCV3Dm6zbD0g6RRJa0hqW/uTd1EZOjoiPqt9\nEBFTqcAbzpS4T9JBkpZIfw4AhuddVEbqztdYgWbSA83Io5Jqbyq0I8m3ot2Zc02AZ5WbZUrSxHoW\nR0SsU/ZiykDSBKBbpH9Y0luePhcRXRt+ZjFJ+hJYFqi9Zn0J4Kv094iI5XMpLAOSfgr8D9gIGEg6\nX6NST/2kp7qOAnYiuVPccJKb6+Qemg5uM2syks4H1iL5nmqAY4F3I+JX+VVliyoNsb4R8Z+8azEH\nt1mmJC0DnAysGRHHSFoXWD8i7sq5tEykf+CP5buZt/eT9FJq8qsqW+lVA+vy/ZnWI/KrKBu138ed\ndx3lImkP4I8kH0RbkvS6m8UoioPbLEOShgDjgMMjYsM0yJ+IiO45l5aZ9Buk1ieZyPNKpdx0pT7p\n8PEvSWZYPwNsBjwZEbl/Z3NTk3Qe8DHJrPna0wFExKe5FZUhSa8DPwYmNIfh8VIObrMM1fZSau+g\nli57NiI2zru2LEjqAwwC3iLpoaxB8kUNFdcDhTnn9HsBoyKie/p1rn+OiAa/GrKIFsP5Gg8D2zfH\ne+77Bixm2ZopqTXpZSTpNyrNyLekTF0A7FR7f3JJ65Hc67lSv5N7ekRMl4SkpSLiZUnr511UFiKi\nQ941lNmvgXskPUrJ/7MRcWF+JSUc3GbZOhMYBqwh6SaSGzr0y7WibC1Z+qUiEfFqen/2SjUpvW79\nNuB+SVOBt3OuKTPpZWBd+P75/H/lV1Gm/gRMI2lrq5xr+R4PlZtlLL0t5mYkQ8ejIuLjnEvKjKR/\nklwadWO66BCgRaXeFrOUpG1Irm2+txLP60s6k+Re812Ae4Bdgccjom+edWVF0vMRsWHeddTHN2Ax\ny5CksyPik4i4O51J/mna865UPwNeBE5If15Ml1UkSTfU/h4Rj0bEHcA/cywpS31Jrhb4IP3ikY1J\nPqhUqnsk7ZR3EfXxULlZttaQ9JuIOFfSUiTfZfx03kVlJSJmABemP4uD791YJr3hTKWez/8mImZL\n+lbS8sBHJJMPK9XPgFMkzSC5a1yzuRzMwW2WrSOBmyT9BtiWZBj1opxranLp7Op5nneLiG5lLCdz\n6ftZezvML0j+qAPMBK7OrbBsjU3P519DconjNODJfEvKhiQBXSPinbxrqY/PcZtlQFKPkodLktxJ\nbCRwHUBEjM+jrqxIWquh9RFRkRO2JJ0bEb/Ju45yk/6/vTuPkrOq0zj+fcCwDEuCChwXhl0xQkAU\nQeHIIjCi6DiCKKjDMsq4g4wz4OgRxAVmXED0uIxAgAEVUNC4sI0ia1QgQMIuilFRBDkYEKIIPPPH\n+1ZSXalODOm3bvVbz+ecOul6qzv9tIb+1Xvv796rjYC1bc8tHKUxkubZ3qp0jn5SuCMaUK8BHY/b\nuEHHKKp3ijsA2Nj2RyVtQHVi2E8LR5swktajGl3YDJgHHGf7wbKpmifpdODztq8pnaVXCndErDBJ\nV9reqT50w9TzgQzRvGATJH2Rqot+N9vPq7c/vdj2doWjTRhJF1INjV8O7A2sZfugoqEGQNJtVG9W\n5lPtFNf5t1x82ieFO6JBkg4DZgIPUc0NbgscZfviosFiQkiaY3vbNu+M1/vzdH7mkpkGYbzpn2GY\n9slysIhmHVIPK+4JPA14C3B82UjNkrS1pHfXj+J3Jw37a91J3tkZb10WH/HZGpLW6TpLfuWe561U\nF+gNqEZT5gOPMCQ1cyhCRLRYp9v4lcAZtm/uutY69QjDWcB69eMsSe8pm6pRJwHnA+tJ+jhwJfCJ\nspEm3FSqofLOY21gTv3xtQVzNarecOZIoNN8OIXFGwsVlaHyiAZJmgk8C9iYasOKlYEf2W7lWl9J\nc4GX2H64fr4G1WlZrb3zrg8WeTnVG7If2L61cKQiJD2/fmPaCpJuAF4AzOmaBpk7DP+Ws447oln/\nAmwD/ML2I/X2pwcXztQkAd1nbz9OC0cYeoaI76U6SGXRa2096nIZ/peqh6MtHrVtSZ1pkDVKB+pI\n4Y5o1rlUW2DeAGD7fuD+oomaNRP4iaTz6+evpZ1bgP4B+A3wWP28+82JgVYedbkMbXuDdo6kLwPT\nJL2NajOlkwtnAjJUHtEoSbtT3WHvQFXEZ3afntVG9eYzO9VPrwButv1owUgTTtKJVDvhXUV1t32l\nR/yXaRu7zSXtQdVYKuAi25cUjgSkcEcMhKSpwP7AB4FfUy0NO7Mtp0hJ+rDtY/tcnwp82/Yug0/V\nrHpbzF2o/n99MXAx8EXbd5XMVUrbCrek/7J95LKulZCu8oiG1fPaBwFvpTpg5LNUc4FD8e59guxU\nd1UvIml94DJgabvIGU7Q/gAAEV9JREFUTVquXAr8B/AlqpGV3cumKqpVoyrAHn2u7TXwFH3kjjui\nQfVc73OpGndOs/27rteutf2iYuEmkKTVgG8Ad9g+QtLmwAXAp2x/qWy6iVc3Kv0j8AZgXeA84Jxh\nPZRiRfTsu7+EFu67/w7gnVR9Cj/vemkt4Crbby4SrEsKd0SDJO1a35W1nqQpwNnAX4CXAofbPn/p\nXzU5SXoY+Bnw9frPMb9IbZ9XIlcTRm3f/Xp6Zx3gOOCorpceGpbVAincEQ2ph8gPALaoL90KfK3u\nLG8VSUfUH06hGjq+gmpvawBst+p8bkmnMf4xprZ9yADjREPqXfHWp2sF1jCMqqRwRzRA0vOAHwIX\nUc1ri2ozhz2otlC8rWC8CVfvMjUu2x8ZVJZhIulA26eXzjFRJG0JTAdW61yzfUa5RM2R9G7gGOD3\nLN7GNoeMRLSVpG9QzXme03N9H+AA2/uUSVaWpA/YPq50jkFpU6d1/eZsF6rC/X2qRq0rbe9bMldT\nJN0JbD+MI2TpKo9oxla9RRvA9jeBLQvkGRavLx1gwNq0Kcm+VFu73mP7YKotfKeWjdSoXwMLSofo\nJzunRTTj4Sf5Wtu1qZD9Ldo0pLnQ9hOSHpO0NtVWrxuUDtWgXwA/kvQ9qoZLYDj6NVK4I5qxXlfD\nVjdRLR8aVW0qZH+LNr1RuVbSNKrNg64D/gTMLhupUb+qH6vUj6GROe6IBqRZqz9J13dOWhoFkj5v\n+92lc0w0SRsBa9ueWzjKSErhjihoBJu1/tN2a86rlrQqsA+wEWOXDC2x/WsbSJrBkj9ra9asA0j6\nDksZGbL9mgHG6SuFO6KgtnQdS/ocS/9l994BxhkYSRdSNTBdR9dxprY/XSxUQySdCswAbmbs8qhW\nrVmXtPPSXrd92aCyjCdz3BFltWUO9NrSAQp5tu1XlA4xIDvYnl46RNP6FWZJ2w7T1q4p3BFltWLI\nq02bjCynqyVtZXte6SADMFvSdNu3lA5SwMlUBwMNhRTuiLLacscNgKR1gSNZcnetVu1n3WUn4CBJ\nd1EtGRJDsrtWA86gKt730P6ftddQ/Xeawh1R1rmlA0yws6gOGnkV8HbgQOC+oomaNRTHPA7IKcBb\ngHksnuMeFUO1CiTNaRENGOFmretsv1DS3M6dmKRrbG9XOlsTJD21z+WHbP914GEaJmm27ZeUztG0\nyXCMae64I5oxqs1anYL1O0mvAn4L9CtubTGHavewB6iGU6cB90j6PfA229eVDDfBrpf0VeA7jN1J\nrFXLwYClrQgwUHzaJ3fcETFhJO1NdaTnBsDngLWBj9ieVTRYQyR9BfiG7Yvq53tSreueCXzW9vYl\n800kSTP7XG7dcrDJIIU7okEj2Kw1UiTNs71Vz7W5tmdIusH2NqWyTaT6XOr32j6hdJZBGtZjTDNU\nHtGskWrWkrQx8B6W3F2r+G5TDfmdpCOBr9fP3wD8vi50rWngsv24pP2BkSnc4x1jStVdX1TuuCMa\nNILNWjdSdR+P6Tweht2mmiDp6cDRVMvCAK6i6kBeAPy97TtLZZtokk4AplC9EV10wt0wNGs1QdI8\nqqNLr7e9taT1gTNt71E4Wu64Ixo2as1af7Z9UukQg2L7D1QjDP20pmjXOsP+3fuwD0WzVkOG9hjT\nFO6IZn1M0lTg31jcrPW+spEa9dl6iPFixnYet+quTNKJtg8f70CKNk4N2N61dIYBG9pjTDNUHhET\nRtJxVJt0/JyxB1G06q5M0gttXzfegRRtnBqo34AeDbysvnQZcKztBeVSDcawHWOawh3RoFFr1pJ0\nJzDd9qOls8TEkvRN4Cagsy/9W4Ctbb+uXKqJJ2kL27eNtxHLMIwepXBHNGgEm7W+BRxq+97SWQZB\n0o7AMcCGVG/MOvt3b1IyVxP6LW9r05K3Dkn/Y/tQSZf2eXkoRo8yxx3RrJFq1qLaOew2Sdcwdo67\nlSMMVG/K3kfPedwttVDSTravhEVvWhYWzjThbB9a/zm0c/q5445okKQDgM1pebNWxyjN+QJI+kmb\ndkdbGknbUA2TT60vPQAcOCzzvhNN0ruAs2z/sX6+DrC/7S+UTZbCHdGoUWnWgkW7a/3fMN+pTDRJ\nxwMrA+fR8jdmklYF9gU2pRpZWUD1b/nYpX7hJDXO1MD1tl9QKlNHhsojmvV6YJNRaNaqd9d6QtLU\nUeg0rnXutl/Uda2ta5u/DfyR6mCVuwtnGYSVJcn13W39xnSVwpmAFO6Ipt1EdXcyEs1aVGtd50m6\nhLG7a7XyGNNRGl0Anm37FaVDDNCFwNmSvlw//9f6WnEp3BHNGrVmrfPqx0iot8H8BPBM23tJmg68\nxPYphaM14WpJW9meVzrIgBxJVazfUT+/BDi5XJzFMscd0aBRa9YCkLQK8Jz66e22/7q0z5/MJF1A\ndYTnB+v9rJ9Ctbf1Vsv40klH0i3AZsBdVG9CO0vfZhQNNoJyxx3RkHpO7JhRGk6VtAtV5/EvqX6x\nbyDpQNuXl8zVoKfbPkfSBwBsPyaprcvC9iodYBAknWN7v/qQkX7b2RZ/o5LCHdGQEW3W+jSwp+3b\nASQ9B/ga8MKiqZrzsKSnUf+Cl7QDVbd169ieXzrDgBxe/7l30RRLkcId0ayRatYCpnSKNoDtOyRN\nKRmoYUcAs4BNJF0FrEu1ZComr+8C2wIfs/2W0mH6SeGOaNZINWtRnah0MnBm/fxNwLUF8zTtFuB8\n4BHgIeBbwB1FE8WKWqXeOOmlkpbYh9128f+e05wW0bARa9ZaFXgXsFN96QrgC7b/Mv5XTV6SzgEe\nBM6qLx0ATLP9+nKpYkVI2onqDed+VKMp3Wz7kMGnGiuFO6JB/Zq1qLaJbGuz1kiRdIvt6cu6FpOL\npJWAD9j+eOks/axUOkBEy3WatXa2/TLgH4ATCmdqjKQdJV0i6Q5Jv+g8Sudq0Jy6IQ0ASdvT7qmB\nkWD7CYa4VyFz3BHNGrVmrZE4LatrqdAUqo1JflU/3xC4rWS2mDA/kLQPcJ6HbGg6Q+URDZJ0KtXh\nIt3NWisPwzxZE0bltCxJGy7t9RFaOtVakh4C1qB6A7qQxRvOrF00GCncEY0awWatkTktK6KUFO6I\nmDCSLu1zuZXHmEa7SRLVCNnGtj8qaQPgGbZ/WjhaCndEkyTtCBxDNfe5qKfE9ialMkXEskn6ItU0\n1262nydpHeBi29sVjpbmtIiGjUSzVke9/efRVFMDBq4EjrV9f9FgEctve9vbSroewPYD9Z4MxWU5\nWESzFti+wPa9tu/vPEqHatDXgfuAfaiW09wHnF00UcST89f6oKDOPvTrUt2BF5eh8ogGjVqzlqSb\nbG/Zc21eG4+5jHaT9CbgDVQH5JxG9Ub0Q7bPLZkLUrgjGjVqzVqSPgP8FDinvrQv8GLb7y+XKuLJ\nkbQF8PL66Q9t31oyT0cKd0SssHrNq6nWunbWvkI12vCnYVj7GrG8JG3L4n6Nq4ZlpCzNaRENGpVm\nLdtrdT6W9FRgc2C1cokiVoykDwOvB75J9YZ0pqRzbX+sbLLccUc0qj6H+3LG7py2i+3dy6VqjqS3\nAocBzwZuAHYArrb98qV+YcSQkXQ7sLXtP9fPVwdusP3cssnSVR7RtGfY/qjtu+rHx4D1S4dq0GHA\ndsB827sCLwAWlI0U8aT8lrGjRqsCdxfKMkYKd0SzLpb0Rkkr1Y/9gItKh2rQn7vuUFa1fRtQ/A4l\n4klYANws6TRJM4GbgD9KOknSSSWDZag8ogGj2qwl6XzgYOBwYDfgAaoT0l5ZNFjEcpJ04NJet336\noLL0SuGOaFi/Zi3bl5VLNBiSdgamAhfafrR0noi2SOGOaFCatSImJ0l3Ue+a1m0YzhnIcrCIZnWa\ntX5se9d6Q4dPFM4UEcv2oq6PV6NaGvbUQlnGSHNaRLPSrBUxCXWfLWD7btsnAq8qnQtyxx3RtN9I\nmgZ8C7hE0gPA/MKZImIZ6l3TOlaiugMfipqZOe6IAUmzVsTk0XPOwGPAL4FP2b69TKLFUrgjIiIm\nkcxxR0RE1CS9WtKGXc8/LOlGSbMkbVwyW0cKd0RExGIfB+4DkLQ38GbgEGAW8KWCuRZJ4Y6IiFjM\nth+pP34dcIrt62yfDKxbMNciKdwRERGLSdKaklYCXg78oOu1oTiqdiha2yMiIobEiVS7HD4I3Gr7\nWgBJLwB+VzJYR7rKIyIiukh6FrAecKPtJ+prz6A6MOdX9fPn2765SL4U7oiIiOUjaY7tbZf9mRMv\nc9wRERHLT6W+cQp3RETE8is2XJ3CHRERMYmkcEdERCy/YucNpDktIiKi1nMq2BJszxlUlvGkcEdE\nRNR6TgXrZdu7DSzMOFK4IyIiJpHsnBYREdGHpC2B6XRtdWr7jHKJKrnjjoiI6CHpaGAXqsL9fWAv\n4Erb+5bMBekqj4iI6GdfqkNG7rF9MLA1MLVspEoKd0RExJIW1vuUPyZpbeBeYIPCmYDMcUdERPRz\nraRpwFeA64A/AbPLRqpkjjsiImIpJG0ErG17buEoQAp3REREX5JmABvRNTpt+7xigWoZKo+IiOgh\n6VRgBnAz8ER92UDxwp077oiIiB6SbrE9vXSOftJVHhERsaTZkoaycOeOOyIiooeknYFZwD3AXwBR\n7VU+o2gwUrgjIiKWIOlO4AhgHovnuLE9v1ioWprTIiIilnSf7VmlQ/STO+6IiIgekr4ATAO+QzVU\nDmQ5WERExLBanapg79l1bSiWg6VwR0REdJG0MjDX9gmls/ST5WARERFdbD8O7F86x3gyxx0REdFD\n0gnAFOBs4OHOddtzioWqpXBHRET0kHRpn8u2vdvAw/RI4Y6IiJhEMscdERHRQ9JUSZ+RdG39+LSk\nqaVzQQp3REREP6cCDwH71Y8HgZlFE9UyVB4REdFD0g22t1nWtRJyxx0REbGkhZJ26jyRtCOwsGCe\nRXLHHRER0UPSNsDpQGde+wHgQNtzy6WqpHBHRET0kLQqsC+wKdWe5QuoloMdWzQY2fI0IiKin28D\nfwTmAHcXzjJG7rgjIiJ6SLrJ9palc/ST5rSIiIglXS1pq9Ih+skdd0RERA9JtwCbAXdRHe8pqjnu\nGUWDkcIdERGxBEkb9rtue/6gs/RK4Y6IiJhEMscdERExiaRwR0RETCIp3BExMiQ9LukGSTdJOlfS\n363A37WLpO/WH79G0lFL+dxpkt75JL7HMZLe/2QzRjulcEfEKFloe5t6fe6jwNu7X1RluX8v2p5l\n+/ilfMo0YLkLd0Q/KdwRMaquADaTtJGk2yWdAdwEbCBpT0mzJc2p78zXBJD0Ckm3SZoDvK7zF0k6\nSNLn64/Xl3S+pBvrx0uB44FN67v9T9af9++SrpE0V9JHuv6uD0q6Q9KVwHMH9r9GTBrZ8jQiRo6k\npwB7ARfWlzanOkDix5KeDnwI2N32w5KOBI6Q9N/AV4DdgDuBs8f5608CLrP9T5JWBtYEjgK27BwJ\nKWnP+nu+mGp98CxJLwMeBt4IbEP1+3kOcN3E/vQx2aVwR8QoWV3SDfXHVwCnAM8E5tv+cX19B2A6\ncJUkgFWA2cAWwF22fwYg6Uzg0D7fYzfgnwFsPw4skLROz+fsWT+ur5+vSVXI1wLOt/1I/T1mrdBP\nG62Uwh0Ro2Rh5663oy7OD3dfAi6xvX/P5435uhUk4DjbX+75HodP4PeIlsocd0TEWD8GdpS0GYCk\nNSQ9B7gN2EjSpvXn7T/O1/8AeEf9tStLmgo8RHU33XERcEjX3PmzJK0HXA68VtLqktYCXj3BP1u0\nQAp3REQX2/cBBwFfkzSXepjc9p+phsa/Vzen3TvOX3EYsKukeVTz09Nt30819H6TpE/avhj4KjC7\n/rxvAGvZnkM1d34jcAFwTWM/aExa2fI0IiJiEskdd0RExCSSwh0RETGJpHBHRERMIincERERk0gK\nd0RExCSSwh0RETGJpHBHRERMIv8PdPOugtF5oHMAAAAASUVORK5CYII=\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": []
}
]
}