{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Computer vision" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "hide_input": true }, "outputs": [], "source": [ "from fastai.gen_doc.nbdoc import *" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The [`vision`](/vision.html#vision) module of the fastai library contains all the necessary functions to define a Dataset and train a model for computer vision tasks. It contains four different submodules to reach that goal:\n", "- [`vision.image`](/vision.image.html#vision.image) contains the basic definition of an [`Image`](/vision.image.html#Image) object and all the functions that are used behind the scenes to apply transformations to such an object.\n", "- [`vision.transform`](/vision.transform.html#vision.transform) contains all the transforms we can use for data augmentation.\n", "- [`vision.data`](/vision.data.html#vision.data) contains the definition of [`ImageClassificationDataset`](/vision.data.html#ImageClassificationDataset) as well as the utility function to easily build a [`DataBunch`](/basic_data.html#DataBunch) for Computer Vision problems.\n", "- [`vision.learner`](/vision.learner.html#vision.learner) lets you build and fine-tune models with a pretrained CNN backbone or train a randomly initialized model from scratch.\n", "\n", "Each of the four module links above includes a quick overview and examples of the functionality of that module, as well as complete API documentation. Below, we'll provide a walk-thru of end to end computer vision model training with the most commonly used functionality." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Minimal training example" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "First, import everything you need from the fastai library." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from fastai.vision import * \n", "from fastai import *" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "First, create a data folder containing a MNIST subset in `data/mnist_sample` using this little helper that will download it for you:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "PosixPath('/home/ubuntu/.fastai/data/mnist_sample')" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "path = untar_data(URLs.MNIST_SAMPLE)\n", "path" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Since this contains standard [`train`](/train.html#train) and `valid` folders, and each contains one folder per class, you can create a [`DataBunch`](/basic_data.html#DataBunch) in a single line:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "data = ImageDataBunch.from_folder(path)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You load a pretrained model (from [`vision.models`](/vision.models.html#vision.models)) ready for fine tuning:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "learn = create_cnn(data, models.resnet18, metrics=accuracy)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And now you're ready to train!" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Total time: 00:09\n", "epoch train_loss valid_loss accuracy\n", "1 0.079785 0.041455 0.984298 (00:09)\n", "\n" ] } ], "source": [ "learn.fit(1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's look briefly at each of the [`vision`](/vision.html#vision) submodules." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Getting the data" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The most important piece of [`vision.data`](/vision.data.html#vision.data) for classification is the [`ImageDataBunch`](/vision.data.html#ImageDataBunch). If you've got labels as subfolders, then you can just say:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "data = ImageDataBunch.from_folder(path)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It will grab the data in a train and validation sets from subfolders of classes. You can then access that training and validation set by grabbing the corresponding attribute in data<\\code>." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "ds = data.train_ds" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Images" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "That brings us to [`vision.image`](/vision.image.html#vision.image), which defines the [`Image`](/vision.image.html#Image) class. Our dataset will return [`Image`](/vision.image.html#Image) objects when we index it. Images automatically display in notebooks:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "image/jpeg": "/9j/4AAQSkZJRgABAQEAZABkAAD/2wBDAAIBAQEBAQIBAQECAgICAgQDAgICAgUEBAMEBgUGBgYFBgYGBwkIBgcJBwYGCAsICQoKCgoKBggLDAsKDAkKCgr/2wBDAQICAgICAgUDAwUKBwYHCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgr/wAARCAAcABwDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD+f+uh+GHwj+K3xt8WweAfgx8MfEPi7Xbr/j20Xwxos9/dzcgfLDAjO3JA4Heuer9Sv2IP+C5f7Tnw9+HHws/4J5f8Eqv2Q/Afw+8aa/p9j4c17x2ujx6rrXiLWZJ0B1L540jQYMhMc63CqHJDKEFAH51fG79mv9ov9mfW7Pw1+0f8AvGvw/1LUbU3Wn6f438K3mkz3UAYoZY47qNGdNwK7gCMgjORXFV+r3/B1/8AtWS+Pv2mvhn+xJF8ULvxjc/Aj4f2+m+M/EWpaWtvcX/iS4SM3c7fuwSZIIbOU7GMe6Vgo+Uk/lDQAV+lf/Bvj8LvCvwLsfjH/wAFkPjTYz/8Ip+zt4Pmi8K+TCpluvFWor9ls/KEuIZfKSVtyM2Ve5t2weM/mpXrWvfttftBeIv2MNB/YFv/ABNbD4beHvGt14qstLhsUWaTUZofJ3Syj5nVFM2xeMGeTJYbAgBwXxR+Jnjn40fErxB8X/id4gk1bxH4p1q51bXtTmRVa6vLiVpZpSqAKu53Y7VAUZwAAAKwqKKAP//Z\n", "image/png": "iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAABHNCSVQICAgIfAhkiAAAAchJREFUSIntlbGq4lAQhv+rKwQxoEQOiEIaSy3s7X0DIWBjo/gAausb2FlZ2YhpBHtBsRbExsoUYhVELRQ0MM4Wu6TZgOfoXat7YCAJ55/v/DOZ5AsA44Mr9EnYD/AH+BmgruuoVCoYjUZgZjweDzAzmBmWZUnlYJnIZrNcrVZ5tVoxEQWG67qcSqWe5XoOK5fLvNvt/gHc73fu9/v+/el04nw+/z5wOp0yEfH1euX1es2O43CtVmMhBAshfGC73X6a65ds74gIvV4PzWYTmUwG+/0eAFCv1/092+1WKtfTUyWTycDe5HI5dl3XdxiNRr/H4eFwCHxeKBRgGAYAYDwew/O873EYFIZh8Hw+ZyJi27Y5FotJ6V4efMuyUCwWAQCapuFyuUhrX3I4GAyYiPh8PrNpmipadZiu6/7LMpvNVPXqwE6nw0TEw+GQNU1T0r7Uw0ajAQDwPA+3201JqwwslUpIJBIAgM1moyoHoFCOdDrNjuMwEXG32+VwOKzcDiWHQgiYpgkAWC6XIKL/5zASifBkMvFHIR6PvzRO0sBWq+V/MyX+ee+XNBT6s3WxWOB4PMrXL2BJnUwIwbZtv+UOAH/9vfjY+g2j1h9i6j0xlAAAAABJRU5ErkJggg==\n", "text/plain": [ "Image (3, 28, 28)" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "img,label = ds[0]\n", "img" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can change the way they're displayed:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "img.show(figsize=(2,2), title='MNIST digit')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And you can transform them in various ways:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "image/jpeg": "/9j/4AAQSkZJRgABAQEAZABkAAD/2wBDAAIBAQEBAQIBAQECAgICAgQDAgICAgUEBAMEBgUGBgYFBgYGBwkIBgcJBwYGCAsICQoKCgoKBggLDAsKDAkKCgr/2wBDAQICAgICAgUDAwUKBwYHCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgr/wAARCAAcABwDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD+f+vpD9hD/gkx+3l/wUjh1vU/2Ufghc6xpPh+EtqWv6hcx2WnrLxi2S4mKpLOQQfLQllU7m2rzXzvpUFhc6pbW2qXptraS4Rbm5EZbyoywDPtHJwMnA64r9y9S/4K7fBH9j79oX9lb/gm9/wTw+IMEvwv8FeJtFuviB4z0K/VV8S3V2gjmhkcxsQqmZzIA7qxcJt/dDIB+HXiXw5rPg/xHf8AhPxFZNbahpl5LaX1s5+aKaNyjofcMCD9Ko19h/8ABfL4JwfAb/grV8ZfCWm6Ja6fp+o+IxrOl21i7tCsF5ClwNhYDjc7DC/KuCowBtHx5QAVPpmoXWk6lb6rYymOe2nSWGQEja6sCDxz1FQUUAfpD/wci6d4f8b/ABk+CH7XGgW9kp+MPwK0bW9RntUmD3F2ieVLJIZeWbIwDydqrlmGMfm9X2z8LvDXiX9uv/gnn8QPiP8AtF/FrxRq0/7O2j6bpvwy0+O7gW2s7S6kk82GQNCzyLmNSPnBBHXmviiRQkjIOgYgUAf/2Q==\n", "image/png": "iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAABHNCSVQICAgIfAhkiAAAAq9JREFUSIntlj1LK0EUht/JTrJsCAnBFCKCSBAVyTY2Soo0orVNSCnkN2glYmfhX7C2tYxFQFDQQg3BdIFNVIK4CdnoZs2y2R3P7eTKxXwYY3UPnGbmnXlmzpmPwwAQftF8vwn7DxyL8e8MSqVSmJ+fR7lcRqFQgGmaQ42nYXxvb4/e39/JMAyq1Wq0vr5OiqIMM8dgwtnZWcrn8ySE+HDLsmh3d3eoBQ+Uw7m5OWxvb2N5eRndbhc3NzcAAEVRMDk5iYWFhZ8LKeec0uk0PTw8kOd55DgOZbNZOjw8JCEE1Wo1isfjxBj7mZCqqkpnZ2fU6XSo0WjQzs4ORaNRymQy9PT0RI7j0P7+Pvl8vtFDGolEsLa2hkQiAcuyYBgGLi8vYZomGGMIhUKQJAmO48DnG+yG9VTF43FsbW0hGAyiWCxic3MTd3d3EEJA0zQUCgXouo5wOAwhxOhAWZZh2zaICLe3t3h8fPy4c7quQwiBiYkJJJPJgQ9OT+DV1RXy+TyOj49xdHQEy7I++mzbhqZpkCQJMzMz6Ha7AwH7vjQHBwfgnKPT6Xxqb7VaqFar0HUdkiRhZWUFmqb1BfbNtGVZeHl5+WcHruvi4uICsiyj0WigVCqBMTY6sJfd39/j+voa4XAY6XQaRP3/8pGAtm2Dc47p6WmoqgpVVccLbDabyOVyYIwhEAjg+fl5vEAAqNfrMAwDiqIgkUiMF+j3+/H6+opgMIjV1VVMTU2B894HfySg67oolUo4Pz+H53lgjPV9cUYOqWmaCAQC4JwjEolAkqTxAqPRKOr1OjzPw+LiImRZ7qn/Vk3zt1UqFZyenuLt7Q3FYhGu6/bUM/xA5a0oCmRZBhEhFouh2Wyi3W5/mc+hapKvnDFGS0tLlMvl6OTkhDY2NigUCpHf7/+k+wOXq6Soj0795wAAAABJRU5ErkJggg==\n", "text/plain": [ "Image (3, 28, 28)" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "img.rotate(35)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Data augmentation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[`vision.transform`](/vision.transform.html#vision.transform) lets us do data augmentation. Simplest is to choose from a standard set of transforms, where the defaults are designed for photos:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Help on function get_transforms in module fastai.vision.transform:\n", "\n", "get_transforms(do_flip:bool=True, flip_vert:bool=False, max_rotate:float=10.0, max_zoom:float=1.1, max_lighting:float=0.2, max_warp:float=0.2, p_affine:float=0.75, p_lighting:float=0.75, xtra_tfms:Union[Collection[fastai.vision.image.Transform], NoneType]=None) -> Collection[fastai.vision.image.Transform]\n", " Utility func to easily create a list of flip, rotate, `zoom`, warp, lighting transforms.\n", "\n" ] } ], "source": [ "help(get_transforms)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "...or create the exact list you want:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "tfms = [rotate(degrees=(-20,20)), symmetric_warp(magnitude=(-0.3,0.3))]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can apply these transforms to your images by using their `apply_tfms` method." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAeMAAACDCAYAAAC+9HPWAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAADc9JREFUeJzt3VlslNUbx/EzLAUxLLJUxQJSpKJAaAXrBQg2mOIagagxGBJxjdEbY9RE4wUSjYmJRi8kJmpcEqRRMQRBFFlEtCqIgoCCuCC0okJZLEhBmP/d83+eY2c6JZ15Zjrfz9XvzSPtm06nj+85c85JJJPJAAAA/HTxvgEAAIodzRgAAGc0YwAAnNGMAQBwRjMGAMAZzRgAAGc0YwAAnNGMAQBwRjMGAMBZt1x+s0QiwXZfeSCZTCY64uvweuaHjno9Q+A1zRe8RzuXTF5PnowBAHBGMwYAwBnNGAAAZzRjAACc0YwBAHBGMwYAwBnNGAAAZzRjAACc0YwBAHBGMwYAwBnNGAAAZzRjAACc0YwBAHBGMwYAwBnNGAAAZzRjAACc0YwBAHBGMwYAwBnNGAAAZ928b6CQDRo0yFxXVVVJ3rp1q6k1NDTk5J6QXpcu9v8/e/ToIblXr16mduzYMclHjhzJ7o0BKGo8GQMA4IxmDACAM4apQwhdu3Y11+PGjZN8++23m9odd9whWQ9xhhDCiRMnJL/22mum9tBDD0k+fPjwad8rWldSUiJ5wIABpqanE8455xxT0//tsGHDTK2iokJyeXm5qelh6x9//NHU9PWOHTtM7euvv5bc1NQUkD/69esn+dSpU6bGeza79BTR2WefbWplZWWS+/TpY2q9e/eWHE8Nfvfddx15i1nHkzEAAM5oxgAAOKMZAwDgLJFMJnP3zRKJ3H2zNug5xpqaGlN7+OGHJVdXV5ta9+7dJf/zzz+mpuczDh06ZGqXXHKJ5F9//bX9N9yBkslkoiO+jufrqef1Qwjh8ssvlzxhwgRT69mzp+Tzzz/f1IYPHy554MCBpnb8+HHJ8ZKobt1Sf9wikUj94503b57kV1991dR27dqV8t+l01GvZwj59R7N1JlnnmmuL7zwQsmjRo0ytZEjR0q+4IILTE2/n998801TW7duneRc/M3sDO/RmH4PxZ/rmDFjhuRbbrnF1K644oqMvv7rr79uru+77z7JR48ezfQ2syKT15MnYwAAnNGMAQBwVjRLm/SwdAghzJ49W7IezgghhDFjxkiOlz0tX75ccjyseM8990h+++23TW3v3r3tvGOkM336dHN9zTXXSL7oootMTS9B00PPIdhph5iuxUtd9DKKdMulTp48aWr33nuv5NWrV5ua/h1paWlJeV/FKH6dxo4dKzmeZrr11lslV1ZWZvw99uzZIzn++W/ZskXygQMHMv6axSye2pkyZYpk/T4IIYTrrrtOcvy3Wk8fxO9fvbTphhtuMLW5c+dK9p4azARPxgAAOKMZAwDgjGYMAICzopkzjj8u/8wzz0iO5zZ2794tef78+ab28ssvS47nLfWccbzcQm/3pk8DQuYGDx4s+eKLLza1IUOGSI6Xlem5/cbGRlPTS122bdtmanrryoMHD5qanrvSS+FCsHPGeovUEELYt2+f5ObmZlOLfw+LnZ4njj8HoOcHp06damp6uVp7liGVlpZKjpfH6WWLzBln5uabbzbXL7zwguS+ffuamv5MRjy/u3nzZsnx39Urr7wy5b/7999/23W/3nj3AwDgjGYMAICzohmm1jtghWCHO1555RVTe+SRRyTHS1P00NlNN92U8vvpj9yHwKkvHUHvorNw4UJT+/7771v970Kww81r1qwxtXPPPTej7xef0KWX1sRDblp9fb251js7xcPixT590b9/f3Otf8a33XabqemlMPG/00PTf/31l6k1NDRIjpc96WmCeAlNoQ155oP476P+m6jfkyGEsH//fskvvfSSqa1fv17yY489Zmp6mHrx4sWmppeqFQKejAEAcEYzBgDAGc0YAABnRTNnrLexDCGEnTt3So63rvz7779Tfp0RI0ZIjueF9TzTZ599Zmrx3DPaT8+7x6/nypUrJcdzxunm+/RSp3jLSz0XOWnSJFObNWuW5LKyMlPTc5Z628wQQti0aVPK+yxGeslQfDrPzJkzJU+cODHlv4tft99++03yJ598Ymp6+Us8Z6yXmr333numpueakZmffvrJXK9du1by448/bmo7duyQHC8j1J8dqKqqSvn99OdGChFPxgAAOKMZAwDgrGiGqVesWGGuV61aJTlexpBOv379JMeH0euTXZYtW2ZquTiQvLPTw5H6JJfWrk/na8b0IfU33nijqdXW1kqOpyD013z33XdNbfv2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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig,axes = plt.subplots(1,4,figsize=(8,2))\n", "for ax in axes: ds[0][0].apply_tfms(tfms).show(ax=ax)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can create a [`DataBunch`](/basic_data.html#DataBunch) with your transformed training and validation data loaders in a single step, passing in a tuple of *(train_tfms, valid_tfms)*:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "data = ImageDataBunch.from_folder(path, ds_tfms=(tfms, []))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Training and interpretation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now you're ready to train a model. To create a model, simply pass your [`DataBunch`](/basic_data.html#DataBunch) and a model creation function (such as one provided by [`vision.models`](/vision.models.html#vision.models) or [torchvision.models](https://pytorch.org/docs/stable/torchvision/models.html#torchvision-models)) to [`create_cnn`](/vision.learner.html#create_cnn), and call [`fit`](/basic_train.html#fit):" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Total time: 00:09\n", "epoch train_loss valid_loss accuracy\n", "1 0.129880 0.049060 0.983808 (00:09)\n", "\n" ] } ], "source": [ "learn = create_cnn(data, models.resnet18, metrics=accuracy)\n", "learn.fit(1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can take a look at the most incorrect images, and also the classification matrix." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "interp = ClassificationInterpretation.from_learner(learn)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "image/png": "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hBCHYRAnhBCHYRAnhBCHYRAnhBCHYRAnhBCHYRAnhBCHYRAnhBCHYRAnhBCHYRAnhBCHYRAnhBCHYRAnhBCHYRAnhBCHKU8TJZMCp2rVqr7yQQcd5Mnt27f36Ro3buzJXbp08eSzzz7bV69WrVqe/MILL0Rue8KECb7y1q1bPXnHjh3xzCZ5pm7dur7ypZdemtR6v/rVrzz5tNNO8+nuuOMOT/722299uieeeCJVE/MKe+KEEOIwDOKEEOIwDOKEEOIwolTu5kLN5cSro0aN8pXt/NiJJ57o04nsn4/0iy++8Omuu+46T37rrbcyaWLOyceEui1atPDka6+91qf785//nGz7npzu+Wq3AQALFy705Ntuu82T33777bTazyeFOFFyjx49PPnhhx/26Y466qiU2wv63z6P9u7d69N99dVXke1cc801nvzuu++mbEcqcKJkQgipADCIE0KIwzg/xNAetvbYY495cp8+fXz17GFD559/vk/XtWtXTx43bpxPd9lll3my6+mUfDBixAhPHjlypE+3adMmT168eHFkG/atcJ06dXw623epcMopp3jy+PHjPblXr16+etu3b0+rfVI2vvnmG0/+6aeffLrmzZtHrrdu3TpPHjt2rCfHS6fUrFnTp5s4caIn16hRw6dr0qRJPLPzAnvihBDiMAzihBDiMM6PTrHf2CsuLvbkdu3a+eotX748qfZuvPFGX9kendKsWbN0TCw35GMUw8EHH+zJ9luYgN9fq1atSmpbwVvfM88805Ovv/56n85OmcS7nbYJvg04c+bMpOzKJ4U4OiWf2DHgrrvu8unstzvbtGmTVTs4OoUQQioADOKEEOIwDOKEEOIwzufEq1ev7skrV6705I4dO/rqbd68Oan2Dj30UF95zZo1nnzGGWd48oIFC1Ixs1xQ6LnTYL78+eef9+R+/fr5dFHn/c6dO33liy66yJPnzZtXVhOzQqH7NdvUq1fPV7afz9SvX9+nY06cEEJIRmEQJ4QQh3H+jc1du3Z5sj3crLS0NOPbatWqVcbbJJkjOLnDueee68lz58716fr27RvaRjAl88orr3hy8La7pKQkLTtJ+cKenAQ4MIViE/wYV3mAPXFCCHEYBnFCCHEYBnFCCHEY53PiNvE+5p4s9pBFUjhcccUVvvLatWtTbuPll1/2lYNfPCTu0Lp1a0+ePXt20ustXbo0C9aUDfbECSHEYRjECSHEYQoqnZIJ7Lk4g6xevTp3hpCMsmXLFl/ZnuDDfhM3HsG5Wdu3b+/Jy5YtK4N1JNcMHDjQk20/BrEnmQCA77//Pms2pQt74oQQ4jAM4oQQ4jAM4oQQ4jDMiQcIzj7zwQcfePI777yTa3NIhrA/zwCklxPft2+frxz84iEpX7Rs2dKTBwwY4NPdfvvtSbUR/FzDZ599VnbDMgx74oQQ4jAM4oQQ4jDOTwqRCdq2bevJCxcu9OnuvvtuT54wYULObMoGnDxgP1WrVvVkezLcUaNGRa4TnGzZTrV169Ytg9alRkX2a5cuXXzlYcOGebLtk2OOOcZXL9m4d/jhh/vK3333XYoWpg8nhSCEkAoAgzghhDgMR6cAmDRpkicHPxA/ZMgQTz7nnHM8eevWrb5699xzjyd/+OGHmTaRlJHmzZv7ymeffbYn27fMwZSJTaVK/j6PPXlA8MNpwdEwJDXGjRvnyddff32Z2wv6LjjSKIqHHnrIVz7vvPPKbEumYU+cEEIchkGcEEIchkGcEEIchjlx+IcirVmzxqezv35n50uDOdb333/fk4MTDthfSSsuLi6bscRHmzZtPPnkk0/26ezJkC+99FKfLmqIWbyhZ8E8art27Tx5zpw5Pt2NN97oyYsXL45sk4Rj+3XTpk0+XaNGjVJuL+g728/Lly/36TZu3OjJt956a8rbyjXsiRNCiMMwiBNCiMPwjU34P5QTTHcEhxLGsN/4A4AWLVp48g033ODTnXrqqZ78u9/9zqf7+OOPUzO2DBTCm31169b1le0PWR133HGR6wWHDqZz3qfSxvr16z25U6dOnhycnCITFIJf43Haaaf5ygcffLAnP/bYYz5dzZo1Q9sI+u7TTz/15AsuuMCnC6ZU8wXf2CSEkAoAgzghhDgMgzghhDgMhxjiwMlQk+Hnn3/2le082lVXXeXT3XTTTZ785ptv+nR2vrS85OLKMw0bNvSVN2/enNR6wWF+S5cuDa3Xv39/X7lBgwZJtW/nwAFg/Pjxnrx3796k2iDhBCdj6dmzpyfH+0yCjZ0DB/yf0NiwYUP6xpUD2BMnhBCHYRAnhBCH4RDDHBO8rXvjjTc8efTo0VnddiEORbO/Hmh/VTBISUlJ3HKMP/zhD76y/RW7eEMM58+f79PZX0nMNoXoV5vgsMGpU6d6cnB4YBRNmjTxlbMx1DPTcIghIYRUABjECSHEYRjECSHEYZgTzzF/+ctffOXbbrvNk+3hbDt37sz4tgs9d5oJOnTo4CvbX6esV6+eT2d/GS84PNT+1EJw+GGmKUS/2nnwzp07+3Tvvvtu5Hr2UNIxY8Z48quvvpo543IEc+KEEFIBYBAnhBCHYTolxxx55JG+sv1B+tq1a3vyjh07Mr7tQrztzjaff/65Jx9zzDE+nX3tBL9+2aVLF0/+z3/+kyXrPDsKzq+PPPKIJ19xxRVJr2d/8XDhwoUZtSnXMJ1CCCEVAAZxQghxGH4AK8ck+8EmUj6YPn26J9sftQqyYsUKX9metzXb6ZRCpHfv3knVC77l/NFHH2XDnHINe+KEEOIwDOKEEOIwDOKEEOIwHGKYY37961/7yk888YQnc4hh+cP++p09KTMAtGvXLnK9oqIiTz7qqKM8edOmTRm0TlMIfr300kt9ZXuIof2lSgCYMmWKJ48YMcKn27NnTxasyw8cYkgIIRUABnFCCHEYDjHMAdWqVfPkUaNG+XT2sLVdu3blzCaSHBs3bvTk4MfLzj//fE+uVauWT2enYejXxATnPC0tLfXk4AQedgqykNIn6cKeOCGEOAyDOCGEOAyDOCGEOAyHGGaBQw891Fe+4447PHnw4ME+XdeuXT3Z/mJeNiiEoWjkQOjXwoRDDAkhpALAIE4IIQ7DdEoFgrfdhQn9WpgwnUIIIRUABnFCCHEYBnFCCHEYBnFCCHEYBnFCCHEYBnFCCHGYnA4xJIQQklnYEyeEEIdhECeEEIdhECeEEIdhECeEEIfJeRAXkWdEZL2IbBORFSLy25A6fxGRsSIyRESKrb9SEVEickKc9quJyE8iUiedbVt1B4vIchHZKiI/isg0EakXUu9IEdkpIs8kse+vi0jvkOUiIuNFZJP5Gy8ikd9NEJFLRGSNiJSIyEsi0qgsdmWCgJ+KRWSviEwM1In5tb2ILBKRLebvTRFpn6D9UL+KSHURecIcj+0i8pmInJ2grTYi8oqp/5OI3GPpFpjjFtuP5Unse9b9mszxzQb5ul5T9auIDDPHxN5+T6M7LOT4KREZFdWeWS8Xfm0tIq+a6+AHEZkkIqlNm6mUyukfgA4Aqhv5aAA/ADghUOc9AN1C1h0G4BuYUTUR7Z8J4M10t23VPRRAYyPXAfAsgAdD6r0B4F0AzyTY79oANsW2H9D9AcByAIcAaAlgGYDhcfZhO4Aexq4ZAGama1eWfFwHQDGAHmF+BdAAQGsAAqAygGsBfJGgzVC/muM6xrRXCUB/c3xaR7RTzZxDI826NQB0svQLAPw2hX3NqV/jHd8s+TIv12safh0G4L0k9+lwAHuj2sqlXwG8CmCqOQ+bA1gC4NpUfJTznrhSaqlSKjZzrDJ/R8T0ItIQQFsAH4SsPhTA08rsfQT9oA9MytsO1P1OKfWTtWgvgF/YdURkMIAiAP+KY0+MXgAWWtu3GQrgfqXUWqXUOgD3Q5+UYQwBMEcp9W+lVDGAWwCcLyJ107QrG1wA4EfoH5GYTZ5flVJFSqnVxo+CkGMbQqhflVIlSqkxpr19SqlXAKwCENX7Gwbge6XUBLPuTqXUF6nuoEXO/GpxwPHNFvm6XtPwaypcDuDfSqnVcerkyq+HA3jenIc/AHgNOvAnTV5y4iIyWURKAXwNYD38TuwD4F9Kqb2BdVpB/5o9naD5fgDmprntYN1uIrIV+pf0AgAPWLp6AO6A7tElQzy7OgCwp/X5HNGO9NVVSn0DYDf0hZSOXdkg7OI9wK8iUgRgJ4CJAMYmaDOuX602m0Efi6URVboCWC0i88xt/AIR6Rioc7fRLYzdkqdpV8b8GiCZ4Jgx8nm9Wu0l8isAHGf8tkJEbglLS5i0x+UAppXBrkz69QEAg0Wkloi0BHA2dCBPmrwEcaXUHwHUBdAdwCwA9q/dOQgPrJcDeFcptSqqXRE5AkAVpVRkHjPBtoN131NK1Ye+bboXwGpLfSeAJ5RSa6PWDxB5hwB9m7XVKm8FUCcizxasG6sf+2VP1a6MYi7e03DgRXKAX5VSDQDUB3A1gE/jtJnQr6ZeVei01zSl1NcR1Q4BMBjAgwBaQF+os0WkmtGPBtAG+jb5UQBzzPajyJVfAcQ9vlkjn9erqZeMX/8N4BgATaE7XBcDuD6kXjcAzQC8EG+byJ1f/w0d6LcBWAtgEYCXEtjmI2+jU5RSe5VS70FfVFcCgIhUAnAWwn+Jkv31nJfOthPUX2dsmmns7Aydy/t7onVN/Y4AtiqlvouoUgzAfmhaD0BxRE8rWDdWf3uqdmWJy6Bzk97FG8+vSqkSAFMAPC0iTSPaTOhXs43p0L2cq+NU3WHsm6eU2g3gPgAHAWhn7PlIKbVdKbVLKTUNwEKz/bBt5sSvgWUHHN9ckK/rNVm/KqVWKqVWmdTLEui70QtDqg4F8E+T2ojaZq6u10rQx24WdA6+MYCGAMZH2RZGeRhiWAX7c2xdAKxRSm20K4jIqdC9prL8eibadip1e0I/cPlWRH4A8GcAF4jI4jTtWgrgWKt8LKJvG311RaQNgOoAVqRhVzYIu3hD/WpRCUAt6N5vGHGPn+kBPQHdw7pAKfVzHPu+gM7rJkssb5+yXcicX22SCY7ZJGfXa4p+DXKA30SkJoCLkNyPSy782gjAYQAmmU7DJgBPIaLTEEkqT0HL+gd9qzMY+hajMnQ+rQTAeUZ/O4BbQ9Z7FDoHGK/tWtBPk2uks+2Q+kMAHGbkVgDeATDL2lZz6+8+6BO2SURb7yDOSAIAwwF8BR3EWhjHx3vavQ361rY2gGdgnnanalcW/HuKOaZ1A8t9foXuvR1n/FAPOrXxfZjvEvnV1JkC4EMAdZKw8SgApdB3LJUBXAc9gqIa9KiZPtAjBaqYc6AEQNt8+jXR8c2iP/N2vabh17MBNDPy0QC+BHBboM4l0CnRyNEyufYrgJUAbjTnWwMALwKYkZKfcnEyWAY3MQeoyOzYEgC/s/SLAJwYWKeGqd8rQdv9AbxShm0fBn3rEwvcf4POUZWY/48COCii7TGIGMpnHLMROvcXZZsAuAfAZvN3j32iGbu6B07Gb41tswE0StWuLPn3EQDTQ5b7/ArdG/ra7NdG6Lx0p4g2E/m1FXSva6dpL/Y3JMyvZtn5AP5rzoMFADpY58jH0CmMIugAclZ58WvU8c2iP/N5vabkV+gOywZz7FZCp1OqBtp8HcCdCezKqV8BdDbn4BYAPwF4HubHKNm/cvMVQ/P0+VMALVUaRonIZABfKqUmZ9y4MiAigwBcqJQalG9b8gH9WpjQr+WH1N4Myi71AYxK54QwfAZgTgbtyRRFyO+DxnxDvxYm9Gs5odz0xAkhhKROeRidQgghJE0YxAkhxGFymhMXEeZu8ohSKvJLa2WBfs0v9Gthkqxf2RMnhBCHYRAnhBCHYRAnhBCHYRAnhBCHYRAnhBCHYRAnhBCHYRAnhBCHYRAnhBCHYRAnhBCHYRAnhBCHYRAnhBCHYRAnhBCHYRAnhBCHYRAnhBCHYRAnhBCHYRAnhBCHYRAnhBCHYRAnhBCHYRAnhBCHYRAnhBCHyelEyeWVqlWrevKhhx7q0w0bNsyThw4d6smHHXZY0u0PHz7ckx999FGfTinORVsWjjrqKE8eO3asTzdgwICk2qhUaX9fZt++fT7dli1bPHnKlCmRbaxatcpXnjp1qifv3bs3KTtIfujXr5+v3Lx5c0++7rrrfLri4uLQ9ezzJNewJ04IIQ7DIE4IIQ4jubydF5G85Q7sW+bLLrvMp/vrX//qyb/4xS+yaseVV17pKz/++OOeHLyVzzRKKclGu/n069lnn+3Jc+bMSasNkf2HJVPXw4knnujJn332WUbajKIQ/Wpz6qmn+sp2mqykpMSnC6ZDYxxyyCG+crdu3Ty5evXqPp19PsTjo48+8uRzzjnHp8tEeiVZv7InTgghDsMgTgghDlOwo1MqV67sK48YMcKT77nnnsj19uzZ4ysvWbLEk6dPn57Utq+55hpf+fDDD/fkhx9+2KebP3++JwdHOJDElJaWevKuXbt8Ovs2OXhs7XPg559/9uRf/vKXvnpNmzb15HPPPbdsxpJIunbt6ivbaca2bdv6dMFrOxmCKZJMpM1OPvlkTw6OcHn22WfL3H6ysCdOCCEOwyBOCCEOwyBOCCEOU7BDDIND+SZNmhRZ136L0s5RA8CsWbNS3nZwmOJrr73myXZ+HACWLl3qyXY+Njh0KhMU+lC04LOIzp07e/JVV13l0+3cuTOpNo888khP/uqrryLrbdu2zVe2fbl8+fKktpUurvq1bt26nvzf//7Xp2vcuHFGt5WNnPgPP/zgycEhhpkYVsohhoQQUgFgECeEEIcpqCGGVars350ePXpE1lu2bJmvPG7cOE9es2ZNme0I3hrecccdnvzUU0/5dB06dPBke0hcNtIphc7EiRPTWq9169aefPTRR/t0o0ePTqqN5557zlfOdgqlELj88ss9OdPpk1wwY8YMT872W7nxYE+cEEIchkGcEEIchkGcEEIcpqBy4nY+c9CgQT6dPRwo+Pp0JvLgpPxxxBFHePI333zj0/Xu3duTH3vsMU9u2bJl0u2/+OKLnpxs7pzs58ILL0xrvaKiIk9+/vnnfbqNGzd6cp06dTx54MCBvnqpTOpiYw8zvf/++9NqI9OwJ04IIQ7DIE4IIQ5TUOmU4FuaNtOmTfPk1atX58AakmvOOussX/nJJ5/05B9//NGn69ixoyfbX8WL9yaffRsPAH/72988OfjGJklMtWrVkqoX/LLoyJEjPdm+roP8+te/9mT7K6ZA8m9sfvnll76y/bVCO0WbT9gTJ4QQh2EQJ4QQh2EQJ4QQhymonHg84n2BLts0b948Umd/4bC4uDgX5hQs3bt395UPPvjgUDldgs9S8vmqdSEwdOhQT3711Vd9uoYNG3qyPZQTiD8htv3pjWuvvbasJvqeewDAunXrytxmpmFPnBBCHIZBnBBCHKag0ikzZ8705Isvvtin27x5c87sCH5B8ZZbbomse/fdd3vy7t27s2ZToXLGGWd48g033JDVbTVp0sRXbtWqlSfzrd/Usb/2GZwMOVmCkz3Yw4w7deqUVptz58715FdeeSWtNnIJe+KEEOIwDOKEEOIwBTXHpj2pQnBuTPtjSMEP/2eal19+2Ve2598LvuVlvzmY7ZSPq3MxxsO+DR87dqxPZx/rLVu2RLZh35IH3/o84YQTItfr37+/J9ujjHJNIfo1Wex5VAHgk08+Ca0Xb45N+6NZANCnTx9P/vzzz8tqYtpwjk1CCKkAMIgTQojDMIgTQojDFFRO3CY4ZKlevXqevGjRooxvz377bNKkST7d1q1bPXnAgAE+XTZsiaIi507jYT9Leffdd306OycefEMzXr48l1Rkv77zzju+cvCt3RjxcuJXXXWVT/fwww9nyLqywZw4IYRUABjECSHEYQrqjU2bFStWZLX9YcOG+coTJ0705Fq1avl048eP9+Rcpk9IctiTExx//PE+nX3bvX379pzZRKKxJ2Y45ZRTfLpk08Pz58/35HgTS7gAe+KEEOIwDOKEEOIwDOKEEOIwBZsTzwb2MEI7Bw748+APPvigT3fvvfdm1zBSJuzPIsQjOHSU5Ad7AuRKldLrhy5cuNCTS0tLy2xTPmFPnBBCHIZBnBBCHIbplACNGzf2lZ988klPPv300z3ZfgsT8M/7d//99/t0u3btyqSJJMPEm7TD9l1RUVEuzCEBxowZ4yufe+65KbcxY8YMX/m+++4ri0nlCvbECSHEYRjECSHEYRjECSHEYZgThz/XffPNN/t0PXv29OT169d78sCBA331Pv744+wYR7LCn//8Z0+2Z3oKvrb9/vvve/Kbb76ZfcMIAP8MS6NHj/bpqlatmlQb9nOrZ5991qdzfVihDXvihBDiMAzihBDiMBUmnVK/fn1P/uMf/+jT3XTTTZ5cs2ZNn86ebNee0IFfIywfdO3a1ZOXLVvm023bts2TL7zwQp8uOKlyjGBa7NJLLy2riSQJgpO42EMC7a9MpsKECRM8ed68eekZ5gDsiRNCiMMwiBNCiMMUbDrFHnEC+FMmQZ3No48+Grne5s2bM2QdSZfgpA2vv/66J5922mk+Xd++fT35yiuv9OmiPpwUHMWwYcOGtOwkibHnNn3ggQd8ukaNGqXVpj2CrKJ8sIw9cUIIcRgGcUIIcRgGcUIIcRhJdmLRjGxMJKsbq127tifbE6ECwMknn+zJmzZt8unsL5oFc3O7d+/OpIl5RSkl2Wg32361eeaZZ3zlwYMHe/LatWt9umbNmnlyvLf8PvroI0+2J+EFDvxaZXnEVb+2a9fOk4NDO4NDfaPYuXOnr9y/f39Pfvvtt8tgXf5J1q/siRNCiMMwiBNCiMM4P8TQvu2aO3euJ9vpEwCYPrcAJRgAAAGHSURBVH26Jwff2Cykj+EUIs2bN/fkE044IbLeIYccknSbU6ZM8WT7A0slJSUpWkfSxX4bevv27T5dsumUW2+91Vd2PYWSDuyJE0KIwzCIE0KIwzCIE0KIwzifE69Vq5Ynd+/e3ZODr1k//vjjnrxv377sG0Yyhp07XblypU935JFHRq5n572DEzrMnj3bk3M5zJbsZ8uWLZ78q1/9yqd76KGHPLl9+/Y+ne27qVOnZsc4h2BPnBBCHIZBnBBCHKag3tgk8XH1zT4SH/q1MOEbm4QQUgFgECeEEIdhECeEEIdhECeEEIdhECeEEIdhECeEEIfJ6RBDQgghmYU9cUIIcRgGcUIIcRgGcUIIcRgGcUIIcRgGcUIIcRgGcUIIcRgGcUIIcRgGcUIIcRgGcUIIcRgGcUIIcRgGcUIIcRgGcUIIcRgGcUIIcRgGcUIIcRgGcUIIcRgGcUIIcRgGcUIIcRgGcUIIcRgGcUIIcRgGcUIIcRgGcUIIcRgGcUIIcRgGcUIIcZj/D9rWgJzt/UzXAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "interp.plot_top_losses(9, figsize=(6,6))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAARoAAAEmCAYAAAC9C19sAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAFK1JREFUeJzt3Xu4VXWd+PH3B1FEQRERFA35KV5CcjCcMFEzStNJ0nSc0RTvaRZNXvCWmdd+ptlkZeLlmWnwkmM2P8Nbao+JtwQRwjuaaIyhqCCCoiGXz++PvQ5zcDiHw+V79uHwfj3Pftp77bXX+uw4581ea++NkZlIUkkd6j2ApPbP0EgqztBIKs7QSCrO0EgqztBIKs7QrKUionNE3BkRcyLitlXYzhERcf/qnK1eImLPiHix3nO0R+HnaNq2iPgacBqwI/AeMBn4QWY+uorbHQ58G9g9Mxeu8qBtXEQksF1mvlzvWdZGvqJpwyLiNOBK4P8CvYA+wNXAgath81sDL60NkWmJiOhY7xnatcz00gYvwMbA+8ChzazTiVqIXq8uVwKdqvv2Bv4KnA68BbwBHFvddyHwEbCg2sfxwAXATY223RdIoGN1+xjgFWqvql4Fjmi0/NFGj9sdmADMqf5390b3jQUuBh6rtnM/0KOJ59Yw/5mN5j8I+AfgJeAd4LuN1v8M8DjwbrXuVcB61X0PV89lXvV8/7nR9s8CZgA3NiyrHrNttY9PV7d7A28De9f7Z2NNvNR9AC9N/MHAfsDChl/0Jta5CBgH9AQ2A/4IXFzdt3f1+IuAdatf0A+ATar7Px6WJkMDbAjMBXao7tsC2Km6viQ0QHdgNjC8etzh1e1Nq/vHAlOB7YHO1e0fNvHcGub/fjX/16tf9F8BXYGdgA+B/1OtPwjYrdpvX+AF4JRG20ug3zK2fxm1YHduHJpqna8DzwMbAPcBV9T752JNvXjo1HZtCszM5g9tjgAuysy3MvNtaq9Uhje6f0F1/4LMvIfa3+Y7rOQ8i4EBEdE5M9/IzOeWsc6XgT9n5o2ZuTAzbwGmAMMarfPLzHwpMz8Efg0MbGafC6idj1oA/CfQA/hpZr5X7f954O8AMnNiZo6r9vsX4Frgcy14Tudn5vxqnqVk5vXAy8B4anE9dznbUxMMTds1C+ixnHMHvYFpjW5Pq5Yt2cbHQvUB0GVFB8nMedQON74BvBERd0fEji2Yp2GmLRvdnrEC88zKzEXV9YYQvNno/g8bHh8R20fEXRExIyLmUjuv1aOZbQO8nZl/W8461wMDgJ9n5vzlrKsmGJq263FgPrXzEk15ndpJ3QZ9qmUrYx61Q4QGmze+MzPvy8x9qP3NPoXaL+Dy5mmYafpKzrQiRlGba7vM3Aj4LhDLeUyzb7lGRBdq573+DbggIrqvjkHXRoamjcrMOdTOT/wiIg6KiA0iYt2I2D8iLq9WuwX4XkRsFhE9qvVvWsldTgb2iog+EbExcE7DHRHRKyIOjIgNqcXvfWqHHR93D7B9RHwtIjpGxD8D/YG7VnKmFdGV2nmk96tXWyd/7P43gW1WcJs/BZ7MzBOAu4FrVnnKtZShacMy88fUPkPzPWonQl8DRgC/rVa5BHgSeBp4BphULVuZff0euLXa1kSWjkOHao7Xqb0T8zn+9y8ymTkLOIDaO12zqL1jdEBmzlyZmVbQSOBr1N7Nup7ac2nsAmB0RLwbEf+0vI1FxIHUTsg3PM/TgE9HxBGrbeK1iB/Yk1Scr2gkFWdoJBVnaCQVZ2gkFdemvkgWHTtnrNe13mOogF0+2afeI6iAadP+wsyZM5f3eaU2Fpr1utJph+W+86g10GPjr6r3CCpgyOBdW7Seh06SijM0koozNJKKMzSSijM0koozNJKKMzSSijM0koozNJKKMzSSijM0koozNJKKMzSSijM0koozNJKKMzSSijM0koozNJKKMzSSijM0koozNJKKMzSSijM0koozNJKKMzSSijM0koozNJKKMzSSijM0koozNJKKMzSSijM0koozNJKKMzSSijM0koozNJKKMzSSijM0koozNJKKMzSSijM0koozNJKKMzSSijM0koozNJKKMzSSijM0koozNJKKMzSSijM0koozNKvJNecfwbQHLuXJ2767ZNkmG23AXaNG8MyY73PXqBF069oZgO379mLs6NN5d/xPOGX4F5bazj67f5Knbj+PZ8ecz8hj92nV56AVc9IJx9Gnd08GDRywZNlTkyez15DdGDxoIEMG78qEJ56o44Rth6FZTW68cxwHfusXSy0beew+jH3iRT514EWMfeJFRh67LwCz58zj9Mtu48ob/rDU+h06BFee/U8cOOJqdjnkEg7dbxA7brN5qz0HrZjhRx/D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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "interp.plot_confusion_matrix()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To simply predict the result of a new image (of type [`Image`](/vision.image.html#Image), so opened with [`open_image`](/vision.image.html#open_image) for instance), just use `learn.predict`. It returns the class, its index and the probabilities of each class." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "('7', tensor(0), tensor([0.9835, 0.0165]))" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "img = learn.data.train_ds[0][0]\n", "learn.predict(img)" ] } ], "metadata": { "jekyll": { "keywords": "fastai", "summary": "Application to Computer Vision", "title": "vision" }, "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" } }, "nbformat": 4, "nbformat_minor": 2 }