{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## CIFAR 10" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "%matplotlib inline\n", "%reload_ext autoreload\n", "%autoreload 2" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from pathlib import Path" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from fastai.conv_learner import *\n", "PATH = Path(\"data/cifar10/\")" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "bs=64\n", "sz=32" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "tfms = tfms_from_model(resnet18, sz, aug_tfms=[RandomFlip()], pad=sz//8)\n", "data = ImageClassifierData.from_csv(PATH, 'train', PATH/'train.csv', tfms=tfms, bs=bs)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "learn = ConvLearner.pretrained(resnet18, data)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "lr=1e-2; wd=1e-5" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "178615044d0445b39b5d41485c8540d6", "version_major": 2, "version_minor": 0 }, "text/html": [ "
Failed to display Jupyter Widget of type HBox
.
\n", " If you're reading this message in the Jupyter Notebook or JupyterLab Notebook, it may mean\n", " that the widgets JavaScript is still loading. If this message persists, it\n", " likely means that the widgets JavaScript library is either not installed or\n", " not enabled. See the Jupyter\n", " Widgets Documentation for setup instructions.\n", "
\n", "\n", " If you're reading this message in another frontend (for example, a static\n", " rendering on GitHub or NBViewer),\n", " it may mean that your frontend doesn't currently support widgets.\n", "
\n" ], "text/plain": [ "HBox(children=(IntProgress(value=0, description='Epoch', max=1), HTML(value='')))" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ " \r" ] } ], "source": [ "learn.lr_find()\n", "learn.sched.plot()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "60c148e603be4d758a07fc2894a4fdf0", "version_major": 2, "version_minor": 0 }, "text/html": [ "Failed to display Jupyter Widget of type HBox
.
\n", " If you're reading this message in the Jupyter Notebook or JupyterLab Notebook, it may mean\n", " that the widgets JavaScript is still loading. If this message persists, it\n", " likely means that the widgets JavaScript library is either not installed or\n", " not enabled. See the Jupyter\n", " Widgets Documentation for setup instructions.\n", "
\n", "\n", " If you're reading this message in another frontend (for example, a static\n", " rendering on GitHub or NBViewer),\n", " it may mean that your frontend doesn't currently support widgets.\n", "
\n" ], "text/plain": [ "HBox(children=(IntProgress(value=0, description='Epoch', max=2), HTML(value='')))" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "epoch trn_loss val_loss accuracy \n", " 0 1.249359 1.116181 0.604056 \n", " 1 1.215158 1.07421 0.613115 \n" ] }, { "data": { "text/plain": [ "[1.0742103, 0.6131150265957447]" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "learn.fit(lr, 1, cycle_len=1)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "lrs = np.array([lr/9,lr/3,lr])" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "learn.unfreeze()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "20f2b140b25e4397a2d798b7ed213512", "version_major": 2, "version_minor": 0 }, "text/html": [ "Failed to display Jupyter Widget of type HBox
.
\n", " If you're reading this message in the Jupyter Notebook or JupyterLab Notebook, it may mean\n", " that the widgets JavaScript is still loading. If this message persists, it\n", " likely means that the widgets JavaScript library is either not installed or\n", " not enabled. See the Jupyter\n", " Widgets Documentation for setup instructions.\n", "
\n", "\n", " If you're reading this message in another frontend (for example, a static\n", " rendering on GitHub or NBViewer),\n", " it may mean that your frontend doesn't currently support widgets.\n", "
\n" ], "text/plain": [ "HBox(children=(IntProgress(value=0, description='Epoch', max=1), HTML(value='')))" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ " \r" ] }, { "data": { "image/png": "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\n", "text/plain": [ "Failed to display Jupyter Widget of type HBox
.
\n", " If you're reading this message in the Jupyter Notebook or JupyterLab Notebook, it may mean\n", " that the widgets JavaScript is still loading. If this message persists, it\n", " likely means that the widgets JavaScript library is either not installed or\n", " not enabled. See the Jupyter\n", " Widgets Documentation for setup instructions.\n", "
\n", "\n", " If you're reading this message in another frontend (for example, a static\n", " rendering on GitHub or NBViewer),\n", " it may mean that your frontend doesn't currently support widgets.\n", "
\n" ], "text/plain": [ "HBox(children=(IntProgress(value=0, description='Epoch', max=1), HTML(value='')))" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "epoch trn_loss val_loss accuracy \n", " 0 0.863994 0.792711 0.726479 \n" ] }, { "data": { "text/plain": [ "[0.7927107, 0.7264793882978723]" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "learn.fit(lrs, 1, cycle_len=1, wds=wd)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Simplenet" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "stats = (np.array([ 0.4914 , 0.48216, 0.44653]), np.array([ 0.24703, 0.24349, 0.26159]))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "tfms = tfms_from_stats(stats, sz, aug_tfms=[RandomFlip()], pad=sz//8)\n", "data = ImageClassifierData.from_csv(PATH, 'train', PATH/'train.csv', tfms=tfms, bs=bs)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "class SimpleConv(nn.Module):\n", " def __init__(self, ic, oc, ks=3, drop=0.2, bn=True):\n", " super().__init__()\n", " self.conv = nn.Conv2d(ic, oc, ks, padding=(ks-1)//2)\n", " self.bn = nn.BatchNorm2d(oc, momentum=0.05) if bn else None\n", " self.drop = nn.Dropout(drop, inplace=True)\n", " self.act = nn.ReLU(True)\n", " \n", " def forward(self, x):\n", " x = self.conv(x)\n", " if self.bn: x = self.bn(x)\n", " return self.drop(self.act(x))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "net = nn.Sequential(\n", " SimpleConv(3, 64),\n", " SimpleConv(64, 128),\n", " SimpleConv(128, 128),\n", " SimpleConv(128, 128),\n", " nn.MaxPool2d(2),\n", " SimpleConv(128, 128),\n", " SimpleConv(128, 128),\n", " SimpleConv(128, 256),\n", " nn.MaxPool2d(2),\n", " SimpleConv(256, 256),\n", " SimpleConv(256, 256),\n", " nn.MaxPool2d(2),\n", " SimpleConv(256, 512),\n", " SimpleConv(512, 2048, ks=1, bn=False),\n", " SimpleConv(2048, 256, ks=1, bn=False),\n", " nn.MaxPool2d(2),\n", " SimpleConv(256, 256, bn=False, drop=0),\n", " nn.MaxPool2d(2),\n", " Flatten(),\n", " nn.Linear(256, 10)\n", ")" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "bm = BasicModel(net.cuda(), name='simplenet')\n", "learn = ConvLearner(data, bm)\n", "learn.crit = nn.CrossEntropyLoss()\n", "learn.opt_fn = optim.Adam\n", "learn.unfreeze()\n", "learn.metrics=[accuracy]\n", "lr = 1e-3\n", "wd = 5e-3" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "6c2e6102551b4bd5bfedb8195031c800", "version_major": 2, "version_minor": 0 }, "text/html": [ "Failed to display Jupyter Widget of type HBox
.
\n", " If you're reading this message in the Jupyter Notebook or JupyterLab Notebook, it may mean\n", " that the widgets JavaScript is still loading. If this message persists, it\n", " likely means that the widgets JavaScript library is either not installed or\n", " not enabled. See the Jupyter\n", " Widgets Documentation for setup instructions.\n", "
\n", "\n", " If you're reading this message in another frontend (for example, a static\n", " rendering on GitHub or NBViewer),\n", " it may mean that your frontend doesn't currently support widgets.\n", "
\n" ], "text/plain": [ "HBox(children=(IntProgress(value=0, description='Epoch', max=1), HTML(value='')))" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ " \r" ] }, { "data": { "image/png": "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\n", "text/plain": [ "Failed to display Jupyter Widget of type HBox
.
\n", " If you're reading this message in the Jupyter Notebook or JupyterLab Notebook, it may mean\n", " that the widgets JavaScript is still loading. If this message persists, it\n", " likely means that the widgets JavaScript library is either not installed or\n", " not enabled. See the Jupyter\n", " Widgets Documentation for setup instructions.\n", "
\n", "\n", " If you're reading this message in another frontend (for example, a static\n", " rendering on GitHub or NBViewer),\n", " it may mean that your frontend doesn't currently support widgets.\n", "
\n" ], "text/plain": [ "HBox(children=(IntProgress(value=0, description='Epoch', max=1), HTML(value='')))" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ " \r" ] }, { "data": { "image/png": "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\n", "text/plain": [ "Failed to display Jupyter Widget of type HBox
.
\n", " If you're reading this message in the Jupyter Notebook or JupyterLab Notebook, it may mean\n", " that the widgets JavaScript is still loading. If this message persists, it\n", " likely means that the widgets JavaScript library is either not installed or\n", " not enabled. See the Jupyter\n", " Widgets Documentation for setup instructions.\n", "
\n", "\n", " If you're reading this message in another frontend (for example, a static\n", " rendering on GitHub or NBViewer),\n", " it may mean that your frontend doesn't currently support widgets.\n", "
\n" ], "text/plain": [ "HBox(children=(IntProgress(value=0, description='Epoch', max=20), HTML(value='')))" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "epoch trn_loss val_loss accuracy \n", " 0 1.464019 1.812134 0.324219 \n", " 1 1.299797 1.872144 0.301779 \n", " 2 1.152769 1.641428 0.405336 \n", " 3 1.06013 1.531731 0.46875 \n", " 4 1.001071 1.344982 0.546875 \n", " 5 0.957563 1.159598 0.629405 \n", " 6 0.895986 1.152674 0.619265 \n", " 7 0.852257 1.277312 0.607713 \n", " 8 0.844254 1.373495 0.538813 \n", " 9 0.784301 0.972733 0.717586 \n", " 10 0.751162 0.859369 0.741606 \n", " 11 0.735842 0.921104 0.729555 \n", " 12 0.690585 0.966144 0.706034 \n", " 13 0.662635 0.824769 0.759142 \n", " 14 0.626122 0.784435 0.775598 \n", " 15 0.61732 0.772561 0.772689 \n", " 16 0.570246 0.727107 0.785322 \n", " 17 0.526993 0.718699 0.786652 \n", " 18 0.499946 0.645241 0.812916 \n", " 19 0.499634 0.630276 0.816572 \n" ] }, { "data": { "text/plain": [ "[0.630276, 0.8165724734042553]" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "learn.fit(lr, 1, wds=wd, cycle_len=20, use_clr=(32,10))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "7f8e07243c194ada863b64921bf0ada3", "version_major": 2, "version_minor": 0 }, "text/html": [ "Failed to display Jupyter Widget of type HBox
.
\n", " If you're reading this message in the Jupyter Notebook or JupyterLab Notebook, it may mean\n", " that the widgets JavaScript is still loading. If this message persists, it\n", " likely means that the widgets JavaScript library is either not installed or\n", " not enabled. See the Jupyter\n", " Widgets Documentation for setup instructions.\n", "
\n", "\n", " If you're reading this message in another frontend (for example, a static\n", " rendering on GitHub or NBViewer),\n", " it may mean that your frontend doesn't currently support widgets.\n", "
\n" ], "text/plain": [ "HBox(children=(IntProgress(value=0, description='Epoch', max=5), HTML(value='')))" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "epoch trn_loss val_loss accuracy \n", " 0 1.603266 2.02473 0.271941 \n", " 1 1.326654 1.682021 0.391955 \n", " 2 1.124686 1.564738 0.427776 \n", " 3 0.963391 1.164936 0.603225 \n", " 4 0.82219 1.19409 0.578291 \n" ] }, { "data": { "text/plain": [ "[1.1940901, 0.5782912234042553]" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "learn.fit(lr, 1, wds=wd, cycle_len=5, use_clr=(32,10))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "learn.save('0')" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "c0051276049a4827b6f5e82a8d4170d6", "version_major": 2, "version_minor": 0 }, "text/html": [ "Failed to display Jupyter Widget of type HBox
.
\n", " If you're reading this message in the Jupyter Notebook or JupyterLab Notebook, it may mean\n", " that the widgets JavaScript is still loading. If this message persists, it\n", " likely means that the widgets JavaScript library is either not installed or\n", " not enabled. See the Jupyter\n", " Widgets Documentation for setup instructions.\n", "
\n", "\n", " If you're reading this message in another frontend (for example, a static\n", " rendering on GitHub or NBViewer),\n", " it may mean that your frontend doesn't currently support widgets.\n", "
\n" ], "text/plain": [ "HBox(children=(IntProgress(value=0, description='Epoch', max=7), HTML(value='')))" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "epoch trn_loss val_loss accuracy \n", " 0 0.819311 1.080679 0.636386 \n", " 1 0.90712 1.294629 0.547457 \n", " 2 0.717722 0.938504 0.700881 \n", " 3 0.898441 1.263396 0.586187 \n", " 4 0.803364 1.037912 0.666888 \n", " 5 0.668088 0.855235 0.737616 \n", " 6 0.616654 0.754756 0.770778 \n" ] }, { "data": { "text/plain": [ "[0.75475585, 0.7707779255319149]" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "learn.fit(lr, 3, cycle_len=1, cycle_mult=2, wds=wd)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "learn.save('1')" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "6d693d920dcb482fbd0759c4589348e5", "version_major": 2, "version_minor": 0 }, "text/html": [ "Failed to display Jupyter Widget of type HBox
.
\n", " If you're reading this message in the Jupyter Notebook or JupyterLab Notebook, it may mean\n", " that the widgets JavaScript is still loading. If this message persists, it\n", " likely means that the widgets JavaScript library is either not installed or\n", " not enabled. See the Jupyter\n", " Widgets Documentation for setup instructions.\n", "
\n", "\n", " If you're reading this message in another frontend (for example, a static\n", " rendering on GitHub or NBViewer),\n", " it may mean that your frontend doesn't currently support widgets.\n", "
\n" ], "text/plain": [ "HBox(children=(IntProgress(value=0, description='Epoch', max=10), HTML(value='')))" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "epoch trn_loss val_loss accuracy \n", " 0 0.833685 1.148864 0.620928 \n", " 1 0.819332 1.212562 0.608627 \n", " 2 0.803363 0.984564 0.697224 \n", " 3 0.790965 1.016013 0.702045 \n", " 4 0.733683 0.902306 0.735622 \n", " 5 0.698549 0.878661 0.732131 \n", " 6 0.648197 0.783731 0.758311 \n", " 7 0.597658 0.738099 0.782912 \n", " 8 0.557584 0.646611 0.80768 \n", " 9 0.507423 0.603345 0.822058 \n" ] }, { "data": { "text/plain": [ "[0.60334516, 0.8220578457446809]" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "learn.fit(lr, 1, wds=wd, cycle_len=10, use_clr=(32,10))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "learn.save('2')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Fin" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" } }, "nbformat": 4, "nbformat_minor": 2 }