{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Practice with the Tensorflow 2 Functional API. \n", "\n", "> In this post, it will demonstrate how to build models with the Functional syntax. You'll build one using the Sequential API and see how you can do the same with the Functional API. Both will arrive at the same architecture and you can train and evaluate it as usual. This is the summary of lecture \"Custom Models, Layers and Loss functions with Tensorflow\" from DeepLearning.AI.\n", "\n", "- toc: true \n", "- badges: true\n", "- comments: true\n", "- author: Chanseok Kang\n", "- categories: [Python, Coursera, Tensorflow, DeepLearning.AI]\n", "- image: images/fashion_mnist_siamese.png" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Packages" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [], "source": [ "import tensorflow as tf\n", "from tensorflow.keras.utils import plot_model\n", "from tensorflow.keras.models import Model\n", "from tensorflow.keras.layers import Input, Flatten, Dense, Dropout, Lambda\n", "from tensorflow.keras.optimizers import RMSprop\n", "from tensorflow.keras import backend as K\n", "\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import pandas as pd\n", "from sklearn.model_selection import train_test_split\n", "from sklearn.metrics import confusion_matrix\n", "from PIL import Image, ImageFont, ImageDraw\n", "import itertools\n", "import random" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Part 1 - Comparing Functional API with Sequential API" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Prepare the Data\n", "\n", "We will use mnist dataset for the check." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "mnist = tf.keras.datasets.mnist\n", "\n", "(X_train, y_train), (X_test, y_test) = mnist.load_data()\n", "X_train, X_test = X_train / 255.0, X_test / 255.0" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Sequential API\n", "\n", "Here is how we use the `Sequential()` class to build a model." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "def build_model_with_sequential():\n", " # instantiate a Sequential class and linearly stack the layers of your model\n", " seq_model = tf.keras.Sequential([\n", " tf.keras.layers.Flatten(input_shape=(28, 28)),\n", " tf.keras.layers.Dense(128, activation=tf.nn.relu),\n", " tf.keras.layers.Dense(10, activation=tf.nn.softmax)\n", " ])\n", " return seq_model" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Functional API\n", "\n", "And here is how you build the same model above with the functional syntax." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "def build_model_wtih_functional():\n", " # instantiate the input Tensor\n", " input_layer = tf.keras.Input(shape=(28, 28))\n", " \n", " # stack the layers using the syntax: new_layer()(previous_layer)\n", " flatten_layer = tf.keras.layers.Flatten()(input_layer)\n", " first_dense = tf.keras.layers.Dense(128, activation=tf.nn.relu)(flatten_layer)\n", " output_layer = tf.keras.layers.Dense(10, activation=tf.nn.softmax)(first_dense)\n", " \n", " # declare inputs and outputs\n", " func_model = Model(inputs=input_layer, outputs=output_layer)\n", " return func_model" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Build the model and visualize the model graph" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model = build_model_with_sequential()\n", "\n", "plot_model(model, show_shapes=True, show_layer_names=True, to_file='./image/sequential_model.png')" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYwAAAGVCAIAAABiglFOAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nO2dUWwbR37/Zx07uMZtqfpS6e4c20FROHWvBxZ9SOQWd4IVFYH9x9K4VrJN10zaghbIhwB2zIeeQEFwLagtQCYG+mCBFFqkAkxJ9suJKPwiCpAfSrZPZK9Bz0IhHGVfEG6MHnmHFodzk/0//KrpeJZcLbnL3ZH8/TwI3OXu7G9Wu1/Ob+Y3v9FM02QAAKAqB4I2AAAA7IBIAQCUBiIFAFAaiBQAQGkOihvlcvnDDz8MyhQAAGCMffDBB6dPn+abz7WkHj9+fP/+fd9NAgHz5MmT/f1/r1QqlUolaCuAI+7fv//48WNxz0HrQffu3fPLHqAEKysrFy9e3Mf/94mJCYYHe4+gaZq0B31SAAClgUgBAJQGIgUAUBqIFABAaSBSAAClgUiB3pmenp6eng7aCs/QBKSvDMPIZrOBWLWHyGazrVZL2mlzVx0CkQLq0mq1en6ye8Y0TSk1iGEYMzMzhw8fpjfNqsva8/ho7P+yvb2dTCY1TUsmk+vr69K3xWIxEolomhaJRJaWlvpX5tjYWCwWMwxDPNJ6P7vGFFheXpb2gBcBZf/vq6urnhg2Pj4+Pj6+62HWN8I0zWazqet6uVymz4VCgTGWTqelwxqNBmOs0Wi4t7Zbms3m6uqqaB5tEplMhjFWrVZN06xWq4yxTCbTvzLL5bKu681mUyqw7b1tC2NseXn5uT3ihrIPK+grav7fSR0CF6lMJiNJEh1WKBSsp7u0szdE+TAttbBu6rre1zITiYRVB92IFNw90COGYSwtLUUiEelzsVgkL2B7e5u+IteAMZbP58l92NzcpEIkF0nczGQyxWKR72RBdIEZhpFKpc6cOSPtz2Qy0WjU3nVqtVpLS0tkfD6f506Qzb3iB2SzWdpv9bOskJSLJBIJ0VTGGM0KoqvcunWrr2VOTEykUinJ6XOFqFhq/qKCftPb/50/x+Jncovq9To91qbQGcE9JnrcHz16ZO54SfzqdCJ7viODXzGdTlv9LCf03JIif7Ner0uHkTFsx+UR93N0Xc/lcqZpNhoNXde5E2Rzr/jB1EwrlUrSJXal2Wyy510zbmq5XC4UCj04pN2WSTWyb4vZwODuASs9/99tBMXmK6kXw/mJPdOzSNGraD3MFLxRUlvzeZEifeFvb7lcZoKHaFNl6gASv+pKl0ulUtsuIfphSKfT1q88L5NETfL43IgU3D3gN+FwmDGWSqWCNmR3ZmdnO30VCoUWFhYYY21dG5rMPDg4SJunTp1ijN29e3fXK9IxottrY4OV27dvT01NhUIhcWc2mx0ZGSHtiMVi1igBb8ukI738/4qKhZbUi4nPLSk3J/ZGzy2ptgYwS6uQGhqdamHd06cqFwoFcjClnYwxauw8evSIMWY9xvMyHd7JtjC0pIAiiB2xe5dwOLy6ulosFqkvmUOeoNTCcl5lPrDgnFqt9sknn1y9elXaH41G2U7rZmhoiDE2OTkZYJk9AJECfkNv4Llz54I2ZHdIeuz9I+rnlpyyy5cvM8a2trZok0qgtFb25HI5xtji4iKd4jDS3TCMtbU1PsRWq9WSySQ3jx9GsmIduetHmdSd5w1iswru3otJb/93PjDXaDT4Z3IByPdhOz3H9Jm6jZvNZjqdlsJq2E73M3Uws53RLnr0G40G9cKqMLrXKWhT6mKnbnVd1+nIQqEgjt/Z3Cv+LYeuLsZPStCAoHQWH1yjLny6+XR7S6USfdWPMk2M7oF+0Nv/3eZnr+1mtVql5z6Xy4njQfV6nfbTY00NE3pjqccnnU7Tpv8iRZJBsQLWKkunS0GSjUaDmkX0PvMq298r0zTr9TpJXiKR4PqYTqcTiUTbOMy2XiQfczRNs1Qq0TGJREJUk36Uae7IlqTjECngin7/350/oH3CZcS5k3kk/uAkWDzwMtPpNCLOAfCPeDy+sbGhwjoOlUplampK8TJrtVqtVovH4x6WCZEC/UWcDhKsJb1B8VBzc3O1Wi1AM9bX148cOTI8PKxymZubm/Pz8wsLC1JQlUt6Eal9lkUI9BUaohY/KI413crg4ODi4uLa2lpQJjHGRkdHT548qXiZxWLx5s2bPISVcJ++ps2SVoHTarUGBgbMzl2z0sH//u///oMf/KBYLNJYzK5Yb5nDa3WLWBHfLqoae6iaNqaGQqEbN274acxepO0tcv8A9CJSTmZRu+Hhw4fOD6Zh1K6mDpimSfLBGGs2m942TUXEipimaRgGtSb6elEA9hnKtaRarVY+n3d+PClmVyLFdiLQxA+eY60IbwZDoQBwTtd9Uv5nEeoZ531nilSEdI3nqOV5hQgeecx3cgul9EPc5larlUwm0YEI9jZiPIKTeBn/swg5jK2wnmIf+yee4ltF7KtGJTcaDdEACo3j8crcYB6gbE0/JFanWq1K51rZ9/FxDuOkgAowT4I5bd5Dm6/6mkXI/Sn+VMTeTooAth5J/W48+LharfLMRJ3SD9HpDpMHQaSAOgQpUm5O7Mqk3k7xpyJO7KzX63xKPe0hWeTZMDKZDBestpNFHV6IQ/93ABRBEinlOs5fcPL5POX9EHOGhcPhRCIxOTl54cIFxth//Md/HD9+nL6ibi+uSm7Yx1L10UcfMcauX78etCFgdy5evCjt8Vuk9kcWIeZ1RZLJ5J07d5aWliYnJ+v1Otcg8XLz8/MPHjw4fPjwe++9J327ubnpPiqPFHBfQnky93EF9xNWkfJvWsweyiJkj+cVqVQqIyMjbCeXmFWh2E5jKhqN5vN5cR5Db+mHANhD9BKCwD/wz/SG8Nxg4iwtWvan1WotLi5Shh3aTy0ReuH57E3KqsWzGjp83/h1peRkNiEI0in+VKTt5LVKpXL69GnKgU3Hb29v8xAH8RRqQEmdUOfPn2eMzc7ODgwMaJo2NDQ0MTGxR2fJAdAeaweqfSerTTltN91nEerWHv5VpxCEXW9IPypif1EqUDyeRvqkxZR0XRdz+nADpPRDvFiHWTgwugfUgfmZT0qSjL2LIhWhEK1+lAyRAupgFSmkatkzrKysOEmSDcA+o18itdezCHECr8j09DSfBDM6OhqIDS8ImoD0FUYknJDNZq2LVtjcVYf0S6S8yiKk2eKFpbsQeDokGuzL5XL9Tj7RP1qtlif/LK/KsYc7HRzDMGZmZg4fPsynVUqn+P9YSmxvbyeTSZpYSvM3RWgiJ83upPGfPpU5NjYWi8Wkn3Pr/ewa0ffb930ToC39/r9Tnq8Ay3GT45zWfeEzN2keknVAptMqMj7QbDZp0IabJ67UIi4JI83o6keZ5XK57Zrsbe9tWxgWYgBW+vp/p5fcffluynG5EIMkSXQYnz4p7u/BNvfYLx5l3XQy5uumzEQi4e1CDBAp0MX/nf+uMsZyuRxvOEgNc3FTWiSy0Wisrq7SM02RqIlEgsdVOC/H7GaFK5dLWklLNrGdVIuSTknndrpXjUajUCjQHaC2oa7r0tJ+VL6u69KlncCez5lBRYnpPdoutOdhmZSNA0taAS9x/n/XdZ3mOVOKGN6wd56yhquM+9Q3PoiUdXFQc0eMSDTFl1M6t9O9sskLZHbIveOkjgQtNSq1g8jUcrnMI/i6otsysTgo8B6H/3fpF5ISXfHWhPQU2oiLtNnXHD5EzyIlrUvMDzMF91NsBvJjer5XnXLvOKRUKrXtEqJfgnQ67TB7j5sySdQkj8+NSCFOCjiFpunyJMg0lefu3bsuiw2Hw4wxMeuDOtikpaalrhhjqVTKGp7S872iY8SBwq5SY9++fXtqakrKT53NZkdGRkg7YrGYNUrA2zLpSC//oaJioSX1YtJDHjHrHulbh1+5Kcc5Pbek2l6RWZqB1NAIto6maRYKBZ50TNzJduZdPXr0iAmJyfpXpsM72RaGlhToGT5fWtzpVcqaPZrDJxwOr66uUgowcb/Le8VnmDunVqt98sknV69elfZTag1q3VCs3+TkZIBl9gBECjjl8uXLjLGtrS3apBa++5k6KufwIemx94+on1tyynq+V73l3jEMY21tjYf71mo1ysPBnk+bQbLSNpur52VKo7GuEJtVcPdeTBz+36mrmK8BUSgUxGFpcZCO+onZzqAVPcE0sm4+H2fUbDbT6bQUZeOwnEBG9zoFbUpd7Db3io9gkrtEfiIv05owg64uxk9K0ICgdBYfXKMufLrbdD95WEM/yjQxugf6gfP/e6PRoJ96ekZ7y71Dp7vP4eNbnBTFCvAD2v7Ak6lO7pVUgrVAa+4dc2eRjrZxmG29SDGlT6lUomMSiYSoJv0o09yRLcRJAS/x+f/u/Hn1CpcR507mkfiDwwRhwZaZTqe9jThHnxQAdsTj8Y2NDZ5zNUAqlcrU1JTiZdZqtVqtFo/HPSwTIgV8JfDUN91C8VBzc3O1Wi1AM9bX148cOSKmt1ewzM3Nzfn5+YWFBSmoyiUQKeArgae+2RVrupXBwcHFxcW1tbWgTGKMjY6Oul8QqN9lFovFmzdv8hBWwn36Gqy7B3zFtHQ/q4ONbaFQ6MaNG34asxdpe4vc/8fRkgIAKA1ECgCgNBApAIDSQKQAAErTpuN8ZWXFfztAgFCI8D7+vz958oTt6wruc8TIToo8BgCAAJEizjWVh4TBnuPChQsMbRbgKeiTAgAoDUQKAKA0ECkAgNJApAAASgORAgAoDUQKAKA0ECkAgNJApAAASgORAgAoDUQKAKA0ECkAgNJApAAASgORAgAoDUQKAKA0ECkAgNJApAAASgORAgAoDUQKAKA0ECkAgNJApAAASgORAgAoDUQKAKA0ECkAgNJApAAASgORAgAoDUQKAKA0ECkAgNJApAAASgORAgAoDUQKAKA0ECkAgNJApAAASgORAgAozcGgDQB7m4cPH5bLZb75wx/+kDH2N3/zN3zP6dOnv/Od7wRgGdgvaKZpBm0D2MOUSqWxsbFDhw4dOCC3yr/88stnz56tra29/fbbgdgG9gcQKeCKL7/88mtf+9rnn3/e9ttXX331s88+e+mll3y2Cuwn0CcFXHHgwIE/+ZM/efnll61fvfzyy1euXIFCAZdApIBbotHoL37xC+v+X/ziF9Fo1H97wD4D7h7wgNdff71er0s7jx07Vq/XNU0LxCSwb0BLCnhALBY7dOiQuOfQoUN/+qd/CoUC7kFLCnjAD3/4w1OnTkk7/+3f/u2b3/xmIPaA/QRaUsADfuu3fuub3/ym2G767d/+bSgU8ASIFPCGd999lw/kHTp06L333gvWHrBvgLsHvOHx48cnTpygx0nTtK2trddffz1oo8B+AC0p4A3Hjh176623Dhw4cODAgbfeegsKBbwCIgU8IxaLaZp24MCBWCwWtC1g/wB3D3jG06dPv/a1rzHGPv3008HBwaDNAfsED0QKsTAAgE64VxhvUrVcu3bt9OnTnhQFfOCjjz5ijF2/ft3zkh8+fKhp2re//W3PS+6Kixcv4pkMnHK5fPv2bffleNOSWl5evnDhgntrgD9MTEwwxu7du+d5yT/72c8YY7/yK7/iecldgWdSBVZWVi5evKhKSwoAInB5AvsPjO4BAJQGIgUAUBqIFABAaSBSAAClgUiBLpienp6eng7aCo8xDCObzQZthepks9lWqxXIpSFSQCFarZbPscGGYczMzBw+fFjTNE3TrBKsPY+fthHb29vJZFLTtGQyub6+Ln1bLBYjkYimaZFIZGlpqX9ljo2NxWIxwzBcVqcXTNcwxpaXl92XA3xjfHx8fHw8aCvasLq66ucz2Ww2dV0vl8v0uVAoMMbS6bR0WKPRYIw1Gg33hnVLs9lcXV0VzaNNIpPJMMaq1appmtVqlTGWyWT6V2a5XNZ1vdlsOjR+eXnZm/+mB0VApPYaaooUSYafIpXJZCRJol/uQqFgLdC9VT0gyoe5Y57Npq7rfS0zkUg40UHCK5GCuwecYhjG0tJSJBKRPheLRXINtre36SvyFxhj+XyefIrNzU0qRPKbxM1MJlMsFvlO1ucuMMMwUqnUmTNnpP2ZTCYajdq7Tq1Wa2lpiezM5/PcCbK5LfyAbDZL+61+lhVSbZFEIiGayhirVCqMMbrKrVu3+lrmxMREKpXy2+lzr3MMLam9Rm8tKf5wi5/JV6KlYhKJhCnMgeBuFL0Djx49MndcJ/7g8TVmaFN6JtPptNX5coKTZ5Jcy3q9Lp1I12U7Lo+4X7wVuVyOqqPrOneCbG4LP5iaaaVSSbrErjSbTfa8a8ZNLZfLhUKhB4e02zKpRtLxnYC7B3qnZ3fPRlBsvpK6Npyf2DNOnkl6Fa0nmoLjScJqPi9SpC/87S2Xy0zwEG1qRx1A4lddSXCpVGrbJUS/Ael02nlvUc9lkqg59Pjg7oE9QzgcZoylUqmgDXmO2dnZTl+FQqGFhQXGWFvXhiZm84RZtEzO3bt3d70iHSN6uDY2WLl9+/bU1FQoFBJ3ZrPZkZER0o5YLNZtlEC3ZdKRfv8r3escQ0tqr+FzS8rNib3h5Jlsey1maQBSQ6OTwdY9fapdoVAgB1PayRijxs6jR48YY9ZjPC/TeS3QkgJ7DLF3dk8QDodXV1eLxSL1JXPIE5RaWM5rx8cQnFOr1T755JOrV69K+2kVe2rdDA0NMcYmJycDLLNPQKRA36HX8ty5c0Eb8hwkPfb+EfVzS07Z5cuXGWNbW1u0SSVQii57crkcY2xxcZFOcRjpbhjG2toaH2Kr1WrJZJKbxw8jWbGO3PWjTOrO8w/3jTEGd2+v0Zu7xwfmGo0G/0x+ATlEbKc7mT5TX3Kz2Uyn01KsDdvpk6ZeZ7YzBEbvQ6PRoK5Zn0f3OgVtSl3s1K2u6zodWSgUxPE7m9vCv+XQ1cX4SQkaEJTO4oNr1IVP95nuZKlUoq/6UaaJ0T3gG72JlM3vXNvNarVKL0MulxMHier1Ou2nZ51aK/QaUzdQOp2mzb6KFEkGxQpYaycdLAVJNhoNahbR+8xrZ39bqO4keYlEgutjOp1OJBJt4zDbepF8zNE0zVKpRMckEglRTfpRprkjWw5jHSBSoHf6HXHe9j33E4fPZCaTcR4/3W+cBIsHXmY6nUbEOQD+EY/HNzY2KLo6WCqVytTUlOJl1mq1Wq0Wj8c9LNMJvopUpVKhudd//Md//L3vfY9mD+xvxHkSLwjiHJFgLdkVioeam5ur1WoBmrG+vn7kyJHh4WGVy9zc3Jyfn19YWJCCqvzAfWOMOWtaU4cc+eEDAwNOri7Fp0ibntNsNsvlci6Xc95I3vXecv9/10v7WdO+unvePl092+C8C6LZbKrj9ClLJpPpdtrN3nP3KE73+PHjjLGf/OQnTk55+PChzabnZDKZf/zHf5ycnKRprk4whREc8baSIjPG7ty546Qcn2vaV8T7ELQtjgiFQjdu3AjaCtW5ceNGUKtS+7ek1fz8fFfHt1qtfD7fabMfUNhIVzMV2E4sicTo6KjzEvyvKQB7CD9aUtbUHNIB9Fry1IjUlyEl7rDm8WDtEl/smiujN7rKGULmtW1HqF9TAJTDvcfInPn/0uXETeq4aTQaUmoLm1PMDokv7HNlOKyO9bbYB+yIp9AVO32rSE3VTHrnIQ6fSdBX9l6clM17SIFn1v32r26nxBf2Z3Vrp/NTOkm/gjWFSAEf8EqklFhmnTqDtre3qXPdITzxBd8zOzvrJDNhnzBNkzG2vb194sSJTseoU9MnT56srKy4KUFx+IQbEBSe/Qvc6xxz3ZIyTZMG/ik1BHPWvuhkv8PDHNrZwymsc0vKVKOm4+Pjbp4ZAJzj5IG0RwmRIneGQqjE/Tan8E1xzpGTs7q10/0pCtYU7h7wgb0XJ2UDpbChECrn9Jb4IlhenJoC4BU+iRSfdkCphaSZEzRQtb29zfOBifv5Oyltnj9/njE2Ozs7MDCgadrQ0NDExAQvmd5nni3I4RQNfryUZsgmBKHTKdJ1VaspAHsG940xtlvTelcDxAQdNP5FDpGUuEPaNNslvpBK7qqmNjenUwjCrvdTzZrC3QM+4JW7p5mu5y5omra8vHzhwgWX5QDfoDSSXY0w7i3wTKrAysrKxYsX3SuMEn1SAADQCYgUAEBpXiCR0mwJ2jqgKC/UWGo2m+125T4feIFEyr5zLmjr9hWtVssT3feqnJ4xDGNmZubw4cN8Trh0QLA/dXR/JJaWlvgBxWIxEonQ5HNxvwjNeKfPY2NjsVhMuQFi933vDCMpe41+j+7RQiwBluPJM0mrwtD87WazSYG41kHeTmvM+EDbeSfcEnHBGGmlew7tF29yuVxuu/B6D+yrYE6wn/AqH1bgebUWFhbC4TBl4A2FQpcuXWKMzc7OSk0SSgUXSEK4H/3oR9KSXOl0mltCi6HTGvf0d2NjQzy91Wrdv39fKnN4ePjo0aO0yrwiQKSAHa1Wa2lpifyIfD7PHQHJwRE3pXxYhmGQ08F2PItkMsljWZ2Xw7rM6uUSwzBSqdSZM2ek/ZlMJhqNdnKdiE43bdcUYNasYfaMjo6KsxfW19fFWZnUkqJlJugq0qT0hYWF999/31rsxMREKpVSyOlz3xhjcPf2Gs7dPV3Xc7mcuZPTijsCfJ1LOoyyWbF2UxH5k8b9JnFxUOflmN0sw+f+mbQuHWruTB2nqFpx3U3pPep00+xTgLXNGtaVzdZsYmRquVzmKxtySqUSmWHVga5WALVh7+WTAurgUKToVeEPN/WA0Ftk2k5vtvnKtPSPOC/HOe6fSWnVYl6sudNXxYQp3+KRPd+0TlnDHFKtVvlVROgnIZ1Oi91MtLhpW5PMnbT97henQJ8U6DsUks77OE6dOsV2klu5gfpHqMdEWWxS3dNCWIyxtj5RzzeNZw3j7m1X6fbv379vzayfzWZHRkZIdGKxGA8v+P73v3/16tVORVHafoX+Qe51jqEltddw2JKyPiHiHulbh1+5Kcc57p/JtpdmlvYguXLBVtbc6TKXdlLTjBpQlL+MWk+rq6uiG9uppu7FAS0p0Hd4MgZxJ19J0CVelRMU4XB4dXW1WCxS/zTH5U3jQwpdIXWZE5QXiJpFQ0NDjLHJyUnGWCQSOXHihHXIoofr+gNECnTk8uXLjLGtrS3aJGeBJie7gd7Dc+fOuSynr5D02IdfUz+35JT1fNPcZA3b2NggJ1oyj38mqaI9UjuFDuAfONQrpwIQKdCRs2fP6ro+NzdH7YIHDx4kEgne8UGtA1IcGudmjCWTSWbJh0XQsH2r1VpcXKQxr27L8TME4eTJk+x5kaKbIDWRLl26JL3MNjfNPgVY26xhjDEKSrBZCL5Wq42MjFj3X7t2je3cdrqxtGdXKF7hzTffdHKwH7j3GBn6pPYazkMQaBiIHpVCoSCOENXrdRIRGqumZkXbfFh0Ol+GK5fL9VaOnyEIFBtBg/SmpZUhHazrunRu25smlWAt0Jo1zNxZYUi6hIiYd0yiVCrRb0AikSiVSm2PsdaIRiTdx9AjnxToHZ/zSWmdV0vt3xXdP5PUfFNkBfZIJEKhWz4wPT09MDDgvuLIJwVAf4nH4xsbG9wDDZBKpTI1NeXPtWq1Wq1Wi8fj/lzOCRAp0F+kLO97CIqHmpubs+kP8oH19fUjR47QFMJ+s7m5OT8/v7CwQB3tigCRAv2FBr/FD3uIwcHBxcXFtbW1AG0YHR2lXnwfKBaLN2/eDGSytA1KrGAM9jF+dkX1g1AopEi3lA+oWVO0pAAASgORAgAoDUQKAKA0ECkAgNJ4E8w5PDz82muveWIQ8AGK/fFnVDsQ7t+/j2cycJ48eVKpVDxQGPdFuJ9xCvYNP/jBDxhj3/rWt4I2BKiC+4kNHogUAByaibKyshK0IWD/gD4pAIDSQKQAAEoDkQIAKA1ECgCgNBApAIDSQKQAAEoDkQIAKA1ECgCgNBApAIDSQKQAAEoDkQIAKA1ECgCgNBApAIDSQKQAAEoDkQIAKA1ECgCgNBApAIDSQKQAAEoDkQIAKA1ECgCgNBApAIDSQKQAAEoDkQIAKA1ECgCgNBApAIDSQKQAAEoDkQIAKA1ECgCgNBApAIDSQKQAAEoDkQIAKA1ECgCgNBApAIDSaKZpBm0D2MP8wz/8w4cffvjFF1/Q5tOnTxljr776Km2+9NJLH3zwwbvvvhuYfWDvA5ECrtjc3HzjjTdsDnj06NHJkyd9swfsP+DuAVecPHkyHA5rmmb9StO0cDgMhQIugUgBt7z77rsvvfSSdf/Bgwffe+89/+0B+wy4e8Atn3766bFjx7788ktpv6Zpjx8/Pnr0aCBWgX0DWlLALd/4xjd+//d//8CB556lAwcO/MEf/AEUCrgHIgU8IBaLSXs0TcOgHvAEuHvAA37yk58MDQ09e/aM7zl48OBnn3321a9+NUCrwP4ALSngAb/2a7/2h3/4h7z7/KWXXnrnnXegUMATIFLAG65cucL7zk3TvHLlSrD2gH0D3D3gDf/93//91a9+9ec//zlj7Ctf+crTp08PHz4ctFFgP4CWFPCGV1555bvf/e6hQ4cOHTr03e9+FwoFvAIiBTzj8uXLz549e/bs2eXLl4O2BewfDvp2pXK5/PjxY98uB/zniy++eOWVV0zT/OlPf7qyshK0OaCPHDt27PTp0z5dzPSL8fFxn6oEAOgz4+PjvkmHfy0pqti9e/f8vCJwjqZpy8vLFy5ccFPIxsaGpmnf+c53vLLKK1ZWVi5evGhimMgLJiYm/LycryIF9j3f/va3gzYB7DcgUsBLpBl8ALgHjxQAQGkgUgAApYFIAQCUBiIFAFAaiBRwxfT09PT0dNBWeI9hGNlsNmgrfCKbzbZaraCt6AhECihNq9Vqu8pDXzEMY2Zm5vDhw5qmaZpmVWHteXw2j+6JxNLSEj+gWCxGIhFN0yKRiLhfJJ/Pc8vHxsZisZhhGH5Y3wO+hY2Oj4/7GaUKuoUxtry8HLQVMqurq548pcvLyw7LaTabuq6Xy2X6XCgUGEWMeXQAAByfSURBVGPpdFo6rNFoMMYajYZ727qlXC5bX2RuSSaTYYxVq1XTNKvVKmMsk8lIJdB+8YaUy2Vd15vNphMDfH6X0ZIC6tJqtfL5vM8XXVhYCIfDw8PDjLFQKHTp0iXG2OzsrNQkGRwc5H995kc/+lG9XufvcKPRSKfT3JJUKsUYC4fD/O/GxoZ4eqvVun//vlTm8PDw0aNHFxYW/KhAl0CkQO8YhrG0tBSJRKTPxWKRfI3t7W36ihwQtuNlJJPJzc1NKkRymsTNTCZTLBb5Ttb/LjDDMFKp1JkzZ6T9mUwmGo12cp2IVqu1tLREpubzee492dwZfkA2m6X96+vruxo5Ojp6/Phxvrm+vi5OjKWWVKVSYYzRVW7duiWevrCw8P7771uLnZiYSKVSKjp9vrXZ4O4pDuve3dN1nT9F/DM5SvV6nTGWSCRMYboc96ESiQRj7NGjR+aO38QfRTqRb0pPaTqdtnpeTnDo7pF3KbZTyAa6NNtxo8T94t3I5XJUI13Xufdkc2f4wYVCwTTNUqkkXcIJvCgOmVoulwuFguSQlkolMsP6+pNhq6uru17R53cZIgX+lx5Eynz+WZeee5uvpL4S5yf2jEORotdb2kl7qK+Ka6v5vEiRvnBFoG4jkh5rLcRN6vMSv+pKhavVKr+KCP0MpNNpsZup0WiQjFpNogqydh1YVtAnBfY/1FdCvSdKMTs72+mrUChEXTZtfSJK78E7hk6dOsUYu3v37q5XpGNEJ9fGBiv3798fHR2Vdmaz2ZGRERKdWCzGwwu+//3vX716tVNRoVCIKflPgUgB4JTBwcFqtVosFuPxuBRYND8/L27SC08davbQMVLbwaE9pJVS5/3S0lIqlTp79mwoFIrFYsVikRIQFovFd955x2HJSgGRAoFBLsneIhwOr66uFotF6p/mkCcotbCcV5API3SF1GVORKNRtqOSQ0NDjLHJyUnGWCQSOXHihHWYoofr+gxECgQAvZPnzp0L2hAZkh778Gvq55acMkrrvrW1RZtUgpPkcLlcjjG2uLhIp3QV6b6xsUGOs2Qe/0xSRXvaNtasrTbqlVMKiBToHXGUnX+ml42/52LjgobwW63W4uIijX/RfmpxkHLR2DljLJlMMqGFQq9uv0MQTp48yZ4XKbJfaiJdunRJepnPnj2r6/rc3Bwd+eDBg0QiQb1F9nfm/PnzjLHZ2dmBgQFN04aGhkjaKCihVqt1MrVWq42MjFj3X7t2je3carqZtGdXKF7hzTffdHKwn0CkQO+QN0Ef+OeBgQH+VzyGMXbq1KlIJDIwMHD8+PHFxUW+/3vf+56u62+88UaxWBweHqamys2bN9lOjM/f/u3fxmIxH2r01ltvMcY+/fRT2iTVoFpIntGtW7ekNsvCwoKu6/zIv/7rv6av7O/M4OBgvV4nyUskEvV6nWKgKFDDRpHbdpkzxkZHR0ulEuVx/vjjj0ulUtvDrFCt6Q4ohX+Lg9LvA3KcK4snOc5tCmftnAvfcJ7jnJpsN27c6L9RuxOJRCh0ywemp6cHBgacVNzndxktKQCeIx6Pb2xscK8zQCqVytTUlD/XqtVqtVotHo/7c7muUF2kxCkFYI8idl0Fa4kTyHGbm5uz6Q/ygfX19SNHjtAUwn6zubk5Pz+/sLBAHe2qobpIzczMRKNRJ/Em/rC9vZ1MJmn2mZNpVsyS1oPIZrPFYlHlJD4eInZdBWuJQwYHBxcXF9fW1gK0YXR0lHrxfaBYLN68eTOQydJOUF2k7ty5E7QJ/0er1arVanfu3Gk2myMjI2+//bYT9TSF6Wl8jsLY2Fg+n1c6iY939BCmGDihUEiRbikfuHHjhrIKxdQXKaV4+PAhDejwDB4O/VD+BPDmdDgcpjkW1thlAICIiiLFU15EIhFrJK41r8WuqTDoeMqeIQ4kd5siQxxyJsSQ4m5DeAYHB69du1YsFh8+fKhC7QBQlL5MW26H85nTuq4nEgnyjGiOOLezbV4L+1QYmUyGMm80m01xjrvLFBk0e1PMa2GfRaTt3aZC7LN2+FY7pmRmTq9wnpkT7MqLnqqFokJ4Ngx6jdlueS0kCRA3mZBAg/qG7ItySKlUcp5u1Wph2/3B1g4iBRzis0gpF8yZTCbn5+dFq8Q4wEgkYu2rNk1TihUUN6nAQqFA88L5WZ2KclidSCQyNTXlfIS4UzSjOrXTNG14ePi1115zWKO9xZMnTyqVinU6LuiBSqUyPDz84gZzSikvJHrIa3H9+nVd16PR6MDAgDh1002KjKWlJV3X3cewUJc5nwWmSO0AUAvXbTGnOGwiWq0S99Bn7gx2OstaSLVapU5uKRuktahdqVarPWSwbXu3qbeoVCrZm+RP7RjcPeCMFz0zJ2Wu6BTs20NeC03TWq1WOBy+c+dOtVrliQd7S5FhGMba2hrPbF+r1Wiyfg8YhnH79m1d1/n8z8BrB4CK+CaHDtWXRq90XadBK2prsJ3xLB4VyanX61KoJO9rpx5lxlg6nabS6vU6b2u0LcreNhoyk87iA3w2o3vcJN7RTsN2uq6LefKDrR1DSwo440VvSR0/frxerx89evTEiRPJZPJ3fud3xMQdbfNa7Jok5P333793756maffu3eNhxJ1SZNgwMzNj7Y1+44037M/SNI2bRDmDNE1bW1ubmppaXV0VI32DrR0AaqLc6B4Iir6magkc56lawK4gVQsAAPwfECkA2vBCDTVks1mVJ5BCpJ6jbVoVaYEN0AOtVsuTG+hVOfYYhjEzM3P48GH6v1unZAb+YLRarUqlks/nrVPc7bMJ0Xr3NKOTrxo/NjamdEIO37rosYKx4rB+ju7RbKcAy3E+ukcrFfMV4WmCkXXclsZPpUXMfYOGkq2vcLPZpOFmbrk4vZTWwqFZnNIi0uVy2fk0rxd97h4Iiv6JFF+gPMBynItUJpORJIm0wLqauZ+/8W2xipQoSdYDrJu6rvPNRCLhZI11EyEIQHF4Ih2eH4b2W1ed5JuZTIZCN2iPYRjkdDDG8vk8OSY8J4/zclgfVrgyDCOVSp05c0ban8lkotEo94/a0unO7Jpsx8OkOvbZhKglRenbyQAelswYm5iYaLuCfPD4JodoSSkOc9aS0nU9l8uZO6Gt3Efg4aN0GAXlsufnM4mf2U7yGVq7ie1M4nFejrlbehwRhy0pcielwFc6kdwrMeONVGCnO2OfbMdNyiD7V9iaTYjXolwuFwoFyVclw6Tj2wJ3DwSDE5Git4g/3OVymQl+kPTO2IiLtCn1jzgvxzkORUrMySUaYArOJp8RKR7Z851xkzLI/m50yiZEPwnpdFr6ikTNiccHdw+oC8Xv8Sj5U6dOMcbu3r3rslhaK5xPPAwQafF0EVpFhjHW1ifq+c7QMaJXa2NDV9y+fXtqakpaACabzY6MjJAexWIxMfKAjlThvyDjmxyiJaU4zEFLyvrMiHukbx1+5aYc5zhsSbUtn1kafdRCCbZG9ucWCgXyPaWdbGcS6KNHjxhj0jEOjUFLCqgL+TtSO0LsmnWDV+X0lXA4vLq6WiwWqROa4/LOWHP5u6FWq33yySdXr16V9kejUbbTYqK5n5OTkx5et09ApEAXXL58mTG2tbVFm+Qs0EwuN9Areu7cOZfluIekxz78mvq5Jaes5zvjeVIdm2xC4tgfSZV1NJCHXymEb202uHuKwxy4e9R5zDPMFAoFPkpl7vTIUr8y9RyznWEsehkajQb1y9JX1K9MS0hIATsOy/FhdK9T0KbUxW5zZ+yT7XRKqiMGXrbFmv/H3C2bEPXu022nG8sTLpoY3TMhUsrjRKRM02w0GvTjT4+7+IbU63V6Q+hBpxYHvYrUlZNOp3kaLCashZPL5Xorx3ORIsmgWAFuZ6dfdFFYbe6MVIK1QCmpDu1Mp9OJREK6BIdZoP1tHUwxQWupVKJjEomEqFDmjmw5iaF/0RdiAEHhZ6qWTstS9A/nqVrI21Jk+eJIJEKNOx+Ynp4eGBhwUnGkagEgSOLx+MbGBoVlB0ulUpmamvLnWrVarVarxeNxfy7XFRAp4DfifJFgLWkLxUPNzc11SrTvD+vr60eOHHG/IpETNjc35+fnFxYWpKAqRYBIAb/hiY/5B9UYHBxcXFxcW1sL0IbR0dGTJ0/6c61isXjz5k0xk7VSHAzaAPDC4WdXVM+EQiFFuqV8QPGaoiUFAFAaiBQAQGkgUgAApYFIAQCUBiIFAFAb32Lbx8fHg64rAMAb9ue0mHK5/PjxY3+uBYLio48+Yoxdv349aENAfzl27Njp06f9uZZ/IgVeBGjq38rKStCGgP0D+qQAAEoDkQIAKA1ECgCgNBApAIDSQKQAAEoDkQIAKA1ECgCgNBApAIDSQKQAAEoDkQIAKA1ECgCgNBApAIDSQKQAAEoDkQIAKA1ECgCgNBApAIDSQKQAAEoDkQIAKA1ECgCgNBApAIDSQKQAAEoDkQIAKA1ECgCgNBApAIDSQKQAAEoDkQIAKA1ECgCgNBApAIDSQKQAAEoDkQIAKA1ECgCgNBApAIDSHAzaALC3efr06U9/+lO++V//9V+Msa2tLb7nV3/1V1999dUALAP7Bc00zaBtAHuYv//7v//zP/9zmwP+7u/+7s/+7M98swfsPyBSwBWtVuvXf/3Xnz171vbbQ4cOff7556FQyGerwH4CfVLAFaFQ6Ny5cwcPtuk3OHjw4P/7f/8PCgVcApECbrly5coXX3xh3f/ll19euXLFf3vAPgPuHnDLz3/+81dffZW6zEVeeeWVp0+f/tIv/VIgVoF9A1pSwC1f+cpX/uiP/ujQoUPizkOHDo2Pj0OhgHsgUsADLl++LPWdP3v27PLly0HZA/YTcPeAB/zP//zP0NDQf/7nf/I9AwMDn3/+edsOdQC6Ai0p4AEHDx6MRqPc4zt06NCVK1egUMATIFLAG6LRKPf4nj17Fo1Gg7UH7Bvg7gFvME3z2LFjP/7xjxljX//613/84x9rmha0UWA/gJYU8AZN02Kx2Msvv/zyyy+/9957UCjgFWhJAc/413/913A4TB++9a1vBW0O2Cf417X54Ycflstl3y4HAuGXf/mXGWN/+Zd/GbQhoL+cPn36gw8+8Oda/rl75XK5Uqn4djnQLffv33/y5InLQk6cOPH66697YY7HPHny5P79+0FbsU+oVCp+Njh8HSQeHh6+d++en1cEztE07fr16xcuXHBTCGWS+o3f+A2PjPKMlZWVixcv4vHzhImJCT8vh0gW4CUKyhPY62B0DwCgNBApAIDSQKQAAEoDkQIAKA1ECrhienp6eno6aCu8xzCMbDYbtBU+kc1mW61W0FZ0BCIFlKbVavk/w8YwjJmZmcOHD2uapmmaVYW15/HZPMZYq9WqVCr5fD4SiUhfbW9vJ5NJTdOSyeT6+rr0bbFYjEQimqZFIpGlpSXaOTY2FovFDMPww/QeMP1ifHx8fHzct8uBbmGMLS8vB22FzOrqqidP6fLyssNyms2mruvlcpk+FwoFxlg6nZYOazQajLFGo+Heth5Ip9PpdNr6CjebzdXVVVOwnDaJTCbDGKtWq6ZpVqtVxlgmk6GvyuWyruvNZtPJ1X1+lyFS4H9RUKRIL3wWqUwmI0kSaUGhUJCO9PM3vi1WkRIlyXqAdVPXdb6ZSCS4Ztnj87sMdw/0jmEYS0tL5HGIn4vFIjkU29vb9BV5GYyxfD5Pnsjm5iYVIjlN4mYmkykWi3wn638XmGEYqVTqzJkz0v5MJhONRrl/1JZWq7W0tESm5vN57j3Z3Bl+QDabpf1WB60rSNNFEomEWAvGGM1OIwNu3brFv52YmEilUio6fb7JIVpSisO6b0nxV0L8TI5SvV5njCUSCVNIs8F9KHpzHj16ZO74TfxRpBP5pvSUkpvTQ+0ctqTIu6zX6+JOOpHcK/KVxP3i3cjlclQjXde592RzZ/jB1EwrlUrSJeyxf4WbzSZ73t3jtSiXy4VCQfJVyTDp+LbA3QPB0INImc+/J9I7Y/OV1CHi/MSecShS9A5LO2kP9z1JW83nRYr0hb/2NP+We4g2FaSeI/Er5ypsf3NKpVLbbib6hUin09JXJGpOPD64e2D/Q2mnUqlU0IbIzM7OdvoqFAotLCwwxtr6RDR1eXBwkDZPnTrFGLt79+6uV6RjRCfXxoauuH379tTUlLSCdDabHRkZIT2KxWJi5AEdqeA/BSIFgFMGBwer1WqxWIzH41Jg0fz8vLhJLzx1qNlDx0htB/emLi0t6bo+PDws7UylUmfPng2FQrFYrFgsrqysuL9Wv4FIgcAQ+3T3CuFweHV1tVgsUic0hzxBqYXlvIJ8GMETarXaJ598cvXqVWk/rY5BAjo0NMQYm5yc9PC6fQIiBQKA3slz584FbYgMSY99+DX1c0tOGa2ESum0eAlO8i7lcjnG2OLiIp3iPtLdMIy1tTU+bFer1ZLJJLecH0ZSZR0N5OFX6gCRAr0jjrLzz/Sy8fdcbFzQEH6r1VpcXKTxL9pPLQ5SLp6+lV4t3kKhV7ffIQgnT55kz4sU2S81kS5duiS9zGfPntV1fW5ujo588OBBIpEYHR0Vz217Z86fP88Ym52dHRgY0DRtaGiIpI2CEmq1WidTeTmStfF4PJVK8U6u3/3d3+U/BteuXWM7/wW6z7SHoKCEN9980+G98g/fuugxuqc4rPvRPZuHqu1mtVol0cnlcuLQUr1ep/00/k1NFRopo3HAdDpNm/0OQaB4CIoVsFZQOliMhKRzqVnEGCsUCryC9neGqk+Sl0gkePRDOp1OJBLSJTidXuS2DiYfjjRNs1Qq0TGJRKJUKoll0oikkxh6n99l/1aLod8H5G9VFk3TlpeXXaYPtimcWV5RP6H0wU4MoCbbjRs3+m/U7kQiEQrd8oHp6emBgQEnFff5XYa7B8BzxOPxjY0NFRYNqVQqU1NT/lyrVqvVarV4PO7P5boCIgX6jth1FawlTqB4qLm5OZv+IB9YX18/cuSIFEPQJzY3N+fn5xcWFqSgKkVQXaTEeU9gj0Kj3eIHxRkcHFxcXFxbWwvQhtHRUerF94FisXjz5k0eiaoaqovUzMxMNBp1EhTnD4ZhTE9P07iJ/XRTjtaObDZbLBZVzjTmIWInaNC2OCUUCinSLeUDN27cUFahmPoidefOnaBN+D8Mw9ja2rp165ZpmoVCIRqNOglpMYU5tHzEZ2xsLJ/PK51pDAA1UF2klGJra4v3EVy6dIk5nujEf6a4zx8Oh2kimHWCBQBAREWR4nl5IpGIdbqANfnOrvl66HhK8SMme+02j4/Yi0nKIkb0dRtnODg4eO3atWKx+PDhQxVqB4Ci+BaR5TwATNf1RCJBnhElsuB2tk2+Y5+vJ5PJUIBcs9kUE3G4yePDo+/EMDn7OMO2d5smo9unFvKtdky9zJwe4jwzJ9iVFz2fFIWu8ZefXmO2W/IdSQLETSYE0VLfkH1Ru8KzsjFnyXesJnXaH2ztIFLAIS+6SFHMvrhHfCet8yGZEMfc9hQqUJymYF+UQ6rVKrVcKBnjrjgRqWBrZz0egE680NNirPMnxD2dZldI+8XNzc3NVCpFQQyZTIaPK7ufqLG5ufnGG284LKTt5Vqt1sDAQDqdpjnrwdZO07Rr166dPn3a+Sl7iHK5fPv2bWpPAZd89NFHr732mn9T3HyTQ4ctKatV4h76LPYEtT3LWki1WqVGh5Sy1lpUVzi/h22PpN4iPs8z2NoxuHvAGS96+mCaR95pRkIPyXc0TWu1WuFw+M6dO9VqlQcNuM/jQyfyrv1uMQzj9u3buq5TQo/eTOpf7QBQBd/k0KH6Ure0rus0aEVtDbYznsWjIjn1el0KleR97dSjzBhLp9NUWr1e522NtkXZ26brujSaJvZG24zucZN4zxEN2+m6LmbGCLZ2DC0p4IwXvePcNM16vc5T3vChdP4yW5PvSJpr3Ww0GpRxURqMa5vHxwYxaUYmk+FZh4hOImX5XWh/euC1g0gBhyCfFAiGvuaTChzn+aTAriCfFAAA/B8QKQB2Yf8NO2Sz2T00YxQi9Rxt06qICzeC3mi1Wp7cQK/KcY5hGDMzM4cPH6ZnwDo9M/CHpNVqVSqVfD7fNu1asViMRCKRSETMdzQ2NraHMnAcDNoAtUCfRZ8QJ1GrUI5DWq1WPB6fmpoaHh6ORqMPHjygpev4glGMMdM0DcMYGhpqNBqBZGWiYZO26x4vLS3dvXt3cXGRMfYXf/EXn332GS3GFw6Hp6am4vH44uKimtk4RdCSAn2n1Wrl83l1ynHOwsJCOBym7BehUIjy88zOzkr5Dkmbgsobd+vWLVE0Odvb29FolFZaD4VCiURicnKSRyAODw8fPXqU8gUpDkQKdAdPpMPzw9B+yd8RNzOZDPkatMcwDPJBGGP5fF7TtGQyyXPyOC+H9XkZPsMwUqnUmTNnpP2ZTCYajdrnZe10l3ZNvONhgp1/+qd/Yox94xvfoM2vf/3rjLF/+Zd/4QdMTEykUin1nT6IFOiOWCz2s5/9zDTNRqNRLBZ50j4pfFTMFcF/5ynsZWhoiLpIKpXK1atXKTz1jTfeIJ1yXk5fqifwz//8z4yx3/zN35T237hxI51OR6NRm5UaOt2leDxO6bArlQpFLBeLxb/6q7+is2hpz6NHj5qmee3atbffftvNYhAbGxuMsePHj9MmNfTEnimqGlVTaXyLyMLioIrDHARz0gQAHlhLy0lS1ipzt5Qynb4yd1YAlSYeOinHOT0Ec4r5uURjTNNsNpuUZ4LPjhSP7Pku9Zw+yFqskz308+A83RDnRZ+7B1SG4vd458upU6cYY3fv3nVZbDgcZo5zMftG265ogpa9Yoy1dZd6vkt0jOjh2tjgHuoyV+22W4FIgS6Yn58XN+kpV2ctHz8ZHBysVquiK8fp+S7RMVI7omcL2+YUa7sOu+JApEAX0HMvtR28eu733PsTDodXV1eLxSIFAXBc3iVrXv/ekMyg7vnf+73f86RwP4FIgS64fPkyY2xra4s2qQVBM7ncQK/luXPnXJbjLSQ99pHZNPtdcsp6vkveJth55513RDM+/fRTvlNEXExETSBSoAvOnj2r6/rc3Bz9Pj948CCRSPB8WNRYIMWpVCq0M5lMMuFXXXzraBS/1WotLi5S4ppuy+lrCAItICyKFNVaaiJdunRJes9t7hI/l4rlhdP+8+fPM8ZmZ2cHBgY0TRsaGiJpo6AEm5E+Xo5o7fHjx3O53Mcff9xqtVqt1scff5zL5fhgH9tpW7355pvd3Rf/8a2LHqN7isOcpWppNBr0g88sudXr9TqJyOrqqmmaYo4dGr9Lp9M8DRYT1sLJ5XK9lWO/Qo9ID6N7FAzBM+rYvzi6rju5S1IJ1gLbJthJp9OJREK6BMf+pab8Qrqu8wSwHBp2FDOaOQSpWkAw+JmqxX2C+W7pLVULtdcUWW89EomIGc3cMz09PTAw0EPtkKoFAFWIx+MbGxvc5QyQSqUyNTXlYYG1Wq1Wq8XjcQ/L7BMQKeA34hyRYC3ZFYqHmpubcxP57Z719fUjR46IC2i7ZHNzc35+fmFhQf3ZxQwiBfxnaGhI+qAyg4ODi4uLa2trAdowOjpKvfheUSwWb968GdSM6G5BqhbgN352RXlCKBRSpFvKK/ZWddCSAgAoDUQKAKA0ECkAgNJApAAASuNrx/mTJ09WVlb8vCLoCgpB3pdQ1fD4ecKTJ09ee+01/67nW2z7+Pi4f7UCAPST/TktBgAAegB9UgAApYFIAQCUBiIFAFAaiBQAQGn+P4nsfNJzeOJIAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model = build_model_wtih_functional()\n", "\n", "plot_model(model, show_shapes=True, show_layer_names=True, to_file='./image/functional_model.png')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can see that both model has same architecture." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Training the model\n", "\n", "Regardless if you built it with the Sequential or Functional API, you'll follow the same steps when training and evaluating your model." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/5\n", "1875/1875 [==============================] - 5s 2ms/step - loss: 0.2587 - accuracy: 0.9260\n", "Epoch 2/5\n", "1875/1875 [==============================] - 5s 3ms/step - loss: 0.1154 - accuracy: 0.9660\n", "Epoch 3/5\n", "1875/1875 [==============================] - 5s 3ms/step - loss: 0.0790 - accuracy: 0.9762\n", "Epoch 4/5\n", "1875/1875 [==============================] - 5s 3ms/step - loss: 0.0582 - accuracy: 0.9820\n", "Epoch 5/5\n", "1875/1875 [==============================] - 5s 3ms/step - loss: 0.0455 - accuracy: 0.9862\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model.compile(optimizer=tf.optimizers.Adam(),\n", " loss='sparse_categorical_crossentropy',\n", " metrics=['accuracy'])\n", "\n", "model.fit(X_train, y_train, epochs=5)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "313/313 [==============================] - 1s 2ms/step - loss: 0.0805 - accuracy: 0.9743\n" ] }, { "data": { "text/plain": [ "[0.08054833114147186, 0.9743000268936157]" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model.evaluate(X_test, y_test)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Part 2 - Build a Multi-output Model\n", "\n", "In this section, we'll show how you can build models with more than one output. The dataset we will be working on is available from the [UCI Machine Learning Repository](https://archive.ics.uci.edu/ml/datasets/Energy+efficiency). It is an Energy Efficiency dataset which uses the bulding features (e.g. wall area, roof area) as inputs and has two outputs: Cooling Load and Heating Load." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Utilities\n", "\n", "We define a few utilities for data conversion and visualization to make our code more neat." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "def format_output(data):\n", " y1 = data.pop('Y1')\n", " y1 = np.array(y1)\n", " y2 = data.pop('Y2')\n", " y2 = np.array(y2)\n", " return y1, y2\n", "\n", "def norm(x):\n", " return (x - train_stats['mean']) / train_stats['std']\n", "\n", "def plot_diff(y_true, y_pred, title=''):\n", " plt.scatter(y_true, y_pred)\n", " plt.title(title)\n", " plt.xlabel('True Values')\n", " plt.ylabel('Predictions')\n", " plt.axis('equal')\n", " plt.axis('square')\n", " plt.xlim(plt.xlim())\n", " plt.ylim(plt.ylim())\n", " plt.plot([-100, 100], [-100, 100])\n", "\n", "def plot_metrics(history, metric_name, title, ylim=5):\n", " plt.title(title)\n", " plt.ylim(0, ylim)\n", " plt.plot(history.history[metric_name], color='blue', label=metric_name)\n", " plt.plot(history.history['val_' + metric_name], color='green', label='val_' + metric_name)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Prepare the Data\n", "\n", "We download the dataset and format it for training." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "# Specify data URI\n", "URI = './dataset/ENB2012_data.xlsx'\n", "\n", "# Use pandas excel reader\n", "df = pd.read_excel(URI)\n", "df.dropna(axis=1, inplace=True)\n", "df = df.sample(frac=1).reset_index(drop=True)\n", "\n", "# Split the data into train and test with 80 train / 20 test\n", "train, test = train_test_split(df, test_size=0.2)\n", "train_stats = train.describe()\n", "\n", "# Get Y1 and Y2 as the 2 outputs and format them as np arrays\n", "train_stats.pop('Y1')\n", "train_stats.pop('Y2')\n", "train_stats = train_stats.transpose()\n", "train_Y = format_output(train)\n", "test_Y = format_output(test)\n", "\n", "# Normalize the train and test data\n", "norm_train_X = norm(train)\n", "norm_test_X = norm(test)" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
X1X2X3X4X5X6X7X8Y1Y2
00.74686.0245.0220.53.540.40214.1816.99
10.90563.5318.5122.57.050.00019.6829.60
20.64784.0343.0220.53.520.10515.1619.24
30.71710.5269.5220.53.520.10210.6413.67
40.90563.5318.5122.57.050.25231.6637.72
\n", "
" ], "text/plain": [ " X1 X2 X3 X4 X5 X6 X7 X8 Y1 Y2\n", "0 0.74 686.0 245.0 220.5 3.5 4 0.40 2 14.18 16.99\n", "1 0.90 563.5 318.5 122.5 7.0 5 0.00 0 19.68 29.60\n", "2 0.64 784.0 343.0 220.5 3.5 2 0.10 5 15.16 19.24\n", "3 0.71 710.5 269.5 220.5 3.5 2 0.10 2 10.64 13.67\n", "4 0.90 563.5 318.5 122.5 7.0 5 0.25 2 31.66 37.72" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Build the Model\n", "\n", "Here is how we'll build the model using the functional syntax. Notice that we can specify a list of outputs (i.e. `[y1_output, y2_output]`) when we instantiate the `Model()` class." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "# define model layers\n", "input_layer = Input(shape=(len(train.columns), ))\n", "first_dense = Dense(units=128, activation='relu')(input_layer)\n", "second_dense = Dense(units=128, activation='relu')(first_dense)\n", "\n", "# Y1 output will be fed directly from the second dense\n", "y1_output = Dense(units=1, name='y1_output')(second_dense)\n", "third_dense = Dense(units=64, activation='relu')(second_dense)\n", "\n", "# Y2 output will come via the third dense\n", "y2_output = Dense(units=1, name='y2_output')(third_dense)\n", "\n", "# Define the model with the input layer and a list of output layers\n", "model = Model(inputs=input_layer, outputs=[y1_output, y2_output])" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Model: \"model_1\"\n", "__________________________________________________________________________________________________\n", "Layer (type) Output Shape Param # Connected to \n", "==================================================================================================\n", "input_2 (InputLayer) [(None, 8)] 0 \n", "__________________________________________________________________________________________________\n", "dense_4 (Dense) (None, 128) 1152 input_2[0][0] \n", "__________________________________________________________________________________________________\n", "dense_5 (Dense) (None, 128) 16512 dense_4[0][0] \n", "__________________________________________________________________________________________________\n", "dense_6 (Dense) (None, 64) 8256 dense_5[0][0] \n", "__________________________________________________________________________________________________\n", "y1_output (Dense) (None, 1) 129 dense_5[0][0] \n", "__________________________________________________________________________________________________\n", "y2_output (Dense) (None, 1) 65 dense_6[0][0] \n", "==================================================================================================\n", "Total params: 26,114\n", "Trainable params: 26,114\n", "Non-trainable params: 0\n", "__________________________________________________________________________________________________\n" ] } ], "source": [ "model.summary()" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "image/png": "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e3v7+/t1kz0A5APiBgBID40A1P5RbMxm88DAwMjIiIFlaGhooE6aBaAoyrZt24zK0QWVZpbRBQCAElMSnaJMJlORdHEogMrZUygGaG8AAAAAUYgbAAAAQBTiBgAAABCFuAEAAABEIW4AAAAAUZgvEkQ1NzcfOHDA6FIAQA40NTVhvkjIDOIGEBUIBN566y2jS1Emfv3rXz/yyCPPP//8t771rfXr1xtdnKL26quv/uhHP5ozZ86GDRtuuukmo4tTJq644or6+nqjSwElCXEDQEGdPn36xz/+sdvtvuSSSx5++OHbb7/d6BKVgHfeeef73//+z372s4aGhocffviaa64xukQAlQv9GwAKZ3x8/MYbb7z33nvb29tfeeUVBA2CLrnkkj179oyPj0ejUYvFcs8993z44YdGFwqgQiFuACiEd955Z/369cuWLfvCF75w5MiRrq6uT33qU0YXqsTccsstL7744g9/+MPdu3cvXLjw8ccfN7pEAJUIcQNAfp09e7avr++aa64ZGxt75JFHFEX5whe+YHShStWsWbM2bdp09OjRm2++WZZlWZZ/9atfGV0ogMqCuAEgj1544YX6+vrvfe97GzZsOHr0KLpA5sSll166Z8+esbGxN99889prr+3q6vroo4+MLhRApUDcAJAX77///qZNm5YsWXLhhRe+9NJLu3bt+ou/+AujC1VWbr311pdeemnHjh0PPPDAdddd91//9V9GlwigIiBuAMgxVVX37NlzzTXXDA8P/9u//dsvfvGLhQsXGl2o8jR79uxNmza99tpr9fX1jY2NsiyfOHHC6EIBlDnEDQC5dPjw4VtuueWuu+76m7/5G3owIUmS0YUqczU1NXv27BkdHX399ddra2u7uro+/vhjowsFULYQNwDkxu9///uurq6bbrrpww8/DAQCP/nJT0wmk9GFqiANDQ2HDx/evn27x+O5/vrrf/7znxtdIoDyhLgBIAcURbn22mv/5V/+5Yc//OEzzzyzePFio0tUieixxeHDh+fPn3/bbbfJsowZTgFyDnEDQFZef/31xsbGVatWLV269OjRo5s2bZo5c6bRhapoX/ziFxVF8fv9R44cqa2tvf/++8+cOWN0oQDKB+IGgAz98Y9/7Orquv7660+dOvXkk0/u2bPHbDYbXSj4E1mWjxw54nK5urq6vvKVrzz11FNGlwigTCBuAMjEf/7nfy5cuNDj8fzgBz947rnnbr75ZqNLBHoXXnhhV1fXyy+/fNlll91yyy3r16+PRqNGFwqg5CFuAEjP22+/vX79elmWFy5c+Oqrr3Z1dV1wwQVGFwqSuvrqq5944onHHnvs0KFDCxYs2LVr1yeffGJ0oQBKGOIGAFGnT5/etWtXbW1tIBA4ePCgoijz5s0zulAgRJblV199ddOmTT/4wQ9uuummQCBgdIkAShXiBgAhhw4dolSWW7Zsefnll7/5zW8aXSJIz0UXXdTV1XX48OG//Mu/vPnmm9evX//rX//a6EIBlB7EDQDToFSWt956K09l+elPf9roQkGG5s+f/9///d+PPfbYL3/5S3pscfbsWaMLBVBKEDcAJHX27Nk9e/Zcd911SGVZZmRZfu211/75n//5+9///uLFi5999lmjSwRQMhA3AEztxRdfrK+vdzgcd9xxx2uvvYZUlmVmzpw5XV1dzz333IUXXlhfX79+/frf/OY3RhcKoAQgbgDQi8VimzZtWrx48ac//WlKZXnxxRcbXSjIixtuuOHQoUP//u///j//8z8LFizo6+tTVdXoQgEUNcQNAH9GqSwXLFhAqSx/+ctfIpVl2ZMkaf369UePHr3jjjv+8R//cenSpS+//LLRhQIoXogbAP7k2LFj3/jGN+66667bb7/9lVdeQSrLilJVVbVr167nn3/+zJkzX/rSlzZt2vTb3/7W6EIBFCPEDQDsD3/4Q1dX1w033PD+++8HAoE9e/Z87nOfM7pQYIBFixY99dRTP/3pTwcHB6+55po9e/bgsQWADuIGqHSKotTW1u7ateuHP/zhs88+i1SWFY4eWxw7dqy5ufnv/u7vli1bduTIEaMLBVBEEDdA5XrjjTdWrlxJqSyPHTuGVJbAffazn921a9czzzzz4Ycf3njjjZs2bfrggw+MLhRAUUDcAJXoww8/7Orquu66644fP/7zn/8cqSxhSl/+8peffvrp/v7+//iP/6DHFkaXCMB4iBug4oyNjd14440/+tGPfvCDHxw+fHj58uVGlwiK14wZM9avXz8xMdHU1HTXXXctX778tddeM7pQAEZC3AAV5NSpU+vXr1++fPnVV1/92muvIZUlCJo7d+6uXbvGx8ffffddi8WyadOm3/3ud0YXCsAYiBugIpw5c2bXrl3XXHPN008//cQTTyCVJWTga1/72gsvvPCjH/3okUceqa2t3b9/v9ElAjAA4gYof08++eSNN954zz33bNmy5ZVXXmlsbDS6RFCqZs2atWnTpqNHjy5btmzNmjWyLL/55ptGFwqgoBA3QDl77733/uEf/mHp0qVms/mll15CKkvIiUsvvXTPnj2/+MUv3nzzzYULF3Z1dX344YdGFwqgQCTMagJl6ezZsz/72c+2bNnyqU99aseOHchKBflw+vTpH//4x52dnWaz+aGHHkJTFlQCtDdAGXrppZe++tWv/v3f//0dd9xx9OhRBA2QJ7Nnz6bHFl/96ldXrlwpy3IkEjG6UAD5hbgBygqlsrzpppsuuOACpLKEwrjsssv27NkzNjb2xhtvXHvttV1dXR999JHRhQLIFzyngDKhqurAwMD3v//906dP79ixY+PGjchKBQVGjy3cbvell1760EMP3X777UaXCCD30N4ApUFV1RT3cBMTE7fddttdd9112223TUxMtLS0IGiAwqPHFq+99lpdXd03v/lNWZbfeuutZCt//PHHhSwbQK4gboDScN9993V2diYup1SW119//W9+85unn34aqSzBcJdffvmePXv8fv+RI0dqa2u7urqmDBE2bdrU399f+OIBZAnPKaAEKIqyatWqGTNmhMPhhQsXapfffffd8Xi8q6vre9/7HrJSQVH54x//eP/9999///1XXnnlww8/vGLFCv7W888/v3jx4pkzZ46Njd1yyy0GFhIgXWhvgGJ35MiRtWvXSpI0Y8aMlpYWinTfeOONb33rW6tWrfr6179+9OhRpLKEInThhRd2dXW98sorf/VXf3XbbbetX79+cnKSMXb27NmNGzfOnDlTVVWr1fqrX/3K6JICpAHtDVDU3nvvvS996UunTp06ffo0Y0ySpJ/+9KfRaLSrq2vevHn/+q//qr2HAyha2raxCy644J/+6Z+o7p09e/ZVV131/PPPf+YznzG6jABCEDdA8Tpz5sw3vvGNp556ioIGxpgkSRdccMGsWbO6uro2bdo0e/ZsY0sIIO73v/99T0/PAw88MGPGDO38krNmzfrmN7/52GOPzZiBBmAoAfiZQvFqa2t78sknedDAGFNV9ZNPPvnud7/rcrkQNEBpmTNnzo4dO7797W+fOXNGu/zMmTNPPPHE//t//8+oggGkBe0NUKQeeeSRu+66a8q3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\n", "text/plain": [ "" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "plot_model(model, show_shapes=True, show_layer_names=True, to_file='./image/multi_output_model.png')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Configure parameters\n", "\n", "We specify the optimizer as well as the loss and metrics for each output." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "# Specify the optimizer, and compile the model with loss functions for both outputs\n", "optimizer = tf.keras.optimizers.SGD(learning_rate=0.001)\n", "model.compile(optimizer=optimizer,\n", " loss={\n", " 'y1_output':'mse',\n", " 'y2_output':'mse'\n", " },\n", " metrics={\n", " 'y1_output':tf.keras.metrics.RootMeanSquaredError(),\n", " 'y2_output':tf.keras.metrics.RootMeanSquaredError()\n", " })" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Train the Model" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "# train the model for 500 epochs\n", "history = model.fit(norm_train_X, train_Y,\n", " epochs=500, batch_size=10, validation_data=(norm_test_X, test_Y), verbose=0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Evaluate the Model and Plot Metrics" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "5/5 [==============================] - 0s 4ms/step - loss: 0.6642 - y1_output_loss: 0.1839 - y2_output_loss: 0.4802 - y1_output_root_mean_squared_error: 0.4289 - y2_output_root_mean_squared_error: 0.6930\n", "Loss = 0.6641601920127869, Y1_loss = 0.183916375041008, Y1_mse = 0.42885470390319824, Y2_loss = 0.4802437722682953, Y2_mse = 0.6929962038993835\n" ] } ], "source": [ "# Test the model and print loss and mse for both outputs\n", "loss, Y1_loss, Y2_loss, Y1_rmse, Y2_rmse = model.evaluate(x=norm_test_X, y=test_Y)\n", "print(\"Loss = {}, Y1_loss = {}, Y1_mse = {}, Y2_loss = {}, Y2_mse = {}\".format(loss, Y1_loss, Y1_rmse, Y2_loss, Y2_rmse))" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Plot the loss and mse\n", "Y_pred = model.predict(norm_test_X)\n", "plot_diff(test_Y[0], Y_pred[0], title='Y1')" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_diff(test_Y[1], Y_pred[1], title='Y2')" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_metrics(history, metric_name='y1_output_root_mean_squared_error', title='Y1 RMSE', ylim=6)" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_metrics(history, metric_name='y2_output_root_mean_squared_error', title='Y2 RMSE', ylim=7)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Part 3 - Implement a Siamese Network\n", "\n", "In this section, it will go through creating and training a multi-input model. You will build a basic Siamese Network to find the similarity or dissimilarity between items of clothing." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Prepare the Dataset\n", "\n", "First define a few utilities for preparing and visualizing your dataset." ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [], "source": [ "def create_pairs(x, digit_indices):\n", " '''\n", " Positive and negative pair creation.\n", " Alternates between positive and negative pairs.\n", " '''\n", " pairs = []\n", " labels = []\n", " n = min([len(digit_indices[d]) for d in range(10)]) - 1\n", " \n", " for d in range(10):\n", " for i in range(n):\n", " z1, z2 = digit_indices[d][i], digit_indices[d][i + 1]\n", " pairs += [[x[z1], x[z2]]]\n", " inc = random.randrange(1, 10)\n", " dn = (d + inc) % 10\n", " z1, z2 = digit_indices[d][i], digit_indices[dn][i]\n", " pairs += [[x[z1], x[z2]]]\n", " labels += [1, 0]\n", " \n", " return np.array(pairs), np.array(labels)\n", "\n", "def create_pairs_on_set(images, labels):\n", " digit_indices = [np.where(labels == i)[0] for i in range(10)]\n", " pairs, y = create_pairs(images, digit_indices)\n", " y = y.astype('float32')\n", " return pairs, y\n", "\n", "def show_image(image):\n", " plt.figure()\n", " plt.imshow(image)\n", " plt.colorbar()\n", " plt.grid(False)\n", " plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can now download and prepare our train and test sets. You will also create pairs of images that will go into the multi-input model." ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [], "source": [ "# load the dataset\n", "(train_images, train_labels), (test_images, test_labels) = tf.keras.datasets.fashion_mnist.load_data()\n", "\n", "# prepare train and test sets\n", "train_images = train_images.astype('float32')\n", "test_images = test_images.astype('float32')\n", "\n", "# normalize values\n", "train_images = train_images / 255.0\n", "test_images = test_images / 255.0\n", "\n", "# create pairs on train and test sets\n", "train_pairs, train_y = create_pairs_on_set(train_images, train_labels)\n", "test_pairs, test_y = create_pairs_on_set(test_images, test_labels)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can see a sample pair of images below." ] }, { "cell_type": "code", "execution_count": 25, "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" }, { "name": "stdout", "output_type": "stream", "text": [ "1.0\n" ] } ], "source": [ "# array index\n", "this_pair = 8\n", "\n", "# show images at this index\n", "show_image(test_pairs[this_pair][0])\n", "show_image(test_pairs[this_pair][1])\n", "\n", "# print the label for this pair\n", "print(test_y[this_pair])" ] }, { "cell_type": "code", "execution_count": 26, "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" }, { "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": [ "# print other pairs\n", "\n", "show_image(train_pairs[:,0][0])\n", "show_image(train_pairs[:,0][1])\n", "\n", "show_image(train_pairs[:,1][0])\n", "show_image(train_pairs[:,1][1])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Build the Model\n", "\n", "Next, you'll define some utilities for building our model." ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [], "source": [ "def initialize_base_network():\n", " input = Input(shape=(28,28,), name=\"base_input\")\n", " x = Flatten(name=\"flatten_input\")(input)\n", " x = Dense(128, activation='relu', name=\"first_base_dense\")(x)\n", " x = Dropout(0.1, name=\"first_dropout\")(x)\n", " x = Dense(128, activation='relu', name=\"second_base_dense\")(x)\n", " x = Dropout(0.1, name=\"second_dropout\")(x)\n", " x = Dense(128, activation='relu', name=\"third_base_dense\")(x)\n", "\n", " return Model(inputs=input, outputs=x)\n", "\n", "\n", "def euclidean_distance(vects):\n", " x, y = vects\n", " sum_square = K.sum(K.square(x - y), axis=1, keepdims=True)\n", " return K.sqrt(K.maximum(sum_square, K.epsilon()))\n", "\n", "\n", "def eucl_dist_output_shape(shapes):\n", " shape1, shape2 = shapes\n", " return (shape1[0], 1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's see how our base network looks. This is where the two inputs will pass through to generate an output vector." ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "base_network = initialize_base_network()\n", "plot_model(base_network, show_shapes=True, show_layer_names=True, to_file='./image/base-siamese-model.png')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's now build the Siamese network. The plot will show two inputs going to the base network." ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "image/png": "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NBHZxDh6TrY5HWqBnL/i6NGjiEajdodjydTUFFavXo22traaO97s7CyGhoYwMjJiOjcGEZFVLMcqF8ux4mPSRGQTOYRm5v+rmXGCPaOGhgYEAgFMTEzYEFX+tmzZgqamppo8nqZpOHLkSNrkilK2+0dEZIblWOViOVZ8K0uyVyJaVKW1/14KK+dSV1dXle3Ba02ue1BL70kiKr1a+sxgOVY97CrHWNNERERERESUA5MmIiIiIiKiHJg0ERERERER5cCkiYiIiIiIKIesA0GEw+FyxkFUclevXgXA97ZV09PTEEJwNDWybHp6uizHuXr1Kv+OaUmq9bON5Vh+yvWZRLUj13tGERnDTMiZcImIiApRytGL2tvbcfbs2ZLtn4iIyKQcG1uQNBERAcDrr78On8+HZ599Fu9617vQ09ODxx9/HO9973vtDo2IKC+/+93v8Pzzz2NwcBBvvfUWvvWtb8Hj8eD973+/3aERUXVg0kREub3++us4deoUjh8/jhUrVuDxxx/HU089xS8bRFTx/vd//xcjIyM4fvw4fve73+Gxxx7DX//1X2P16tV2h0ZE1YVJExFZ8z//8z947rnncOLECdx666147LHHmDwRUUX6/e9/D7/fj7/927/F66+/jkcffRS9vb1obGy0OzQiqk5MmogoP7/97W9x8uRJPXnyeDz4y7/8S7znPe+xOzQiWub+8Ic/4MUXX8R3vvMdJktEVExMmoioMDJ5euaZZ/Dud78bPT09TJ6IyBYyWTpy5AhSqRQeffRRHDp0CB/84AftDo2IagOTJiJammvXruH5559PS56eeOIJ/Mmf/IndoRFRjXvrrbfwD//wDzhy5AiSySScTieTJSIqBSZNRFQcMnl6+umncdtttzF5IqKSkcnSd7/7Xbz22mtwOp04ePAgPvShD9kdGhHVJiZNRFRc//3f/43BwUGcPHkS733ve/HUU08xeSKiojAmS9euXcPevXtx+PBh3HnnnXaHRkS1jUkTEZWGTJ6ee+45vO9978NTTz2Fb33rW7jtttvsDo2IqoxMlvr7+5FIJPCNb3yDyRIRlROTJiIqLWPydMcdd8Dj8eAv/uIvmDwR0aLeeusthEIhHDlyBFevXsU3vvENfPvb38aaNWvsDo2IlpexW+yOgIhq2wc+8AEcP34cv/rVr/DVr34Vhw4dQlNTE5599lm8+eabdodHRBXo7bffxunTp9HS0oJ9+/Zh27ZtuHLlCl544QUmTERkCyZNRFQWDQ0NevK0Z88eJk9EtIBZsvRf//VfTJaIyHZMmoiorGTyNDs7i6985Ss4ePAgmpub8eyzz+IPf/iD3eERkQ1ksvTJT34S+/btwwMPPICf/exneOGFF3DXXXfZHR4REZMmIrLHXXfdhWeffRazs7P48pe/jIMHD+o1T0yeiJYHY7LkdDqxYcMG/OxnP8Pp06fxsY99zO7wiIh0TJqIyFYf/vCHFyRPzc3NGB4exjvvvGN3eERUAjdu3MDY2Bg+9alPMVkioqrApImIKoJMni5fvoydO3fiiSeewMc//nEmT0Q1RCZLLS0t+OpXv4q2tjb89Kc/xenTp/Gnf/qndodHRJQVkyYiqihr167Va54cDgeTJ6IakJksrV+/Xk+W7rnnHrvDIyJaFJMmIqpIMnm6fPkyvvjFL+Kxxx5DU1MTkyeiKiKTpU9+8pPo7OxEa2srLl26xGSJiKoOkyYiqmh33303XnjhBfziF7/AI488wuSJqApkJkuf+cxn8J//+Z8Ih8P4+Mc/bnd4RER5Y9JERFVBJk8///nP9eRJDhhx/fp1u8MjIqQP8CCTpZ/97GdMloio6jFpIqKq8pGPfAQvvPACZmdnsW3bNjz22GO49957cfr0aSZPRDa5ceMGNE3D5z73OXR2duLee+/FT3/6U4TDYTQ1NdkdHhHRkjFpIqKq9NGPflRPnjZu3IhHH32UyRNRmQkhoGka7rvvPnz5y19GU1OTniw1NzfbHR4RUdEwaSKiqiaTp8uXL2Pjxo345je/ic985jNMnohKKDNZ+vjHP45Lly4xWSKimsWkiYhqwsc+9jG88MIL+MlPfoL77rsP3/zmN9Ha2srkiaiIZLL0+c9/Hl/+8pexZs0a/PjHP0Y4HMYnPvEJu8MjIioZJk1EVFNaWlpw+vRp/OQnP8HnPve5tOTpxo0bdodHVJUyk6U777wTP/rRj6BpGlpbW+0Oj4io5Jg0EVFNksnTf/zHf6QlT2NjYxBC2B0eUdWYmJjAF77wBezcuRN33nkn/u3f/g2apmHdunV2h0ZEVDZMmoiopn3yk5/E6dOnEY1G8dnPfhZdXV1MnogskMnSF7/4RXzoQx/Sk6XPfvazdodGRFR2TJqIaFn41Kc+pSdP69atQ2dnJ5MnIhMTExO4//778cUvfhEf/OAH9WTpc5/7nN2hERHZhkkTES0rxuTpE5/4BDo6OrBu3TomT7TsyWTpkUceQV1dHf71X/+VyRIR0R8xaSKiZenTn/40wuEwotEompub0dHRgc9+9rNMnmjZmZiYwPr169OSpZdeegn33Xef3aEREVUMJk1EtKzde++9evLU1NTE5ImWjYmJCbS1teGRRx7B+9//fvzwhz/ESy+9hM9//vN2h0ZEVHGYNBER4WbyNDMzoydPDzzwADRNszs0oqK6ePEi/uzP/gyPPPII3ve+9+nJ0he+8AW7QyMiqlhMmoiIDD7zmc/oydOHP/xh7Ny5Exs2bGDyRFXv4sWL2Lx5MzZu3Ihbb70Vr7zyCpMlIiKLmDQREZmQydO///u/68kTa56oGl28eBFbtmzBxo0bsXLlSkQiEbz00ku4//777Q6NiKhqMGkiIsqhtbUV4XAYL7/8Mu644w44HA48+OCDTJ6o4l28eBFbt27Fxo0b8dZbb+H73/8+XnrpJaxfv97u0IiIqg6TJiIiC9ra2qBpGqanp7F69Wo4HA489NBDTJ6o4ly8eBHbtm3Dxo0b8Yc//AHf+973cPHiRWzatMnu0IiIqhaTJiKiPMjk6eWXX8btt9+uJ0+Tk5N2h0bL3A9+8AM88sgj2LhxI958801MTU3pgz4QEdHSMGkiIiqAHBziBz/4AW6//XZs27YNDz30EKampiy9/uTJk3jnnXdKHCVVq3feeQcnT560tO3LL78MVVXx0EMP4f/+7/8wOTmpD/pARETFwaSJiGgJ5OAQFy9exO23346tW7cumjxFIhE88cQT6O7uxvXr18sYLVWD69evo7u7G0888QQikUjW7WSy9OCDD+K1117DxMSEPugDEREVF5MmIqIikINDXLx4EbfddpuePH3ve99bsG1fXx9WrFiBsbExPProo7hx44YNEVMlunHjBpxOJ8bGxrBixQp4vd4F20xPT5smS1u3brUhYiKi5YFJExFRET344IOYmJjAv/zLv+C2227Dli1b8NBDD+H73/8+gPkvvBMTE7h+/TquX7+OQCAAp9MJIYS9gZPthBB4/PHHcfr0af39IZvaAfM1lKqq4oEHHsBrr72G8fFxJktERGWiCJbUREQlMzk5ie985zu4ePEi/vzP/xzXrl1DNBrF22+/rW9zyy23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2L17t92hAID+ZbrSirlwOIyOjo6SxSVrwnp6ekqy/1JyOBxpw5jbra+vD/X19SW7lvy8J6oaY6xpIiIiqiFOpxPnz59Pa2ZYDSKRCHp7e+0OQxeNRhGNRuF0Ou0OhYgqAJMmIiKqOca+NtnmIapVslnd0aNHLfURqgRTU1NYvXq16fDgdpidncXQ0BBGRkZM53giouWHSRMREdUcY18b4/+Xi4aGBgQCAUxMTNgdiiVbtmzRB7GoBJqm4ciRI2kT+xLR8rbS7gCIiIiKrdL6Mdmhrq6uKvs1VQJeNyLKxJomIiIiIiKiHJg0ERERERER5cCkiYiIiIiIKAcmTURERERERDlwIAiiChSJRPRJD4mqyTPPPMOJOhdx9epVAODfOCESiVTMMOtElBuTJqIKs2HDBrtDICrIrl27Cn7tT37yEwDAvffeW6xwKtZdd921pGtFtaOtrY2f+URVQhEcl5WIiGy2e/duAEA4HLY5EiIiogXG2KeJiIiIiIgoByZNREREREREOTBpIiIiIiIiyoFJExERERERUQ5MmoiIiIiIiHJg0kRERERERJQDkyYiIiIiIqIcmDQRERERERHlwKSJiIiIiIgoByZNREREREREOTBpIiIiIiIiyoFJExERERERUQ5MmoiIiIiIiHJg0kRERERERJQDkyYiIiIiIqIcmDQRERERERHlwKSJiIiIiIgoByZNREREREREOTBpIiIiIiIiyoFJExERERERUQ5MmoiIiIiIiHJg0kRERERERJQDkyYiIiIiIqIcmDQRERERERHlwKSJiIiIiIgoByZNREREREREOTBpIiIiIiIiyoFJExERERERUQ5MmoiIiIiIiHJg0kRERERERJQDkyYiIiIiIqIcmDQRERERERHlwKSJiIiIiIgoh5V2B0BERMvL6dOn8fTTT+P69ev6smvXrgEA7r33Xn3ZihUr8NRTT+HrX/962WMkIiIyYtJERERl1dbWhmg0arruN7/5zYJtiYiI7MbmeUREVFZNTU1obW2FoihZt1EUBa2trWhqaipjZEREROaYNBERUdl9/etfx4oVK7KuX7lyJfbu3VvGiIiIiLJThBDC7iCIiGh5efXVV/HhD38YN27cMF2vKAp+/etfY82aNWWOjIiIaIEx1jQREVHZ3XnnnXjggQdwyy0Li6FbbrkFDz74IBMmIiKqGEya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\n", "text/plain": [ "" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# create the left input and point to the base network\n", "input_a = Input(shape=(28,28,), name=\"left_input\")\n", "vect_output_a = base_network(input_a)\n", "\n", "# create the right input and point to the base network\n", "input_b = Input(shape=(28,28,), name=\"right_input\")\n", "vect_output_b = base_network(input_b)\n", "\n", "# measure the similarity of the two vector outputs\n", "output = Lambda(euclidean_distance, name=\"output_layer\", output_shape=eucl_dist_output_shape)([vect_output_a, vect_output_b])\n", "\n", "# specify the inputs and output of the model\n", "model = Model([input_a, input_b], output)\n", "\n", "# plot model graph\n", "plot_model(model, show_shapes=True, show_layer_names=True, to_file='./image/outer-siamese-model.png')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Train the Model\n", "\n", "You can now define the custom loss for our network and start training." ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [], "source": [ "def contrastive_loss_with_margin(margin):\n", " def contrastive_loss(y_true, y_pred):\n", " '''\n", " Contrastive loss from Hadsell-et-al.'06\n", " http://yann.lecun.com/exdb/publis/pdf/hadsell-chopra-lecun-06.pdf\n", " '''\n", " square_pred = K.square(y_pred)\n", " margin_square = K.square(K.maximum(margin - y_pred, 0))\n", " return (y_true * square_pred + (1 - y_true) * margin_square)\n", " return contrastive_loss" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/20\n", "938/938 [==============================] - 8s 8ms/step - loss: 0.1115 - val_loss: 0.0827\n", "Epoch 2/20\n", "938/938 [==============================] - 8s 8ms/step - loss: 0.0791 - val_loss: 0.0760\n", "Epoch 3/20\n", "938/938 [==============================] - 7s 8ms/step - loss: 0.0703 - val_loss: 0.0707\n", "Epoch 4/20\n", "938/938 [==============================] - 7s 8ms/step - loss: 0.0658 - val_loss: 0.0664\n", "Epoch 5/20\n", "938/938 [==============================] - 7s 8ms/step - loss: 0.0628 - val_loss: 0.0651\n", "Epoch 6/20\n", "938/938 [==============================] - 7s 8ms/step - loss: 0.0606 - val_loss: 0.0653\n", "Epoch 7/20\n", "938/938 [==============================] - 8s 8ms/step - loss: 0.0590 - val_loss: 0.0654\n", "Epoch 8/20\n", "938/938 [==============================] - 7s 8ms/step - loss: 0.0579 - val_loss: 0.0678\n", "Epoch 9/20\n", "938/938 [==============================] - 7s 8ms/step - loss: 0.0565 - val_loss: 0.0632\n", "Epoch 10/20\n", "938/938 [==============================] - 7s 8ms/step - loss: 0.0559 - val_loss: 0.0636\n", "Epoch 11/20\n", "938/938 [==============================] - 7s 8ms/step - loss: 0.0552 - val_loss: 0.0647\n", "Epoch 12/20\n", "938/938 [==============================] - 7s 8ms/step - loss: 0.0539 - val_loss: 0.0627\n", "Epoch 13/20\n", "938/938 [==============================] - 7s 8ms/step - loss: 0.0536 - val_loss: 0.0643\n", "Epoch 14/20\n", "938/938 [==============================] - 7s 8ms/step - loss: 0.0525 - val_loss: 0.0654\n", "Epoch 15/20\n", "938/938 [==============================] - 7s 8ms/step - loss: 0.0526 - val_loss: 0.0638\n", "Epoch 16/20\n", "938/938 [==============================] - 7s 8ms/step - loss: 0.0521 - val_loss: 0.0634\n", "Epoch 17/20\n", "938/938 [==============================] - 7s 8ms/step - loss: 0.0514 - val_loss: 0.0641\n", "Epoch 18/20\n", "938/938 [==============================] - 7s 8ms/step - loss: 0.0508 - val_loss: 0.0639\n", "Epoch 19/20\n", "938/938 [==============================] - 7s 8ms/step - loss: 0.0506 - val_loss: 0.0632\n", "Epoch 20/20\n", "938/938 [==============================] - 7s 8ms/step - loss: 0.0497 - val_loss: 0.0639\n" ] } ], "source": [ "model.compile(loss=contrastive_loss_with_margin(margin=1), optimizer=RMSprop())\n", "history = model.fit([train_pairs[:,0], train_pairs[:,1]], train_y, epochs=20, batch_size=128, validation_data=([test_pairs[:,0], test_pairs[:,1]], test_y))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Model Evaluation\n", "\n", "As usual, you can evaluate our model by computing the accuracy and observing the metrics during training." ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [], "source": [ "def compute_accuracy(y_true, y_pred):\n", " '''\n", " Compute classification accuracy with a fixed threshold on distances.\n", " '''\n", " pred = y_pred.ravel() < 0.5\n", " return np.mean(pred == y_true)" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "625/625 [==============================] - 1s 2ms/step - loss: 0.0639\n" ] } ], "source": [ "loss = model.evaluate(x=[test_pairs[:,0],test_pairs[:,1]], y=test_y)\n", "\n", "y_pred_train = model.predict([train_pairs[:,0], train_pairs[:,1]])\n", "train_accuracy = compute_accuracy(train_y, y_pred_train)\n", "\n", "y_pred_test = model.predict([test_pairs[:,0], test_pairs[:,1]])\n", "test_accuracy = compute_accuracy(test_y, y_pred_test)" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Loss = 0.06388980895280838, Train Accuracy = 0.9388898149691616 Test Accuracy = 0.9131631631631631\n" ] } ], "source": [ "print(\"Loss = {}, Train Accuracy = {} Test Accuracy = {}\".format(loss, train_accuracy, test_accuracy))" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "def plot_metrics(history, metric_name, title, ylim=5):\n", " plt.title(title)\n", " plt.ylim(0,ylim)\n", " plt.plot(history.history[metric_name],color='blue',label=metric_name)\n", " plt.plot(history.history['val_' + metric_name],color='green',label='val_' + metric_name)\n", " plt.legend()\n", "\n", "plot_metrics(history, metric_name='loss', title=\"Loss\", ylim=0.2)" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [], "source": [ "# Matplotlib config\n", "def visualize_images():\n", " plt.rc('image', cmap='gray_r')\n", " plt.rc('grid', linewidth=0)\n", " plt.rc('xtick', top=False, bottom=False, labelsize='large')\n", " plt.rc('ytick', left=False, right=False, labelsize='large')\n", " plt.rc('axes', facecolor='F8F8F8', titlesize=\"large\", edgecolor='white')\n", " plt.rc('text', color='a8151a')\n", " plt.rc('figure', facecolor='F0F0F0')# Matplotlib fonts\n", "\n", "\n", "# utility to display a row of digits with their predictions\n", "def display_images(left, right, predictions, labels, title, n):\n", " plt.figure(figsize=(17,3))\n", " plt.title(title)\n", " plt.yticks([])\n", " plt.xticks([])\n", " plt.grid(None)\n", " left = np.reshape(left, [n, 28, 28])\n", " left = np.swapaxes(left, 0, 1)\n", " left = np.reshape(left, [28, 28*n])\n", " plt.imshow(left)\n", " plt.figure(figsize=(17,3))\n", " plt.yticks([])\n", " plt.xticks([28*x+14 for x in range(n)], predictions)\n", " for i,t in enumerate(plt.gca().xaxis.get_ticklabels()):\n", " if predictions[i] > 0.5: t.set_color('red') # bad predictions in red\n", " plt.grid(None)\n", " right = np.reshape(right, [n, 28, 28])\n", " right = np.swapaxes(right, 0, 1)\n", " right = np.reshape(right, [28, 28*n])\n", " plt.imshow(right)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can see sample results for 10 pairs of items below." ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "y_pred_train = np.squeeze(y_pred_train)\n", "indexes = np.random.choice(len(y_pred_train), size=10)\n", "display_images(train_pairs[:, 0][indexes], train_pairs[:, 1][indexes], y_pred_train[indexes], train_y[indexes], \"clothes and their dissimilarity\", 10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Application - Multiple Output Models using the Keras Functional API\n", "\n", "In this section, we will use the Keras Functional API to train a model to predict two outputs, and it will use the **[Wine Quality Dataset](https://archive.ics.uci.edu/ml/datasets/Wine+Quality)** from the **UCI machine learning repository**. It has separate datasets for red wine and white wine.\n", "\n", "Normally, the wines are classified into one of the quality ratings specified in the attributes. In this exercise, you will combine the two datasets to predict the wine quality and whether the wine is red or white solely from the attributes. \n", "\n", "You will model wine quality estimations as a regression problem and wine type detection as a binary classification problem." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Load Dataset\n", "\n", "You will now load the dataset from the [UCI Machine Learning Repository](https://archive.ics.uci.edu/ml/index.php)." ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [], "source": [ "# URL of the white wine dataset\n", "URI = './dataset/winequality-white.csv'\n", "\n", "# load the dataset from the URL\n", "white_df = pd.read_csv(URI, sep=\";\")\n", "\n", "# fill the `is_red` column with zeros.\n", "white_df[\"is_red\"] = 0\n", "\n", "# keep only the first of duplicate items\n", "white_df = white_df.drop_duplicates(keep='first')" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "8.8\n", "9.1\n" ] } ], "source": [ "print(white_df.alcohol[0])\n", "print(white_df.alcohol[100])" ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [], "source": [ "# URL of the red wine dataset\n", "URI = './dataset/winequality-red.csv'\n", "\n", "# load the dataset from the URL\n", "red_df = pd.read_csv(URI, sep=\";\")\n", "\n", "# fill the `is_red` column with ones.\n", "red_df[\"is_red\"] = 1\n", "\n", "# keep only the first of duplicate items\n", "red_df = red_df.drop_duplicates(keep='first')" ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "9.4\n", "10.2\n" ] } ], "source": [ "print(red_df.alcohol[0])\n", "print(red_df.alcohol[100])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Concatenate the datasets\n", "\n", "Next, concatenate the red and white wine dataframes." ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [], "source": [ "df = pd.concat([red_df, white_df], ignore_index=True)" ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "9.4" ] }, "execution_count": 45, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.alcohol[0]" ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "9.5" ] }, "execution_count": 46, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.alcohol[100]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In a real-world scenario, you should shuffle the data." ] }, { "cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [], "source": [ "df = df.iloc[np.random.permutation(len(df))]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This will chart the quality of the wines." ] }, { "cell_type": "code", "execution_count": 48, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "df['quality'].hist(bins=20);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Imbalanced data\n", "You can see from the plot above that the wine quality dataset is imbalanced. \n", "\n", "- Since there are very few observations with quality equal to 3, 4, 8 and 9, you can drop these observations from your dataset. \n", "- You can do this by removing data belonging to all classes except those > 4 and < 8." ] }, { "cell_type": "code", "execution_count": 49, "metadata": {}, "outputs": [], "source": [ "# get data with wine quality greater than 4 and less than 8\n", "df = df[(df['quality'] > 4) & (df['quality'] < 8 )]\n", "\n", "# reset index and drop the old one\n", "df = df.reset_index(drop=True)" ] }, { "cell_type": "code", "execution_count": 50, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "10.8\n", "11.2\n" ] } ], "source": [ "print(df.alcohol[0])\n", "print(df.alcohol[100])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can plot again to see the new range of data and quality" ] }, { "cell_type": "code", "execution_count": 51, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "df['quality'].hist(bins=20);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Train Test Split\n", "\n", "Next, you can split the datasets into training, test and validation datasets.\n", "- The data frame should be split 80:20 into `train` and `test` sets.\n", "- The resulting `train` should then be split 80:20 into `train` and `val` sets.\n", "- The `train_test_split` parameter `test_size` takes a float value that ranges between 0. and 1, and represents the proportion of the dataset that is allocated to the test set. The rest of the data is allocated to the training set." ] }, { "cell_type": "code", "execution_count": 52, "metadata": {}, "outputs": [], "source": [ "# split df into 80:20 train and test sets\n", "train, test = train_test_split(df, test_size=0.2, random_state=1)\n", " \n", "# split train into 80:20 train and val sets\n", "train, val = train_test_split(train, test_size=0.2, random_state=1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here's where you can explore the training stats. You can pop the labels 'is_red' and 'quality' from the data as these will be used as the labels\n" ] }, { "cell_type": "code", "execution_count": 53, "metadata": {}, "outputs": [], "source": [ "train_stats = train.describe()\n", "train_stats.pop('is_red')\n", "train_stats.pop('quality')\n", "train_stats = train_stats.transpose()" ] }, { "cell_type": "code", "execution_count": 54, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
countmeanstdmin25%50%75%max
fixed acidity3155.07.2180511.3144343.800006.400007.00007.70000015.90000
volatile acidity3155.00.3431240.1673680.085000.230000.29000.4100001.33000
citric acid3155.00.3186590.1468920.000000.250000.31000.3900001.66000
residual sugar3155.05.0971954.6031850.700001.800002.70007.60000065.80000
chlorides3155.00.0575910.0373490.009000.038000.04700.0680000.61100
free sulfur dioxide3155.030.19841517.1073982.0000017.0000028.000041.000000128.00000
total sulfur dioxide3155.0114.67052356.8579066.0000075.00000116.0000155.000000303.00000
density3155.00.9946180.0030550.987110.992220.99480.9968451.03898
pH3155.03.2246850.1607492.740003.110003.22003.3300004.01000
sulphates3155.00.5360760.1470630.220000.440000.51000.6000001.62000
alcohol3155.010.5205021.1787848.000009.5000010.300011.30000014.90000
\n", "
" ], "text/plain": [ " count mean std min 25% \\\n", "fixed acidity 3155.0 7.218051 1.314434 3.80000 6.40000 \n", "volatile acidity 3155.0 0.343124 0.167368 0.08500 0.23000 \n", "citric acid 3155.0 0.318659 0.146892 0.00000 0.25000 \n", "residual sugar 3155.0 5.097195 4.603185 0.70000 1.80000 \n", "chlorides 3155.0 0.057591 0.037349 0.00900 0.03800 \n", "free sulfur dioxide 3155.0 30.198415 17.107398 2.00000 17.00000 \n", "total sulfur dioxide 3155.0 114.670523 56.857906 6.00000 75.00000 \n", "density 3155.0 0.994618 0.003055 0.98711 0.99222 \n", "pH 3155.0 3.224685 0.160749 2.74000 3.11000 \n", "sulphates 3155.0 0.536076 0.147063 0.22000 0.44000 \n", "alcohol 3155.0 10.520502 1.178784 8.00000 9.50000 \n", "\n", " 50% 75% max \n", "fixed acidity 7.0000 7.700000 15.90000 \n", "volatile acidity 0.2900 0.410000 1.33000 \n", "citric acid 0.3100 0.390000 1.66000 \n", "residual sugar 2.7000 7.600000 65.80000 \n", "chlorides 0.0470 0.068000 0.61100 \n", "free sulfur dioxide 28.0000 41.000000 128.00000 \n", "total sulfur dioxide 116.0000 155.000000 303.00000 \n", "density 0.9948 0.996845 1.03898 \n", "pH 3.2200 3.330000 4.01000 \n", "sulphates 0.5100 0.600000 1.62000 \n", "alcohol 10.3000 11.300000 14.90000 " ] }, "execution_count": 54, "metadata": {}, "output_type": "execute_result" } ], "source": [ "train_stats" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Get the labels\n", "\n", "The features and labels are currently in the same dataframe.\n", "- You will want to store the label columns `is_red` and `quality` separately from the feature columns. \n", "- The following function, `format_output`, gets these two columns from the dataframe (it's given to you).\n", "- `format_output` also formats the data into numpy arrays. \n", "- Please use the `format_output` and apply it to the `train`, `val` and `test` sets to get dataframes for the labels." ] }, { "cell_type": "code", "execution_count": 55, "metadata": {}, "outputs": [], "source": [ "def format_output(data):\n", " is_red = data.pop('is_red')\n", " is_red = np.array(is_red)\n", " quality = data.pop('quality')\n", " quality = np.array(quality)\n", " return (quality, is_red)" ] }, { "cell_type": "code", "execution_count": 56, "metadata": {}, "outputs": [], "source": [ "# format the output of the train set\n", "train_Y = format_output(train)\n", "\n", "# format the output of the val set\n", "val_Y = format_output(val)\n", " \n", "# format the output of the test set\n", "test_Y = format_output(test)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Notice that after you get the labels, the `train`, `val` and `test` dataframes no longer contain the label columns, and contain just the feature columns.\n", "- This is because you used `.pop` in the `format_output` function." ] }, { "cell_type": "code", "execution_count": 57, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
fixed acidityvolatile aciditycitric acidresidual sugarchloridesfree sulfur dioxidetotal sulfur dioxidedensitypHsulphatesalcohol
2256.40.260.2510.700.04666.0179.00.996063.170.559.9
35577.30.220.4014.750.04244.5129.50.999803.360.419.1
38256.80.160.2910.400.04659.0143.00.995183.200.4010.8
17406.60.160.571.100.13058.0140.00.992703.120.399.3
12216.90.280.411.400.0166.055.00.988763.160.4013.4
\n", "
" ], "text/plain": [ " fixed acidity volatile acidity citric acid residual sugar chlorides \\\n", "225 6.4 0.26 0.25 10.70 0.046 \n", "3557 7.3 0.22 0.40 14.75 0.042 \n", "3825 6.8 0.16 0.29 10.40 0.046 \n", "1740 6.6 0.16 0.57 1.10 0.130 \n", "1221 6.9 0.28 0.41 1.40 0.016 \n", "\n", " free sulfur dioxide total sulfur dioxide density pH sulphates \\\n", "225 66.0 179.0 0.99606 3.17 0.55 \n", "3557 44.5 129.5 0.99980 3.36 0.41 \n", "3825 59.0 143.0 0.99518 3.20 0.40 \n", "1740 58.0 140.0 0.99270 3.12 0.39 \n", "1221 6.0 55.0 0.98876 3.16 0.40 \n", "\n", " alcohol \n", "225 9.9 \n", "3557 9.1 \n", "3825 10.8 \n", "1740 9.3 \n", "1221 13.4 " ] }, "execution_count": 57, "metadata": {}, "output_type": "execute_result" } ], "source": [ "train.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Normalize the data \n", "\n", "Next, you can normalize the data, x, using the formula:\n", "\n", "$$x_{norm} = \\frac{x - \\mu}{\\sigma}$$\n", "\n", "- The `norm` function is defined for you.\n", "- Please apply the `norm` function to normalize the dataframes that contains the feature columns of `train`, `val` and `test` sets." ] }, { "cell_type": "code", "execution_count": 58, "metadata": {}, "outputs": [], "source": [ "def norm(x):\n", " return (x - train_stats['mean']) / train_stats['std']" ] }, { "cell_type": "code", "execution_count": 59, "metadata": {}, "outputs": [], "source": [ "# normalize the train set\n", "norm_train_X = norm(train)\n", " \n", "# normalize the val set\n", "norm_val_X = norm(val)\n", " \n", "# normalize the test set\n", "norm_test_X = norm(test)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Define the Model\n", "\n", "Define the model using the functional API. The base model will be 2 `Dense` layers of 128 neurons each, and have the `'relu'` activation.\n", "- Check out the documentation for [tf.keras.layers.Dense](https://www.tensorflow.org/api_docs/python/tf/keras/layers/Dense)" ] }, { "cell_type": "code", "execution_count": 60, "metadata": {}, "outputs": [], "source": [ "def base_model(inputs):\n", " \n", " # connect a Dense layer with 128 neurons and a relu activation\n", " x = Dense(units=128, activation='relu')(inputs)\n", " \n", " # connect another Dense layer with 128 neurons and a relu activation\n", " x = Dense(units=128, activation='relu')(x)\n", " return x" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Define output layers of the model\n", "\n", "You will add output layers to the base model. \n", "- The model will need two outputs.\n", "\n", "One output layer will predict wine quality, which is a numeric value.\n", "- Define a `Dense` layer with 1 neuron.\n", "- Since this is a regression output, the activation can be left as its default value `None`.\n", "\n", "The other output layer will predict the wine type, which is either red `1` or not red `0` (white).\n", "- Define a `Dense` layer with 1 neuron.\n", "- Since there are two possible categories, you can use a sigmoid activation for binary classification.\n", "\n", "Define the `Model`\n", "- Define the `Model` object, and set the following parameters:\n", " - `inputs`: pass in the inputs to the model as a list.\n", " - `outputs`: pass in a list of the outputs that you just defined: wine quality, then wine type.\n", " - **Note**: please list the wine quality before wine type in the outputs, as this will affect the calculated loss if you choose the other order." ] }, { "cell_type": "code", "execution_count": 61, "metadata": {}, "outputs": [], "source": [ "def final_model(inputs):\n", " \n", " # get the base model\n", " x = base_model(inputs)\n", "\n", " # connect the output Dense layer for regression\n", " wine_quality = Dense(units='1', name='wine_quality')(x)\n", "\n", " # connect the output Dense layer for classification. this will use a sigmoid activation.\n", " wine_type = Dense(units='1', activation='sigmoid', name='wine_type')(x)\n", "\n", " # define the model using the input and output layers\n", " model = Model(inputs=inputs, outputs=[wine_quality, wine_type])\n", "\n", " return model" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Compiling the Model\n", "\n", "Next, compile the model. When setting the loss parameter of `model.compile`, you're setting the loss for each of the two outputs (wine quality and wine type).\n", "\n", "To set more than one loss, use a dictionary of key-value pairs.\n", "- You can look at the docs for the losses [here](https://www.tensorflow.org/api_docs/python/tf/keras/losses#functions).\n", " - **Note**: For the desired spelling, please look at the \"Functions\" section of the documentation and not the \"classes\" section on that same page.\n", "- wine_type: Since you will be performing binary classification on wine type, you should use the binary crossentropy loss function for it. Please pass this in as a string. \n", " - **Hint**, this should be all lowercase. In the documentation, you'll see this under the \"Functions\" section, not the \"Classes\" section.\n", "- wine_quality: since this is a regression output, use the mean squared error. Please pass it in as a string, all lowercase.\n", " - **Hint**: You may notice that there are two aliases for mean squared error. Please use the shorter name.\n", "\n", "\n", "You will also set the metric for each of the two outputs. Again, to set metrics for two or more outputs, use a dictionary with key value pairs.\n", "- The metrics documentation is linked [here](https://www.tensorflow.org/api_docs/python/tf/keras/metrics).\n", "- For the wine type, please set it to accuracy as a string, all lowercase.\n", "- For wine quality, please use the root mean squared error. Instead of a string, you'll set it to an instance of the class [RootMeanSquaredError](https://www.tensorflow.org/api_docs/python/tf/keras/metrics/RootMeanSquaredError), which belongs to the tf.keras.metrics module." ] }, { "cell_type": "code", "execution_count": 62, "metadata": {}, "outputs": [], "source": [ "inputs = tf.keras.layers.Input(shape=(11,))\n", "rms = tf.keras.optimizers.RMSprop(learning_rate=0.0001)\n", "model = final_model(inputs)\n", "\n", "model.compile(optimizer=rms, \n", " loss = {'wine_type' : 'binary_crossentropy',\n", " 'wine_quality' : 'mean_squared_error'\n", " },\n", " metrics = {'wine_type' : 'accuracy',\n", " 'wine_quality': tf.keras.metrics.RootMeanSquaredError()\n", " }\n", " )" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Training the Model\n", "\n", "Fit the model to the training inputs and outputs. \n", "- Check the documentation for [model.fit](https://www.tensorflow.org/api_docs/python/tf/keras/Model#fit).\n", "- Remember to use the normalized training set as inputs. \n", "- For the validation data, please use the normalized validation set." ] }, { "cell_type": "code", "execution_count": 63, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/40\n", "99/99 [==============================] - 2s 12ms/step - loss: 23.0054 - wine_quality_loss: 22.3884 - wine_type_loss: 0.6170 - wine_quality_root_mean_squared_error: 4.7316 - wine_type_accuracy: 0.7423 - val_loss: 15.7310 - val_wine_quality_loss: 15.1511 - val_wine_type_loss: 0.5800 - val_wine_quality_root_mean_squared_error: 3.8924 - val_wine_type_accuracy: 0.7465\n", "Epoch 2/40\n", "99/99 [==============================] - 1s 11ms/step - loss: 9.8386 - wine_quality_loss: 9.2897 - wine_type_loss: 0.5490 - wine_quality_root_mean_squared_error: 3.0479 - wine_type_accuracy: 0.7385 - val_loss: 5.6479 - val_wine_quality_loss: 5.1287 - val_wine_type_loss: 0.5191 - val_wine_quality_root_mean_squared_error: 2.2647 - val_wine_type_accuracy: 0.7452\n", "Epoch 3/40\n", "99/99 [==============================] - 1s 11ms/step - loss: 3.8056 - wine_quality_loss: 3.3435 - wine_type_loss: 0.4621 - wine_quality_root_mean_squared_error: 1.8285 - wine_type_accuracy: 0.7594 - val_loss: 2.8688 - val_wine_quality_loss: 2.4544 - val_wine_type_loss: 0.4144 - val_wine_quality_root_mean_squared_error: 1.5667 - val_wine_type_accuracy: 0.8074\n", "Epoch 4/40\n", "99/99 [==============================] - 1s 10ms/step - loss: 2.5611 - wine_quality_loss: 2.2106 - wine_type_loss: 0.3505 - wine_quality_root_mean_squared_error: 1.4868 - wine_type_accuracy: 0.8859 - val_loss: 2.3535 - val_wine_quality_loss: 2.0324 - val_wine_type_loss: 0.3210 - val_wine_quality_root_mean_squared_error: 1.4256 - val_wine_type_accuracy: 0.9138\n", "Epoch 5/40\n", "99/99 [==============================] - 1s 10ms/step - loss: 2.1611 - wine_quality_loss: 1.8892 - wine_type_loss: 0.2719 - wine_quality_root_mean_squared_error: 1.3745 - wine_type_accuracy: 0.9429 - val_loss: 2.0623 - val_wine_quality_loss: 1.8073 - val_wine_type_loss: 0.2550 - val_wine_quality_root_mean_squared_error: 1.3444 - val_wine_type_accuracy: 0.9480\n", "Epoch 6/40\n", "99/99 [==============================] - 1s 10ms/step - loss: 1.8903 - wine_quality_loss: 1.6780 - wine_type_loss: 0.2123 - wine_quality_root_mean_squared_error: 1.2954 - wine_type_accuracy: 0.9705 - val_loss: 1.8711 - val_wine_quality_loss: 1.6652 - val_wine_type_loss: 0.2059 - val_wine_quality_root_mean_squared_error: 1.2904 - val_wine_type_accuracy: 0.9670\n", "Epoch 7/40\n", "99/99 [==============================] - 1s 10ms/step - loss: 1.6902 - wine_quality_loss: 1.5210 - wine_type_loss: 0.1692 - wine_quality_root_mean_squared_error: 1.2333 - wine_type_accuracy: 0.9791 - val_loss: 1.7000 - val_wine_quality_loss: 1.5310 - val_wine_type_loss: 0.1689 - val_wine_quality_root_mean_squared_error: 1.2373 - val_wine_type_accuracy: 0.9759\n", "Epoch 8/40\n", "99/99 [==============================] - 1s 10ms/step - loss: 1.5363 - wine_quality_loss: 1.3980 - wine_type_loss: 0.1383 - wine_quality_root_mean_squared_error: 1.1824 - wine_type_accuracy: 0.9823 - val_loss: 1.5654 - val_wine_quality_loss: 1.4226 - val_wine_type_loss: 0.1428 - val_wine_quality_root_mean_squared_error: 1.1927 - val_wine_type_accuracy: 0.9747\n", "Epoch 9/40\n", "99/99 [==============================] - 1s 10ms/step - loss: 1.4062 - wine_quality_loss: 1.2909 - wine_type_loss: 0.1153 - wine_quality_root_mean_squared_error: 1.1362 - wine_type_accuracy: 0.9848 - val_loss: 1.4485 - val_wine_quality_loss: 1.3264 - val_wine_type_loss: 0.1221 - val_wine_quality_root_mean_squared_error: 1.1517 - val_wine_type_accuracy: 0.9772\n", "Epoch 10/40\n", "99/99 [==============================] - 1s 10ms/step - loss: 1.2977 - wine_quality_loss: 1.1993 - wine_type_loss: 0.0984 - wine_quality_root_mean_squared_error: 1.0951 - wine_type_accuracy: 0.9861 - val_loss: 1.3499 - val_wine_quality_loss: 1.2433 - val_wine_type_loss: 0.1066 - val_wine_quality_root_mean_squared_error: 1.1150 - val_wine_type_accuracy: 0.9797\n", "Epoch 11/40\n", "99/99 [==============================] - 1s 10ms/step - loss: 1.1989 - wine_quality_loss: 1.1140 - wine_type_loss: 0.0850 - wine_quality_root_mean_squared_error: 1.0554 - wine_type_accuracy: 0.9876 - val_loss: 1.2570 - val_wine_quality_loss: 1.1623 - val_wine_type_loss: 0.0947 - val_wine_quality_root_mean_squared_error: 1.0781 - val_wine_type_accuracy: 0.9810\n", "Epoch 12/40\n", "99/99 [==============================] - 1s 10ms/step - loss: 1.1149 - wine_quality_loss: 1.0395 - wine_type_loss: 0.0754 - wine_quality_root_mean_squared_error: 1.0196 - wine_type_accuracy: 0.9892 - val_loss: 1.1906 - val_wine_quality_loss: 1.1047 - val_wine_type_loss: 0.0859 - val_wine_quality_root_mean_squared_error: 1.0510 - val_wine_type_accuracy: 0.9835\n", "Epoch 13/40\n", "99/99 [==============================] - 1s 10ms/step - loss: 1.0436 - wine_quality_loss: 0.9758 - wine_type_loss: 0.0678 - wine_quality_root_mean_squared_error: 0.9878 - wine_type_accuracy: 0.9899 - val_loss: 1.1063 - val_wine_quality_loss: 1.0278 - val_wine_type_loss: 0.0785 - val_wine_quality_root_mean_squared_error: 1.0138 - val_wine_type_accuracy: 0.9848\n", "Epoch 14/40\n", "99/99 [==============================] - 1s 11ms/step - loss: 0.9753 - wine_quality_loss: 0.9135 - wine_type_loss: 0.0618 - wine_quality_root_mean_squared_error: 0.9558 - wine_type_accuracy: 0.9908 - val_loss: 1.0402 - val_wine_quality_loss: 0.9671 - val_wine_type_loss: 0.0730 - val_wine_quality_root_mean_squared_error: 0.9834 - val_wine_type_accuracy: 0.9861\n", "Epoch 15/40\n", "99/99 [==============================] - 1s 10ms/step - loss: 0.9150 - wine_quality_loss: 0.8581 - wine_type_loss: 0.0569 - wine_quality_root_mean_squared_error: 0.9263 - wine_type_accuracy: 0.9918 - val_loss: 0.9950 - val_wine_quality_loss: 0.9267 - val_wine_type_loss: 0.0683 - val_wine_quality_root_mean_squared_error: 0.9627 - val_wine_type_accuracy: 0.9886\n", "Epoch 16/40\n", "99/99 [==============================] - 1s 11ms/step - loss: 0.8608 - wine_quality_loss: 0.8077 - wine_type_loss: 0.0531 - wine_quality_root_mean_squared_error: 0.8987 - wine_type_accuracy: 0.9918 - val_loss: 0.9258 - val_wine_quality_loss: 0.8614 - val_wine_type_loss: 0.0644 - val_wine_quality_root_mean_squared_error: 0.9281 - val_wine_type_accuracy: 0.9886\n", "Epoch 17/40\n", "99/99 [==============================] - 1s 10ms/step - loss: 0.8093 - wine_quality_loss: 0.7595 - wine_type_loss: 0.0498 - wine_quality_root_mean_squared_error: 0.8715 - wine_type_accuracy: 0.9918 - val_loss: 0.8713 - val_wine_quality_loss: 0.8101 - val_wine_type_loss: 0.0613 - val_wine_quality_root_mean_squared_error: 0.9000 - val_wine_type_accuracy: 0.9886\n", "Epoch 18/40\n", "99/99 [==============================] - 1s 10ms/step - loss: 0.7664 - wine_quality_loss: 0.7193 - wine_type_loss: 0.0472 - wine_quality_root_mean_squared_error: 0.8481 - wine_type_accuracy: 0.9918 - val_loss: 0.8281 - val_wine_quality_loss: 0.7696 - val_wine_type_loss: 0.0584 - val_wine_quality_root_mean_squared_error: 0.8773 - val_wine_type_accuracy: 0.9886\n", "Epoch 19/40\n", "99/99 [==============================] - 1s 10ms/step - loss: 0.7210 - wine_quality_loss: 0.6761 - wine_type_loss: 0.0449 - wine_quality_root_mean_squared_error: 0.8223 - wine_type_accuracy: 0.9918 - val_loss: 0.7787 - val_wine_quality_loss: 0.7224 - val_wine_type_loss: 0.0563 - val_wine_quality_root_mean_squared_error: 0.8500 - val_wine_type_accuracy: 0.9886\n", "Epoch 20/40\n", "99/99 [==============================] - 1s 10ms/step - loss: 0.6851 - wine_quality_loss: 0.6421 - wine_type_loss: 0.0430 - wine_quality_root_mean_squared_error: 0.8013 - wine_type_accuracy: 0.9924 - val_loss: 0.7432 - val_wine_quality_loss: 0.6889 - val_wine_type_loss: 0.0543 - val_wine_quality_root_mean_squared_error: 0.8300 - val_wine_type_accuracy: 0.9886\n", "Epoch 21/40\n", "99/99 [==============================] - 1s 10ms/step - loss: 0.6503 - wine_quality_loss: 0.6090 - wine_type_loss: 0.0413 - wine_quality_root_mean_squared_error: 0.7804 - wine_type_accuracy: 0.9921 - val_loss: 0.7027 - val_wine_quality_loss: 0.6499 - val_wine_type_loss: 0.0528 - val_wine_quality_root_mean_squared_error: 0.8061 - val_wine_type_accuracy: 0.9886\n", "Epoch 22/40\n", "99/99 [==============================] - 1s 10ms/step - loss: 0.6166 - wine_quality_loss: 0.5767 - wine_type_loss: 0.0399 - wine_quality_root_mean_squared_error: 0.7594 - wine_type_accuracy: 0.9921 - val_loss: 0.6744 - val_wine_quality_loss: 0.6231 - val_wine_type_loss: 0.0513 - val_wine_quality_root_mean_squared_error: 0.7894 - val_wine_type_accuracy: 0.9886\n", "Epoch 23/40\n", "99/99 [==============================] - 1s 10ms/step - loss: 0.5857 - wine_quality_loss: 0.5471 - wine_type_loss: 0.0386 - wine_quality_root_mean_squared_error: 0.7396 - wine_type_accuracy: 0.9930 - val_loss: 0.6430 - val_wine_quality_loss: 0.5929 - val_wine_type_loss: 0.0501 - val_wine_quality_root_mean_squared_error: 0.7700 - val_wine_type_accuracy: 0.9899\n", "Epoch 24/40\n", "99/99 [==============================] - 1s 10ms/step - loss: 0.5587 - wine_quality_loss: 0.5213 - wine_type_loss: 0.0375 - wine_quality_root_mean_squared_error: 0.7220 - wine_type_accuracy: 0.9930 - val_loss: 0.6154 - val_wine_quality_loss: 0.5663 - val_wine_type_loss: 0.0491 - val_wine_quality_root_mean_squared_error: 0.7525 - val_wine_type_accuracy: 0.9924\n", "Epoch 25/40\n", "99/99 [==============================] - 1s 10ms/step - loss: 0.5356 - wine_quality_loss: 0.4991 - wine_type_loss: 0.0365 - wine_quality_root_mean_squared_error: 0.7064 - wine_type_accuracy: 0.9933 - val_loss: 0.5934 - val_wine_quality_loss: 0.5453 - val_wine_type_loss: 0.0481 - val_wine_quality_root_mean_squared_error: 0.7384 - val_wine_type_accuracy: 0.9911\n", "Epoch 26/40\n", "99/99 [==============================] - 1s 10ms/step - loss: 0.5144 - wine_quality_loss: 0.4788 - wine_type_loss: 0.0357 - wine_quality_root_mean_squared_error: 0.6919 - wine_type_accuracy: 0.9930 - val_loss: 0.5690 - val_wine_quality_loss: 0.5218 - val_wine_type_loss: 0.0473 - val_wine_quality_root_mean_squared_error: 0.7223 - val_wine_type_accuracy: 0.9911\n", "Epoch 27/40\n", "99/99 [==============================] - 1s 10ms/step - loss: 0.4950 - wine_quality_loss: 0.4602 - wine_type_loss: 0.0348 - wine_quality_root_mean_squared_error: 0.6783 - wine_type_accuracy: 0.9930 - val_loss: 0.5516 - val_wine_quality_loss: 0.5051 - val_wine_type_loss: 0.0465 - val_wine_quality_root_mean_squared_error: 0.7107 - val_wine_type_accuracy: 0.9911\n", "Epoch 28/40\n", "99/99 [==============================] - 1s 10ms/step - loss: 0.4776 - wine_quality_loss: 0.4435 - wine_type_loss: 0.0342 - wine_quality_root_mean_squared_error: 0.6659 - wine_type_accuracy: 0.9930 - val_loss: 0.5321 - val_wine_quality_loss: 0.4862 - val_wine_type_loss: 0.0458 - val_wine_quality_root_mean_squared_error: 0.6973 - val_wine_type_accuracy: 0.9911\n", "Epoch 29/40\n", "99/99 [==============================] - 1s 10ms/step - loss: 0.4611 - wine_quality_loss: 0.4277 - wine_type_loss: 0.0334 - wine_quality_root_mean_squared_error: 0.6540 - wine_type_accuracy: 0.9933 - val_loss: 0.5207 - val_wine_quality_loss: 0.4754 - val_wine_type_loss: 0.0453 - val_wine_quality_root_mean_squared_error: 0.6895 - val_wine_type_accuracy: 0.9911\n", "Epoch 30/40\n", "99/99 [==============================] - 1s 11ms/step - loss: 0.4476 - wine_quality_loss: 0.4147 - wine_type_loss: 0.0329 - wine_quality_root_mean_squared_error: 0.6440 - wine_type_accuracy: 0.9930 - val_loss: 0.5014 - val_wine_quality_loss: 0.4567 - val_wine_type_loss: 0.0447 - val_wine_quality_root_mean_squared_error: 0.6758 - val_wine_type_accuracy: 0.9911\n", "Epoch 31/40\n", "99/99 [==============================] - 1s 10ms/step - loss: 0.4344 - wine_quality_loss: 0.4021 - wine_type_loss: 0.0322 - wine_quality_root_mean_squared_error: 0.6342 - wine_type_accuracy: 0.9933 - val_loss: 0.4937 - val_wine_quality_loss: 0.4494 - val_wine_type_loss: 0.0443 - val_wine_quality_root_mean_squared_error: 0.6703 - val_wine_type_accuracy: 0.9924\n", "Epoch 32/40\n", "99/99 [==============================] - 1s 11ms/step - loss: 0.4235 - wine_quality_loss: 0.3919 - wine_type_loss: 0.0316 - wine_quality_root_mean_squared_error: 0.6260 - wine_type_accuracy: 0.9943 - val_loss: 0.4820 - val_wine_quality_loss: 0.4380 - val_wine_type_loss: 0.0440 - val_wine_quality_root_mean_squared_error: 0.6618 - val_wine_type_accuracy: 0.9911\n", "Epoch 33/40\n", "99/99 [==============================] - 1s 10ms/step - loss: 0.4126 - wine_quality_loss: 0.3813 - wine_type_loss: 0.0313 - wine_quality_root_mean_squared_error: 0.6175 - wine_type_accuracy: 0.9937 - val_loss: 0.4675 - val_wine_quality_loss: 0.4239 - val_wine_type_loss: 0.0436 - val_wine_quality_root_mean_squared_error: 0.6511 - val_wine_type_accuracy: 0.9924\n", "Epoch 34/40\n", "99/99 [==============================] - 1s 11ms/step - loss: 0.4044 - wine_quality_loss: 0.3737 - wine_type_loss: 0.0308 - wine_quality_root_mean_squared_error: 0.6113 - wine_type_accuracy: 0.9946 - val_loss: 0.4645 - val_wine_quality_loss: 0.4213 - val_wine_type_loss: 0.0432 - val_wine_quality_root_mean_squared_error: 0.6491 - val_wine_type_accuracy: 0.9911\n", "Epoch 35/40\n", "99/99 [==============================] - 1s 10ms/step - loss: 0.3968 - wine_quality_loss: 0.3666 - wine_type_loss: 0.0302 - wine_quality_root_mean_squared_error: 0.6054 - wine_type_accuracy: 0.9946 - val_loss: 0.4503 - val_wine_quality_loss: 0.4074 - val_wine_type_loss: 0.0429 - val_wine_quality_root_mean_squared_error: 0.6383 - val_wine_type_accuracy: 0.9924\n", "Epoch 36/40\n", "99/99 [==============================] - 1s 10ms/step - loss: 0.3900 - wine_quality_loss: 0.3601 - wine_type_loss: 0.0299 - wine_quality_root_mean_squared_error: 0.6001 - wine_type_accuracy: 0.9946 - val_loss: 0.4430 - val_wine_quality_loss: 0.4004 - val_wine_type_loss: 0.0427 - val_wine_quality_root_mean_squared_error: 0.6327 - val_wine_type_accuracy: 0.9924\n", "Epoch 37/40\n", "99/99 [==============================] - 1s 10ms/step - loss: 0.3846 - wine_quality_loss: 0.3552 - wine_type_loss: 0.0294 - wine_quality_root_mean_squared_error: 0.5960 - wine_type_accuracy: 0.9946 - val_loss: 0.4366 - val_wine_quality_loss: 0.3942 - val_wine_type_loss: 0.0424 - val_wine_quality_root_mean_squared_error: 0.6279 - val_wine_type_accuracy: 0.9924\n", "Epoch 38/40\n", "99/99 [==============================] - 1s 10ms/step - loss: 0.3779 - wine_quality_loss: 0.3490 - wine_type_loss: 0.0289 - wine_quality_root_mean_squared_error: 0.5907 - wine_type_accuracy: 0.9946 - val_loss: 0.4317 - val_wine_quality_loss: 0.3896 - val_wine_type_loss: 0.0421 - val_wine_quality_root_mean_squared_error: 0.6241 - val_wine_type_accuracy: 0.9924\n", "Epoch 39/40\n", "99/99 [==============================] - 1s 10ms/step - loss: 0.3733 - wine_quality_loss: 0.3448 - wine_type_loss: 0.0285 - wine_quality_root_mean_squared_error: 0.5872 - wine_type_accuracy: 0.9946 - val_loss: 0.4358 - val_wine_quality_loss: 0.3938 - val_wine_type_loss: 0.0420 - val_wine_quality_root_mean_squared_error: 0.6276 - val_wine_type_accuracy: 0.9937\n", "Epoch 40/40\n", "99/99 [==============================] - 1s 10ms/step - loss: 0.3685 - wine_quality_loss: 0.3403 - wine_type_loss: 0.0282 - wine_quality_root_mean_squared_error: 0.5834 - wine_type_accuracy: 0.9946 - val_loss: 0.4327 - val_wine_quality_loss: 0.3909 - val_wine_type_loss: 0.0418 - val_wine_quality_root_mean_squared_error: 0.6252 - val_wine_type_accuracy: 0.9937\n" ] } ], "source": [ "history = model.fit(x=norm_train_X, y=train_Y,\n", " epochs = 40, validation_data=(norm_val_X, val_Y))" ] }, { "cell_type": "code", "execution_count": 64, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "25/25 [==============================] - 0s 4ms/step - loss: 0.4327 - wine_quality_loss: 0.3909 - wine_type_loss: 0.0418 - wine_quality_root_mean_squared_error: 0.6252 - wine_type_accuracy: 0.9937\n", "\n", "loss: 0.43266481161117554\n", "wine_quality_loss: 0.39088746905326843\n", "wine_type_loss: 0.04177739843726158\n", "wine_quality_rmse: 0.6252099275588989\n", "wine_type_accuracy: 0.9936628937721252\n" ] } ], "source": [ "# Gather the training metrics\n", "loss, wine_quality_loss, wine_type_loss, wine_quality_rmse, wine_type_accuracy = model.evaluate(x=norm_val_X, y=val_Y)\n", "\n", "print()\n", "print(f'loss: {loss}')\n", "print(f'wine_quality_loss: {wine_quality_loss}')\n", "print(f'wine_type_loss: {wine_type_loss}')\n", "print(f'wine_quality_rmse: {wine_quality_rmse}')\n", "print(f'wine_type_accuracy: {wine_type_accuracy}')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Analyze the Model Performance\n", "\n", "Note that the model has two outputs. The output at index 0 is quality and index 1 is wine type\n", "\n", "So, round the quality predictions to the nearest integer." ] }, { "cell_type": "code", "execution_count": 65, "metadata": {}, "outputs": [], "source": [ "predictions = model.predict(norm_test_X)\n", "quality_pred = predictions[0]\n", "type_pred = predictions[1]" ] }, { "cell_type": "code", "execution_count": 66, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([6.014229], dtype=float32)" ] }, "execution_count": 66, "metadata": {}, "output_type": "execute_result" } ], "source": [ "quality_pred[0]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Plot Utilities\n", "\n", "We define a few utilities to visualize the model performance." ] }, { "cell_type": "code", "execution_count": 72, "metadata": {}, "outputs": [], "source": [ "def plot_metrics(history, metric_name, title, ylim=5):\n", " plt.title(title)\n", " plt.ylim(0,ylim)\n", " plt.plot(history.history[metric_name],color='blue',label=metric_name)\n", " plt.plot(history.history['val_' + metric_name],color='green',label='val_' + metric_name)\n" ] }, { "cell_type": "code", "execution_count": 70, "metadata": {}, "outputs": [], "source": [ "def plot_confusion_matrix(y_true, y_pred, title='', labels=[0,1]):\n", " cm = confusion_matrix(y_true, y_pred)\n", " fig = plt.figure()\n", " ax = fig.add_subplot(111)\n", " cax = ax.matshow(cm)\n", " plt.title('Confusion matrix of the classifier')\n", " fig.colorbar(cax)\n", " ax.set_xticklabels([''] + labels)\n", " ax.set_yticklabels([''] + labels)\n", " plt.xlabel('Predicted')\n", " plt.ylabel('True')\n", " fmt = 'd'\n", " thresh = cm.max() / 2.\n", " for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])):\n", " plt.text(j, i, format(cm[i, j], fmt),\n", " horizontalalignment=\"center\",\n", " color=\"black\" if cm[i, j] > thresh else \"white\")\n", " plt.show()" ] }, { "cell_type": "code", "execution_count": 71, "metadata": {}, "outputs": [], "source": [ "def plot_diff(y_true, y_pred, title = '' ):\n", " plt.scatter(y_true, y_pred)\n", " plt.title(title)\n", " plt.xlabel('True Values')\n", " plt.ylabel('Predictions')\n", " plt.axis('equal')\n", " plt.axis('square')\n", " plt.plot([-100, 100], [-100, 100])\n", " return plt" ] }, { "cell_type": "code", "execution_count": 73, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_metrics(history, 'wine_quality_root_mean_squared_error', 'RMSE', ylim=2)" ] }, { "cell_type": "code", "execution_count": 74, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_metrics(history, 'wine_type_loss', 'Wine Type Loss', ylim=0.2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Plots for Confusion Matrix\n", "\n", "Plot the confusion matrices for wine type. You can see that the model performs well for prediction of wine type from the confusion matrix and the loss metrics." ] }, { "cell_type": "code", "execution_count": 75, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "C:\\Users\\kcsgo\\anaconda3\\lib\\site-packages\\ipykernel_launcher.py:8: UserWarning: FixedFormatter should only be used together with FixedLocator\n", " \n", "C:\\Users\\kcsgo\\anaconda3\\lib\\site-packages\\ipykernel_launcher.py:9: UserWarning: FixedFormatter should only be used together with FixedLocator\n", " if __name__ == '__main__':\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_confusion_matrix(test_Y[1], np.round(type_pred), title='Wine Type', labels = [0, 1])" ] }, { "cell_type": "code", "execution_count": 76, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "scatter_plot = plot_diff(test_Y[0], quality_pred, title='Type')" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "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.7.10" } }, "nbformat": 4, "nbformat_minor": 4 }