diff --git a/1-Intro/README.md b/1-Intro/README.md index 2be8d7ed..06fc293f 100644 --- a/1-Intro/README.md +++ b/1-Intro/README.md @@ -57,12 +57,11 @@ Alternatively, we can try to model the simplest elements inside our brain – a A part of Artificial Intelligence that is based on computer learning to solve the problem based on some data is called **Machine Learning**. We will not consider classical machine learning in this course - we refer you to a separate [Machine Learning for Beginners](http://aka.ms/ml-for-beginners) Curriculum. | ![ML for Beginners](images/ml-for-beginners.png) -----|----- - ## A Brief History of AI Artificial Intelligence was started as a field in the middle of XX century. Initially symbolic reasoning was a prevalent approach, and it led to a number of important successes, such as expert systems – computer programs that were able to act as an expert in some limited problem domain. However, it soon became obvious that such approach does not scale well. Extracting the knowledge from an expert, representing it in a computer, and keeping that knowledgebase accurate turns out to be a very complex task, and too expensive to be practical in many cases. This led to so-called [AI Winter](https://en.wikipedia.org/wiki/AI_winter) in the 1970s. -![Brief History of AI](images/history-of-ai.png) +Brief History of AI As time passed, computing resources became cheaper, and more data has become available, the neural network approaches started demonstrating great performance in competing with human beings in many areas, such as computer vision, or speech understanding. In the last decade, the term Artificial Intelligence is mostly used as a synonym for Neural Networks, because most of the AI successes that we hear about are based on them. @@ -76,5 +75,27 @@ Similarly, we can see how the approach towards creating “talking programs” ( * Early program of this kind, [Eliza](https://en.wikipedia.org/wiki/ELIZA), was based on very simple grammatical rule and re-formulation of the input sentence into a question. * Modern assistants, such as Cortana, Siri or Google Assistant, are all hybrid systems, that use Neural networks to convert speech into text and to recognize our intent, and then employ some reasoning or explicit algorithms to perform required actions -* In the future, we may expect complete neural-based model to handle dialogue by itself, recent GPT family of neural networks show great success in this. +* In the future, we may expect complete neural-based model to handle dialogue by itself. Recent GPT and [Turing-NLG](https://turing.microsoft.com/) family of neural networks show great success in this. + + + +## Recent AI Research + +Recent huge growth in neural network research started around 2010, when large public datasets started to become available. A huge collection of images called [ImageNet](https://en.wikipedia.org/wiki/ImageNet), which contains around 14 million annotated images, gave birth to [ImageNet Large Scale Visual Recognition Challenge](https://image-net.org/challenges/LSVRC/). + +![ILSVRC Accuracy](images/ilsvrc.gif) + +In 2012, [Convolutional Neural Networks](../4-ComputerVision/07-ConvNets/README.md) were first used in image classification, which lead to significant drop in classification errors (from almost 30% to 16.4%). In 2015, ResNet architecture from Microsoft Research [achieved human-level accuracy](https://doi.org/10.1109/ICCV.2015.123). + +Since then, Neural Networks demonstrated very successful behaviour in many tasks: + +------|------- +Year | Human Parity in +-----|-------- +2015 | [Image Classification](https://doi.org/10.1109/ICCV.2015.123) +2016 | [Conversational Speech Recognition](https://arxiv.org/abs/1610.05256) +2018 | [Automatic Machine Translation](https://arxiv.org/abs/1803.05567) (Chinese-to-English) +2020 | [Image Captioning](https://arxiv.org/abs/2009.13682) + +Last years witnessed huge successes with large language models, such as BERT and GPT-3. This happens mainly due to the fact that there is a lot of general text data available, which allows us to train models that capture the structure and meaning of texts, pre-train them on general text collections, and then specialize those models for more specific tasks. We will learn more about [Natural Language Processing](../5-NLP/README.md) later in this course. diff --git a/1-Intro/images/history-of-ai.png b/1-Intro/images/history-of-ai.png index ae42232b..4a5a2d69 100644 Binary files a/1-Intro/images/history-of-ai.png and b/1-Intro/images/history-of-ai.png differ diff --git a/1-Intro/images/ilsvrc.gif b/1-Intro/images/ilsvrc.gif new file mode 100644 index 00000000..36410467 Binary files /dev/null and b/1-Intro/images/ilsvrc.gif differ diff --git a/1-Intro/images/turing-test-evol.png b/1-Intro/images/turing-test-evol.png new file mode 100644 index 00000000..7883f7e1 Binary files /dev/null and b/1-Intro/images/turing-test-evol.png differ diff --git a/3-NeuralNetworks/03-Perceptron/Perceptron.ipynb b/3-NeuralNetworks/03-Perceptron/Perceptron.ipynb index 8b4aad8e..bc3442fe 100644 --- a/3-NeuralNetworks/03-Perceptron/Perceptron.ipynb +++ b/3-NeuralNetworks/03-Perceptron/Perceptron.ipynb @@ -1048,11 +1048,6 @@ "This notebook is a part of [AI for Beginners Curricula](http://github.com/microsoft/ai-for-beginners), and has been prepared by [Dmitry Soshnikov](http://soshnikov.com). It is inspired by Neural Network Workshop at Microsoft Research Cambridge. Some code and illustrative materials are taken from presentations by [Katja Hoffmann](https://www.microsoft.com/en-us/research/people/kahofman/), [Matthew Johnson](https://www.microsoft.com/en-us/research/people/matjoh/) and [Ryoto Tomioka](https://www.microsoft.com/en-us/research/people/ryoto/), and from [NeuroWorkshop](http://github.com/shwars/NeuroWorkshop) repository." ], "metadata": {} - }, - { - "cell_type": "markdown", - "source": [], - "metadata": {} } ], "metadata": { diff --git a/3-NeuralNetworks/04-OwnFramework/OwnFramework.ipynb b/3-NeuralNetworks/04-OwnFramework/OwnFramework.ipynb index 81883322..6bdc2341 100644 --- a/3-NeuralNetworks/04-OwnFramework/OwnFramework.ipynb +++ b/3-NeuralNetworks/04-OwnFramework/OwnFramework.ipynb @@ -2,1097 +2,1316 @@ "cells": [ { "cell_type": "markdown", - "source": [ - "## Multi-Layered Perceptrons\r\n", - "## Building our own Neural Framework\r\n", - "\r\n", - "> This notebook is a part of [AI for Beginners Curricula](http://github.com/microsoft/ai-for-beginners). Visit the repository for complete set of learning materials.\r\n", - "\r\n", - "In this notebook, we will gradually build our own neural framework capable of solving multi-class classification tasks as well as regression with multi-layered preceptrons.\r\n", - "\r\n", - "First, let's import some required libraries." - ], "metadata": { "slideshow": { "slide_type": "slide" } - } + }, + "source": [ + "## Multi-Layered Perceptrons\n", + "## Building our own Neural Framework\n", + "\n", + "> This notebook is a part of [AI for Beginners Curricula](http://github.com/microsoft/ai-for-beginners). Visit the repository for complete set of learning materials.\n", + "\n", + "In this notebook, we will gradually build our own neural framework capable of solving multi-class classification tasks as well as regression with multi-layered preceptrons.\n", + "\n", + "First, let's import some required libraries." + ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 14, + "metadata": { + "slideshow": { + "slide_type": "skip" + } + }, + "outputs": [], "source": [ - "%matplotlib nbagg\r\n", - "import matplotlib.pyplot as plt \r\n", - "from matplotlib import gridspec\r\n", - "from sklearn.datasets import make_classification\r\n", - "import numpy as np\r\n", - "# pick the seed for reproducability - change it to explore the effects of random variations\r\n", - "np.random.seed(0)\r\n", + "%matplotlib nbagg\n", + "import matplotlib.pyplot as plt \n", + "from matplotlib import gridspec\n", + "from sklearn.datasets import make_classification\n", + "import numpy as np\n", + "# pick the seed for reproducibility - change it to explore the effects of random variations\n", + "np.random.seed(0)\n", "import random" - ], + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Sample Dataset\n", + "\n", + "As before, we will start with a simple sample dataset with two parameters.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "scrolled": false, + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [], + "source": [ + "n = 100\n", + "X, Y = make_classification(n_samples = n, n_features=2,\n", + " n_redundant=0, n_informative=2, flip_y=0.2)\n", + "X = X.astype(np.float32)\n", + "Y = Y.astype(np.int32)\n", + "\n", + "# Разбиваем на обучающую и тестовые выборки\n", + "train_x, test_x = np.split(X, [n*8//10])\n", + "train_labels, test_labels = np.split(Y, [n*8//10])" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "scrolled": false, + "slideshow": { + "slide_type": "skip" + } + }, + "outputs": [], + "source": [ + "def plot_dataset(suptitle, features, labels):\n", + " # prepare the plot\n", + " fig, ax = plt.subplots(1, 1)\n", + " #pylab.subplots_adjust(bottom=0.2, wspace=0.4)\n", + " fig.suptitle(suptitle, fontsize = 16)\n", + " ax.set_xlabel('$x_i[0]$ -- (feature 1)')\n", + " ax.set_ylabel('$x_i[1]$ -- (feature 2)')\n", + "\n", + " colors = ['r' if l else 'b' for l in labels]\n", + " ax.scatter(features[:, 0], features[:, 1], marker='o', c=colors, s=100, alpha = 0.5)\n", + " fig.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "scrolled": false, + "slideshow": { + "slide_type": "slide" + } + }, "outputs": [ { - "output_type": "error", - "ename": "ImportError", - "evalue": "cannot import name 'animation' from partially initialized module 'matplotlib' (most likely due to a circular import) (C:\\winapp\\Miniconda3\\lib\\site-packages\\matplotlib\\__init__.py)", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mImportError\u001b[0m Traceback (most recent call last)", - "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mget_ipython\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mrun_line_magic\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'matplotlib'\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m'nbagg'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 2\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mmatplotlib\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpyplot\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0mplt\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 3\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[0mmatplotlib\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mgridspec\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 4\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[0msklearn\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mdatasets\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mmake_classification\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mnumpy\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0mnp\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;32mC:\\winapp\\Miniconda3\\lib\\site-packages\\IPython\\core\\interactiveshell.py\u001b[0m in \u001b[0;36mrun_line_magic\u001b[1;34m(self, magic_name, line, _stack_depth)\u001b[0m\n\u001b[0;32m 2346\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m'local_ns'\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mget_local_scope\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mstack_depth\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2347\u001b[0m \u001b[1;32mwith\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mbuiltin_trap\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 2348\u001b[1;33m \u001b[0mresult\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mfn\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m*\u001b[0m\u001b[0margs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 2349\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mresult\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2350\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;32mC:\\winapp\\Miniconda3\\lib\\site-packages\\decorator.py\u001b[0m in \u001b[0;36mfun\u001b[1;34m(*args, **kw)\u001b[0m\n\u001b[0;32m 230\u001b[0m \u001b[1;32mif\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[0mkwsyntax\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 231\u001b[0m \u001b[0margs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mkw\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mfix\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0margs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mkw\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0msig\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 232\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mcaller\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mfunc\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m*\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mextras\u001b[0m \u001b[1;33m+\u001b[0m \u001b[0margs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkw\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 233\u001b[0m \u001b[0mfun\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m__name__\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mfunc\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m__name__\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 234\u001b[0m \u001b[0mfun\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m__doc__\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mfunc\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m__doc__\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;32mC:\\winapp\\Miniconda3\\lib\\site-packages\\IPython\\core\\magic.py\u001b[0m in \u001b[0;36m\u001b[1;34m(f, *a, **k)\u001b[0m\n\u001b[0;32m 185\u001b[0m \u001b[1;31m# but it's overkill for just that one bit of state.\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 186\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0mmagic_deco\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0marg\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 187\u001b[1;33m \u001b[0mcall\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;32mlambda\u001b[0m \u001b[0mf\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m*\u001b[0m\u001b[0ma\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mk\u001b[0m\u001b[1;33m:\u001b[0m \u001b[0mf\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m*\u001b[0m\u001b[0ma\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mk\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 188\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 189\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mcallable\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0marg\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;32mC:\\winapp\\Miniconda3\\lib\\site-packages\\IPython\\core\\magics\\pylab.py\u001b[0m in \u001b[0;36mmatplotlib\u001b[1;34m(self, line)\u001b[0m\n\u001b[0;32m 97\u001b[0m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"Available matplotlib backends: %s\"\u001b[0m \u001b[1;33m%\u001b[0m \u001b[0mbackends_list\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 98\u001b[0m \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 99\u001b[1;33m \u001b[0mgui\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mbackend\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mshell\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0menable_matplotlib\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0margs\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mgui\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mlower\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0margs\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mgui\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mstr\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32melse\u001b[0m \u001b[0margs\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mgui\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 100\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_show_matplotlib_backend\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0margs\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mgui\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mbackend\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 101\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;32mC:\\winapp\\Miniconda3\\lib\\site-packages\\IPython\\core\\interactiveshell.py\u001b[0m in \u001b[0;36menable_matplotlib\u001b[1;34m(self, gui)\u001b[0m\n\u001b[0;32m 3515\u001b[0m \"\"\"\n\u001b[0;32m 3516\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[0mIPython\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcore\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mpylabtools\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0mpt\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 3517\u001b[1;33m \u001b[1;32mfrom\u001b[0m \u001b[0mmatplotlib_inline\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mbackend_inline\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mconfigure_inline_support\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 3518\u001b[0m \u001b[0mgui\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mbackend\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mpt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mfind_gui_and_backend\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mgui\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpylab_gui_select\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 3519\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;32mC:\\winapp\\Miniconda3\\lib\\site-packages\\matplotlib_inline\\backend_inline.py\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 4\u001b[0m \u001b[1;31m# Distributed under the terms of the BSD 3-Clause License.\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 6\u001b[1;33m \u001b[1;32mimport\u001b[0m \u001b[0mmatplotlib\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 7\u001b[0m from matplotlib.backends.backend_agg import ( # noqa\n\u001b[0;32m 8\u001b[0m \u001b[0mnew_figure_manager\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;32mC:\\winapp\\Miniconda3\\lib\\site-packages\\matplotlib\\__init__.py\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 105\u001b[0m \u001b[1;31m# cbook must import matplotlib only within function\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 106\u001b[0m \u001b[1;31m# definitions, so it is safe to import from it here.\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 107\u001b[1;33m \u001b[1;32mfrom\u001b[0m \u001b[1;33m.\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0m_api\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mcbook\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mdocstring\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mrcsetup\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 108\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[0mmatplotlib\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcbook\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mMatplotlibDeprecationWarning\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0msanitize_sequence\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 109\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[0mmatplotlib\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcbook\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mmplDeprecation\u001b[0m \u001b[1;31m# deprecated\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;32mC:\\winapp\\Miniconda3\\lib\\site-packages\\matplotlib\\rcsetup.py\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 22\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mnumpy\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0mnp\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 23\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 24\u001b[1;33m \u001b[1;32mfrom\u001b[0m \u001b[0mmatplotlib\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0m_api\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0manimation\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mcbook\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 25\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[0mmatplotlib\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcbook\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mls_mapper\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 26\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[0mmatplotlib\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcolors\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mColormap\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mis_color_like\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;31mImportError\u001b[0m: cannot import name 'animation' from partially initialized module 'matplotlib' (most likely due to a circular import) (C:\\winapp\\Miniconda3\\lib\\site-packages\\matplotlib\\__init__.py)" + "data": { + "application/javascript": "/* Put everything inside the global mpl namespace */\n/* global mpl */\nwindow.mpl = {};\n\nmpl.get_websocket_type = function () {\n if (typeof WebSocket !== 'undefined') {\n return WebSocket;\n } else if (typeof MozWebSocket !== 'undefined') {\n return MozWebSocket;\n } else {\n alert(\n 'Your browser does not have WebSocket support. ' +\n 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n 'Firefox 4 and 5 are also supported but you ' +\n 'have to enable WebSockets in about:config.'\n );\n }\n};\n\nmpl.figure = function (figure_id, websocket, ondownload, parent_element) {\n this.id = figure_id;\n\n this.ws = websocket;\n\n this.supports_binary = this.ws.binaryType !== undefined;\n\n if (!this.supports_binary) {\n var warnings = document.getElementById('mpl-warnings');\n if (warnings) {\n warnings.style.display = 'block';\n warnings.textContent =\n 'This browser does not support binary websocket messages. ' +\n 'Performance may be slow.';\n }\n }\n\n this.imageObj = new Image();\n\n this.context = undefined;\n this.message = undefined;\n this.canvas = undefined;\n this.rubberband_canvas = undefined;\n this.rubberband_context = undefined;\n this.format_dropdown = undefined;\n\n this.image_mode = 'full';\n\n this.root = document.createElement('div');\n this.root.setAttribute('style', 'display: inline-block');\n this._root_extra_style(this.root);\n\n parent_element.appendChild(this.root);\n\n this._init_header(this);\n this._init_canvas(this);\n this._init_toolbar(this);\n\n var fig = this;\n\n this.waiting = false;\n\n this.ws.onopen = function () {\n fig.send_message('supports_binary', { value: fig.supports_binary });\n fig.send_message('send_image_mode', {});\n if (fig.ratio !== 1) {\n fig.send_message('set_dpi_ratio', { dpi_ratio: fig.ratio });\n }\n fig.send_message('refresh', {});\n };\n\n this.imageObj.onload = function () {\n if (fig.image_mode === 'full') {\n // Full images could contain transparency (where diff images\n // almost always do), so we need to clear the canvas so that\n // there is no ghosting.\n fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n }\n fig.context.drawImage(fig.imageObj, 0, 0);\n };\n\n this.imageObj.onunload = function () {\n fig.ws.close();\n };\n\n this.ws.onmessage = this._make_on_message_function(this);\n\n this.ondownload = ondownload;\n};\n\nmpl.figure.prototype._init_header = function () {\n var titlebar = document.createElement('div');\n titlebar.classList =\n 'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n var titletext = document.createElement('div');\n titletext.classList = 'ui-dialog-title';\n titletext.setAttribute(\n 'style',\n 'width: 100%; text-align: center; padding: 3px;'\n );\n titlebar.appendChild(titletext);\n this.root.appendChild(titlebar);\n this.header = titletext;\n};\n\nmpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n\nmpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n\nmpl.figure.prototype._init_canvas = function () {\n var fig = this;\n\n var canvas_div = (this.canvas_div = document.createElement('div'));\n canvas_div.setAttribute(\n 'style',\n 'border: 1px solid #ddd;' +\n 'box-sizing: content-box;' +\n 'clear: both;' +\n 'min-height: 1px;' +\n 'min-width: 1px;' +\n 'outline: 0;' +\n 'overflow: hidden;' +\n 'position: relative;' +\n 'resize: both;'\n );\n\n function on_keyboard_event_closure(name) {\n return function (event) {\n return fig.key_event(event, name);\n };\n }\n\n canvas_div.addEventListener(\n 'keydown',\n on_keyboard_event_closure('key_press')\n );\n canvas_div.addEventListener(\n 'keyup',\n on_keyboard_event_closure('key_release')\n );\n\n this._canvas_extra_style(canvas_div);\n this.root.appendChild(canvas_div);\n\n var canvas = (this.canvas = document.createElement('canvas'));\n canvas.classList.add('mpl-canvas');\n canvas.setAttribute('style', 'box-sizing: content-box;');\n\n this.context = canvas.getContext('2d');\n\n var backingStore =\n this.context.backingStorePixelRatio ||\n this.context.webkitBackingStorePixelRatio ||\n this.context.mozBackingStorePixelRatio ||\n this.context.msBackingStorePixelRatio ||\n this.context.oBackingStorePixelRatio ||\n this.context.backingStorePixelRatio ||\n 1;\n\n this.ratio = (window.devicePixelRatio || 1) / backingStore;\n\n var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n 'canvas'\n ));\n rubberband_canvas.setAttribute(\n 'style',\n 'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n );\n\n // Apply a ponyfill if ResizeObserver is not implemented by browser.\n if (this.ResizeObserver === undefined) {\n if (window.ResizeObserver !== undefined) {\n this.ResizeObserver = window.ResizeObserver;\n } else {\n var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n this.ResizeObserver = obs.ResizeObserver;\n }\n }\n\n this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n var nentries = entries.length;\n for (var i = 0; i < nentries; i++) {\n var entry = entries[i];\n var width, height;\n if (entry.contentBoxSize) {\n if (entry.contentBoxSize instanceof Array) {\n // Chrome 84 implements new version of spec.\n width = entry.contentBoxSize[0].inlineSize;\n height = entry.contentBoxSize[0].blockSize;\n } else {\n // Firefox implements old version of spec.\n width = entry.contentBoxSize.inlineSize;\n height = entry.contentBoxSize.blockSize;\n }\n } else {\n // Chrome <84 implements even older version of spec.\n width = entry.contentRect.width;\n height = entry.contentRect.height;\n }\n\n // Keep the size of the canvas and rubber band canvas in sync with\n // the canvas container.\n if (entry.devicePixelContentBoxSize) {\n // Chrome 84 implements new version of spec.\n canvas.setAttribute(\n 'width',\n entry.devicePixelContentBoxSize[0].inlineSize\n );\n canvas.setAttribute(\n 'height',\n entry.devicePixelContentBoxSize[0].blockSize\n );\n } else {\n canvas.setAttribute('width', width * fig.ratio);\n canvas.setAttribute('height', height * fig.ratio);\n }\n canvas.setAttribute(\n 'style',\n 'width: ' + width + 'px; height: ' + height + 'px;'\n );\n\n rubberband_canvas.setAttribute('width', width);\n rubberband_canvas.setAttribute('height', height);\n\n // And update the size in Python. We ignore the initial 0/0 size\n // that occurs as the element is placed into the DOM, which should\n // otherwise not happen due to the minimum size styling.\n if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n fig.request_resize(width, height);\n }\n }\n });\n this.resizeObserverInstance.observe(canvas_div);\n\n function on_mouse_event_closure(name) {\n return function (event) {\n return fig.mouse_event(event, name);\n };\n }\n\n rubberband_canvas.addEventListener(\n 'mousedown',\n on_mouse_event_closure('button_press')\n );\n rubberband_canvas.addEventListener(\n 'mouseup',\n on_mouse_event_closure('button_release')\n );\n rubberband_canvas.addEventListener(\n 'dblclick',\n on_mouse_event_closure('dblclick')\n );\n // Throttle sequential mouse events to 1 every 20ms.\n rubberband_canvas.addEventListener(\n 'mousemove',\n on_mouse_event_closure('motion_notify')\n );\n\n rubberband_canvas.addEventListener(\n 'mouseenter',\n on_mouse_event_closure('figure_enter')\n );\n rubberband_canvas.addEventListener(\n 'mouseleave',\n on_mouse_event_closure('figure_leave')\n );\n\n canvas_div.addEventListener('wheel', function (event) {\n if (event.deltaY < 0) {\n event.step = 1;\n } else {\n event.step = -1;\n }\n on_mouse_event_closure('scroll')(event);\n });\n\n canvas_div.appendChild(canvas);\n canvas_div.appendChild(rubberband_canvas);\n\n this.rubberband_context = rubberband_canvas.getContext('2d');\n this.rubberband_context.strokeStyle = '#000000';\n\n this._resize_canvas = function (width, height, forward) {\n if (forward) {\n canvas_div.style.width = width + 'px';\n canvas_div.style.height = height + 'px';\n }\n };\n\n // Disable right mouse context menu.\n this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n event.preventDefault();\n return false;\n });\n\n function set_focus() {\n canvas.focus();\n canvas_div.focus();\n }\n\n window.setTimeout(set_focus, 100);\n};\n\nmpl.figure.prototype._init_toolbar = function () {\n var fig = this;\n\n var toolbar = document.createElement('div');\n toolbar.classList = 'mpl-toolbar';\n this.root.appendChild(toolbar);\n\n function on_click_closure(name) {\n return function (_event) {\n return fig.toolbar_button_onclick(name);\n };\n }\n\n function on_mouseover_closure(tooltip) {\n return function (event) {\n if (!event.currentTarget.disabled) {\n return fig.toolbar_button_onmouseover(tooltip);\n }\n };\n }\n\n fig.buttons = {};\n var buttonGroup = document.createElement('div');\n buttonGroup.classList = 'mpl-button-group';\n for (var toolbar_ind in mpl.toolbar_items) {\n var name = mpl.toolbar_items[toolbar_ind][0];\n var tooltip = mpl.toolbar_items[toolbar_ind][1];\n var image = mpl.toolbar_items[toolbar_ind][2];\n var method_name = mpl.toolbar_items[toolbar_ind][3];\n\n if (!name) {\n /* Instead of a spacer, we start a new button group. */\n if (buttonGroup.hasChildNodes()) {\n toolbar.appendChild(buttonGroup);\n }\n buttonGroup = document.createElement('div');\n buttonGroup.classList = 'mpl-button-group';\n continue;\n }\n\n var button = (fig.buttons[name] = document.createElement('button'));\n button.classList = 'mpl-widget';\n button.setAttribute('role', 'button');\n button.setAttribute('aria-disabled', 'false');\n button.addEventListener('click', on_click_closure(method_name));\n button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n\n var icon_img = document.createElement('img');\n icon_img.src = '_images/' + image + '.png';\n icon_img.srcset = '_images/' + image + '_large.png 2x';\n icon_img.alt = tooltip;\n button.appendChild(icon_img);\n\n buttonGroup.appendChild(button);\n }\n\n if (buttonGroup.hasChildNodes()) {\n toolbar.appendChild(buttonGroup);\n }\n\n var fmt_picker = document.createElement('select');\n fmt_picker.classList = 'mpl-widget';\n toolbar.appendChild(fmt_picker);\n this.format_dropdown = fmt_picker;\n\n for (var ind in mpl.extensions) {\n var fmt = mpl.extensions[ind];\n var option = document.createElement('option');\n option.selected = fmt === mpl.default_extension;\n option.innerHTML = fmt;\n fmt_picker.appendChild(option);\n }\n\n var status_bar = document.createElement('span');\n status_bar.classList = 'mpl-message';\n toolbar.appendChild(status_bar);\n this.message = status_bar;\n};\n\nmpl.figure.prototype.request_resize = function (x_pixels, y_pixels) {\n // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n // which will in turn request a refresh of the image.\n this.send_message('resize', { width: x_pixels, height: y_pixels });\n};\n\nmpl.figure.prototype.send_message = function (type, properties) {\n properties['type'] = type;\n properties['figure_id'] = this.id;\n this.ws.send(JSON.stringify(properties));\n};\n\nmpl.figure.prototype.send_draw_message = function () {\n if (!this.waiting) {\n this.waiting = true;\n this.ws.send(JSON.stringify({ type: 'draw', figure_id: this.id }));\n }\n};\n\nmpl.figure.prototype.handle_save = function (fig, _msg) {\n var format_dropdown = fig.format_dropdown;\n var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n fig.ondownload(fig, format);\n};\n\nmpl.figure.prototype.handle_resize = function (fig, msg) {\n var size = msg['size'];\n if (size[0] !== fig.canvas.width || size[1] !== fig.canvas.height) {\n fig._resize_canvas(size[0], size[1], msg['forward']);\n fig.send_message('refresh', {});\n }\n};\n\nmpl.figure.prototype.handle_rubberband = function (fig, msg) {\n var x0 = msg['x0'] / fig.ratio;\n var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n var x1 = msg['x1'] / fig.ratio;\n var y1 = (fig.canvas.height - msg['y1']) / fig.ratio;\n x0 = Math.floor(x0) + 0.5;\n y0 = Math.floor(y0) + 0.5;\n x1 = Math.floor(x1) + 0.5;\n y1 = Math.floor(y1) + 0.5;\n var min_x = Math.min(x0, x1);\n var min_y = Math.min(y0, y1);\n var width = Math.abs(x1 - x0);\n var height = Math.abs(y1 - y0);\n\n fig.rubberband_context.clearRect(\n 0,\n 0,\n fig.canvas.width / fig.ratio,\n fig.canvas.height / fig.ratio\n );\n\n fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n};\n\nmpl.figure.prototype.handle_figure_label = function (fig, msg) {\n // Updates the figure title.\n fig.header.textContent = msg['label'];\n};\n\nmpl.figure.prototype.handle_cursor = function (fig, msg) {\n var cursor = msg['cursor'];\n switch (cursor) {\n case 0:\n cursor = 'pointer';\n break;\n case 1:\n cursor = 'default';\n break;\n case 2:\n cursor = 'crosshair';\n break;\n case 3:\n cursor = 'move';\n break;\n }\n fig.rubberband_canvas.style.cursor = cursor;\n};\n\nmpl.figure.prototype.handle_message = function (fig, msg) {\n fig.message.textContent = msg['message'];\n};\n\nmpl.figure.prototype.handle_draw = function (fig, _msg) {\n // Request the server to send over a new figure.\n fig.send_draw_message();\n};\n\nmpl.figure.prototype.handle_image_mode = function (fig, msg) {\n fig.image_mode = msg['mode'];\n};\n\nmpl.figure.prototype.handle_history_buttons = function (fig, msg) {\n for (var key in msg) {\n if (!(key in fig.buttons)) {\n continue;\n }\n fig.buttons[key].disabled = !msg[key];\n fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n }\n};\n\nmpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n if (msg['mode'] === 'PAN') {\n fig.buttons['Pan'].classList.add('active');\n fig.buttons['Zoom'].classList.remove('active');\n } else if (msg['mode'] === 'ZOOM') {\n fig.buttons['Pan'].classList.remove('active');\n fig.buttons['Zoom'].classList.add('active');\n } else {\n fig.buttons['Pan'].classList.remove('active');\n fig.buttons['Zoom'].classList.remove('active');\n }\n};\n\nmpl.figure.prototype.updated_canvas_event = function () {\n // Called whenever the canvas gets updated.\n this.send_message('ack', {});\n};\n\n// A function to construct a web socket function for onmessage handling.\n// Called in the figure constructor.\nmpl.figure.prototype._make_on_message_function = function (fig) {\n return function socket_on_message(evt) {\n if (evt.data instanceof Blob) {\n var img = evt.data;\n if (img.type !== 'image/png') {\n /* FIXME: We get \"Resource interpreted as Image but\n * transferred with MIME type text/plain:\" errors on\n * Chrome. But how to set the MIME type? It doesn't seem\n * to be part of the websocket stream */\n img.type = 'image/png';\n }\n\n /* Free the memory for the previous frames */\n if (fig.imageObj.src) {\n (window.URL || window.webkitURL).revokeObjectURL(\n fig.imageObj.src\n );\n }\n\n fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n img\n );\n fig.updated_canvas_event();\n fig.waiting = false;\n return;\n } else if (\n typeof evt.data === 'string' &&\n evt.data.slice(0, 21) === 'data:image/png;base64'\n ) {\n fig.imageObj.src = evt.data;\n fig.updated_canvas_event();\n fig.waiting = false;\n return;\n }\n\n var msg = JSON.parse(evt.data);\n var msg_type = msg['type'];\n\n // Call the \"handle_{type}\" callback, which takes\n // the figure and JSON message as its only arguments.\n try {\n var callback = fig['handle_' + msg_type];\n } catch (e) {\n console.log(\n \"No handler for the '\" + msg_type + \"' message type: \",\n msg\n );\n return;\n }\n\n if (callback) {\n try {\n // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n callback(fig, msg);\n } catch (e) {\n console.log(\n \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n e,\n e.stack,\n msg\n );\n }\n }\n };\n};\n\n// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\nmpl.findpos = function (e) {\n //this section is from http://www.quirksmode.org/js/events_properties.html\n var targ;\n if (!e) {\n e = window.event;\n }\n if (e.target) {\n targ = e.target;\n } else if (e.srcElement) {\n targ = e.srcElement;\n }\n if (targ.nodeType === 3) {\n // defeat Safari bug\n targ = targ.parentNode;\n }\n\n // pageX,Y are the mouse positions relative to the document\n var boundingRect = targ.getBoundingClientRect();\n var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n var y = e.pageY - (boundingRect.top + document.body.scrollTop);\n\n return { x: x, y: y };\n};\n\n/*\n * return a copy of an object with only non-object keys\n * we need this to avoid circular references\n * http://stackoverflow.com/a/24161582/3208463\n */\nfunction simpleKeys(original) {\n return Object.keys(original).reduce(function (obj, key) {\n if (typeof original[key] !== 'object') {\n obj[key] = original[key];\n }\n return obj;\n }, {});\n}\n\nmpl.figure.prototype.mouse_event = function (event, name) {\n var canvas_pos = mpl.findpos(event);\n\n if (name === 'button_press') {\n this.canvas.focus();\n this.canvas_div.focus();\n }\n\n var x = canvas_pos.x * this.ratio;\n var y = canvas_pos.y * this.ratio;\n\n this.send_message(name, {\n x: x,\n y: y,\n button: event.button,\n step: event.step,\n guiEvent: simpleKeys(event),\n });\n\n /* This prevents the web browser from automatically changing to\n * the text insertion cursor when the button is pressed. We want\n * to control all of the cursor setting manually through the\n * 'cursor' event from matplotlib */\n event.preventDefault();\n return false;\n};\n\nmpl.figure.prototype._key_event_extra = function (_event, _name) {\n // Handle any extra behaviour associated with a key event\n};\n\nmpl.figure.prototype.key_event = function (event, name) {\n // Prevent repeat events\n if (name === 'key_press') {\n if (event.key === this._key) {\n return;\n } else {\n this._key = event.key;\n }\n }\n if (name === 'key_release') {\n this._key = null;\n }\n\n var value = '';\n if (event.ctrlKey && event.key !== 'Control') {\n value += 'ctrl+';\n }\n else if (event.altKey && event.key !== 'Alt') {\n value += 'alt+';\n }\n else if (event.shiftKey && event.key !== 'Shift') {\n value += 'shift+';\n }\n\n value += 'k' + event.key;\n\n this._key_event_extra(event, name);\n\n this.send_message(name, { key: value, guiEvent: simpleKeys(event) });\n return false;\n};\n\nmpl.figure.prototype.toolbar_button_onclick = function (name) {\n if (name === 'download') {\n this.handle_save(this, null);\n } else {\n this.send_message('toolbar_button', { name: name });\n }\n};\n\nmpl.figure.prototype.toolbar_button_onmouseover = function (tooltip) {\n this.message.textContent = tooltip;\n};\n\n///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n// prettier-ignore\nvar _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\nmpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n\nmpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n\nmpl.default_extension = \"png\";/* global mpl */\n\nvar comm_websocket_adapter = function (comm) {\n // Create a \"websocket\"-like object which calls the given IPython comm\n // object with the appropriate methods. Currently this is a non binary\n // socket, so there is still some room for performance tuning.\n var ws = {};\n\n ws.binaryType = comm.kernel.ws.binaryType;\n ws.readyState = comm.kernel.ws.readyState;\n function updateReadyState(_event) {\n if (comm.kernel.ws) {\n ws.readyState = comm.kernel.ws.readyState;\n } else {\n ws.readyState = 3; // Closed state.\n }\n }\n comm.kernel.ws.addEventListener('open', updateReadyState);\n comm.kernel.ws.addEventListener('close', updateReadyState);\n comm.kernel.ws.addEventListener('error', updateReadyState);\n\n ws.close = function () {\n comm.close();\n };\n ws.send = function (m) {\n //console.log('sending', m);\n comm.send(m);\n };\n // Register the callback with on_msg.\n comm.on_msg(function (msg) {\n //console.log('receiving', msg['content']['data'], msg);\n var data = msg['content']['data'];\n if (data['blob'] !== undefined) {\n data = {\n data: new Blob(msg['buffers'], { type: data['blob'] }),\n };\n }\n // Pass the mpl event to the overridden (by mpl) onmessage function.\n ws.onmessage(data);\n });\n return ws;\n};\n\nmpl.mpl_figure_comm = function (comm, msg) {\n // This is the function which gets called when the mpl process\n // starts-up an IPython Comm through the \"matplotlib\" channel.\n\n var id = msg.content.data.id;\n // Get hold of the div created by the display call when the Comm\n // socket was opened in Python.\n var element = document.getElementById(id);\n var ws_proxy = comm_websocket_adapter(comm);\n\n function ondownload(figure, _format) {\n window.open(figure.canvas.toDataURL());\n }\n\n var fig = new mpl.figure(id, ws_proxy, ondownload, element);\n\n // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n // web socket which is closed, not our websocket->open comm proxy.\n ws_proxy.onopen();\n\n fig.parent_element = element;\n fig.cell_info = mpl.find_output_cell(\"
\");\n if (!fig.cell_info) {\n console.error('Failed to find cell for figure', id, fig);\n return;\n }\n fig.cell_info[0].output_area.element.on(\n 'cleared',\n { fig: fig },\n fig._remove_fig_handler\n );\n};\n\nmpl.figure.prototype.handle_close = function (fig, msg) {\n var width = fig.canvas.width / fig.ratio;\n fig.cell_info[0].output_area.element.off(\n 'cleared',\n fig._remove_fig_handler\n );\n fig.resizeObserverInstance.unobserve(fig.canvas_div);\n\n // Update the output cell to use the data from the current canvas.\n fig.push_to_output();\n var dataURL = fig.canvas.toDataURL();\n // Re-enable the keyboard manager in IPython - without this line, in FF,\n // the notebook keyboard shortcuts fail.\n IPython.keyboard_manager.enable();\n fig.parent_element.innerHTML =\n '';\n fig.close_ws(fig, msg);\n};\n\nmpl.figure.prototype.close_ws = function (fig, msg) {\n fig.send_message('closing', msg);\n // fig.ws.close()\n};\n\nmpl.figure.prototype.push_to_output = function (_remove_interactive) {\n // Turn the data on the canvas into data in the output cell.\n var width = this.canvas.width / this.ratio;\n var dataURL = this.canvas.toDataURL();\n this.cell_info[1]['text/html'] =\n '';\n};\n\nmpl.figure.prototype.updated_canvas_event = function () {\n // Tell IPython that the notebook contents must change.\n IPython.notebook.set_dirty(true);\n this.send_message('ack', {});\n var fig = this;\n // Wait a second, then push the new image to the DOM so\n // that it is saved nicely (might be nice to debounce this).\n setTimeout(function () {\n fig.push_to_output();\n }, 1000);\n};\n\nmpl.figure.prototype._init_toolbar = function () {\n var fig = this;\n\n var toolbar = document.createElement('div');\n toolbar.classList = 'btn-toolbar';\n this.root.appendChild(toolbar);\n\n function on_click_closure(name) {\n return function (_event) {\n return fig.toolbar_button_onclick(name);\n };\n }\n\n function on_mouseover_closure(tooltip) {\n return function (event) {\n if (!event.currentTarget.disabled) {\n return fig.toolbar_button_onmouseover(tooltip);\n }\n };\n }\n\n fig.buttons = {};\n var buttonGroup = document.createElement('div');\n buttonGroup.classList = 'btn-group';\n var button;\n for (var toolbar_ind in mpl.toolbar_items) {\n var name = mpl.toolbar_items[toolbar_ind][0];\n var tooltip = mpl.toolbar_items[toolbar_ind][1];\n var image = mpl.toolbar_items[toolbar_ind][2];\n var method_name = mpl.toolbar_items[toolbar_ind][3];\n\n if (!name) {\n /* Instead of a spacer, we start a new button group. */\n if (buttonGroup.hasChildNodes()) {\n toolbar.appendChild(buttonGroup);\n }\n buttonGroup = document.createElement('div');\n buttonGroup.classList = 'btn-group';\n continue;\n }\n\n button = fig.buttons[name] = document.createElement('button');\n button.classList = 'btn btn-default';\n button.href = '#';\n button.title = name;\n button.innerHTML = '';\n button.addEventListener('click', on_click_closure(method_name));\n button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n buttonGroup.appendChild(button);\n }\n\n if (buttonGroup.hasChildNodes()) {\n toolbar.appendChild(buttonGroup);\n }\n\n // Add the status bar.\n var status_bar = document.createElement('span');\n status_bar.classList = 'mpl-message pull-right';\n toolbar.appendChild(status_bar);\n this.message = status_bar;\n\n // Add the close button to the window.\n var buttongrp = document.createElement('div');\n buttongrp.classList = 'btn-group inline pull-right';\n button = document.createElement('button');\n button.classList = 'btn btn-mini btn-primary';\n button.href = '#';\n button.title = 'Stop Interaction';\n button.innerHTML = '';\n button.addEventListener('click', function (_evt) {\n fig.handle_close(fig, {});\n });\n button.addEventListener(\n 'mouseover',\n on_mouseover_closure('Stop Interaction')\n );\n buttongrp.appendChild(button);\n var titlebar = this.root.querySelector('.ui-dialog-titlebar');\n titlebar.insertBefore(buttongrp, titlebar.firstChild);\n};\n\nmpl.figure.prototype._remove_fig_handler = function (event) {\n var fig = event.data.fig;\n if (event.target !== this) {\n // Ignore bubbled events from children.\n return;\n }\n fig.close_ws(fig, {});\n};\n\nmpl.figure.prototype._root_extra_style = function (el) {\n el.style.boxSizing = 'content-box'; // override notebook setting of border-box.\n};\n\nmpl.figure.prototype._canvas_extra_style = function (el) {\n // this is important to make the div 'focusable\n el.setAttribute('tabindex', 0);\n // reach out to IPython and tell the keyboard manager to turn it's self\n // off when our div gets focus\n\n // location in version 3\n if (IPython.notebook.keyboard_manager) {\n IPython.notebook.keyboard_manager.register_events(el);\n } else {\n // location in version 2\n IPython.keyboard_manager.register_events(el);\n }\n};\n\nmpl.figure.prototype._key_event_extra = function (event, _name) {\n var manager = IPython.notebook.keyboard_manager;\n if (!manager) {\n manager = IPython.keyboard_manager;\n }\n\n // Check for shift+enter\n if (event.shiftKey && event.which === 13) {\n this.canvas_div.blur();\n // select the cell after this one\n var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n IPython.notebook.select(index + 1);\n }\n};\n\nmpl.figure.prototype.handle_save = function (fig, _msg) {\n fig.ondownload(fig, null);\n};\n\nmpl.find_output_cell = function (html_output) {\n // Return the cell and output element which can be found *uniquely* in the notebook.\n // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n // IPython event is triggered only after the cells have been serialised, which for\n // our purposes (turning an active figure into a static one), is too late.\n var cells = IPython.notebook.get_cells();\n var ncells = cells.length;\n for (var i = 0; i < ncells; i++) {\n var cell = cells[i];\n if (cell.cell_type === 'code') {\n for (var j = 0; j < cell.output_area.outputs.length; j++) {\n var data = cell.output_area.outputs[j];\n if (data.data) {\n // IPython >= 3 moved mimebundle to data attribute of output\n data = data.data;\n }\n if (data['text/html'] === html_output) {\n return [cell, data, j];\n }\n }\n }\n }\n};\n\n// Register the function which deals with the matplotlib target/channel.\n// The kernel may be null if the page has been refreshed.\nif (IPython.notebook.kernel !== null) {\n IPython.notebook.kernel.comm_manager.register_target(\n 'matplotlib',\n mpl.mpl_figure_comm\n );\n}\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_dataset('Scatterplot of the training data', train_x, train_labels)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[ 1.3382818 -0.98613256]\n", + " [ 0.5128146 0.43299454]\n", + " [-0.4473693 -0.2680512 ]\n", + " [-0.9865851 -0.28692 ]\n", + " [-1.0693829 0.41718036]]\n", + "[1 1 0 0 0]\n" ] } ], - "metadata": { - "slideshow": { - "slide_type": "skip" - } - } - }, - { - "cell_type": "markdown", "source": [ - "## Sample Dataset\r\n", - "\r\n", - "As before, we will start with a simple sample dataset with two parameters.|\r\n" - ], - "metadata": { - "slideshow": { - "slide_type": "slide" - } - } - }, - { - "cell_type": "code", - "execution_count": null, - "source": [ - "n = 100\r\n", - "X, Y = make_classification(n_samples = n, n_features=2,\r\n", - " n_redundant=0, n_informative=2, flip_y=0.2)\r\n", - "X = X.astype(np.float32)\r\n", - "Y = Y.astype(np.int32)\r\n", - "\r\n", - "# Разбиваем на обучающую и тестовые выборки\r\n", - "train_x, test_x = np.split(X, [n*8//10])\r\n", - "train_labels, test_labels = np.split(Y, [n*8//10])" - ], - "outputs": [], - "metadata": { - "scrolled": false, - "slideshow": { - "slide_type": "slide" - } - } - }, - { - "cell_type": "code", - "execution_count": null, - "source": [ - "def plot_dataset(suptitle, features, labels):\r\n", - " # prepare the plot\r\n", - " fig, ax = plt.subplots(1, 1)\r\n", - " #pylab.subplots_adjust(bottom=0.2, wspace=0.4)\r\n", - " fig.suptitle(suptitle, fontsize = 16)\r\n", - " ax.set_xlabel('$x_i[0]$ -- (feature 1)')\r\n", - " ax.set_ylabel('$x_i[1]$ -- (feature 2)')\r\n", - "\r\n", - " colors = ['r' if l else 'b' for l in labels]\r\n", - " ax.scatter(features[:, 0], features[:, 1], marker='o', c=colors, s=100, alpha = 0.5)\r\n", - " fig.show()" - ], - "outputs": [], - "metadata": { - "scrolled": false, - "slideshow": { - "slide_type": "skip" - } - } - }, - { - "cell_type": "code", - "execution_count": null, - "source": [ - "plot_dataset('Scatterplot of the training data', train_x, train_labels)\r\n", - "plt.show()" - ], - "outputs": [], - "metadata": { - "scrolled": false, - "slideshow": { - "slide_type": "slide" - } - } - }, - { - "cell_type": "code", - "execution_count": null, - "source": [ - "print(train_x[:5])\r\n", + "print(train_x[:5])\n", "print(train_labels[:5])" - ], - "outputs": [], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ - "## Machine Learning Problem\r\n", - "\r\n", - "Suppose we have input dataset $\\langle X,Y\\rangle$, where $X$ is a set of features, and $Y$ - corresponding labels. For regression problem, $y_i\\in\\mathbb{R}$, and for classification is is represented by a class number $y_i\\in\\{0,\\dots,n\\}$. \r\n", - "\r\n", - "Any machine learning model can be represented by function $f_\\theta(x)$, where $\\theta$ is a set of **parameters**. Our goal is to find such parameters $\\theta$ that our model fits the dataset in the best way. The criteria is defined by **loss function** $\\mathcal{L}$:\r\n", - "\r\n", - "$$\r\n", - "\\theta = \\mathrm{argmin}_\\theta \\mathcal{L}(f_\\theta(X),Y)\r\n", + "## Machine Learning Problem\n", + "\n", + "Suppose we have input dataset $\\langle X,Y\\rangle$, where $X$ is a set of features, and $Y$ - corresponding labels. For regression problem, $y_i\\in\\mathbb{R}$, and for classification it is represented by a class number $y_i\\in\\{0,\\dots,n\\}$. \n", + "\n", + "Any machine learning model can be represented by function $f_\\theta(x)$, where $\\theta$ is a set of **parameters**. Our goal is to find such parameters $\\theta$ that our model fits the dataset in the best way. The criteria is defined by **loss function** $\\mathcal{L}$, and we need to find optimal value\n", + "\n", + "$$\n", + "\\theta = \\mathrm{argmin}_\\theta \\mathcal{L}(f_\\theta(X),Y)\n", "$$" - ], + ] + }, + { + "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } - } - }, - { - "cell_type": "markdown", - "source": [], - "metadata": {} - }, - { - "cell_type": "markdown", + }, "source": [ - "Loss functions depend on the problem being solved.\r\n", - "\r\n", - "### Loss functions for regression\r\n", - "\r\n", + "Loss function depends on the problem being solved.\n", + "\n", + "### Loss functions for regression\n", + "\n", "For regression, we often use **abosolute error** $\\mathcal{L}_{abs}(\\theta) = \\sum_{i=1}^n |y_i - f_{\\theta}(x_i)|$, or **mean squared error**: $\\mathcal{L}_{sq}(\\theta) = \\sum_{i=1}^n (y_i - f_{\\theta}(x_i))^2$" - ], - "metadata": { - "slideshow": { - "slide_type": "slide" - } - } + ] }, { "cell_type": "code", - "execution_count": null, - "source": [ - "# helper function for plotting various loss functions\r\n", - "def plot_loss_functions(suptitle, functions, ylabels, xlabel):\r\n", - " fig, ax = plt.subplots(1,len(functions), figsize=(9, 3))\r\n", - " plt.subplots_adjust(bottom=0.2, wspace=0.4)\r\n", - " fig.suptitle(suptitle)\r\n", - " for i, fun in enumerate(functions):\r\n", - " ax[i].set_xlabel(xlabel)\r\n", - " if len(ylabels) > i:\r\n", - " ax[i].set_ylabel(ylabels[i])\r\n", - " ax[i].plot(x, fun)\r\n", - " plt.show()" - ], - "outputs": [], + "execution_count": 19, "metadata": { "slideshow": { "slide_type": "skip" } - } + }, + "outputs": [], + "source": [ + "# helper function for plotting various loss functions\n", + "def plot_loss_functions(suptitle, functions, ylabels, xlabel):\n", + " fig, ax = plt.subplots(1,len(functions), figsize=(9, 3))\n", + " plt.subplots_adjust(bottom=0.2, wspace=0.4)\n", + " fig.suptitle(suptitle)\n", + " for i, fun in enumerate(functions):\n", + " ax[i].set_xlabel(xlabel)\n", + " if len(ylabels) > i:\n", + " ax[i].set_ylabel(ylabels[i])\n", + " ax[i].plot(x, fun)\n", + " plt.show()" + ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 20, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "data": { + "application/javascript": "/* Put everything inside the global mpl namespace */\n/* global mpl */\nwindow.mpl = {};\n\nmpl.get_websocket_type = function () {\n if (typeof WebSocket !== 'undefined') {\n return WebSocket;\n } else if (typeof MozWebSocket !== 'undefined') {\n return MozWebSocket;\n } else {\n alert(\n 'Your browser does not have WebSocket support. ' +\n 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n 'Firefox 4 and 5 are also supported but you ' +\n 'have to enable WebSockets in about:config.'\n );\n }\n};\n\nmpl.figure = function (figure_id, websocket, ondownload, parent_element) {\n this.id = figure_id;\n\n this.ws = websocket;\n\n this.supports_binary = this.ws.binaryType !== undefined;\n\n if (!this.supports_binary) {\n var warnings = document.getElementById('mpl-warnings');\n if (warnings) {\n warnings.style.display = 'block';\n warnings.textContent =\n 'This browser does not support binary websocket messages. ' +\n 'Performance may be slow.';\n }\n }\n\n this.imageObj = new Image();\n\n this.context = undefined;\n this.message = undefined;\n this.canvas = undefined;\n this.rubberband_canvas = undefined;\n this.rubberband_context = undefined;\n this.format_dropdown = undefined;\n\n this.image_mode = 'full';\n\n this.root = document.createElement('div');\n this.root.setAttribute('style', 'display: inline-block');\n this._root_extra_style(this.root);\n\n parent_element.appendChild(this.root);\n\n this._init_header(this);\n this._init_canvas(this);\n this._init_toolbar(this);\n\n var fig = this;\n\n this.waiting = false;\n\n this.ws.onopen = function () {\n fig.send_message('supports_binary', { value: fig.supports_binary });\n fig.send_message('send_image_mode', {});\n if (fig.ratio !== 1) {\n fig.send_message('set_dpi_ratio', { dpi_ratio: fig.ratio });\n }\n fig.send_message('refresh', {});\n };\n\n this.imageObj.onload = function () {\n if (fig.image_mode === 'full') {\n // Full images could contain transparency (where diff images\n // almost always do), so we need to clear the canvas so that\n // there is no ghosting.\n fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n }\n fig.context.drawImage(fig.imageObj, 0, 0);\n };\n\n this.imageObj.onunload = function () {\n fig.ws.close();\n };\n\n this.ws.onmessage = this._make_on_message_function(this);\n\n this.ondownload = ondownload;\n};\n\nmpl.figure.prototype._init_header = function () {\n var titlebar = document.createElement('div');\n titlebar.classList =\n 'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n var titletext = document.createElement('div');\n titletext.classList = 'ui-dialog-title';\n titletext.setAttribute(\n 'style',\n 'width: 100%; text-align: center; padding: 3px;'\n );\n titlebar.appendChild(titletext);\n this.root.appendChild(titlebar);\n this.header = titletext;\n};\n\nmpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n\nmpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n\nmpl.figure.prototype._init_canvas = function () {\n var fig = this;\n\n var canvas_div = (this.canvas_div = document.createElement('div'));\n canvas_div.setAttribute(\n 'style',\n 'border: 1px solid #ddd;' +\n 'box-sizing: content-box;' +\n 'clear: both;' +\n 'min-height: 1px;' +\n 'min-width: 1px;' +\n 'outline: 0;' +\n 'overflow: hidden;' +\n 'position: relative;' +\n 'resize: both;'\n );\n\n function on_keyboard_event_closure(name) {\n return function (event) {\n return fig.key_event(event, name);\n };\n }\n\n canvas_div.addEventListener(\n 'keydown',\n on_keyboard_event_closure('key_press')\n );\n canvas_div.addEventListener(\n 'keyup',\n on_keyboard_event_closure('key_release')\n );\n\n this._canvas_extra_style(canvas_div);\n this.root.appendChild(canvas_div);\n\n var canvas = (this.canvas = document.createElement('canvas'));\n canvas.classList.add('mpl-canvas');\n canvas.setAttribute('style', 'box-sizing: content-box;');\n\n this.context = canvas.getContext('2d');\n\n var backingStore =\n this.context.backingStorePixelRatio ||\n this.context.webkitBackingStorePixelRatio ||\n this.context.mozBackingStorePixelRatio ||\n this.context.msBackingStorePixelRatio ||\n this.context.oBackingStorePixelRatio ||\n this.context.backingStorePixelRatio ||\n 1;\n\n this.ratio = (window.devicePixelRatio || 1) / backingStore;\n\n var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n 'canvas'\n ));\n rubberband_canvas.setAttribute(\n 'style',\n 'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n );\n\n // Apply a ponyfill if ResizeObserver is not implemented by browser.\n if (this.ResizeObserver === undefined) {\n if (window.ResizeObserver !== undefined) {\n this.ResizeObserver = window.ResizeObserver;\n } else {\n var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n this.ResizeObserver = obs.ResizeObserver;\n }\n }\n\n this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n var nentries = entries.length;\n for (var i = 0; i < nentries; i++) {\n var entry = entries[i];\n var width, height;\n if (entry.contentBoxSize) {\n if (entry.contentBoxSize instanceof Array) {\n // Chrome 84 implements new version of spec.\n width = entry.contentBoxSize[0].inlineSize;\n height = entry.contentBoxSize[0].blockSize;\n } else {\n // Firefox implements old version of spec.\n width = entry.contentBoxSize.inlineSize;\n height = entry.contentBoxSize.blockSize;\n }\n } else {\n // Chrome <84 implements even older version of spec.\n width = entry.contentRect.width;\n height = entry.contentRect.height;\n }\n\n // Keep the size of the canvas and rubber band canvas in sync with\n // the canvas container.\n if (entry.devicePixelContentBoxSize) {\n // Chrome 84 implements new version of spec.\n canvas.setAttribute(\n 'width',\n entry.devicePixelContentBoxSize[0].inlineSize\n );\n canvas.setAttribute(\n 'height',\n entry.devicePixelContentBoxSize[0].blockSize\n );\n } else {\n canvas.setAttribute('width', width * fig.ratio);\n canvas.setAttribute('height', height * fig.ratio);\n }\n canvas.setAttribute(\n 'style',\n 'width: ' + width + 'px; height: ' + height + 'px;'\n );\n\n rubberband_canvas.setAttribute('width', width);\n rubberband_canvas.setAttribute('height', height);\n\n // And update the size in Python. We ignore the initial 0/0 size\n // that occurs as the element is placed into the DOM, which should\n // otherwise not happen due to the minimum size styling.\n if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n fig.request_resize(width, height);\n }\n }\n });\n this.resizeObserverInstance.observe(canvas_div);\n\n function on_mouse_event_closure(name) {\n return function (event) {\n return fig.mouse_event(event, name);\n };\n }\n\n rubberband_canvas.addEventListener(\n 'mousedown',\n on_mouse_event_closure('button_press')\n );\n rubberband_canvas.addEventListener(\n 'mouseup',\n on_mouse_event_closure('button_release')\n );\n rubberband_canvas.addEventListener(\n 'dblclick',\n on_mouse_event_closure('dblclick')\n );\n // Throttle sequential mouse events to 1 every 20ms.\n rubberband_canvas.addEventListener(\n 'mousemove',\n on_mouse_event_closure('motion_notify')\n );\n\n rubberband_canvas.addEventListener(\n 'mouseenter',\n on_mouse_event_closure('figure_enter')\n );\n rubberband_canvas.addEventListener(\n 'mouseleave',\n on_mouse_event_closure('figure_leave')\n );\n\n canvas_div.addEventListener('wheel', function (event) {\n if (event.deltaY < 0) {\n event.step = 1;\n } else {\n event.step = -1;\n }\n on_mouse_event_closure('scroll')(event);\n });\n\n canvas_div.appendChild(canvas);\n canvas_div.appendChild(rubberband_canvas);\n\n this.rubberband_context = rubberband_canvas.getContext('2d');\n this.rubberband_context.strokeStyle = '#000000';\n\n this._resize_canvas = function (width, height, forward) {\n if (forward) {\n canvas_div.style.width = width + 'px';\n canvas_div.style.height = height + 'px';\n }\n };\n\n // Disable right mouse context menu.\n this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n event.preventDefault();\n return false;\n });\n\n function set_focus() {\n canvas.focus();\n canvas_div.focus();\n }\n\n window.setTimeout(set_focus, 100);\n};\n\nmpl.figure.prototype._init_toolbar = function () {\n var fig = this;\n\n var toolbar = document.createElement('div');\n toolbar.classList = 'mpl-toolbar';\n this.root.appendChild(toolbar);\n\n function on_click_closure(name) {\n return function (_event) {\n return fig.toolbar_button_onclick(name);\n };\n }\n\n function on_mouseover_closure(tooltip) {\n return function (event) {\n if (!event.currentTarget.disabled) {\n return fig.toolbar_button_onmouseover(tooltip);\n }\n };\n }\n\n fig.buttons = {};\n var buttonGroup = document.createElement('div');\n buttonGroup.classList = 'mpl-button-group';\n for (var toolbar_ind in mpl.toolbar_items) {\n var name = mpl.toolbar_items[toolbar_ind][0];\n var tooltip = mpl.toolbar_items[toolbar_ind][1];\n var image = mpl.toolbar_items[toolbar_ind][2];\n var method_name = mpl.toolbar_items[toolbar_ind][3];\n\n if (!name) {\n /* Instead of a spacer, we start a new button group. */\n if (buttonGroup.hasChildNodes()) {\n toolbar.appendChild(buttonGroup);\n }\n buttonGroup = document.createElement('div');\n buttonGroup.classList = 'mpl-button-group';\n continue;\n }\n\n var button = (fig.buttons[name] = document.createElement('button'));\n button.classList = 'mpl-widget';\n button.setAttribute('role', 'button');\n button.setAttribute('aria-disabled', 'false');\n button.addEventListener('click', on_click_closure(method_name));\n button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n\n var icon_img = document.createElement('img');\n icon_img.src = '_images/' + image + '.png';\n icon_img.srcset = '_images/' + image + '_large.png 2x';\n icon_img.alt = tooltip;\n button.appendChild(icon_img);\n\n buttonGroup.appendChild(button);\n }\n\n if (buttonGroup.hasChildNodes()) {\n toolbar.appendChild(buttonGroup);\n }\n\n var fmt_picker = document.createElement('select');\n fmt_picker.classList = 'mpl-widget';\n toolbar.appendChild(fmt_picker);\n this.format_dropdown = fmt_picker;\n\n for (var ind in mpl.extensions) {\n var fmt = mpl.extensions[ind];\n var option = document.createElement('option');\n option.selected = fmt === mpl.default_extension;\n option.innerHTML = fmt;\n fmt_picker.appendChild(option);\n }\n\n var status_bar = document.createElement('span');\n status_bar.classList = 'mpl-message';\n toolbar.appendChild(status_bar);\n this.message = status_bar;\n};\n\nmpl.figure.prototype.request_resize = function (x_pixels, y_pixels) {\n // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n // which will in turn request a refresh of the image.\n this.send_message('resize', { width: x_pixels, height: y_pixels });\n};\n\nmpl.figure.prototype.send_message = function (type, properties) {\n properties['type'] = type;\n properties['figure_id'] = this.id;\n this.ws.send(JSON.stringify(properties));\n};\n\nmpl.figure.prototype.send_draw_message = function () {\n if (!this.waiting) {\n this.waiting = true;\n this.ws.send(JSON.stringify({ type: 'draw', figure_id: this.id }));\n }\n};\n\nmpl.figure.prototype.handle_save = function (fig, _msg) {\n var format_dropdown = fig.format_dropdown;\n var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n fig.ondownload(fig, format);\n};\n\nmpl.figure.prototype.handle_resize = function (fig, msg) {\n var size = msg['size'];\n if (size[0] !== fig.canvas.width || size[1] !== fig.canvas.height) {\n fig._resize_canvas(size[0], size[1], msg['forward']);\n fig.send_message('refresh', {});\n }\n};\n\nmpl.figure.prototype.handle_rubberband = function (fig, msg) {\n var x0 = msg['x0'] / fig.ratio;\n var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n var x1 = msg['x1'] / fig.ratio;\n var y1 = (fig.canvas.height - msg['y1']) / fig.ratio;\n x0 = Math.floor(x0) + 0.5;\n y0 = Math.floor(y0) + 0.5;\n x1 = Math.floor(x1) + 0.5;\n y1 = Math.floor(y1) + 0.5;\n var min_x = Math.min(x0, x1);\n var min_y = Math.min(y0, y1);\n var width = Math.abs(x1 - x0);\n var height = Math.abs(y1 - y0);\n\n fig.rubberband_context.clearRect(\n 0,\n 0,\n fig.canvas.width / fig.ratio,\n fig.canvas.height / fig.ratio\n );\n\n fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n};\n\nmpl.figure.prototype.handle_figure_label = function (fig, msg) {\n // Updates the figure title.\n fig.header.textContent = msg['label'];\n};\n\nmpl.figure.prototype.handle_cursor = function (fig, msg) {\n var cursor = msg['cursor'];\n switch (cursor) {\n case 0:\n cursor = 'pointer';\n break;\n case 1:\n cursor = 'default';\n break;\n case 2:\n cursor = 'crosshair';\n break;\n case 3:\n cursor = 'move';\n break;\n }\n fig.rubberband_canvas.style.cursor = cursor;\n};\n\nmpl.figure.prototype.handle_message = function (fig, msg) {\n fig.message.textContent = msg['message'];\n};\n\nmpl.figure.prototype.handle_draw = function (fig, _msg) {\n // Request the server to send over a new figure.\n fig.send_draw_message();\n};\n\nmpl.figure.prototype.handle_image_mode = function (fig, msg) {\n fig.image_mode = msg['mode'];\n};\n\nmpl.figure.prototype.handle_history_buttons = function (fig, msg) {\n for (var key in msg) {\n if (!(key in fig.buttons)) {\n continue;\n }\n fig.buttons[key].disabled = !msg[key];\n fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n }\n};\n\nmpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n if (msg['mode'] === 'PAN') {\n fig.buttons['Pan'].classList.add('active');\n fig.buttons['Zoom'].classList.remove('active');\n } else if (msg['mode'] === 'ZOOM') {\n fig.buttons['Pan'].classList.remove('active');\n fig.buttons['Zoom'].classList.add('active');\n } else {\n fig.buttons['Pan'].classList.remove('active');\n fig.buttons['Zoom'].classList.remove('active');\n }\n};\n\nmpl.figure.prototype.updated_canvas_event = function () {\n // Called whenever the canvas gets updated.\n this.send_message('ack', {});\n};\n\n// A function to construct a web socket function for onmessage handling.\n// Called in the figure constructor.\nmpl.figure.prototype._make_on_message_function = function (fig) {\n return function socket_on_message(evt) {\n if (evt.data instanceof Blob) {\n var img = evt.data;\n if (img.type !== 'image/png') {\n /* FIXME: We get \"Resource interpreted as Image but\n * transferred with MIME type text/plain:\" errors on\n * Chrome. But how to set the MIME type? It doesn't seem\n * to be part of the websocket stream */\n img.type = 'image/png';\n }\n\n /* Free the memory for the previous frames */\n if (fig.imageObj.src) {\n (window.URL || window.webkitURL).revokeObjectURL(\n fig.imageObj.src\n );\n }\n\n fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n img\n );\n fig.updated_canvas_event();\n fig.waiting = false;\n return;\n } else if (\n typeof evt.data === 'string' &&\n evt.data.slice(0, 21) === 'data:image/png;base64'\n ) {\n fig.imageObj.src = evt.data;\n fig.updated_canvas_event();\n fig.waiting = false;\n return;\n }\n\n var msg = JSON.parse(evt.data);\n var msg_type = msg['type'];\n\n // Call the \"handle_{type}\" callback, which takes\n // the figure and JSON message as its only arguments.\n try {\n var callback = fig['handle_' + msg_type];\n } catch (e) {\n console.log(\n \"No handler for the '\" + msg_type + \"' message type: \",\n msg\n );\n return;\n }\n\n if (callback) {\n try {\n // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n callback(fig, msg);\n } catch (e) {\n console.log(\n \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n e,\n e.stack,\n msg\n );\n }\n }\n };\n};\n\n// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\nmpl.findpos = function (e) {\n //this section is from http://www.quirksmode.org/js/events_properties.html\n var targ;\n if (!e) {\n e = window.event;\n }\n if (e.target) {\n targ = e.target;\n } else if (e.srcElement) {\n targ = e.srcElement;\n }\n if (targ.nodeType === 3) {\n // defeat Safari bug\n targ = targ.parentNode;\n }\n\n // pageX,Y are the mouse positions relative to the document\n var boundingRect = targ.getBoundingClientRect();\n var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n var y = e.pageY - (boundingRect.top + document.body.scrollTop);\n\n return { x: x, y: y };\n};\n\n/*\n * return a copy of an object with only non-object keys\n * we need this to avoid circular references\n * http://stackoverflow.com/a/24161582/3208463\n */\nfunction simpleKeys(original) {\n return Object.keys(original).reduce(function (obj, key) {\n if (typeof original[key] !== 'object') {\n obj[key] = original[key];\n }\n return obj;\n }, {});\n}\n\nmpl.figure.prototype.mouse_event = function (event, name) {\n var canvas_pos = mpl.findpos(event);\n\n if (name === 'button_press') {\n this.canvas.focus();\n this.canvas_div.focus();\n }\n\n var x = canvas_pos.x * this.ratio;\n var y = canvas_pos.y * this.ratio;\n\n this.send_message(name, {\n x: x,\n y: y,\n button: event.button,\n step: event.step,\n guiEvent: simpleKeys(event),\n });\n\n /* This prevents the web browser from automatically changing to\n * the text insertion cursor when the button is pressed. We want\n * to control all of the cursor setting manually through the\n * 'cursor' event from matplotlib */\n event.preventDefault();\n return false;\n};\n\nmpl.figure.prototype._key_event_extra = function (_event, _name) {\n // Handle any extra behaviour associated with a key event\n};\n\nmpl.figure.prototype.key_event = function (event, name) {\n // Prevent repeat events\n if (name === 'key_press') {\n if (event.key === this._key) {\n return;\n } else {\n this._key = event.key;\n }\n }\n if (name === 'key_release') {\n this._key = null;\n }\n\n var value = '';\n if (event.ctrlKey && event.key !== 'Control') {\n value += 'ctrl+';\n }\n else if (event.altKey && event.key !== 'Alt') {\n value += 'alt+';\n }\n else if (event.shiftKey && event.key !== 'Shift') {\n value += 'shift+';\n }\n\n value += 'k' + event.key;\n\n this._key_event_extra(event, name);\n\n this.send_message(name, { key: value, guiEvent: simpleKeys(event) });\n return false;\n};\n\nmpl.figure.prototype.toolbar_button_onclick = function (name) {\n if (name === 'download') {\n this.handle_save(this, null);\n } else {\n this.send_message('toolbar_button', { name: name });\n }\n};\n\nmpl.figure.prototype.toolbar_button_onmouseover = function (tooltip) {\n this.message.textContent = tooltip;\n};\n\n///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n// prettier-ignore\nvar _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\nmpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n\nmpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n\nmpl.default_extension = \"png\";/* global mpl */\n\nvar comm_websocket_adapter = function (comm) {\n // Create a \"websocket\"-like object which calls the given IPython comm\n // object with the appropriate methods. Currently this is a non binary\n // socket, so there is still some room for performance tuning.\n var ws = {};\n\n ws.binaryType = comm.kernel.ws.binaryType;\n ws.readyState = comm.kernel.ws.readyState;\n function updateReadyState(_event) {\n if (comm.kernel.ws) {\n ws.readyState = comm.kernel.ws.readyState;\n } else {\n ws.readyState = 3; // Closed state.\n }\n }\n comm.kernel.ws.addEventListener('open', updateReadyState);\n comm.kernel.ws.addEventListener('close', updateReadyState);\n comm.kernel.ws.addEventListener('error', updateReadyState);\n\n ws.close = function () {\n comm.close();\n };\n ws.send = function (m) {\n //console.log('sending', m);\n comm.send(m);\n };\n // Register the callback with on_msg.\n comm.on_msg(function (msg) {\n //console.log('receiving', msg['content']['data'], msg);\n var data = msg['content']['data'];\n if (data['blob'] !== undefined) {\n data = {\n data: new Blob(msg['buffers'], { type: data['blob'] }),\n };\n }\n // Pass the mpl event to the overridden (by mpl) onmessage function.\n ws.onmessage(data);\n });\n return ws;\n};\n\nmpl.mpl_figure_comm = function (comm, msg) {\n // This is the function which gets called when the mpl process\n // starts-up an IPython Comm through the \"matplotlib\" channel.\n\n var id = msg.content.data.id;\n // Get hold of the div created by the display call when the Comm\n // socket was opened in Python.\n var element = document.getElementById(id);\n var ws_proxy = comm_websocket_adapter(comm);\n\n function ondownload(figure, _format) {\n window.open(figure.canvas.toDataURL());\n }\n\n var fig = new mpl.figure(id, ws_proxy, ondownload, element);\n\n // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n // web socket which is closed, not our websocket->open comm proxy.\n ws_proxy.onopen();\n\n fig.parent_element = element;\n fig.cell_info = mpl.find_output_cell(\"
\");\n if (!fig.cell_info) {\n console.error('Failed to find cell for figure', id, fig);\n return;\n }\n fig.cell_info[0].output_area.element.on(\n 'cleared',\n { fig: fig },\n fig._remove_fig_handler\n );\n};\n\nmpl.figure.prototype.handle_close = function (fig, msg) {\n var width = fig.canvas.width / fig.ratio;\n fig.cell_info[0].output_area.element.off(\n 'cleared',\n fig._remove_fig_handler\n );\n fig.resizeObserverInstance.unobserve(fig.canvas_div);\n\n // Update the output cell to use the data from the current canvas.\n fig.push_to_output();\n var dataURL = fig.canvas.toDataURL();\n // Re-enable the keyboard manager in IPython - without this line, in FF,\n // the notebook keyboard shortcuts fail.\n IPython.keyboard_manager.enable();\n fig.parent_element.innerHTML =\n '';\n fig.close_ws(fig, msg);\n};\n\nmpl.figure.prototype.close_ws = function (fig, msg) {\n fig.send_message('closing', msg);\n // fig.ws.close()\n};\n\nmpl.figure.prototype.push_to_output = function (_remove_interactive) {\n // Turn the data on the canvas into data in the output cell.\n var width = this.canvas.width / this.ratio;\n var dataURL = this.canvas.toDataURL();\n this.cell_info[1]['text/html'] =\n '';\n};\n\nmpl.figure.prototype.updated_canvas_event = function () {\n // Tell IPython that the notebook contents must change.\n IPython.notebook.set_dirty(true);\n this.send_message('ack', {});\n var fig = this;\n // Wait a second, then push the new image to the DOM so\n // that it is saved nicely (might be nice to debounce this).\n setTimeout(function () {\n fig.push_to_output();\n }, 1000);\n};\n\nmpl.figure.prototype._init_toolbar = function () {\n var fig = this;\n\n var toolbar = document.createElement('div');\n toolbar.classList = 'btn-toolbar';\n this.root.appendChild(toolbar);\n\n function on_click_closure(name) {\n return function (_event) {\n return fig.toolbar_button_onclick(name);\n };\n }\n\n function on_mouseover_closure(tooltip) {\n return function (event) {\n if (!event.currentTarget.disabled) {\n return fig.toolbar_button_onmouseover(tooltip);\n }\n };\n }\n\n fig.buttons = {};\n var buttonGroup = document.createElement('div');\n buttonGroup.classList = 'btn-group';\n var button;\n for (var toolbar_ind in mpl.toolbar_items) {\n var name = mpl.toolbar_items[toolbar_ind][0];\n var tooltip = mpl.toolbar_items[toolbar_ind][1];\n var image = mpl.toolbar_items[toolbar_ind][2];\n var method_name = mpl.toolbar_items[toolbar_ind][3];\n\n if (!name) {\n /* Instead of a spacer, we start a new button group. */\n if (buttonGroup.hasChildNodes()) {\n toolbar.appendChild(buttonGroup);\n }\n buttonGroup = document.createElement('div');\n buttonGroup.classList = 'btn-group';\n continue;\n }\n\n button = fig.buttons[name] = document.createElement('button');\n button.classList = 'btn btn-default';\n button.href = '#';\n button.title = name;\n button.innerHTML = '';\n button.addEventListener('click', on_click_closure(method_name));\n button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n buttonGroup.appendChild(button);\n }\n\n if (buttonGroup.hasChildNodes()) {\n toolbar.appendChild(buttonGroup);\n }\n\n // Add the status bar.\n var status_bar = document.createElement('span');\n status_bar.classList = 'mpl-message pull-right';\n toolbar.appendChild(status_bar);\n this.message = status_bar;\n\n // Add the close button to the window.\n var buttongrp = document.createElement('div');\n buttongrp.classList = 'btn-group inline pull-right';\n button = document.createElement('button');\n button.classList = 'btn btn-mini btn-primary';\n button.href = '#';\n button.title = 'Stop Interaction';\n button.innerHTML = '';\n button.addEventListener('click', function (_evt) {\n fig.handle_close(fig, {});\n });\n button.addEventListener(\n 'mouseover',\n on_mouseover_closure('Stop Interaction')\n );\n buttongrp.appendChild(button);\n var titlebar = this.root.querySelector('.ui-dialog-titlebar');\n titlebar.insertBefore(buttongrp, titlebar.firstChild);\n};\n\nmpl.figure.prototype._remove_fig_handler = function (event) {\n var fig = event.data.fig;\n if (event.target !== this) {\n // Ignore bubbled events from children.\n return;\n }\n fig.close_ws(fig, {});\n};\n\nmpl.figure.prototype._root_extra_style = function (el) {\n el.style.boxSizing = 'content-box'; // override notebook setting of border-box.\n};\n\nmpl.figure.prototype._canvas_extra_style = function (el) {\n // this is important to make the div 'focusable\n el.setAttribute('tabindex', 0);\n // reach out to IPython and tell the keyboard manager to turn it's self\n // off when our div gets focus\n\n // location in version 3\n if (IPython.notebook.keyboard_manager) {\n IPython.notebook.keyboard_manager.register_events(el);\n } else {\n // location in version 2\n IPython.keyboard_manager.register_events(el);\n }\n};\n\nmpl.figure.prototype._key_event_extra = function (event, _name) {\n var manager = IPython.notebook.keyboard_manager;\n if (!manager) {\n manager = IPython.keyboard_manager;\n }\n\n // Check for shift+enter\n if (event.shiftKey && event.which === 13) {\n this.canvas_div.blur();\n // select the cell after this one\n var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n IPython.notebook.select(index + 1);\n }\n};\n\nmpl.figure.prototype.handle_save = function (fig, _msg) {\n fig.ondownload(fig, null);\n};\n\nmpl.find_output_cell = function (html_output) {\n // Return the cell and output element which can be found *uniquely* in the notebook.\n // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n // IPython event is triggered only after the cells have been serialised, which for\n // our purposes (turning an active figure into a static one), is too late.\n var cells = IPython.notebook.get_cells();\n var ncells = cells.length;\n for (var i = 0; i < ncells; i++) {\n var cell = cells[i];\n if (cell.cell_type === 'code') {\n for (var j = 0; j < cell.output_area.outputs.length; j++) {\n var data = cell.output_area.outputs[j];\n if (data.data) {\n // IPython >= 3 moved mimebundle to data attribute of output\n data = data.data;\n }\n if (data['text/html'] === html_output) {\n return [cell, data, j];\n }\n }\n }\n }\n};\n\n// Register the function which deals with the matplotlib target/channel.\n// The kernel may be null if the page has been refreshed.\nif (IPython.notebook.kernel !== null) {\n IPython.notebook.kernel.comm_manager.register_target(\n 'matplotlib',\n mpl.mpl_figure_comm\n );\n}\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ - "x = np.linspace(-2, 2, 101)\r\n", - "plot_loss_functions(\r\n", - " suptitle = 'Common loss functions for regression',\r\n", - " functions = [np.abs(x), np.power(x, 2)],\r\n", - " ylabels = ['$\\mathcal{L}_{abs}}$ (absolute loss)',\r\n", - " '$\\mathcal{L}_{sq}$ (squared loss)'],\r\n", + "x = np.linspace(-2, 2, 101)\n", + "plot_loss_functions(\n", + " suptitle = 'Common loss functions for regression',\n", + " functions = [np.abs(x), np.power(x, 2)],\n", + " ylabels = ['$\\mathcal{L}_{abs}}$ (absolute loss)',\n", + " '$\\mathcal{L}_{sq}$ (squared loss)'],\n", " xlabel = '$y - f(x_i)$')" - ], - "outputs": [], + ] + }, + { + "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } - } - }, - { - "cell_type": "markdown", + }, "source": [ - "### Loss functions for classification\r\n", - "\r\n", - "Let's consider binary classification for a moment. In this case we have two classes, numbered 0 and 1. The output of the network $f_\\theta(x_i)\\in [0,1]$ essentially defines the probability of choosing the class 1.\r\n", - "\r\n", - "**0-1 loss**\r\n", - "\r\n", - "0-1 loss is the same as calculating accuracy of the model - we compute the number of correct classifications:\r\n", - "\r\n", - "$$\\mathcal{L}_{0-1} = \\sum_{i=1}^n l_i \\quad l_i = \\begin{cases}\r\n", - " 0 & (f(x_i)<0.5 \\land y_i=0) \\lor (f(x_i)<0.5 \\land y_i=1) \\\\\r\n", - " 1 & \\mathrm{ otherwise}\r\n", - " \\end{cases} \\\\\r\n", - "$$\r\n", - "\r\n", - "However, accuracy itself does not show how far are we from the right classification. It could be that we missed the correct class just by a little bit, and that is in a way \"better\" (in a sense that we need to correct weights much less) than missing significantly. Thus, more often logistic loss is used, which takes this into account.\r\n", - "\r\n", - "**Logistic Loss**\r\n", - "\r\n", + "### Loss functions for classification\n", + "\n", + "Let's consider binary classification for a moment. In this case we have two classes, numbered 0 and 1. The output of the network $f_\\theta(x_i)\\in [0,1]$ essentially defines the probability of choosing the class 1.\n", + "\n", + "**0-1 loss**\n", + "\n", + "0-1 loss is the same as calculating accuracy of the model - we compute the number of correct classifications:\n", + "\n", + "$$\\mathcal{L}_{0-1} = \\sum_{i=1}^n l_i \\quad l_i = \\begin{cases}\n", + " 0 & (f(x_i)<0.5 \\land y_i=0) \\lor (f(x_i)<0.5 \\land y_i=1) \\\\\n", + " 1 & \\mathrm{ otherwise}\n", + " \\end{cases} \\\\\n", + "$$\n", + "\n", + "However, accuracy itself does not show how far are we from the right classification. It could be that we missed the correct class just by a little bit, and that is in a way \"better\" (in a sense that we need to correct weights much less) than missing significantly. Thus, more often logistic loss is used, which takes this into account.\n", + "\n", + "**Logistic Loss**\n", + "\n", "$$\\mathcal{L}_{log} = \\sum_{i=1}^n -y\\log(f_{\\theta}(x_i)) - (1-y)\\log(1-f_\\theta(x_i))$$" - ], - "metadata": { - "slideshow": { - "slide_type": "slide" - } - } + ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 21, + "metadata": {}, + "outputs": [], "source": [ - "x = np.linspace(0,1,100)\r\n", - "def zero_one(d):\r\n", - " if d < 0.5:\r\n", - " return 0\r\n", - " return 1\r\n", - "zero_one_v = np.vectorize(zero_one)\r\n", - "\r\n", - "def logistic_loss(fx):\r\n", - " # assumes y == 1\r\n", + "x = np.linspace(0,1,100)\n", + "def zero_one(d):\n", + " if d < 0.5:\n", + " return 0\n", + " return 1\n", + "zero_one_v = np.vectorize(zero_one)\n", + "\n", + "def logistic_loss(fx):\n", + " # assumes y == 1\n", " return -np.log(fx)" - ], - "outputs": [], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": null, - "source": [ - "plot_loss_functions(suptitle = 'Common loss functions for classification (class=1)',\r\n", - " functions = [zero_one_v(x), logistic_loss(x)],\r\n", - " ylabels = ['$\\mathcal{L}_{0-1}}$ (0-1 loss)',\r\n", - " '$\\mathcal{L}_{log}$ (logistic loss)'],\r\n", - " xlabel = '$p$')\r\n" - ], - "outputs": [], + "execution_count": 22, "metadata": { "slideshow": { "slide_type": "slide" } - } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\dmitryso\\AppData\\Local\\Temp/ipykernel_55820/331859503.py:10: RuntimeWarning: divide by zero encountered in log\n", + " return -np.log(fx)\n" + ] + }, + { + "data": { + "application/javascript": "/* Put everything inside the global mpl namespace */\n/* global mpl */\nwindow.mpl = {};\n\nmpl.get_websocket_type = function () {\n if (typeof WebSocket !== 'undefined') {\n return WebSocket;\n } else if (typeof MozWebSocket !== 'undefined') {\n return MozWebSocket;\n } else {\n alert(\n 'Your browser does not have WebSocket support. ' +\n 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n 'Firefox 4 and 5 are also supported but you ' +\n 'have to enable WebSockets in about:config.'\n );\n }\n};\n\nmpl.figure = function (figure_id, websocket, ondownload, parent_element) {\n this.id = figure_id;\n\n this.ws = websocket;\n\n this.supports_binary = this.ws.binaryType !== undefined;\n\n if (!this.supports_binary) {\n var warnings = document.getElementById('mpl-warnings');\n if (warnings) {\n warnings.style.display = 'block';\n warnings.textContent =\n 'This browser does not support binary websocket messages. ' +\n 'Performance may be slow.';\n }\n }\n\n this.imageObj = new Image();\n\n this.context = undefined;\n this.message = undefined;\n this.canvas = undefined;\n this.rubberband_canvas = undefined;\n this.rubberband_context = undefined;\n this.format_dropdown = undefined;\n\n this.image_mode = 'full';\n\n this.root = document.createElement('div');\n this.root.setAttribute('style', 'display: inline-block');\n this._root_extra_style(this.root);\n\n parent_element.appendChild(this.root);\n\n this._init_header(this);\n this._init_canvas(this);\n this._init_toolbar(this);\n\n var fig = this;\n\n this.waiting = false;\n\n this.ws.onopen = function () {\n fig.send_message('supports_binary', { value: fig.supports_binary });\n fig.send_message('send_image_mode', {});\n if (fig.ratio !== 1) {\n fig.send_message('set_dpi_ratio', { dpi_ratio: fig.ratio });\n }\n fig.send_message('refresh', {});\n };\n\n this.imageObj.onload = function () {\n if (fig.image_mode === 'full') {\n // Full images could contain transparency (where diff images\n // almost always do), so we need to clear the canvas so that\n // there is no ghosting.\n fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n }\n fig.context.drawImage(fig.imageObj, 0, 0);\n };\n\n this.imageObj.onunload = function () {\n fig.ws.close();\n };\n\n this.ws.onmessage = this._make_on_message_function(this);\n\n this.ondownload = ondownload;\n};\n\nmpl.figure.prototype._init_header = function () {\n var titlebar = document.createElement('div');\n titlebar.classList =\n 'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n var titletext = document.createElement('div');\n titletext.classList = 'ui-dialog-title';\n titletext.setAttribute(\n 'style',\n 'width: 100%; text-align: center; padding: 3px;'\n );\n titlebar.appendChild(titletext);\n this.root.appendChild(titlebar);\n this.header = titletext;\n};\n\nmpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n\nmpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n\nmpl.figure.prototype._init_canvas = function () {\n var fig = this;\n\n var canvas_div = (this.canvas_div = document.createElement('div'));\n canvas_div.setAttribute(\n 'style',\n 'border: 1px solid #ddd;' +\n 'box-sizing: content-box;' +\n 'clear: both;' +\n 'min-height: 1px;' +\n 'min-width: 1px;' +\n 'outline: 0;' +\n 'overflow: hidden;' +\n 'position: relative;' +\n 'resize: both;'\n );\n\n function on_keyboard_event_closure(name) {\n return function (event) {\n return fig.key_event(event, name);\n };\n }\n\n canvas_div.addEventListener(\n 'keydown',\n on_keyboard_event_closure('key_press')\n );\n canvas_div.addEventListener(\n 'keyup',\n on_keyboard_event_closure('key_release')\n );\n\n this._canvas_extra_style(canvas_div);\n this.root.appendChild(canvas_div);\n\n var canvas = (this.canvas = document.createElement('canvas'));\n canvas.classList.add('mpl-canvas');\n canvas.setAttribute('style', 'box-sizing: content-box;');\n\n this.context = canvas.getContext('2d');\n\n var backingStore =\n this.context.backingStorePixelRatio ||\n this.context.webkitBackingStorePixelRatio ||\n this.context.mozBackingStorePixelRatio ||\n this.context.msBackingStorePixelRatio ||\n this.context.oBackingStorePixelRatio ||\n this.context.backingStorePixelRatio ||\n 1;\n\n this.ratio = (window.devicePixelRatio || 1) / backingStore;\n\n var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n 'canvas'\n ));\n rubberband_canvas.setAttribute(\n 'style',\n 'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n );\n\n // Apply a ponyfill if ResizeObserver is not implemented by browser.\n if (this.ResizeObserver === undefined) {\n if (window.ResizeObserver !== undefined) {\n this.ResizeObserver = window.ResizeObserver;\n } else {\n var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n this.ResizeObserver = obs.ResizeObserver;\n }\n }\n\n this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n var nentries = entries.length;\n for (var i = 0; i < nentries; i++) {\n var entry = entries[i];\n var width, height;\n if (entry.contentBoxSize) {\n if (entry.contentBoxSize instanceof Array) {\n // Chrome 84 implements new version of spec.\n width = entry.contentBoxSize[0].inlineSize;\n height = entry.contentBoxSize[0].blockSize;\n } else {\n // Firefox implements old version of spec.\n width = entry.contentBoxSize.inlineSize;\n height = entry.contentBoxSize.blockSize;\n }\n } else {\n // Chrome <84 implements even older version of spec.\n width = entry.contentRect.width;\n height = entry.contentRect.height;\n }\n\n // Keep the size of the canvas and rubber band canvas in sync with\n // the canvas container.\n if (entry.devicePixelContentBoxSize) {\n // Chrome 84 implements new version of spec.\n canvas.setAttribute(\n 'width',\n entry.devicePixelContentBoxSize[0].inlineSize\n );\n canvas.setAttribute(\n 'height',\n entry.devicePixelContentBoxSize[0].blockSize\n );\n } else {\n canvas.setAttribute('width', width * fig.ratio);\n canvas.setAttribute('height', height * fig.ratio);\n }\n canvas.setAttribute(\n 'style',\n 'width: ' + width + 'px; height: ' + height + 'px;'\n );\n\n rubberband_canvas.setAttribute('width', width);\n rubberband_canvas.setAttribute('height', height);\n\n // And update the size in Python. We ignore the initial 0/0 size\n // that occurs as the element is placed into the DOM, which should\n // otherwise not happen due to the minimum size styling.\n if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n fig.request_resize(width, height);\n }\n }\n });\n this.resizeObserverInstance.observe(canvas_div);\n\n function on_mouse_event_closure(name) {\n return function (event) {\n return fig.mouse_event(event, name);\n };\n }\n\n rubberband_canvas.addEventListener(\n 'mousedown',\n on_mouse_event_closure('button_press')\n );\n rubberband_canvas.addEventListener(\n 'mouseup',\n on_mouse_event_closure('button_release')\n );\n rubberband_canvas.addEventListener(\n 'dblclick',\n on_mouse_event_closure('dblclick')\n );\n // Throttle sequential mouse events to 1 every 20ms.\n rubberband_canvas.addEventListener(\n 'mousemove',\n on_mouse_event_closure('motion_notify')\n );\n\n rubberband_canvas.addEventListener(\n 'mouseenter',\n on_mouse_event_closure('figure_enter')\n );\n rubberband_canvas.addEventListener(\n 'mouseleave',\n on_mouse_event_closure('figure_leave')\n );\n\n canvas_div.addEventListener('wheel', function (event) {\n if (event.deltaY < 0) {\n event.step = 1;\n } else {\n event.step = -1;\n }\n on_mouse_event_closure('scroll')(event);\n });\n\n canvas_div.appendChild(canvas);\n canvas_div.appendChild(rubberband_canvas);\n\n this.rubberband_context = rubberband_canvas.getContext('2d');\n this.rubberband_context.strokeStyle = '#000000';\n\n this._resize_canvas = function (width, height, forward) {\n if (forward) {\n canvas_div.style.width = width + 'px';\n canvas_div.style.height = height + 'px';\n }\n };\n\n // Disable right mouse context menu.\n this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n event.preventDefault();\n return false;\n });\n\n function set_focus() {\n canvas.focus();\n canvas_div.focus();\n }\n\n window.setTimeout(set_focus, 100);\n};\n\nmpl.figure.prototype._init_toolbar = function () {\n var fig = this;\n\n var toolbar = document.createElement('div');\n toolbar.classList = 'mpl-toolbar';\n this.root.appendChild(toolbar);\n\n function on_click_closure(name) {\n return function (_event) {\n return fig.toolbar_button_onclick(name);\n };\n }\n\n function on_mouseover_closure(tooltip) {\n return function (event) {\n if (!event.currentTarget.disabled) {\n return fig.toolbar_button_onmouseover(tooltip);\n }\n };\n }\n\n fig.buttons = {};\n var buttonGroup = document.createElement('div');\n buttonGroup.classList = 'mpl-button-group';\n for (var toolbar_ind in mpl.toolbar_items) {\n var name = mpl.toolbar_items[toolbar_ind][0];\n var tooltip = mpl.toolbar_items[toolbar_ind][1];\n var image = mpl.toolbar_items[toolbar_ind][2];\n var method_name = mpl.toolbar_items[toolbar_ind][3];\n\n if (!name) {\n /* Instead of a spacer, we start a new button group. */\n if (buttonGroup.hasChildNodes()) {\n toolbar.appendChild(buttonGroup);\n }\n buttonGroup = document.createElement('div');\n buttonGroup.classList = 'mpl-button-group';\n continue;\n }\n\n var button = (fig.buttons[name] = document.createElement('button'));\n button.classList = 'mpl-widget';\n button.setAttribute('role', 'button');\n button.setAttribute('aria-disabled', 'false');\n button.addEventListener('click', on_click_closure(method_name));\n button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n\n var icon_img = document.createElement('img');\n icon_img.src = '_images/' + image + '.png';\n icon_img.srcset = '_images/' + image + '_large.png 2x';\n icon_img.alt = tooltip;\n button.appendChild(icon_img);\n\n buttonGroup.appendChild(button);\n }\n\n if (buttonGroup.hasChildNodes()) {\n toolbar.appendChild(buttonGroup);\n }\n\n var fmt_picker = document.createElement('select');\n fmt_picker.classList = 'mpl-widget';\n toolbar.appendChild(fmt_picker);\n this.format_dropdown = fmt_picker;\n\n for (var ind in mpl.extensions) {\n var fmt = mpl.extensions[ind];\n var option = document.createElement('option');\n option.selected = fmt === mpl.default_extension;\n option.innerHTML = fmt;\n fmt_picker.appendChild(option);\n }\n\n var status_bar = document.createElement('span');\n status_bar.classList = 'mpl-message';\n toolbar.appendChild(status_bar);\n this.message = status_bar;\n};\n\nmpl.figure.prototype.request_resize = function (x_pixels, y_pixels) {\n // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n // which will in turn request a refresh of the image.\n this.send_message('resize', { width: x_pixels, height: y_pixels });\n};\n\nmpl.figure.prototype.send_message = function (type, properties) {\n properties['type'] = type;\n properties['figure_id'] = this.id;\n this.ws.send(JSON.stringify(properties));\n};\n\nmpl.figure.prototype.send_draw_message = function () {\n if (!this.waiting) {\n this.waiting = true;\n this.ws.send(JSON.stringify({ type: 'draw', figure_id: this.id }));\n }\n};\n\nmpl.figure.prototype.handle_save = function (fig, _msg) {\n var format_dropdown = fig.format_dropdown;\n var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n fig.ondownload(fig, format);\n};\n\nmpl.figure.prototype.handle_resize = function (fig, msg) {\n var size = msg['size'];\n if (size[0] !== fig.canvas.width || size[1] !== fig.canvas.height) {\n fig._resize_canvas(size[0], size[1], msg['forward']);\n fig.send_message('refresh', {});\n }\n};\n\nmpl.figure.prototype.handle_rubberband = function (fig, msg) {\n var x0 = msg['x0'] / fig.ratio;\n var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n var x1 = msg['x1'] / fig.ratio;\n var y1 = (fig.canvas.height - msg['y1']) / fig.ratio;\n x0 = Math.floor(x0) + 0.5;\n y0 = Math.floor(y0) + 0.5;\n x1 = Math.floor(x1) + 0.5;\n y1 = Math.floor(y1) + 0.5;\n var min_x = Math.min(x0, x1);\n var min_y = Math.min(y0, y1);\n var width = Math.abs(x1 - x0);\n var height = Math.abs(y1 - y0);\n\n fig.rubberband_context.clearRect(\n 0,\n 0,\n fig.canvas.width / fig.ratio,\n fig.canvas.height / fig.ratio\n );\n\n fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n};\n\nmpl.figure.prototype.handle_figure_label = function (fig, msg) {\n // Updates the figure title.\n fig.header.textContent = msg['label'];\n};\n\nmpl.figure.prototype.handle_cursor = function (fig, msg) {\n var cursor = msg['cursor'];\n switch (cursor) {\n case 0:\n cursor = 'pointer';\n break;\n case 1:\n cursor = 'default';\n break;\n case 2:\n cursor = 'crosshair';\n break;\n case 3:\n cursor = 'move';\n break;\n }\n fig.rubberband_canvas.style.cursor = cursor;\n};\n\nmpl.figure.prototype.handle_message = function (fig, msg) {\n fig.message.textContent = msg['message'];\n};\n\nmpl.figure.prototype.handle_draw = function (fig, _msg) {\n // Request the server to send over a new figure.\n fig.send_draw_message();\n};\n\nmpl.figure.prototype.handle_image_mode = function (fig, msg) {\n fig.image_mode = msg['mode'];\n};\n\nmpl.figure.prototype.handle_history_buttons = function (fig, msg) {\n for (var key in msg) {\n if (!(key in fig.buttons)) {\n continue;\n }\n fig.buttons[key].disabled = !msg[key];\n fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n }\n};\n\nmpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n if (msg['mode'] === 'PAN') {\n fig.buttons['Pan'].classList.add('active');\n fig.buttons['Zoom'].classList.remove('active');\n } else if (msg['mode'] === 'ZOOM') {\n fig.buttons['Pan'].classList.remove('active');\n fig.buttons['Zoom'].classList.add('active');\n } else {\n fig.buttons['Pan'].classList.remove('active');\n fig.buttons['Zoom'].classList.remove('active');\n }\n};\n\nmpl.figure.prototype.updated_canvas_event = function () {\n // Called whenever the canvas gets updated.\n this.send_message('ack', {});\n};\n\n// A function to construct a web socket function for onmessage handling.\n// Called in the figure constructor.\nmpl.figure.prototype._make_on_message_function = function (fig) {\n return function socket_on_message(evt) {\n if (evt.data instanceof Blob) {\n var img = evt.data;\n if (img.type !== 'image/png') {\n /* FIXME: We get \"Resource interpreted as Image but\n * transferred with MIME type text/plain:\" errors on\n * Chrome. But how to set the MIME type? It doesn't seem\n * to be part of the websocket stream */\n img.type = 'image/png';\n }\n\n /* Free the memory for the previous frames */\n if (fig.imageObj.src) {\n (window.URL || window.webkitURL).revokeObjectURL(\n fig.imageObj.src\n );\n }\n\n fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n img\n );\n fig.updated_canvas_event();\n fig.waiting = false;\n return;\n } else if (\n typeof evt.data === 'string' &&\n evt.data.slice(0, 21) === 'data:image/png;base64'\n ) {\n fig.imageObj.src = evt.data;\n fig.updated_canvas_event();\n fig.waiting = false;\n return;\n }\n\n var msg = JSON.parse(evt.data);\n var msg_type = msg['type'];\n\n // Call the \"handle_{type}\" callback, which takes\n // the figure and JSON message as its only arguments.\n try {\n var callback = fig['handle_' + msg_type];\n } catch (e) {\n console.log(\n \"No handler for the '\" + msg_type + \"' message type: \",\n msg\n );\n return;\n }\n\n if (callback) {\n try {\n // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n callback(fig, msg);\n } catch (e) {\n console.log(\n \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n e,\n e.stack,\n msg\n );\n }\n }\n };\n};\n\n// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\nmpl.findpos = function (e) {\n //this section is from http://www.quirksmode.org/js/events_properties.html\n var targ;\n if (!e) {\n e = window.event;\n }\n if (e.target) {\n targ = e.target;\n } else if (e.srcElement) {\n targ = e.srcElement;\n }\n if (targ.nodeType === 3) {\n // defeat Safari bug\n targ = targ.parentNode;\n }\n\n // pageX,Y are the mouse positions relative to the document\n var boundingRect = targ.getBoundingClientRect();\n var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n var y = e.pageY - (boundingRect.top + document.body.scrollTop);\n\n return { x: x, y: y };\n};\n\n/*\n * return a copy of an object with only non-object keys\n * we need this to avoid circular references\n * http://stackoverflow.com/a/24161582/3208463\n */\nfunction simpleKeys(original) {\n return Object.keys(original).reduce(function (obj, key) {\n if (typeof original[key] !== 'object') {\n obj[key] = original[key];\n }\n return obj;\n }, {});\n}\n\nmpl.figure.prototype.mouse_event = function (event, name) {\n var canvas_pos = mpl.findpos(event);\n\n if (name === 'button_press') {\n this.canvas.focus();\n this.canvas_div.focus();\n }\n\n var x = canvas_pos.x * this.ratio;\n var y = canvas_pos.y * this.ratio;\n\n this.send_message(name, {\n x: x,\n y: y,\n button: event.button,\n step: event.step,\n guiEvent: simpleKeys(event),\n });\n\n /* This prevents the web browser from automatically changing to\n * the text insertion cursor when the button is pressed. We want\n * to control all of the cursor setting manually through the\n * 'cursor' event from matplotlib */\n event.preventDefault();\n return false;\n};\n\nmpl.figure.prototype._key_event_extra = function (_event, _name) {\n // Handle any extra behaviour associated with a key event\n};\n\nmpl.figure.prototype.key_event = function (event, name) {\n // Prevent repeat events\n if (name === 'key_press') {\n if (event.key === this._key) {\n return;\n } else {\n this._key = event.key;\n }\n }\n if (name === 'key_release') {\n this._key = null;\n }\n\n var value = '';\n if (event.ctrlKey && event.key !== 'Control') {\n value += 'ctrl+';\n }\n else if (event.altKey && event.key !== 'Alt') {\n value += 'alt+';\n }\n else if (event.shiftKey && event.key !== 'Shift') {\n value += 'shift+';\n }\n\n value += 'k' + event.key;\n\n this._key_event_extra(event, name);\n\n this.send_message(name, { key: value, guiEvent: simpleKeys(event) });\n return false;\n};\n\nmpl.figure.prototype.toolbar_button_onclick = function (name) {\n if (name === 'download') {\n this.handle_save(this, null);\n } else {\n this.send_message('toolbar_button', { name: name });\n }\n};\n\nmpl.figure.prototype.toolbar_button_onmouseover = function (tooltip) {\n this.message.textContent = tooltip;\n};\n\n///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n// prettier-ignore\nvar _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\nmpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n\nmpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n\nmpl.default_extension = \"png\";/* global mpl */\n\nvar comm_websocket_adapter = function (comm) {\n // Create a \"websocket\"-like object which calls the given IPython comm\n // object with the appropriate methods. Currently this is a non binary\n // socket, so there is still some room for performance tuning.\n var ws = {};\n\n ws.binaryType = comm.kernel.ws.binaryType;\n ws.readyState = comm.kernel.ws.readyState;\n function updateReadyState(_event) {\n if (comm.kernel.ws) {\n ws.readyState = comm.kernel.ws.readyState;\n } else {\n ws.readyState = 3; // Closed state.\n }\n }\n comm.kernel.ws.addEventListener('open', updateReadyState);\n comm.kernel.ws.addEventListener('close', updateReadyState);\n comm.kernel.ws.addEventListener('error', updateReadyState);\n\n ws.close = function () {\n comm.close();\n };\n ws.send = function (m) {\n //console.log('sending', m);\n comm.send(m);\n };\n // Register the callback with on_msg.\n comm.on_msg(function (msg) {\n //console.log('receiving', msg['content']['data'], msg);\n var data = msg['content']['data'];\n if (data['blob'] !== undefined) {\n data = {\n data: new Blob(msg['buffers'], { type: data['blob'] }),\n };\n }\n // Pass the mpl event to the overridden (by mpl) onmessage function.\n ws.onmessage(data);\n });\n return ws;\n};\n\nmpl.mpl_figure_comm = function (comm, msg) {\n // This is the function which gets called when the mpl process\n // starts-up an IPython Comm through the \"matplotlib\" channel.\n\n var id = msg.content.data.id;\n // Get hold of the div created by the display call when the Comm\n // socket was opened in Python.\n var element = document.getElementById(id);\n var ws_proxy = comm_websocket_adapter(comm);\n\n function ondownload(figure, _format) {\n window.open(figure.canvas.toDataURL());\n }\n\n var fig = new mpl.figure(id, ws_proxy, ondownload, element);\n\n // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n // web socket which is closed, not our websocket->open comm proxy.\n ws_proxy.onopen();\n\n fig.parent_element = element;\n fig.cell_info = mpl.find_output_cell(\"
\");\n if (!fig.cell_info) {\n console.error('Failed to find cell for figure', id, fig);\n return;\n }\n fig.cell_info[0].output_area.element.on(\n 'cleared',\n { fig: fig },\n fig._remove_fig_handler\n );\n};\n\nmpl.figure.prototype.handle_close = function (fig, msg) {\n var width = fig.canvas.width / fig.ratio;\n fig.cell_info[0].output_area.element.off(\n 'cleared',\n fig._remove_fig_handler\n );\n fig.resizeObserverInstance.unobserve(fig.canvas_div);\n\n // Update the output cell to use the data from the current canvas.\n fig.push_to_output();\n var dataURL = fig.canvas.toDataURL();\n // Re-enable the keyboard manager in IPython - without this line, in FF,\n // the notebook keyboard shortcuts fail.\n IPython.keyboard_manager.enable();\n fig.parent_element.innerHTML =\n '';\n fig.close_ws(fig, msg);\n};\n\nmpl.figure.prototype.close_ws = function (fig, msg) {\n fig.send_message('closing', msg);\n // fig.ws.close()\n};\n\nmpl.figure.prototype.push_to_output = function (_remove_interactive) {\n // Turn the data on the canvas into data in the output cell.\n var width = this.canvas.width / this.ratio;\n var dataURL = this.canvas.toDataURL();\n this.cell_info[1]['text/html'] =\n '';\n};\n\nmpl.figure.prototype.updated_canvas_event = function () {\n // Tell IPython that the notebook contents must change.\n IPython.notebook.set_dirty(true);\n this.send_message('ack', {});\n var fig = this;\n // Wait a second, then push the new image to the DOM so\n // that it is saved nicely (might be nice to debounce this).\n setTimeout(function () {\n fig.push_to_output();\n }, 1000);\n};\n\nmpl.figure.prototype._init_toolbar = function () {\n var fig = this;\n\n var toolbar = document.createElement('div');\n toolbar.classList = 'btn-toolbar';\n this.root.appendChild(toolbar);\n\n function on_click_closure(name) {\n return function (_event) {\n return fig.toolbar_button_onclick(name);\n };\n }\n\n function on_mouseover_closure(tooltip) {\n return function (event) {\n if (!event.currentTarget.disabled) {\n return fig.toolbar_button_onmouseover(tooltip);\n }\n };\n }\n\n fig.buttons = {};\n var buttonGroup = document.createElement('div');\n buttonGroup.classList = 'btn-group';\n var button;\n for (var toolbar_ind in mpl.toolbar_items) {\n var name = mpl.toolbar_items[toolbar_ind][0];\n var tooltip = mpl.toolbar_items[toolbar_ind][1];\n var image = mpl.toolbar_items[toolbar_ind][2];\n var method_name = mpl.toolbar_items[toolbar_ind][3];\n\n if (!name) {\n /* Instead of a spacer, we start a new button group. */\n if (buttonGroup.hasChildNodes()) {\n toolbar.appendChild(buttonGroup);\n }\n buttonGroup = document.createElement('div');\n buttonGroup.classList = 'btn-group';\n continue;\n }\n\n button = fig.buttons[name] = document.createElement('button');\n button.classList = 'btn btn-default';\n button.href = '#';\n button.title = name;\n button.innerHTML = '';\n button.addEventListener('click', on_click_closure(method_name));\n button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n buttonGroup.appendChild(button);\n }\n\n if (buttonGroup.hasChildNodes()) {\n toolbar.appendChild(buttonGroup);\n }\n\n // Add the status bar.\n var status_bar = document.createElement('span');\n status_bar.classList = 'mpl-message pull-right';\n toolbar.appendChild(status_bar);\n this.message = status_bar;\n\n // Add the close button to the window.\n var buttongrp = document.createElement('div');\n buttongrp.classList = 'btn-group inline pull-right';\n button = document.createElement('button');\n button.classList = 'btn btn-mini btn-primary';\n button.href = '#';\n button.title = 'Stop Interaction';\n button.innerHTML = '';\n button.addEventListener('click', function (_evt) {\n fig.handle_close(fig, {});\n });\n button.addEventListener(\n 'mouseover',\n on_mouseover_closure('Stop Interaction')\n );\n buttongrp.appendChild(button);\n var titlebar = this.root.querySelector('.ui-dialog-titlebar');\n titlebar.insertBefore(buttongrp, titlebar.firstChild);\n};\n\nmpl.figure.prototype._remove_fig_handler = function (event) {\n var fig = event.data.fig;\n if (event.target !== this) {\n // Ignore bubbled events from children.\n return;\n }\n fig.close_ws(fig, {});\n};\n\nmpl.figure.prototype._root_extra_style = function (el) {\n el.style.boxSizing = 'content-box'; // override notebook setting of border-box.\n};\n\nmpl.figure.prototype._canvas_extra_style = function (el) {\n // this is important to make the div 'focusable\n el.setAttribute('tabindex', 0);\n // reach out to IPython and tell the keyboard manager to turn it's self\n // off when our div gets focus\n\n // location in version 3\n if (IPython.notebook.keyboard_manager) {\n IPython.notebook.keyboard_manager.register_events(el);\n } else {\n // location in version 2\n IPython.keyboard_manager.register_events(el);\n }\n};\n\nmpl.figure.prototype._key_event_extra = function (event, _name) {\n var manager = IPython.notebook.keyboard_manager;\n if (!manager) {\n manager = IPython.keyboard_manager;\n }\n\n // Check for shift+enter\n if (event.shiftKey && event.which === 13) {\n this.canvas_div.blur();\n // select the cell after this one\n var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n IPython.notebook.select(index + 1);\n }\n};\n\nmpl.figure.prototype.handle_save = function (fig, _msg) {\n fig.ondownload(fig, null);\n};\n\nmpl.find_output_cell = function (html_output) {\n // Return the cell and output element which can be found *uniquely* in the notebook.\n // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n // IPython event is triggered only after the cells have been serialised, which for\n // our purposes (turning an active figure into a static one), is too late.\n var cells = IPython.notebook.get_cells();\n var ncells = cells.length;\n for (var i = 0; i < ncells; i++) {\n var cell = cells[i];\n if (cell.cell_type === 'code') {\n for (var j = 0; j < cell.output_area.outputs.length; j++) {\n var data = cell.output_area.outputs[j];\n if (data.data) {\n // IPython >= 3 moved mimebundle to data attribute of output\n data = data.data;\n }\n if (data['text/html'] === html_output) {\n return [cell, data, j];\n }\n }\n }\n }\n};\n\n// Register the function which deals with the matplotlib target/channel.\n// The kernel may be null if the page has been refreshed.\nif (IPython.notebook.kernel !== null) {\n IPython.notebook.kernel.comm_manager.register_target(\n 'matplotlib',\n mpl.mpl_figure_comm\n );\n}\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_loss_functions(suptitle = 'Common loss functions for classification (class=1)',\n", + " functions = [zero_one_v(x), logistic_loss(x)],\n", + " ylabels = ['$\\mathcal{L}_{0-1}}$ (0-1 loss)',\n", + " '$\\mathcal{L}_{log}$ (logistic loss)'],\n", + " xlabel = '$p$')\n" + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ - "## Neural Network Architecture\r\n", - "\r\n", - "We have generated a dataset for binary classification problem. However, let's consider it as multi-class classification right from the start, so that we can then easily switch our code to multi-class classification. In this case, our one-layer perceptron will have the following architecture:\r\n", - "\r\n", - "\r\n", - "\r\n", - "Two outputs of the network correspond to two classes, and the class with highest value among two outputs corresponds to the right solution.\r\n", - "\r\n", - "The model is defined as\r\n", - "$$\r\n", - "f_\\theta(x) = W\\times x + b\r\n", - "$$\r\n", - "where $$\\theta = \\langle W,b\\rangle$$ are parameters.\r\n", - "\r\n", + "To understand logistic loss, consider two cases of the expected output:\n", + "* If we expect output to be 1 ($y=1$), then the loss is $-log f_\\theta(x_i)$. The loss is 0 is the network predicts 1 with probability 1, and grows larger when probability of 1 gets smaller.\n", + "* If we expect output to be 0 ($y=0$), the loss is $-log(1-f_\\theta(x_i))$. Here, $1-f_\\theta(x_i)$ is the probability of 0 which is predicted by the network, and the meaning of log-loss is the same as described in the previous case" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Neural Network Architecture\n", + "\n", + "We have generated a dataset for binary classification problem. However, let's consider it as multi-class classification right from the start, so that we can then easily switch our code to multi-class classification. In this case, our one-layer perceptron will have the following architecture:\n", + "\n", + "\n", + "\n", + "Two outputs of the network correspond to two classes, and the class with highest value among two outputs corresponds to the right solution.\n", + "\n", + "The model is defined as\n", + "$$\n", + "f_\\theta(x) = W\\times x + b\n", + "$$\n", + "where $$\\theta = \\langle W,b\\rangle$$ are parameters.\n", + "\n", "We will define this linear layer as a Python class with a `forward` function that performs the calculation. It receives input value $x$, and produces the output of the layer. Parameters `W` and `b` are stored within the layer class, and are initialized upon creation with random values and zeroes respectively." - ], - "metadata": { - "slideshow": { - "slide_type": "slide" - } - } + ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 1.77202116, -0.25384488],\n", + " [ 0.28370828, -0.39610552],\n", + " [-0.30097433, 0.30513182],\n", + " [-0.8120485 , 0.56079421],\n", + " [-1.23519653, 0.3394973 ]])" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "class Linear:\r\n", - " def __init__(self,nin,nout):\r\n", - " self.W = np.random.normal(0, 1.0/np.sqrt(nin), (nout, nin))\r\n", - " self.b = np.zeros((1,nout))\r\n", - " \r\n", - " def forward(self, x):\r\n", - " return np.dot(x, self.W.T) + self.b\r\n", - " \r\n", - "net = Linear(2,2)\r\n", + "class Linear:\n", + " def __init__(self,nin,nout):\n", + " self.W = np.random.normal(0, 1.0/np.sqrt(nin), (nout, nin))\n", + " self.b = np.zeros((1,nout))\n", + " \n", + " def forward(self, x):\n", + " return np.dot(x, self.W.T) + self.b\n", + " \n", + "net = Linear(2,2)\n", "net.forward(train_x[0:5])" - ], - "outputs": [], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ - "Because we use Numpy operations, we can pass a vector if input values to our network, and it will give us the vector of output values.\r\n", - "\r\n", - "## Softmax: Turning Outputs into Probabilities\r\n", - "\r\n", - "As you can see, our outputs are not probabilities - they can take any values. In order to convert them into probabilities, we need to normalize the values across all classes. This is done using **softmax** function: $$\\sigma(\\mathbf{z}_c) = \\frac{e^{z_c}}{\\sum_{j} e^{z_j}}, \\quad\\mathrm{for}\\quad c\\in 1 .. |C|$$\r\n", - "\r\n", - "\r\n", - "\r\n", - "> Output of the network $\\sigma(\\mathbf{z})$ can be interpreted as probability distribution on the set of classes $C$: $q = \\sigma(\\mathbf{z}_c) = \\hat{p}(c | x)$\r\n", - "\r\n", + "In many cases, it is more efficient to operate not on the one input value, but on the vector of input values. Because we use Numpy operations, we can pass a vector of input values to our network, and it will give us the vector of output values.\n", + "\n", + "## Softmax: Turning Outputs into Probabilities\n", + "\n", + "As you can see, our outputs are not probabilities - they can take any values. In order to convert them into probabilities, we need to normalize the values across all classes. This is done using **softmax** function: $$\\sigma(\\mathbf{z}_c) = \\frac{e^{z_c}}{\\sum_{j} e^{z_j}}, \\quad\\mathrm{for}\\quad c\\in 1 .. |C|$$\n", + "\n", + "\n", + "\n", + "> Output of the network $\\sigma(\\mathbf{z})$ can be interpreted as probability distribution on the set of classes $C$: $q = \\sigma(\\mathbf{z}_c) = \\hat{p}(c | x)$\n", + "\n", "We will define the `Softmax` layer in the same manner, as a class with `forward` function: " - ], - "metadata": { - "slideshow": { - "slide_type": "slide" - } - } + ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[0.88348621, 0.11651379],\n", + " [0.66369714, 0.33630286],\n", + " [0.35294795, 0.64705205],\n", + " [0.20216095, 0.79783905],\n", + " [0.17154828, 0.82845172],\n", + " [0.24279153, 0.75720847],\n", + " [0.18915732, 0.81084268],\n", + " [0.17282951, 0.82717049],\n", + " [0.13897531, 0.86102469],\n", + " [0.72746882, 0.27253118]])" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "class Softmax:\r\n", - " def forward(self,z):\r\n", - " zmax = z.max(axis=1,keepdims=True)\r\n", - " expz = np.exp(z-zmax)\r\n", - " Z = expz.sum(axis=1,keepdims=True)\r\n", - " return expz / Z\r\n", - "\r\n", - "softmax = Softmax()\r\n", + "class Softmax:\n", + " def forward(self,z):\n", + " zmax = z.max(axis=1,keepdims=True)\n", + " expz = np.exp(z-zmax)\n", + " Z = expz.sum(axis=1,keepdims=True)\n", + " return expz / Z\n", + "\n", + "softmax = Softmax()\n", "softmax.forward(net.forward(train_x[0:10]))" - ], - "outputs": [], - "metadata": {} + ] }, { "cell_type": "markdown", - "source": [ - "You can see that we are now getting probabilities as outputs, i.e. the sum of each output vector is exactly 1. \r\n", - "\r\n", - "In case we have more than 2 classes, softmax will normalize probabilities across all of them. Here is a diagram of network architecture that does MNIST digit classification:\r\n", - "\r\n", - "![MNIST Classifier](images/Cross-Entropy-Loss.PNG)\r\n" - ], "metadata": { "slideshow": { "slide_type": "slide" } - } + }, + "source": [ + "You can see that we are now getting probabilities as outputs, i.e. the sum of each output vector is exactly 1. \n", + "\n", + "In case we have more than 2 classes, softmax will normalize probabilities across all of them. Here is a diagram of network architecture that does MNIST digit classification:\n", + "\n", + "![MNIST Classifier](images/Cross-Entropy-Loss.PNG)\n" + ] }, { "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ - "## Cross-Entropy Loss\r\n", - "\r\n", - "A loss function in classification is typically a logistic function, which can be generalized as **cross-entropy loss**. Cross-entropy loss is a function that can calculate similarity between two arbitrary probability distributions. You can find more detailed discussion about it [on Wikipedia](https://en.wikipedia.org/wiki/Cross_entropy).\r\n", - "\r\n", - "In our case, first distribution is the probabilistic output of our network, and the second one is so-called **one-hot** distribution, which specifies that a given class $c$ has corresponding probability 1 (all the rest being 0). In such a case cross-entropy loss can be calculated as $-\\log p_c$, where $c$ is the expected class, and $p_c$ is the corresponding probability of this class given by our neural network.\r\n", - "\r\n", + "## Cross-Entropy Loss\n", + "\n", + "A loss function in classification is typically a logistic function, which can be generalized as **cross-entropy loss**. Cross-entropy loss is a function that can calculate similarity between two arbitrary probability distributions. You can find more detailed discussion about it [on Wikipedia](https://en.wikipedia.org/wiki/Cross_entropy).\n", + "\n", + "In our case, first distribution is the probabilistic output of our network, and the second one is so-called **one-hot** distribution, which specifies that a given class $c$ has corresponding probability 1 (all the rest being 0). In such a case cross-entropy loss can be calculated as $-\\log p_c$, where $c$ is the expected class, and $p_c$ is the corresponding probability of this class given by our neural network.\n", + "\n", "> If the network return probability 1 for the expected class, cross-entropy loss would be 0. The closer the probability of the actual class is to 0, the higher is cross-entropy loss (and it can go up to infinity!)." - ], - "metadata": { - "slideshow": { - "slide_type": "slide" - } - } + ] }, { "cell_type": "code", - "execution_count": null, - "source": [ - "def plot_cross_ent():\r\n", - " p = np.linspace(0.01, 0.99, 101) # estimated probability p(y|x)\r\n", - " cross_ent_v = np.vectorize(cross_ent)\r\n", - " f3, ax = plt.subplots(1,1, figsize=(8, 3))\r\n", - " l1, = plt.plot(p, cross_ent_v(p, 1), 'r--')\r\n", - " l2, = plt.plot(p, cross_ent_v(p, 0), 'r-')\r\n", - " plt.legend([l1, l2], ['$y = 1$', '$y = 0$'], loc = 'upper center', ncol = 2)\r\n", - " plt.xlabel('$\\hat{p}(y|x)$', size=18)\r\n", - " plt.ylabel('$\\mathcal{L}_{CE}$', size=18)\r\n", - " plt.show()" - ], - "outputs": [], + "execution_count": 25, "metadata": { "slideshow": { "slide_type": "skip" } - } + }, + "outputs": [], + "source": [ + "def plot_cross_ent():\n", + " p = np.linspace(0.01, 0.99, 101) # estimated probability p(y|x)\n", + " cross_ent_v = np.vectorize(cross_ent)\n", + " f3, ax = plt.subplots(1,1, figsize=(8, 3))\n", + " l1, = plt.plot(p, cross_ent_v(p, 1), 'r--')\n", + " l2, = plt.plot(p, cross_ent_v(p, 0), 'r-')\n", + " plt.legend([l1, l2], ['$y = 1$', '$y = 0$'], loc = 'upper center', ncol = 2)\n", + " plt.xlabel('$\\hat{p}(y|x)$', size=18)\n", + " plt.ylabel('$\\mathcal{L}_{CE}$', size=18)\n", + " plt.show()" + ] }, { "cell_type": "code", - "execution_count": null, - "source": [ - "def cross_ent(prediction, ground_truth):\r\n", - " t = 1 if ground_truth > 0.5 else 0\r\n", - " return -t * np.log(prediction) - (1 - t) * np.log(1 - prediction)\r\n", - "plot_cross_ent()" - ], - "outputs": [], + "execution_count": 26, "metadata": { "scrolled": true, "slideshow": { "slide_type": "slide" } - } + }, + "outputs": [ + { + "data": { + "application/javascript": "/* Put everything inside the global mpl namespace */\n/* global mpl */\nwindow.mpl = {};\n\nmpl.get_websocket_type = function () {\n if (typeof WebSocket !== 'undefined') {\n return WebSocket;\n } else if (typeof MozWebSocket !== 'undefined') {\n return MozWebSocket;\n } else {\n alert(\n 'Your browser does not have WebSocket support. ' +\n 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n 'Firefox 4 and 5 are also supported but you ' +\n 'have to enable WebSockets in about:config.'\n );\n }\n};\n\nmpl.figure = function (figure_id, websocket, ondownload, parent_element) {\n this.id = figure_id;\n\n this.ws = websocket;\n\n this.supports_binary = this.ws.binaryType !== undefined;\n\n if (!this.supports_binary) {\n var warnings = document.getElementById('mpl-warnings');\n if (warnings) {\n warnings.style.display = 'block';\n warnings.textContent =\n 'This browser does not support binary websocket messages. ' +\n 'Performance may be slow.';\n }\n }\n\n this.imageObj = new Image();\n\n this.context = undefined;\n this.message = undefined;\n this.canvas = undefined;\n this.rubberband_canvas = undefined;\n this.rubberband_context = undefined;\n this.format_dropdown = undefined;\n\n this.image_mode = 'full';\n\n this.root = document.createElement('div');\n this.root.setAttribute('style', 'display: inline-block');\n this._root_extra_style(this.root);\n\n parent_element.appendChild(this.root);\n\n this._init_header(this);\n this._init_canvas(this);\n this._init_toolbar(this);\n\n var fig = this;\n\n this.waiting = false;\n\n this.ws.onopen = function () {\n fig.send_message('supports_binary', { value: fig.supports_binary });\n fig.send_message('send_image_mode', {});\n if (fig.ratio !== 1) {\n fig.send_message('set_dpi_ratio', { dpi_ratio: fig.ratio });\n }\n fig.send_message('refresh', {});\n };\n\n this.imageObj.onload = function () {\n if (fig.image_mode === 'full') {\n // Full images could contain transparency (where diff images\n // almost always do), so we need to clear the canvas so that\n // there is no ghosting.\n fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n }\n fig.context.drawImage(fig.imageObj, 0, 0);\n };\n\n this.imageObj.onunload = function () {\n fig.ws.close();\n };\n\n this.ws.onmessage = this._make_on_message_function(this);\n\n this.ondownload = ondownload;\n};\n\nmpl.figure.prototype._init_header = function () {\n var titlebar = document.createElement('div');\n titlebar.classList =\n 'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n var titletext = document.createElement('div');\n titletext.classList = 'ui-dialog-title';\n titletext.setAttribute(\n 'style',\n 'width: 100%; text-align: center; padding: 3px;'\n );\n titlebar.appendChild(titletext);\n this.root.appendChild(titlebar);\n this.header = titletext;\n};\n\nmpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n\nmpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n\nmpl.figure.prototype._init_canvas = function () {\n var fig = this;\n\n var canvas_div = (this.canvas_div = document.createElement('div'));\n canvas_div.setAttribute(\n 'style',\n 'border: 1px solid #ddd;' +\n 'box-sizing: content-box;' +\n 'clear: both;' +\n 'min-height: 1px;' +\n 'min-width: 1px;' +\n 'outline: 0;' +\n 'overflow: hidden;' +\n 'position: relative;' +\n 'resize: both;'\n );\n\n function on_keyboard_event_closure(name) {\n return function (event) {\n return fig.key_event(event, name);\n };\n }\n\n canvas_div.addEventListener(\n 'keydown',\n on_keyboard_event_closure('key_press')\n );\n canvas_div.addEventListener(\n 'keyup',\n on_keyboard_event_closure('key_release')\n );\n\n this._canvas_extra_style(canvas_div);\n this.root.appendChild(canvas_div);\n\n var canvas = (this.canvas = document.createElement('canvas'));\n canvas.classList.add('mpl-canvas');\n canvas.setAttribute('style', 'box-sizing: content-box;');\n\n this.context = canvas.getContext('2d');\n\n var backingStore =\n this.context.backingStorePixelRatio ||\n this.context.webkitBackingStorePixelRatio ||\n this.context.mozBackingStorePixelRatio ||\n this.context.msBackingStorePixelRatio ||\n this.context.oBackingStorePixelRatio ||\n this.context.backingStorePixelRatio ||\n 1;\n\n this.ratio = (window.devicePixelRatio || 1) / backingStore;\n\n var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n 'canvas'\n ));\n rubberband_canvas.setAttribute(\n 'style',\n 'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n );\n\n // Apply a ponyfill if ResizeObserver is not implemented by browser.\n if (this.ResizeObserver === undefined) {\n if (window.ResizeObserver !== undefined) {\n this.ResizeObserver = window.ResizeObserver;\n } else {\n var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n this.ResizeObserver = obs.ResizeObserver;\n }\n }\n\n this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n var nentries = entries.length;\n for (var i = 0; i < nentries; i++) {\n var entry = entries[i];\n var width, height;\n if (entry.contentBoxSize) {\n if (entry.contentBoxSize instanceof Array) {\n // Chrome 84 implements new version of spec.\n width = entry.contentBoxSize[0].inlineSize;\n height = entry.contentBoxSize[0].blockSize;\n } else {\n // Firefox implements old version of spec.\n width = entry.contentBoxSize.inlineSize;\n height = entry.contentBoxSize.blockSize;\n }\n } else {\n // Chrome <84 implements even older version of spec.\n width = entry.contentRect.width;\n height = entry.contentRect.height;\n }\n\n // Keep the size of the canvas and rubber band canvas in sync with\n // the canvas container.\n if (entry.devicePixelContentBoxSize) {\n // Chrome 84 implements new version of spec.\n canvas.setAttribute(\n 'width',\n entry.devicePixelContentBoxSize[0].inlineSize\n );\n canvas.setAttribute(\n 'height',\n entry.devicePixelContentBoxSize[0].blockSize\n );\n } else {\n canvas.setAttribute('width', width * fig.ratio);\n canvas.setAttribute('height', height * fig.ratio);\n }\n canvas.setAttribute(\n 'style',\n 'width: ' + width + 'px; height: ' + height + 'px;'\n );\n\n rubberband_canvas.setAttribute('width', width);\n rubberband_canvas.setAttribute('height', height);\n\n // And update the size in Python. We ignore the initial 0/0 size\n // that occurs as the element is placed into the DOM, which should\n // otherwise not happen due to the minimum size styling.\n if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n fig.request_resize(width, height);\n }\n }\n });\n this.resizeObserverInstance.observe(canvas_div);\n\n function on_mouse_event_closure(name) {\n return function (event) {\n return fig.mouse_event(event, name);\n };\n }\n\n rubberband_canvas.addEventListener(\n 'mousedown',\n on_mouse_event_closure('button_press')\n );\n rubberband_canvas.addEventListener(\n 'mouseup',\n on_mouse_event_closure('button_release')\n );\n rubberband_canvas.addEventListener(\n 'dblclick',\n on_mouse_event_closure('dblclick')\n );\n // Throttle sequential mouse events to 1 every 20ms.\n rubberband_canvas.addEventListener(\n 'mousemove',\n on_mouse_event_closure('motion_notify')\n );\n\n rubberband_canvas.addEventListener(\n 'mouseenter',\n on_mouse_event_closure('figure_enter')\n );\n rubberband_canvas.addEventListener(\n 'mouseleave',\n on_mouse_event_closure('figure_leave')\n );\n\n canvas_div.addEventListener('wheel', function (event) {\n if (event.deltaY < 0) {\n event.step = 1;\n } else {\n event.step = -1;\n }\n on_mouse_event_closure('scroll')(event);\n });\n\n canvas_div.appendChild(canvas);\n canvas_div.appendChild(rubberband_canvas);\n\n this.rubberband_context = rubberband_canvas.getContext('2d');\n this.rubberband_context.strokeStyle = '#000000';\n\n this._resize_canvas = function (width, height, forward) {\n if (forward) {\n canvas_div.style.width = width + 'px';\n canvas_div.style.height = height + 'px';\n }\n };\n\n // Disable right mouse context menu.\n this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n event.preventDefault();\n return false;\n });\n\n function set_focus() {\n canvas.focus();\n canvas_div.focus();\n }\n\n window.setTimeout(set_focus, 100);\n};\n\nmpl.figure.prototype._init_toolbar = function () {\n var fig = this;\n\n var toolbar = document.createElement('div');\n toolbar.classList = 'mpl-toolbar';\n this.root.appendChild(toolbar);\n\n function on_click_closure(name) {\n return function (_event) {\n return fig.toolbar_button_onclick(name);\n };\n }\n\n function on_mouseover_closure(tooltip) {\n return function (event) {\n if (!event.currentTarget.disabled) {\n return fig.toolbar_button_onmouseover(tooltip);\n }\n };\n }\n\n fig.buttons = {};\n var buttonGroup = document.createElement('div');\n buttonGroup.classList = 'mpl-button-group';\n for (var toolbar_ind in mpl.toolbar_items) {\n var name = mpl.toolbar_items[toolbar_ind][0];\n var tooltip = mpl.toolbar_items[toolbar_ind][1];\n var image = mpl.toolbar_items[toolbar_ind][2];\n var method_name = mpl.toolbar_items[toolbar_ind][3];\n\n if (!name) {\n /* Instead of a spacer, we start a new button group. */\n if (buttonGroup.hasChildNodes()) {\n toolbar.appendChild(buttonGroup);\n }\n buttonGroup = document.createElement('div');\n buttonGroup.classList = 'mpl-button-group';\n continue;\n }\n\n var button = (fig.buttons[name] = document.createElement('button'));\n button.classList = 'mpl-widget';\n button.setAttribute('role', 'button');\n button.setAttribute('aria-disabled', 'false');\n button.addEventListener('click', on_click_closure(method_name));\n button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n\n var icon_img = document.createElement('img');\n icon_img.src = '_images/' + image + '.png';\n icon_img.srcset = '_images/' + image + '_large.png 2x';\n icon_img.alt = tooltip;\n button.appendChild(icon_img);\n\n buttonGroup.appendChild(button);\n }\n\n if (buttonGroup.hasChildNodes()) {\n toolbar.appendChild(buttonGroup);\n }\n\n var fmt_picker = document.createElement('select');\n fmt_picker.classList = 'mpl-widget';\n toolbar.appendChild(fmt_picker);\n this.format_dropdown = fmt_picker;\n\n for (var ind in mpl.extensions) {\n var fmt = mpl.extensions[ind];\n var option = document.createElement('option');\n option.selected = fmt === mpl.default_extension;\n option.innerHTML = fmt;\n fmt_picker.appendChild(option);\n }\n\n var status_bar = document.createElement('span');\n status_bar.classList = 'mpl-message';\n toolbar.appendChild(status_bar);\n this.message = status_bar;\n};\n\nmpl.figure.prototype.request_resize = function (x_pixels, y_pixels) {\n // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n // which will in turn request a refresh of the image.\n this.send_message('resize', { width: x_pixels, height: y_pixels });\n};\n\nmpl.figure.prototype.send_message = function (type, properties) {\n properties['type'] = type;\n properties['figure_id'] = this.id;\n this.ws.send(JSON.stringify(properties));\n};\n\nmpl.figure.prototype.send_draw_message = function () {\n if (!this.waiting) {\n this.waiting = true;\n this.ws.send(JSON.stringify({ type: 'draw', figure_id: this.id }));\n }\n};\n\nmpl.figure.prototype.handle_save = function (fig, _msg) {\n var format_dropdown = fig.format_dropdown;\n var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n fig.ondownload(fig, format);\n};\n\nmpl.figure.prototype.handle_resize = function (fig, msg) {\n var size = msg['size'];\n if (size[0] !== fig.canvas.width || size[1] !== fig.canvas.height) {\n fig._resize_canvas(size[0], size[1], msg['forward']);\n fig.send_message('refresh', {});\n }\n};\n\nmpl.figure.prototype.handle_rubberband = function (fig, msg) {\n var x0 = msg['x0'] / fig.ratio;\n var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n var x1 = msg['x1'] / fig.ratio;\n var y1 = (fig.canvas.height - msg['y1']) / fig.ratio;\n x0 = Math.floor(x0) + 0.5;\n y0 = Math.floor(y0) + 0.5;\n x1 = Math.floor(x1) + 0.5;\n y1 = Math.floor(y1) + 0.5;\n var min_x = Math.min(x0, x1);\n var min_y = Math.min(y0, y1);\n var width = Math.abs(x1 - x0);\n var height = Math.abs(y1 - y0);\n\n fig.rubberband_context.clearRect(\n 0,\n 0,\n fig.canvas.width / fig.ratio,\n fig.canvas.height / fig.ratio\n );\n\n fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n};\n\nmpl.figure.prototype.handle_figure_label = function (fig, msg) {\n // Updates the figure title.\n fig.header.textContent = msg['label'];\n};\n\nmpl.figure.prototype.handle_cursor = function (fig, msg) {\n var cursor = msg['cursor'];\n switch (cursor) {\n case 0:\n cursor = 'pointer';\n break;\n case 1:\n cursor = 'default';\n break;\n case 2:\n cursor = 'crosshair';\n break;\n case 3:\n cursor = 'move';\n break;\n }\n fig.rubberband_canvas.style.cursor = cursor;\n};\n\nmpl.figure.prototype.handle_message = function (fig, msg) {\n fig.message.textContent = msg['message'];\n};\n\nmpl.figure.prototype.handle_draw = function (fig, _msg) {\n // Request the server to send over a new figure.\n fig.send_draw_message();\n};\n\nmpl.figure.prototype.handle_image_mode = function (fig, msg) {\n fig.image_mode = msg['mode'];\n};\n\nmpl.figure.prototype.handle_history_buttons = function (fig, msg) {\n for (var key in msg) {\n if (!(key in fig.buttons)) {\n continue;\n }\n fig.buttons[key].disabled = !msg[key];\n fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n }\n};\n\nmpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n if (msg['mode'] === 'PAN') {\n fig.buttons['Pan'].classList.add('active');\n fig.buttons['Zoom'].classList.remove('active');\n } else if (msg['mode'] === 'ZOOM') {\n fig.buttons['Pan'].classList.remove('active');\n fig.buttons['Zoom'].classList.add('active');\n } else {\n fig.buttons['Pan'].classList.remove('active');\n fig.buttons['Zoom'].classList.remove('active');\n }\n};\n\nmpl.figure.prototype.updated_canvas_event = function () {\n // Called whenever the canvas gets updated.\n this.send_message('ack', {});\n};\n\n// A function to construct a web socket function for onmessage handling.\n// Called in the figure constructor.\nmpl.figure.prototype._make_on_message_function = function (fig) {\n return function socket_on_message(evt) {\n if (evt.data instanceof Blob) {\n var img = evt.data;\n if (img.type !== 'image/png') {\n /* FIXME: We get \"Resource interpreted as Image but\n * transferred with MIME type text/plain:\" errors on\n * Chrome. But how to set the MIME type? It doesn't seem\n * to be part of the websocket stream */\n img.type = 'image/png';\n }\n\n /* Free the memory for the previous frames */\n if (fig.imageObj.src) {\n (window.URL || window.webkitURL).revokeObjectURL(\n fig.imageObj.src\n );\n }\n\n fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n img\n );\n fig.updated_canvas_event();\n fig.waiting = false;\n return;\n } else if (\n typeof evt.data === 'string' &&\n evt.data.slice(0, 21) === 'data:image/png;base64'\n ) {\n fig.imageObj.src = evt.data;\n fig.updated_canvas_event();\n fig.waiting = false;\n return;\n }\n\n var msg = JSON.parse(evt.data);\n var msg_type = msg['type'];\n\n // Call the \"handle_{type}\" callback, which takes\n // the figure and JSON message as its only arguments.\n try {\n var callback = fig['handle_' + msg_type];\n } catch (e) {\n console.log(\n \"No handler for the '\" + msg_type + \"' message type: \",\n msg\n );\n return;\n }\n\n if (callback) {\n try {\n // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n callback(fig, msg);\n } catch (e) {\n console.log(\n \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n e,\n e.stack,\n msg\n );\n }\n }\n };\n};\n\n// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\nmpl.findpos = function (e) {\n //this section is from http://www.quirksmode.org/js/events_properties.html\n var targ;\n if (!e) {\n e = window.event;\n }\n if (e.target) {\n targ = e.target;\n } else if (e.srcElement) {\n targ = e.srcElement;\n }\n if (targ.nodeType === 3) {\n // defeat Safari bug\n targ = targ.parentNode;\n }\n\n // pageX,Y are the mouse positions relative to the document\n var boundingRect = targ.getBoundingClientRect();\n var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n var y = e.pageY - (boundingRect.top + document.body.scrollTop);\n\n return { x: x, y: y };\n};\n\n/*\n * return a copy of an object with only non-object keys\n * we need this to avoid circular references\n * http://stackoverflow.com/a/24161582/3208463\n */\nfunction simpleKeys(original) {\n return Object.keys(original).reduce(function (obj, key) {\n if (typeof original[key] !== 'object') {\n obj[key] = original[key];\n }\n return obj;\n }, {});\n}\n\nmpl.figure.prototype.mouse_event = function (event, name) {\n var canvas_pos = mpl.findpos(event);\n\n if (name === 'button_press') {\n this.canvas.focus();\n this.canvas_div.focus();\n }\n\n var x = canvas_pos.x * this.ratio;\n var y = canvas_pos.y * this.ratio;\n\n this.send_message(name, {\n x: x,\n y: y,\n button: event.button,\n step: event.step,\n guiEvent: simpleKeys(event),\n });\n\n /* This prevents the web browser from automatically changing to\n * the text insertion cursor when the button is pressed. We want\n * to control all of the cursor setting manually through the\n * 'cursor' event from matplotlib */\n event.preventDefault();\n return false;\n};\n\nmpl.figure.prototype._key_event_extra = function (_event, _name) {\n // Handle any extra behaviour associated with a key event\n};\n\nmpl.figure.prototype.key_event = function (event, name) {\n // Prevent repeat events\n if (name === 'key_press') {\n if (event.key === this._key) {\n return;\n } else {\n this._key = event.key;\n }\n }\n if (name === 'key_release') {\n this._key = null;\n }\n\n var value = '';\n if (event.ctrlKey && event.key !== 'Control') {\n value += 'ctrl+';\n }\n else if (event.altKey && event.key !== 'Alt') {\n value += 'alt+';\n }\n else if (event.shiftKey && event.key !== 'Shift') {\n value += 'shift+';\n }\n\n value += 'k' + event.key;\n\n this._key_event_extra(event, name);\n\n this.send_message(name, { key: value, guiEvent: simpleKeys(event) });\n return false;\n};\n\nmpl.figure.prototype.toolbar_button_onclick = function (name) {\n if (name === 'download') {\n this.handle_save(this, null);\n } else {\n this.send_message('toolbar_button', { name: name });\n }\n};\n\nmpl.figure.prototype.toolbar_button_onmouseover = function (tooltip) {\n this.message.textContent = tooltip;\n};\n\n///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n// prettier-ignore\nvar _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\nmpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n\nmpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n\nmpl.default_extension = \"png\";/* global mpl */\n\nvar comm_websocket_adapter = function (comm) {\n // Create a \"websocket\"-like object which calls the given IPython comm\n // object with the appropriate methods. Currently this is a non binary\n // socket, so there is still some room for performance tuning.\n var ws = {};\n\n ws.binaryType = comm.kernel.ws.binaryType;\n ws.readyState = comm.kernel.ws.readyState;\n function updateReadyState(_event) {\n if (comm.kernel.ws) {\n ws.readyState = comm.kernel.ws.readyState;\n } else {\n ws.readyState = 3; // Closed state.\n }\n }\n comm.kernel.ws.addEventListener('open', updateReadyState);\n comm.kernel.ws.addEventListener('close', updateReadyState);\n comm.kernel.ws.addEventListener('error', updateReadyState);\n\n ws.close = function () {\n comm.close();\n };\n ws.send = function (m) {\n //console.log('sending', m);\n comm.send(m);\n };\n // Register the callback with on_msg.\n comm.on_msg(function (msg) {\n //console.log('receiving', msg['content']['data'], msg);\n var data = msg['content']['data'];\n if (data['blob'] !== undefined) {\n data = {\n data: new Blob(msg['buffers'], { type: data['blob'] }),\n };\n }\n // Pass the mpl event to the overridden (by mpl) onmessage function.\n ws.onmessage(data);\n });\n return ws;\n};\n\nmpl.mpl_figure_comm = function (comm, msg) {\n // This is the function which gets called when the mpl process\n // starts-up an IPython Comm through the \"matplotlib\" channel.\n\n var id = msg.content.data.id;\n // Get hold of the div created by the display call when the Comm\n // socket was opened in Python.\n var element = document.getElementById(id);\n var ws_proxy = comm_websocket_adapter(comm);\n\n function ondownload(figure, _format) {\n window.open(figure.canvas.toDataURL());\n }\n\n var fig = new mpl.figure(id, ws_proxy, ondownload, element);\n\n // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n // web socket which is closed, not our websocket->open comm proxy.\n ws_proxy.onopen();\n\n fig.parent_element = element;\n fig.cell_info = mpl.find_output_cell(\"
\");\n if (!fig.cell_info) {\n console.error('Failed to find cell for figure', id, fig);\n return;\n }\n fig.cell_info[0].output_area.element.on(\n 'cleared',\n { fig: fig },\n fig._remove_fig_handler\n );\n};\n\nmpl.figure.prototype.handle_close = function (fig, msg) {\n var width = fig.canvas.width / fig.ratio;\n fig.cell_info[0].output_area.element.off(\n 'cleared',\n fig._remove_fig_handler\n );\n fig.resizeObserverInstance.unobserve(fig.canvas_div);\n\n // Update the output cell to use the data from the current canvas.\n fig.push_to_output();\n var dataURL = fig.canvas.toDataURL();\n // Re-enable the keyboard manager in IPython - without this line, in FF,\n // the notebook keyboard shortcuts fail.\n IPython.keyboard_manager.enable();\n fig.parent_element.innerHTML =\n '';\n fig.close_ws(fig, msg);\n};\n\nmpl.figure.prototype.close_ws = function (fig, msg) {\n fig.send_message('closing', msg);\n // fig.ws.close()\n};\n\nmpl.figure.prototype.push_to_output = function (_remove_interactive) {\n // Turn the data on the canvas into data in the output cell.\n var width = this.canvas.width / this.ratio;\n var dataURL = this.canvas.toDataURL();\n this.cell_info[1]['text/html'] =\n '';\n};\n\nmpl.figure.prototype.updated_canvas_event = function () {\n // Tell IPython that the notebook contents must change.\n IPython.notebook.set_dirty(true);\n this.send_message('ack', {});\n var fig = this;\n // Wait a second, then push the new image to the DOM so\n // that it is saved nicely (might be nice to debounce this).\n setTimeout(function () {\n fig.push_to_output();\n }, 1000);\n};\n\nmpl.figure.prototype._init_toolbar = function () {\n var fig = this;\n\n var toolbar = document.createElement('div');\n toolbar.classList = 'btn-toolbar';\n this.root.appendChild(toolbar);\n\n function on_click_closure(name) {\n return function (_event) {\n return fig.toolbar_button_onclick(name);\n };\n }\n\n function on_mouseover_closure(tooltip) {\n return function (event) {\n if (!event.currentTarget.disabled) {\n return fig.toolbar_button_onmouseover(tooltip);\n }\n };\n }\n\n fig.buttons = {};\n var buttonGroup = document.createElement('div');\n buttonGroup.classList = 'btn-group';\n var button;\n for (var toolbar_ind in mpl.toolbar_items) {\n var name = mpl.toolbar_items[toolbar_ind][0];\n var tooltip = mpl.toolbar_items[toolbar_ind][1];\n var image = mpl.toolbar_items[toolbar_ind][2];\n var method_name = mpl.toolbar_items[toolbar_ind][3];\n\n if (!name) {\n /* Instead of a spacer, we start a new button group. */\n if (buttonGroup.hasChildNodes()) {\n toolbar.appendChild(buttonGroup);\n }\n buttonGroup = document.createElement('div');\n buttonGroup.classList = 'btn-group';\n continue;\n }\n\n button = fig.buttons[name] = document.createElement('button');\n button.classList = 'btn btn-default';\n button.href = '#';\n button.title = name;\n button.innerHTML = '';\n button.addEventListener('click', on_click_closure(method_name));\n button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n buttonGroup.appendChild(button);\n }\n\n if (buttonGroup.hasChildNodes()) {\n toolbar.appendChild(buttonGroup);\n }\n\n // Add the status bar.\n var status_bar = document.createElement('span');\n status_bar.classList = 'mpl-message pull-right';\n toolbar.appendChild(status_bar);\n this.message = status_bar;\n\n // Add the close button to the window.\n var buttongrp = document.createElement('div');\n buttongrp.classList = 'btn-group inline pull-right';\n button = document.createElement('button');\n button.classList = 'btn btn-mini btn-primary';\n button.href = '#';\n button.title = 'Stop Interaction';\n button.innerHTML = '';\n button.addEventListener('click', function (_evt) {\n fig.handle_close(fig, {});\n });\n button.addEventListener(\n 'mouseover',\n on_mouseover_closure('Stop Interaction')\n );\n buttongrp.appendChild(button);\n var titlebar = this.root.querySelector('.ui-dialog-titlebar');\n titlebar.insertBefore(buttongrp, titlebar.firstChild);\n};\n\nmpl.figure.prototype._remove_fig_handler = function (event) {\n var fig = event.data.fig;\n if (event.target !== this) {\n // Ignore bubbled events from children.\n return;\n }\n fig.close_ws(fig, {});\n};\n\nmpl.figure.prototype._root_extra_style = function (el) {\n el.style.boxSizing = 'content-box'; // override notebook setting of border-box.\n};\n\nmpl.figure.prototype._canvas_extra_style = function (el) {\n // this is important to make the div 'focusable\n el.setAttribute('tabindex', 0);\n // reach out to IPython and tell the keyboard manager to turn it's self\n // off when our div gets focus\n\n // location in version 3\n if (IPython.notebook.keyboard_manager) {\n IPython.notebook.keyboard_manager.register_events(el);\n } else {\n // location in version 2\n IPython.keyboard_manager.register_events(el);\n }\n};\n\nmpl.figure.prototype._key_event_extra = function (event, _name) {\n var manager = IPython.notebook.keyboard_manager;\n if (!manager) {\n manager = IPython.keyboard_manager;\n }\n\n // Check for shift+enter\n if (event.shiftKey && event.which === 13) {\n this.canvas_div.blur();\n // select the cell after this one\n var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n IPython.notebook.select(index + 1);\n }\n};\n\nmpl.figure.prototype.handle_save = function (fig, _msg) {\n fig.ondownload(fig, null);\n};\n\nmpl.find_output_cell = function (html_output) {\n // Return the cell and output element which can be found *uniquely* in the notebook.\n // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n // IPython event is triggered only after the cells have been serialised, which for\n // our purposes (turning an active figure into a static one), is too late.\n var cells = IPython.notebook.get_cells();\n var ncells = cells.length;\n for (var i = 0; i < ncells; i++) {\n var cell = cells[i];\n if (cell.cell_type === 'code') {\n for (var j = 0; j < cell.output_area.outputs.length; j++) {\n var data = cell.output_area.outputs[j];\n if (data.data) {\n // IPython >= 3 moved mimebundle to data attribute of output\n data = data.data;\n }\n if (data['text/html'] === html_output) {\n return [cell, data, j];\n }\n }\n }\n }\n};\n\n// Register the function which deals with the matplotlib target/channel.\n// The kernel may be null if the page has been refreshed.\nif (IPython.notebook.kernel !== null) {\n IPython.notebook.kernel.comm_manager.register_target(\n 'matplotlib',\n mpl.mpl_figure_comm\n );\n}\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "def cross_ent(prediction, ground_truth):\n", + " t = 1 if ground_truth > 0.5 else 0\n", + " return -t * np.log(prediction) - (1 - t) * np.log(1 - prediction)\n", + "plot_cross_ent()" + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "Cross-entropy loss will be defined again as a separate layer, but `forward` function will have two input values: output of the previous layers of the network `p`, and the expected class `y`:" - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1.429664938969559" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "class CrossEntropyLoss:\r\n", - " def forward(self,p,y):\r\n", - " self.p = p\r\n", - " self.y = y\r\n", - " p_of_y = p[np.arange(len(y)), y]\r\n", - " log_prob = np.log(p_of_y)\r\n", - " return -log_prob.mean() # average over all input samples\r\n", - "\r\n", - "cross_ent_loss = CrossEntropyLoss()\r\n", - "p = softmax.forward(net.forward(train_x[0:10]))\r\n", + "class CrossEntropyLoss:\n", + " def forward(self,p,y):\n", + " self.p = p\n", + " self.y = y\n", + " p_of_y = p[np.arange(len(y)), y]\n", + " log_prob = np.log(p_of_y)\n", + " return -log_prob.mean() # average over all input samples\n", + "\n", + "cross_ent_loss = CrossEntropyLoss()\n", + "p = softmax.forward(net.forward(train_x[0:10]))\n", "cross_ent_loss.forward(p,train_labels[0:10])" - ], - "outputs": [], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ - "> **IMPORTANT**: Loss function returns a number that shows how good (or bad) our network performs. It should return us one number for the whole dataset, or for the minibatch. Thus after calculating cross-entropy loss for each individual component of the input vector, we need to average (or add) all components together - which is done by the call to `.mean()`.\r\n", - "\r\n", - "## Computational Graph\r\n", - "\r\n", - "\r\n", - "\r\n", + "> **IMPORTANT**: Loss function returns a number that shows how good (or bad) our network performs. It should return us one number for the whole dataset, or for the part of the dataset (minibatch). Thus after calculating cross-entropy loss for each individual component of the input vector, we need to average (or add) all components together - which is done by the call to `.mean()`.\n", + "\n", + "## Computational Graph\n", + "\n", + "\n", + "\n", "Up to this moment, we have defined different classes for different layers of the network. Composition of those layers can be represented as **computational graph**. Now we can compute the loss for a given training dataset (or part of it) in the following manner:" - ], - "metadata": { - "slideshow": { - "slide_type": "slide" - } - } + ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1.429664938969559\n" + ] + } + ], "source": [ - "z = net.forward(train_x[0:10])\r\n", - "p = softmax.forward(z)\r\n", - "loss = cross_ent_loss.forward(p,train_labels[0:10])\r\n", + "z = net.forward(train_x[0:10])\n", + "p = softmax.forward(z)\n", + "loss = cross_ent_loss.forward(p,train_labels[0:10])\n", "print(loss)" - ], - "outputs": [], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ - "## Loss Minimization Problem and Network Training\r\n", - "\r\n", - "Once we have defined out network as $f_\\theta$, and given the loss function $\\mathcal{L}(Y,f_\\theta(X))$, we can consider $\\mathcal{L}$ as a function of $\\theta$ under our fixed training dataset: $\\mathcal{L}(\\theta) = \\mathcal{L}(Y,f_\\theta(X))$\r\n", - "\r\n", - "In this case, the network training would be a minimization problem of $\\mathcal{L}$ under argument $\\theta$:\r\n", - "$$\r\n", - "\\theta = \\mathrm{argmin}_{\\theta} \\mathcal{L}(Y,f_\\theta(X))\r\n", - "$$\r\n", - "\r\n", - "There is a well-known method of function optimization called **gradient descent**. The idea is that we can compute a derivative (in multi-dimensional case call **gradient**) of loss function with respect to parameters, and vary parameters in such a way that the error would decrease.\r\n", - "\r\n", - "Gradient descent works as follows:\r\n", - " * Initialize parameters by some random values $w^{(0)}$, $b^{(0)}$\r\n", - " * Repeat the following step many times:\r\n", - "\r\n", - " $$\\begin{align}\r\n", - " W^{(i+1)}&=W^{(i)}-\\eta\\frac{\\partial\\mathcal{L}}{\\partial W}\\\\\r\n", - " b^{(i+1)}&=b^{(i)}-\\eta\\frac{\\partial\\mathcal{L}}{\\partial b}\r\n", - " \\end{align}\r\n", - " $$\r\n", - "\r\n", - "During training, the optimization steps are supposed to be calculated considering the whole dataset (remember that loss is calculated as a sum/average through all training samples). However, in real life we take small portions of the dataset called **minibatches**, and calculate gradients based on a subset of data. Because subset is taken randomly each time, such method is called **stochastic gradient descent** (SGD).\r\n", + "## Loss Minimization Problem and Network Training\n", + "\n", + "Once we have defined out network as $f_\\theta$, and given the loss function $\\mathcal{L}(Y,f_\\theta(X))$, we can consider $\\mathcal{L}$ as a function of $\\theta$ under our fixed training dataset: $\\mathcal{L}(\\theta) = \\mathcal{L}(Y,f_\\theta(X))$\n", + "\n", + "In this case, the network training would be a minimization problem of $\\mathcal{L}$ under argument $\\theta$:\n", + "$$\n", + "\\theta = \\mathrm{argmin}_{\\theta} \\mathcal{L}(Y,f_\\theta(X))\n", + "$$\n", + "\n", + "There is a well-known method of function optimization called **gradient descent**. The idea is that we can compute a derivative (in multi-dimensional case call **gradient**) of loss function with respect to parameters, and vary parameters in such a way that the error would decrease.\n", + "\n", + "Gradient descent works as follows:\n", + " * Initialize parameters by some random values $w^{(0)}$, $b^{(0)}$\n", + " * Repeat the following step many times:\n", + "\n", + " $$\\begin{align}\n", + " W^{(i+1)}&=W^{(i)}-\\eta\\frac{\\partial\\mathcal{L}}{\\partial W}\\\\\n", + " b^{(i+1)}&=b^{(i)}-\\eta\\frac{\\partial\\mathcal{L}}{\\partial b}\n", + " \\end{align}\n", + " $$\n", + "\n", + "During training, the optimization steps are supposed to be calculated considering the whole dataset (remember that loss is calculated as a sum/average through all training samples). However, in real life we take small portions of the dataset called **minibatches**, and calculate gradients based on a subset of data. Because subset is taken randomly each time, such method is called **stochastic gradient descent** (SGD).\n", " " - ], + ] + }, + { + "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } - } - }, - { - "cell_type": "markdown", + }, "source": [ - "## Backward Propagation\r\n", - "\r\n", - "\r\n", - "\r\n", - "$$\\def\\L{\\mathcal{L}}\\def\\zz#1#2{\\frac{\\partial#1}{\\partial#2}}\r\n", - "\\begin{align}\r\n", - "\\zz{\\L}{W} =& \\zz{\\L}{p}\\zz{p}{z}\\zz{z}{W}\\cr\r\n", - "\\zz{\\L}{b} =& \\zz{\\L}{p}\\zz{p}{z}\\zz{z}{b}\r\n", - "\\end{align}\r\n", + "## Backward Propagation\n", + "\n", + "\n", + "\n", + "$$\\def\\L{\\mathcal{L}}\\def\\zz#1#2{\\frac{\\partial#1}{\\partial#2}}\n", + "\\begin{align}\n", + "\\zz{\\L}{W} =& \\zz{\\L}{p}\\zz{p}{z}\\zz{z}{W}\\cr\n", + "\\zz{\\L}{b} =& \\zz{\\L}{p}\\zz{p}{z}\\zz{z}{b}\n", + "\\end{align}\n", "$$" - ], + ] + }, + { + "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } - } - }, - { - "cell_type": "markdown", + }, "source": [ - "To compute $\\partial\\mathcal{L}/\\partial W$ we can use the **chaining rule** for computing derivatives of a composite function, as you can see in the formulae above. It corresponds to the following idea:\r\n", - "\r\n", - "* Suppose under given input we have obtanes loss $\\Delta\\mathcal{L}$\r\n", - "* To minimize it, we would have to adjust softmax output $p$ by value $\\Delta p = (\\partial\\mathcal{L}/\\partial p)\\Delta\\mathcal{L}$ \r\n", - "* This corresponds to the changes to node $z$ by $\\Delta z = (\\partial\\mathcal{p}/\\partial z)\\Delta p$\r\n", - "* To minimize this error, we need to adjust parameters accordingly: $\\Delta W = (\\partial\\mathcal{z}/\\partial W)\\Delta z$ (and the same for $b$)\r\n", - "\r\n", - "\r\n", - "\r\n", - "This process starts distributing the loss error from the output of the network back to its parameters. Thus the process is called **back propagation**.\r\n", - "\r\n", - "One pass of the network training consists of two parts:\r\n", - "* **Forward pass**, when we calculate the value of loss function for a given input minibatch\r\n", + "To compute $\\partial\\mathcal{L}/\\partial W$ we can use the **chaining rule** for computing derivatives of a composite function, as you can see in the formulae above. It corresponds to the following idea:\n", + "\n", + "* Suppose under given input we have obtanes loss $\\Delta\\mathcal{L}$\n", + "* To minimize it, we would have to adjust softmax output $p$ by value $\\Delta p = (\\partial\\mathcal{L}/\\partial p)\\Delta\\mathcal{L}$ \n", + "* This corresponds to the changes to node $z$ by $\\Delta z = (\\partial\\mathcal{p}/\\partial z)\\Delta p$\n", + "* To minimize this error, we need to adjust parameters accordingly: $\\Delta W = (\\partial\\mathcal{z}/\\partial W)\\Delta z$ (and the same for $b$)\n", + "\n", + "\n", + "\n", + "This process starts distributing the loss error from the output of the network back to its parameters. Thus the process is called **back propagation**.\n", + "\n", + "One pass of the network training consists of two parts:\n", + "* **Forward pass**, when we calculate the value of loss function for a given input minibatch\n", "* **Backward pass**, when we try to minimize this error by distributing it back to the model parameters through the computational graph." - ], - "metadata": { - "slideshow": { - "slide_type": "slide" - } - } + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ - "### Implementation of Back Propagation\r\n", - "\r\n", - "* Let's add `backward` function to each of our nodes that will compute the derivative and propagate the error during the backward pass.\r\n", - "* We also need to implement parameter updates according to the procedure described above\r\n", - "\r\n", - "We need to compute derivatives for each layer manually, for example for linear layer $z = x\\times W+b$:\r\n", - "$$\\begin{align}\r\n", - "\\frac{\\partial z}{\\partial W} &= x \\\\\r\n", - "\\frac{\\partial z}{\\partial b} &= 1 \\\\\r\n", - "\\end{align}$$\r\n", - "\r\n", - "If we need to compensate for the error $\\Delta z$ at the output of the layer, we need to update the weights accordingly:\r\n", - "$$\\begin{align}\r\n", - "\\Delta x &= \\Delta z \\times W \\\\\r\n", - "\\Delta W &= \\frac{\\partial z}{\\partial W} \\Delta z = \\Delta z \\times x \\\\\r\n", - "\\Delta b &= \\frac{\\partial z}{\\partial b} \\Delta z = \\Delta z \\\\\r\n", - "\\end{align}$$\r\n", - "\r\n", + "### Implementation of Back Propagation\n", + "\n", + "* Let's add `backward` function to each of our nodes that will compute the derivative and propagate the error during the backward pass.\n", + "* We also need to implement parameter updates according to the procedure described above\n", + "\n", + "We need to compute derivatives for each layer manually, for example for linear layer $z = x\\times W+b$:\n", + "$$\\begin{align}\n", + "\\frac{\\partial z}{\\partial W} &= x \\\\\n", + "\\frac{\\partial z}{\\partial b} &= 1 \\\\\n", + "\\end{align}$$\n", + "\n", + "If we need to compensate for the error $\\Delta z$ at the output of the layer, we need to update the weights accordingly:\n", + "$$\\begin{align}\n", + "\\Delta x &= \\Delta z \\times W \\\\\n", + "\\Delta W &= \\frac{\\partial z}{\\partial W} \\Delta z = \\Delta z \\times x \\\\\n", + "\\Delta b &= \\frac{\\partial z}{\\partial b} \\Delta z = \\Delta z \\\\\n", + "\\end{align}$$\n", + "\n", "**IMPORTANT:** Calculations are done not for each training sample independently, but rather for a whole **minibatch**. Required parameter updates $\\Delta W$ and $\\Delta b$ are computed across the whole minibatch, and the respective vectors have dimensions: $x\\in\\mathbb{R}^{\\mathrm{minibatch}\\, \\times\\, \\mathrm{nclass}}$" - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": null, - "source": [ - "class Linear:\r\n", - " def __init__(self,nin,nout):\r\n", - " self.W = np.random.normal(0, 1.0/np.sqrt(nin), (nout, nin))\r\n", - " self.b = np.zeros((1,nout))\r\n", - " self.dW = np.zeros_like(self.W)\r\n", - " self.db = np.zeros_like(self.b)\r\n", - " \r\n", - " def forward(self, x):\r\n", - " self.x=x\r\n", - " return np.dot(x, self.W.T) + self.b\r\n", - " \r\n", - " def backward(self, dz):\r\n", - " dx = np.dot(dz, self.W)\r\n", - " dW = np.dot(dz.T, self.x)\r\n", - " db = dz.sum(axis=0)\r\n", - " self.dW = dW\r\n", - " self.db = db\r\n", - " return dx\r\n", - " \r\n", - " def update(self,lr):\r\n", - " self.W -= lr*self.dW\r\n", - " self.b -= lr*self.db" - ], + "execution_count": 29, + "metadata": {}, "outputs": [], - "metadata": {} + "source": [ + "class Linear:\n", + " def __init__(self,nin,nout):\n", + " self.W = np.random.normal(0, 1.0/np.sqrt(nin), (nout, nin))\n", + " self.b = np.zeros((1,nout))\n", + " self.dW = np.zeros_like(self.W)\n", + " self.db = np.zeros_like(self.b)\n", + " \n", + " def forward(self, x):\n", + " self.x=x\n", + " return np.dot(x, self.W.T) + self.b\n", + " \n", + " def backward(self, dz):\n", + " dx = np.dot(dz, self.W)\n", + " dW = np.dot(dz.T, self.x)\n", + " db = dz.sum(axis=0)\n", + " self.dW = dW\n", + " self.db = db\n", + " return dx\n", + " \n", + " def update(self,lr):\n", + " self.W -= lr*self.dW\n", + " self.b -= lr*self.db" + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "In the same manner we can define `backward` function for the rest of our layers:" - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 30, + "metadata": {}, + "outputs": [], "source": [ - "class Softmax:\r\n", - " def forward(self,z):\r\n", - " self.z = z\r\n", - " zmax = z.max(axis=1,keepdims=True)\r\n", - " expz = np.exp(z-zmax)\r\n", - " Z = expz.sum(axis=1,keepdims=True)\r\n", - " return expz / Z\r\n", - " def backward(self,dp):\r\n", - " p = self.forward(self.z)\r\n", - " pdp = p * dp\r\n", - " return pdp - p * pdp.sum(axis=1, keepdims=True)\r\n", - " \r\n", - "class CrossEntropyLoss:\r\n", - " def forward(self,p,y):\r\n", - " self.p = p\r\n", - " self.y = y\r\n", - " p_of_y = p[np.arange(len(y)), y]\r\n", - " log_prob = np.log(p_of_y)\r\n", - " return -log_prob.mean()\r\n", - " def backward(self,loss):\r\n", - " dlog_softmax = np.zeros_like(self.p)\r\n", - " dlog_softmax[np.arange(len(self.y)), self.y] -= 1.0/len(self.y)\r\n", + "class Softmax:\n", + " def forward(self,z):\n", + " self.z = z\n", + " zmax = z.max(axis=1,keepdims=True)\n", + " expz = np.exp(z-zmax)\n", + " Z = expz.sum(axis=1,keepdims=True)\n", + " return expz / Z\n", + " def backward(self,dp):\n", + " p = self.forward(self.z)\n", + " pdp = p * dp\n", + " return pdp - p * pdp.sum(axis=1, keepdims=True)\n", + " \n", + "class CrossEntropyLoss:\n", + " def forward(self,p,y):\n", + " self.p = p\n", + " self.y = y\n", + " p_of_y = p[np.arange(len(y)), y]\n", + " log_prob = np.log(p_of_y)\n", + " return -log_prob.mean()\n", + " def backward(self,loss):\n", + " dlog_softmax = np.zeros_like(self.p)\n", + " dlog_softmax[np.arange(len(self.y)), self.y] -= 1.0/len(self.y)\n", " return dlog_softmax / self.p" - ], - "outputs": [], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ - "## Training the Model\r\n", - "\r\n", + "## Training the Model\n", + "\n", "Now we are ready to write the **training loop**, which will go through our dataset, and perform the optimization minibatch by minibatch.One complete pass through the dataset is often called **an epoch**:" - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": null, - "source": [ - "lin = Linear(2,2)\r\n", - "softmax = Softmax()\r\n", - "cross_ent_loss = CrossEntropyLoss()\r\n", - "\r\n", - "learning_rate = 0.1\r\n", - "\r\n", - "pred = np.argmax(lin.forward(train_x),axis=1)\r\n", - "acc = (pred==train_labels).mean()\r\n", - "print(\"Initial accuracy: \",acc)\r\n", - "\r\n", - "batch_size=4\r\n", - "for i in range(0,len(train_x),batch_size):\r\n", - " xb = train_x[i:i+batch_size]\r\n", - " yb = train_labels[i:i+batch_size]\r\n", - " \r\n", - " # forward pass\r\n", - " z = lin.forward(xb)\r\n", - " p = softmax.forward(z)\r\n", - " loss = cross_ent_loss.forward(p,yb)\r\n", - " \r\n", - " # backward pass\r\n", - " dp = cross_ent_loss.backward(loss)\r\n", - " dz = softmax.backward(dp)\r\n", - " dx = lin.backward(dz)\r\n", - " lin.update(learning_rate)\r\n", - " \r\n", - "pred = np.argmax(lin.forward(train_x),axis=1)\r\n", - "acc = (pred==train_labels).mean()\r\n", - "print(\"Final accuracy: \",acc)\r\n", - " " + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Initial accuracy: 0.725\n", + "Final accuracy: 0.825\n" + ] + } ], - "outputs": [], - "metadata": {} + "source": [ + "lin = Linear(2,2)\n", + "softmax = Softmax()\n", + "cross_ent_loss = CrossEntropyLoss()\n", + "\n", + "learning_rate = 0.1\n", + "\n", + "pred = np.argmax(lin.forward(train_x),axis=1)\n", + "acc = (pred==train_labels).mean()\n", + "print(\"Initial accuracy: \",acc)\n", + "\n", + "batch_size=4\n", + "for i in range(0,len(train_x),batch_size):\n", + " xb = train_x[i:i+batch_size]\n", + " yb = train_labels[i:i+batch_size]\n", + " \n", + " # forward pass\n", + " z = lin.forward(xb)\n", + " p = softmax.forward(z)\n", + " loss = cross_ent_loss.forward(p,yb)\n", + " \n", + " # backward pass\n", + " dp = cross_ent_loss.backward(loss)\n", + " dz = softmax.backward(dp)\n", + " dx = lin.backward(dz)\n", + " lin.update(learning_rate)\n", + " \n", + "pred = np.argmax(lin.forward(train_x),axis=1)\n", + "acc = (pred==train_labels).mean()\n", + "print(\"Final accuracy: \",acc)\n", + " " + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ - "Nice to see how we can increase accuracy of the model from about 50% to around 80% in one epoch.\r\n", - "\r\n", - "## Network Class\r\n", - "\r\n", + "Nice to see how we can increase accuracy of the model from about 50% to around 80% in one epoch.\n", + "\n", + "## Network Class\n", + "\n", "Since in many cases neural network is just a composition of layers, we can build a class that will allow us to stack layers together and make forward and backward passes through them without explicitly programming that logic. We will store the list of layers inside the `Net` class, and use `add()` function to add new layers:" - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": null, - "source": [ - "class Net:\r\n", - " def __init__(self):\r\n", - " self.layers = []\r\n", - " \r\n", - " def add(self,l):\r\n", - " self.layers.append(l)\r\n", - " \r\n", - " def forward(self,x):\r\n", - " for l in self.layers:\r\n", - " x = l.forward(x)\r\n", - " return x\r\n", - " \r\n", - " def backward(self,z):\r\n", - " for l in self.layers[::-1]:\r\n", - " z = l.backward(z)\r\n", - " return z\r\n", - " \r\n", - " def update(self,lr):\r\n", - " for l in self.layers:\r\n", - " if 'update' in l.__dir__():\r\n", - " l.update(lr)" - ], - "outputs": [], + "execution_count": 32, "metadata": { "scrolled": true, "slideshow": { "slide_type": "skip" } - } + }, + "outputs": [], + "source": [ + "class Net:\n", + " def __init__(self):\n", + " self.layers = []\n", + " \n", + " def add(self,l):\n", + " self.layers.append(l)\n", + " \n", + " def forward(self,x):\n", + " for l in self.layers:\n", + " x = l.forward(x)\n", + " return x\n", + " \n", + " def backward(self,z):\n", + " for l in self.layers[::-1]:\n", + " z = l.backward(z)\n", + " return z\n", + " \n", + " def update(self,lr):\n", + " for l in self.layers:\n", + " if 'update' in l.__dir__():\n", + " l.update(lr)" + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "With this `Net` class our model definition and training becomes more neat:" - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Initial loss=0.6212072429381601, accuracy=0.6875: \n", + "Final loss=0.44369925927417986, accuracy=0.8: \n", + "Test loss=0.4767711377257787, accuracy=0.85: \n" + ] + } + ], "source": [ - "net = Net()\r\n", - "net.add(Linear(2,2))\r\n", - "net.add(Softmax())\r\n", - "loss = CrossEntropyLoss()\r\n", - "\r\n", - "def get_loss_acc(x,y,loss=CrossEntropyLoss()):\r\n", - " p = net.forward(x)\r\n", - " l = loss.forward(p,y)\r\n", - " pred = np.argmax(p,axis=1)\r\n", - " acc = (pred==y).mean()\r\n", - " return l,acc\r\n", - "\r\n", - "print(\"Initial loss={}, accuracy={}: \".format(*get_loss_acc(train_x,train_labels)))\r\n", - "\r\n", - "def train_epoch(net, train_x, train_labels, loss=CrossEntropyLoss(), batch_size=4, lr=0.1):\r\n", - " for i in range(0,len(train_x),batch_size):\r\n", - " xb = train_x[i:i+batch_size]\r\n", - " yb = train_labels[i:i+batch_size]\r\n", - "\r\n", - " p = net.forward(xb)\r\n", - " l = loss.forward(p,yb)\r\n", - " dp = loss.backward(l)\r\n", - " dx = net.backward(dp)\r\n", - " net.update(lr)\r\n", - " \r\n", - "train_epoch(net,train_x,train_labels)\r\n", - " \r\n", - "print(\"Final loss={}, accuracy={}: \".format(*get_loss_acc(train_x,train_labels)))\r\n", + "net = Net()\n", + "net.add(Linear(2,2))\n", + "net.add(Softmax())\n", + "loss = CrossEntropyLoss()\n", + "\n", + "def get_loss_acc(x,y,loss=CrossEntropyLoss()):\n", + " p = net.forward(x)\n", + " l = loss.forward(p,y)\n", + " pred = np.argmax(p,axis=1)\n", + " acc = (pred==y).mean()\n", + " return l,acc\n", + "\n", + "print(\"Initial loss={}, accuracy={}: \".format(*get_loss_acc(train_x,train_labels)))\n", + "\n", + "def train_epoch(net, train_x, train_labels, loss=CrossEntropyLoss(), batch_size=4, lr=0.1):\n", + " for i in range(0,len(train_x),batch_size):\n", + " xb = train_x[i:i+batch_size]\n", + " yb = train_labels[i:i+batch_size]\n", + "\n", + " p = net.forward(xb)\n", + " l = loss.forward(p,yb)\n", + " dp = loss.backward(l)\n", + " dx = net.backward(dp)\n", + " net.update(lr)\n", + " \n", + "train_epoch(net,train_x,train_labels)\n", + " \n", + "print(\"Final loss={}, accuracy={}: \".format(*get_loss_acc(train_x,train_labels)))\n", "print(\"Test loss={}, accuracy={}: \".format(*get_loss_acc(test_x,test_labels)))" - ], - "outputs": [], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ - "## Plotting the Training Process\r\n", - "\r\n", - "It would be nice to see visually how the network is being trained! We will define a `train_and_plot` function for that. To visualize the state of the network we will use level map, i.e. we will represent different values of the network output using different colors.\r\n", - "\r\n", + "## Plotting the Training Process\n", + "\n", + "It would be nice to see visually how the network is being trained! We will define a `train_and_plot` function for that. To visualize the state of the network we will use level map, i.e. we will represent different values of the network output using different colors.\n", + "\n", "> Do not worry if you do not understand some of the plotting code below - it is more important to understand the underlying neural network concepts." - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 34, + "metadata": { + "slideshow": { + "slide_type": "skip" + } + }, + "outputs": [], "source": [ - "def train_and_plot(n_epoch, net, loss=CrossEntropyLoss(), batch_size=4, lr=0.1):\r\n", - " fig, ax = plt.subplots(2, 1)\r\n", - " ax[0].set_xlim(0, n_epoch + 1)\r\n", - " ax[0].set_ylim(0,1)\r\n", - "\r\n", - " train_acc = np.empty((n_epoch, 3))\r\n", - " train_acc[:] = np.NAN\r\n", - " valid_acc = np.empty((n_epoch, 3))\r\n", - " valid_acc[:] = np.NAN\r\n", - "\r\n", - " for epoch in range(1, n_epoch + 1):\r\n", - "\r\n", - " train_epoch(net,train_x,train_labels,loss,batch_size,lr)\r\n", - " tloss, taccuracy = get_loss_acc(train_x,train_labels,loss)\r\n", - " train_acc[epoch-1, :] = [epoch, tloss, taccuracy]\r\n", - " vloss, vaccuracy = get_loss_acc(test_x,test_labels,loss)\r\n", - " valid_acc[epoch-1, :] = [epoch, vloss, vaccuracy]\r\n", - " \r\n", - " ax[0].set_ylim(0, max(max(train_acc[:, 2]), max(valid_acc[:, 2])) * 1.1)\r\n", - "\r\n", - " plot_training_progress(train_acc[:, 0], (train_acc[:, 2],\r\n", - " valid_acc[:, 2]), fig, ax[0])\r\n", - " plot_decision_boundary(net, fig, ax[1])\r\n", - " fig.canvas.draw()\r\n", - " fig.canvas.flush_events()\r\n", - "\r\n", + "def train_and_plot(n_epoch, net, loss=CrossEntropyLoss(), batch_size=4, lr=0.1):\n", + " fig, ax = plt.subplots(2, 1)\n", + " ax[0].set_xlim(0, n_epoch + 1)\n", + " ax[0].set_ylim(0,1)\n", + "\n", + " train_acc = np.empty((n_epoch, 3))\n", + " train_acc[:] = np.NAN\n", + " valid_acc = np.empty((n_epoch, 3))\n", + " valid_acc[:] = np.NAN\n", + "\n", + " for epoch in range(1, n_epoch + 1):\n", + "\n", + " train_epoch(net,train_x,train_labels,loss,batch_size,lr)\n", + " tloss, taccuracy = get_loss_acc(train_x,train_labels,loss)\n", + " train_acc[epoch-1, :] = [epoch, tloss, taccuracy]\n", + " vloss, vaccuracy = get_loss_acc(test_x,test_labels,loss)\n", + " valid_acc[epoch-1, :] = [epoch, vloss, vaccuracy]\n", + " \n", + " ax[0].set_ylim(0, max(max(train_acc[:, 2]), max(valid_acc[:, 2])) * 1.1)\n", + "\n", + " plot_training_progress(train_acc[:, 0], (train_acc[:, 2],\n", + " valid_acc[:, 2]), fig, ax[0])\n", + " plot_decision_boundary(net, fig, ax[1])\n", + " fig.canvas.draw()\n", + " fig.canvas.flush_events()\n", + "\n", " return train_acc, valid_acc" - ], - "outputs": [], + ] + }, + { + "cell_type": "code", + "execution_count": 35, "metadata": { "slideshow": { "slide_type": "skip" } - } - }, - { - "cell_type": "code", - "execution_count": null, + }, + "outputs": [], "source": [ - "import matplotlib.cm as cm\r\n", - "\r\n", - "def plot_decision_boundary(net, fig, ax):\r\n", - " draw_colorbar = True\r\n", - " # remove previous plot\r\n", - " while ax.collections:\r\n", - " ax.collections.pop()\r\n", - " draw_colorbar = False\r\n", - "\r\n", - " # generate countour grid\r\n", - " x_min, x_max = train_x[:, 0].min() - 1, train_x[:, 0].max() + 1\r\n", - " y_min, y_max = train_x[:, 1].min() - 1, train_x[:, 1].max() + 1\r\n", - " xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.1),\r\n", - " np.arange(y_min, y_max, 0.1))\r\n", - " grid_points = np.c_[xx.ravel().astype('float32'), yy.ravel().astype('float32')]\r\n", - " n_classes = max(train_labels)+1\r\n", - " while train_x.shape[1] > grid_points.shape[1]:\r\n", - " # pad dimensions (plot only the first two)\r\n", - " grid_points = np.c_[grid_points,\r\n", - " np.empty(len(xx.ravel())).astype('float32')]\r\n", - " grid_points[:, -1].fill(train_x[:, grid_points.shape[1]-1].mean())\r\n", - "\r\n", - " # evaluate predictions\r\n", - " prediction = np.array(net.forward(grid_points))\r\n", - " # for two classes: prediction difference\r\n", - " if (n_classes == 2):\r\n", - " Z = np.array([0.5+(p[0]-p[1])/2.0 for p in prediction]).reshape(xx.shape)\r\n", - " else:\r\n", - " Z = np.array([p.argsort()[-1]/float(n_classes-1) for p in prediction]).reshape(xx.shape)\r\n", - " \r\n", - " # draw contour\r\n", - " levels = np.linspace(0, 1, 40)\r\n", - " cs = ax.contourf(xx, yy, Z, alpha=0.4, levels = levels)\r\n", - " if draw_colorbar:\r\n", - " fig.colorbar(cs, ax=ax, ticks = [0, 0.5, 1])\r\n", - " c_map = [cm.jet(x) for x in np.linspace(0.0, 1.0, n_classes) ]\r\n", - " colors = [c_map[l] for l in train_labels]\r\n", + "import matplotlib.cm as cm\n", + "\n", + "def plot_decision_boundary(net, fig, ax):\n", + " draw_colorbar = True\n", + " # remove previous plot\n", + " while ax.collections:\n", + " ax.collections.pop()\n", + " draw_colorbar = False\n", + "\n", + " # generate countour grid\n", + " x_min, x_max = train_x[:, 0].min() - 1, train_x[:, 0].max() + 1\n", + " y_min, y_max = train_x[:, 1].min() - 1, train_x[:, 1].max() + 1\n", + " xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.1),\n", + " np.arange(y_min, y_max, 0.1))\n", + " grid_points = np.c_[xx.ravel().astype('float32'), yy.ravel().astype('float32')]\n", + " n_classes = max(train_labels)+1\n", + " while train_x.shape[1] > grid_points.shape[1]:\n", + " # pad dimensions (plot only the first two)\n", + " grid_points = np.c_[grid_points,\n", + " np.empty(len(xx.ravel())).astype('float32')]\n", + " grid_points[:, -1].fill(train_x[:, grid_points.shape[1]-1].mean())\n", + "\n", + " # evaluate predictions\n", + " prediction = np.array(net.forward(grid_points))\n", + " # for two classes: prediction difference\n", + " if (n_classes == 2):\n", + " Z = np.array([0.5+(p[0]-p[1])/2.0 for p in prediction]).reshape(xx.shape)\n", + " else:\n", + " Z = np.array([p.argsort()[-1]/float(n_classes-1) for p in prediction]).reshape(xx.shape)\n", + " \n", + " # draw contour\n", + " levels = np.linspace(0, 1, 40)\n", + " cs = ax.contourf(xx, yy, Z, alpha=0.4, levels = levels)\n", + " if draw_colorbar:\n", + " fig.colorbar(cs, ax=ax, ticks = [0, 0.5, 1])\n", + " c_map = [cm.jet(x) for x in np.linspace(0.0, 1.0, n_classes) ]\n", + " colors = [c_map[l] for l in train_labels]\n", " ax.scatter(train_x[:, 0], train_x[:, 1], marker='o', c=colors, s=60, alpha = 0.5)" - ], - "outputs": [], + ] + }, + { + "cell_type": "code", + "execution_count": 36, "metadata": { "slideshow": { "slide_type": "skip" } - } - }, - { - "cell_type": "code", - "execution_count": null, + }, + "outputs": [], "source": [ - "def plot_training_progress(x, y_data, fig, ax):\r\n", - " styles = ['k--', 'g-']\r\n", - " # remove previous plot\r\n", - " while ax.lines:\r\n", - " ax.lines.pop()\r\n", - " # draw updated lines\r\n", - " for i in range(len(y_data)):\r\n", - " ax.plot(x, y_data[i], styles[i])\r\n", - " ax.legend(ax.lines, ['training accuracy', 'validation accuracy'],\r\n", + "def plot_training_progress(x, y_data, fig, ax):\n", + " styles = ['k--', 'g-']\n", + " # remove previous plot\n", + " while ax.lines:\n", + " ax.lines.pop()\n", + " # draw updated lines\n", + " for i in range(len(y_data)):\n", + " ax.plot(x, y_data[i], styles[i])\n", + " ax.legend(ax.lines, ['training accuracy', 'validation accuracy'],\n", " loc='upper center', ncol = 2)" - ], - "outputs": [], - "metadata": { - "slideshow": { - "slide_type": "skip" - } - } + ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 37, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "data": { + "application/javascript": "/* Put everything inside the global mpl namespace */\n/* global mpl */\nwindow.mpl = {};\n\nmpl.get_websocket_type = function () {\n if (typeof WebSocket !== 'undefined') {\n return WebSocket;\n } else if (typeof MozWebSocket !== 'undefined') {\n return MozWebSocket;\n } else {\n alert(\n 'Your browser does not have WebSocket support. ' +\n 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n 'Firefox 4 and 5 are also supported but you ' +\n 'have to enable WebSockets in about:config.'\n );\n }\n};\n\nmpl.figure = function (figure_id, websocket, ondownload, parent_element) {\n this.id = figure_id;\n\n this.ws = websocket;\n\n this.supports_binary = this.ws.binaryType !== undefined;\n\n if (!this.supports_binary) {\n var warnings = document.getElementById('mpl-warnings');\n if (warnings) {\n warnings.style.display = 'block';\n warnings.textContent =\n 'This browser does not support binary websocket messages. ' +\n 'Performance may be slow.';\n }\n }\n\n this.imageObj = new Image();\n\n this.context = undefined;\n this.message = undefined;\n this.canvas = undefined;\n this.rubberband_canvas = undefined;\n this.rubberband_context = undefined;\n this.format_dropdown = undefined;\n\n this.image_mode = 'full';\n\n this.root = document.createElement('div');\n this.root.setAttribute('style', 'display: inline-block');\n this._root_extra_style(this.root);\n\n parent_element.appendChild(this.root);\n\n this._init_header(this);\n this._init_canvas(this);\n this._init_toolbar(this);\n\n var fig = this;\n\n this.waiting = false;\n\n this.ws.onopen = function () {\n fig.send_message('supports_binary', { value: fig.supports_binary });\n fig.send_message('send_image_mode', {});\n if (fig.ratio !== 1) {\n fig.send_message('set_dpi_ratio', { dpi_ratio: fig.ratio });\n }\n fig.send_message('refresh', {});\n };\n\n this.imageObj.onload = function () {\n if (fig.image_mode === 'full') {\n // Full images could contain transparency (where diff images\n // almost always do), so we need to clear the canvas so that\n // there is no ghosting.\n fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n }\n fig.context.drawImage(fig.imageObj, 0, 0);\n };\n\n this.imageObj.onunload = function () {\n fig.ws.close();\n };\n\n this.ws.onmessage = this._make_on_message_function(this);\n\n this.ondownload = ondownload;\n};\n\nmpl.figure.prototype._init_header = function () {\n var titlebar = document.createElement('div');\n titlebar.classList =\n 'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n var titletext = document.createElement('div');\n titletext.classList = 'ui-dialog-title';\n titletext.setAttribute(\n 'style',\n 'width: 100%; text-align: center; padding: 3px;'\n );\n titlebar.appendChild(titletext);\n this.root.appendChild(titlebar);\n this.header = titletext;\n};\n\nmpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n\nmpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n\nmpl.figure.prototype._init_canvas = function () {\n var fig = this;\n\n var canvas_div = (this.canvas_div = document.createElement('div'));\n canvas_div.setAttribute(\n 'style',\n 'border: 1px solid #ddd;' +\n 'box-sizing: content-box;' +\n 'clear: both;' +\n 'min-height: 1px;' +\n 'min-width: 1px;' +\n 'outline: 0;' +\n 'overflow: hidden;' +\n 'position: relative;' +\n 'resize: both;'\n );\n\n function on_keyboard_event_closure(name) {\n return function (event) {\n return fig.key_event(event, name);\n };\n }\n\n canvas_div.addEventListener(\n 'keydown',\n on_keyboard_event_closure('key_press')\n );\n canvas_div.addEventListener(\n 'keyup',\n on_keyboard_event_closure('key_release')\n );\n\n this._canvas_extra_style(canvas_div);\n this.root.appendChild(canvas_div);\n\n var canvas = (this.canvas = document.createElement('canvas'));\n canvas.classList.add('mpl-canvas');\n canvas.setAttribute('style', 'box-sizing: content-box;');\n\n this.context = canvas.getContext('2d');\n\n var backingStore =\n this.context.backingStorePixelRatio ||\n this.context.webkitBackingStorePixelRatio ||\n this.context.mozBackingStorePixelRatio ||\n this.context.msBackingStorePixelRatio ||\n this.context.oBackingStorePixelRatio ||\n this.context.backingStorePixelRatio ||\n 1;\n\n this.ratio = (window.devicePixelRatio || 1) / backingStore;\n\n var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n 'canvas'\n ));\n rubberband_canvas.setAttribute(\n 'style',\n 'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n );\n\n // Apply a ponyfill if ResizeObserver is not implemented by browser.\n if (this.ResizeObserver === undefined) {\n if (window.ResizeObserver !== undefined) {\n this.ResizeObserver = window.ResizeObserver;\n } else {\n var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n this.ResizeObserver = obs.ResizeObserver;\n }\n }\n\n this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n var nentries = entries.length;\n for (var i = 0; i < nentries; i++) {\n var entry = entries[i];\n var width, height;\n if (entry.contentBoxSize) {\n if (entry.contentBoxSize instanceof Array) {\n // Chrome 84 implements new version of spec.\n width = entry.contentBoxSize[0].inlineSize;\n height = entry.contentBoxSize[0].blockSize;\n } else {\n // Firefox implements old version of spec.\n width = entry.contentBoxSize.inlineSize;\n height = entry.contentBoxSize.blockSize;\n }\n } else {\n // Chrome <84 implements even older version of spec.\n width = entry.contentRect.width;\n height = entry.contentRect.height;\n }\n\n // Keep the size of the canvas and rubber band canvas in sync with\n // the canvas container.\n if (entry.devicePixelContentBoxSize) {\n // Chrome 84 implements new version of spec.\n canvas.setAttribute(\n 'width',\n entry.devicePixelContentBoxSize[0].inlineSize\n );\n canvas.setAttribute(\n 'height',\n entry.devicePixelContentBoxSize[0].blockSize\n );\n } else {\n canvas.setAttribute('width', width * fig.ratio);\n canvas.setAttribute('height', height * fig.ratio);\n }\n canvas.setAttribute(\n 'style',\n 'width: ' + width + 'px; height: ' + height + 'px;'\n );\n\n rubberband_canvas.setAttribute('width', width);\n rubberband_canvas.setAttribute('height', height);\n\n // And update the size in Python. We ignore the initial 0/0 size\n // that occurs as the element is placed into the DOM, which should\n // otherwise not happen due to the minimum size styling.\n if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n fig.request_resize(width, height);\n }\n }\n });\n this.resizeObserverInstance.observe(canvas_div);\n\n function on_mouse_event_closure(name) {\n return function (event) {\n return fig.mouse_event(event, name);\n };\n }\n\n rubberband_canvas.addEventListener(\n 'mousedown',\n on_mouse_event_closure('button_press')\n );\n rubberband_canvas.addEventListener(\n 'mouseup',\n on_mouse_event_closure('button_release')\n );\n rubberband_canvas.addEventListener(\n 'dblclick',\n on_mouse_event_closure('dblclick')\n );\n // Throttle sequential mouse events to 1 every 20ms.\n rubberband_canvas.addEventListener(\n 'mousemove',\n on_mouse_event_closure('motion_notify')\n );\n\n rubberband_canvas.addEventListener(\n 'mouseenter',\n on_mouse_event_closure('figure_enter')\n );\n rubberband_canvas.addEventListener(\n 'mouseleave',\n on_mouse_event_closure('figure_leave')\n );\n\n canvas_div.addEventListener('wheel', function (event) {\n if (event.deltaY < 0) {\n event.step = 1;\n } else {\n event.step = -1;\n }\n on_mouse_event_closure('scroll')(event);\n });\n\n canvas_div.appendChild(canvas);\n canvas_div.appendChild(rubberband_canvas);\n\n this.rubberband_context = rubberband_canvas.getContext('2d');\n this.rubberband_context.strokeStyle = '#000000';\n\n this._resize_canvas = function (width, height, forward) {\n if (forward) {\n canvas_div.style.width = width + 'px';\n canvas_div.style.height = height + 'px';\n }\n };\n\n // Disable right mouse context menu.\n this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n event.preventDefault();\n return false;\n });\n\n function set_focus() {\n canvas.focus();\n canvas_div.focus();\n }\n\n window.setTimeout(set_focus, 100);\n};\n\nmpl.figure.prototype._init_toolbar = function () {\n var fig = this;\n\n var toolbar = document.createElement('div');\n toolbar.classList = 'mpl-toolbar';\n this.root.appendChild(toolbar);\n\n function on_click_closure(name) {\n return function (_event) {\n return fig.toolbar_button_onclick(name);\n };\n }\n\n function on_mouseover_closure(tooltip) {\n return function (event) {\n if (!event.currentTarget.disabled) {\n return fig.toolbar_button_onmouseover(tooltip);\n }\n };\n }\n\n fig.buttons = {};\n var buttonGroup = document.createElement('div');\n buttonGroup.classList = 'mpl-button-group';\n for (var toolbar_ind in mpl.toolbar_items) {\n var name = mpl.toolbar_items[toolbar_ind][0];\n var tooltip = mpl.toolbar_items[toolbar_ind][1];\n var image = mpl.toolbar_items[toolbar_ind][2];\n var method_name = mpl.toolbar_items[toolbar_ind][3];\n\n if (!name) {\n /* Instead of a spacer, we start a new button group. */\n if (buttonGroup.hasChildNodes()) {\n toolbar.appendChild(buttonGroup);\n }\n buttonGroup = document.createElement('div');\n buttonGroup.classList = 'mpl-button-group';\n continue;\n }\n\n var button = (fig.buttons[name] = document.createElement('button'));\n button.classList = 'mpl-widget';\n button.setAttribute('role', 'button');\n button.setAttribute('aria-disabled', 'false');\n button.addEventListener('click', on_click_closure(method_name));\n button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n\n var icon_img = document.createElement('img');\n icon_img.src = '_images/' + image + '.png';\n icon_img.srcset = '_images/' + image + '_large.png 2x';\n icon_img.alt = tooltip;\n button.appendChild(icon_img);\n\n buttonGroup.appendChild(button);\n }\n\n if (buttonGroup.hasChildNodes()) {\n toolbar.appendChild(buttonGroup);\n }\n\n var fmt_picker = document.createElement('select');\n fmt_picker.classList = 'mpl-widget';\n toolbar.appendChild(fmt_picker);\n this.format_dropdown = fmt_picker;\n\n for (var ind in mpl.extensions) {\n var fmt = mpl.extensions[ind];\n var option = document.createElement('option');\n option.selected = fmt === mpl.default_extension;\n option.innerHTML = fmt;\n fmt_picker.appendChild(option);\n }\n\n var status_bar = document.createElement('span');\n status_bar.classList = 'mpl-message';\n toolbar.appendChild(status_bar);\n this.message = status_bar;\n};\n\nmpl.figure.prototype.request_resize = function (x_pixels, y_pixels) {\n // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n // which will in turn request a refresh of the image.\n this.send_message('resize', { width: x_pixels, height: y_pixels });\n};\n\nmpl.figure.prototype.send_message = function (type, properties) {\n properties['type'] = type;\n properties['figure_id'] = this.id;\n this.ws.send(JSON.stringify(properties));\n};\n\nmpl.figure.prototype.send_draw_message = function () {\n if (!this.waiting) {\n this.waiting = true;\n this.ws.send(JSON.stringify({ type: 'draw', figure_id: this.id }));\n }\n};\n\nmpl.figure.prototype.handle_save = function (fig, _msg) {\n var format_dropdown = fig.format_dropdown;\n var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n fig.ondownload(fig, format);\n};\n\nmpl.figure.prototype.handle_resize = function (fig, msg) {\n var size = msg['size'];\n if (size[0] !== fig.canvas.width || size[1] !== fig.canvas.height) {\n fig._resize_canvas(size[0], size[1], msg['forward']);\n fig.send_message('refresh', {});\n }\n};\n\nmpl.figure.prototype.handle_rubberband = function (fig, msg) {\n var x0 = msg['x0'] / fig.ratio;\n var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n var x1 = msg['x1'] / fig.ratio;\n var y1 = (fig.canvas.height - msg['y1']) / fig.ratio;\n x0 = Math.floor(x0) + 0.5;\n y0 = Math.floor(y0) + 0.5;\n x1 = Math.floor(x1) + 0.5;\n y1 = Math.floor(y1) + 0.5;\n var min_x = Math.min(x0, x1);\n var min_y = Math.min(y0, y1);\n var width = Math.abs(x1 - x0);\n var height = Math.abs(y1 - y0);\n\n fig.rubberband_context.clearRect(\n 0,\n 0,\n fig.canvas.width / fig.ratio,\n fig.canvas.height / fig.ratio\n );\n\n fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n};\n\nmpl.figure.prototype.handle_figure_label = function (fig, msg) {\n // Updates the figure title.\n fig.header.textContent = msg['label'];\n};\n\nmpl.figure.prototype.handle_cursor = function (fig, msg) {\n var cursor = msg['cursor'];\n switch (cursor) {\n case 0:\n cursor = 'pointer';\n break;\n case 1:\n cursor = 'default';\n break;\n case 2:\n cursor = 'crosshair';\n break;\n case 3:\n cursor = 'move';\n break;\n }\n fig.rubberband_canvas.style.cursor = cursor;\n};\n\nmpl.figure.prototype.handle_message = function (fig, msg) {\n fig.message.textContent = msg['message'];\n};\n\nmpl.figure.prototype.handle_draw = function (fig, _msg) {\n // Request the server to send over a new figure.\n fig.send_draw_message();\n};\n\nmpl.figure.prototype.handle_image_mode = function (fig, msg) {\n fig.image_mode = msg['mode'];\n};\n\nmpl.figure.prototype.handle_history_buttons = function (fig, msg) {\n for (var key in msg) {\n if (!(key in fig.buttons)) {\n continue;\n }\n fig.buttons[key].disabled = !msg[key];\n fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n }\n};\n\nmpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n if (msg['mode'] === 'PAN') {\n fig.buttons['Pan'].classList.add('active');\n fig.buttons['Zoom'].classList.remove('active');\n } else if (msg['mode'] === 'ZOOM') {\n fig.buttons['Pan'].classList.remove('active');\n fig.buttons['Zoom'].classList.add('active');\n } else {\n fig.buttons['Pan'].classList.remove('active');\n fig.buttons['Zoom'].classList.remove('active');\n }\n};\n\nmpl.figure.prototype.updated_canvas_event = function () {\n // Called whenever the canvas gets updated.\n this.send_message('ack', {});\n};\n\n// A function to construct a web socket function for onmessage handling.\n// Called in the figure constructor.\nmpl.figure.prototype._make_on_message_function = function (fig) {\n return function socket_on_message(evt) {\n if (evt.data instanceof Blob) {\n var img = evt.data;\n if (img.type !== 'image/png') {\n /* FIXME: We get \"Resource interpreted as Image but\n * transferred with MIME type text/plain:\" errors on\n * Chrome. But how to set the MIME type? It doesn't seem\n * to be part of the websocket stream */\n img.type = 'image/png';\n }\n\n /* Free the memory for the previous frames */\n if (fig.imageObj.src) {\n (window.URL || window.webkitURL).revokeObjectURL(\n fig.imageObj.src\n );\n }\n\n fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n img\n );\n fig.updated_canvas_event();\n fig.waiting = false;\n return;\n } else if (\n typeof evt.data === 'string' &&\n evt.data.slice(0, 21) === 'data:image/png;base64'\n ) {\n fig.imageObj.src = evt.data;\n fig.updated_canvas_event();\n fig.waiting = false;\n return;\n }\n\n var msg = JSON.parse(evt.data);\n var msg_type = msg['type'];\n\n // Call the \"handle_{type}\" callback, which takes\n // the figure and JSON message as its only arguments.\n try {\n var callback = fig['handle_' + msg_type];\n } catch (e) {\n console.log(\n \"No handler for the '\" + msg_type + \"' message type: \",\n msg\n );\n return;\n }\n\n if (callback) {\n try {\n // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n callback(fig, msg);\n } catch (e) {\n console.log(\n \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n e,\n e.stack,\n msg\n );\n }\n }\n };\n};\n\n// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\nmpl.findpos = function (e) {\n //this section is from http://www.quirksmode.org/js/events_properties.html\n var targ;\n if (!e) {\n e = window.event;\n }\n if (e.target) {\n targ = e.target;\n } else if (e.srcElement) {\n targ = e.srcElement;\n }\n if (targ.nodeType === 3) {\n // defeat Safari bug\n targ = targ.parentNode;\n }\n\n // pageX,Y are the mouse positions relative to the document\n var boundingRect = targ.getBoundingClientRect();\n var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n var y = e.pageY - (boundingRect.top + document.body.scrollTop);\n\n return { x: x, y: y };\n};\n\n/*\n * return a copy of an object with only non-object keys\n * we need this to avoid circular references\n * http://stackoverflow.com/a/24161582/3208463\n */\nfunction simpleKeys(original) {\n return Object.keys(original).reduce(function (obj, key) {\n if (typeof original[key] !== 'object') {\n obj[key] = original[key];\n }\n return obj;\n }, {});\n}\n\nmpl.figure.prototype.mouse_event = function (event, name) {\n var canvas_pos = mpl.findpos(event);\n\n if (name === 'button_press') {\n this.canvas.focus();\n this.canvas_div.focus();\n }\n\n var x = canvas_pos.x * this.ratio;\n var y = canvas_pos.y * this.ratio;\n\n this.send_message(name, {\n x: x,\n y: y,\n button: event.button,\n step: event.step,\n guiEvent: simpleKeys(event),\n });\n\n /* This prevents the web browser from automatically changing to\n * the text insertion cursor when the button is pressed. We want\n * to control all of the cursor setting manually through the\n * 'cursor' event from matplotlib */\n event.preventDefault();\n return false;\n};\n\nmpl.figure.prototype._key_event_extra = function (_event, _name) {\n // Handle any extra behaviour associated with a key event\n};\n\nmpl.figure.prototype.key_event = function (event, name) {\n // Prevent repeat events\n if (name === 'key_press') {\n if (event.key === this._key) {\n return;\n } else {\n this._key = event.key;\n }\n }\n if (name === 'key_release') {\n this._key = null;\n }\n\n var value = '';\n if (event.ctrlKey && event.key !== 'Control') {\n value += 'ctrl+';\n }\n else if (event.altKey && event.key !== 'Alt') {\n value += 'alt+';\n }\n else if (event.shiftKey && event.key !== 'Shift') {\n value += 'shift+';\n }\n\n value += 'k' + event.key;\n\n this._key_event_extra(event, name);\n\n this.send_message(name, { key: value, guiEvent: simpleKeys(event) });\n return false;\n};\n\nmpl.figure.prototype.toolbar_button_onclick = function (name) {\n if (name === 'download') {\n this.handle_save(this, null);\n } else {\n this.send_message('toolbar_button', { name: name });\n }\n};\n\nmpl.figure.prototype.toolbar_button_onmouseover = function (tooltip) {\n this.message.textContent = tooltip;\n};\n\n///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n// prettier-ignore\nvar _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\nmpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n\nmpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n\nmpl.default_extension = \"png\";/* global mpl */\n\nvar comm_websocket_adapter = function (comm) {\n // Create a \"websocket\"-like object which calls the given IPython comm\n // object with the appropriate methods. Currently this is a non binary\n // socket, so there is still some room for performance tuning.\n var ws = {};\n\n ws.binaryType = comm.kernel.ws.binaryType;\n ws.readyState = comm.kernel.ws.readyState;\n function updateReadyState(_event) {\n if (comm.kernel.ws) {\n ws.readyState = comm.kernel.ws.readyState;\n } else {\n ws.readyState = 3; // Closed state.\n }\n }\n comm.kernel.ws.addEventListener('open', updateReadyState);\n comm.kernel.ws.addEventListener('close', updateReadyState);\n comm.kernel.ws.addEventListener('error', updateReadyState);\n\n ws.close = function () {\n comm.close();\n };\n ws.send = function (m) {\n //console.log('sending', m);\n comm.send(m);\n };\n // Register the callback with on_msg.\n comm.on_msg(function (msg) {\n //console.log('receiving', msg['content']['data'], msg);\n var data = msg['content']['data'];\n if (data['blob'] !== undefined) {\n data = {\n data: new Blob(msg['buffers'], { type: data['blob'] }),\n };\n }\n // Pass the mpl event to the overridden (by mpl) onmessage function.\n ws.onmessage(data);\n });\n return ws;\n};\n\nmpl.mpl_figure_comm = function (comm, msg) {\n // This is the function which gets called when the mpl process\n // starts-up an IPython Comm through the \"matplotlib\" channel.\n\n var id = msg.content.data.id;\n // Get hold of the div created by the display call when the Comm\n // socket was opened in Python.\n var element = document.getElementById(id);\n var ws_proxy = comm_websocket_adapter(comm);\n\n function ondownload(figure, _format) {\n window.open(figure.canvas.toDataURL());\n }\n\n var fig = new mpl.figure(id, ws_proxy, ondownload, element);\n\n // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n // web socket which is closed, not our websocket->open comm proxy.\n ws_proxy.onopen();\n\n fig.parent_element = element;\n fig.cell_info = mpl.find_output_cell(\"
\");\n if (!fig.cell_info) {\n console.error('Failed to find cell for figure', id, fig);\n return;\n }\n fig.cell_info[0].output_area.element.on(\n 'cleared',\n { fig: fig },\n fig._remove_fig_handler\n );\n};\n\nmpl.figure.prototype.handle_close = function (fig, msg) {\n var width = fig.canvas.width / fig.ratio;\n fig.cell_info[0].output_area.element.off(\n 'cleared',\n fig._remove_fig_handler\n );\n fig.resizeObserverInstance.unobserve(fig.canvas_div);\n\n // Update the output cell to use the data from the current canvas.\n fig.push_to_output();\n var dataURL = fig.canvas.toDataURL();\n // Re-enable the keyboard manager in IPython - without this line, in FF,\n // the notebook keyboard shortcuts fail.\n IPython.keyboard_manager.enable();\n fig.parent_element.innerHTML =\n '';\n fig.close_ws(fig, msg);\n};\n\nmpl.figure.prototype.close_ws = function (fig, msg) {\n fig.send_message('closing', msg);\n // fig.ws.close()\n};\n\nmpl.figure.prototype.push_to_output = function (_remove_interactive) {\n // Turn the data on the canvas into data in the output cell.\n var width = this.canvas.width / this.ratio;\n var dataURL = this.canvas.toDataURL();\n this.cell_info[1]['text/html'] =\n '';\n};\n\nmpl.figure.prototype.updated_canvas_event = function () {\n // Tell IPython that the notebook contents must change.\n IPython.notebook.set_dirty(true);\n this.send_message('ack', {});\n var fig = this;\n // Wait a second, then push the new image to the DOM so\n // that it is saved nicely (might be nice to debounce this).\n setTimeout(function () {\n fig.push_to_output();\n }, 1000);\n};\n\nmpl.figure.prototype._init_toolbar = function () {\n var fig = this;\n\n var toolbar = document.createElement('div');\n toolbar.classList = 'btn-toolbar';\n this.root.appendChild(toolbar);\n\n function on_click_closure(name) {\n return function (_event) {\n return fig.toolbar_button_onclick(name);\n };\n }\n\n function on_mouseover_closure(tooltip) {\n return function (event) {\n if (!event.currentTarget.disabled) {\n return fig.toolbar_button_onmouseover(tooltip);\n }\n };\n }\n\n fig.buttons = {};\n var buttonGroup = document.createElement('div');\n buttonGroup.classList = 'btn-group';\n var button;\n for (var toolbar_ind in mpl.toolbar_items) {\n var name = mpl.toolbar_items[toolbar_ind][0];\n var tooltip = mpl.toolbar_items[toolbar_ind][1];\n var image = mpl.toolbar_items[toolbar_ind][2];\n var method_name = mpl.toolbar_items[toolbar_ind][3];\n\n if (!name) {\n /* Instead of a spacer, we start a new button group. */\n if (buttonGroup.hasChildNodes()) {\n toolbar.appendChild(buttonGroup);\n }\n buttonGroup = document.createElement('div');\n buttonGroup.classList = 'btn-group';\n continue;\n }\n\n button = fig.buttons[name] = document.createElement('button');\n button.classList = 'btn btn-default';\n button.href = '#';\n button.title = name;\n button.innerHTML = '';\n button.addEventListener('click', on_click_closure(method_name));\n button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n buttonGroup.appendChild(button);\n }\n\n if (buttonGroup.hasChildNodes()) {\n toolbar.appendChild(buttonGroup);\n }\n\n // Add the status bar.\n var status_bar = document.createElement('span');\n status_bar.classList = 'mpl-message pull-right';\n toolbar.appendChild(status_bar);\n this.message = status_bar;\n\n // Add the close button to the window.\n var buttongrp = document.createElement('div');\n buttongrp.classList = 'btn-group inline pull-right';\n button = document.createElement('button');\n button.classList = 'btn btn-mini btn-primary';\n button.href = '#';\n button.title = 'Stop Interaction';\n button.innerHTML = '';\n button.addEventListener('click', function (_evt) {\n fig.handle_close(fig, {});\n });\n button.addEventListener(\n 'mouseover',\n on_mouseover_closure('Stop Interaction')\n );\n buttongrp.appendChild(button);\n var titlebar = this.root.querySelector('.ui-dialog-titlebar');\n titlebar.insertBefore(buttongrp, titlebar.firstChild);\n};\n\nmpl.figure.prototype._remove_fig_handler = function (event) {\n var fig = event.data.fig;\n if (event.target !== this) {\n // Ignore bubbled events from children.\n return;\n }\n fig.close_ws(fig, {});\n};\n\nmpl.figure.prototype._root_extra_style = function (el) {\n el.style.boxSizing = 'content-box'; // override notebook setting of border-box.\n};\n\nmpl.figure.prototype._canvas_extra_style = function (el) {\n // this is important to make the div 'focusable\n el.setAttribute('tabindex', 0);\n // reach out to IPython and tell the keyboard manager to turn it's self\n // off when our div gets focus\n\n // location in version 3\n if (IPython.notebook.keyboard_manager) {\n IPython.notebook.keyboard_manager.register_events(el);\n } else {\n // location in version 2\n IPython.keyboard_manager.register_events(el);\n }\n};\n\nmpl.figure.prototype._key_event_extra = function (event, _name) {\n var manager = IPython.notebook.keyboard_manager;\n if (!manager) {\n manager = IPython.keyboard_manager;\n }\n\n // Check for shift+enter\n if (event.shiftKey && event.which === 13) {\n this.canvas_div.blur();\n // select the cell after this one\n var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n IPython.notebook.select(index + 1);\n }\n};\n\nmpl.figure.prototype.handle_save = function (fig, _msg) {\n fig.ondownload(fig, null);\n};\n\nmpl.find_output_cell = function (html_output) {\n // Return the cell and output element which can be found *uniquely* in the notebook.\n // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n // IPython event is triggered only after the cells have been serialised, which for\n // our purposes (turning an active figure into a static one), is too late.\n var cells = IPython.notebook.get_cells();\n var ncells = cells.length;\n for (var i = 0; i < ncells; i++) {\n var cell = cells[i];\n if (cell.cell_type === 'code') {\n for (var j = 0; j < cell.output_area.outputs.length; j++) {\n var data = cell.output_area.outputs[j];\n if (data.data) {\n // IPython >= 3 moved mimebundle to data attribute of output\n data = data.data;\n }\n if (data['text/html'] === html_output) {\n return [cell, data, j];\n }\n }\n }\n }\n};\n\n// Register the function which deals with the matplotlib target/channel.\n// The kernel may be null if the page has been refreshed.\nif (IPython.notebook.kernel !== null) {\n IPython.notebook.kernel.comm_manager.register_target(\n 'matplotlib',\n mpl.mpl_figure_comm\n );\n}\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ - "%matplotlib nbagg \r\n", - "net = Net()\r\n", - "net.add(Linear(2,2))\r\n", - "net.add(Softmax())\r\n", - "\r\n", + "%matplotlib nbagg \n", + "net = Net()\n", + "net.add(Linear(2,2))\n", + "net.add(Softmax())\n", + "\n", "res = train_and_plot(30,net,lr=0.005)" - ], - "outputs": [], + ] + }, + { + "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } - } - }, - { - "cell_type": "markdown", + }, "source": [ - "After running the cell above you should be able to see interactively how the boundary between classes change during training. Note that we have chosen very small learning rate so that we can see how the process happens.\r\n", - "\r\n", - "## Multi-Layered Models\r\n", - "\r\n", - "The network above has been constructed from several layers, but we still had only one `Linear` layer, which does the actual classification. What happens if we decide to add several such layers?\r\n", - "\r\n", + "After running the cell above you should be able to see interactively how the boundary between classes change during training. Note that we have chosen very small learning rate so that we can see how the process happens.\n", + "\n", + "## Multi-Layered Models\n", + "\n", + "The network above has been constructed from several layers, but we still had only one `Linear` layer, which does the actual classification. What happens if we decide to add several such layers?\n", + "\n", "Surprisingly, our code will work! Very important thing to note, however, is that in between linear layers we need to have a non-linear **activation function**, such as `tanh`. Without such non-linearity, several linear layers would have the same expressive power as just one layers - because composition of linear functions is also linear!" - ], - "metadata": { - "slideshow": { - "slide_type": "slide" - } - } + ] }, { "cell_type": "code", - "execution_count": null, - "source": [ - "class Tanh:\r\n", - " def forward(self,x):\r\n", - " y = np.tanh(x)\r\n", - " self.y = y\r\n", - " return y\r\n", - " def backward(self,dy):\r\n", - " return (1.0-self.y**2)*dy" - ], + "execution_count": 38, + "metadata": {}, "outputs": [], - "metadata": {} + "source": [ + "class Tanh:\n", + " def forward(self,x):\n", + " y = np.tanh(x)\n", + " self.y = y\n", + " return y\n", + " def backward(self,dy):\n", + " return (1.0-self.y**2)*dy" + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ - " Adding several layers make sense, because unlike one-layer network, multi-layered model will be able to accuratley classify sets that are not linearly separable. I.e., a model with several layers will be **reacher**.\r\n", - "\r\n", - "> It can be demonstrated that with sufficient number of neurons a two-layered model is capable to classifying any convex set of data points, and three-layered network can classify virtually any set.\r\n", - "\r\n", - "Mathematically, multi-layered perceptron would be represented by a more complex function $f_\\theta$ that can be computed in several steps:\r\n", - "* $z_1 = W_1\\times x+b_1$\r\n", - "* $z_2 = W_2\\times\\alpha(z_1)+b_2$\r\n", - "* $f = \\sigma(z_2)$\r\n", - "\r\n", - "Here, $\\alpha$ is a **non-linear activation function**, $\\sigma$ is a softmax function, and $\\theta=\\langle W_1,b_1,W_2,b_2\\rangle$ are parameters.\r\n", - "\r\n", - "The gradient descent algorithm would remain the same, but it would be more difficult to calculate gradients. Given the\r\n", - " chain differentiation rule, we can calculate derivatives as:\r\n", - "\r\n", - "$$\\begin{align}\r\n", - "\\frac{\\partial\\mathcal{L}}{\\partial W_2} &= \\color{red}{\\frac{\\partial\\mathcal{L}}{\\partial\\sigma}\\frac{\\partial\\sigma}{\\partial z_2}}\\color{black}{\\frac{\\partial z_2}{\\partial W_2}} \\\\\r\n", - "\\frac{\\partial\\mathcal{L}}{\\partial W_1} &= \\color{red}{\\frac{\\partial\\mathcal{L}}{\\partial\\sigma}\\frac{\\partial\\sigma}{\\partial z_2}}\\color{black}{\\frac{\\partial z_2}{\\partial\\alpha}\\frac{\\partial\\alpha}{\\partial z_1}\\frac{\\partial z_1}{\\partial W_1}}\r\n", - "\\end{align}\r\n", - "$$\r\n", - "\r\n", - "Note that the beginning of all those expressions is still the same, and thus we can continue back propagation beyond one linear layers to adjust further weights up the computational graph.\r\n", - "\r\n", + " Adding several layers make sense, because unlike one-layer network, multi-layered model will be able to accuratley classify sets that are not linearly separable. I.e., a model with several layers will be **reacher**.\n", + "\n", + "> It can be demonstrated that with sufficient number of neurons a two-layered model is capable to classifying any convex set of data points, and three-layered network can classify virtually any set.\n", + "\n", + "Mathematically, multi-layered perceptron would be represented by a more complex function $f_\\theta$ that can be computed in several steps:\n", + "* $z_1 = W_1\\times x+b_1$\n", + "* $z_2 = W_2\\times\\alpha(z_1)+b_2$\n", + "* $f = \\sigma(z_2)$\n", + "\n", + "Here, $\\alpha$ is a **non-linear activation function**, $\\sigma$ is a softmax function, and $\\theta=\\langle W_1,b_1,W_2,b_2\\rangle$ are parameters.\n", + "\n", + "The gradient descent algorithm would remain the same, but it would be more difficult to calculate gradients. Given the\n", + " chain differentiation rule, we can calculate derivatives as:\n", + "\n", + "$$\\begin{align}\n", + "\\frac{\\partial\\mathcal{L}}{\\partial W_2} &= \\color{red}{\\frac{\\partial\\mathcal{L}}{\\partial\\sigma}\\frac{\\partial\\sigma}{\\partial z_2}}\\color{black}{\\frac{\\partial z_2}{\\partial W_2}} \\\\\n", + "\\frac{\\partial\\mathcal{L}}{\\partial W_1} &= \\color{red}{\\frac{\\partial\\mathcal{L}}{\\partial\\sigma}\\frac{\\partial\\sigma}{\\partial z_2}}\\color{black}{\\frac{\\partial z_2}{\\partial\\alpha}\\frac{\\partial\\alpha}{\\partial z_1}\\frac{\\partial z_1}{\\partial W_1}}\n", + "\\end{align}\n", + "$$\n", + "\n", + "Note that the beginning of all those expressions is still the same, and thus we can continue back propagation beyond one linear layers to adjust further weights up the computational graph.\n", + "\n", "Let's now experiment with two-layered network:" - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 39, + "metadata": {}, + "outputs": [], "source": [ - "net = Net()\r\n", - "net.add(Linear(2,10))\r\n", - "net.add(Tanh())\r\n", - "net.add(Linear(10,2))\r\n", - "net.add(Softmax())\r\n", + "net = Net()\n", + "net.add(Linear(2,10))\n", + "net.add(Tanh())\n", + "net.add(Linear(10,2))\n", + "net.add(Softmax())\n", "loss = CrossEntropyLoss()" - ], - "outputs": [], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": null, - "source": [ - "res = train_and_plot(30,net,lr=0.01)" - ], - "outputs": [], + "execution_count": 40, "metadata": { "scrolled": false, "slideshow": { "slide_type": "slide" } - } + }, + "outputs": [ + { + "data": { + "application/javascript": "/* Put everything inside the global mpl namespace */\n/* global mpl */\nwindow.mpl = {};\n\nmpl.get_websocket_type = function () {\n if (typeof WebSocket !== 'undefined') {\n return WebSocket;\n } else if (typeof MozWebSocket !== 'undefined') {\n return MozWebSocket;\n } else {\n alert(\n 'Your browser does not have WebSocket support. ' +\n 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n 'Firefox 4 and 5 are also supported but you ' +\n 'have to enable WebSockets in about:config.'\n );\n }\n};\n\nmpl.figure = function (figure_id, websocket, ondownload, parent_element) {\n this.id = figure_id;\n\n this.ws = websocket;\n\n this.supports_binary = this.ws.binaryType !== undefined;\n\n if (!this.supports_binary) {\n var warnings = document.getElementById('mpl-warnings');\n if (warnings) {\n warnings.style.display = 'block';\n warnings.textContent =\n 'This browser does not support binary websocket messages. ' +\n 'Performance may be slow.';\n }\n }\n\n this.imageObj = new Image();\n\n this.context = undefined;\n this.message = undefined;\n this.canvas = undefined;\n this.rubberband_canvas = undefined;\n this.rubberband_context = undefined;\n this.format_dropdown = undefined;\n\n this.image_mode = 'full';\n\n this.root = document.createElement('div');\n this.root.setAttribute('style', 'display: inline-block');\n this._root_extra_style(this.root);\n\n parent_element.appendChild(this.root);\n\n this._init_header(this);\n this._init_canvas(this);\n this._init_toolbar(this);\n\n var fig = this;\n\n this.waiting = false;\n\n this.ws.onopen = function () {\n fig.send_message('supports_binary', { value: fig.supports_binary });\n fig.send_message('send_image_mode', {});\n if (fig.ratio !== 1) {\n fig.send_message('set_dpi_ratio', { dpi_ratio: fig.ratio });\n }\n fig.send_message('refresh', {});\n };\n\n this.imageObj.onload = function () {\n if (fig.image_mode === 'full') {\n // Full images could contain transparency (where diff images\n // almost always do), so we need to clear the canvas so that\n // there is no ghosting.\n fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n }\n fig.context.drawImage(fig.imageObj, 0, 0);\n };\n\n this.imageObj.onunload = function () {\n fig.ws.close();\n };\n\n this.ws.onmessage = this._make_on_message_function(this);\n\n this.ondownload = ondownload;\n};\n\nmpl.figure.prototype._init_header = function () {\n var titlebar = document.createElement('div');\n titlebar.classList =\n 'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n var titletext = document.createElement('div');\n titletext.classList = 'ui-dialog-title';\n titletext.setAttribute(\n 'style',\n 'width: 100%; text-align: center; padding: 3px;'\n );\n titlebar.appendChild(titletext);\n this.root.appendChild(titlebar);\n this.header = titletext;\n};\n\nmpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n\nmpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n\nmpl.figure.prototype._init_canvas = function () {\n var fig = this;\n\n var canvas_div = (this.canvas_div = document.createElement('div'));\n canvas_div.setAttribute(\n 'style',\n 'border: 1px solid #ddd;' +\n 'box-sizing: content-box;' +\n 'clear: both;' +\n 'min-height: 1px;' +\n 'min-width: 1px;' +\n 'outline: 0;' +\n 'overflow: hidden;' +\n 'position: relative;' +\n 'resize: both;'\n );\n\n function on_keyboard_event_closure(name) {\n return function (event) {\n return fig.key_event(event, name);\n };\n }\n\n canvas_div.addEventListener(\n 'keydown',\n on_keyboard_event_closure('key_press')\n );\n canvas_div.addEventListener(\n 'keyup',\n on_keyboard_event_closure('key_release')\n );\n\n this._canvas_extra_style(canvas_div);\n this.root.appendChild(canvas_div);\n\n var canvas = (this.canvas = document.createElement('canvas'));\n canvas.classList.add('mpl-canvas');\n canvas.setAttribute('style', 'box-sizing: content-box;');\n\n this.context = canvas.getContext('2d');\n\n var backingStore =\n this.context.backingStorePixelRatio ||\n this.context.webkitBackingStorePixelRatio ||\n this.context.mozBackingStorePixelRatio ||\n this.context.msBackingStorePixelRatio ||\n this.context.oBackingStorePixelRatio ||\n this.context.backingStorePixelRatio ||\n 1;\n\n this.ratio = (window.devicePixelRatio || 1) / backingStore;\n\n var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n 'canvas'\n ));\n rubberband_canvas.setAttribute(\n 'style',\n 'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n );\n\n // Apply a ponyfill if ResizeObserver is not implemented by browser.\n if (this.ResizeObserver === undefined) {\n if (window.ResizeObserver !== undefined) {\n this.ResizeObserver = window.ResizeObserver;\n } else {\n var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n this.ResizeObserver = obs.ResizeObserver;\n }\n }\n\n this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n var nentries = entries.length;\n for (var i = 0; i < nentries; i++) {\n var entry = entries[i];\n var width, height;\n if (entry.contentBoxSize) {\n if (entry.contentBoxSize instanceof Array) {\n // Chrome 84 implements new version of spec.\n width = entry.contentBoxSize[0].inlineSize;\n height = entry.contentBoxSize[0].blockSize;\n } else {\n // Firefox implements old version of spec.\n width = entry.contentBoxSize.inlineSize;\n height = entry.contentBoxSize.blockSize;\n }\n } else {\n // Chrome <84 implements even older version of spec.\n width = entry.contentRect.width;\n height = entry.contentRect.height;\n }\n\n // Keep the size of the canvas and rubber band canvas in sync with\n // the canvas container.\n if (entry.devicePixelContentBoxSize) {\n // Chrome 84 implements new version of spec.\n canvas.setAttribute(\n 'width',\n entry.devicePixelContentBoxSize[0].inlineSize\n );\n canvas.setAttribute(\n 'height',\n entry.devicePixelContentBoxSize[0].blockSize\n );\n } else {\n canvas.setAttribute('width', width * fig.ratio);\n canvas.setAttribute('height', height * fig.ratio);\n }\n canvas.setAttribute(\n 'style',\n 'width: ' + width + 'px; height: ' + height + 'px;'\n );\n\n rubberband_canvas.setAttribute('width', width);\n rubberband_canvas.setAttribute('height', height);\n\n // And update the size in Python. We ignore the initial 0/0 size\n // that occurs as the element is placed into the DOM, which should\n // otherwise not happen due to the minimum size styling.\n if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n fig.request_resize(width, height);\n }\n }\n });\n this.resizeObserverInstance.observe(canvas_div);\n\n function on_mouse_event_closure(name) {\n return function (event) {\n return fig.mouse_event(event, name);\n };\n }\n\n rubberband_canvas.addEventListener(\n 'mousedown',\n on_mouse_event_closure('button_press')\n );\n rubberband_canvas.addEventListener(\n 'mouseup',\n on_mouse_event_closure('button_release')\n );\n rubberband_canvas.addEventListener(\n 'dblclick',\n on_mouse_event_closure('dblclick')\n );\n // Throttle sequential mouse events to 1 every 20ms.\n rubberband_canvas.addEventListener(\n 'mousemove',\n on_mouse_event_closure('motion_notify')\n );\n\n rubberband_canvas.addEventListener(\n 'mouseenter',\n on_mouse_event_closure('figure_enter')\n );\n rubberband_canvas.addEventListener(\n 'mouseleave',\n on_mouse_event_closure('figure_leave')\n );\n\n canvas_div.addEventListener('wheel', function (event) {\n if (event.deltaY < 0) {\n event.step = 1;\n } else {\n event.step = -1;\n }\n on_mouse_event_closure('scroll')(event);\n });\n\n canvas_div.appendChild(canvas);\n canvas_div.appendChild(rubberband_canvas);\n\n this.rubberband_context = rubberband_canvas.getContext('2d');\n this.rubberband_context.strokeStyle = '#000000';\n\n this._resize_canvas = function (width, height, forward) {\n if (forward) {\n canvas_div.style.width = width + 'px';\n canvas_div.style.height = height + 'px';\n }\n };\n\n // Disable right mouse context menu.\n this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n event.preventDefault();\n return false;\n });\n\n function set_focus() {\n canvas.focus();\n canvas_div.focus();\n }\n\n window.setTimeout(set_focus, 100);\n};\n\nmpl.figure.prototype._init_toolbar = function () {\n var fig = this;\n\n var toolbar = document.createElement('div');\n toolbar.classList = 'mpl-toolbar';\n this.root.appendChild(toolbar);\n\n function on_click_closure(name) {\n return function (_event) {\n return fig.toolbar_button_onclick(name);\n };\n }\n\n function on_mouseover_closure(tooltip) {\n return function (event) {\n if (!event.currentTarget.disabled) {\n return fig.toolbar_button_onmouseover(tooltip);\n }\n };\n }\n\n fig.buttons = {};\n var buttonGroup = document.createElement('div');\n buttonGroup.classList = 'mpl-button-group';\n for (var toolbar_ind in mpl.toolbar_items) {\n var name = mpl.toolbar_items[toolbar_ind][0];\n var tooltip = mpl.toolbar_items[toolbar_ind][1];\n var image = mpl.toolbar_items[toolbar_ind][2];\n var method_name = mpl.toolbar_items[toolbar_ind][3];\n\n if (!name) {\n /* Instead of a spacer, we start a new button group. */\n if (buttonGroup.hasChildNodes()) {\n toolbar.appendChild(buttonGroup);\n }\n buttonGroup = document.createElement('div');\n buttonGroup.classList = 'mpl-button-group';\n continue;\n }\n\n var button = (fig.buttons[name] = document.createElement('button'));\n button.classList = 'mpl-widget';\n button.setAttribute('role', 'button');\n button.setAttribute('aria-disabled', 'false');\n button.addEventListener('click', on_click_closure(method_name));\n button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n\n var icon_img = document.createElement('img');\n icon_img.src = '_images/' + image + '.png';\n icon_img.srcset = '_images/' + image + '_large.png 2x';\n icon_img.alt = tooltip;\n button.appendChild(icon_img);\n\n buttonGroup.appendChild(button);\n }\n\n if (buttonGroup.hasChildNodes()) {\n toolbar.appendChild(buttonGroup);\n }\n\n var fmt_picker = document.createElement('select');\n fmt_picker.classList = 'mpl-widget';\n toolbar.appendChild(fmt_picker);\n this.format_dropdown = fmt_picker;\n\n for (var ind in mpl.extensions) {\n var fmt = mpl.extensions[ind];\n var option = document.createElement('option');\n option.selected = fmt === mpl.default_extension;\n option.innerHTML = fmt;\n fmt_picker.appendChild(option);\n }\n\n var status_bar = document.createElement('span');\n status_bar.classList = 'mpl-message';\n toolbar.appendChild(status_bar);\n this.message = status_bar;\n};\n\nmpl.figure.prototype.request_resize = function (x_pixels, y_pixels) {\n // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n // which will in turn request a refresh of the image.\n this.send_message('resize', { width: x_pixels, height: y_pixels });\n};\n\nmpl.figure.prototype.send_message = function (type, properties) {\n properties['type'] = type;\n properties['figure_id'] = this.id;\n this.ws.send(JSON.stringify(properties));\n};\n\nmpl.figure.prototype.send_draw_message = function () {\n if (!this.waiting) {\n this.waiting = true;\n this.ws.send(JSON.stringify({ type: 'draw', figure_id: this.id }));\n }\n};\n\nmpl.figure.prototype.handle_save = function (fig, _msg) {\n var format_dropdown = fig.format_dropdown;\n var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n fig.ondownload(fig, format);\n};\n\nmpl.figure.prototype.handle_resize = function (fig, msg) {\n var size = msg['size'];\n if (size[0] !== fig.canvas.width || size[1] !== fig.canvas.height) {\n fig._resize_canvas(size[0], size[1], msg['forward']);\n fig.send_message('refresh', {});\n }\n};\n\nmpl.figure.prototype.handle_rubberband = function (fig, msg) {\n var x0 = msg['x0'] / fig.ratio;\n var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n var x1 = msg['x1'] / fig.ratio;\n var y1 = (fig.canvas.height - msg['y1']) / fig.ratio;\n x0 = Math.floor(x0) + 0.5;\n y0 = Math.floor(y0) + 0.5;\n x1 = Math.floor(x1) + 0.5;\n y1 = Math.floor(y1) + 0.5;\n var min_x = Math.min(x0, x1);\n var min_y = Math.min(y0, y1);\n var width = Math.abs(x1 - x0);\n var height = Math.abs(y1 - y0);\n\n fig.rubberband_context.clearRect(\n 0,\n 0,\n fig.canvas.width / fig.ratio,\n fig.canvas.height / fig.ratio\n );\n\n fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n};\n\nmpl.figure.prototype.handle_figure_label = function (fig, msg) {\n // Updates the figure title.\n fig.header.textContent = msg['label'];\n};\n\nmpl.figure.prototype.handle_cursor = function (fig, msg) {\n var cursor = msg['cursor'];\n switch (cursor) {\n case 0:\n cursor = 'pointer';\n break;\n case 1:\n cursor = 'default';\n break;\n case 2:\n cursor = 'crosshair';\n break;\n case 3:\n cursor = 'move';\n break;\n }\n fig.rubberband_canvas.style.cursor = cursor;\n};\n\nmpl.figure.prototype.handle_message = function (fig, msg) {\n fig.message.textContent = msg['message'];\n};\n\nmpl.figure.prototype.handle_draw = function (fig, _msg) {\n // Request the server to send over a new figure.\n fig.send_draw_message();\n};\n\nmpl.figure.prototype.handle_image_mode = function (fig, msg) {\n fig.image_mode = msg['mode'];\n};\n\nmpl.figure.prototype.handle_history_buttons = function (fig, msg) {\n for (var key in msg) {\n if (!(key in fig.buttons)) {\n continue;\n }\n fig.buttons[key].disabled = !msg[key];\n fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n }\n};\n\nmpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n if (msg['mode'] === 'PAN') {\n fig.buttons['Pan'].classList.add('active');\n fig.buttons['Zoom'].classList.remove('active');\n } else if (msg['mode'] === 'ZOOM') {\n fig.buttons['Pan'].classList.remove('active');\n fig.buttons['Zoom'].classList.add('active');\n } else {\n fig.buttons['Pan'].classList.remove('active');\n fig.buttons['Zoom'].classList.remove('active');\n }\n};\n\nmpl.figure.prototype.updated_canvas_event = function () {\n // Called whenever the canvas gets updated.\n this.send_message('ack', {});\n};\n\n// A function to construct a web socket function for onmessage handling.\n// Called in the figure constructor.\nmpl.figure.prototype._make_on_message_function = function (fig) {\n return function socket_on_message(evt) {\n if (evt.data instanceof Blob) {\n var img = evt.data;\n if (img.type !== 'image/png') {\n /* FIXME: We get \"Resource interpreted as Image but\n * transferred with MIME type text/plain:\" errors on\n * Chrome. But how to set the MIME type? It doesn't seem\n * to be part of the websocket stream */\n img.type = 'image/png';\n }\n\n /* Free the memory for the previous frames */\n if (fig.imageObj.src) {\n (window.URL || window.webkitURL).revokeObjectURL(\n fig.imageObj.src\n );\n }\n\n fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n img\n );\n fig.updated_canvas_event();\n fig.waiting = false;\n return;\n } else if (\n typeof evt.data === 'string' &&\n evt.data.slice(0, 21) === 'data:image/png;base64'\n ) {\n fig.imageObj.src = evt.data;\n fig.updated_canvas_event();\n fig.waiting = false;\n return;\n }\n\n var msg = JSON.parse(evt.data);\n var msg_type = msg['type'];\n\n // Call the \"handle_{type}\" callback, which takes\n // the figure and JSON message as its only arguments.\n try {\n var callback = fig['handle_' + msg_type];\n } catch (e) {\n console.log(\n \"No handler for the '\" + msg_type + \"' message type: \",\n msg\n );\n return;\n }\n\n if (callback) {\n try {\n // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n callback(fig, msg);\n } catch (e) {\n console.log(\n \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n e,\n e.stack,\n msg\n );\n }\n }\n };\n};\n\n// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\nmpl.findpos = function (e) {\n //this section is from http://www.quirksmode.org/js/events_properties.html\n var targ;\n if (!e) {\n e = window.event;\n }\n if (e.target) {\n targ = e.target;\n } else if (e.srcElement) {\n targ = e.srcElement;\n }\n if (targ.nodeType === 3) {\n // defeat Safari bug\n targ = targ.parentNode;\n }\n\n // pageX,Y are the mouse positions relative to the document\n var boundingRect = targ.getBoundingClientRect();\n var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n var y = e.pageY - (boundingRect.top + document.body.scrollTop);\n\n return { x: x, y: y };\n};\n\n/*\n * return a copy of an object with only non-object keys\n * we need this to avoid circular references\n * http://stackoverflow.com/a/24161582/3208463\n */\nfunction simpleKeys(original) {\n return Object.keys(original).reduce(function (obj, key) {\n if (typeof original[key] !== 'object') {\n obj[key] = original[key];\n }\n return obj;\n }, {});\n}\n\nmpl.figure.prototype.mouse_event = function (event, name) {\n var canvas_pos = mpl.findpos(event);\n\n if (name === 'button_press') {\n this.canvas.focus();\n this.canvas_div.focus();\n }\n\n var x = canvas_pos.x * this.ratio;\n var y = canvas_pos.y * this.ratio;\n\n this.send_message(name, {\n x: x,\n y: y,\n button: event.button,\n step: event.step,\n guiEvent: simpleKeys(event),\n });\n\n /* This prevents the web browser from automatically changing to\n * the text insertion cursor when the button is pressed. We want\n * to control all of the cursor setting manually through the\n * 'cursor' event from matplotlib */\n event.preventDefault();\n return false;\n};\n\nmpl.figure.prototype._key_event_extra = function (_event, _name) {\n // Handle any extra behaviour associated with a key event\n};\n\nmpl.figure.prototype.key_event = function (event, name) {\n // Prevent repeat events\n if (name === 'key_press') {\n if (event.key === this._key) {\n return;\n } else {\n this._key = event.key;\n }\n }\n if (name === 'key_release') {\n this._key = null;\n }\n\n var value = '';\n if (event.ctrlKey && event.key !== 'Control') {\n value += 'ctrl+';\n }\n else if (event.altKey && event.key !== 'Alt') {\n value += 'alt+';\n }\n else if (event.shiftKey && event.key !== 'Shift') {\n value += 'shift+';\n }\n\n value += 'k' + event.key;\n\n this._key_event_extra(event, name);\n\n this.send_message(name, { key: value, guiEvent: simpleKeys(event) });\n return false;\n};\n\nmpl.figure.prototype.toolbar_button_onclick = function (name) {\n if (name === 'download') {\n this.handle_save(this, null);\n } else {\n this.send_message('toolbar_button', { name: name });\n }\n};\n\nmpl.figure.prototype.toolbar_button_onmouseover = function (tooltip) {\n this.message.textContent = tooltip;\n};\n\n///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n// prettier-ignore\nvar _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\nmpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n\nmpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n\nmpl.default_extension = \"png\";/* global mpl */\n\nvar comm_websocket_adapter = function (comm) {\n // Create a \"websocket\"-like object which calls the given IPython comm\n // object with the appropriate methods. Currently this is a non binary\n // socket, so there is still some room for performance tuning.\n var ws = {};\n\n ws.binaryType = comm.kernel.ws.binaryType;\n ws.readyState = comm.kernel.ws.readyState;\n function updateReadyState(_event) {\n if (comm.kernel.ws) {\n ws.readyState = comm.kernel.ws.readyState;\n } else {\n ws.readyState = 3; // Closed state.\n }\n }\n comm.kernel.ws.addEventListener('open', updateReadyState);\n comm.kernel.ws.addEventListener('close', updateReadyState);\n comm.kernel.ws.addEventListener('error', updateReadyState);\n\n ws.close = function () {\n comm.close();\n };\n ws.send = function (m) {\n //console.log('sending', m);\n comm.send(m);\n };\n // Register the callback with on_msg.\n comm.on_msg(function (msg) {\n //console.log('receiving', msg['content']['data'], msg);\n var data = msg['content']['data'];\n if (data['blob'] !== undefined) {\n data = {\n data: new Blob(msg['buffers'], { type: data['blob'] }),\n };\n }\n // Pass the mpl event to the overridden (by mpl) onmessage function.\n ws.onmessage(data);\n });\n return ws;\n};\n\nmpl.mpl_figure_comm = function (comm, msg) {\n // This is the function which gets called when the mpl process\n // starts-up an IPython Comm through the \"matplotlib\" channel.\n\n var id = msg.content.data.id;\n // Get hold of the div created by the display call when the Comm\n // socket was opened in Python.\n var element = document.getElementById(id);\n var ws_proxy = comm_websocket_adapter(comm);\n\n function ondownload(figure, _format) {\n window.open(figure.canvas.toDataURL());\n }\n\n var fig = new mpl.figure(id, ws_proxy, ondownload, element);\n\n // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n // web socket which is closed, not our websocket->open comm proxy.\n ws_proxy.onopen();\n\n fig.parent_element = element;\n fig.cell_info = mpl.find_output_cell(\"
\");\n if (!fig.cell_info) {\n console.error('Failed to find cell for figure', id, fig);\n return;\n }\n fig.cell_info[0].output_area.element.on(\n 'cleared',\n { fig: fig },\n fig._remove_fig_handler\n );\n};\n\nmpl.figure.prototype.handle_close = function (fig, msg) {\n var width = fig.canvas.width / fig.ratio;\n fig.cell_info[0].output_area.element.off(\n 'cleared',\n fig._remove_fig_handler\n );\n fig.resizeObserverInstance.unobserve(fig.canvas_div);\n\n // Update the output cell to use the data from the current canvas.\n fig.push_to_output();\n var dataURL = fig.canvas.toDataURL();\n // Re-enable the keyboard manager in IPython - without this line, in FF,\n // the notebook keyboard shortcuts fail.\n IPython.keyboard_manager.enable();\n fig.parent_element.innerHTML =\n '';\n fig.close_ws(fig, msg);\n};\n\nmpl.figure.prototype.close_ws = function (fig, msg) {\n fig.send_message('closing', msg);\n // fig.ws.close()\n};\n\nmpl.figure.prototype.push_to_output = function (_remove_interactive) {\n // Turn the data on the canvas into data in the output cell.\n var width = this.canvas.width / this.ratio;\n var dataURL = this.canvas.toDataURL();\n this.cell_info[1]['text/html'] =\n '';\n};\n\nmpl.figure.prototype.updated_canvas_event = function () {\n // Tell IPython that the notebook contents must change.\n IPython.notebook.set_dirty(true);\n this.send_message('ack', {});\n var fig = this;\n // Wait a second, then push the new image to the DOM so\n // that it is saved nicely (might be nice to debounce this).\n setTimeout(function () {\n fig.push_to_output();\n }, 1000);\n};\n\nmpl.figure.prototype._init_toolbar = function () {\n var fig = this;\n\n var toolbar = document.createElement('div');\n toolbar.classList = 'btn-toolbar';\n this.root.appendChild(toolbar);\n\n function on_click_closure(name) {\n return function (_event) {\n return fig.toolbar_button_onclick(name);\n };\n }\n\n function on_mouseover_closure(tooltip) {\n return function (event) {\n if (!event.currentTarget.disabled) {\n return fig.toolbar_button_onmouseover(tooltip);\n }\n };\n }\n\n fig.buttons = {};\n var buttonGroup = document.createElement('div');\n buttonGroup.classList = 'btn-group';\n var button;\n for (var toolbar_ind in mpl.toolbar_items) {\n var name = mpl.toolbar_items[toolbar_ind][0];\n var tooltip = mpl.toolbar_items[toolbar_ind][1];\n var image = mpl.toolbar_items[toolbar_ind][2];\n var method_name = mpl.toolbar_items[toolbar_ind][3];\n\n if (!name) {\n /* Instead of a spacer, we start a new button group. */\n if (buttonGroup.hasChildNodes()) {\n toolbar.appendChild(buttonGroup);\n }\n buttonGroup = document.createElement('div');\n buttonGroup.classList = 'btn-group';\n continue;\n }\n\n button = fig.buttons[name] = document.createElement('button');\n button.classList = 'btn btn-default';\n button.href = '#';\n button.title = name;\n button.innerHTML = '';\n button.addEventListener('click', on_click_closure(method_name));\n button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n buttonGroup.appendChild(button);\n }\n\n if (buttonGroup.hasChildNodes()) {\n toolbar.appendChild(buttonGroup);\n }\n\n // Add the status bar.\n var status_bar = document.createElement('span');\n status_bar.classList = 'mpl-message pull-right';\n toolbar.appendChild(status_bar);\n this.message = status_bar;\n\n // Add the close button to the window.\n var buttongrp = document.createElement('div');\n buttongrp.classList = 'btn-group inline pull-right';\n button = document.createElement('button');\n button.classList = 'btn btn-mini btn-primary';\n button.href = '#';\n button.title = 'Stop Interaction';\n button.innerHTML = '';\n button.addEventListener('click', function (_evt) {\n fig.handle_close(fig, {});\n });\n button.addEventListener(\n 'mouseover',\n on_mouseover_closure('Stop Interaction')\n );\n buttongrp.appendChild(button);\n var titlebar = this.root.querySelector('.ui-dialog-titlebar');\n titlebar.insertBefore(buttongrp, titlebar.firstChild);\n};\n\nmpl.figure.prototype._remove_fig_handler = function (event) {\n var fig = event.data.fig;\n if (event.target !== this) {\n // Ignore bubbled events from children.\n return;\n }\n fig.close_ws(fig, {});\n};\n\nmpl.figure.prototype._root_extra_style = function (el) {\n el.style.boxSizing = 'content-box'; // override notebook setting of border-box.\n};\n\nmpl.figure.prototype._canvas_extra_style = function (el) {\n // this is important to make the div 'focusable\n el.setAttribute('tabindex', 0);\n // reach out to IPython and tell the keyboard manager to turn it's self\n // off when our div gets focus\n\n // location in version 3\n if (IPython.notebook.keyboard_manager) {\n IPython.notebook.keyboard_manager.register_events(el);\n } else {\n // location in version 2\n IPython.keyboard_manager.register_events(el);\n }\n};\n\nmpl.figure.prototype._key_event_extra = function (event, _name) {\n var manager = IPython.notebook.keyboard_manager;\n if (!manager) {\n manager = IPython.keyboard_manager;\n }\n\n // Check for shift+enter\n if (event.shiftKey && event.which === 13) {\n this.canvas_div.blur();\n // select the cell after this one\n var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n IPython.notebook.select(index + 1);\n }\n};\n\nmpl.figure.prototype.handle_save = function (fig, _msg) {\n fig.ondownload(fig, null);\n};\n\nmpl.find_output_cell = function (html_output) {\n // Return the cell and output element which can be found *uniquely* in the notebook.\n // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n // IPython event is triggered only after the cells have been serialised, which for\n // our purposes (turning an active figure into a static one), is too late.\n var cells = IPython.notebook.get_cells();\n var ncells = cells.length;\n for (var i = 0; i < ncells; i++) {\n var cell = cells[i];\n if (cell.cell_type === 'code') {\n for (var j = 0; j < cell.output_area.outputs.length; j++) {\n var data = cell.output_area.outputs[j];\n if (data.data) {\n // IPython >= 3 moved mimebundle to data attribute of output\n data = data.data;\n }\n if (data['text/html'] === html_output) {\n return [cell, data, j];\n }\n }\n }\n }\n};\n\n// Register the function which deals with the matplotlib target/channel.\n// The kernel may be null if the page has been refreshed.\nif (IPython.notebook.kernel !== null) {\n IPython.notebook.kernel.comm_manager.register_target(\n 'matplotlib',\n mpl.mpl_figure_comm\n );\n}\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "res = train_and_plot(30,net,lr=0.01)" + ] }, { "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ - "## Why Not Always Use Multi-Layered Model?\r\n", - "\r\n", - "We have seen that multi-layered model is more *powerful* and *expressive*, than one-layered one. You may be wondering why don't we always use many-layered model. The answer to this question is **overfitting**.\r\n", - "\r\n", - "We will deal with this term more in a later sections, but the idea is the following: **the more powerful the model is, the better it can approximate training data, and the more data it needs to properly generalize** for the new data it has not seen before.\r\n", - "\r\n", - "**A linear model:**\r\n", - "* We are likely to get high training loss - so-called **underfitting**, when the model does not have enough power to correctly separate all data. \r\n", - "* Valiadation loss and training loss are more or less the same. The model is likely to generalize well to test data.\r\n", - "\r\n", - "**Complex multi-layered model**\r\n", - "* Low training loss - the model can approximate training data well, because it has enough expressive power.\r\n", - "* Validation loss can be much higher than training loss and can start to increase during training - this is because the model \"memorizes\" training points, and loses the \"overall picture\"\r\n", - "\r\n", - "![Overfitting](images/overfit.png)\r\n", - "\r\n", + "## Why Not Always Use Multi-Layered Model?\n", + "\n", + "We have seen that multi-layered model is more *powerful* and *expressive*, than one-layered one. You may be wondering why don't we always use many-layered model. The answer to this question is **overfitting**.\n", + "\n", + "We will deal with this term more in a later sections, but the idea is the following: **the more powerful the model is, the better it can approximate training data, and the more data it needs to properly generalize** for the new data it has not seen before.\n", + "\n", + "**A linear model:**\n", + "* We are likely to get high training loss - so-called **underfitting**, when the model does not have enough power to correctly separate all data. \n", + "* Valiadation loss and training loss are more or less the same. The model is likely to generalize well to test data.\n", + "\n", + "**Complex multi-layered model**\n", + "* Low training loss - the model can approximate training data well, because it has enough expressive power.\n", + "* Validation loss can be much higher than training loss and can start to increase during training - this is because the model \"memorizes\" training points, and loses the \"overall picture\"\n", + "\n", + "![Overfitting](images/overfit.png)\n", + "\n", "> On this picture, `x` stands for training data, `o` - validation data. Left - linear model (one-layer), it approximates the nature of the data pretty well. Right - overfitted model, the model perfectly well approximates training data, but stops making sense with any other data (validation error is very high)" - ], + ] + }, + { + "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } - } - }, - { - "cell_type": "markdown", + }, "source": [ - "## Takeaways\r\n", - "\r\n", - "* Simple models (fewer layers, fewer neurons) with low number of parameters (\"low capacity\") are less likely to overfit\r\n", - "* More complex models (more layers, more neurons on each layer, high capacity) are likely to overfit. We need to monitor validation error to make sure it does not start to rise with further training\r\n", - "* More complex models need more data to train on.\r\n", - "* You can solve overfitting problem by either:\r\n", - " - simplifying your model\r\n", - " - increasing the amount of training data\r\n", - "* **Bias-variance trade-off** is a term that shows that you need to get the compromise\r\n", - " - between power of the model and amount of data,\r\n", - " - between overfittig and underfitting\r\n", + "## Takeaways\n", + "\n", + "* Simple models (fewer layers, fewer neurons) with low number of parameters (\"low capacity\") are less likely to overfit\n", + "* More complex models (more layers, more neurons on each layer, high capacity) are likely to overfit. We need to monitor validation error to make sure it does not start to rise with further training\n", + "* More complex models need more data to train on.\n", + "* You can solve overfitting problem by either:\n", + " - simplifying your model\n", + " - increasing the amount of training data\n", + "* **Bias-variance trade-off** is a term that shows that you need to get the compromise\n", + " - between power of the model and amount of data,\n", + " - between overfittig and underfitting\n", "* There is not single recipe on how many layers of parameters you need - the best way is to experiment" - ], - "metadata": { - "slideshow": { - "slide_type": "slide" - } - } + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ - "## Credits\r\n", - "\r\n", + "## Credits\n", + "\n", "This notebook is a part of [AI for Beginners Curricula](http://github.com/microsoft/ai-for-beginners), and has been prepared by [Dmitry Soshnikov](http://soshnikov.com). It is inspired by Neural Network Workshop at Microsoft Research Cambridge. Some code and illustrative materials are taken from presentations by [Katja Hoffmann](https://www.microsoft.com/en-us/research/people/kahofman/), [Matthew Johnson](https://www.microsoft.com/en-us/research/people/matjoh/) and [Ryoto Tomioka](https://www.microsoft.com/en-us/research/people/ryoto/), and from [NeuroWorkshop](http://github.com/shwars/NeuroWorkshop) repository." - ], - "metadata": {} + ] } ], "metadata": { "celltoolbar": "Slideshow", + "interpreter": { + "hash": "86193a1ab0ba47eac1c69c1756090baa3b420b3eea7d4aafab8b85f8b312f0c5" + }, "kernelspec": { - "name": "python3", - "display_name": "Python 3.8.8 64-bit ('base': conda)" + "display_name": "Python 3.9.5 64-bit ('base': conda)", + "name": "python3" }, "language_info": { "codemirror_mode": { @@ -1104,15 +1323,12 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.8" + "version": "3.9.5" }, "livereveal": { "start_slideshow_at": "selected" - }, - "interpreter": { - "hash": "86193a1ab0ba47eac1c69c1756090baa3b420b3eea7d4aafab8b85f8b312f0c5" } }, "nbformat": 4, "nbformat_minor": 1 -} \ No newline at end of file +} diff --git a/3-NeuralNetworks/04-OwnFramework/README.md b/3-NeuralNetworks/04-OwnFramework/README.md index de092520..18db044d 100644 --- a/3-NeuralNetworks/04-OwnFramework/README.md +++ b/3-NeuralNetworks/04-OwnFramework/README.md @@ -14,12 +14,12 @@ We will also develop our own modular framework in Python that will allows us to Let's start with formalizing the Machine Learning problem. Suppose we have a training dataset **X** with labels **Y**, and we need to build a model *f* that will make most accurate predictions. The quality of predictions is measured by **Loss function** ℒ. The following loss functions are often used: -* For regression problem, when we need to predict a number, we can use **absolute error** ∑i|f(x(i))-y(i)|, or **squared error** ∑i(f(x(i))-y(i))2 +* For regression problem, when we need to predict a number, we can use **absolute error** ∑i|f(x(i))-y(i)|, or **squared error** ∑i(f(x(i))-y(i))2 * For classification, we use **0-1 loss** (which is essentially the same as **accuracy** of the model), or **logistic loss**. For one-level perceptron, function *f* was defined as a linear function *f(x)=wx+b* (here *w* is the weight matrix, *x* is the vector if input features, and *b* is bias vector). For different neural network architectures, this function can take more complex form. -> In the case of classification, it is often desirable to get probabilities of corresponding classes as network output. To convert arbitrary numbers to probabilities (eg. to normalize the output), we often use **softmax** function σ, for the function *f* becomes *f(x)=σ(wx+b)* +> In the case of classification, it is often desirable to get probabilities of corresponding classes as network output. To convert arbitrary numbers to probabilities (eg. to normalize the output), we often use **softmax** function σ, and the function *f* becomes *f(x)=σ(wx+b)* In the definition of *f* above, *w* and *b* are called **parameters** θ=⟨*w,b*⟩. Given the dataset ⟨**X**,**Y**⟩, we can compute an overall error on the whole dataset as a function of parameters θ. @@ -43,7 +43,7 @@ One-layer network, as we have seen above, is capable of classifying linearly sep * z2=w2α(z1)+b2 * f = σ(z2) -Here, α is a **non-linear activation function**, σ is a softmax function, and θ=<*w1,b1,w2,b2*> are parameters. +Here, α is a **non-linear activation function**, σ is a softmax function, and parameters θ=<*w1,b1,w2,b2*>. The gradient descent algorithm would remain the same, but it would be more difficult to calculate gradients. Given the chain differentiation rule, we can calculate derivatives as: @@ -51,9 +51,11 @@ The gradient descent algorithm would remain the same, but it would be more diffi * ∂ℒ/∂w2 = (∂ℒ/∂σ)(∂σ/∂z2)(∂z2/∂w2) * ∂ℒ/∂w1 = (∂ℒ/∂σ)(∂σ/∂z2)(∂z2/∂α)(∂α/∂z1)(∂z1/∂w1) -Note that the beginning of all those expressions are the same, and thus we can effectively calculate derivatives starting from the loss function and going "backwards" through the computational graph. Thus the method of training multi-layered perceptron is called **back propagation**. +Note that the left-most part of all those expressions is the same, and thus we can effectively calculate derivatives starting from the loss function and going "backwards" through the computational graph. Thus the method of training multi-layered perceptron is called **back propagation**. -> We will cover back prop in much more detail in our notebook example. + + +We will cover back prop in much more detail in our notebook example. ## [Proceed to Notebook](OwnFramework.ipynb) In the accompanying notebook, we will implement our own framework for building and training multi-layered perceptrons. You will be able to see in detail how modern neural networks operate. Proceed to [OwnFramework](OwnFramework.ipynb) notebook. diff --git a/3-NeuralNetworks/05-Frameworks/IntroKerasTF.ipynb b/3-NeuralNetworks/05-Frameworks/IntroKerasTF.ipynb index f172f8e1..588d8652 100644 --- a/3-NeuralNetworks/05-Frameworks/IntroKerasTF.ipynb +++ b/3-NeuralNetworks/05-Frameworks/IntroKerasTF.ipynb @@ -691,7 +691,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 96, "metadata": { "id": "j0OTPkGpwHl7", "scrolled": false, @@ -703,7 +703,7 @@ "\n", "n = 100\n", "X, Y = make_classification(n_samples = n, n_features=2,\n", - " n_redundant=0, n_informative=2, flip_y=0.2,class_sep=1)\n", + " n_redundant=0, n_informative=2, flip_y=0.1,class_sep=1)\n", "X = X.astype(np.float32)\n", "Y = Y.astype(np.int32)\n", "\n", @@ -714,7 +714,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 97, "metadata": { "id": "c-_BjSHPwHl8", "scrolled": false, @@ -743,7 +743,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 98, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -765,7 +765,7 @@ }, { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -780,6 +780,28 @@ "plot_dataset(train_x, train_labels)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Normalizing Data\n", + "\n", + "Before training, it is common to bring our input features to the standard range of [0,1] (or [-1,1]). The exact reasons for that we will discuss later in the course, but in short the reason is the following. We want to avoid values that flow through our network getting too big or too small, and we normally agree to keep all values in the small range close to 0. Thus we initialize the weights with small random numbers, and we keep signals in the same range.\n", + "\n", + "When normalizing data, we need to subtract min value and divide by range. We compute min value and range using training data, and then normalize test/validation dataset using the same min/range values from the training set. This is because in real life we will only know the training set, and not all incoming new values that the network would be asked to predict. Occasionally, the new value may fall out of the [0,1] range, but that's not crucial. " + ] + }, + { + "cell_type": "code", + "execution_count": 99, + "metadata": {}, + "outputs": [], + "source": [ + "train_x_norm = train_x-np.min(train_x) / (np.max(train_x)-np.min(train_x))\n", + "valid_x_norm = valid_x-np.min(train_x) / (np.max(train_x)-np.min(train_x))\n", + "test_x_norm = test_x-np.min(train_x) / (np.max(train_x)-np.min(train_x))" + ] + }, { "cell_type": "markdown", "metadata": { @@ -801,7 +823,7 @@ }, { "cell_type": "code", - "execution_count": 57, + "execution_count": 112, "metadata": { "id": "kdDxWeCqwHl8", "trusted": true @@ -818,7 +840,7 @@ " with tf.GradientTape() as tape:\n", " z = tf.matmul(x, W) + b\n", " loss = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(labels=y,logits=z))\n", - " dloss_dw, dloss_db = tape.gradient(loss, [W, b])\n", + " dloss_dw, dloss_db = tape.gradient(loss, [W, b])\n", " W.assign_sub(learning_rate * dloss_dw)\n", " b.assign_sub(learning_rate * dloss_db)\n", " return loss" @@ -835,7 +857,7 @@ }, { "cell_type": "code", - "execution_count": 58, + "execution_count": 113, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -849,30 +871,25 @@ "name": "stdout", "output_type": "stream", "text": [ - "Epoch 0: last batch loss = 0.8960\n", - "Epoch 1: last batch loss = 0.7991\n", - "Epoch 2: last batch loss = 0.8121\n", - "Epoch 3: last batch loss = 0.9656\n", - "Epoch 4: last batch loss = 0.7388\n", - "Epoch 5: last batch loss = 1.0532\n", - "Epoch 6: last batch loss = 0.7494\n", - "Epoch 7: last batch loss = 0.8559\n", - "Epoch 8: last batch loss = 0.8226\n", - "Epoch 9: last batch loss = 0.7524\n", - "Epoch 10: last batch loss = 0.9427\n", - "Epoch 11: last batch loss = 0.6479\n", - "Epoch 12: last batch loss = 0.7756\n", - "Epoch 13: last batch loss = 0.7771\n", - "Epoch 14: last batch loss = 0.7996\n" + "Epoch 0: last batch loss = 1.4609\n", + "Epoch 1: last batch loss = 1.4618\n", + "Epoch 2: last batch loss = 1.2848\n", + "Epoch 3: last batch loss = 0.6062\n", + "Epoch 4: last batch loss = 0.3228\n", + "Epoch 5: last batch loss = 0.3865\n", + "Epoch 6: last batch loss = 0.3459\n", + "Epoch 7: last batch loss = 0.4791\n", + "Epoch 8: last batch loss = 0.9512\n", + "Epoch 9: last batch loss = 0.3132\n" ] } ], "source": [ "# Create a tf.data.Dataset object for easy batched iteration\n", - "dataset = tf.data.Dataset.from_tensor_slices((train_x, train_labels.astype(np.float32)))\n", - "dataset = dataset.shuffle(128).batch(16)\n", + "dataset = tf.data.Dataset.from_tensor_slices((train_x_norm.astype(np.float32), train_labels.astype(np.float32)))\n", + "dataset = dataset.shuffle(128).batch(4)\n", "\n", - "for epoch in range(15):\n", + "for epoch in range(10):\n", " for step, (x, y) in enumerate(dataset):\n", " loss = train_on_batch(x, tf.expand_dims(y,1))\n", " print('Epoch %d: last batch loss = %.4f' % (epoch, float(loss)))" @@ -889,7 +906,7 @@ }, { "cell_type": "code", - "execution_count": 49, + "execution_count": 114, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -910,7 +927,7 @@ }, { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -934,7 +951,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 65, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -947,16 +964,16 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 23, + "execution_count": 65, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -983,7 +1000,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 66, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -998,7 +1015,7 @@ "" ] }, - "execution_count": 24, + "execution_count": 66, "metadata": {}, "output_type": "execute_result" } @@ -1032,7 +1049,7 @@ }, { "cell_type": "code", - "execution_count": 52, + "execution_count": 70, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1045,54 +1062,32 @@ "name": "stdout", "output_type": "stream", "text": [ - "Epoch 0: last batch loss = 1.4725, acc = 1.0000\n", - "Epoch 1: last batch loss = 5.4883, acc = 0.6667\n", - "Epoch 2: last batch loss = 3.4839, acc = 0.8333\n", - "Epoch 3: last batch loss = 6.0828, acc = 0.6667\n", - "Epoch 4: last batch loss = 7.4671, acc = 0.3333\n", - "Epoch 5: last batch loss = 4.8935, acc = 0.8333\n", - "Epoch 6: last batch loss = 4.5684, acc = 0.8333\n", - "Epoch 7: last batch loss = 4.8099, acc = 0.6667\n", - "Epoch 8: last batch loss = 6.8351, acc = 0.5000\n", - "Epoch 9: last batch loss = 4.1826, acc = 0.8333\n", - "Epoch 10: last batch loss = 4.8398, acc = 0.8333\n", - "Epoch 11: last batch loss = 5.0882, acc = 0.8333\n", - "Epoch 12: last batch loss = 3.6824, acc = 1.0000\n", - "Epoch 13: last batch loss = 2.9054, acc = 1.0000\n", - "Epoch 14: last batch loss = 3.8756, acc = 1.0000\n", - "Epoch 15: last batch loss = 5.0647, acc = 1.0000\n", - "Epoch 16: last batch loss = 3.7667, acc = 1.0000\n", - "Epoch 17: last batch loss = 2.2130, acc = 1.0000\n", - "Epoch 18: last batch loss = 3.9063, acc = 0.8333\n", - "Epoch 19: last batch loss = 5.5129, acc = 0.6667\n", - "Epoch 20: last batch loss = 6.1930, acc = 0.6667\n", - "Epoch 21: last batch loss = 5.8449, acc = 0.6667\n", - "Epoch 22: last batch loss = 2.4126, acc = 1.0000\n", - "Epoch 23: last batch loss = 2.6007, acc = 0.8333\n", - "Epoch 24: last batch loss = 2.1278, acc = 0.8333\n", - "Epoch 25: last batch loss = 2.1106, acc = 1.0000\n", - "Epoch 26: last batch loss = 5.0858, acc = 0.5000\n", - "Epoch 27: last batch loss = 5.0222, acc = 0.6667\n", - "Epoch 28: last batch loss = 5.5569, acc = 0.6667\n", - "Epoch 29: last batch loss = 6.2620, acc = 0.6667\n", - "Epoch 30: last batch loss = 2.6355, acc = 0.8333\n", - "Epoch 31: last batch loss = 3.6728, acc = 0.8333\n", - "Epoch 32: last batch loss = 4.3967, acc = 0.6667\n", - "Epoch 33: last batch loss = 4.1097, acc = 0.8333\n", - "Epoch 34: last batch loss = 0.6812, acc = 1.0000\n", - "Epoch 35: last batch loss = 4.7926, acc = 0.6667\n", - "Epoch 36: last batch loss = 3.1601, acc = 0.8333\n", - "Epoch 37: last batch loss = 1.8902, acc = 1.0000\n", - "Epoch 38: last batch loss = 7.0491, acc = 0.5000\n", - "Epoch 39: last batch loss = 1.2064, acc = 1.0000\n" + "Epoch 0: last batch loss = 9.8168, acc = 0.1667\n", + "Epoch 1: last batch loss = 9.3657, acc = 0.1667\n", + "Epoch 2: last batch loss = 4.4084, acc = 0.8333\n", + "Epoch 3: last batch loss = 6.0470, acc = 0.8333\n", + "Epoch 4: last batch loss = 9.8649, acc = 0.3333\n", + "Epoch 5: last batch loss = 6.8309, acc = 0.5000\n", + "Epoch 6: last batch loss = 4.8908, acc = 0.8333\n", + "Epoch 7: last batch loss = 11.3577, acc = 0.1667\n", + "Epoch 8: last batch loss = 9.0503, acc = 0.5000\n", + "Epoch 9: last batch loss = 5.9413, acc = 0.6667\n", + "Epoch 10: last batch loss = 4.5841, acc = 0.6667\n", + "Epoch 11: last batch loss = 5.6880, acc = 0.8333\n", + "Epoch 12: last batch loss = 6.4425, acc = 0.6667\n", + "Epoch 13: last batch loss = 7.7689, acc = 0.6667\n", + "Epoch 14: last batch loss = 8.0344, acc = 0.5000\n", + "Epoch 15: last batch loss = 6.3421, acc = 0.6667\n", + "Epoch 16: last batch loss = 5.5468, acc = 0.8333\n", + "Epoch 17: last batch loss = 5.4036, acc = 0.5000\n", + "Epoch 18: last batch loss = 9.8040, acc = 0.1667\n", + "Epoch 19: last batch loss = 5.6883, acc = 0.6667\n" ] } ], "source": [ "optimizer = tf.keras.optimizers.Adam(0.01)\n", "\n", - "learning_rate = 0.05\n", - "\n", "W = tf.Variable(tf.random.normal(shape=(2,1)))\n", "b = tf.Variable(tf.zeros(shape=(1,),dtype=tf.float32))\n", "\n", @@ -1108,7 +1103,7 @@ " optimizer.apply_gradients(zip(grads,vars))\n", " return loss,acc\n", "\n", - "for epoch in range(40):\n", + "for epoch in range(20):\n", " for step, (x, y) in enumerate(dataset):\n", " loss,acc = train_on_batch(tf.reshape(x,(-1,2)), tf.reshape(y,(-1,1)))\n", " print('Epoch %d: last batch loss = %.4f, acc = %.4f' % (epoch, float(loss),acc))" @@ -1219,8 +1214,6 @@ "z = tf.keras.layers.Dense(1,kernel_initializer='glorot_uniform',activation='sigmoid')(inputs)\n", "model = tf.keras.models.Model(inputs,z)\n", "\n", - "train_x_norm = train_x-np.min(train_x) / (np.max(train_x)-np.min(train_x))\n", - "\n", "model.compile(tf.keras.optimizers.Adam(0.1),'binary_crossentropy',['accuracy'])\n", "model.summary()\n", "h = model.fit(train_x_norm,train_labels,batch_size=8,epochs=15)" @@ -1351,10 +1344,6 @@ "model.add(tf.keras.layers.Dense(5,activation='sigmoid',input_shape=(2,)))\n", "model.add(tf.keras.layers.Dense(1,activation='sigmoid'))\n", "\n", - "test_x_norm = test_x-np.min(train_x) / (np.max(train_x)-np.min(train_x))\n", - "# This is not an error: we use min/man on training data when normalizing our test data\n", - "# Because we want to use the same normalization during both training and testing\n", - "\n", "model.compile(tf.keras.optimizers.Adam(0.1),'binary_crossentropy',['accuracy'])\n", "model.summary()\n", "model.fit(train_x_norm,train_labels,validation_data=(test_x_norm,test_labels),batch_size=8,epochs=15)" diff --git a/3-NeuralNetworks/05-Frameworks/IntroPyTorch.ipynb b/3-NeuralNetworks/05-Frameworks/IntroPyTorch.ipynb index 9ffddec2..5a3918b8 100644 --- a/3-NeuralNetworks/05-Frameworks/IntroPyTorch.ipynb +++ b/3-NeuralNetworks/05-Frameworks/IntroPyTorch.ipynb @@ -52,7 +52,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 41, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -69,7 +69,7 @@ "'1.8.2'" ] }, - "execution_count": 1, + "execution_count": 41, "metadata": {}, "output_type": "execute_result" } @@ -108,7 +108,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 42, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -124,16 +124,16 @@ "text": [ "tensor([[1, 2],\n", " [3, 4]])\n", - "tensor([[-0.7488, 0.5776, 0.0520],\n", - " [-0.5258, -1.6104, 0.4226],\n", - " [ 2.0568, 0.4692, 0.5858],\n", - " [-1.2225, -1.6223, -0.3628],\n", - " [-2.7874, 1.0577, 0.9720],\n", - " [-1.6521, 1.4820, -1.1416],\n", - " [-1.0172, -0.3259, -1.4338],\n", - " [-0.7763, -1.1454, -0.5500],\n", - " [-2.1639, -0.2575, -0.8015],\n", - " [-0.1890, -0.7774, -0.2899]])\n" + "tensor([[ 0.5323, -0.2154, 0.7426],\n", + " [ 1.1795, 1.3732, 1.3171],\n", + " [ 0.8288, -0.6264, -0.7545],\n", + " [-1.5020, 1.7313, 0.1916],\n", + " [ 1.2507, 1.5185, 0.5336],\n", + " [-0.0771, 0.2244, -1.0394],\n", + " [ 0.4770, 2.1839, 0.5404],\n", + " [-0.4145, 1.4427, -1.6582],\n", + " [-0.6721, -0.2278, 1.9838],\n", + " [ 0.4876, 0.8315, 1.1669]])\n" ] } ], @@ -155,7 +155,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 43, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -169,16 +169,16 @@ "output_type": "stream", "text": [ "tensor([[ 0.0000, 0.0000, 0.0000],\n", - " [ 0.2230, -2.1880, 0.3706],\n", - " [ 2.8056, -0.1084, 0.5339],\n", - " [-0.4737, -2.1999, -0.4148],\n", - " [-2.0386, 0.4801, 0.9200],\n", - " [-0.9033, 0.9044, -1.1936],\n", - " [-0.2685, -0.9035, -1.4857],\n", - " [-0.0275, -1.7230, -0.6019],\n", - " [-1.4151, -0.8351, -0.8535],\n", - " [ 0.5598, -1.3550, -0.3418]])\n", - "[0.47294793 1.7817812 1.0533323 ]\n" + " [ 0.6471, 1.5885, 0.5746],\n", + " [ 0.2964, -0.4110, -1.4971],\n", + " [-2.0343, 1.9467, -0.5510],\n", + " [ 0.7183, 1.7339, -0.2089],\n", + " [-0.6094, 0.4398, -1.7820],\n", + " [-0.0553, 2.3993, -0.2021],\n", + " [-0.9468, 1.6581, -2.4007],\n", + " [-1.2044, -0.0124, 1.2413],\n", + " [-0.0447, 1.0469, 0.4244]])\n", + "[1.7028859 0.8062281 2.1013143]\n" ] } ], @@ -200,7 +200,7 @@ }, { "cell_type": "code", - "execution_count": 171, + "execution_count": 44, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -236,7 +236,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 45, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -249,7 +249,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "tensor([-9.0260, -2.1524, -2.5472])\n" + "tensor([2.0901, 8.2359, 3.0239])\n" ] } ], @@ -272,7 +272,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 46, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -284,10 +284,10 @@ { "data": { "text/plain": [ - "tensor([-9.0260, -2.1524, -2.5472])" + "tensor([2.0901, 8.2359, 3.0239])" ] }, - "execution_count": 5, + "execution_count": 46, "metadata": {}, "output_type": "execute_result" } @@ -318,7 +318,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 47, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -332,8 +332,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "tensor([[-0.2004, -0.0751],\n", - " [-0.2429, 0.1520]])\n" + "tensor([[-0.1491, 0.2151],\n", + " [-0.0360, 0.0569]])\n" ] } ], @@ -358,7 +358,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 48, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -371,10 +371,10 @@ "name": "stdout", "output_type": "stream", "text": [ - "tensor([[-0.6012, -0.2252],\n", - " [-0.7286, 0.4559]])\n", - "tensor([[-0.2004, -0.0751],\n", - " [-0.2429, 0.1520]])\n" + "tensor([[-0.4472, 0.6452],\n", + " [-0.1080, 0.1708]])\n", + "tensor([[-0.1491, 0.2151],\n", + " [-0.0360, 0.0569]])\n" ] } ], @@ -399,7 +399,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 49, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -412,7 +412,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "tensor(1.3326, grad_fn=)\n" + "tensor(1.2078, grad_fn=)\n" ] } ], @@ -448,7 +448,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 50, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -461,8 +461,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "tensor([[-1.0020, -0.0751],\n", - " [-0.2429, 0.7599]])\n" + "tensor([[-0.7453, 0.2151],\n", + " [-0.0360, 0.2847]])\n" ] } ], @@ -500,7 +500,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 51, "metadata": { "id": "nDw5mV9KEeOa" }, @@ -522,7 +522,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 52, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -576,7 +576,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 53, "metadata": { "id": "j723455WwHl7", "trusted": true @@ -592,7 +592,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 54, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -605,10 +605,10 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 14, + "execution_count": 54, "metadata": {}, "output_type": "execute_result" }, @@ -650,7 +650,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 55, "metadata": { "id": "QxhI4GlB6aiH" }, @@ -689,7 +689,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 56, "metadata": { "id": "-991PErM7fJU" }, @@ -717,7 +717,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 57, "metadata": { "id": "nOuu0qpx-wAp" }, @@ -731,7 +731,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 58, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -774,7 +774,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 59, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -789,7 +789,7 @@ "(tensor([1.8617], requires_grad=True), tensor([1.0711], requires_grad=True))" ] }, - "execution_count": 19, + "execution_count": 59, "metadata": {}, "output_type": "execute_result" } @@ -800,7 +800,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 60, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -813,10 +813,10 @@ { "data": { "text/plain": [ - "[]" + "[]" ] }, - "execution_count": 20, + "execution_count": 60, "metadata": {}, "output_type": "execute_result" }, @@ -854,7 +854,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 61, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -929,7 +929,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 62, "metadata": { "id": "j0OTPkGpwHl7", "scrolled": false, @@ -952,7 +952,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 63, "metadata": { "id": "c-_BjSHPwHl8", "scrolled": false, @@ -981,7 +981,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 64, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -1035,7 +1035,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 75, "metadata": { "id": "J1KaixW-cMWJ" }, @@ -1079,7 +1079,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 66, "metadata": { "id": "kdDxWeCqwHl8", "trusted": true @@ -1110,7 +1110,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 71, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1142,7 +1142,7 @@ " tensor([1., 1., 0., 0., 0., 0., 1., 0., 0., 1., 0., 1., 0., 0., 0., 0.])]" ] }, - "execution_count": 26, + "execution_count": 71, "metadata": {}, "output_type": "execute_result" } @@ -1166,7 +1166,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 78, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1179,21 +1179,21 @@ "name": "stdout", "output_type": "stream", "text": [ - "Epoch 0: last batch loss = 0.6423\n", - "Epoch 1: last batch loss = 0.6035\n", - "Epoch 2: last batch loss = 0.5813\n", - "Epoch 3: last batch loss = 0.5680\n", - "Epoch 4: last batch loss = 0.5597\n", - "Epoch 5: last batch loss = 0.5544\n", - "Epoch 6: last batch loss = 0.5510\n", - "Epoch 7: last batch loss = 0.5487\n", - "Epoch 8: last batch loss = 0.5472\n", - "Epoch 9: last batch loss = 0.5462\n", - "Epoch 10: last batch loss = 0.5455\n", - "Epoch 11: last batch loss = 0.5450\n", - "Epoch 12: last batch loss = 0.5447\n", - "Epoch 13: last batch loss = 0.5445\n", - "Epoch 14: last batch loss = 0.5443\n" + "Epoch 0: last batch loss = 0.6491\n", + "Epoch 1: last batch loss = 0.6064\n", + "Epoch 2: last batch loss = 0.5822\n", + "Epoch 3: last batch loss = 0.5679\n", + "Epoch 4: last batch loss = 0.5592\n", + "Epoch 5: last batch loss = 0.5537\n", + "Epoch 6: last batch loss = 0.5501\n", + "Epoch 7: last batch loss = 0.5478\n", + "Epoch 8: last batch loss = 0.5463\n", + "Epoch 9: last batch loss = 0.5454\n", + "Epoch 10: last batch loss = 0.5447\n", + "Epoch 11: last batch loss = 0.5443\n", + "Epoch 12: last batch loss = 0.5441\n", + "Epoch 13: last batch loss = 0.5439\n", + "Epoch 14: last batch loss = 0.5438\n" ] } ], @@ -1213,7 +1213,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 79, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1226,8 +1226,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "tensor([[1.0583],\n", - " [0.4454]], requires_grad=True) tensor([0.], requires_grad=True)\n" + "tensor([[1.0522],\n", + " [0.4444]], requires_grad=True) tensor([0.], requires_grad=True)\n" ] } ], @@ -1246,7 +1246,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 80, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -1267,7 +1267,7 @@ }, { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -1293,7 +1293,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 81, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1308,7 +1308,7 @@ "tensor(0.8667)" ] }, - "execution_count": 32, + "execution_count": 81, "metadata": {}, "output_type": "execute_result" } @@ -1357,7 +1357,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 82, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1371,8 +1371,8 @@ "output_type": "stream", "text": [ "[Parameter containing:\n", - "tensor([[-0.6290, 0.2565]], requires_grad=True), Parameter containing:\n", - "tensor([-0.6059], requires_grad=True)]\n" + "tensor([[0.6870, 0.1273]], requires_grad=True), Parameter containing:\n", + "tensor([0.6904], requires_grad=True)]\n" ] } ], @@ -1395,7 +1395,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 83, "metadata": { "id": "B4AxyrFMozh0" }, @@ -1415,7 +1415,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 84, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1428,16 +1428,16 @@ "name": "stdout", "output_type": "stream", "text": [ - "Epoch 0: last batch loss = 0.65546053647995, val acc = 0.20000000298023224\n", - "Epoch 1: last batch loss = 0.6187976002693176, val acc = 0.3333333432674408\n", - "Epoch 2: last batch loss = 0.5907494425773621, val acc = 0.3333333432674408\n", - "Epoch 3: last batch loss = 0.5694093108177185, val acc = 0.4000000059604645\n", - "Epoch 4: last batch loss = 0.5532841086387634, val acc = 0.46666666865348816\n", - "Epoch 5: last batch loss = 0.5412127375602722, val acc = 0.46666666865348816\n", - "Epoch 6: last batch loss = 0.5322896838188171, val acc = 0.46666666865348816\n", - "Epoch 7: last batch loss = 0.5258066058158875, val acc = 0.46666666865348816\n", - "Epoch 8: last batch loss = 0.5212085843086243, val acc = 0.6000000238418579\n", - "Epoch 9: last batch loss = 0.5180616974830627, val acc = 0.6000000238418579\n" + "Epoch 0: last batch loss = 0.6965743899345398, val acc = 0.7333333492279053\n", + "Epoch 1: last batch loss = 0.6784186959266663, val acc = 0.7333333492279053\n", + "Epoch 2: last batch loss = 0.6634390354156494, val acc = 0.800000011920929\n", + "Epoch 3: last batch loss = 0.6509400010108948, val acc = 0.800000011920929\n", + "Epoch 4: last batch loss = 0.6404023170471191, val acc = 0.800000011920929\n", + "Epoch 5: last batch loss = 0.6314342617988586, val acc = 0.800000011920929\n", + "Epoch 6: last batch loss = 0.6237367391586304, val acc = 0.800000011920929\n", + "Epoch 7: last batch loss = 0.6170788407325745, val acc = 0.800000011920929\n", + "Epoch 8: last batch loss = 0.6112800240516663, val acc = 0.800000011920929\n", + "Epoch 9: last batch loss = 0.6061977744102478, val acc = 0.800000011920929\n" ] } ], @@ -1469,7 +1469,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 85, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1482,16 +1482,16 @@ "name": "stdout", "output_type": "stream", "text": [ - "Epoch 0: last batch loss = 0.717000424861908, val acc = 0.800000011920929\n", - "Epoch 1: last batch loss = 0.6802961826324463, val acc = 0.800000011920929\n", - "Epoch 2: last batch loss = 0.6523239016532898, val acc = 0.800000011920929\n", - "Epoch 3: last batch loss = 0.6305356621742249, val acc = 0.8666666746139526\n", - "Epoch 4: last batch loss = 0.6132137775421143, val acc = 0.8666666746139526\n", - "Epoch 5: last batch loss = 0.5993289947509766, val acc = 0.8666666746139526\n", - "Epoch 6: last batch loss = 0.5882464051246643, val acc = 0.8666666746139526\n", - "Epoch 7: last batch loss = 0.5795158743858337, val acc = 0.8666666746139526\n", - "Epoch 8: last batch loss = 0.5727649331092834, val acc = 0.8666666746139526\n", - "Epoch 9: last batch loss = 0.5676581263542175, val acc = 0.8666666746139526\n" + "Epoch 0: last batch loss = 0.5223885774612427, val acc = 0.6000000238418579\n", + "Epoch 1: last batch loss = 0.5124126076698303, val acc = 0.6000000238418579\n", + "Epoch 2: last batch loss = 0.5077585577964783, val acc = 0.6666666865348816\n", + "Epoch 3: last batch loss = 0.5082311034202576, val acc = 0.800000011920929\n", + "Epoch 4: last batch loss = 0.5123199224472046, val acc = 0.7333333492279053\n", + "Epoch 5: last batch loss = 0.5183590054512024, val acc = 0.7333333492279053\n", + "Epoch 6: last batch loss = 0.5249963402748108, val acc = 0.7333333492279053\n", + "Epoch 7: last batch loss = 0.5313336253166199, val acc = 0.7333333492279053\n", + "Epoch 8: last batch loss = 0.5368850827217102, val acc = 0.7333333492279053\n", + "Epoch 9: last batch loss = 0.5414646863937378, val acc = 0.7333333492279053\n" ] } ], @@ -1526,7 +1526,7 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 86, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1563,7 +1563,7 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 87, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1576,16 +1576,16 @@ "name": "stdout", "output_type": "stream", "text": [ - "Epoch 0: last batch loss = 0.6754228472709656, val acc = 0.6000000238418579\n", - "Epoch 1: last batch loss = 0.639519453048706, val acc = 0.7333333492279053\n", - "Epoch 2: last batch loss = 0.606279194355011, val acc = 0.800000011920929\n", - "Epoch 3: last batch loss = 0.5834296345710754, val acc = 0.7333333492279053\n", - "Epoch 4: last batch loss = 0.5749474763870239, val acc = 0.7333333492279053\n", - "Epoch 5: last batch loss = 0.5772255063056946, val acc = 0.7333333492279053\n", - "Epoch 6: last batch loss = 0.5822412967681885, val acc = 0.7333333492279053\n", - "Epoch 7: last batch loss = 0.582870364189148, val acc = 0.7333333492279053\n", - "Epoch 8: last batch loss = 0.5753149390220642, val acc = 0.800000011920929\n", - "Epoch 9: last batch loss = 0.5589768886566162, val acc = 0.800000011920929\n" + "Epoch 0: last batch loss = 0.695976734161377, val acc = 0.6000000238418579\n", + "Epoch 1: last batch loss = 0.6832109093666077, val acc = 0.9333333373069763\n", + "Epoch 2: last batch loss = 0.6536983847618103, val acc = 0.800000011920929\n", + "Epoch 3: last batch loss = 0.6187950372695923, val acc = 0.7333333492279053\n", + "Epoch 4: last batch loss = 0.588731586933136, val acc = 0.8666666746139526\n", + "Epoch 5: last batch loss = 0.5675249099731445, val acc = 0.8666666746139526\n", + "Epoch 6: last batch loss = 0.5546941757202148, val acc = 0.8666666746139526\n", + "Epoch 7: last batch loss = 0.5478418469429016, val acc = 0.8666666746139526\n", + "Epoch 8: last batch loss = 0.5438018441200256, val acc = 0.9333333373069763\n", + "Epoch 9: last batch loss = 0.5394334197044373, val acc = 0.9333333373069763\n" ] } ], @@ -1606,7 +1606,7 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 88, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1647,7 +1647,7 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 89, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1660,16 +1660,16 @@ "name": "stdout", "output_type": "stream", "text": [ - "Epoch 0: last batch loss = 0.7940112948417664, val acc = 0.20000000298023224\n", - "Epoch 1: last batch loss = 0.7393167614936829, val acc = 0.20000000298023224\n", - "Epoch 2: last batch loss = 0.693408727645874, val acc = 0.13333334028720856\n", - "Epoch 3: last batch loss = 0.6558710336685181, val acc = 0.13333334028720856\n", - "Epoch 4: last batch loss = 0.6256343722343445, val acc = 0.2666666805744171\n", - "Epoch 5: last batch loss = 0.6012560129165649, val acc = 0.3333333432674408\n", - "Epoch 6: last batch loss = 0.5820637345314026, val acc = 0.3333333432674408\n", - "Epoch 7: last batch loss = 0.5663362145423889, val acc = 0.3333333432674408\n", - "Epoch 8: last batch loss = 0.5532793998718262, val acc = 0.3333333432674408\n", - "Epoch 9: last batch loss = 0.541694700717926, val acc = 0.4000000059604645\n" + "Epoch 0: last batch loss = 0.5920814275741577, val acc = 0.8666666746139526\n", + "Epoch 1: last batch loss = 0.5768700242042542, val acc = 0.8666666746139526\n", + "Epoch 2: last batch loss = 0.5623482465744019, val acc = 0.8666666746139526\n", + "Epoch 3: last batch loss = 0.547980785369873, val acc = 0.8666666746139526\n", + "Epoch 4: last batch loss = 0.5350895524024963, val acc = 0.8666666746139526\n", + "Epoch 5: last batch loss = 0.5235971808433533, val acc = 0.8666666746139526\n", + "Epoch 6: last batch loss = 0.5140454173088074, val acc = 0.8666666746139526\n", + "Epoch 7: last batch loss = 0.5063431859016418, val acc = 0.9333333373069763\n", + "Epoch 8: last batch loss = 0.5004293322563171, val acc = 0.9333333373069763\n", + "Epoch 9: last batch loss = 0.4957129955291748, val acc = 0.9333333373069763\n" ] } ], diff --git a/3-NeuralNetworks/05-Frameworks/README.md b/3-NeuralNetworks/05-Frameworks/README.md new file mode 100644 index 00000000..0fb50286 --- /dev/null +++ b/3-NeuralNetworks/05-Frameworks/README.md @@ -0,0 +1,37 @@ +# Neural Network Frameworks + +As we have learnt already, to be able to train neural networks efficiently we need to do two things: + +* To operate on tensors, eg. to multiply, add, and compute some functions such as sigmoid or softmax +* To compute gradients of all expressions, in order to perform gradient descent optimization + +While `numpy` library can do the first part, we need some mechanism to compute gradients. In [our framework](../04-OwnFramework/OwnFramework.ipynb) that we have developed in the previous section we had to manually program all derivative functions inside the `backward` method, which does back propagation. Ideally, a framework should give us the opportunity to compute gradients of *any expression* that we can define. + +Another important thing is to be able to perform computations on GPU, or any other specialized compute units, such as [TPU](https://en.wikipedia.org/wiki/Tensor_Processing_Unit). Deep neural network training requires *a lot* of computations, and to be able to parallelize those computations on GPUs is very important. + +Currently, there are two most popular neural frameworks: [Tensorflow](http://tensorflow.org), and [PyTorch](https://pytorch.org/). Both provide low-level API to operate with tensors on both CPU and GPU. On top of the low-level API, there is also higher-level API, called [Keras](https://keras.io/) and [PyTorch Lightning](https://pytorchlightning.ai/) correspondingly. + +Low-Level API | [TensorFlow](http://tensorflow.org) | [PyTorch](https://pytorch.org/) +--------------|-------------------------------------|-------------------------------- +High-level API| [Keras](https://keras.io/) | [PyTorch Lightning](https://pytorchlightning.ai/) + +**Low-level APIs** in both frameworks allow you to build so-called **computational graph**. This graph defines how to compute the output (usually the loss function) with given input parameters, and can be pushed for computation on GPU, if it is available. There are functions to differentiate this computational graph and compute gradients, which can then be used for optimizing model parameters. + +**High-level APIs** pretty much consider neural network as a **sequence of layers**, and make constructing most of the neural networks much easier. Training the model usually requires preparing the data and then calling `fit` function to do the job. + +High-level API allows you to construct typical neural networks very fast, without worrying about lots of details. At the same time, low-level API offer much more control over training process, and thus they are used a lot in research, when you are dealing with new neural network architectures. + +It is also important to understand that you can use both APIs together, eg. you can develop your own network layer architecture using low-level API, and then use it inside the larger network constructed and trained with high-level API. Or you can define a network using high-level API as a sequence of layers, and then use your own low-level training loop to perform optimization. Both APIs use the same basic underlying concepts, and they are designed to work well together. + +## Learning + +In this course, we offer most of the content both for PyTorch and Tensorflow. You can chose your preferred framework and only go through the corresponding notebooks. If you are not sure which framework to chose - read some discussions on the internet regarding **PyTorch vs. Tensorflow**. You can also have a look at both frameworks to get better understanding. + +Where possible, we will use High-Level APIs for simplicity. However, we believe it is important to understand how neural networks work from the ground up, thus in the beginning we start by working with low-level API and tensors. However, if you want to get going fast and do not want to spend a lot of time on details, you can skip those, and go straight into high-level API notebooks. + +## Continue into Notebooks + +Low-Level API | [TensorFlow+Keras Notebook](IntroKerasTF.ipynb) | [PyTorch](IntroPyTorch.ipynb) +--------------|-------------------------------------|-------------------------------- +High-level API| [Keras](IntroKeras.ipynb) | *PyTorch Lightning* + diff --git a/4-ComputerVision/07-ConvNets/ConfNetsTF.ipynb b/4-ComputerVision/07-ConvNets/ConfNetsTF.ipynb new file mode 100644 index 00000000..4f3976a2 --- /dev/null +++ b/4-ComputerVision/07-ConvNets/ConfNetsTF.ipynb @@ -0,0 +1,673 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Convolutional neural networks\n", + "\n", + "We have seen before that neural networks are quite good at dealing with images, and even one-layer perceptron is able to recognize handwritten digits from MNIST dataset with reasonable accuracy. However, MNIST dataset is very special, and all digits are centered inside the image, which makes the task simpler.\n", + "\n", + "In real life, we want to be able to recognize objects on the picture regardless of their exact location in the image. Computer vision is different from generic classification, because when we are trying to find a certain object in the picture, we are scanning the image looking for some specific **patterns** and their combinations. For example, when looking for a cat, we first may look for horizontal lines, which can form whiskers, and then certain combination of whiskers can tell us that it is actually a picture of a cat. Relative position and presence of certain patterns is important, and not their exact position on the image. \n", + "\n", + "To extract patterns, we will use the notion of **convolutional filters**. But first, let us load all dependencies and functions that we have defined in the previous units. We will also import `tfcv` helper library that contain some useful functions that we do not want to define inside this notebook to keep the code short and clean. " + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "import tensorflow as tf\n", + "from tensorflow import keras\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "from tfcv import *" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this example, we will focus on the MNIST dataset that we have seen before, and on image classification. We will start by loading the dataset using Keras built-in functions." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "(x_train,y_train),(x_test,y_test) = keras.datasets.mnist.load_data()\n", + "x_train = x_train.astype(np.float32) / 255.0\n", + "x_test = x_test.astype(np.float32) / 255.0" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Convolutional filters\n", + "\n", + "Convolutional filters are small windows that run over each pixel of the image and compute weighted average of the neighboring pixels.\n", + "\n", + "\n", + "\n", + "They are defined by matrices of weight coefficients. Let's see the examples of applying two different convolutional filters over our MNIST handwritten digits:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plot_convolution(x_train[:5],[[-1.,0.,1.],[-1.,0.,1.],[-1.,0.,1.]],'Vertical edge filter')\n", + "plot_convolution(x_train[:5],[[-1.,-1.,-1.],[0.,0.,0.],[1.,1.,1.]],'Horizontal edge filter')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "First filter is called a **vertical edge filter**, and it is defined by the following matrix:\n", + "$$\n", + "\\left(\n", + " \\begin{matrix}\n", + " -1 & 0 & 1 \\cr\n", + " -1 & 0 & 1 \\cr\n", + " -1 & 0 & 1 \\cr\n", + " \\end{matrix}\n", + "\\right)\n", + "$$\n", + "When this filter goes over relatively uniform pixel field, all values add up to 0. However, when it encounters a vertical edge in the image, high spike value is generated. That's why in the images above you can see vertical edges represented by high and low values, while horizontal edges are averaged out.\n", + "\n", + "An opposite thing happens when we apply horizontal edge filter - horizontal lines are amplified, and vertical are averaged out.\n", + "\n", + "In classical computer vision, multiple filters were applied to the image to generate features, which then were used by machine learning algorithm to build a classifier. Those filters are in fact similar to neural structures that are available in the vision system of some animals.\n", + "\n", + "\n", + "\n", + "However, in deep learning we construct networks that **learn** best convolutional filters to solve classification problem. To do that, we introduce **convolutional layers**." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Covolutional layers\n", + "\n", + "To make the weights of convolutional layer trainable, we need somehow to reduce the process of applying convolutional filter window to the image to the matrix operations, which can then be subject to backward propagation training. To do this, we use a clever matrix transformation, which we call **im2col**.\n", + "\n", + "Suppose we have a small image $\\mathbf{x}$, with the following pixels:\n", + "\n", + "$$\n", + "\\mathbf{x} = \\left(\n", + " \\begin{array}{ccccc}\n", + " a & b & c & d & e \\\\\n", + " f & g & h & i & j \\\\\n", + " k & l & m & n & o \\\\\n", + " p & q & r & s & t \\\\\n", + " u & v & w & x & y \\\\\n", + " \\end{array}\n", + " \\right)\n", + "$$\n", + "\n", + "And we want to apply two conv filters, with the following weights:\n", + "$$\n", + "W^{(i)} = \\left(\\begin{array}{ccc}\n", + " w^{(i)}_{00} & w^{(i)}_{01} & w^{(i)}_{02} \\\\\n", + " w^{(i)}_{10} & w^{(i)}_{11} & w^{(i)}_{12} \\\\\n", + " w^{(i)}_{20} & w^{(i)}_{21} & w^{(i)}_{22} \\\\\n", + " \\end{array}\\right) \n", + "$$\n", + "\n", + "When applying the convolution, the first pixel of the result would be obtained by element-wise multiplication of \n", + "$\\left(\\begin{array}{ccc}\n", + " a & b & c \\\\\n", + " f & g & h \\\\\n", + " k & l & m \\\\\n", + "\\end{array}\\right)$ and $W^{(i)}$, the second element - by multiplying by $\\left(\\begin{array}{ccc}\n", + " b & c & d \\\\\n", + " g & h & i \\\\\n", + " l & m & n \\\\\n", + "\\end{array}\\right)$ by $W^{(i)}$, and so on.\n", + "\n", + "To formalize this process, let's extract all $3\\times3$ fragments of the original image $x$ into the following matrix:\n", + "\n", + "$$\n", + "\\mathrm{im2col}(x) = \\left[\n", + " \\begin{array}{cccccc}\n", + " a & b & \\ldots & g & \\ldots & m \\\\\n", + " b & c & \\ldots & h & \\ldots & n \\\\\n", + " c & d & \\ldots & i & \\ldots & o \\\\\n", + " f & g & \\ldots & l & \\ldots & r \\\\\n", + " g & h & \\ldots & m & \\ldots & s \\\\\n", + " h & i & \\ldots & n & \\ldots & t \\\\\n", + " k & l & \\ldots & q & \\ldots & w \\\\\n", + " l & m & \\ldots & r & \\ldots & x \\\\\n", + " m & n & \\ldots & s & \\ldots & y \\\\\n", + " \\end{array}\n", + " \\right]\n", + "$$\n", + "\n", + "Each column of this matrix corresponds to each $3\\times3$ subregion of the original image. Now, to get the result of the convolution, we just need to multiply this matrix by the matrix or weights\n", + "$$\n", + "\\mathbf{W} = \\left[\n", + " \\begin{array}{cccccccc}\n", + " w^{(0)}_{00} & w^{(0)}_{01} & w^{(0)}_{02} & w^{(0)}_{10} & w^{(0)}_{11} & \\ldots & w^{(0)}_{21} & w^{(0)}_{22} \\\\\n", + " w^{(1)}_{00} & w^{(1)}_{01} & w^{(1)}_{02} & w^{(1)}_{10} & w^{(1)}_{11} & \\ldots & w^{(1)}_{21} & w^{(1)}_{22} \\\\\n", + " \\end{array}\n", + " \\right]\n", + "$$\n", + "(each row of this matrix contains weights of $i$-th filter, flattened into one row)\n", + "\n", + "So the application of a convolution filter to the original image can be replaced by matrix multiplication, which we already know how to handle using back prop:\n", + "$$\n", + "C(x) = W\\times\\mathbf{im2col}(x)\n", + "$$\n", + "\n", + "Convolutional layers are defined using `Conv2d` class. We need to specify the following:\n", + "* `filters` - number of filters to use. We will use 9 different filters, which will give the network plenty of opportunities to explore which filters work best for our scenario.\n", + "* `kernel_size` is the size of the sliding window. Usually 3x3 or 5x5 filters are used.\n", + "\n", + "Simplest CNN will contain one convolutional layer. Given the input size 28x28, after applying nine 5x5 filters we will end up with a tensor of 24x24x9. The spatial dimension is smaller, because there are only 24 positions where a sliding interval of length 5 can fit into 28 pixels).\n", + "\n", + "After convolution, we flatten 24x24x9 tensor into one vector of size 5184, and then add linear layer, to produce 10 classes. We also use `relu` activation function in between layers. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: \"sequential\"\n", + "_________________________________________________________________\n", + "Layer (type) Output Shape Param # \n", + "=================================================================\n", + "conv2d (Conv2D) (None, 24, 24, 9) 234 \n", + "_________________________________________________________________\n", + "flatten (Flatten) (None, 5184) 0 \n", + "_________________________________________________________________\n", + "dense (Dense) (None, 10) 51850 \n", + "=================================================================\n", + "Total params: 52,084\n", + "Trainable params: 52,084\n", + "Non-trainable params: 0\n", + "_________________________________________________________________\n" + ] + } + ], + "source": [ + "model = keras.models.Sequential([\n", + " keras.layers.Conv2D(filters=9, kernel_size=(5,5), input_shape=(28,28,1),activation='relu'),\n", + " keras.layers.Flatten(),\n", + " keras.layers.Dense(10)\n", + "])\n", + "\n", + "model.compile(loss=keras.losses.SparseCategoricalCrossentropy(from_logits=True),metrics=['acc'])\n", + "\n", + "model.summary()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can see that this network contains around 50k trainable parameters, compared to around 80k in fully-connected multi-layered networks. This allows us to achieve good results even on smaller datasets, because convolutional networks generalize much better.\n", + "\n", + "> **Note**: In most of the practical cases, we want to apply convolutional layers to color images. Thus, `Conv2D` layer expects the input to be of the shape $W\\times H\\times C$, where $W$ and $H$ are width and height of the image, and $C$ is the number of color channels. For grayscale images, we need the same shape with $C=1$.\n", + "\n", + "We need to reshape our data before starting training:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/5\n", + "1875/1875 [==============================] - 6s 3ms/step - loss: 0.0315 - acc: 0.9903 - val_loss: 0.0358 - val_acc: 0.9894\n", + "Epoch 2/5\n", + "1875/1875 [==============================] - 6s 3ms/step - loss: 0.0282 - acc: 0.9909 - val_loss: 0.0343 - val_acc: 0.9891\n", + "Epoch 3/5\n", + "1875/1875 [==============================] - 6s 3ms/step - loss: 0.0267 - acc: 0.9920 - val_loss: 0.0379 - val_acc: 0.9891\n", + "Epoch 4/5\n", + "1875/1875 [==============================] - 6s 3ms/step - loss: 0.0253 - acc: 0.9924 - val_loss: 0.0309 - val_acc: 0.9918\n", + "Epoch 5/5\n", + "1875/1875 [==============================] - 6s 3ms/step - loss: 0.0239 - acc: 0.9930 - val_loss: 0.0341 - val_acc: 0.9896\n" + ] + } + ], + "source": [ + "x_train_c = np.expand_dims(x_train,3)\n", + "x_test_c = np.expand_dims(x_test,3)\n", + "hist = model.fit(x_train_c,y_train,validation_data=(x_test_c,y_test),epochs=5)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plot_results(hist)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As you can see, we are able to achieve higher accuracy, and much faster (in terms of number of epochs), compared to the fully-connected networks from previous unit. However, the training itself requires more resources, and may be slower on non-GPU computers.\n", + "\n", + "## Visualizing Convolutional Layers\n", + "\n", + "We can also visualize the weights of our trained convolutional layers, to try and make some more sense of what is going on:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "fig,ax = plt.subplots(1,9)\n", + "l = model.layers[0].weights[0]\n", + "for i in range(9):\n", + " ax[i].imshow(l[...,0,i])\n", + " ax[i].axis('off')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can see that some of those filters look like they can recognize some oblique strokes, while others look pretty random. \n", + "\n", + "> **Task**: Train the same network with 3x3 filters and visualize them. Do you see more familiar patterns?\n", + "\n", + "## Multi-layered CNNs and pooling layers\n", + "\n", + "First convolutional layers looks for primitive patterns, such as horizontal or vertical lines, but we can apply further convolutional layers on top of them to look for higher-level patterns, such as primitive shapes. Then more convolutional layers can combine those shapes into some parts of the picture, up to the final object that we are trying to classify. \n", + "\n", + "When doing so, we may also apply one trick: reducing the spatial size of the image. Once we have detected there is a horizontal stoke within sliding 3x3 window, it is not so important at which exact pixel it occurred. Thus we can \"scale down\" the size of the image, which is done using one of the **pooling layers**:\n", + "\n", + " * **Average Pooling** takes a sliding window (for example, 2x2 pixels) and computes an average of values within the window\n", + " * **Max Pooling** replaces the window with the maximum value. The idea behind max pooling is to detect a presence of a certain pattern within the sliding window.\n", + "\n", + "Thus, in a typical CNN there would be several convolutional layers, with pooling layers in between them to decrease dimensions of the image. We would also increase the number of filters, because as patterns become more advanced - there are more possible interesting combinations that we need to be looking for.\n", + "\n", + "![An image showing several convolutional layers with pooling layers.](./images/cnn-pyramid.png)\n", + "\n", + "Because of decreasing spatial dimensions and increasing feature/filters dimensions, this architecture is also called **pyramid architecture**. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: \"sequential_1\"\n", + "_________________________________________________________________\n", + "Layer (type) Output Shape Param # \n", + "=================================================================\n", + "conv2d_1 (Conv2D) (None, 24, 24, 10) 260 \n", + "_________________________________________________________________\n", + "max_pooling2d (MaxPooling2D) (None, 12, 12, 10) 0 \n", + "_________________________________________________________________\n", + "conv2d_2 (Conv2D) (None, 8, 8, 20) 5020 \n", + "_________________________________________________________________\n", + "max_pooling2d_1 (MaxPooling2 (None, 4, 4, 20) 0 \n", + "_________________________________________________________________\n", + "flatten_1 (Flatten) (None, 320) 0 \n", + "_________________________________________________________________\n", + "dense_1 (Dense) (None, 10) 3210 \n", + "=================================================================\n", + "Total params: 8,490\n", + "Trainable params: 8,490\n", + "Non-trainable params: 0\n", + "_________________________________________________________________\n" + ] + } + ], + "source": [ + "model = keras.models.Sequential([\n", + " keras.layers.Conv2D(filters=10, kernel_size=(5,5), input_shape=(28,28,1),activation='relu'),\n", + " keras.layers.MaxPooling2D(),\n", + " keras.layers.Conv2D(filters=20, kernel_size=(5,5), activation='relu'),\n", + " keras.layers.MaxPooling2D(), \n", + " keras.layers.Flatten(),\n", + " keras.layers.Dense(10)\n", + "])\n", + "\n", + "model.compile(loss=keras.losses.SparseCategoricalCrossentropy(from_logits=True),metrics=['acc'])\n", + "\n", + "model.summary()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Notice that the number of trainable parameters (~8.5K) is dramatically smaller than in previous cases. This happens because convolutional layers in general have few parameters, and dimensionality of the image before applying final dense layer is significantly reduced. Small number of parameters have positive impact on our models, because it helps to prevent overfitting even on smaller dataset sizes." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/5\n", + "1875/1875 [==============================] - 6s 3ms/step - loss: 0.0723 - acc: 0.9780 - val_loss: 0.0423 - val_acc: 0.9861\n", + "Epoch 2/5\n", + "1875/1875 [==============================] - 6s 3ms/step - loss: 0.0523 - acc: 0.9842 - val_loss: 0.0425 - val_acc: 0.9866\n", + "Epoch 3/5\n", + "1875/1875 [==============================] - 6s 3ms/step - loss: 0.0448 - acc: 0.9868 - val_loss: 0.0403 - val_acc: 0.9865\n", + "Epoch 4/5\n", + "1875/1875 [==============================] - 6s 3ms/step - loss: 0.0383 - acc: 0.9886 - val_loss: 0.0323 - val_acc: 0.9888\n", + "Epoch 5/5\n", + "1875/1875 [==============================] - 6s 3ms/step - loss: 0.0338 - acc: 0.9895 - val_loss: 0.0331 - val_acc: 0.9896\n" + ] + } + ], + "source": [ + "hist = model.fit(x_train_c,y_train,validation_data=(x_test_c,y_test),epochs=5)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plot_results(hist)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "What you should probably observe is that we are able to achieve higher accuracy than with just one layer, and much faster in terms of number of epochs - just with 1 or 2 epochs. It means that sophisticated network architecture needs much fewer data to figure out what is going on, and to extract generic patterns from our images. However, training also takes longer, and requires a GPU.\n", + "\n", + "## Playing with real images from the CIFAR-10 dataset\n", + "\n", + "While our handwritten digit recognition problem may seem like a toy problem, we are now ready to do something more serious. Let's explore more advanced dataset of pictures of different objects, called [CIFAR-10](https://www.cs.toronto.edu/~kriz/cifar.html). It contains 60k 32x32 images, divided into 10 classes. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "(x_train,y_train),(x_test,y_test) = keras.datasets.cifar10.load_data()\n", + "x_train = x_train.astype(np.float32) / 255.0\n", + "x_test = x_test.astype(np.float32) / 255.0\n", + "classes = ('plane', 'car', 'bird', 'cat',\n", + " 'deer', 'dog', 'frog', 'horse', 'ship', 'truck')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "display_dataset(x_train,y_train,classes=classes)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "A well-known architecture for CIFAR-10 is called [LeNet](https://en.wikipedia.org/wiki/LeNet), and has been proposed by *Yann LeCun*. It follows the same principles as we have outlined above, the main difference being 3 input color channels instead of 1. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: \"sequential_3\"\n", + "_________________________________________________________________\n", + "Layer (type) Output Shape Param # \n", + "=================================================================\n", + "conv2d_8 (Conv2D) (None, 28, 28, 6) 456 \n", + "_________________________________________________________________\n", + "max_pooling2d_6 (MaxPooling2 (None, 14, 14, 6) 0 \n", + "_________________________________________________________________\n", + "conv2d_9 (Conv2D) (None, 10, 10, 16) 2416 \n", + "_________________________________________________________________\n", + "max_pooling2d_7 (MaxPooling2 (None, 5, 5, 16) 0 \n", + "_________________________________________________________________\n", + "flatten_3 (Flatten) (None, 400) 0 \n", + "_________________________________________________________________\n", + "dense_9 (Dense) (None, 120) 48120 \n", + "_________________________________________________________________\n", + "dense_10 (Dense) (None, 84) 10164 \n", + "_________________________________________________________________\n", + "dense_11 (Dense) (None, 10) 850 \n", + "=================================================================\n", + "Total params: 62,006\n", + "Trainable params: 62,006\n", + "Non-trainable params: 0\n", + "_________________________________________________________________\n" + ] + } + ], + "source": [ + "model = keras.models.Sequential([\n", + " keras.layers.Conv2D(filters = 6, kernel_size = 5, strides = 1, activation = 'relu', input_shape = (32,32,3)),\n", + " keras.layers.MaxPooling2D(pool_size = 2, strides = 2),\n", + " keras.layers.Conv2D(filters = 16, kernel_size = 5, strides = 1, activation = 'relu'),\n", + " keras.layers.MaxPooling2D(pool_size = 2, strides = 2),\n", + " keras.layers.Flatten(),\n", + " keras.layers.Dense(120, activation = 'relu'),\n", + " keras.layers.Dense(84, activation = 'relu'),\n", + " keras.layers.Dense(10, activation = 'softmax')])\n", + "\n", + "model.summary()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Training this network properly will take significant amount of time, and should preferably be done on GPU-enabled compute." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/10\n", + "1563/1563 [==============================] - 6s 4ms/step - loss: 1.6205 - acc: 0.4033 - val_loss: 1.4287 - val_acc: 0.4743\n", + "Epoch 2/10\n", + "1563/1563 [==============================] - 6s 4ms/step - loss: 1.3435 - acc: 0.5154 - val_loss: 1.2804 - val_acc: 0.5412\n", + "Epoch 3/10\n", + "1563/1563 [==============================] - 5s 3ms/step - loss: 1.2225 - acc: 0.5645 - val_loss: 1.2164 - val_acc: 0.5600\n", + "Epoch 4/10\n", + "1563/1563 [==============================] - 5s 4ms/step - loss: 1.1360 - acc: 0.5957 - val_loss: 1.1918 - val_acc: 0.5768\n", + "Epoch 5/10\n", + "1563/1563 [==============================] - 5s 3ms/step - loss: 1.0776 - acc: 0.6178 - val_loss: 1.1451 - val_acc: 0.5906\n", + "Epoch 6/10\n", + "1563/1563 [==============================] - 5s 4ms/step - loss: 1.0228 - acc: 0.6370 - val_loss: 1.1178 - val_acc: 0.6098\n", + "Epoch 7/10\n", + "1563/1563 [==============================] - 5s 4ms/step - loss: 0.9769 - acc: 0.6544 - val_loss: 1.0793 - val_acc: 0.6202\n", + "Epoch 8/10\n", + "1563/1563 [==============================] - 5s 3ms/step - loss: 0.9340 - acc: 0.6711 - val_loss: 1.0783 - val_acc: 0.6271\n", + "Epoch 9/10\n", + "1563/1563 [==============================] - 5s 4ms/step - loss: 0.8983 - acc: 0.6824 - val_loss: 1.0952 - val_acc: 0.6203\n", + "Epoch 10/10\n", + "1563/1563 [==============================] - 6s 4ms/step - loss: 0.8648 - acc: 0.6939 - val_loss: 1.1103 - val_acc: 0.6217\n" + ] + } + ], + "source": [ + "model.compile(optimizer = 'adam', loss = 'sparse_categorical_crossentropy', metrics = ['acc'])\n", + "hist = model.fit(x_train,y_train,validation_data=(x_test,y_test),epochs=10)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plot_results(hist)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The accuracy that we have been able to achieve with few epochs of training does not seem too great. However, remember that bling guessing would only give us 10% accuracy, and that our problem is actually significantly more difficult than MNIST digit classification. Getting above 50% accuracy in such a short training time seems like a good accomplishment.\n", + "\n", + "## Takeaways\n", + "\n", + "In this unit, we have learned the main concept behind computer vision neural networks - convolutional networks. Real-life architectures that power image classification, object detection, and even image generation networks are all based on CNNs, just with more layers and some additional training tricks." + ] + } + ], + "metadata": { + "interpreter": { + "hash": "0cb620c6d4b9f7a635928804c26cf22403d89d98d79684e4529119355ee6d5a5" + }, + "kernelspec": { + "display_name": "Python 3.8.12 64-bit (conda)", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.12" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/4-ComputerVision/07-ConvNets/ConvNetsPyTorch.ipynb b/4-ComputerVision/07-ConvNets/ConvNetsPyTorch.ipynb new file mode 100644 index 00000000..697f8e8e --- /dev/null +++ b/4-ComputerVision/07-ConvNets/ConvNetsPyTorch.ipynb @@ -0,0 +1,568 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Convolutional neural networks\n", + "\n", + "In the previous unit we have learned how to define a multi-layered neural network using class definition, but those networks were generic, and not specialized for computer vision tasks. In this unit we will learn about **Convolutional Neural Networks (CNNs)**, which are specifically designed for computer vision.\n", + "\n", + "Computer vision is different from generic classification, because when we are trying to find a certain object in the picture, we are scanning the image looking for some specific **patterns** and their combinations. For example, when looking for a cat, we first may look for horizontal lines, which can form whiskers, and then certain combination of whiskers can tell us that it is actually a picture of a cat. Relative position and presence of certain patterns is important, and not their exact position on the image. \n", + "\n", + "To extract patterns, we will use the notion of **convolutional filters**. But first, let us load all dependencies and functions that we have defined in the previous units." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import torch\n", + "import torch.nn as nn\n", + "import torchvision\n", + "import matplotlib.pyplot as plt\n", + "from torchinfo import summary\n", + "import numpy as np\n", + "\n", + "from pytorchcv import load_mnist, train, plot_results, plot_convolution, display_dataset\n", + "load_mnist(batch_size=128)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Convolutional filters\n", + "\n", + "Convolutional filters are small windows that run over each pixel of the image and compute weighted average of the neighboring pixels.\n", + "\n", + "\n", + "\n", + "They are defined by matrices of weight coefficients. Let's see the examples of applying two different convolutional filters over our MNIST handwritten digits:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plot_convolution(torch.tensor([[-1.,0.,1.],[-1.,0.,1.],[-1.,0.,1.]]),'Vertical edge filter')\n", + "plot_convolution(torch.tensor([[-1.,-1.,-1.],[0.,0.,0.],[1.,1.,1.]]),'Horizontal edge filter')\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "First filter is called a **vertical edge filter**, and it is defined by the following matrix:\n", + "$$\n", + "\\left(\n", + " \\begin{matrix}\n", + " -1 & 0 & 1 \\cr\n", + " -1 & 0 & 1 \\cr\n", + " -1 & 0 & 1 \\cr\n", + " \\end{matrix}\n", + "\\right)\n", + "$$\n", + "When this filter goes over relatively uniform pixel field, all values add up to 0. However, when it encounters a vertical edge in the image, high spike value is generated. That's why in the images above you can see vertical edges represented by high and low values, while horizontal edges are averaged out.\n", + "\n", + "An opposite thing happens when we apply horizontal edge filter - horizontal lines are amplified, and vertical are averaged out.\n", + "\n", + "In classical computer vision, multiple filters were applied to the image to generate features, which then were used by machine learning algorithm to build a classifier. However, in deep learning we construct networks that **learn** best convolutional filters to solve classification problem.\n", + "\n", + "To do that, we introduce **convolutional layers**." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Covolutional layers\n", + "\n", + "Convolutional layers are defined using `nn.Conv2d` construction. We need to specify the following:\n", + "* `in_channels` - number of input channels. In our case we are dealing with a grayscale image, thus number of input channels is 1.\n", + "* `out_channels` - number of filters to use. We will use 9 different filters, which will give the network plenty of opportunities to explore which filters work best for our scenario.\n", + "* `kernel_size` is the size of the sliding window. Usually 3x3 or 5x5 filters are used.\n", + "\n", + "Simplest CNN will contain one convolutional layer. Given the input size 28x28, after applying nine 5x5 filters we will end up with a tensor of 9x24x24 (the spatial size is smaller, because there are only 24 positions where a sliding interval of length 5 can fit into 28 pixels).\n", + "\n", + "After convolution, we flatten 9x24x24 tensor into one vector of size 5184, and then add linear layer, to produce 10 classes. We also use `relu` activation function in between layers. " + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "==========================================================================================\n", + "Layer (type:depth-idx) Output Shape Param #\n", + "==========================================================================================\n", + "├─Conv2d: 1-1 [1, 9, 24, 24] 234\n", + "├─Flatten: 1-2 [1, 5184] --\n", + "├─Linear: 1-3 [1, 10] 51,850\n", + "==========================================================================================\n", + "Total params: 52,084\n", + "Trainable params: 52,084\n", + "Non-trainable params: 0\n", + "Total mult-adds (M): 0.18\n", + "==========================================================================================\n", + "Input size (MB): 0.00\n", + "Forward/backward pass size (MB): 0.04\n", + "Params size (MB): 0.21\n", + "Estimated Total Size (MB): 0.25\n", + "==========================================================================================" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "class OneConv(nn.Module):\n", + " def __init__(self):\n", + " super(OneConv, self).__init__()\n", + " self.conv = nn.Conv2d(in_channels=1,out_channels=9,kernel_size=(5,5))\n", + " self.flatten = nn.Flatten()\n", + " self.fc = nn.Linear(5184,10)\n", + "\n", + " def forward(self, x):\n", + " x = nn.functional.relu(self.conv(x))\n", + " x = self.flatten(x)\n", + " x = nn.functional.log_softmax(self.fc(x),dim=1)\n", + " return x\n", + "\n", + "net = OneConv()\n", + "\n", + "summary(net,input_size=(1,1,28,28))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can see that this network contains around 50k trainable parameters, compared to around 80k in fully-connected multi-layered networks. This allows us to achieve good results even on smaller datasets, because convolutional networks generalize much better." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 0, Train acc=0.947, Val acc=0.969, Train loss=0.001, Val loss=0.001\n", + "Epoch 1, Train acc=0.979, Val acc=0.975, Train loss=0.001, Val loss=0.001\n", + "Epoch 2, Train acc=0.985, Val acc=0.977, Train loss=0.000, Val loss=0.001\n", + "Epoch 3, Train acc=0.988, Val acc=0.975, Train loss=0.000, Val loss=0.001\n", + "Epoch 4, Train acc=0.988, Val acc=0.976, Train loss=0.000, Val loss=0.001\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "hist = train(net,train_loader,test_loader,epochs=5)\n", + "plot_results(hist)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As you can see, we are able to achieve higher accuracy, and much faster, compared to the fully-connected networks from previous unit.\n", + "\n", + "We can also visualize the weights of our trained convolutional layers, to try and make some more sense of what is going on:" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "fig,ax = plt.subplots(1,9)\n", + "with torch.no_grad():\n", + " p = next(net.conv.parameters())\n", + " for i,x in enumerate(p):\n", + " ax[i].imshow(x.detach().cpu()[0,...])\n", + " ax[i].axis('off')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can see that some of those filters look like they can recognize some oblique strokes, while others look pretty random. \n", + "\n", + "## Multi-layered CNNs and pooling layers\n", + "\n", + "First convolutional layers looks for primitive patterns, such as horizontal or vertical lines, but we can apply further convolutional layers on top of them to look for higher-level patterns, such as primitive shapes. Then more convolutional layers can combine those shapes into some parts of the picture, up to the final object that we are trying to classify. \n", + "\n", + "When doing so, we may also apply one trick: reducing the spatial size of the image. Once we have detected there is a horizontal stoke within sliding 3x3 window, it is not so important at which exact pixel it occurred. Thus we can \"scale down\" the size of the image, which is done using one of the **pooling layers**:\n", + "\n", + " * **Average Pooling** takes a sliding window (for example, 2x2 pixels) and computes an average of values within the window\n", + " * **Max Pooling** replaces the window with the maximum value. The idea behind max pooling is to detect a presence of a certain pattern within the sliding window.\n", + "\n", + "Thus, in a typical CNN there would be several convolutional layers, with pooling layers in between them to decrease dimensions of the image. We would also increase the number of filters, because as patterns become more advanced - there are more possible interesting combinations that we need to be looking for.\n", + "\n", + "![An image showing several convolutional layers with pooling layers.](./images/cnn-pyramid.png)\n", + "\n", + "Because of decreasing spatial dimensions and increasing feature/filters dimensions, this architecture is also called **pyramid architecture**. " + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "==========================================================================================\n", + "Layer (type:depth-idx) Output Shape Param #\n", + "==========================================================================================\n", + "├─Conv2d: 1-1 [1, 10, 24, 24] 260\n", + "├─MaxPool2d: 1-2 [1, 10, 12, 12] --\n", + "├─Conv2d: 1-3 [1, 20, 8, 8] 5,020\n", + "├─MaxPool2d: 1-4 [1, 20, 4, 4] --\n", + "├─Linear: 1-5 [1, 10] 3,210\n", + "==========================================================================================\n", + "Total params: 8,490\n", + "Trainable params: 8,490\n", + "Non-trainable params: 0\n", + "Total mult-adds (M): 0.47\n", + "==========================================================================================\n", + "Input size (MB): 0.00\n", + "Forward/backward pass size (MB): 0.06\n", + "Params size (MB): 0.03\n", + "Estimated Total Size (MB): 0.09\n", + "==========================================================================================" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "class MultiLayerCNN(nn.Module):\n", + " def __init__(self):\n", + " super(MultiLayerCNN, self).__init__()\n", + " self.conv1 = nn.Conv2d(1, 10, 5)\n", + " self.pool = nn.MaxPool2d(2, 2)\n", + " self.conv2 = nn.Conv2d(10, 20, 5)\n", + " self.fc = nn.Linear(320,10)\n", + "\n", + " def forward(self, x):\n", + " x = self.pool(nn.functional.relu(self.conv1(x)))\n", + " x = self.pool(nn.functional.relu(self.conv2(x)))\n", + " x = x.view(-1, 320)\n", + " x = nn.functional.log_softmax(self.fc(x),dim=1)\n", + " return x\n", + "\n", + "net = MultiLayerCNN()\n", + "summary(net,input_size=(1,1,28,28))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note a few things about this definition:\n", + "* Instead of using `Flatten` layer, we are flattening the tensor inside `forward` function using `view` function. Since flattening layer does not have trainable weights, it is not essential that we create a separate layer instance within our class\n", + "* We use just one instance of pooling layer in our model, also because it does not contain any trainable parameters, and this one instance can be effectively reused\n", + "* The number of trainable parameters (~8.5K) is dramatically smaller than in previous cases. This happens because convolutional layers in general have few parameters, and dimensionality of the image before applying final dense layer is significantly reduced. Small number of parameters have positive impact on our models, because it helps to prevent overfitting even on smaller dataset sizes." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 0, Train acc=0.952, Val acc=0.977, Train loss=0.001, Val loss=0.001\n", + "Epoch 1, Train acc=0.982, Val acc=0.983, Train loss=0.000, Val loss=0.000\n", + "Epoch 2, Train acc=0.986, Val acc=0.983, Train loss=0.000, Val loss=0.000\n", + "Epoch 3, Train acc=0.986, Val acc=0.978, Train loss=0.000, Val loss=0.001\n", + "Epoch 4, Train acc=0.987, Val acc=0.981, Train loss=0.000, Val loss=0.000\n" + ] + } + ], + "source": [ + "hist = train(net,train_loader,test_loader,epochs=5)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "What you should probably observe is that we are able to achieve higher accuracy than with just one layer, and much faster - just with 1 or 2 epochs. It means that sophisticated network architecture needs much fewer data to figure out what is going on, and to extract generic patterns from our images.\n", + "\n", + "## Playing with real images from the CIFAR-10 dataset\n", + "\n", + "While our handwritten digit recognition problem may seem like a toy problem, we are now ready to do something more serious. Let's explore more advanced dataset of pictures of different objects, called [CIFAR-10](https://www.cs.toronto.edu/~kriz/cifar.html). It contains 60k 32x32 images, divided into 10 classes. " + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Downloading https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz to ./data/cifar-10-python.tar.gz\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "77b339f50a6b48e98e5db22e0ddd7eb6", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Extracting ./data/cifar-10-python.tar.gz to ./data\n", + "Files already downloaded and verified\n" + ] + } + ], + "source": [ + "transform = torchvision.transforms.Compose(\n", + " [torchvision.transforms.ToTensor(),\n", + " torchvision.transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))])\n", + "\n", + "trainset = torchvision.datasets.CIFAR10(root='./data', train=True, download=True, transform=transform)\n", + "trainloader = torch.utils.data.DataLoader(trainset, batch_size=14, shuffle=True)\n", + "testset = torchvision.datasets.CIFAR10(root='./data', train=False, download=True, transform=transform)\n", + "testloader = torch.utils.data.DataLoader(testset, batch_size=14, shuffle=False)\n", + "classes = ('plane', 'car', 'bird', 'cat',\n", + " 'deer', 'dog', 'frog', 'horse', 'ship', 'truck')" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "display_dataset(trainset,classes=classes)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "A well-known architecture for CIFAR-10 is called [LeNet](https://en.wikipedia.org/wiki/LeNet), and has been proposed by *Yann LeCun*. It follows the same principles as we have outlined above, the main difference being 3 input color channels instead of 1. \n", + "\n", + "We also do one more simplification to this model - we do not use `log_softmax` as output activation function, and just return the output of last fully-connected layer. In this case we can just use `CrossEntropyLoss` loss function to optimize the model." + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "==========================================================================================\n", + "Layer (type:depth-idx) Output Shape Param #\n", + "==========================================================================================\n", + "├─Conv2d: 1-1 [1, 6, 28, 28] 456\n", + "├─MaxPool2d: 1-2 [1, 6, 14, 14] --\n", + "├─Conv2d: 1-3 [1, 16, 10, 10] 2,416\n", + "├─MaxPool2d: 1-4 [1, 16, 5, 5] --\n", + "├─Conv2d: 1-5 [1, 120, 1, 1] 48,120\n", + "├─Flatten: 1-6 [1, 120] --\n", + "├─Linear: 1-7 [1, 64] 7,744\n", + "├─Linear: 1-8 [1, 10] 650\n", + "==========================================================================================\n", + "Total params: 59,386\n", + "Trainable params: 59,386\n", + "Non-trainable params: 0\n", + "Total mult-adds (M): 0.65\n", + "==========================================================================================\n", + "Input size (MB): 0.01\n", + "Forward/backward pass size (MB): 0.05\n", + "Params size (MB): 0.24\n", + "Estimated Total Size (MB): 0.30\n", + "==========================================================================================" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "class LeNet(nn.Module):\n", + " def __init__(self):\n", + " super(LeNet, self).__init__()\n", + " self.conv1 = nn.Conv2d(3, 6, 5)\n", + " self.pool = nn.MaxPool2d(2)\n", + " self.conv2 = nn.Conv2d(6, 16, 5)\n", + " self.conv3 = nn.Conv2d(16,120,5)\n", + " self.flat = nn.Flatten()\n", + " self.fc1 = nn.Linear(120,64)\n", + " self.fc2 = nn.Linear(64,10)\n", + "\n", + " def forward(self, x):\n", + " x = self.pool(nn.functional.relu(self.conv1(x)))\n", + " x = self.pool(nn.functional.relu(self.conv2(x)))\n", + " x = nn.functional.relu(self.conv3(x))\n", + " x = self.flat(x)\n", + " x = nn.functional.relu(self.fc1(x))\n", + " x = self.fc2(x)\n", + " return x\n", + "\n", + "net = LeNet()\n", + "\n", + "summary(net,input_size=(1,3,32,32))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Training this network properly will take significant amount of time, and should preferably be done on GPU-enabled compute." + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 0, Train acc=0.261, Val acc=0.388, Train loss=0.143, Val loss=0.121\n", + "Epoch 1, Train acc=0.437, Val acc=0.491, Train loss=0.110, Val loss=0.101\n", + "Epoch 2, Train acc=0.508, Val acc=0.522, Train loss=0.097, Val loss=0.094\n" + ] + } + ], + "source": [ + "opt = torch.optim.SGD(net.parameters(),lr=0.001,momentum=0.9)\n", + "hist = train(net, trainloader, testloader, epochs=3, optimizer=opt, loss_fn=nn.CrossEntropyLoss())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The accuracy that we have been able to achieve with 3 epochs of training does not seem great. However, remember that blind guessing would only give us 10% accuracy, and that our problem is actually significantly more difficult than MNIST digit classification. Getting above 50% accuracy in such a short training time seems like a good accomplishment.\n", + "\n", + "## Takeaways\n", + "\n", + "In this unit, we have learned the main concept behind computer vision neural networks - convolutional networks. Real-life architectures that power image classification, object detection, and even image generation networks are all based on CNNs, just with more layers and some additional training tricks." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "py37_pytorch", + "language": "python", + "name": "conda-env-py37_pytorch-py" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.7" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} \ No newline at end of file diff --git a/4-ComputerVision/07-ConvNets/README.md b/4-ComputerVision/07-ConvNets/README.md new file mode 100644 index 00000000..31f2ceba --- /dev/null +++ b/4-ComputerVision/07-ConvNets/README.md @@ -0,0 +1,32 @@ +# Convolutional Neural Networks + +We have seen before that neural networks are quite good at dealing with images, and even one-layer perceptron is able to recognize handwritten digits from MNIST dataset with reasonable accuracy. However, MNIST dataset is very special, and all digits are centered inside the image, which makes the task simpler. + +In real life, we want to be able to recognize objects on the picture regardless of their exact location in the image. Computer vision is different from generic classification, because when we are trying to find a certain object in the picture, we are scanning the image looking for some specific **patterns** and their combinations. For example, when looking for a cat, we first may look for horizontal lines, which can form whiskers, and then certain combination of whiskers can tell us that it is actually a picture of a cat. Relative position and presence of certain patterns is important, and not their exact position on the image. + +To extract patterns, we will use the notion of **convolutional filters**. As you know, an image is represented by a 2D-matrix, or 3D-tensor with color depth. Applying a filter means that we take relatively small **filter kernel** matrix, and for each pixel in the original image we compute the weighted average with neighboring points. We can view this like a small window sliding over the whole image, and averaging out all pixels according to the weights in the filter kernel matrix. + +![Vertical Edge Filter](images/filter-vert.png) | ![Horizontal Edge Filter](images/filter-horiz.png) +----|---- + +For example, if we apply 3x3 vertical edge and horizontal edge filters to the MNIST digits, we can get highlights (e.g. high values) where there are vertical and horizontal edges in our original image. Thus those two filters can be used to "look for" edges. Similarly, we can design different filters to look for other low-level patterns: + + + +However, while we can design the filters to extract some patterns manually, we can also design the network in such a way that it will learn the patterns automatically. It is one of the main ideas behind the CNN. + +## Main ideas behind CNN + +The way CNNs work is based on the following important ideas: +* Convolutional filters can extract patterns +* We can design the network in such a way that filters are trained automatically +* We can use the same approach to find patterns in high-level features, not only in the original image. Thus CNN feature extraction work on a hierarchy of features, starting from low-level pixel combinations, up to higher level combination of picture parts. + +![Hierarchical Feature Extraction](images/FeatureExtractionCNN.png) + +## Continue in Notebook + +Let's continue exploring how convolutional neural networks work, and how we can achieve trainable filters, in corresponding notebooks: + +* [Convolutional Neural Networks - PyTorch](ConvNetsPyTorch.ipynb) +* [Convolutional Neural Networks - Tensorflow](ConvNetsTF.ipynb) diff --git a/4-ComputerVision/07-ConvNets/images/FeatureExtractionCNN.png b/4-ComputerVision/07-ConvNets/images/FeatureExtractionCNN.png new file mode 100644 index 00000000..df8c813c Binary files /dev/null and b/4-ComputerVision/07-ConvNets/images/FeatureExtractionCNN.png differ diff --git a/4-ComputerVision/07-ConvNets/images/cnn-pyramid.png b/4-ComputerVision/07-ConvNets/images/cnn-pyramid.png new file mode 100644 index 00000000..edc28b32 Binary files /dev/null and b/4-ComputerVision/07-ConvNets/images/cnn-pyramid.png differ diff --git a/4-ComputerVision/07-ConvNets/images/convolutionExample.png b/4-ComputerVision/07-ConvNets/images/convolutionExample.png new file mode 100644 index 00000000..7bfd6db5 Binary files /dev/null and b/4-ComputerVision/07-ConvNets/images/convolutionExample.png differ diff --git a/4-ComputerVision/07-ConvNets/images/filter-horiz.png b/4-ComputerVision/07-ConvNets/images/filter-horiz.png new file mode 100644 index 00000000..327ef6a6 Binary files /dev/null and b/4-ComputerVision/07-ConvNets/images/filter-horiz.png differ diff --git a/4-ComputerVision/07-ConvNets/images/filter-vert.png b/4-ComputerVision/07-ConvNets/images/filter-vert.png new file mode 100644 index 00000000..bea51b28 Binary files /dev/null and b/4-ComputerVision/07-ConvNets/images/filter-vert.png differ diff --git a/4-ComputerVision/07-ConvNets/images/lmfilters.jpg b/4-ComputerVision/07-ConvNets/images/lmfilters.jpg new file mode 100644 index 00000000..7b6e1372 Binary files /dev/null and b/4-ComputerVision/07-ConvNets/images/lmfilters.jpg differ diff --git a/4-ComputerVision/07-ConvNets/pytorchcv.py b/4-ComputerVision/07-ConvNets/pytorchcv.py new file mode 100644 index 00000000..19ff1c5c --- /dev/null +++ b/4-ComputerVision/07-ConvNets/pytorchcv.py @@ -0,0 +1,169 @@ + +# Script file to hide implementation details for PyTorch computer vision module + +import builtins +import torch +import torch.nn as nn +from torch.utils import data +import torchvision +from torchvision.transforms import ToTensor +import matplotlib.pyplot as plt +import numpy as np +from PIL import Image +import glob +import os +import zipfile + +default_device = 'cuda' if torch.cuda.is_available() else 'cpu' + +def load_mnist(batch_size=64): + builtins.data_train = torchvision.datasets.MNIST('./data', + download=True,train=True,transform=ToTensor()) + builtins.data_test = torchvision.datasets.MNIST('./data', + download=True,train=False,transform=ToTensor()) + builtins.train_loader = torch.utils.data.DataLoader(data_train,batch_size=batch_size) + builtins.test_loader = torch.utils.data.DataLoader(data_test,batch_size=batch_size) + +def train_epoch(net,dataloader,lr=0.01,optimizer=None,loss_fn = nn.NLLLoss()): + optimizer = optimizer or torch.optim.Adam(net.parameters(),lr=lr) + net.train() + total_loss,acc,count = 0,0,0 + for features,labels in dataloader: + optimizer.zero_grad() + lbls = labels.to(default_device) + out = net(features.to(default_device)) + loss = loss_fn(out,lbls) #cross_entropy(out,labels) + loss.backward() + optimizer.step() + total_loss+=loss + _,predicted = torch.max(out,1) + acc+=(predicted==lbls).sum() + count+=len(labels) + return total_loss.item()/count, acc.item()/count + +def validate(net, dataloader,loss_fn=nn.NLLLoss()): + net.eval() + count,acc,loss = 0,0,0 + with torch.no_grad(): + for features,labels in dataloader: + lbls = labels.to(default_device) + out = net(features.to(default_device)) + loss += loss_fn(out,lbls) + pred = torch.max(out,1)[1] + acc += (pred==lbls).sum() + count += len(labels) + return loss.item()/count, acc.item()/count + +def train(net,train_loader,test_loader,optimizer=None,lr=0.01,epochs=10,loss_fn=nn.NLLLoss()): + optimizer = optimizer or torch.optim.Adam(net.parameters(),lr=lr) + res = { 'train_loss' : [], 'train_acc': [], 'val_loss': [], 'val_acc': []} + for ep in range(epochs): + tl,ta = train_epoch(net,train_loader,optimizer=optimizer,lr=lr,loss_fn=loss_fn) + vl,va = validate(net,test_loader,loss_fn=loss_fn) + print(f"Epoch {ep:2}, Train acc={ta:.3f}, Val acc={va:.3f}, Train loss={tl:.3f}, Val loss={vl:.3f}") + res['train_loss'].append(tl) + res['train_acc'].append(ta) + res['val_loss'].append(vl) + res['val_acc'].append(va) + return res + +def train_long(net,train_loader,test_loader,epochs=5,lr=0.01,optimizer=None,loss_fn = nn.NLLLoss(),print_freq=10): + optimizer = optimizer or torch.optim.Adam(net.parameters(),lr=lr) + for epoch in range(epochs): + net.train() + total_loss,acc,count = 0,0,0 + for i, (features,labels) in enumerate(train_loader): + lbls = labels.to(default_device) + optimizer.zero_grad() + out = net(features.to(default_device)) + loss = loss_fn(out,lbls) + loss.backward() + optimizer.step() + total_loss+=loss + _,predicted = torch.max(out,1) + acc+=(predicted==lbls).sum() + count+=len(labels) + if i%print_freq==0: + print("Epoch {}, minibatch {}: train acc = {}, train loss = {}".format(epoch,i,acc.item()/count,total_loss.item()/count)) + vl,va = validate(net,test_loader,loss_fn) + print("Epoch {} done, validation acc = {}, validation loss = {}".format(epoch,va,vl)) + + +def plot_results(hist): + plt.figure(figsize=(15,5)) + plt.subplot(121) + plt.plot(hist['train_acc'], label='Training acc') + plt.plot(hist['val_acc'], label='Validation acc') + plt.legend() + plt.subplot(122) + plt.plot(hist['train_loss'], label='Training loss') + plt.plot(hist['val_loss'], label='Validation loss') + plt.legend() + +def plot_convolution(t,title=''): + with torch.no_grad(): + c = nn.Conv2d(kernel_size=(3,3),out_channels=1,in_channels=1) + c.weight.copy_(t) + fig, ax = plt.subplots(2,6,figsize=(8,3)) + fig.suptitle(title,fontsize=16) + for i in range(5): + im = data_train[i][0] + ax[0][i].imshow(im[0]) + ax[1][i].imshow(c(im.unsqueeze(0))[0][0]) + ax[0][i].axis('off') + ax[1][i].axis('off') + ax[0,5].imshow(t) + ax[0,5].axis('off') + ax[1,5].axis('off') + #plt.tight_layout() + plt.show() + +def display_dataset(dataset, n=10,classes=None): + fig,ax = plt.subplots(1,n,figsize=(15,3)) + mn = min([dataset[i][0].min() for i in range(n)]) + mx = max([dataset[i][0].max() for i in range(n)]) + for i in range(n): + ax[i].imshow(np.transpose((dataset[i][0]-mn)/(mx-mn),(1,2,0))) + ax[i].axis('off') + if classes: + ax[i].set_title(classes[dataset[i][1]]) + + +def check_image(fn): + try: + im = Image.open(fn) + im.verify() + return True + except: + return False + +def check_image_dir(path): + for fn in glob.glob(path): + if not check_image(fn): + print("Corrupt image: {}".format(fn)) + os.remove(fn) + + +def common_transform(): + std_normalize = torchvision.transforms.Normalize(mean=[0.485, 0.456, 0.406], + std=[0.229, 0.224, 0.225]) + trans = torchvision.transforms.Compose([ + torchvision.transforms.Resize(256), + torchvision.transforms.CenterCrop(224), + torchvision.transforms.ToTensor(), + std_normalize]) + return trans + +def load_cats_dogs_dataset(): + if not os.path.exists('data/PetImages'): + with zipfile.ZipFile('data/kagglecatsanddogs_3367a.zip', 'r') as zip_ref: + zip_ref.extractall('data') + + check_image_dir('data/PetImages/Cat/*.jpg') + check_image_dir('data/PetImages/Dog/*.jpg') + + dataset = torchvision.datasets.ImageFolder('data/PetImages',transform=common_transform()) + trainset, testset = torch.utils.data.random_split(dataset,[20000,len(dataset)-20000]) + trainloader = torch.utils.data.DataLoader(trainset,batch_size=32) + testloader = torch.utils.data.DataLoader(trainset,batch_size=32) + return dataset, trainloader, testloader \ No newline at end of file diff --git a/4-ComputerVision/07-ConvNets/tfcv.py b/4-ComputerVision/07-ConvNets/tfcv.py new file mode 100644 index 00000000..c5aff501 --- /dev/null +++ b/4-ComputerVision/07-ConvNets/tfcv.py @@ -0,0 +1,86 @@ +# Tensorflow Computer Vision Helper + +import tensorflow as tf +from tensorflow import keras +import numpy as np +import matplotlib.pyplot as plt +from PIL import Image +import glob +import os + +def plot_convolution(data,t,title=''): + fig, ax = plt.subplots(2,len(data)+1,figsize=(8,3)) + fig.suptitle(title,fontsize=16) + tt = np.expand_dims(np.expand_dims(t,2),2) + for i,im in enumerate(data): + ax[0][i].imshow(im) + ximg = np.expand_dims(np.expand_dims(im,2),0) + cim = tf.nn.conv2d(ximg,tt,1,'SAME') + ax[1][i].imshow(cim[0][:,:,0]) + ax[0][i].axis('off') + ax[1][i].axis('off') + ax[0,-1].imshow(t) + ax[0,-1].axis('off') + ax[1,-1].axis('off') + #plt.tight_layout() + plt.show() + +def plot_results(hist): + fig,ax = plt.subplots(1,2,figsize=(15,3)) + ax[0].set_title('Accuracy') + ax[1].set_title('Loss') + for x in ['acc','val_acc']: + ax[0].plot(hist.history[x]) + for x in ['loss','val_loss']: + ax[1].plot(hist.history[x]) + plt.show() + +def display_dataset(dataset, labels=None, n=10, classes=None): + fig,ax = plt.subplots(1,n,figsize=(15,3)) + for i in range(n): + ax[i].imshow(dataset[i]) + ax[i].axis('off') + if classes is not None and labels is not None: + ax[i].set_title(classes[labels[i][0]]) + +def check_image(fn): + try: + im = Image.open(fn) + im.verify() + return im.format=='JPEG' + except: + return False + +def check_image_dir(path): + for fn in glob.glob(path): + if not check_image(fn): + print("Corrupt image or wrong format: {}".format(fn)) + os.remove(fn) + +def load_cats_dogs_dataset(batch_size=64): + if not os.path.exists('data/PetImages'): + print("Extracting the dataset") + with zipfile.ZipFile('data/kagglecatsanddogs_3367a.zip', 'r') as zip_ref: + zip_ref.extractall('data') + print("Checking dataset") + check_image_dir('data/PetImages/Cat/*.jpg') + check_image_dir('data/PetImages/Dog/*.jpg') + data_dir = 'data/PetImages' + print("Loading dataset") + ds_train = keras.preprocessing.image_dataset_from_directory( + data_dir, + validation_split = 0.2, + subset = 'training', + seed = 13, + image_size = (224,224), + batch_size = batch_size + ) + ds_test = keras.preprocessing.image_dataset_from_directory( + data_dir, + validation_split = 0.2, + subset = 'validation', + seed = 13, + image_size = (224,224), + batch_size = batch_size + ) + return ds_train,ds_test diff --git a/4-ComputerVision/08-TransferLearning/TransferLearningPyTorch.ipynb b/4-ComputerVision/08-TransferLearning/TransferLearningPyTorch.ipynb new file mode 100644 index 00000000..8d0ea78e --- /dev/null +++ b/4-ComputerVision/08-TransferLearning/TransferLearningPyTorch.ipynb @@ -0,0 +1,953 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Pre-trained models and transfer learning\n", + "\n", + "Training CNNs can take a lot of time, and a lot of data is required for that task. However, much of the time is spent to learn the best low-level filters that a network is using to extract patterns from images. A natural question arises - can we use a neural network trained on one dataset and adapt it to classifying different images without full training process?\n", + "\n", + "This approach is called **transfer learning**, because we transfer some knowledge from one neural network model to another. In transfer learning, we typically start with a pre-trained model, which has been trained on some large image dataset, such as **ImageNet**. Those models can already do a good job extracting different features from generic images, and in many cases just building a classifier on top of those extracted features can yield a good result." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import torch\n", + "import torch.nn as nn\n", + "import torchvision\n", + "import torchvision.transforms as transforms\n", + "import matplotlib.pyplot as plt\n", + "from torchinfo import summary\n", + "import numpy as np\n", + "import os\n", + "\n", + "from pytorchcv import train, plot_results, display_dataset, train_long, check_image_dir" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Cats vs. Dogs Dataset\n", + "\n", + "In this unit, we will solve a real-life problem of classifying images of cats and dogs. For this reason, we will use [Kaggle Cats vs. Dogs Dataset](https://www.kaggle.com/c/dogs-vs-cats), which can also be downloaded [from Microsoft](https://www.microsoft.com/en-us/download/details.aspx?id=54765).\n", + "\n", + "Let's download this dataset and extract it into `data` directory (this process may take some time!):" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "if not os.path.exists('data/kagglecatsanddogs_3367a.zip'):\n", + " !wget -P data -q https://download.microsoft.com/download/3/E/1/3E1C3F21-ECDB-4869-8368-6DEBA77B919F/kagglecatsanddogs_3367a.zip" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "import zipfile\n", + "if not os.path.exists('data/PetImages'):\n", + " with zipfile.ZipFile('data/kagglecatsanddogs_3367a.zip', 'r') as zip_ref:\n", + " zip_ref.extractall('data')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Unfortunately, there are some corrupt image files in the dataset. We need to do quick cleaning to check for corrupted files. In order not to clobber this tutorial, we moved the code to verify dataset into a module." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Corrupt image: data/PetImages/Cat/666.jpg\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/anaconda/envs/py38_pytorch/lib/python3.8/site-packages/PIL/TiffImagePlugin.py:793: UserWarning: Truncated File Read\n", + " warnings.warn(str(msg))\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Corrupt image: data/PetImages/Dog/11702.jpg\n" + ] + } + ], + "source": [ + "check_image_dir('data/PetImages/Cat/*.jpg')\n", + "check_image_dir('data/PetImages/Dog/*.jpg')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next, let's load the images into PyTorch dataset, converting them to tensors and doing some normalization. We will apply `std_normalize` transform to bring images to the range expected by pre-trained VGG network:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "std_normalize = transforms.Normalize(mean=[0.485, 0.456, 0.406],\n", + " std=[0.229, 0.224, 0.225])\n", + "trans = transforms.Compose([\n", + " transforms.Resize(256),\n", + " transforms.CenterCrop(224),\n", + " transforms.ToTensor(), \n", + " std_normalize])\n", + "dataset = torchvision.datasets.ImageFolder('data/PetImages',transform=trans)\n", + "trainset, testset = torch.utils.data.random_split(dataset,[20000,len(dataset)-20000])\n", + "\n", + "display_dataset(dataset)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Pre-trained models\n", + "\n", + "There are many different pre-trained models available inside `torchvision` module, and even more models can be found on the Internet. Let's see how simplest VGG-16 model can be loaded and used:" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Downloading: \"https://download.pytorch.org/models/vgg16-397923af.pth\" to /home/cathy/.cache/torch/hub/checkpoints/vgg16-397923af.pth\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "16e2fa013a884411acaf74d836bc8f65", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + " 0%| | 0.00/528M [00:00" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "res = vgg.features(sample_image).cpu()\n", + "plt.figure(figsize=(15,3))\n", + "plt.imshow(res.detach().view(-1,512))\n", + "print(res.size())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The dimension of feature tensor is 512x7x7, but in order to visualize it we had to reshape it to 2D form.\n", + "\n", + "Now let's try to see if those features can be used to classify images. Let's manually take some portion of images (800 in our case), and pre-compute their feature vectors. We will store the result in one big tensor called `feature_tensor`, and also labels into `label_tensor`:" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "...................................................................................................." + ] + } + ], + "source": [ + "bs = 8\n", + "dl = torch.utils.data.DataLoader(dataset,batch_size=bs,shuffle=True)\n", + "num = bs*100\n", + "feature_tensor = torch.zeros(num,512*7*7).to(device)\n", + "label_tensor = torch.zeros(num).to(device)\n", + "i = 0\n", + "for x,l in dl:\n", + " with torch.no_grad():\n", + " f = vgg.features(x.to(device))\n", + " feature_tensor[i:i+bs] = f.view(bs,-1)\n", + " label_tensor[i:i+bs] = l\n", + " i+=bs\n", + " print('.',end='')\n", + " if i>=num:\n", + " break\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can define `vgg_dataset` that takes data from this tensor, split it into training and test sets using `random_split` function, and train a small one-layer dense classifier network on top of extracted features:" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/anaconda/envs/py38_pytorch/lib/python3.8/site-packages/torch/nn/modules/container.py:119: UserWarning: Implicit dimension choice for log_softmax has been deprecated. Change the call to include dim=X as an argument.\n", + " input = module(input)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 0, Train acc=0.879, Val acc=0.990, Train loss=0.110, Val loss=0.007\n", + "Epoch 1, Train acc=0.981, Val acc=0.980, Train loss=0.015, Val loss=0.021\n", + "Epoch 2, Train acc=0.999, Val acc=0.990, Train loss=0.001, Val loss=0.002\n", + "Epoch 3, Train acc=1.000, Val acc=0.980, Train loss=0.000, Val loss=0.002\n", + "Epoch 4, Train acc=1.000, Val acc=0.980, Train loss=0.000, Val loss=0.002\n", + "Epoch 5, Train acc=1.000, Val acc=0.980, Train loss=0.000, Val loss=0.002\n", + "Epoch 6, Train acc=1.000, Val acc=0.980, Train loss=0.000, Val loss=0.002\n", + "Epoch 7, Train acc=1.000, Val acc=0.980, Train loss=0.000, Val loss=0.002\n", + "Epoch 8, Train acc=1.000, Val acc=0.980, Train loss=0.000, Val loss=0.002\n", + "Epoch 9, Train acc=1.000, Val acc=0.980, Train loss=0.000, Val loss=0.002\n" + ] + } + ], + "source": [ + "vgg_dataset = torch.utils.data.TensorDataset(feature_tensor,label_tensor.to(torch.long))\n", + "train_ds, test_ds = torch.utils.data.random_split(vgg_dataset,[700,100])\n", + "\n", + "train_loader = torch.utils.data.DataLoader(train_ds,batch_size=32)\n", + "test_loader = torch.utils.data.DataLoader(test_ds,batch_size=32)\n", + "\n", + "net = torch.nn.Sequential(torch.nn.Linear(512*7*7,2),torch.nn.LogSoftmax()).to(device)\n", + "\n", + "history = train(net,train_loader,test_loader)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The result is great, we can distinguish between a cat and a dog with almost 98% probability! However, we have only tested this approach on a small subset of all images, because manual feature extraction seems to take a lot of time.\n", + "\n", + "## Transfer learning using one VGG network\n", + "\n", + "We can also avoid manually pre-computing the features by using the original VGG-16 network as a whole during training. Let's look at the VGG-16 object structure:" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "VGG(\n", + " (features): Sequential(\n", + " (0): Conv2d(3, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", + " (1): ReLU(inplace=True)\n", + " (2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", + " (3): ReLU(inplace=True)\n", + " (4): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)\n", + " (5): Conv2d(64, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", + " (6): ReLU(inplace=True)\n", + " (7): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", + " (8): ReLU(inplace=True)\n", + " (9): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)\n", + " (10): Conv2d(128, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", + " (11): ReLU(inplace=True)\n", + " (12): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", + " (13): ReLU(inplace=True)\n", + " (14): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", + " (15): ReLU(inplace=True)\n", + " (16): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)\n", + " (17): Conv2d(256, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", + " (18): ReLU(inplace=True)\n", + " (19): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", + " (20): ReLU(inplace=True)\n", + " (21): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", + " (22): ReLU(inplace=True)\n", + " (23): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)\n", + " (24): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", + " (25): ReLU(inplace=True)\n", + " (26): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", + " (27): ReLU(inplace=True)\n", + " (28): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n", + " (29): ReLU(inplace=True)\n", + " (30): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)\n", + " )\n", + " (avgpool): AdaptiveAvgPool2d(output_size=(7, 7))\n", + " (classifier): Sequential(\n", + " (0): Linear(in_features=25088, out_features=4096, bias=True)\n", + " (1): ReLU(inplace=True)\n", + " (2): Dropout(p=0.5, inplace=False)\n", + " (3): Linear(in_features=4096, out_features=4096, bias=True)\n", + " (4): ReLU(inplace=True)\n", + " (5): Dropout(p=0.5, inplace=False)\n", + " (6): Linear(in_features=4096, out_features=1000, bias=True)\n", + " )\n", + ")\n" + ] + } + ], + "source": [ + "print(vgg)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can see that the network contains:\n", + "* feature extractor (`features`), comprised of a number of convolutional and pooling layers\n", + "* average pooling layer (`avgpool`)\n", + "* final `classifier`, consisting of several dense layers, which turns 25088 input features into 1000 classes (which is the number of classes in ImageNet)\n", + "\n", + "To train the end-to-end model that will classify our dataset, we need to:\n", + "* **replace the final classifier** with the one that will produce required number of classes. In our case, we can use one `Linear` layer with 25088 inputs and 2 output neurons.\n", + "* **freeze weights of convolutional feature extractor**, so that they are not trained. It is recommended to initially do this freezing, because otherwise untrained classifier layer can destroy the original pre-trained weights of convolutional extractor. Freezing weights can be accomplished by setting `requires_grad` property of all parameters to `False`" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "==========================================================================================\n", + "Layer (type:depth-idx) Output Shape Param #\n", + "==========================================================================================\n", + "VGG -- --\n", + "├─Sequential: 1-1 [1, 512, 7, 7] --\n", + "│ └─Conv2d: 2-1 [1, 64, 244, 244] (1,792)\n", + "│ └─ReLU: 2-2 [1, 64, 244, 244] --\n", + "│ └─Conv2d: 2-3 [1, 64, 244, 244] (36,928)\n", + "│ └─ReLU: 2-4 [1, 64, 244, 244] --\n", + "│ └─MaxPool2d: 2-5 [1, 64, 122, 122] --\n", + "│ └─Conv2d: 2-6 [1, 128, 122, 122] (73,856)\n", + "│ └─ReLU: 2-7 [1, 128, 122, 122] --\n", + "│ └─Conv2d: 2-8 [1, 128, 122, 122] (147,584)\n", + "│ └─ReLU: 2-9 [1, 128, 122, 122] --\n", + "│ └─MaxPool2d: 2-10 [1, 128, 61, 61] --\n", + "│ └─Conv2d: 2-11 [1, 256, 61, 61] (295,168)\n", + "│ └─ReLU: 2-12 [1, 256, 61, 61] --\n", + "│ └─Conv2d: 2-13 [1, 256, 61, 61] (590,080)\n", + "│ └─ReLU: 2-14 [1, 256, 61, 61] --\n", + "│ └─Conv2d: 2-15 [1, 256, 61, 61] (590,080)\n", + "│ └─ReLU: 2-16 [1, 256, 61, 61] --\n", + "│ └─MaxPool2d: 2-17 [1, 256, 30, 30] --\n", + "│ └─Conv2d: 2-18 [1, 512, 30, 30] (1,180,160)\n", + "│ └─ReLU: 2-19 [1, 512, 30, 30] --\n", + "│ └─Conv2d: 2-20 [1, 512, 30, 30] (2,359,808)\n", + "│ └─ReLU: 2-21 [1, 512, 30, 30] --\n", + "│ └─Conv2d: 2-22 [1, 512, 30, 30] (2,359,808)\n", + "│ └─ReLU: 2-23 [1, 512, 30, 30] --\n", + "│ └─MaxPool2d: 2-24 [1, 512, 15, 15] --\n", + "│ └─Conv2d: 2-25 [1, 512, 15, 15] (2,359,808)\n", + "│ └─ReLU: 2-26 [1, 512, 15, 15] --\n", + "│ └─Conv2d: 2-27 [1, 512, 15, 15] (2,359,808)\n", + "│ └─ReLU: 2-28 [1, 512, 15, 15] --\n", + "│ └─Conv2d: 2-29 [1, 512, 15, 15] (2,359,808)\n", + "│ └─ReLU: 2-30 [1, 512, 15, 15] --\n", + "│ └─MaxPool2d: 2-31 [1, 512, 7, 7] --\n", + "├─AdaptiveAvgPool2d: 1-2 [1, 512, 7, 7] --\n", + "├─Linear: 1-3 [1, 2] 50,178\n", + "==========================================================================================\n", + "Total params: 14,764,866\n", + "Trainable params: 50,178\n", + "Non-trainable params: 14,714,688\n", + "Total mult-adds (G): 17.99\n", + "==========================================================================================\n", + "Input size (MB): 0.71\n", + "Forward/backward pass size (MB): 128.13\n", + "Params size (MB): 59.06\n", + "Estimated Total Size (MB): 187.91\n", + "==========================================================================================" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "vgg.classifier = torch.nn.Linear(25088,2).to(device)\n", + "\n", + "for x in vgg.features.parameters():\n", + " x.requires_grad = False\n", + "\n", + "summary(vgg,(1, 3,244,244))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As you can see from the summary, this model contain around 15 million total parameters, but only 50k of them are trainable - those are the weights of classification layer. That is good, because we are able to fine-tune smaller number of parameters with smaller number of examples.\n", + "\n", + "Now let's train the model using our original dataset. This process will take a long time, so we will use `train_long` function that will print some intermediate results without waiting for the end of epoch. It is highly recommended to run this training on GPU-enabled compute!" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 0, minibatch 0: train acc = 0.5, train loss = 0.0431101992726326\n", + "Epoch 0, minibatch 90: train acc = 0.9539835164835165, train loss = 0.0960497070144821\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/anaconda/envs/py38_pytorch/lib/python3.8/site-packages/PIL/TiffImagePlugin.py:793: UserWarning: Truncated File Read\n", + " warnings.warn(str(msg))\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 0, minibatch 180: train acc = 0.9582182320441989, train loss = 0.12481052967724879\n", + "Epoch 0, minibatch 270: train acc = 0.9587177121771218, train loss = 0.14185787918822793\n", + "Epoch 0, minibatch 360: train acc = 0.9634695290858726, train loss = 0.14566257719848294\n", + "Epoch 0, minibatch 450: train acc = 0.966879157427938, train loss = 0.13402751914149114\n", + "Epoch 0, minibatch 540: train acc = 0.9686922365988909, train loss = 0.13931148902766144\n", + "Epoch 0, minibatch 630: train acc = 0.9694928684627575, train loss = 0.1386710044510202\n", + "Epoch 0, minibatch 720: train acc = 0.970613730929265, train loss = 0.13363790313678375\n", + "Epoch 0, minibatch 810: train acc = 0.9709463625154131, train loss = 0.1342217084364885\n", + "Epoch 0, minibatch 900: train acc = 0.9721143174250833, train loss = 0.13233261023721474\n", + "Epoch 0, minibatch 990: train acc = 0.9726286579212916, train loss = 0.1334670727957871\n", + "Epoch 0, minibatch 1080: train acc = 0.9733464384828863, train loss = 0.13777193110039893\n", + "Epoch 0, minibatch 1170: train acc = 0.9734735269000854, train loss = 0.14239378162778207\n", + "Epoch 0 done, validation acc = 0.9671868747499, validation loss = 0.25287964306816474\n" + ] + } + ], + "source": [ + "trainset, testset = torch.utils.data.random_split(dataset,[20000,len(dataset)-20000])\n", + "train_loader = torch.utils.data.DataLoader(trainset,batch_size=16)\n", + "test_loader = torch.utils.data.DataLoader(testset,batch_size=16)\n", + "\n", + "train_long(vgg,train_loader,test_loader,loss_fn=torch.nn.CrossEntropyLoss(),epochs=1,print_freq=90)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "It looks like we have obtained reasonably accurate cats vs. dogs classifier! Let's save it for future use!" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "torch.save(vgg,'data/cats_dogs.pth')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can then load the model from file at any time. You may find it useful in case the next experiment destroys the model - you would not have to re-start from scratch." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [], + "source": [ + "vgg = torch.load('data/cats_dogs.pth')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Fine-tuning transfer learning\n", + "\n", + "In the previous section, we have trained the final classifier layer to classify images in our own dataset. However, we did not re-train the feature extractor, and our model relied on the features that the model has learned on ImageNet data. If your objects visually differ from ordinary ImageNet images, this combination of features might not work best. Thus it makes sense to start training convolutional layers as well.\n", + "\n", + "To do that, we can unfreeze the convolutional filter parameters that we have previously frozen. \n", + "\n", + "> **Note:** It is important that you freeze parameters first and perform several epochs of training in order to stabilize weights in the classification layer. If you immediately start training end-to-end network with unfrozen parameters, large errors are likely to destroy the pre-trained weights in the convolutional layers." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "for x in vgg.features.parameters():\n", + " x.requires_grad = True" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "After unfreezing, we can do a few more epochs of training. You can also select lower learning rate, in order to minimize the impact on the pre-trained weights. However, even with low learning rate, you can expect the accuracy to drop in the beginning of the training, until finally reaching slightly higher level than in the case of fixed weights.\n", + "\n", + "> **Note:** This training happens much slower, because we need to propagate gradients back through many layers of the network! You may want to watch the first few minibatches to see the tendency, and then stop the computation." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 0, minibatch 0: train acc = 1.0, train loss = 0.0\n", + "Epoch 0, minibatch 90: train acc = 0.8990384615384616, train loss = 0.2978392171335744\n", + "Epoch 0, minibatch 180: train acc = 0.9060773480662984, train loss = 0.1658294214069514\n", + "Epoch 0, minibatch 270: train acc = 0.9102859778597786, train loss = 0.11819224340009514\n", + "Epoch 0, minibatch 360: train acc = 0.9191481994459834, train loss = 0.09244130522920814\n", + "Epoch 0, minibatch 450: train acc = 0.9261363636363636, train loss = 0.07583886292451236\n", + "Epoch 0, minibatch 540: train acc = 0.928373382624769, train loss = 0.06537413817456822\n", + "Epoch 0, minibatch 630: train acc = 0.9318541996830428, train loss = 0.057419379426257924\n", + "Epoch 0, minibatch 720: train acc = 0.9361130374479889, train loss = 0.05114534460059813\n", + "Epoch 0, minibatch 810: train acc = 0.938347718865598, train loss = 0.04657612246737968\n", + "Epoch 0, minibatch 900: train acc = 0.9407602663706992, train loss = 0.04258851655712403\n", + "Epoch 0, minibatch 990: train acc = 0.9431130171543896, train loss = 0.03927870595491257\n", + "Epoch 0, minibatch 1080: train acc = 0.945536540240518, train loss = 0.03652716609309053\n", + "Epoch 0, minibatch 1170: train acc = 0.9463065755764304, train loss = 0.03445258006186286\n", + "Epoch 0 done, validation acc = 0.974389755902361, validation loss = 0.005457923144233279\n" + ] + } + ], + "source": [ + "train_long(vgg,train_loader,test_loader,loss_fn=torch.nn.CrossEntropyLoss(),epochs=1,print_freq=90,lr=0.0001)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Other computer vision models\n", + "\n", + "VGG-16 is one of the simplest computer vision architectures. `torchvision` package provides many more pre-trained networks. The most frequently used ones among those are **ResNet** architectures, developed by Microsoft, and **Inception** by Google. For example, let's explore the architecture of the simplest ResNet-18 model (ResNet is a family of models with different depth, you can try experimenting with ResNet-151 if you want to see what a really deep model looks like):" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ResNet(\n", + " (conv1): Conv2d(3, 64, kernel_size=(7, 7), stride=(2, 2), padding=(3, 3), bias=False)\n", + " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (relu): ReLU(inplace=True)\n", + " (maxpool): MaxPool2d(kernel_size=3, stride=2, padding=1, dilation=1, ceil_mode=False)\n", + " (layer1): Sequential(\n", + " (0): BasicBlock(\n", + " (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (relu): ReLU(inplace=True)\n", + " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " )\n", + " (1): BasicBlock(\n", + " (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (relu): ReLU(inplace=True)\n", + " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " )\n", + " )\n", + " (layer2): Sequential(\n", + " (0): BasicBlock(\n", + " (conv1): Conv2d(64, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", + " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (relu): ReLU(inplace=True)\n", + " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (downsample): Sequential(\n", + " (0): Conv2d(64, 128, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", + " (1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " )\n", + " )\n", + " (1): BasicBlock(\n", + " (conv1): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (relu): ReLU(inplace=True)\n", + " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " )\n", + " )\n", + " (layer3): Sequential(\n", + " (0): BasicBlock(\n", + " (conv1): Conv2d(128, 256, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", + " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (relu): ReLU(inplace=True)\n", + " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (downsample): Sequential(\n", + " (0): Conv2d(128, 256, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", + " (1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " )\n", + " )\n", + " (1): BasicBlock(\n", + " (conv1): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (relu): ReLU(inplace=True)\n", + " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " )\n", + " )\n", + " (layer4): Sequential(\n", + " (0): BasicBlock(\n", + " (conv1): Conv2d(256, 512, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n", + " (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (relu): ReLU(inplace=True)\n", + " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (downsample): Sequential(\n", + " (0): Conv2d(256, 512, kernel_size=(1, 1), stride=(2, 2), bias=False)\n", + " (1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " )\n", + " )\n", + " (1): BasicBlock(\n", + " (conv1): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " (relu): ReLU(inplace=True)\n", + " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n", + " (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", + " )\n", + " )\n", + " (avgpool): AdaptiveAvgPool2d(output_size=(1, 1))\n", + " (fc): Linear(in_features=512, out_features=1000, bias=True)\n", + ")\n" + ] + } + ], + "source": [ + "resnet = torchvision.models.resnet18()\n", + "print(resnet)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As you can see, the model contains the same building blocks: feature extractor and final classifier (`fc`). This allows us to use this model in exactly the same manner as we have been using VGG-16 for transfer learning. You can try experimenting with the code above, using different ResNet models as the base model, and see how accuracy changes.\n", + "\n", + "## Batch Normalization\n", + "\n", + "This network contains yet another type of layer: **Batch Normalization**. The idea of batch normalization is to bring values that flow through the neural network to right interval. Usually neural networks work best when all values are in the range of [-1,1] or [0,1], and that is the reason that we scale/normalize our input data accordingly. However, during training of a deep network, it can happen that values get significantly out of this range, which makes training problematic. Batch normalization layer computes average and standard deviation for all values of the current minibatch, and uses them to normalize the signal before passing it through a neural network layer. This significantly improves the stability of deep networks.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Takeaway\n", + "\n", + "Using transfer learning, we were able to quickly put together a classifier for our custom object classification task, and achieve high accuracy. However, this example was not completely fair, because original VGG-16 network was pre-trained to recognize cats and dogs, and thus we were just reusing most of the patterns that were already present in the network. You can expect lower accuracy on more exotic domain-specific objects, such as details on production line in a plant, or different tree leaves.\n", + "\n", + "You can see that more complex tasks that we are solving now require higher computational power, and cannot be easily solved on the CPU. In the next unit, we will try to use more lightweight implementation to train the same model using lower compute resources, which results in just slightly lower accuracy. " + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "py37_pytorch", + "language": "python", + "name": "conda-env-py37_pytorch-py" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.7" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb b/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb new file mode 100644 index 00000000..e9a19fda --- /dev/null +++ b/4-ComputerVision/08-TransferLearning/TransferLearningTF.ipynb @@ -0,0 +1,1492 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Pre-trained models and transfer learning\n", + "\n", + "Training CNNs can take a lot of time, and a lot of data is required for that task. However, much of the time is spent to learn the best low-level filters that a network is using to extract patterns from images. A natural question arises - can we use a neural network trained on one dataset and adapt it to classifying different images without full training process?\n", + "\n", + "This approach is called **transfer learning**, because we transfer some knowledge from one neural network model to another. In transfer learning, we typically start with a pre-trained model, which has been trained on some large image dataset, such as **ImageNet**. Those models can already do a good job extracting different features from generic images, and in many cases just building a classifier on top of those extracted features can yield a good result." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import tensorflow as tf\n", + "from tensorflow import keras\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import os\n", + "from tfcv import *" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Cats vs. Dogs Dataset\n", + "\n", + "In this unit, we will solve a real-life problem of classifying images of cats and dogs. For this reason, we will use [Kaggle Cats vs. Dogs Dataset](https://www.kaggle.com/c/dogs-vs-cats), which can also be downloaded [from Microsoft](https://www.microsoft.com/en-us/download/details.aspx?id=54765).\n", + "\n", + "Let's download this dataset and extract it into `data` directory (this process may take some time!):" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "if not os.path.exists('data/kagglecatsanddogs_3367a.zip'):\n", + " !wget -P data -q https://download.microsoft.com/download/3/E/1/3E1C3F21-ECDB-4869-8368-6DEBA77B919F/kagglecatsanddogs_3367a.zip" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import zipfile\n", + "if not os.path.exists('data/PetImages'):\n", + " with zipfile.ZipFile('data/kagglecatsanddogs_3367a.zip', 'r') as zip_ref:\n", + " zip_ref.extractall('data')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Unfortunately, there are some corrupt image files in the dataset. We need to do quick cleaning to check for corrupted files. In order not to clobber this tutorial, we moved the code to verify dataset into a module." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Corrupt image or wrong format: data/PetImages/Cat/12235.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/2663.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/4929.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/8183.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/11083.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/6435.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/6491.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/7968.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/6768.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/11397.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/8295.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/4874.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/23.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/11864.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/3491.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/11729.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/3197.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/10874.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/6376.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/9361.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/9328.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/910.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/2021.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/666.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/3710.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/9171.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/6906.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/11095.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/660.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/8415.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/3161.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/850.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/7003.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/1267.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/7642.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/8553.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/6900.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/4334.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/10404.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/6980.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/936.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/9619.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/3300.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/7647.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/2742.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/9565.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/1757.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/11874.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/1936.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/5077.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/7845.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/8832.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/11935.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/9208.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/4322.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/7978.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/10820.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/391.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/10073.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/8958.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/8470.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/445.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/4821.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/11565.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/4351.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/4833.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/140.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/3153.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/5370.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/5819.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/3649.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/4293.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/3967.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/1937.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/10125.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/1386.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/4750.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/6029.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/5614.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/2569.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/9778.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/6486.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/11210.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/7502.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/2189.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/1151.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/4629.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/12080.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/10501.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/1914.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/11086.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/4000.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/9100.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/5553.jpg\n", + "Corrupt image or wrong format: data/PetImages/Cat/12269.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/5243.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/3288.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/11912.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/3320.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/11166.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/8194.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/2353.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/9026.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/8557.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/7969.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/8693.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/4367.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/1900.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/5730.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/9961.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/8126.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/8521.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/11560.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/11233.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/11675.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/8889.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/9414.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/3588.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/10353.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/10733.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/6238.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/5618.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/7743.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/10747.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/6503.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/11410.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/5955.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/2915.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/3136.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/4086.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/2905.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/2494.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/3546.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/5547.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/9851.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/9188.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/4203.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/8715.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/4640.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/1866.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/7718.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/7514.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/1017.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/12102.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/296.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/6718.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/11253.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/10173.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/11849.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/10383.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/10678.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/5790.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/6318.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/1884.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/4654.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/9145.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/2479.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/12289.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/2688.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/4134.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/10637.jpg\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/anaconda/envs/py38_tensorflow/lib/python3.8/site-packages/PIL/TiffImagePlugin.py:793: UserWarning: Truncated File Read\n", + " warnings.warn(str(msg))\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Corrupt image or wrong format: data/PetImages/Dog/543.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/8730.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/12114.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/522.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/10863.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/10401.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/7739.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/561.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/1308.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/9643.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/3155.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/5736.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/4257.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/11853.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/6855.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/1259.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/7652.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/573.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/11702.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/414.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/4301.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/9500.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/10726.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/9367.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/2877.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/10907.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/10972.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/7311.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/10797.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/2317.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/7128.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/6500.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/11285.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/6430.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/6032.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/10969.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/8364.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/11692.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/3038.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/5604.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/565.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/9640.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/7459.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/6305.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/6555.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/11590.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/6059.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/3927.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/10705.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/2384.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/3885.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/663.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/9043.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/8563.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/9556.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/9967.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/10158.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/5263.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/8641.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/7369.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/4924.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/10351.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/6213.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/5104.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/1356.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/7133.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/7112.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/1168.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/719.jpg\n", + "Corrupt image or wrong format: data/PetImages/Dog/50.jpg\n" + ] + } + ], + "source": [ + "check_image_dir('data/PetImages/Cat/*.jpg')\n", + "check_image_dir('data/PetImages/Dog/*.jpg')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Loading the Dataset\n", + "\n", + "In previous examples, we were loading datasets that are built into Keras. Now we are about to deal with our own dataset, which we need to load from a directory of images.\n", + "\n", + "In real life, the size of image datasets can be pretty large, and one cannot rely on all data being able to fit into memory. Thus, datasets are often represented as **generators** that can return data in minibatches suitable for training.\n", + "\n", + "To deal with image classification, Keras includes special function `image_dataset_from_directory`, which can load images from subdirectories corresponding to different classes. This function also takes care of scaling images, and it can also split dataset into train and test subsets:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Found 24769 files belonging to 2 classes.\n", + "Using 19816 files for training.\n", + "Found 24769 files belonging to 2 classes.\n", + "Using 4953 files for validation.\n" + ] + } + ], + "source": [ + "data_dir = 'data/PetImages'\n", + "batch_size = 64\n", + "ds_train = keras.preprocessing.image_dataset_from_directory(\n", + " data_dir,\n", + " validation_split = 0.2,\n", + " subset = 'training',\n", + " seed = 13,\n", + " image_size = (224,224),\n", + " batch_size = batch_size\n", + ")\n", + "ds_test = keras.preprocessing.image_dataset_from_directory(\n", + " data_dir,\n", + " validation_split = 0.2,\n", + " subset = 'validation',\n", + " seed = 13,\n", + " image_size = (224,224),\n", + " batch_size = batch_size\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "It is important to set the same `seed` value for both calls, because it affects the split of images between train and test dataset.\n", + "\n", + "Dataset automatically picks up class names from directories, and you can access them if needed by calling:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['Cat', 'Dog']" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ds_train.class_names" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Datasets that we have obtained can be directly passed to `fit` function to train the model. They contain both corresponding images and labels, which can be looped over using the following construction:" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Training batch shape: features=(64, 224, 224, 3), labels=(64,)\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "for x,y in ds_train:\n", + " print(f\"Training batch shape: features={x.shape}, labels={y.shape}\")\n", + " x_sample, y_sample = x,y\n", + " break\n", + " \n", + "display_dataset(x_sample.numpy().astype(np.int),np.expand_dims(y_sample,1),classes=ds_train.class_names)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "> **Note**: All images in the dataset are represented as floatint point tensors with range 0-255. Before passing them to the neural network, we need to scale those values into 0-1 range. When plotting images, we either need to do the same, or convert values to the `int` type (which we do in the code above), in order to show `matplotlib` that we want to plot the original unscaled image." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Pre-trained models\n", + "\n", + "For many image classification tasks one can find pre-trained neural network models. Many of those models are available inside `keras.applications` namespace, and even more models can be found on the Internet. Let's see how simplest VGG-16 model can be loaded and used:" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Downloading data from https://storage.googleapis.com/tensorflow/keras-applications/vgg16/vgg16_weights_tf_dim_ordering_tf_kernels.h5\n", + "553467904/553467096 [==============================] - 6s 0us/step\n", + "Most probable class = [208]\n", + "Downloading data from https://storage.googleapis.com/download.tensorflow.org/data/imagenet_class_index.json\n", + "40960/35363 [==================================] - 0s 0us/step\n" + ] + }, + { + "data": { + "text/plain": [ + "[[('n02099712', 'Labrador_retriever', 0.5340957),\n", + " ('n02100236', 'German_short-haired_pointer', 0.0939442),\n", + " ('n02092339', 'Weimaraner', 0.08160535),\n", + " ('n02099849', 'Chesapeake_Bay_retriever', 0.057179328),\n", + " ('n02109047', 'Great_Dane', 0.03733857)]]" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "vgg = keras.applications.VGG16()\n", + "inp = keras.applications.vgg16.preprocess_input(x_sample[:1])\n", + "\n", + "res = vgg(inp)\n", + "print(f\"Most probable class = {tf.argmax(res,1)}\")\n", + "\n", + "keras.applications.vgg16.decode_predictions(res.numpy())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "There are a couple of important things here:\n", + "* Before passing an input to any pre-trained network it has to be pre-processed in a certain way. This is done by calling corresponding `preprocess_input` function, which receives a batch of images, and returns their processed form. In the case of VGG-16, images are normalized, and some pre-defined avarage value for each channels is subtracted. That is because VGG-16 was originally trained with this pre-processing.\n", + "* Neural network is applied to the input batch, and we receive as the result a batch of 1000-element tensors that show probability of each class. We can find the most probable class number by calling `argmax` on this tensor.\n", + "* Obtained result is a [number of an `ImageNet` class](https://gist.github.com/yrevar/942d3a0ac09ec9e5eb3a). To make sense of this result, we can also use `decode_predictions` function, that returns top n classes together with their names." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's also see the architecture of the VGG-16 network:" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: \"vgg16\"\n", + "_________________________________________________________________\n", + "Layer (type) Output Shape Param # \n", + "=================================================================\n", + "input_1 (InputLayer) [(None, 224, 224, 3)] 0 \n", + "_________________________________________________________________\n", + "block1_conv1 (Conv2D) (None, 224, 224, 64) 1792 \n", + "_________________________________________________________________\n", + "block1_conv2 (Conv2D) (None, 224, 224, 64) 36928 \n", + "_________________________________________________________________\n", + "block1_pool (MaxPooling2D) (None, 112, 112, 64) 0 \n", + "_________________________________________________________________\n", + "block2_conv1 (Conv2D) (None, 112, 112, 128) 73856 \n", + "_________________________________________________________________\n", + "block2_conv2 (Conv2D) (None, 112, 112, 128) 147584 \n", + "_________________________________________________________________\n", + "block2_pool (MaxPooling2D) (None, 56, 56, 128) 0 \n", + "_________________________________________________________________\n", + "block3_conv1 (Conv2D) (None, 56, 56, 256) 295168 \n", + "_________________________________________________________________\n", + "block3_conv2 (Conv2D) (None, 56, 56, 256) 590080 \n", + "_________________________________________________________________\n", + "block3_conv3 (Conv2D) (None, 56, 56, 256) 590080 \n", + "_________________________________________________________________\n", + "block3_pool (MaxPooling2D) (None, 28, 28, 256) 0 \n", + "_________________________________________________________________\n", + "block4_conv1 (Conv2D) (None, 28, 28, 512) 1180160 \n", + "_________________________________________________________________\n", + "block4_conv2 (Conv2D) (None, 28, 28, 512) 2359808 \n", + "_________________________________________________________________\n", + "block4_conv3 (Conv2D) (None, 28, 28, 512) 2359808 \n", + "_________________________________________________________________\n", + "block4_pool (MaxPooling2D) (None, 14, 14, 512) 0 \n", + "_________________________________________________________________\n", + "block5_conv1 (Conv2D) (None, 14, 14, 512) 2359808 \n", + "_________________________________________________________________\n", + "block5_conv2 (Conv2D) (None, 14, 14, 512) 2359808 \n", + "_________________________________________________________________\n", + "block5_conv3 (Conv2D) (None, 14, 14, 512) 2359808 \n", + "_________________________________________________________________\n", + "block5_pool (MaxPooling2D) (None, 7, 7, 512) 0 \n", + "_________________________________________________________________\n", + "flatten (Flatten) (None, 25088) 0 \n", + "_________________________________________________________________\n", + "fc1 (Dense) (None, 4096) 102764544 \n", + "_________________________________________________________________\n", + "fc2 (Dense) (None, 4096) 16781312 \n", + "_________________________________________________________________\n", + "predictions (Dense) (None, 1000) 4097000 \n", + "=================================================================\n", + "Total params: 138,357,544\n", + "Trainable params: 138,357,544\n", + "Non-trainable params: 0\n", + "_________________________________________________________________\n" + ] + } + ], + "source": [ + "vgg.summary()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## GPU computations\n", + "\n", + "Deep neural networks, such as VGG-16 and other more modern architectures require quite a lot of computational power to run. It makes sense to use GPU acceleration, if it is available. Luckily, Keras automatically speeds up the computatons on the GPU if it is available. We can check if Tensorflow is able to use GPU using the following code:" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tf.config.list_physical_devices('GPU')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "## Extracting VGG features\n", + "\n", + "If we want to use VGG-16 to extract features from our images, we need the model without final classification layers. We can instantiate VGG-16 model without top layers using this code:" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Shape after applying VGG-16: (7, 7, 512)\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "vgg = keras.applications.VGG16(include_top=False)\n", + "\n", + "inp = keras.applications.vgg16.preprocess_input(x_sample[:1])\n", + "res = vgg(inp)\n", + "print(f\"Shape after applying VGG-16: {res[0].shape}\")\n", + "plt.figure(figsize=(15,3))\n", + "plt.imshow(res[0].numpy().reshape(-1,512))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The dimension of feature tensor is 7x7x512, but in order to visualize it we had to reshape it to 2D form.\n", + "\n", + "Now let's try to see if those features can be used to classify images. Let's manually take some portion of images (50 minibatches, in our case), and pre-compute their feature vectors. We can use Tensorflow **dataset** API to do that. `map` function takes a dataset and applies a given lambda-function to transform it. We use this mechanism to construct new datasets, `ds_features_train` and `ds_features_test`, that contain VGG-extracted features instead of original images." + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(64, 7, 7, 512) (64,)\n" + ] + } + ], + "source": [ + "num = batch_size*50\n", + "ds_features_train = ds_train.take(50).map(lambda x,y : (vgg(x),y))\n", + "ds_features_test = ds_test.take(10).map(lambda x,y : (vgg(x),y))\n", + "\n", + "for x,y in ds_features_train:\n", + " print(x.shape,y.shape)\n", + " break" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We used construction `.take(50)` to limit the dataset size, to speed up our demonstration. You can of course perform this experiment on the full dataset.\n", + "\n", + "Now that we have a dataset with extracted features, we can train a simple dense classifier to distinguish between cats and dogs. This network will take feature vector of shape (7,7,512), and produce one output that corresponds either to a dog or to a cat. Because it is a binary classification, we use `sigmoid` activation function and `binary_crossentropy` loss." + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "50/50 [==============================] - 1896s 38s/step - loss: 1.4845 - acc: 0.9144 - val_loss: 0.7220 - val_acc: 0.9516\n" + ] + } + ], + "source": [ + "model = keras.models.Sequential([\n", + " keras.layers.Flatten(input_shape=(7,7,512)),\n", + " keras.layers.Dense(1,activation='sigmoid')\n", + "])\n", + "model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['acc'])\n", + "hist = model.fit(ds_features_train, validation_data=ds_features_test)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The result is great, we can distinguish between a cat and a dog with almost 95% probability! However, we have only tested this approach on a subset of all images, because manual feature extraction seems to take a lot of time.\n", + "\n", + "## Transfer learning using one VGG network\n", + "\n", + "We can also avoid manually pre-computing the features by using the original VGG-16 network as a whole during training, by adding feature extractor to our network as a first layer. \n", + "\n", + "The beauty of Keras architecture is that VGG-16 model that we have defined above can also be used as a layer in another neural network! We just need to construct a network with dense classifier on top of it, and then train the whole network using back propagation." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: \"sequential\"\n", + "_________________________________________________________________\n", + "Layer (type) Output Shape Param # \n", + "=================================================================\n", + "vgg16 (Functional) (None, 7, 7, 512) 14714688 \n", + "_________________________________________________________________\n", + "flatten (Flatten) (None, 25088) 0 \n", + "_________________________________________________________________\n", + "dense (Dense) (None, 1) 25089 \n", + "=================================================================\n", + "Total params: 14,739,777\n", + "Trainable params: 25,089\n", + "Non-trainable params: 14,714,688\n", + "_________________________________________________________________\n" + ] + } + ], + "source": [ + "model = keras.models.Sequential()\n", + "model.add(keras.applications.VGG16(include_top=False,input_shape=(224,224,3)))\n", + "model.add(keras.layers.Flatten())\n", + "model.add(keras.layers.Dense(1,activation='sigmoid'))\n", + "\n", + "model.layers[0].trainable = False\n", + "\n", + "model.summary()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This model looks like and end-to-end classification network, which takes an image and returns the class. However, the tricky thing is that we want VGG16 to act as a feature extractor, and not to be re-trained. Thus, we need to **freeze weights of convolutional feature extractor**. We can access first layer of the network by calling `model.layers[0]`, and we just need to set `trainable` property to `False`.\n", + "\n", + "> **Note**: Freezing of feature extractor weights is needed, because otherwise untrained classifier layer can destroy the original pre-trained weights of convolutional extractor.\n", + "\n", + "You can notice that while the total number of parameters in our network is around 15 million, we are only training 25k parameters. All other parameters of top-level convolutional filters are pre-trained. That is good, because we are able to fine-tune smaller number of parameters with smaller number of examples.\n", + "\n", + "We will now train our network and see how good we can get. Expect rather long running time, and do not worry if the execution seems frozen for some time." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "310/310 [==============================] - 265s 716ms/step - loss: 0.9917 - acc: 0.9512 - val_loss: 0.8156 - val_acc: 0.9671\n" + ] + } + ], + "source": [ + "model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['acc'])\n", + "hist = model.fit(ds_train, validation_data=ds_test)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "It looks like we have obtained reasonably accurate cats vs. dogs classifier! \n", + "\n", + "## Saving and Loading the Model\n", + "\n", + "Once we have trained the model, we can save model architecture and trained weights to a file for future use:" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "INFO:tensorflow:Assets written to: data/cats_dogs.tf/assets\n" + ] + } + ], + "source": [ + "model.save('data/cats_dogs.tf')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can then load the model from file at any time. You may find it useful in case the next experiment destroys the model - you would not have to re-start from scratch." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "model = keras.models.load_model('data/cats_dogs.tf')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Fine-tuning transfer learning\n", + "\n", + "In the previous section, we have trained the final classifier layer to classify images in our own dataset. However, we did not re-train the feature extractor, and our model relied on the features that the model has learned on ImageNet data. If your objects visually differ from ordinary ImageNet images, this combination of features might not work best. Thus it makes sense to start training convolutional layers as well.\n", + "\n", + "To do that, we can unfreeze the convolutional filter parameters that we have previously frozen. \n", + "\n", + "> **Note:** It is important that you freeze parameters first and perform several epochs of training in order to stabilize weights in the classification layer. If you immediately start training end-to-end network with unfrozen parameters, large errors are likely to destroy the pre-trained weights in the convolutional layers.\n", + "\n", + "Our convolutional VGG-16 model is located inside the first layer, and it consists of many layers itself. We can have a look at its structure: " + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: \"vgg16\"\n", + "_________________________________________________________________\n", + "Layer (type) Output Shape Param # \n", + "=================================================================\n", + "input_1 (InputLayer) [(None, 224, 224, 3)] 0 \n", + "_________________________________________________________________\n", + "block1_conv1 (Conv2D) (None, 224, 224, 64) 1792 \n", + "_________________________________________________________________\n", + "block1_conv2 (Conv2D) (None, 224, 224, 64) 36928 \n", + "_________________________________________________________________\n", + "block1_pool (MaxPooling2D) (None, 112, 112, 64) 0 \n", + "_________________________________________________________________\n", + "block2_conv1 (Conv2D) (None, 112, 112, 128) 73856 \n", + "_________________________________________________________________\n", + "block2_conv2 (Conv2D) (None, 112, 112, 128) 147584 \n", + "_________________________________________________________________\n", + "block2_pool (MaxPooling2D) (None, 56, 56, 128) 0 \n", + "_________________________________________________________________\n", + "block3_conv1 (Conv2D) (None, 56, 56, 256) 295168 \n", + "_________________________________________________________________\n", + "block3_conv2 (Conv2D) (None, 56, 56, 256) 590080 \n", + "_________________________________________________________________\n", + "block3_conv3 (Conv2D) (None, 56, 56, 256) 590080 \n", + "_________________________________________________________________\n", + "block3_pool (MaxPooling2D) (None, 28, 28, 256) 0 \n", + "_________________________________________________________________\n", + "block4_conv1 (Conv2D) (None, 28, 28, 512) 1180160 \n", + "_________________________________________________________________\n", + "block4_conv2 (Conv2D) (None, 28, 28, 512) 2359808 \n", + "_________________________________________________________________\n", + "block4_conv3 (Conv2D) (None, 28, 28, 512) 2359808 \n", + "_________________________________________________________________\n", + "block4_pool (MaxPooling2D) (None, 14, 14, 512) 0 \n", + "_________________________________________________________________\n", + "block5_conv1 (Conv2D) (None, 14, 14, 512) 2359808 \n", + "_________________________________________________________________\n", + "block5_conv2 (Conv2D) (None, 14, 14, 512) 2359808 \n", + "_________________________________________________________________\n", + "block5_conv3 (Conv2D) (None, 14, 14, 512) 2359808 \n", + "_________________________________________________________________\n", + "block5_pool (MaxPooling2D) (None, 7, 7, 512) 0 \n", + "=================================================================\n", + "Total params: 14,714,688\n", + "Trainable params: 0\n", + "Non-trainable params: 14,714,688\n", + "_________________________________________________________________\n" + ] + } + ], + "source": [ + "model.layers[0].summary()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can unfreeze all layers of convolutional base:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "model.layers[0].trainable = True" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "However, unfeezing all of them at once is not the best idea. We can first unfreeze just a few final layers of convolutions, because they contain higher level patterns that are relevant for our images. For example, to begin with, we can freeze all layers except the last 4: " + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: \"sequential\"\n", + "_________________________________________________________________\n", + "Layer (type) Output Shape Param # \n", + "=================================================================\n", + "vgg16 (Functional) (None, 7, 7, 512) 14714688 \n", + "_________________________________________________________________\n", + "flatten (Flatten) (None, 25088) 0 \n", + "_________________________________________________________________\n", + "dense (Dense) (None, 1) 25089 \n", + "=================================================================\n", + "Total params: 14,739,777\n", + "Trainable params: 7,104,513\n", + "Non-trainable params: 7,635,264\n", + "_________________________________________________________________\n" + ] + } + ], + "source": [ + "for i in range(len(model.layers[0].layers)-4):\n", + " model.layers[0].layers[i].trainable = False\n", + "model.summary()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Observe that the number of trainable parameters increased significantly, but it is still around 50% of all parameters.\n", + "\n", + "After unfreezing, we can do a few more epochs of training (in our example, we will do just one). You can also select lower learning rate, in order to minimize the impact on the pre-trained weights. However, even with low learning rate, you can expect the accuracy to drop in the beginning of the training, until finally reaching slightly higher level than in the case of fixed weights.\n", + "\n", + "> **Note:** This training happens much slower, because we need to propagate gradients back through many layers of the network!" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "310/310 [==============================] - 201s 645ms/step - loss: 0.5270 - acc: 0.9776 - val_loss: 1.4132 - val_acc: 0.9653\n" + ] + } + ], + "source": [ + "hist = model.fit(ds_train, validation_data=ds_test)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We are likely to achieve higher training accuracy, because we are using more poweful network with more parameters, but validation accuracy would increase not as much.\n", + "\n", + "Feel free to unfreeze a few more layers of the network and train more, to see if you are able to achieve higher accuracy!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Other computer vision models\n", + "\n", + "VGG-16 is one of the simplest computer vision architectures. Keras provides many more pre-trained networks. The most frequently used ones among those are **ResNet** architectures, developed by Microsoft, and **Inception** by Google. For example, let's explore the architecture of the simplest ResNet-50 model (ResNet is a family of models with different depth, you can try experimenting with ResNet-152 if you want to see what a really deep model looks like):" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: \"resnet50\"\n", + "__________________________________________________________________________________________________\n", + "Layer (type) Output Shape Param # Connected to \n", + "==================================================================================================\n", + "input_3 (InputLayer) [(None, 224, 224, 3) 0 \n", + "__________________________________________________________________________________________________\n", + "conv1_pad (ZeroPadding2D) (None, 230, 230, 3) 0 input_3[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv1_conv (Conv2D) (None, 112, 112, 64) 9472 conv1_pad[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv1_bn (BatchNormalization) (None, 112, 112, 64) 256 conv1_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv1_relu (Activation) (None, 112, 112, 64) 0 conv1_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "pool1_pad (ZeroPadding2D) (None, 114, 114, 64) 0 conv1_relu[0][0] \n", + "__________________________________________________________________________________________________\n", + "pool1_pool (MaxPooling2D) (None, 56, 56, 64) 0 pool1_pad[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2_block1_1_conv (Conv2D) (None, 56, 56, 64) 4160 pool1_pool[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2_block1_1_bn (BatchNormali (None, 56, 56, 64) 256 conv2_block1_1_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2_block1_1_relu (Activation (None, 56, 56, 64) 0 conv2_block1_1_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2_block1_2_conv (Conv2D) (None, 56, 56, 64) 36928 conv2_block1_1_relu[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2_block1_2_bn (BatchNormali (None, 56, 56, 64) 256 conv2_block1_2_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2_block1_2_relu (Activation (None, 56, 56, 64) 0 conv2_block1_2_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2_block1_0_conv (Conv2D) (None, 56, 56, 256) 16640 pool1_pool[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2_block1_3_conv (Conv2D) (None, 56, 56, 256) 16640 conv2_block1_2_relu[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2_block1_0_bn (BatchNormali (None, 56, 56, 256) 1024 conv2_block1_0_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2_block1_3_bn (BatchNormali (None, 56, 56, 256) 1024 conv2_block1_3_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2_block1_add (Add) (None, 56, 56, 256) 0 conv2_block1_0_bn[0][0] \n", + " conv2_block1_3_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2_block1_out (Activation) (None, 56, 56, 256) 0 conv2_block1_add[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2_block2_1_conv (Conv2D) (None, 56, 56, 64) 16448 conv2_block1_out[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2_block2_1_bn (BatchNormali (None, 56, 56, 64) 256 conv2_block2_1_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2_block2_1_relu (Activation (None, 56, 56, 64) 0 conv2_block2_1_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2_block2_2_conv (Conv2D) (None, 56, 56, 64) 36928 conv2_block2_1_relu[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2_block2_2_bn (BatchNormali (None, 56, 56, 64) 256 conv2_block2_2_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2_block2_2_relu (Activation (None, 56, 56, 64) 0 conv2_block2_2_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2_block2_3_conv (Conv2D) (None, 56, 56, 256) 16640 conv2_block2_2_relu[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2_block2_3_bn (BatchNormali (None, 56, 56, 256) 1024 conv2_block2_3_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2_block2_add (Add) (None, 56, 56, 256) 0 conv2_block1_out[0][0] \n", + " conv2_block2_3_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2_block2_out (Activation) (None, 56, 56, 256) 0 conv2_block2_add[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2_block3_1_conv (Conv2D) (None, 56, 56, 64) 16448 conv2_block2_out[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2_block3_1_bn (BatchNormali (None, 56, 56, 64) 256 conv2_block3_1_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2_block3_1_relu (Activation (None, 56, 56, 64) 0 conv2_block3_1_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2_block3_2_conv (Conv2D) (None, 56, 56, 64) 36928 conv2_block3_1_relu[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2_block3_2_bn (BatchNormali (None, 56, 56, 64) 256 conv2_block3_2_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2_block3_2_relu (Activation (None, 56, 56, 64) 0 conv2_block3_2_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2_block3_3_conv (Conv2D) (None, 56, 56, 256) 16640 conv2_block3_2_relu[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2_block3_3_bn (BatchNormali (None, 56, 56, 256) 1024 conv2_block3_3_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2_block3_add (Add) (None, 56, 56, 256) 0 conv2_block2_out[0][0] \n", + " conv2_block3_3_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2_block3_out (Activation) (None, 56, 56, 256) 0 conv2_block3_add[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block1_1_conv (Conv2D) (None, 28, 28, 128) 32896 conv2_block3_out[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block1_1_bn (BatchNormali (None, 28, 28, 128) 512 conv3_block1_1_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block1_1_relu (Activation (None, 28, 28, 128) 0 conv3_block1_1_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block1_2_conv (Conv2D) (None, 28, 28, 128) 147584 conv3_block1_1_relu[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block1_2_bn (BatchNormali (None, 28, 28, 128) 512 conv3_block1_2_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block1_2_relu (Activation (None, 28, 28, 128) 0 conv3_block1_2_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block1_0_conv (Conv2D) (None, 28, 28, 512) 131584 conv2_block3_out[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block1_3_conv (Conv2D) (None, 28, 28, 512) 66048 conv3_block1_2_relu[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block1_0_bn (BatchNormali (None, 28, 28, 512) 2048 conv3_block1_0_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block1_3_bn (BatchNormali (None, 28, 28, 512) 2048 conv3_block1_3_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block1_add (Add) (None, 28, 28, 512) 0 conv3_block1_0_bn[0][0] \n", + " conv3_block1_3_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block1_out (Activation) (None, 28, 28, 512) 0 conv3_block1_add[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block2_1_conv (Conv2D) (None, 28, 28, 128) 65664 conv3_block1_out[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block2_1_bn (BatchNormali (None, 28, 28, 128) 512 conv3_block2_1_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block2_1_relu (Activation (None, 28, 28, 128) 0 conv3_block2_1_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block2_2_conv (Conv2D) (None, 28, 28, 128) 147584 conv3_block2_1_relu[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block2_2_bn (BatchNormali (None, 28, 28, 128) 512 conv3_block2_2_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block2_2_relu (Activation (None, 28, 28, 128) 0 conv3_block2_2_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block2_3_conv (Conv2D) (None, 28, 28, 512) 66048 conv3_block2_2_relu[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block2_3_bn (BatchNormali (None, 28, 28, 512) 2048 conv3_block2_3_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block2_add (Add) (None, 28, 28, 512) 0 conv3_block1_out[0][0] \n", + " conv3_block2_3_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block2_out (Activation) (None, 28, 28, 512) 0 conv3_block2_add[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block3_1_conv (Conv2D) (None, 28, 28, 128) 65664 conv3_block2_out[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block3_1_bn (BatchNormali (None, 28, 28, 128) 512 conv3_block3_1_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block3_1_relu (Activation (None, 28, 28, 128) 0 conv3_block3_1_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block3_2_conv (Conv2D) (None, 28, 28, 128) 147584 conv3_block3_1_relu[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block3_2_bn (BatchNormali (None, 28, 28, 128) 512 conv3_block3_2_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block3_2_relu (Activation (None, 28, 28, 128) 0 conv3_block3_2_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block3_3_conv (Conv2D) (None, 28, 28, 512) 66048 conv3_block3_2_relu[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block3_3_bn (BatchNormali (None, 28, 28, 512) 2048 conv3_block3_3_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block3_add (Add) (None, 28, 28, 512) 0 conv3_block2_out[0][0] \n", + " conv3_block3_3_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block3_out (Activation) (None, 28, 28, 512) 0 conv3_block3_add[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block4_1_conv (Conv2D) (None, 28, 28, 128) 65664 conv3_block3_out[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block4_1_bn (BatchNormali (None, 28, 28, 128) 512 conv3_block4_1_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block4_1_relu (Activation (None, 28, 28, 128) 0 conv3_block4_1_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block4_2_conv (Conv2D) (None, 28, 28, 128) 147584 conv3_block4_1_relu[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block4_2_bn (BatchNormali (None, 28, 28, 128) 512 conv3_block4_2_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block4_2_relu (Activation (None, 28, 28, 128) 0 conv3_block4_2_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block4_3_conv (Conv2D) (None, 28, 28, 512) 66048 conv3_block4_2_relu[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block4_3_bn (BatchNormali (None, 28, 28, 512) 2048 conv3_block4_3_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block4_add (Add) (None, 28, 28, 512) 0 conv3_block3_out[0][0] \n", + " conv3_block4_3_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv3_block4_out (Activation) (None, 28, 28, 512) 0 conv3_block4_add[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block1_1_conv (Conv2D) (None, 14, 14, 256) 131328 conv3_block4_out[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block1_1_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block1_1_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block1_1_relu (Activation (None, 14, 14, 256) 0 conv4_block1_1_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block1_2_conv (Conv2D) (None, 14, 14, 256) 590080 conv4_block1_1_relu[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block1_2_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block1_2_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block1_2_relu (Activation (None, 14, 14, 256) 0 conv4_block1_2_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block1_0_conv (Conv2D) (None, 14, 14, 1024) 525312 conv3_block4_out[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block1_3_conv (Conv2D) (None, 14, 14, 1024) 263168 conv4_block1_2_relu[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block1_0_bn (BatchNormali (None, 14, 14, 1024) 4096 conv4_block1_0_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block1_3_bn (BatchNormali (None, 14, 14, 1024) 4096 conv4_block1_3_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block1_add (Add) (None, 14, 14, 1024) 0 conv4_block1_0_bn[0][0] \n", + " conv4_block1_3_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block1_out (Activation) (None, 14, 14, 1024) 0 conv4_block1_add[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block2_1_conv (Conv2D) (None, 14, 14, 256) 262400 conv4_block1_out[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block2_1_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block2_1_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block2_1_relu (Activation (None, 14, 14, 256) 0 conv4_block2_1_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block2_2_conv (Conv2D) (None, 14, 14, 256) 590080 conv4_block2_1_relu[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block2_2_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block2_2_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block2_2_relu (Activation (None, 14, 14, 256) 0 conv4_block2_2_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block2_3_conv (Conv2D) (None, 14, 14, 1024) 263168 conv4_block2_2_relu[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block2_3_bn (BatchNormali (None, 14, 14, 1024) 4096 conv4_block2_3_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block2_add (Add) (None, 14, 14, 1024) 0 conv4_block1_out[0][0] \n", + " conv4_block2_3_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block2_out (Activation) (None, 14, 14, 1024) 0 conv4_block2_add[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block3_1_conv (Conv2D) (None, 14, 14, 256) 262400 conv4_block2_out[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block3_1_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block3_1_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block3_1_relu (Activation (None, 14, 14, 256) 0 conv4_block3_1_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block3_2_conv (Conv2D) (None, 14, 14, 256) 590080 conv4_block3_1_relu[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block3_2_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block3_2_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block3_2_relu (Activation (None, 14, 14, 256) 0 conv4_block3_2_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block3_3_conv (Conv2D) (None, 14, 14, 1024) 263168 conv4_block3_2_relu[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block3_3_bn (BatchNormali (None, 14, 14, 1024) 4096 conv4_block3_3_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block3_add (Add) (None, 14, 14, 1024) 0 conv4_block2_out[0][0] \n", + " conv4_block3_3_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block3_out (Activation) (None, 14, 14, 1024) 0 conv4_block3_add[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block4_1_conv (Conv2D) (None, 14, 14, 256) 262400 conv4_block3_out[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block4_1_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block4_1_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block4_1_relu (Activation (None, 14, 14, 256) 0 conv4_block4_1_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block4_2_conv (Conv2D) (None, 14, 14, 256) 590080 conv4_block4_1_relu[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block4_2_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block4_2_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block4_2_relu (Activation (None, 14, 14, 256) 0 conv4_block4_2_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block4_3_conv (Conv2D) (None, 14, 14, 1024) 263168 conv4_block4_2_relu[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block4_3_bn (BatchNormali (None, 14, 14, 1024) 4096 conv4_block4_3_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block4_add (Add) (None, 14, 14, 1024) 0 conv4_block3_out[0][0] \n", + " conv4_block4_3_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block4_out (Activation) (None, 14, 14, 1024) 0 conv4_block4_add[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block5_1_conv (Conv2D) (None, 14, 14, 256) 262400 conv4_block4_out[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block5_1_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block5_1_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block5_1_relu (Activation (None, 14, 14, 256) 0 conv4_block5_1_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block5_2_conv (Conv2D) (None, 14, 14, 256) 590080 conv4_block5_1_relu[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block5_2_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block5_2_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block5_2_relu (Activation (None, 14, 14, 256) 0 conv4_block5_2_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block5_3_conv (Conv2D) (None, 14, 14, 1024) 263168 conv4_block5_2_relu[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block5_3_bn (BatchNormali (None, 14, 14, 1024) 4096 conv4_block5_3_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block5_add (Add) (None, 14, 14, 1024) 0 conv4_block4_out[0][0] \n", + " conv4_block5_3_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block5_out (Activation) (None, 14, 14, 1024) 0 conv4_block5_add[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block6_1_conv (Conv2D) (None, 14, 14, 256) 262400 conv4_block5_out[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block6_1_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block6_1_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block6_1_relu (Activation (None, 14, 14, 256) 0 conv4_block6_1_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block6_2_conv (Conv2D) (None, 14, 14, 256) 590080 conv4_block6_1_relu[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block6_2_bn (BatchNormali (None, 14, 14, 256) 1024 conv4_block6_2_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block6_2_relu (Activation (None, 14, 14, 256) 0 conv4_block6_2_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block6_3_conv (Conv2D) (None, 14, 14, 1024) 263168 conv4_block6_2_relu[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block6_3_bn (BatchNormali (None, 14, 14, 1024) 4096 conv4_block6_3_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block6_add (Add) (None, 14, 14, 1024) 0 conv4_block5_out[0][0] \n", + " conv4_block6_3_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv4_block6_out (Activation) (None, 14, 14, 1024) 0 conv4_block6_add[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv5_block1_1_conv (Conv2D) (None, 7, 7, 512) 524800 conv4_block6_out[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv5_block1_1_bn (BatchNormali (None, 7, 7, 512) 2048 conv5_block1_1_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv5_block1_1_relu (Activation (None, 7, 7, 512) 0 conv5_block1_1_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv5_block1_2_conv (Conv2D) (None, 7, 7, 512) 2359808 conv5_block1_1_relu[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv5_block1_2_bn (BatchNormali (None, 7, 7, 512) 2048 conv5_block1_2_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv5_block1_2_relu (Activation (None, 7, 7, 512) 0 conv5_block1_2_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv5_block1_0_conv (Conv2D) (None, 7, 7, 2048) 2099200 conv4_block6_out[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv5_block1_3_conv (Conv2D) (None, 7, 7, 2048) 1050624 conv5_block1_2_relu[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv5_block1_0_bn (BatchNormali (None, 7, 7, 2048) 8192 conv5_block1_0_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv5_block1_3_bn (BatchNormali (None, 7, 7, 2048) 8192 conv5_block1_3_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv5_block1_add (Add) (None, 7, 7, 2048) 0 conv5_block1_0_bn[0][0] \n", + " conv5_block1_3_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv5_block1_out (Activation) (None, 7, 7, 2048) 0 conv5_block1_add[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv5_block2_1_conv (Conv2D) (None, 7, 7, 512) 1049088 conv5_block1_out[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv5_block2_1_bn (BatchNormali (None, 7, 7, 512) 2048 conv5_block2_1_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv5_block2_1_relu (Activation (None, 7, 7, 512) 0 conv5_block2_1_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv5_block2_2_conv (Conv2D) (None, 7, 7, 512) 2359808 conv5_block2_1_relu[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv5_block2_2_bn (BatchNormali (None, 7, 7, 512) 2048 conv5_block2_2_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv5_block2_2_relu (Activation (None, 7, 7, 512) 0 conv5_block2_2_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv5_block2_3_conv (Conv2D) (None, 7, 7, 2048) 1050624 conv5_block2_2_relu[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv5_block2_3_bn (BatchNormali (None, 7, 7, 2048) 8192 conv5_block2_3_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv5_block2_add (Add) (None, 7, 7, 2048) 0 conv5_block1_out[0][0] \n", + " conv5_block2_3_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv5_block2_out (Activation) (None, 7, 7, 2048) 0 conv5_block2_add[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv5_block3_1_conv (Conv2D) (None, 7, 7, 512) 1049088 conv5_block2_out[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv5_block3_1_bn (BatchNormali (None, 7, 7, 512) 2048 conv5_block3_1_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv5_block3_1_relu (Activation (None, 7, 7, 512) 0 conv5_block3_1_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv5_block3_2_conv (Conv2D) (None, 7, 7, 512) 2359808 conv5_block3_1_relu[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv5_block3_2_bn (BatchNormali (None, 7, 7, 512) 2048 conv5_block3_2_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv5_block3_2_relu (Activation (None, 7, 7, 512) 0 conv5_block3_2_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv5_block3_3_conv (Conv2D) (None, 7, 7, 2048) 1050624 conv5_block3_2_relu[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv5_block3_3_bn (BatchNormali (None, 7, 7, 2048) 8192 conv5_block3_3_conv[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv5_block3_add (Add) (None, 7, 7, 2048) 0 conv5_block2_out[0][0] \n", + " conv5_block3_3_bn[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv5_block3_out (Activation) (None, 7, 7, 2048) 0 conv5_block3_add[0][0] \n", + "__________________________________________________________________________________________________\n", + "avg_pool (GlobalAveragePooling2 (None, 2048) 0 conv5_block3_out[0][0] \n", + "__________________________________________________________________________________________________\n", + "predictions (Dense) (None, 1000) 2049000 avg_pool[0][0] \n", + "==================================================================================================\n", + "Total params: 25,636,712\n", + "Trainable params: 25,583,592\n", + "Non-trainable params: 53,120\n", + "__________________________________________________________________________________________________\n" + ] + } + ], + "source": [ + "resnet = keras.applications.ResNet50()\n", + "resnet.summary()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As you can see, the model contains the same familiar building blocks: convolutional layers, pooling layers and final dense classifier. We can use this model in exactly the same manner as we have been using VGG-16 for transfer learning. You can try experimenting with the code above, using different ResNet models as the base model, and see how accuracy changes.\n", + "\n", + "## Batch Normalization\n", + "\n", + "This network contains yet another type of layer: **Batch Normalization**. The idea of batch normalization is to bring values that flow through the neural network to right interval. Usually neural networks work best when all values are in the range of [-1,1] or [0,1], and that is the reason that we scale/normalize our input data accordingly. However, during training of a deep network, it can happen that values get significantly out of this range, which makes training problematic. Batch normalization layer computes average and standard deviation for all values of the current minibatch, and uses them to normalize the signal before passing it through a neural network layer. This significantly improves the stability of deep networks." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Takeaway\n", + "\n", + "Using transfer learning, we were able to quickly put together a classifier for our custom object classification task, and achieve high accuracy. However, this example was not completely fair, because original VGG-16 network was pre-trained to recognize cats and dogs, and thus we were just reusing most of the patterns that were already present in the network. You can expect lower accuracy on more exotic domain-specific objects, such as details on production line in a plant, or different tree leaves.\n", + "\n", + "You can see that more complex tasks that we are solving now require higher computational power, and cannot be easily solved on the CPU. In the next unit, we will try to use more lightweight implementation to train the same model using lower compute resources, which results in just slightly lower accuracy. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "py38_tensorflow", + "language": "python", + "name": "conda-env-py38_tensorflow-py" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.10" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/4-ComputerVision/08-TransferLearning/pytorchcv.py b/4-ComputerVision/08-TransferLearning/pytorchcv.py new file mode 100644 index 00000000..19ff1c5c --- /dev/null +++ b/4-ComputerVision/08-TransferLearning/pytorchcv.py @@ -0,0 +1,169 @@ + +# Script file to hide implementation details for PyTorch computer vision module + +import builtins +import torch +import torch.nn as nn +from torch.utils import data +import torchvision +from torchvision.transforms import ToTensor +import matplotlib.pyplot as plt +import numpy as np +from PIL import Image +import glob +import os +import zipfile + +default_device = 'cuda' if torch.cuda.is_available() else 'cpu' + +def load_mnist(batch_size=64): + builtins.data_train = torchvision.datasets.MNIST('./data', + download=True,train=True,transform=ToTensor()) + builtins.data_test = torchvision.datasets.MNIST('./data', + download=True,train=False,transform=ToTensor()) + builtins.train_loader = torch.utils.data.DataLoader(data_train,batch_size=batch_size) + builtins.test_loader = torch.utils.data.DataLoader(data_test,batch_size=batch_size) + +def train_epoch(net,dataloader,lr=0.01,optimizer=None,loss_fn = nn.NLLLoss()): + optimizer = optimizer or torch.optim.Adam(net.parameters(),lr=lr) + net.train() + total_loss,acc,count = 0,0,0 + for features,labels in dataloader: + optimizer.zero_grad() + lbls = labels.to(default_device) + out = net(features.to(default_device)) + loss = loss_fn(out,lbls) #cross_entropy(out,labels) + loss.backward() + optimizer.step() + total_loss+=loss + _,predicted = torch.max(out,1) + acc+=(predicted==lbls).sum() + count+=len(labels) + return total_loss.item()/count, acc.item()/count + +def validate(net, dataloader,loss_fn=nn.NLLLoss()): + net.eval() + count,acc,loss = 0,0,0 + with torch.no_grad(): + for features,labels in dataloader: + lbls = labels.to(default_device) + out = net(features.to(default_device)) + loss += loss_fn(out,lbls) + pred = torch.max(out,1)[1] + acc += (pred==lbls).sum() + count += len(labels) + return loss.item()/count, acc.item()/count + +def train(net,train_loader,test_loader,optimizer=None,lr=0.01,epochs=10,loss_fn=nn.NLLLoss()): + optimizer = optimizer or torch.optim.Adam(net.parameters(),lr=lr) + res = { 'train_loss' : [], 'train_acc': [], 'val_loss': [], 'val_acc': []} + for ep in range(epochs): + tl,ta = train_epoch(net,train_loader,optimizer=optimizer,lr=lr,loss_fn=loss_fn) + vl,va = validate(net,test_loader,loss_fn=loss_fn) + print(f"Epoch {ep:2}, Train acc={ta:.3f}, Val acc={va:.3f}, Train loss={tl:.3f}, Val loss={vl:.3f}") + res['train_loss'].append(tl) + res['train_acc'].append(ta) + res['val_loss'].append(vl) + res['val_acc'].append(va) + return res + +def train_long(net,train_loader,test_loader,epochs=5,lr=0.01,optimizer=None,loss_fn = nn.NLLLoss(),print_freq=10): + optimizer = optimizer or torch.optim.Adam(net.parameters(),lr=lr) + for epoch in range(epochs): + net.train() + total_loss,acc,count = 0,0,0 + for i, (features,labels) in enumerate(train_loader): + lbls = labels.to(default_device) + optimizer.zero_grad() + out = net(features.to(default_device)) + loss = loss_fn(out,lbls) + loss.backward() + optimizer.step() + total_loss+=loss + _,predicted = torch.max(out,1) + acc+=(predicted==lbls).sum() + count+=len(labels) + if i%print_freq==0: + print("Epoch {}, minibatch {}: train acc = {}, train loss = {}".format(epoch,i,acc.item()/count,total_loss.item()/count)) + vl,va = validate(net,test_loader,loss_fn) + print("Epoch {} done, validation acc = {}, validation loss = {}".format(epoch,va,vl)) + + +def plot_results(hist): + plt.figure(figsize=(15,5)) + plt.subplot(121) + plt.plot(hist['train_acc'], label='Training acc') + plt.plot(hist['val_acc'], label='Validation acc') + plt.legend() + plt.subplot(122) + plt.plot(hist['train_loss'], label='Training loss') + plt.plot(hist['val_loss'], label='Validation loss') + plt.legend() + +def plot_convolution(t,title=''): + with torch.no_grad(): + c = nn.Conv2d(kernel_size=(3,3),out_channels=1,in_channels=1) + c.weight.copy_(t) + fig, ax = plt.subplots(2,6,figsize=(8,3)) + fig.suptitle(title,fontsize=16) + for i in range(5): + im = data_train[i][0] + ax[0][i].imshow(im[0]) + ax[1][i].imshow(c(im.unsqueeze(0))[0][0]) + ax[0][i].axis('off') + ax[1][i].axis('off') + ax[0,5].imshow(t) + ax[0,5].axis('off') + ax[1,5].axis('off') + #plt.tight_layout() + plt.show() + +def display_dataset(dataset, n=10,classes=None): + fig,ax = plt.subplots(1,n,figsize=(15,3)) + mn = min([dataset[i][0].min() for i in range(n)]) + mx = max([dataset[i][0].max() for i in range(n)]) + for i in range(n): + ax[i].imshow(np.transpose((dataset[i][0]-mn)/(mx-mn),(1,2,0))) + ax[i].axis('off') + if classes: + ax[i].set_title(classes[dataset[i][1]]) + + +def check_image(fn): + try: + im = Image.open(fn) + im.verify() + return True + except: + return False + +def check_image_dir(path): + for fn in glob.glob(path): + if not check_image(fn): + print("Corrupt image: {}".format(fn)) + os.remove(fn) + + +def common_transform(): + std_normalize = torchvision.transforms.Normalize(mean=[0.485, 0.456, 0.406], + std=[0.229, 0.224, 0.225]) + trans = torchvision.transforms.Compose([ + torchvision.transforms.Resize(256), + torchvision.transforms.CenterCrop(224), + torchvision.transforms.ToTensor(), + std_normalize]) + return trans + +def load_cats_dogs_dataset(): + if not os.path.exists('data/PetImages'): + with zipfile.ZipFile('data/kagglecatsanddogs_3367a.zip', 'r') as zip_ref: + zip_ref.extractall('data') + + check_image_dir('data/PetImages/Cat/*.jpg') + check_image_dir('data/PetImages/Dog/*.jpg') + + dataset = torchvision.datasets.ImageFolder('data/PetImages',transform=common_transform()) + trainset, testset = torch.utils.data.random_split(dataset,[20000,len(dataset)-20000]) + trainloader = torch.utils.data.DataLoader(trainset,batch_size=32) + testloader = torch.utils.data.DataLoader(trainset,batch_size=32) + return dataset, trainloader, testloader \ No newline at end of file diff --git a/4-ComputerVision/08-TransferLearning/tfcv.py b/4-ComputerVision/08-TransferLearning/tfcv.py new file mode 100644 index 00000000..c5aff501 --- /dev/null +++ b/4-ComputerVision/08-TransferLearning/tfcv.py @@ -0,0 +1,86 @@ +# Tensorflow Computer Vision Helper + +import tensorflow as tf +from tensorflow import keras +import numpy as np +import matplotlib.pyplot as plt +from PIL import Image +import glob +import os + +def plot_convolution(data,t,title=''): + fig, ax = plt.subplots(2,len(data)+1,figsize=(8,3)) + fig.suptitle(title,fontsize=16) + tt = np.expand_dims(np.expand_dims(t,2),2) + for i,im in enumerate(data): + ax[0][i].imshow(im) + ximg = np.expand_dims(np.expand_dims(im,2),0) + cim = tf.nn.conv2d(ximg,tt,1,'SAME') + ax[1][i].imshow(cim[0][:,:,0]) + ax[0][i].axis('off') + ax[1][i].axis('off') + ax[0,-1].imshow(t) + ax[0,-1].axis('off') + ax[1,-1].axis('off') + #plt.tight_layout() + plt.show() + +def plot_results(hist): + fig,ax = plt.subplots(1,2,figsize=(15,3)) + ax[0].set_title('Accuracy') + ax[1].set_title('Loss') + for x in ['acc','val_acc']: + ax[0].plot(hist.history[x]) + for x in ['loss','val_loss']: + ax[1].plot(hist.history[x]) + plt.show() + +def display_dataset(dataset, labels=None, n=10, classes=None): + fig,ax = plt.subplots(1,n,figsize=(15,3)) + for i in range(n): + ax[i].imshow(dataset[i]) + ax[i].axis('off') + if classes is not None and labels is not None: + ax[i].set_title(classes[labels[i][0]]) + +def check_image(fn): + try: + im = Image.open(fn) + im.verify() + return im.format=='JPEG' + except: + return False + +def check_image_dir(path): + for fn in glob.glob(path): + if not check_image(fn): + print("Corrupt image or wrong format: {}".format(fn)) + os.remove(fn) + +def load_cats_dogs_dataset(batch_size=64): + if not os.path.exists('data/PetImages'): + print("Extracting the dataset") + with zipfile.ZipFile('data/kagglecatsanddogs_3367a.zip', 'r') as zip_ref: + zip_ref.extractall('data') + print("Checking dataset") + check_image_dir('data/PetImages/Cat/*.jpg') + check_image_dir('data/PetImages/Dog/*.jpg') + data_dir = 'data/PetImages' + print("Loading dataset") + ds_train = keras.preprocessing.image_dataset_from_directory( + data_dir, + validation_split = 0.2, + subset = 'training', + seed = 13, + image_size = (224,224), + batch_size = batch_size + ) + ds_test = keras.preprocessing.image_dataset_from_directory( + data_dir, + validation_split = 0.2, + subset = 'validation', + seed = 13, + image_size = (224,224), + batch_size = batch_size + ) + return ds_train,ds_test diff --git a/README.md b/README.md index 30b08152..ab3b78bf 100644 --- a/README.md +++ b/README.md @@ -51,7 +51,7 @@ For a gentle introduction to *AI in the Cloud* topic you may consider taking [Ge MS Learn PAT 6Intro to Computer Vision. OpenCVTextNotebook -7Convolutional Neural NetworksTextPyTorchTensorflow +7Convolutional Neural NetworksTextPyTorchTensorflow 8Pre-trained Networks and Transfer LearningTextPyTorchTensorflow 9Autoencoders and VAEsTextPyTorchTensorflow 10 Generative Adversarial NetworksTextPyTorchTensorflow