{ "nbformat": 4, "nbformat_minor": 0, "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.6.8" }, "toc": { "base_numbering": 1, "nav_menu": {}, "number_sections": true, "sideBar": true, "skip_h1_title": false, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": false, "toc_position": {}, "toc_section_display": true, "toc_window_display": true }, "colab": { "name": "exercise_msi-checkpoint.ipynb", "provenance": [] } }, "cells": [ { "cell_type": "markdown", "metadata": { "id": "Z1qxJeemWWZe", "colab_type": "text" }, "source": [ "# Exercise for MSI lecture on machine learning --- an introduction\n", "Author: Jia-Jie Zhu, with help from Sebastian Blaes \n", "Max Planck Institute for Intelligent Systems \n", "\n", "\n", "Based on the Python libraries Scikit-learn and Keras" ] }, { "cell_type": "markdown", "metadata": { "id": "cD9mNYlaWWZj", "colab_type": "text" }, "source": [ "# set-up" ] }, { "cell_type": "markdown", "metadata": { "id": "VJde2Dh8WWZm", "colab_type": "text" }, "source": [ "### Install anaconda\n", "\n", "Follow the instruction at https://docs.anaconda.com/anaconda/install/\n", "We will use python 3.X version.\n", "\n", "### Create a new anaconda environment\n", "```\n", "conda create --name ml_syscop\n", "```\n", "\n", "### Launch Jupyter notebook\n", "\n", "If it is not active yet, activate the environment (on windows, in the anaconda prompt)\n", "\n", " source activate ml_syscop\n", "\n", "Navigate to the exercise folder\n", "\n", " cd /path/to/folder\n", "\n", "Start the jupyter notebook (from the anaoconda prompt, inside the ML-workshop environment)\n", "\n", " jupyter notebook\n", "\n", "A new browser window should open automatically\n", "\n", "#### If you are not familiar with Python, I recommend ``from matlab to numpy'':\n", "https://docs.scipy.org/doc/numpy-dev/user/numpy-for-matlab-users.html" ] }, { "cell_type": "markdown", "metadata": { "id": "cLk69ccPWWZo", "colab_type": "text" }, "source": [ "#### Keras for DNN\n", "This tutorial will also use the library Keras for deep neural nets. Install the package here: https://keras.io/#installation. Also, take a look at the simple quick tutorial therein. \n", "You may also need to install tensorflow following the same doc. \n", "Once you are done, do the following to import the library." ] }, { "cell_type": "markdown", "metadata": { "id": "k9emEFlkWWZp", "colab_type": "text" }, "source": [ "### Library imports" ] }, { "cell_type": "code", "metadata": { "ExecuteTime": { "end_time": "2018-03-08T15:54:17.351244Z", "start_time": "2018-03-08T15:54:17.340379Z" }, "id": "Od5VC479WWZr", "colab_type": "code", "colab": {} }, "source": [ "# numpy for matrix operation, backend is implemented in c\n", "import numpy as np\n", "\n", "# matplotlib for plotting, interface is inspired by matlab\n", "import matplotlib.pyplot as plt\n", "\n", "# for dnn\n", "import keras" ], "execution_count": 0, "outputs": [] }, { "cell_type": "markdown", "metadata": { "toc-hr-collapsed": false, "id": "DvCn7mJoWWZw", "colab_type": "text" }, "source": [ "# Working with data" ] }, { "cell_type": "markdown", "metadata": { "id": "Wuv2qfifWWZx", "colab_type": "text" }, "source": [ "The dataset we want to look at is the diabetes dataset[1,2].\n", "\n", "[1] http://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_diabetes.html\n", "\n", "[2] http://www4.stat.ncsu.edu/~boos/var.select/diabetes.html" ] }, { "cell_type": "code", "metadata": { "ExecuteTime": { "end_time": "2018-03-08T14:28:20.806515Z", "start_time": "2018-03-08T14:28:20.787000Z" }, "id": "LvS6oLzVWWZz", "colab_type": "code", "colab": {} }, "source": [ "diabetes = np.loadtxt('diabetes.txt', skiprows=1)" ], "execution_count": 0, "outputs": [] }, { "cell_type": "code", "metadata": { "ExecuteTime": { "end_time": "2018-03-08T14:28:21.219689Z", "start_time": "2018-03-08T14:28:21.212204Z" }, "id": "bsTXCGXXWWZ3", "colab_type": "code", "colab": {} }, "source": [ "diabetes_x = diabetes[:,:-1]\n", "diabetes_y = diabetes[:,-1]\n", "diabetes_feature_names = ['age', 'sex', 'bmi', 'bp', 's1', 's2', 's3', 's4', 's5', 's6']\n", "diabetes_target_names = ['disease_progression']" ], "execution_count": 0, "outputs": [] }, { "cell_type": "markdown", "metadata": { "toc-hr-collapsed": false, "id": "lLCcds2CWWZ5", "colab_type": "text" }, "source": [ "### Preprocessing" ] }, { "cell_type": "markdown", "metadata": { "ExecuteTime": { "end_time": "2018-03-03T12:43:21.713921Z", "start_time": "2018-03-03T12:43:21.708620Z" }, "id": "f5veMpd1WWZ7", "colab_type": "text" }, "source": [ "#### Normalization" ] }, { "cell_type": "markdown", "metadata": { "id": "zhEpShoWWWZ9", "colab_type": "text" }, "source": [ "In case that your dataset consists of features of very different kind it might easily happen that different channels cover quite different ranges." ] }, { "cell_type": "code", "metadata": { "ExecuteTime": { "end_time": "2018-03-08T14:28:27.024974Z", "start_time": "2018-03-08T14:28:26.711174Z" }, "id": "Fc2dXHQKWWZ_", "colab_type": "code", "colab": {}, "outputId": "ef5cfd0c-bcd7-414c-aee2-2fc4c1242216" }, "source": [ "fig = plt.figure()\n", "_ = plt.hist(diabetes_x[:,0], label='age')\n", "_ = plt.hist(diabetes_x[:,2], alpha=0.66, label='bmi')\n", "_ = plt.hist(diabetes_x[:,4], alpha=0.33, label='s1')\n", "_ = plt.legend()" ], "execution_count": 0, "outputs": [ { "output_type": "display_data", "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAD8CAYAAAB5Pm/hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4wLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvqOYd8AAAE6dJREFUeJzt3X+w1XWdx/HnW0Wu5vUHcGv4VZccdDUhs4vhYsZoczFoAictm3UDx4mmVbHabUWbyq1/0HE3Fy0dVkxqGjMxR1vSRUyrbdAWiBAlE+su3kC5sYKaunnzs3+cL+wN74XLOd9zz70fno+ZO+f7/Zzv+Z73Z7764nM+5/v9nkgpIUnK1yGNLkCSVF8GvSRlzqCXpMwZ9JKUOYNekjJn0EtS5gx6ScqcQS9JmTPoJSlzhzW6AIBRo0al1tbWRpchSUPK2rVr/5BSatnfdoMi6FtbW1mzZk2jy5CkISUi/rs/2zl1I0mZM+glKXMGvSRlblDM0UtSGV5//XU6Ozt57bXXGl1KqZqamhg3bhzDhg2r6vUGvaRsdHZ20tzcTGtrKxHR6HJKkVJix44ddHZ2MmHChKr24dSNpGy89tprjBw5MpuQB4gIRo4cWdOnFINeUlZyCvndau2TQS9JmXOOXlK2WheuKHV/HYtmlbq/gWLQSwNsZcfKuuy3vbW9LvvV0OfUjSSVbM6cObz3ve/lXe96F0uWLAFg6dKlnHDCCUyfPp1PfepTXHbZZQB0dXXx0Y9+lClTpjBlyhR+/vOfl16PI3pJKtltt93GiBEjePXVV5kyZQqzZs3ia1/7GuvWraO5uZmzzz6bd7/73QBcccUVfO5zn+PMM89ky5YtzJgxg02bNpVaj0EvSSVbvHgx99xzDwDPPvss3/nOd/jABz7AiBEjALjgggv4zW9+A8CqVat48skn97z2xRdf5KWXXqK5ubm0egx6SSrRI488wqpVq1i9ejVHHnkk06dP58QTT+xzlP7GG2+wevVqjjjiiLrV5By9JJVo165dHHfccRx55JH8+te/5tFHH+WVV17hJz/5CS+88ALd3d3cfffde7Zvb2/npptu2rO+fv360mtyRC8pW404HfLcc8/llltuYfLkyZx44olMnTqVsWPHcvXVV/O+972PMWPGcPLJJ3PMMccAlWmeSy+9lMmTJ9Pd3c1ZZ53FLbfcUmpNBr0klWj48OHcf//9b2pva2tj/vz5dHd3c95559HeXjkddtSoUdx55511rcmpG0kaANdccw2nnnoqp5xyChMmTGDOnDkD9t6O6CVpAFx//fUNe29H9JKUOYNekjJn0EtS5gx6ScqcX8ZKytddF5e7vwu+td9NOjo6+PCHP8zGjRsPePdbt25lwYIFLF++vJrq+uSIXpIGiTFjxpQe8mDQS1Lpuru7mTt3LpMnT+b888/nlVdeobW1lauvvpozzjiDtrY21q1bx4wZMzj++OP3XAnb0dHBKaecUno9Br0kleypp55i/vz5bNiwgaOPPppvfvObAIwfP57Vq1fz/ve/n3nz5rF8+XIeffRRvvzlL9e1HufoJalk48ePZ9q0aQBcdNFFLF68GICPfOQjAEyaNImXX36Z5uZmmpubaWpqYufOnXWrxxG9JJUsInpdHz58OACHHHLInuXd693d3XWrZ79BHxG3RcT2iNjYo21ERDwYEU8Xj8cV7RERiyNic0RsiIjT6la5JA1SW7ZsYfXq1QDccccdnHnmmQ2tpz9TN7cDNwHf7tG2EHgopbQoIhYW61cCHwImFn/vA24uHiVp4PXjdMh6OOmkk1i2bBmf/vSnmThxIp/5zGe48cYbG1IL9CPoU0o/jYjWvZpnA9OL5WXAI1SCfjbw7ZRSAh6NiGMjYnRKaVtZBUvSYNba2voXPw24W0dHx57lefPmMW/evDc9N2rUqKrOv9+faufo37Y7vIvHtxbtY4Fne2zXWbRJkhqk7C9jo5e21OuGEfMjYk1ErOnq6iq5DEnSbtUG/fMRMRqgeNxetHcC43tsNw7Y2tsOUkpLUkptKaW2lpaWKsuQJO1PtUF/HzC3WJ4L3Nuj/ZPF2TdTgV3Oz0tSY+33y9iIuIPKF6+jIqIT+AqwCPh+RFwCbAEuKDb/ETAT2Ay8ApR8R6F+6nkjowZ96y5Jg0V/zrr5RB9PndPLtgm4tNaiJEnl8RYIkrK1smNlqftrb22v6nU33XQTN9xwA8888wxdXV2MGjWq1Lr2x1sgSFKdTZs2jVWrVvGOd7yjIe/viF6SSvTHP/6Rj33sY3R2dvLnP/+ZL33pS3z84x9vaE0GvSSV6IEHHmDMmDGsWLECgF27djW4IqduJKlUkyZNYtWqVVx55ZX87Gc/45hjjml0SQa9JJXphBNOYO3atUyaNImrrrqKr371q40uyakbSSrT1q1bGTFiBBdddBFHHXUUt99+e6NLMugl5ava0yFr8fjjj/OFL3yBQw45hGHDhnHzzTezePFirrvuOp577jkmT57MzJkzufXWWwesJoNekko0Y8YMZsyY8RdtbW1tLFiwoEEVOUcvSdkz6CUpcwa9pKxUbrmVl1r7ZNBLykZTUxM7duzIKuxTSuzYsYOmpqaq95H/l7Heslg6aIwbN47Ozk5y+9W6pqYmxo0bV/Xr8w96SQeNYcOGMWHChEaXMeg4dSNJmTPoJSlzBr0kZc6gl6TMGfSSlDmDXpIyZ9BLUuY8j74krQtX9NresWjWAFeisqzsWNnoEqRSOKKXpMwZ9JKUOYNekjJn0EtS5gx6ScpcTUEfEZ+LiCciYmNE3BERTRExISIei4inI+LOiDi8rGIlSQeu6qCPiLHAAqAtpXQKcChwIXAt8PWU0kTgBeCSMgqVJFWn1qmbw4AjIuIw4EhgG3A2sLx4fhkwp8b3kCTVoOoLplJKv4+I64EtwKvASmAtsDOl1F1s1gmM7e31ETEfmA/w9re/vdoyJBXqdYFXe2t7XfargVPL1M1xwGxgAjAGeAvwoV427fXHG1NKS1JKbSmltpaWlmrLkCTtRy1TNx8EfpdS6kopvQ78APhr4NhiKgdgHLC1xholSTWoJei3AFMj4siICOAc4EngYeD8Ypu5wL21lShJqkXVQZ9SeozKl67rgMeLfS0BrgQ+HxGbgZHA0hLqlCRVqaa7V6aUvgJ8Za/m3wKn17JfSVJ5vDJWkjJn0EtS5gx6ScqcQS9JmTPoJSlzBr0kZc6gl6TMGfSSlDmDXpIyZ9BLUuYMeknKnEEvSZkz6CUpcwa9JGWuptsUa/9aF67o87mORbMGsBJJBytH9JKUOYNekjJn0EtS5gx6ScqcQS9JmcvrrJu7Lm50BZI06Diil6TMGfSSlDmDXpIyZ9BLUuYMeknKnEEvSZmrKegj4tiIWB4Rv46ITRFxRkSMiIgHI+Lp4vG4soqVJB24Wkf0/wo8kFL6K+DdwCZgIfBQSmki8FCxLklqkKqDPiKOBs4ClgKklP6UUtoJzAaWFZstA+bUWmRp7rrYi6okHXRqGdG/E+gCvhURv4yIWyPiLcDbUkrbAIrHt5ZQpySpSrUE/WHAacDNKaX3AH/kAKZpImJ+RKyJiDVdXV01lCFJ2pdagr4T6EwpPVasL6cS/M9HxGiA4nF7by9OKS1JKbWllNpaWlpqKEOStC9VB31K6Tng2Yg4sWg6B3gSuA+YW7TNBe6tqUJJUk1qvXvl5cB3I+Jw4LfAxVT+8fh+RFwCbAEuqPE9JEk1qCnoU0rrgbZenjqnlv1KB2Jlx8pGlyANal4ZK0mZM+glKXMGvSRlzqCXpMzl9Zuxdda6cEWjS5CkA+aIXpIyZ9BLUuYMeknK3ME5R9/zVsUXfOtNTzsXLyknjuglKXMGvSRlzqCXpMwZ9JKUOYNekjJn0EtS5gx6ScqcQS9JmTPoJSlzBr0kZe7gvAUC8MMNWwG4fG3jbnfQ160WOhbNGuBKJOXMEb0kZc6gl6TMGfSSlDmDXpIyZ9BLUuYMeknK3EF7eqWk/lnZsbIu+21vba/LfvVmjuglKXM1B31EHBoRv4yIfy/WJ0TEYxHxdETcGRGH116mJKlaZYzorwA29Vi/Fvh6Smki8AJwSQnvIUmqUk1BHxHjgFnArcV6AGcDy4tNlgFzankPSVJtah3R3wD8I/BGsT4S2JlS6i7WO4Gxvb0wIuZHxJqIWNPV1VVjGZKkvlQd9BHxYWB7Smltz+ZeNk29vT6ltCSl1JZSamtpaam2DEnSftRyeuU04CMRMRNoAo6mMsI/NiIOK0b144CttZcpSapW1SP6lNJVKaVxKaVW4ELgxymlvwEeBs4vNpsL3FtzlZKkqtXjPPorgc9HxGYqc/ZL6/AekqR+KuXK2JTSI8AjxfJvgdPL2K8kqXZeGStJmTPoJSlzBr0kZc6gl6TMGfSSlDmDXpIyZ9BLUub8halBqHXhil7bOxbNGuBKJOXAEb0kZW7oj+jvurjRFUjSoOaIXpIyZ9BLUuYMeknKnEEvSZkz6CUpcwa9JGVu6J9euR8/3OBP1ko6uDmil6TMGfSSlDmDXpIyZ9BLUuYMeknKnEEvSZkz6CUpc9mfRy9pcFrZsbIu+21vba/LfocyR/SSlLmDfkR/47DFe5Yvf31BAyuRpPqoekQfEeMj4uGI2BQRT0TEFUX7iIh4MCKeLh6PK69cSdKBqmXqphv4+5TSScBU4NKIOBlYCDyUUpoIPFSsS5IapOqpm5TSNmBbsfxSRGwCxgKzgenFZsuAR4Ara6pSWajXl2+S9q2UL2MjohV4D/AY8LbiH4Hd/xi8tYz3kCRVp+agj4ijgLuBz6aUXjyA182PiDURsaarq6vWMiRJfagp6CNiGJWQ/25K6QdF8/MRMbp4fjSwvbfXppSWpJTaUkptLS0ttZQhSdqHqufoIyKApcCmlNK/9HjqPmAusKh4vLemCvvBHxeRpL7Vch79NOBvgccjYn3RdjWVgP9+RFwCbAEuqK1ESVItajnr5j+B6OPpc6rdrySpXN4CQZIyZ9BLUuYMeknKnEEvSZkz6CUpcwa9JGXOoJekzBn0kpQ5g16SMmfQS1LmDPoebhy2+C9+Q1aScmDQS1LmDHpJypxBL0mZM+glKXMGvSRlzqCXpMwZ9JKUOYNekjJXy4+DS9Kgs7JjZV32297aXpf9DgRH9JKUOUf0Q0jrwhV9PtexaNYAViIdfIbyJwVH9JKUOUf0veh5Y7PLX1/QwEoao14jF0mN4YhekjJn0EtS5gx6ScqcQS9JmatL0EfEuRHxVERsjoiF9XiPgeKvTkka6koP+og4FPgG8CHgZOATEXFy2e8jSeqfeozoTwc2p5R+m1L6E/A9YHYd3keS1A/1CPqxwLM91juLNklSA9TjgqnopS29aaOI+cD8YvXliHiqDrWUqF8XEY0C/lDnQnoV19Zt1w3rU53Zr6HFfvXuHf3ZqB5B3wmM77E+Dti690YppSXAkjq8f8NExJqUUluj6yhTjn0C+zXU2K/a1GPq5r+AiRExISIOBy4E7qvD+0iS+qH0EX1KqTsiLgP+AzgUuC2l9ETZ7yNJ6p+63NQspfQj4Ef12Pcgl9VUVCHHPoH9GmrsVw0ipTd9TypJyoi3QJCkzBn0VYqIjoh4PCLWR8Saom1ERDwYEU8Xj8c1us79iYjbImJ7RGzs0dZrP6JicXFriw0RcVrjKt+3Pvp1TUT8vjhm6yNiZo/nrir69VREzGhM1fsWEeMj4uGI2BQRT0TEFUX7kD5e++jXUD9eTRHxi4j4VdGvfyraJ0TEY8XxurM4aYWIGF6sby6eby2tmJSSf1X8AR3AqL3argMWFssLgWsbXWc/+nEWcBqwcX/9AGYC91O5VmIq8Fij6z/Afl0D/EMv254M/AoYDkwAngEObXQfeqlzNHBasdwM/KaofUgfr330a6gfrwCOKpaHAY8Vx+H7wIVF+y3AZ4rlvwNuKZYvBO4sqxZH9OWaDSwrlpcBcxpYS7+klH4K/M9ezX31Yzbw7VTxKHBsRIwemEoPTB/96sts4Hsppf9NKf0O2EzlVh6DSkppW0ppXbH8ErCJylXnQ/p47aNffRkqxyullF4uVocVfwk4G1hetO99vHYfx+XAORHR2wWoB8ygr14CVkbE2uIqX4C3pZS2QeU/XuCtDauuNn31I4fbW1xWTGPc1mNqbcj1q/hY/x4qo8Rsjtde/YIhfrwi4tCIWA9sBx6k8uljZ0qpu9ikZ+17+lU8vwsYWUYdBn31pqWUTqNyl85LI+KsRhc0APp1e4tB7GbgeOBUYBvwz0X7kOpXRBwF3A18NqX04r427aVtKPVryB+vlNKfU0qnUrlDwOnASb1tVjzWrV8GfZVSSluLx+3APVQO4vO7PxoXj9sbV2FN+upHv25vMVillJ4v/sd7A/g3/v/j/pDpV0QMoxKG300p/aBoHvLHq7d+5XC8dksp7QQeoTJHf2xE7L6GqWfte/pVPH8M/Z9+3CeDvgoR8ZaIaN69DLQDG6nc6mFusdlc4N7GVFizvvpxH/DJ4myOqcCu3VMGQ8Fe89PnUTlmUOnXhcVZDxOAicAvBrq+/Snma5cCm1JK/9LjqSF9vPrqVwbHqyUiji2WjwA+SOX7h4eB84vN9j5eu4/j+cCPU/HNbM0a/c30UPwD3knlW/9fAU8AXyzaRwIPAU8XjyMaXWs/+nIHlY/Fr1MZUVzSVz+ofLT8BpV5xseBtkbXf4D9+k5R94bif6rRPbb/YtGvp4APNbr+Pvp0JpWP8huA9cXfzKF+vPbRr6F+vCYDvyzq3wh8uWh/J5V/mDYDdwHDi/amYn1z8fw7y6rFK2MlKXNO3UhS5gx6ScqcQS9JmTPoJSlzBr0kZc6gl6TMGfSSlDmDXpIy93/6oVcauQNnIAAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "tags": [], "needs_background": "light" } } ] }, { "cell_type": "markdown", "metadata": { "id": "QmcAieJiWWaH", "colab_type": "text" }, "source": [ "In order to weight the contribution of each feature equally, it is recommended to normalize each input channel by subtracting the mean and divide by the standard deviation over all training samples." ] }, { "cell_type": "markdown", "metadata": { "id": "L53n8iFTWWaI", "colab_type": "text" }, "source": [ "#### Exercise:\n", "\n", "Fill in the blank fields. Normalize each feature channel to zero center and unit variance as well as normalize each feature channel such that the square sum equals one: " ] }, { "cell_type": "code", "metadata": { "ExecuteTime": { "end_time": "2018-03-05T08:49:37.970834Z", "start_time": "2018-03-05T08:49:37.967038Z" }, "solution2": "hidden", "solution2_first": true, "id": "AMT2g6I5WWaJ", "colab_type": "code", "colab": {}, "outputId": "eeb3b133-1bb3-4b15-a8e7-5b349805df51" }, "source": [ "diabetes_x_mean = \n", "diabetes_x_std = \n", "diabetes_x_norm = " ], "execution_count": 0, "outputs": [ { "output_type": "error", "ename": "SyntaxError", "evalue": "invalid syntax (, line 1)", "traceback": [ "\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m1\u001b[0m\n\u001b[0;31m diabetes_x_mean =\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n" ] } ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "sZjWwFyFWktx" }, "source": [ "### solution" ] }, { "cell_type": "code", "metadata": { "ExecuteTime": { "end_time": "2018-03-08T14:28:31.483840Z", "start_time": "2018-03-08T14:28:31.476414Z" }, "solution2": "hidden", "colab_type": "code", "id": "bhYB2Sb7Wktn", "colab": {} }, "source": [ "" ], "execution_count": 0, "outputs": [] }, { "cell_type": "code", "metadata": { "ExecuteTime": { "end_time": "2018-03-08T10:34:28.412092Z", "start_time": "2018-03-08T10:34:28.127068Z" }, "colab_type": "code", "outputId": "56a06504-f9ae-4126-b803-f3e48e0f0ba2", "id": "J7D5s9eHWktc", "colab": {} }, "source": [ "fig = plt.figure()\n", "_ = plt.hist(diabetes_x_norm[:,0], label='age')\n", "_ = plt.hist(diabetes_x_norm[:,2], alpha=0.66, label='bmi')\n", "_ = plt.hist(diabetes_x_norm[:,4], alpha=0.33, label='s1')\n", "_ = plt.legend()" ], "execution_count": 0, "outputs": [ { "output_type": "display_data", "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "tags": [], "needs_background": "light" } } ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "ZNm7SZVkWktX" }, "source": [ "Scikit learn provides convenient functions to do the job" ] }, { "cell_type": "code", "metadata": { "ExecuteTime": { "end_time": "2018-03-08T10:34:32.166405Z", "start_time": "2018-03-08T10:34:32.160683Z" }, "colab_type": "code", "id": "WxMuFu0yWktF", "colab": {} }, "source": [ "from sklearn import preprocessing" ], "execution_count": 0, "outputs": [] }, { "cell_type": "code", "metadata": { "ExecuteTime": { "end_time": "2018-03-08T10:34:32.520941Z", "start_time": "2018-03-08T10:34:32.502078Z" }, "colab_type": "code", "id": "Qno_Ez8BWksk", "colab": {} }, "source": [ "diabetes_x_norm_easy = preprocessing.scale(diabetes_x, axis=0)\n", "diabetes_x_norm_easy = preprocessing.normalize(diabetes_x_norm_easy, axis=0)" ], "execution_count": 0, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "VSfSdU5iWWaZ", "colab_type": "text" }, "source": [ "### Splitting your dataset in training, validation and test sets" ] }, { "cell_type": "markdown", "metadata": { "id": "X_2vZkSvWWaa", "colab_type": "text" }, "source": [ "Before you star to work with your dataset, split it into a training and test set and never touch the test set again until the very end of the training." ] }, { "cell_type": "markdown", "metadata": { "id": "0v8OzLNNWWac", "colab_type": "text" }, "source": [ "It is also good practice to store all your parameters in a dictionary that you can store and retrieve later." ] }, { "cell_type": "code", "metadata": { "id": "v1zsVsVoWWad", "colab_type": "code", "colab": {}, "outputId": "8b0c01a8-438e-460a-b687-958edea7b57d" }, "source": [ "len(diabetes_x)" ], "execution_count": 0, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "442" ] }, "metadata": { "tags": [] }, "execution_count": 10 } ] }, { "cell_type": "code", "metadata": { "ExecuteTime": { "end_time": "2018-03-08T14:29:13.587475Z", "start_time": "2018-03-08T14:29:13.580854Z" }, "id": "5mQlrAltWWaj", "colab_type": "code", "colab": {} }, "source": [ "config = {\n", " 'trainN': 300, # number of training examples\n", " 'valN': 100, # number of validation examples\n", " 'testN': 42, # number of test examples\n", "}" ], "execution_count": 0, "outputs": [] }, { "cell_type": "code", "metadata": { "ExecuteTime": { "end_time": "2018-03-08T14:29:33.089565Z", "start_time": "2018-03-08T14:29:33.085969Z" }, "id": "sbfGcJuCWWao", "colab_type": "code", "colab": {} }, "source": [ "# Number of training + validation examples\n", "trainValN = config['trainN'] + config['valN']" ], "execution_count": 0, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "jZcZMx46WWaq", "colab_type": "text" }, "source": [ "Before we split our dataset we should first shuffle is in case it is sorted" ] }, { "cell_type": "code", "metadata": { "ExecuteTime": { "end_time": "2018-03-08T14:29:36.482671Z", "start_time": "2018-03-08T14:29:36.478986Z" }, "id": "bWPhHoGxWWar", "colab_type": "code", "colab": {} }, "source": [ "shuffled_indx = np.random.permutation(range(len(diabetes_x)))" ], "execution_count": 0, "outputs": [] }, { "cell_type": "code", "metadata": { "ExecuteTime": { "end_time": "2018-03-08T14:29:37.039991Z", "start_time": "2018-03-08T14:29:37.036097Z" }, "id": "-7vFPRxwWWav", "colab_type": "code", "colab": {} }, "source": [ "diabetes_x_shuffled = diabetes_x_norm[shuffled_indx]\n", "diabetes_y_shuffled = diabetes_y[shuffled_indx]" ], "execution_count": 0, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "x0ro3zM8WWa0", "colab_type": "text" }, "source": [ "Split your data into training and test set" ] }, { "cell_type": "code", "metadata": { "ExecuteTime": { "end_time": "2018-03-08T14:29:37.970703Z", "start_time": "2018-03-08T14:29:37.965305Z" }, "id": "Sr4AHZI_WWa2", "colab_type": "code", "colab": {} }, "source": [ "diabetes_x_train_ = diabetes_x_norm[:trainValN]\n", "diabetes_y_train_ = diabetes_y[:trainValN]\n", "\n", "diabetes_x_test = diabetes_x_norm[trainValN:trainValN+config['testN']]\n", "diabetes_y_test = diabetes_y[trainValN:trainValN+config['testN']]" ], "execution_count": 0, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "9PrxD3ISWWa9", "colab_type": "text" }, "source": [ "For model selection (different preprocessing, hyperparameter scan) split your training set again in a training and validation set that you can use freely during training " ] }, { "cell_type": "code", "metadata": { "ExecuteTime": { "end_time": "2018-03-08T14:29:40.569133Z", "start_time": "2018-03-08T14:29:40.560073Z" }, "id": "88YZu5_kWWbA", "colab_type": "code", "colab": {} }, "source": [ "diabetes_x_train = diabetes_x_train_[:config['trainN']]\n", "diabetes_y_train = diabetes_y_train_[:config['trainN']]\n", "\n", "diabetes_x_val = diabetes_x_train_[config['trainN']:config['trainN']+config['valN']]\n", "diabetes_y_val = diabetes_y_train_[config['trainN']:config['trainN']+config['valN']]" ], "execution_count": 0, "outputs": [] }, { "cell_type": "markdown", "metadata": { "toc-hr-collapsed": false, "id": "T5P04ov-WWbH", "colab_type": "text" }, "source": [ "# Ridge Regression and model selection" ] }, { "cell_type": "markdown", "metadata": { "id": "rLcZN6R_WWbJ", "colab_type": "text" }, "source": [ "The first task we want to solve is linear regression. In linear regression, we are given *N* training samples of dimensionality *M* and usually a one dimensional corresponding real valued target variable. " ] }, { "cell_type": "code", "metadata": { "ExecuteTime": { "end_time": "2018-03-08T14:28:45.860744Z", "start_time": "2018-03-08T14:28:45.757162Z" }, "id": "lHybzZaHWWbK", "colab_type": "code", "colab": {} }, "source": [ "from sklearn import linear_model" ], "execution_count": 0, "outputs": [] }, { "cell_type": "code", "metadata": { "ExecuteTime": { "end_time": "2018-03-08T14:28:47.558161Z", "start_time": "2018-03-08T14:28:47.552778Z" }, "id": "eS0OYzuyWWbM", "colab_type": "code", "colab": {} }, "source": [ "def eval_lin_model(x, y, estimator):\n", " return np.mean((estimator.predict(x)-y)**2)" ], "execution_count": 0, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "O72ztCsoWWbQ", "colab_type": "text" }, "source": [ "Lets start with least square regression by setting the regularization parameter *alpha* to zero. " ] }, { "cell_type": "code", "metadata": { "ExecuteTime": { "end_time": "2018-03-08T14:29:17.600644Z", "start_time": "2018-03-08T14:29:17.597138Z" }, "id": "xUSCAsjUWWbR", "colab_type": "code", "colab": {} }, "source": [ "config['lsm_alpha'] = 0" ], "execution_count": 0, "outputs": [] }, { "cell_type": "code", "metadata": { "ExecuteTime": { "end_time": "2018-03-08T14:30:38.391179Z", "start_time": "2018-03-08T14:30:38.357096Z" }, "id": "Pz-TTRLTWWbU", "colab_type": "code", "colab": {} }, "source": [ "estimator = linear_model.Ridge(alpha=config['lsm_alpha'])\n", "estimator.fit(diabetes_x_train, diabetes_y_train)\n", "lsm_coefs = estimator.coef_\n", "lsm_train_error = eval_lin_model(diabetes_x_train, diabetes_y_train, estimator)\n", "lsm_val_error = eval_lin_model(diabetes_x_val, diabetes_y_val, estimator)" ], "execution_count": 0, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "WTegvaqmWWbW", "colab_type": "text" }, "source": [ "Now, lets see how different values of *alpha* effect the model" ] }, { "cell_type": "code", "metadata": { "ExecuteTime": { "end_time": "2018-03-08T14:30:42.878153Z", "start_time": "2018-03-08T14:30:42.874514Z" }, "id": "CofvuHoWWWbX", "colab_type": "code", "colab": {} }, "source": [ "alphas = np.logspace(-5,5,500)" ], "execution_count": 0, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "VGdY9gk4WWba", "colab_type": "text" }, "source": [ "#### **Exercise:** \n", "Fill in the blank fields:" ] }, { "cell_type": "code", "metadata": { "ExecuteTime": { "end_time": "2018-03-05T09:41:44.159255Z", "start_time": "2018-03-05T09:41:44.152398Z" }, "solution2": "hidden", "solution2_first": true, "id": "effRsfzaWWba", "colab_type": "code", "colab": {} }, "source": [ "ridge_coefs = []\n", "ridge_train_errors = []\n", "ridge_val_errors = []\n", "for a in alphas:\n", " estimator = # Create a Ridge estimator object that takes a as input parameter\n", " # Fit the model to the data\n", " ridge_coefs.append() # extract the fitted coefficients from the model\n", " ridge_train_errors.append() # Append the training error of the current model\n", " ridge_val_errors.append() # Append the validation error of the current model\n", "min_val_err_indx = np.argmin(ridge_val_errors)" ], "execution_count": 0, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "2nyJySTHWWbd", "colab_type": "text" }, "source": [ "#### solution" ] }, { "cell_type": "code", "metadata": { "ExecuteTime": { "end_time": "2018-03-08T14:30:48.741212Z", "start_time": "2018-03-08T14:30:48.367770Z" }, "solution2": "hidden", "id": "aNtrSQTBWWbe", "colab_type": "code", "colab": {} }, "source": [ "" ], "execution_count": 0, "outputs": [] }, { "cell_type": "code", "metadata": { "ExecuteTime": { "end_time": "2018-03-08T14:30:51.429142Z", "start_time": "2018-03-08T14:30:50.699979Z" }, "id": "14dE9gnEWWbj", "colab_type": "code", "colab": {}, "outputId": "4488812d-3155-4217-dfdd-5c2c1805e849" }, "source": [ "fig = plt.figure()\n", "plt.plot(ridge_train_errors[:,0],ridge_train_errors[:,1], 'b', label='ridge train')\n", "plt.plot(ridge_val_errors[:,0],ridge_val_errors[:,1], 'r', label='ridge val')\n", "# plt.plot([alphas[0], alphas[-1]], [lsm_train_error]*2, 'b--', label='lsm train')\n", "# plt.plot([alphas[0], alphas[-1]], [lsm_val_error]*2, 'r--', label='lsm val')\n", "plt.plot(ridge_val_errors[min_val_err_indx, 0], ridge_val_errors[min_val_err_indx, 1], 'k.', markersize=10)\n", "plt.xscale('log')\n", "plt.xlabel('alpha')\n", "plt.ylabel('error')\n", "plt.legend()\n", "_ = plt.title('Ridge train/val errors as a function of the regularization')" ], "execution_count": 0, "outputs": [ { "output_type": "display_data", "data": { "image/png": "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vTr79u0r8v2akiMjA3r2dP1KzZ3ruvFOyK5d8PrrMH68680QXGdUI0ZA795wwQVF08WrKTALHCEoqm7VjSlsP/4I/fu7gsKsWQkGjTVr4Omn4ZVXXGN127buet2hQ6F58yTl2CSD3ehfRDZs2MAZZ5zBbbfdRocOHdi0aRPNmzdn27ZtADz00EO0atWKnj17smbNmqz1Fi1aRNu2bTnvvPO48847adOmDeDG07jzzjvp1KkTbdu25YUXXjhun3fddVeOnnhHjRrF448/zr59++jRowcdOnTg7LPPZurUqceta0w0VbjpJtcQ/uabCVxuu3atCw6tW8NLL8GVV8IXX7hby+++24JGCVQ2Sxwh9ate1N2qDx06lN/+9rdZAzlNnDiRWbNmUblyZSZPnkzNmjXZtm0bXbt25bLLLrPhX02eHnsMJkyAhx92HRPma+dOd2PH6NHutvF773WXXZ10UtLzapKrbAaOkBR1t+rt27fnhx9+YPPmzWRkZFCnTh2aNm3KkSNHuOeee/jwww8pV64c3333HVu3buUnP/lJUo/flFzvvQf33OMKDnfnNaoOuKLJxIlwxx2uQeRXv4I//tECRilSNgNHSP2qh9Gt+pAhQ5g0aRLff/89Q4cOBeD1118nIyODJUuWUKFCBZo3bx6zO3VjwF05df317sKml1/O54rXPXvgl7+EN95w3d7OmOFGZDKlirVxFAPJ6lYdXHXVhAkTmDRpEkOGDAFc6aRBgwZUqFCB999/n40bNyb7EE0Jper6nMrIcBdC5Xmx07JlLli8+SY8+CB8/rkFjVKqbJY4iplkdasOcNZZZ7F3714aNWpEw4YNAbjuuuu49NJL6dixI+3ataN169ZFc6CmxPnXv2DSJHj00XxiwLvvuvsu6tSB+fPdJbWm1LJu1Ys561bdhCUjw1VPnXWWiwW5DuX6wgtw221upKbp08Haykos61a9lLBu1U1Y7roL9u51cSHXoPHEE/C738HAga5dw//JMaWbBY5izrpVN2H4+GMYO9YFjzPPzGWhZ55xQePKK91d4OXt56SssMZxY0wOR4+6K2ibNnVX0cY0bhzcfjsMGuRazS1olCll6myrqt3kliSlsa2srBozBlasgLffdj2PH+eDD9zg4b16uSuoKlQo8jyacJWZEkflypXZvn27/cAlgaqyfft2Ktug0iXejz/C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\n", "text/plain": [ "
" ] }, "metadata": { "tags": [], "needs_background": "light" } } ] }, { "cell_type": "markdown", "metadata": { "id": "dR7eEbUyWWbn", "colab_type": "text" }, "source": [ "We see that the minimum validation error is achieved with regularization coeffcient of" ] }, { "cell_type": "code", "metadata": { "id": "IR3Mam5FWWbn", "colab_type": "code", "colab": {}, "outputId": "6bdc6677-84a0-4713-8c9d-7b3e29d030c0" }, "source": [ "# regularization coeff for min validation error\n", "print('reg. coeff: ',ridge_val_errors[min_val_err_indx, 0])" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "reg. coeff: 0.2684464810961965\n" ], "name": "stdout" } ] }, { "cell_type": "code", "metadata": { "id": "ZfcLDirCWWbr", "colab_type": "code", "colab": {}, "outputId": "8efd4d42-83d1-4be5-fa5d-c32e2fcd26eb" }, "source": [ "# check the minimal validation loss\n", "print('min validation loss: ', ridge_val_errors[min_val_err_indx, 1])" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "min validation loss: 3167.0970390862144\n" ], "name": "stdout" } ] }, { "cell_type": "markdown", "metadata": { "id": "a3DVqTO6WWbt", "colab_type": "text" }, "source": [ "### Let's visualize the test predictions of the trained model" ] }, { "cell_type": "markdown", "metadata": { "id": "wVS-GcOeWWbt", "colab_type": "text" }, "source": [ "#### Exercise:\n", "Based on the analysis on different `alpha`s, let's use the best `alpha` we found to train the RR model" ] }, { "cell_type": "code", "metadata": { "id": "yoWoI8L3WWbu", "colab_type": "code", "colab": {}, "outputId": "3b91ceaf-aa21-479e-b503-902ef103067d" }, "source": [ "model_tuned = '''your code'''\n", "model_tuned.fit('''your code''')" ], "execution_count": 0, "outputs": [ { "output_type": "error", "ename": "AttributeError", "evalue": "'str' object has no attribute 'fit'", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0mmodel_tuned\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m'''your code'''\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mmodel_tuned\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'''your code'''\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mAttributeError\u001b[0m: 'str' object has no attribute 'fit'" ] } ] }, { "cell_type": "markdown", "metadata": { "id": "hWLP2kJHWWbw", "colab_type": "text" }, "source": [ "#### solution" ] }, { "cell_type": "code", "metadata": { "id": "hC8Bay1VWWbx", "colab_type": "code", "colab": {}, "outputId": "27a1bef2-de97-463b-c51c-e8ca5e0e6cbd" }, "source": [ "" ], "execution_count": 0, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "Ridge(alpha=0.2684464810961965, copy_X=True, fit_intercept=True, max_iter=None,\n", " normalize=False, random_state=None, solver='auto', tol=0.001)" ] }, "metadata": { "tags": [] }, "execution_count": 31 } ] }, { "cell_type": "code", "metadata": { "id": "aW4wE-H_WWby", "colab_type": "code", "colab": {} }, "source": [ "rand_indx = np.random.choice(diabetes_x_test.shape[0], diabetes_x_test.shape[1], replace=False)\n", "pred = model_tuned.predict(diabetes_x_test[rand_indx])\n", "\n", "ground_truth = diabetes_y_test[rand_indx]" ], "execution_count": 0, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "FYjOqvc1WWb0", "colab_type": "code", "colab": {}, "outputId": "3570b3b4-9b69-430e-a1cf-91215ff3b748" }, "source": [ "plt.figure()\n", "plt.plot(pred,'r',label='pred')\n", "plt.plot(ground_truth, 'b',label='true')\n", "plt.legend()" ], "execution_count": 0, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "" ] }, "metadata": { "tags": [] }, "execution_count": 33 }, { "output_type": "display_data", "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "tags": [], "needs_background": "light" } } ] }, { "cell_type": "markdown", "metadata": { "id": "hRfltrPnWWb2", "colab_type": "text" }, "source": [ "Quantitatively, this model incurs a test loss of" ] }, { "cell_type": "code", "metadata": { "id": "vC5rCKqYWWb3", "colab_type": "code", "colab": {}, "outputId": "3d8968f7-c9b3-4abb-d4d5-00769c053a50" }, "source": [ "score = eval_lin_model(diabetes_x_test, diabetes_y_test, model_tuned)\n", "print('Test loss:', score)" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "Test loss: 1954.661954168828\n" ], "name": "stdout" } ] }, { "cell_type": "markdown", "metadata": { "id": "FneUFM63WWb7", "colab_type": "text" }, "source": [ "### visualize the ridge regression coefficient" ] }, { "cell_type": "code", "metadata": { "ExecuteTime": { "end_time": "2018-03-08T10:35:07.666051Z", "start_time": "2018-03-08T10:35:07.318692Z" }, "id": "aIv0mtKkWWb7", "colab_type": "code", "colab": {}, "outputId": "f84c2740-20f5-42ce-80b0-6ab3582d1710" }, "source": [ "fig = plt.figure()\n", "plt.plot(*zip(*ridge_coefs))\n", "plt.axvline(ridge_val_errors[min_val_err_indx, 0], c='k', ls='--')\n", "plt.xscale('log')\n", "plt.xlim(plt.xlim()[::-1]) # reverse axis\n", "plt.xlabel('alpha')\n", "plt.ylabel('weights')\n", "plt.title('Ridge coefficients as a function of the regularization')\n", "_ = plt.axis('tight')" ], "execution_count": 0, "outputs": [ { "output_type": "display_data", "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "tags": [], "needs_background": "light" } } ] }, { "cell_type": "markdown", "metadata": { "id": "_ErN_jkfWWb9", "colab_type": "text" }, "source": [ "#### Exercise:\n", "How do you explain the reason all curves above ``shrinks'' to 0?" ] }, { "cell_type": "markdown", "metadata": { "id": "-g5be8v8WWb-", "colab_type": "text" }, "source": [ "#### Solution\n" ] }, { "cell_type": "markdown", "metadata": { "id": "W6HFnIUPWWb_", "colab_type": "text" }, "source": [ "Further reading: lasso[1], cross-validation[2], grid search[3]\n", "\n", "[1] http://scikit-learn.org/stable/modules/linear_model.html#lasso\n", "\n", "[2] http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.KFold.html\n", "\n", "[3] http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html#sklearn.model_selection.GridSearchCV" ] }, { "cell_type": "markdown", "metadata": { "toc-hr-collapsed": true, "id": "RzlqTEQyWWcB", "colab_type": "text" }, "source": [ "# Deep neural network (for regression)" ] }, { "cell_type": "markdown", "metadata": { "id": "XKCvCCkfWWcC", "colab_type": "text" }, "source": [ "## Dataset" ] }, { "cell_type": "code", "metadata": { "id": "UT0cpFZ1WWcE", "colab_type": "code", "colab": {} }, "source": [ "x_train = diabetes_x_train\n", "y_train = diabetes_y_train\n", "\n", "x_test = diabetes_x_test\n", "y_test = diabetes_y_test\n", "\n", "x_val = diabetes_x_val\n", "y_val = diabetes_y_val" ], "execution_count": 0, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "tiTUYICYWWcM", "colab_type": "text" }, "source": [ "## Preprocessing" ] }, { "cell_type": "markdown", "metadata": { "id": "VJWlRCseWWcN", "colab_type": "text" }, "source": [ "Convert from *uint8* to float32 " ] }, { "cell_type": "code", "metadata": { "ExecuteTime": { "end_time": "2018-03-08T15:54:23.708412Z", "start_time": "2018-03-08T15:54:23.626394Z" }, "id": "mo6Aheb1WWcO", "colab_type": "code", "colab": {} }, "source": [ "x_train = x_train.astype('float32')\n", "x_test = x_test.astype('float32')" ], "execution_count": 0, "outputs": [] }, { "cell_type": "code", "metadata": { "ExecuteTime": { "end_time": "2018-03-08T15:54:24.848441Z", "start_time": "2018-03-08T15:54:24.842936Z" }, "id": "YycGhg6GWWcQ", "colab_type": "code", "colab": {}, "outputId": "3db3538a-2b82-4c6c-ff14-ea3cb92964b0" }, "source": [ "print(x_train.shape[0], 'train samples')\n", "print(x_test.shape[0], 'test samples')" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "300 train samples\n", "42 test samples\n" ], "name": "stdout" } ] }, { "cell_type": "markdown", "metadata": { "id": "Y1aOOtgvWWcU", "colab_type": "text" }, "source": [ "## MLP network" ] }, { "cell_type": "markdown", "metadata": { "id": "ID-YrHKpWWcW", "colab_type": "text" }, "source": [ "A sequential model is a linear stack of operations." ] }, { "cell_type": "code", "metadata": { "ExecuteTime": { "end_time": "2018-03-08T20:57:54.470109Z", "start_time": "2018-03-08T20:57:54.464953Z" }, "id": "4fUNXDP5WWcW", "colab_type": "code", "colab": {} }, "source": [ "model = keras.Sequential()" ], "execution_count": 0, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "eGooYti1WWcb", "colab_type": "text" }, "source": [ "Add a fully connected layer with ReLU activation function, followed by a dropout layer with probability 0.2, followed by a second fully connected layer with ReLU activation and another dropout layer. " ] }, { "cell_type": "code", "metadata": { "ExecuteTime": { "end_time": "2018-03-08T20:57:55.496990Z", "start_time": "2018-03-08T20:57:55.062638Z" }, "id": "0AL9NXORWWcc", "colab_type": "code", "colab": {} }, "source": [ "model.add(keras.layers.Dense(256, activation='relu', input_shape=(10,)))\n", "model.add(keras.layers.Dropout(0.2))\n", "model.add(keras.layers.Dense(256, activation='relu'))\n", "model.add(keras.layers.Dropout(0.2))" ], "execution_count": 0, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "htLqPfjyWWcg", "colab_type": "text" }, "source": [ "Transform the output of the last layer into probabilities" ] }, { "cell_type": "code", "metadata": { "ExecuteTime": { "end_time": "2018-03-08T20:57:56.240111Z", "start_time": "2018-03-08T20:57:56.156796Z" }, "id": "kYkq9-enWWch", "colab_type": "code", "colab": {} }, "source": [ "model.add(keras.layers.Dense(1, activation=None))" ], "execution_count": 0, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "JlFvS5JmWWck", "colab_type": "text" }, "source": [ "Print a nice summary of the model" ] }, { "cell_type": "code", "metadata": { "ExecuteTime": { "end_time": "2018-03-08T20:57:57.388715Z", "start_time": "2018-03-08T20:57:57.169589Z" }, "id": "9tOakQ_1WWcm", "colab_type": "code", "colab": {}, "outputId": "17e004df-2e6d-464d-8b10-d7c47eb1a241" }, "source": [ "model.summary()" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "_________________________________________________________________\n", "Layer (type) Output Shape Param # \n", "=================================================================\n", "dense_1 (Dense) (None, 256) 2816 \n", "_________________________________________________________________\n", "dropout_1 (Dropout) (None, 256) 0 \n", "_________________________________________________________________\n", "dense_2 (Dense) (None, 256) 65792 \n", "_________________________________________________________________\n", "dropout_2 (Dropout) (None, 256) 0 \n", "_________________________________________________________________\n", "dense_3 (Dense) (None, 1) 257 \n", "=================================================================\n", "Total params: 68,865\n", "Trainable params: 68,865\n", "Non-trainable params: 0\n", "_________________________________________________________________\n" ], "name": "stdout" } ] }, { "cell_type": "markdown", "metadata": { "ExecuteTime": { "end_time": "2018-03-08T15:50:38.930947Z", "start_time": "2018-03-08T15:50:38.925102Z" }, "id": "uN7CjkdIWWct", "colab_type": "text" }, "source": [ "Compile the model" ] }, { "cell_type": "code", "metadata": { "ExecuteTime": { "end_time": "2018-03-08T20:58:05.819688Z", "start_time": "2018-03-08T20:58:05.800142Z" }, "id": "s14kHxkfWWcu", "colab_type": "code", "colab": {} }, "source": [ "model.compile(loss='mean_squared_error',\n", " optimizer=keras.optimizers.Adam(),\n", " metrics=['accuracy'])" ], "execution_count": 0, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "fG3Xfh3PWWcw", "colab_type": "text" }, "source": [ "Train the model" ] }, { "cell_type": "markdown", "metadata": { "id": "67hL1BD7WWcx", "colab_type": "text" }, "source": [ "#### Exercise:\n", "We fit the model using the keras `model.fit()` function to the training data. Test a few different options for the ``epochs=`` argument: 10, 250, 1000. Which one is the best? Why? \n", "Be sure to use the validation data set we created above.\n", "Use batch size of 10 here.\n", "(Return the training history.)" ] }, { "cell_type": "code", "metadata": { "id": "FXvBRzEWWWcx", "colab_type": "code", "colab": {} }, "source": [ "history = model.fit('''your code''')" ], "execution_count": 0, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "dc03e9yaWWc4", "colab_type": "text" }, "source": [ "#### solution" ] }, { "cell_type": "code", "metadata": { "collapsed": true, "jupyter": { "outputs_hidden": true }, "id": "rQjd2HGrWWc6", "colab_type": "code", "colab": {}, "outputId": "b0ed7914-015c-4026-bc2c-5e303affe913" }, "source": [ "" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "WARNING (theano.tensor.blas): We did not find a dynamic library in the library_dir of the library we use for blas. If you use ATLAS, make sure to compile it with dynamics library.\n" ], "name": "stderr" }, { "output_type": "stream", "text": [ "Train on 300 samples, validate on 100 samples\n", "Epoch 1/250\n", "300/300 [==============================] - 0s 116us/step - loss: 27985.0929 - acc: 0.0000e+00 - val_loss: 31311.2330 - val_acc: 0.0000e+00\n", "Epoch 2/250\n", "300/300 [==============================] - 0s 159us/step - loss: 25267.7404 - acc: 0.0000e+00 - val_loss: 24918.2540 - val_acc: 0.0000e+00\n", "Epoch 3/250\n", "300/300 [==============================] - 0s 133us/step - loss: 15890.4863 - acc: 0.0000e+00 - val_loss: 10705.0036 - val_acc: 0.0000e+00\n", "Epoch 4/250\n", "300/300 [==============================] - 0s 138us/step - loss: 6291.5378 - acc: 0.0000e+00 - val_loss: 4182.1904 - val_acc: 0.0000e+00\n", "Epoch 5/250\n", "300/300 [==============================] - 0s 126us/step - loss: 4402.3172 - acc: 0.0033 - val_loss: 3802.0484 - val_acc: 0.0100\n", "Epoch 6/250\n", "300/300 [==============================] - 0s 140us/step - loss: 4072.4056 - acc: 0.0033 - val_loss: 3616.1641 - val_acc: 0.0000e+00\n", "Epoch 7/250\n", "300/300 [==============================] - 0s 104us/step - loss: 3893.0020 - acc: 0.0000e+00 - val_loss: 3429.1346 - val_acc: 0.0000e+00\n", "Epoch 8/250\n", "300/300 [==============================] - 0s 105us/step - loss: 3718.5984 - acc: 0.0067 - val_loss: 3319.1533 - val_acc: 0.0000e+00\n", "Epoch 9/250\n", "300/300 [==============================] - 0s 121us/step - loss: 3556.7206 - acc: 0.0067 - val_loss: 3266.4755 - val_acc: 0.0200\n", "Epoch 10/250\n", "300/300 [==============================] - 0s 158us/step - loss: 3578.8394 - acc: 0.0033 - val_loss: 3204.0344 - val_acc: 0.0000e+00\n", "Epoch 11/250\n", "300/300 [==============================] - 0s 139us/step - loss: 3448.7859 - acc: 0.0033 - val_loss: 3174.8099 - val_acc: 0.0100\n", "Epoch 12/250\n", "300/300 [==============================] - 0s 181us/step - loss: 3468.4799 - acc: 0.0033 - val_loss: 3159.5208 - val_acc: 0.0100\n", "Epoch 13/250\n", "300/300 [==============================] - 0s 329us/step - loss: 3312.5515 - acc: 0.0033 - val_loss: 3152.6879 - val_acc: 0.0000e+00\n", "Epoch 14/250\n", "300/300 [==============================] - 0s 109us/step - loss: 3256.8441 - acc: 0.0033 - val_loss: 3153.2115 - val_acc: 0.0100\n", "Epoch 15/250\n", "300/300 [==============================] - 0s 110us/step - loss: 3076.9757 - acc: 0.0133 - val_loss: 3149.3799 - val_acc: 0.0100\n", "Epoch 16/250\n", "300/300 [==============================] - 0s 101us/step - loss: 3216.2362 - acc: 0.0033 - val_loss: 3151.2897 - val_acc: 0.0100\n", "Epoch 17/250\n", "300/300 [==============================] - 0s 116us/step - loss: 3235.0403 - acc: 0.0100 - val_loss: 3163.9764 - val_acc: 0.0100\n", "Epoch 18/250\n", "300/300 [==============================] - 0s 103us/step - loss: 3145.4297 - acc: 0.0033 - val_loss: 3167.4936 - val_acc: 0.0100\n", "Epoch 19/250\n", "300/300 [==============================] - 0s 108us/step - loss: 3015.1817 - acc: 0.0067 - val_loss: 3174.2503 - val_acc: 0.0000e+00\n", "Epoch 20/250\n", "300/300 [==============================] - 0s 113us/step - loss: 3196.2100 - acc: 0.0067 - val_loss: 3192.3474 - val_acc: 0.0000e+00\n", "Epoch 21/250\n", "300/300 [==============================] - 0s 112us/step - loss: 3125.0537 - acc: 0.0067 - val_loss: 3195.8564 - val_acc: 0.0000e+00\n", "Epoch 22/250\n", "300/300 [==============================] - 0s 130us/step - loss: 3007.9182 - acc: 0.0133 - val_loss: 3214.5977 - val_acc: 0.0000e+00\n", "Epoch 23/250\n", "300/300 [==============================] - 0s 116us/step - loss: 3041.8160 - acc: 0.0067 - val_loss: 3235.3274 - val_acc: 0.0300\n", "Epoch 24/250\n", "300/300 [==============================] - 0s 183us/step - loss: 2917.2724 - acc: 0.0000e+00 - val_loss: 3242.3175 - val_acc: 0.0000e+00\n", "Epoch 25/250\n", "300/300 [==============================] - 0s 243us/step - loss: 3059.7666 - acc: 0.0000e+00 - val_loss: 3250.1745 - val_acc: 0.0100\n", "Epoch 26/250\n", "300/300 [==============================] - 0s 206us/step - loss: 3048.2299 - acc: 0.0033 - val_loss: 3256.1297 - val_acc: 0.0200\n", "Epoch 27/250\n", "300/300 [==============================] - 0s 251us/step - loss: 3004.4322 - acc: 0.0067 - val_loss: 3265.3918 - val_acc: 0.0000e+00\n", "Epoch 28/250\n", "300/300 [==============================] - 0s 295us/step - loss: 2967.3654 - acc: 0.0067 - val_loss: 3284.2993 - val_acc: 0.0000e+00\n", "Epoch 29/250\n", "300/300 [==============================] - 0s 257us/step - loss: 2934.2616 - acc: 0.0033 - val_loss: 3308.6663 - val_acc: 0.0200\n", "Epoch 30/250\n", "300/300 [==============================] - 0s 416us/step - loss: 3010.4486 - acc: 0.0033 - val_loss: 3282.8869 - val_acc: 0.0100\n", "Epoch 31/250\n", "300/300 [==============================] - 0s 260us/step - loss: 3064.6016 - acc: 0.0200 - val_loss: 3308.8851 - val_acc: 0.0200\n", "Epoch 32/250\n", "300/300 [==============================] - 0s 316us/step - loss: 2956.4155 - acc: 0.0000e+00 - val_loss: 3292.8272 - val_acc: 0.0100\n", "Epoch 33/250\n", "300/300 [==============================] - 0s 299us/step - loss: 3106.4745 - acc: 0.0067 - val_loss: 3305.0599 - val_acc: 0.0200\n", "Epoch 34/250\n", "300/300 [==============================] - 0s 176us/step - loss: 2921.8192 - acc: 0.0100 - val_loss: 3317.9316 - val_acc: 0.0300\n", "Epoch 35/250\n", "300/300 [==============================] - 0s 182us/step - loss: 3001.9666 - acc: 0.0033 - val_loss: 3312.6388 - val_acc: 0.0100\n", "Epoch 36/250\n", "300/300 [==============================] - 0s 175us/step - loss: 2918.8619 - acc: 0.0033 - val_loss: 3314.2383 - val_acc: 0.0000e+00\n", "Epoch 37/250\n", "300/300 [==============================] - 0s 178us/step - loss: 3054.1516 - acc: 0.0067 - val_loss: 3323.9633 - val_acc: 0.0200\n", "Epoch 38/250\n", "300/300 [==============================] - 0s 176us/step - loss: 3038.1861 - acc: 0.0100 - val_loss: 3324.5627 - val_acc: 0.0100\n", "Epoch 39/250\n", "300/300 [==============================] - 0s 195us/step - loss: 2899.7210 - acc: 0.0067 - val_loss: 3322.9500 - val_acc: 0.0300\n", "Epoch 40/250\n", "300/300 [==============================] - 0s 187us/step - loss: 2997.2308 - acc: 0.0067 - val_loss: 3320.1583 - val_acc: 0.0000e+00\n", "Epoch 41/250\n", "300/300 [==============================] - 0s 196us/step - loss: 3037.0351 - acc: 0.0100 - val_loss: 3329.8572 - val_acc: 0.0000e+00\n", "Epoch 42/250\n", "300/300 [==============================] - 0s 186us/step - loss: 3070.2741 - acc: 0.0133 - val_loss: 3336.4808 - val_acc: 0.0000e+00\n", "Epoch 43/250\n", "300/300 [==============================] - 0s 181us/step - loss: 2970.3168 - acc: 0.0067 - val_loss: 3331.2769 - val_acc: 0.0100\n", "Epoch 44/250\n", "300/300 [==============================] - 0s 234us/step - loss: 2994.4430 - acc: 0.0133 - val_loss: 3327.9265 - val_acc: 0.0000e+00\n", "Epoch 45/250\n", "300/300 [==============================] - 0s 244us/step - loss: 2913.1669 - acc: 0.0000e+00 - val_loss: 3331.4163 - val_acc: 0.0100\n", "Epoch 46/250\n", "300/300 [==============================] - 0s 213us/step - loss: 2869.5322 - acc: 0.0100 - val_loss: 3337.9521 - val_acc: 0.0200\n", "Epoch 47/250\n", "300/300 [==============================] - 0s 197us/step - loss: 2887.7280 - acc: 0.0100 - val_loss: 3340.8522 - val_acc: 0.0300\n", "Epoch 48/250\n", "300/300 [==============================] - 0s 193us/step - loss: 3018.3228 - acc: 0.0067 - val_loss: 3358.6480 - val_acc: 0.0000e+00\n", "Epoch 49/250\n", "300/300 [==============================] - 0s 271us/step - loss: 2985.7923 - acc: 0.0133 - val_loss: 3348.5203 - val_acc: 0.0000e+00\n", "Epoch 50/250\n", "300/300 [==============================] - 0s 187us/step - loss: 2939.0101 - acc: 0.0067 - val_loss: 3347.0019 - val_acc: 0.0200\n", "Epoch 51/250\n", "300/300 [==============================] - 0s 202us/step - loss: 3041.4082 - acc: 0.0133 - val_loss: 3344.6939 - val_acc: 0.0200\n", "Epoch 52/250\n", "300/300 [==============================] - 0s 209us/step - loss: 3038.2971 - acc: 0.0067 - val_loss: 3344.1650 - val_acc: 0.0000e+00\n", "Epoch 53/250\n", "300/300 [==============================] - 0s 261us/step - loss: 2944.3316 - acc: 0.0067 - val_loss: 3358.5848 - val_acc: 0.0200\n", "Epoch 54/250\n", "300/300 [==============================] - 0s 216us/step - loss: 2975.9091 - acc: 0.0067 - val_loss: 3395.2554 - val_acc: 0.0100\n", "Epoch 55/250\n", "300/300 [==============================] - 0s 240us/step - loss: 2977.6164 - acc: 0.0067 - val_loss: 3343.8314 - val_acc: 0.0200\n", "Epoch 56/250\n", "300/300 [==============================] - 0s 199us/step - loss: 3005.8316 - acc: 0.0133 - val_loss: 3346.2586 - val_acc: 0.0200\n", "Epoch 57/250\n", "300/300 [==============================] - 0s 251us/step - loss: 2939.6471 - acc: 0.0100 - val_loss: 3357.8762 - val_acc: 0.0000e+00\n", "Epoch 58/250\n", "300/300 [==============================] - 0s 267us/step - loss: 3034.3400 - acc: 0.0167 - val_loss: 3350.2684 - val_acc: 0.0000e+00\n", "Epoch 59/250\n", "300/300 [==============================] - 0s 366us/step - loss: 2938.5686 - acc: 0.0033 - val_loss: 3344.3517 - val_acc: 0.0000e+00\n", "Epoch 60/250\n", "300/300 [==============================] - 0s 300us/step - loss: 3026.6762 - acc: 0.0167 - val_loss: 3388.2749 - val_acc: 0.0000e+00\n", "Epoch 61/250\n", "300/300 [==============================] - 0s 339us/step - loss: 2909.8099 - acc: 0.0200 - val_loss: 3354.7024 - val_acc: 0.0100\n", "Epoch 62/250\n", "300/300 [==============================] - 0s 233us/step - loss: 3015.8335 - acc: 0.0033 - val_loss: 3347.0867 - val_acc: 0.0000e+00\n", "Epoch 63/250\n", "300/300 [==============================] - 0s 240us/step - loss: 2927.8227 - acc: 0.0033 - val_loss: 3366.4788 - val_acc: 0.0100\n", "Epoch 64/250\n", "300/300 [==============================] - 0s 284us/step - loss: 2887.0659 - acc: 0.0067 - val_loss: 3392.2019 - val_acc: 0.0000e+00\n", "Epoch 65/250\n", "300/300 [==============================] - 0s 184us/step - loss: 2962.5496 - acc: 0.0133 - val_loss: 3351.0828 - val_acc: 0.0000e+00\n", "Epoch 66/250\n", "300/300 [==============================] - 0s 183us/step - loss: 2917.4077 - acc: 0.0067 - val_loss: 3364.5506 - val_acc: 0.0100\n", "Epoch 67/250\n", "300/300 [==============================] - 0s 213us/step - loss: 3036.6854 - acc: 0.0033 - val_loss: 3379.4619 - val_acc: 0.0000e+00\n", "Epoch 68/250\n", "300/300 [==============================] - 0s 198us/step - loss: 2978.0062 - acc: 0.0000e+00 - val_loss: 3365.3889 - val_acc: 0.0100\n", "Epoch 69/250\n", "300/300 [==============================] - 0s 287us/step - loss: 3023.9459 - acc: 0.0100 - val_loss: 3376.2271 - val_acc: 0.0100\n", "Epoch 70/250\n", "300/300 [==============================] - 0s 189us/step - loss: 2905.0431 - acc: 0.0067 - val_loss: 3356.7376 - val_acc: 0.0000e+00\n", "Epoch 71/250\n", "300/300 [==============================] - 0s 184us/step - loss: 2855.6369 - acc: 0.0067 - val_loss: 3349.0820 - val_acc: 0.0000e+00\n", "Epoch 72/250\n", "300/300 [==============================] - 0s 241us/step - loss: 2965.2712 - acc: 0.0000e+00 - val_loss: 3356.6193 - val_acc: 0.0000e+00\n", "Epoch 73/250\n", "300/300 [==============================] - 0s 266us/step - loss: 2924.1198 - acc: 0.0033 - val_loss: 3355.0703 - val_acc: 0.0000e+00\n", "Epoch 74/250\n", "300/300 [==============================] - 0s 258us/step - loss: 3040.9976 - acc: 0.0033 - val_loss: 3346.9421 - val_acc: 0.0000e+00\n", "Epoch 75/250\n", "300/300 [==============================] - 0s 275us/step - loss: 2925.3451 - acc: 0.0000e+00 - val_loss: 3354.1064 - val_acc: 0.0100\n", "Epoch 76/250\n", "300/300 [==============================] - 0s 214us/step - loss: 2940.0560 - acc: 0.0000e+00 - val_loss: 3357.3828 - val_acc: 0.0100\n", "Epoch 77/250\n", "300/300 [==============================] - 0s 202us/step - loss: 2917.7342 - acc: 0.0100 - val_loss: 3344.7523 - val_acc: 0.0300\n", "Epoch 78/250\n", "300/300 [==============================] - 0s 200us/step - loss: 2825.7883 - acc: 0.0067 - val_loss: 3361.4930 - val_acc: 0.0000e+00\n", "Epoch 79/250\n", "300/300 [==============================] - 0s 212us/step - loss: 2887.8645 - acc: 0.0033 - val_loss: 3365.6667 - val_acc: 0.0100\n", "Epoch 80/250\n", "300/300 [==============================] - 0s 250us/step - loss: 2862.8755 - acc: 0.0000e+00 - val_loss: 3365.4638 - val_acc: 0.0000e+00\n", "Epoch 81/250\n", "300/300 [==============================] - 0s 238us/step - loss: 2891.5708 - acc: 0.0033 - val_loss: 3361.8715 - val_acc: 0.0000e+00\n", "Epoch 82/250\n", "300/300 [==============================] - 0s 250us/step - loss: 2877.9706 - acc: 0.0067 - val_loss: 3371.0642 - val_acc: 0.0100\n", "Epoch 83/250\n", "300/300 [==============================] - 0s 251us/step - loss: 2961.9799 - acc: 0.0100 - val_loss: 3376.8147 - val_acc: 0.0000e+00\n", "Epoch 84/250\n", "300/300 [==============================] - 0s 213us/step - loss: 2894.8800 - acc: 0.0100 - val_loss: 3363.5779 - val_acc: 0.0000e+00\n", "Epoch 85/250\n", "300/300 [==============================] - 0s 197us/step - loss: 2944.8217 - acc: 0.0100 - val_loss: 3359.1972 - val_acc: 0.0000e+00\n", "Epoch 86/250\n", "300/300 [==============================] - 0s 198us/step - loss: 2890.1224 - acc: 0.0100 - val_loss: 3376.8301 - val_acc: 0.0000e+00\n", "Epoch 87/250\n", "300/300 [==============================] - 0s 225us/step - loss: 2872.0960 - acc: 0.0000e+00 - val_loss: 3358.7615 - val_acc: 0.0000e+00\n", "Epoch 88/250\n", "300/300 [==============================] - 0s 263us/step - loss: 2829.0352 - acc: 0.0100 - val_loss: 3351.7537 - val_acc: 0.0100\n", "Epoch 89/250\n", "300/300 [==============================] - 0s 539us/step - loss: 2948.1755 - acc: 0.0033 - val_loss: 3356.7546 - val_acc: 0.0100\n", "Epoch 90/250\n", "300/300 [==============================] - 0s 269us/step - loss: 2896.2610 - acc: 0.0100 - val_loss: 3380.6451 - val_acc: 0.0000e+00\n", "Epoch 91/250\n", "300/300 [==============================] - 0s 268us/step - loss: 2878.2232 - acc: 0.0000e+00 - val_loss: 3359.2982 - val_acc: 0.0000e+00\n", "Epoch 92/250\n", "300/300 [==============================] - 0s 262us/step - loss: 2863.6826 - acc: 0.0033 - val_loss: 3354.9532 - val_acc: 0.0000e+00\n", "Epoch 93/250\n", "300/300 [==============================] - 0s 254us/step - loss: 2918.1316 - acc: 0.0033 - val_loss: 3346.3704 - val_acc: 0.0000e+00\n", "Epoch 94/250\n", "300/300 [==============================] - 0s 251us/step - loss: 2874.7118 - acc: 0.0100 - val_loss: 3358.1898 - val_acc: 0.0100\n", "Epoch 95/250\n", "300/300 [==============================] - 0s 261us/step - loss: 2907.0317 - acc: 0.0067 - val_loss: 3360.9920 - val_acc: 0.0000e+00\n", "Epoch 96/250\n", "300/300 [==============================] - 0s 238us/step - loss: 2808.5408 - acc: 0.0100 - val_loss: 3363.5284 - val_acc: 0.0000e+00\n", "Epoch 97/250\n", "300/300 [==============================] - 0s 481us/step - loss: 2898.9596 - acc: 0.0000e+00 - val_loss: 3356.0041 - val_acc: 0.0000e+00\n", "Epoch 98/250\n", "300/300 [==============================] - 0s 340us/step - loss: 2891.9798 - acc: 0.0100 - val_loss: 3365.6841 - val_acc: 0.0000e+00\n", "Epoch 99/250\n", "300/300 [==============================] - 0s 393us/step - loss: 2913.5258 - acc: 0.0000e+00 - val_loss: 3383.5806 - val_acc: 0.0100\n", "Epoch 100/250\n", "300/300 [==============================] - 0s 296us/step - loss: 2966.6057 - acc: 0.0167 - val_loss: 3366.3526 - val_acc: 0.0000e+00\n", "Epoch 101/250\n", "300/300 [==============================] - 0s 256us/step - loss: 2928.6278 - acc: 0.0067 - val_loss: 3368.7556 - val_acc: 0.0000e+00\n", "Epoch 102/250\n", "300/300 [==============================] - 0s 436us/step - loss: 2818.2621 - acc: 0.0067 - val_loss: 3367.4696 - val_acc: 0.0200\n", "Epoch 103/250\n", "300/300 [==============================] - 0s 496us/step - loss: 2828.9921 - acc: 0.0033 - val_loss: 3359.1609 - val_acc: 0.0000e+00\n", "Epoch 104/250\n", "300/300 [==============================] - 0s 356us/step - loss: 2882.6965 - acc: 0.0067 - val_loss: 3372.6219 - val_acc: 0.0200\n", "Epoch 105/250\n", "300/300 [==============================] - 0s 236us/step - loss: 2890.8671 - acc: 0.0100 - val_loss: 3367.1667 - val_acc: 0.0100\n", "Epoch 106/250\n", "300/300 [==============================] - 0s 250us/step - loss: 2898.4622 - acc: 0.0067 - val_loss: 3374.6791 - val_acc: 0.0000e+00\n", "Epoch 107/250\n", "300/300 [==============================] - 0s 261us/step - loss: 2921.6444 - acc: 0.0067 - val_loss: 3363.6923 - val_acc: 0.0000e+00\n", "Epoch 108/250\n", "300/300 [==============================] - 0s 291us/step - loss: 2864.4159 - acc: 0.0067 - val_loss: 3361.5389 - val_acc: 0.0000e+00\n", "Epoch 109/250\n", "300/300 [==============================] - 0s 280us/step - loss: 2907.3184 - acc: 0.0100 - val_loss: 3362.9809 - val_acc: 0.0000e+00\n", "Epoch 110/250\n", "300/300 [==============================] - 0s 290us/step - loss: 2970.7348 - acc: 0.0067 - val_loss: 3364.5041 - val_acc: 0.0000e+00\n", "Epoch 111/250\n", "300/300 [==============================] - 0s 268us/step - loss: 2834.8566 - acc: 0.0033 - val_loss: 3366.0151 - val_acc: 0.0100\n", "Epoch 112/250\n", "300/300 [==============================] - 0s 264us/step - loss: 2839.2248 - acc: 0.0100 - val_loss: 3361.1204 - val_acc: 0.0000e+00\n", "Epoch 113/250\n", "300/300 [==============================] - 0s 261us/step - loss: 2949.9381 - acc: 0.0133 - val_loss: 3351.4377 - val_acc: 0.0000e+00\n", "Epoch 114/250\n", "300/300 [==============================] - 0s 249us/step - loss: 2977.6325 - acc: 0.0033 - val_loss: 3356.0159 - val_acc: 0.0100\n", "Epoch 115/250\n", "300/300 [==============================] - 0s 229us/step - loss: 2858.3151 - acc: 0.0133 - val_loss: 3352.9821 - val_acc: 0.0000e+00\n", "Epoch 116/250\n", "300/300 [==============================] - 0s 227us/step - loss: 2835.6103 - acc: 0.0100 - val_loss: 3364.3331 - val_acc: 0.0100\n", "Epoch 117/250\n", "300/300 [==============================] - 0s 249us/step - loss: 2837.6678 - acc: 0.0033 - val_loss: 3388.2248 - val_acc: 0.0100\n", "Epoch 118/250\n", "300/300 [==============================] - 0s 255us/step - loss: 2840.2913 - acc: 0.0100 - val_loss: 3371.1463 - val_acc: 0.0100\n", "Epoch 119/250\n", "300/300 [==============================] - 0s 234us/step - loss: 2822.6310 - acc: 0.0100 - val_loss: 3380.5435 - val_acc: 0.0100\n", "Epoch 120/250\n", "300/300 [==============================] - 0s 246us/step - loss: 2872.9566 - acc: 0.0000e+00 - val_loss: 3379.6180 - val_acc: 0.0100\n", "Epoch 121/250\n", "300/300 [==============================] - 0s 245us/step - loss: 2780.4865 - acc: 0.0000e+00 - val_loss: 3382.0658 - val_acc: 0.0000e+00\n", "Epoch 122/250\n", "300/300 [==============================] - 0s 256us/step - loss: 2839.8282 - acc: 0.0033 - val_loss: 3377.1983 - val_acc: 0.0000e+00\n", "Epoch 123/250\n", "300/300 [==============================] - 0s 236us/step - loss: 2891.4362 - acc: 0.0067 - val_loss: 3364.6224 - val_acc: 0.0100\n", "Epoch 124/250\n", "300/300 [==============================] - 0s 248us/step - loss: 2883.8742 - acc: 0.0000e+00 - val_loss: 3373.9325 - val_acc: 0.0000e+00\n", "Epoch 125/250\n", "300/300 [==============================] - 0s 240us/step - loss: 2818.3066 - acc: 0.0033 - val_loss: 3366.5711 - val_acc: 0.0200\n", "Epoch 126/250\n", "300/300 [==============================] - 0s 319us/step - loss: 2885.0146 - acc: 0.0067 - val_loss: 3352.2925 - val_acc: 0.0000e+00\n", "Epoch 127/250\n", "300/300 [==============================] - 0s 241us/step - loss: 2845.0303 - acc: 0.0000e+00 - val_loss: 3381.6147 - val_acc: 0.0100\n", "Epoch 128/250\n", "300/300 [==============================] - 0s 226us/step - loss: 2822.0516 - acc: 0.0033 - val_loss: 3352.7386 - val_acc: 0.0000e+00\n", "Epoch 129/250\n", "300/300 [==============================] - 0s 248us/step - loss: 2800.1379 - acc: 0.0067 - val_loss: 3357.6040 - val_acc: 0.0200\n", "Epoch 130/250\n", "300/300 [==============================] - 0s 236us/step - loss: 2933.3109 - acc: 0.0067 - val_loss: 3376.3336 - val_acc: 0.0100\n", "Epoch 131/250\n", "300/300 [==============================] - 0s 242us/step - loss: 2861.8446 - acc: 0.0067 - val_loss: 3349.4051 - val_acc: 0.0000e+00\n", "Epoch 132/250\n", "300/300 [==============================] - 0s 247us/step - loss: 2939.9043 - acc: 0.0067 - val_loss: 3352.4214 - val_acc: 0.0100\n", "Epoch 133/250\n", "300/300 [==============================] - 0s 245us/step - loss: 2899.7942 - acc: 0.0100 - val_loss: 3351.1096 - val_acc: 0.0100\n", "Epoch 134/250\n", "300/300 [==============================] - 0s 245us/step - loss: 2799.2278 - acc: 0.0033 - val_loss: 3381.0706 - val_acc: 0.0000e+00\n", "Epoch 135/250\n", "300/300 [==============================] - 0s 240us/step - loss: 2899.2665 - acc: 0.0033 - val_loss: 3364.8042 - val_acc: 0.0000e+00\n", "Epoch 136/250\n", "300/300 [==============================] - 0s 237us/step - loss: 2888.7587 - acc: 0.0033 - val_loss: 3359.6487 - val_acc: 0.0000e+00\n", "Epoch 137/250\n", "300/300 [==============================] - 0s 230us/step - loss: 2867.4090 - acc: 0.0067 - val_loss: 3357.6555 - val_acc: 0.0100\n", "Epoch 138/250\n", "300/300 [==============================] - 0s 235us/step - loss: 2856.0953 - acc: 0.0067 - val_loss: 3358.2329 - val_acc: 0.0100\n", "Epoch 139/250\n", "300/300 [==============================] - 0s 235us/step - loss: 2892.1566 - acc: 0.0133 - val_loss: 3388.7090 - val_acc: 0.0000e+00\n", "Epoch 140/250\n", "300/300 [==============================] - 0s 214us/step - loss: 2752.5601 - acc: 0.0067 - val_loss: 3359.5710 - val_acc: 0.0100\n", "Epoch 141/250\n", "300/300 [==============================] - 0s 229us/step - loss: 2744.6792 - acc: 0.0100 - val_loss: 3357.3278 - val_acc: 0.0100\n", "Epoch 142/250\n", "300/300 [==============================] - 0s 245us/step - loss: 2841.8534 - acc: 0.0033 - val_loss: 3355.1685 - val_acc: 0.0000e+00\n", "Epoch 143/250\n", "300/300 [==============================] - 0s 282us/step - loss: 2769.3219 - acc: 0.0033 - val_loss: 3366.2805 - val_acc: 0.0000e+00\n", "Epoch 144/250\n", "300/300 [==============================] - 0s 245us/step - loss: 2758.1114 - acc: 0.0000e+00 - val_loss: 3364.1664 - val_acc: 0.0000e+00\n", "Epoch 145/250\n", "300/300 [==============================] - 0s 283us/step - loss: 2924.9141 - acc: 0.0100 - val_loss: 3383.7232 - val_acc: 0.0000e+00\n", "Epoch 146/250\n", "300/300 [==============================] - 0s 285us/step - loss: 2849.3540 - acc: 0.0133 - val_loss: 3350.8228 - val_acc: 0.0000e+00\n", "Epoch 147/250\n", "300/300 [==============================] - 0s 279us/step - loss: 2796.6000 - acc: 0.0133 - val_loss: 3398.0405 - val_acc: 0.0000e+00\n", "Epoch 148/250\n", "300/300 [==============================] - 0s 261us/step - loss: 2824.9408 - acc: 0.0000e+00 - val_loss: 3367.9190 - val_acc: 0.0000e+00\n", "Epoch 149/250\n", "300/300 [==============================] - 0s 425us/step - loss: 2850.8479 - acc: 0.0000e+00 - val_loss: 3363.8139 - val_acc: 0.0200\n", "Epoch 150/250\n", "300/300 [==============================] - 0s 270us/step - loss: 2867.5740 - acc: 0.0067 - val_loss: 3355.2617 - val_acc: 0.0200\n", "Epoch 151/250\n", "300/300 [==============================] - 0s 242us/step - loss: 2871.7336 - acc: 0.0067 - val_loss: 3378.5278 - val_acc: 0.0000e+00\n", "Epoch 152/250\n", "300/300 [==============================] - 0s 260us/step - loss: 2840.3018 - acc: 0.0167 - val_loss: 3350.5047 - val_acc: 0.0100\n", "Epoch 153/250\n", "300/300 [==============================] - 0s 259us/step - loss: 2925.9032 - acc: 0.0033 - val_loss: 3368.5737 - val_acc: 0.0000e+00\n", "Epoch 154/250\n", "300/300 [==============================] - 0s 246us/step - loss: 2802.3052 - acc: 0.0067 - val_loss: 3350.0795 - val_acc: 0.0200\n", "Epoch 155/250\n", "300/300 [==============================] - 0s 242us/step - loss: 2791.4675 - acc: 0.0033 - val_loss: 3352.7060 - val_acc: 0.0000e+00\n", "Epoch 156/250\n", "300/300 [==============================] - 0s 259us/step - loss: 2892.8159 - acc: 0.0000e+00 - val_loss: 3339.9428 - val_acc: 0.0100\n", "Epoch 157/250\n", "300/300 [==============================] - 0s 244us/step - loss: 2792.5852 - acc: 0.0133 - val_loss: 3377.7392 - val_acc: 0.0100\n", "Epoch 158/250\n", "300/300 [==============================] - 0s 224us/step - loss: 2811.4323 - acc: 0.0100 - val_loss: 3339.5831 - val_acc: 0.0100\n", "Epoch 159/250\n", "300/300 [==============================] - 0s 235us/step - loss: 2856.8374 - acc: 0.0100 - val_loss: 3352.2865 - val_acc: 0.0100\n", "Epoch 160/250\n", "300/300 [==============================] - 0s 251us/step - loss: 2814.3642 - acc: 0.0033 - val_loss: 3346.0630 - val_acc: 0.0000e+00\n", "Epoch 161/250\n", "300/300 [==============================] - 0s 248us/step - loss: 2885.3259 - acc: 0.0100 - val_loss: 3347.3454 - val_acc: 0.0100\n", "Epoch 162/250\n", "300/300 [==============================] - 0s 218us/step - loss: 2896.0862 - acc: 0.0100 - val_loss: 3337.3640 - val_acc: 0.0000e+00\n", "Epoch 163/250\n", "300/300 [==============================] - 0s 238us/step - loss: 2868.6820 - acc: 0.0067 - val_loss: 3340.4796 - val_acc: 0.0100\n", "Epoch 164/250\n", "300/300 [==============================] - 0s 230us/step - loss: 2830.0750 - acc: 0.0100 - val_loss: 3357.6423 - val_acc: 0.0100\n", "Epoch 165/250\n", "300/300 [==============================] - 0s 271us/step - loss: 2959.5695 - acc: 0.0067 - val_loss: 3357.3072 - val_acc: 0.0100\n", "Epoch 166/250\n", "300/300 [==============================] - 0s 221us/step - loss: 2788.8653 - acc: 0.0000e+00 - val_loss: 3369.6482 - val_acc: 0.0100\n", "Epoch 167/250\n", "300/300 [==============================] - 0s 251us/step - loss: 2885.1283 - acc: 0.0000e+00 - val_loss: 3344.5974 - val_acc: 0.0100\n", "Epoch 168/250\n", "300/300 [==============================] - 0s 259us/step - loss: 2783.9227 - acc: 0.0200 - val_loss: 3347.2856 - val_acc: 0.0300\n", "Epoch 169/250\n", "300/300 [==============================] - 0s 281us/step - loss: 2761.2471 - acc: 0.0000e+00 - val_loss: 3353.1295 - val_acc: 0.0100\n", "Epoch 170/250\n", "300/300 [==============================] - 0s 227us/step - loss: 2787.5713 - acc: 0.0100 - val_loss: 3346.5148 - val_acc: 0.0000e+00\n", "Epoch 171/250\n", "300/300 [==============================] - 0s 225us/step - loss: 2899.2276 - acc: 0.0067 - val_loss: 3345.8813 - val_acc: 0.0000e+00\n", "Epoch 172/250\n", "300/300 [==============================] - 0s 222us/step - loss: 2917.7953 - acc: 0.0000e+00 - val_loss: 3337.8445 - val_acc: 0.0000e+00\n", "Epoch 173/250\n", "300/300 [==============================] - 0s 234us/step - loss: 2880.1668 - acc: 0.0167 - val_loss: 3361.4292 - val_acc: 0.0100\n", "Epoch 174/250\n", "300/300 [==============================] - 0s 237us/step - loss: 2868.1595 - acc: 0.0067 - val_loss: 3345.0705 - val_acc: 0.0100\n", "Epoch 175/250\n", "300/300 [==============================] - 0s 256us/step - loss: 2762.7785 - acc: 0.0100 - val_loss: 3352.3526 - val_acc: 0.0000e+00\n", "Epoch 176/250\n", "300/300 [==============================] - 0s 235us/step - loss: 2808.6228 - acc: 0.0000e+00 - val_loss: 3349.3308 - val_acc: 0.0000e+00\n", "Epoch 177/250\n", "300/300 [==============================] - 0s 229us/step - loss: 2895.4136 - acc: 0.0033 - val_loss: 3349.8952 - val_acc: 0.0000e+00\n", "Epoch 178/250\n", "300/300 [==============================] - 0s 226us/step - loss: 2813.7553 - acc: 0.0067 - val_loss: 3369.0981 - val_acc: 0.0000e+00\n", "Epoch 179/250\n", "300/300 [==============================] - 0s 214us/step - loss: 2815.2142 - acc: 0.0133 - val_loss: 3338.5011 - val_acc: 0.0000e+00\n", "Epoch 180/250\n", "300/300 [==============================] - 0s 230us/step - loss: 2894.0146 - acc: 0.0033 - val_loss: 3331.4555 - val_acc: 0.0100\n", "Epoch 181/250\n", "300/300 [==============================] - 0s 265us/step - loss: 2695.6905 - acc: 0.0000e+00 - val_loss: 3341.2087 - val_acc: 0.0000e+00\n", "Epoch 182/250\n", "300/300 [==============================] - 0s 256us/step - loss: 2923.8771 - acc: 0.0067 - val_loss: 3356.5096 - val_acc: 0.0100\n", "Epoch 183/250\n", "300/300 [==============================] - 0s 243us/step - loss: 2835.1919 - acc: 0.0133 - val_loss: 3336.4372 - val_acc: 0.0000e+00\n", "Epoch 184/250\n", "300/300 [==============================] - 0s 228us/step - loss: 2777.8915 - acc: 0.0067 - val_loss: 3345.3002 - val_acc: 0.0100\n", "Epoch 185/250\n", "300/300 [==============================] - 0s 224us/step - loss: 2786.1502 - acc: 0.0133 - val_loss: 3347.1792 - val_acc: 0.0200\n", "Epoch 186/250\n", "300/300 [==============================] - 0s 235us/step - loss: 2829.6999 - acc: 0.0133 - val_loss: 3350.6206 - val_acc: 0.0000e+00\n", "Epoch 187/250\n", "300/300 [==============================] - 0s 259us/step - loss: 2822.7634 - acc: 0.0167 - val_loss: 3326.4215 - val_acc: 0.0100\n", "Epoch 188/250\n", "300/300 [==============================] - 0s 221us/step - loss: 2833.0772 - acc: 0.0100 - val_loss: 3333.0840 - val_acc: 0.0000e+00\n", "Epoch 189/250\n", "300/300 [==============================] - 0s 245us/step - loss: 2824.4638 - acc: 0.0033 - val_loss: 3321.9615 - val_acc: 0.0000e+00\n", "Epoch 190/250\n", "300/300 [==============================] - 0s 228us/step - loss: 2780.7137 - acc: 0.0067 - val_loss: 3339.2555 - val_acc: 0.0100\n", "Epoch 191/250\n", "300/300 [==============================] - 0s 239us/step - loss: 2933.2957 - acc: 0.0067 - val_loss: 3346.4781 - val_acc: 0.0000e+00\n", "Epoch 192/250\n", "300/300 [==============================] - 0s 246us/step - loss: 2724.0190 - acc: 0.0067 - val_loss: 3326.1308 - val_acc: 0.0000e+00\n", "Epoch 193/250\n", "300/300 [==============================] - 0s 272us/step - loss: 2899.1193 - acc: 0.0067 - val_loss: 3321.2914 - val_acc: 0.0100\n", "Epoch 194/250\n", "300/300 [==============================] - 0s 237us/step - loss: 2835.9470 - acc: 0.0100 - val_loss: 3323.7377 - val_acc: 0.0100\n", "Epoch 195/250\n", "300/300 [==============================] - 0s 210us/step - loss: 2784.8476 - acc: 0.0100 - val_loss: 3352.2083 - val_acc: 0.0100\n", "Epoch 196/250\n", "300/300 [==============================] - 0s 287us/step - loss: 2800.0992 - acc: 0.0100 - val_loss: 3347.8925 - val_acc: 0.0000e+00\n", "Epoch 197/250\n", "300/300 [==============================] - 0s 237us/step - loss: 2777.9417 - acc: 0.0100 - val_loss: 3344.8497 - val_acc: 0.0100\n", "Epoch 198/250\n", "300/300 [==============================] - 0s 215us/step - loss: 2802.3319 - acc: 0.0100 - val_loss: 3330.7426 - val_acc: 0.0100\n", "Epoch 199/250\n", "300/300 [==============================] - 0s 250us/step - loss: 2741.4973 - acc: 0.0067 - val_loss: 3335.7172 - val_acc: 0.0100\n", "Epoch 200/250\n", "300/300 [==============================] - 0s 285us/step - loss: 2752.1326 - acc: 0.0033 - val_loss: 3336.9117 - val_acc: 0.0100\n", "Epoch 201/250\n", "300/300 [==============================] - 0s 232us/step - loss: 2768.5882 - acc: 0.0067 - val_loss: 3364.2146 - val_acc: 0.0000e+00\n", "Epoch 202/250\n", "300/300 [==============================] - 0s 235us/step - loss: 2892.6092 - acc: 0.0067 - val_loss: 3334.2448 - val_acc: 0.0000e+00\n", "Epoch 203/250\n", "300/300 [==============================] - 0s 292us/step - loss: 2795.3765 - acc: 0.0033 - val_loss: 3332.9697 - val_acc: 0.0100\n", "Epoch 204/250\n", "300/300 [==============================] - 0s 254us/step - loss: 2818.9299 - acc: 0.0067 - val_loss: 3337.0490 - val_acc: 0.0000e+00\n", "Epoch 205/250\n", "300/300 [==============================] - 0s 237us/step - loss: 2750.6956 - acc: 0.0100 - val_loss: 3335.4539 - val_acc: 0.0100\n", "Epoch 206/250\n", "300/300 [==============================] - 0s 363us/step - loss: 2799.2768 - acc: 0.0067 - val_loss: 3339.8507 - val_acc: 0.0000e+00\n", "Epoch 207/250\n", "300/300 [==============================] - 0s 236us/step - loss: 2920.0376 - acc: 0.0033 - val_loss: 3348.1749 - val_acc: 0.0100\n", "Epoch 208/250\n", "300/300 [==============================] - 0s 242us/step - loss: 2802.6455 - acc: 0.0067 - val_loss: 3332.6731 - val_acc: 0.0000e+00\n", "Epoch 209/250\n", "300/300 [==============================] - 0s 240us/step - loss: 2860.2180 - acc: 0.0067 - val_loss: 3410.9901 - val_acc: 0.0000e+00\n", "Epoch 210/250\n", "300/300 [==============================] - 0s 261us/step - loss: 2871.9707 - acc: 0.0067 - val_loss: 3327.5119 - val_acc: 0.0000e+00\n", "Epoch 211/250\n", "300/300 [==============================] - 0s 246us/step - loss: 2831.6888 - acc: 0.0067 - val_loss: 3336.0602 - val_acc: 0.0100\n", "Epoch 212/250\n", "300/300 [==============================] - 0s 250us/step - loss: 2705.5151 - acc: 0.0000e+00 - val_loss: 3353.6303 - val_acc: 0.0000e+00\n", "Epoch 213/250\n", "300/300 [==============================] - 0s 236us/step - loss: 2833.4576 - acc: 0.0133 - val_loss: 3340.6306 - val_acc: 0.0000e+00\n", "Epoch 214/250\n", "300/300 [==============================] - 0s 244us/step - loss: 2800.2824 - acc: 0.0067 - val_loss: 3352.2601 - val_acc: 0.0000e+00\n", "Epoch 215/250\n", "300/300 [==============================] - 0s 246us/step - loss: 2645.9646 - acc: 0.0167 - val_loss: 3330.0506 - val_acc: 0.0000e+00\n", "Epoch 216/250\n", "300/300 [==============================] - 0s 267us/step - loss: 2760.2898 - acc: 0.0067 - val_loss: 3330.3551 - val_acc: 0.0100\n", "Epoch 217/250\n", "300/300 [==============================] - 0s 221us/step - loss: 2827.9948 - acc: 0.0033 - val_loss: 3365.4443 - val_acc: 0.0000e+00\n", "Epoch 218/250\n", "300/300 [==============================] - 0s 249us/step - loss: 2778.2274 - acc: 0.0033 - val_loss: 3316.0659 - val_acc: 0.0100\n", "Epoch 219/250\n", "300/300 [==============================] - 0s 244us/step - loss: 2798.4407 - acc: 0.0033 - val_loss: 3309.4212 - val_acc: 0.0000e+00\n", "Epoch 220/250\n", "300/300 [==============================] - 0s 272us/step - loss: 2724.2959 - acc: 0.0067 - val_loss: 3326.4025 - val_acc: 0.0000e+00\n", "Epoch 221/250\n", "300/300 [==============================] - 0s 248us/step - loss: 2795.5134 - acc: 0.0067 - val_loss: 3332.6608 - val_acc: 0.0000e+00\n", "Epoch 222/250\n", "300/300 [==============================] - 0s 271us/step - loss: 2812.1774 - acc: 0.0100 - val_loss: 3316.8451 - val_acc: 0.0100\n", "Epoch 223/250\n", "300/300 [==============================] - 0s 230us/step - loss: 2791.9944 - acc: 0.0033 - val_loss: 3356.0685 - val_acc: 0.0100\n", "Epoch 224/250\n", "300/300 [==============================] - 0s 252us/step - loss: 2803.6538 - acc: 0.0133 - val_loss: 3318.4573 - val_acc: 0.0000e+00\n", "Epoch 225/250\n", "300/300 [==============================] - 0s 275us/step - loss: 2868.9633 - acc: 0.0100 - val_loss: 3338.9733 - val_acc: 0.0000e+00\n", "Epoch 226/250\n", "300/300 [==============================] - 0s 216us/step - loss: 2781.2636 - acc: 0.0033 - val_loss: 3348.3410 - val_acc: 0.0100\n", "Epoch 227/250\n", "300/300 [==============================] - 0s 237us/step - loss: 2837.4423 - acc: 0.0100 - val_loss: 3328.3760 - val_acc: 0.0100\n", "Epoch 228/250\n", "300/300 [==============================] - 0s 227us/step - loss: 2756.4054 - acc: 0.0033 - val_loss: 3344.6027 - val_acc: 0.0000e+00\n", "Epoch 229/250\n", "300/300 [==============================] - 0s 228us/step - loss: 2792.4201 - acc: 0.0100 - val_loss: 3335.0267 - val_acc: 0.0000e+00\n", "Epoch 230/250\n", "300/300 [==============================] - 0s 233us/step - loss: 2781.3202 - acc: 0.0033 - val_loss: 3331.5895 - val_acc: 0.0200\n", "Epoch 231/250\n", "300/300 [==============================] - 0s 225us/step - loss: 2743.9708 - acc: 0.0100 - val_loss: 3330.5106 - val_acc: 0.0000e+00\n", "Epoch 232/250\n", "300/300 [==============================] - 0s 248us/step - loss: 2810.8430 - acc: 0.0100 - val_loss: 3328.5050 - val_acc: 0.0100\n", "Epoch 233/250\n", "300/300 [==============================] - 0s 236us/step - loss: 2844.3129 - acc: 0.0033 - val_loss: 3325.9525 - val_acc: 0.0000e+00\n", "Epoch 234/250\n", "300/300 [==============================] - 0s 218us/step - loss: 2798.0975 - acc: 0.0067 - val_loss: 3326.4553 - val_acc: 0.0000e+00\n", "Epoch 235/250\n", "300/300 [==============================] - 0s 229us/step - loss: 2836.5051 - acc: 0.0100 - val_loss: 3329.0357 - val_acc: 0.0100\n", "Epoch 236/250\n", "300/300 [==============================] - 0s 241us/step - loss: 2838.3929 - acc: 0.0033 - val_loss: 3322.5062 - val_acc: 0.0200\n", "Epoch 237/250\n", "300/300 [==============================] - 0s 242us/step - loss: 2882.3070 - acc: 0.0000e+00 - val_loss: 3319.8348 - val_acc: 0.0000e+00\n", "Epoch 238/250\n", "300/300 [==============================] - 0s 211us/step - loss: 2807.4123 - acc: 0.0067 - val_loss: 3314.6729 - val_acc: 0.0100\n", "Epoch 239/250\n", "300/300 [==============================] - 0s 252us/step - loss: 2722.3830 - acc: 0.0067 - val_loss: 3344.0697 - val_acc: 0.0100\n", "Epoch 240/250\n", "300/300 [==============================] - 0s 229us/step - loss: 2812.1504 - acc: 0.0100 - val_loss: 3338.8593 - val_acc: 0.0000e+00\n", "Epoch 241/250\n", "300/300 [==============================] - 0s 217us/step - loss: 2780.9635 - acc: 0.0033 - val_loss: 3316.3679 - val_acc: 0.0100\n", "Epoch 242/250\n", "300/300 [==============================] - 0s 247us/step - loss: 2720.0100 - acc: 0.0033 - val_loss: 3306.8495 - val_acc: 0.0000e+00\n", "Epoch 243/250\n", "300/300 [==============================] - 0s 242us/step - loss: 2780.9836 - acc: 0.0033 - val_loss: 3338.9201 - val_acc: 0.0000e+00\n", "Epoch 244/250\n", "300/300 [==============================] - 0s 236us/step - loss: 2706.8565 - acc: 0.0100 - val_loss: 3343.5960 - val_acc: 0.0100\n", "Epoch 245/250\n", "300/300 [==============================] - 0s 221us/step - loss: 2686.6994 - acc: 0.0133 - val_loss: 3322.2030 - val_acc: 0.0200\n", "Epoch 246/250\n", "300/300 [==============================] - 0s 228us/step - loss: 2686.8716 - acc: 0.0033 - val_loss: 3340.9735 - val_acc: 0.0000e+00\n", "Epoch 247/250\n", "300/300 [==============================] - 0s 227us/step - loss: 2899.4103 - acc: 0.0000e+00 - val_loss: 3334.2280 - val_acc: 0.0000e+00\n", "Epoch 248/250\n", "300/300 [==============================] - 0s 273us/step - loss: 2861.2244 - acc: 0.0133 - val_loss: 3330.7764 - val_acc: 0.0000e+00\n", "Epoch 249/250\n", "300/300 [==============================] - 0s 234us/step - loss: 2711.9948 - acc: 0.0000e+00 - val_loss: 3310.8480 - val_acc: 0.0100\n", "Epoch 250/250\n", "300/300 [==============================] - 0s 254us/step - loss: 2807.1052 - acc: 0.0100 - val_loss: 3310.9142 - val_acc: 0.0100\n" ], "name": "stdout" } ] }, { "cell_type": "markdown", "metadata": { "id": "gEmRpFckWWc-", "colab_type": "text" }, "source": [ "Evaluate the model" ] }, { "cell_type": "code", "metadata": { "jupyter": { "source_hidden": true }, "id": "aq7wT6jlWWc-", "colab_type": "code", "colab": {}, "outputId": "d3d5da54-a0b6-4d21-873f-ac9995dffd40" }, "source": [ "# visualize the training process\n", "\n", "# Plot training & validation loss values\n", "plt.plot(history.history['loss'])\n", "plt.plot(history.history['val_loss'])\n", "plt.title('Model loss')\n", "plt.ylabel('Loss')\n", "plt.xlabel('Epoch')\n", "plt.legend(['Train', 'Validate'], loc='upper left')\n", "plt.show()" ], "execution_count": 0, "outputs": [ { "output_type": "display_data", "data": { "image/png": "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qWH37t18/etf57e//S1lZWXccccd3HnnnfzDP/xDfvUVkeOWWioDVtgrvrK7wHq6vtydr371q8ydO5f3v//9bNu2jZ07d/a5jueee45PfOITAMydO5e5c+fun/fII4+wYMECzjzzTFavXp3zkfkvvvgia9as4bzzzmP+/Pncf//9bNmyZYhrKiLHMrVUeuurRdHZAk0boXoWFJUP+WavvPJKvvSlL/Haa6/R0dHBggULuO+++2hoaODVV18lHo8zffr0nI+6z5arFfP222/zzW9+k1deeYWxY8fyyU9+Mud63J0PfOADPPTQQ0NWLxE5vqilMlD7T9aFufmxvLycCy64gE9/+tP7B+j37t3L+PHjicfjPPvss4dtNbznPe/hwQcfBOCNN95g5cqVQPDI/LKyMsaMGcPOnTt58skn9y9TUVFBa2srAIsXL+YPf/gDGzZsAKC9vZ233npryOsqIscuBZUBauoIn4FZwDvqly5dyuuvv86SJUsA+PjHP87y5ctZuHAhDz74IKee2v8PhN144420tbUxd+5cvvGNb7BoUXA70Lx58zjzzDOZM2cOn/70pw96ZP4NN9zAZZddxoUXXkhtbS333XcfS5cuZe7cuSxevJh169YVrL4icuwZlkffjyaDffT9lh27OTGzFcbOgJKqQhbxqKBH34scX0bFo++PJZFIz646voKwiEg+FFQGKGKFu/lRRORYoaASOlw3oPW0VI6z7sJcjrcuUxEZOAUVoLi4mMbGxn5PlhEFFSAIKI2NjRQXF490UURkFNJ9KsDUqVOpq6ujv58abu3oZk/XLry4GyvePYylG32Ki4uZOnXqSBdDREYhBRUgHo8zY8aMfvM88Pu3uPaZj9F+/lcoff/Nw1QyEZGji7q/BqiirASArs6Ow+QUETl+KagM0JjSBF0ep7ur/8ekiIgczxRUBqiyOE4XMZLdCioiIn1RUBmgMSVxuomT6lb3l4hIXxRUBigIKjFS3V0jXRQRkVFLQWWAKkvidHucTFLdXyIifVFQGaDieJSkKaiIiPRHQSUPaYvjKXV/iYj0RUElD+loEaS6R7oYIiKjloJKHjKRBJZWS0VEpC8KKvmIJrCMWioiIn0pWFAxs2lm9qyZrTWz1Wb212H6rWa2zcxWhK/Ls5b5ipltMLM3zeySrPRLw7QNZnZzVvoMM3vJzNab2U/M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\n", "text/plain": [ "
" ] }, "metadata": { "tags": [], "needs_background": "light" } } ] }, { "cell_type": "markdown", "metadata": { "id": "6LepZcTlWWdA", "colab_type": "text" }, "source": [ "### Let's visualize the test predictions of our trained DNN model" ] }, { "cell_type": "code", "metadata": { "id": "DwjVMdzOWWdB", "colab_type": "code", "colab": {} }, "source": [ "rand_indx = np.random.choice(x_test.shape[0], x_test.shape[1], replace=False)\n", "pred = model.predict(x_test[rand_indx])\n", "\n", "ground_truth = y_test[rand_indx]" ], "execution_count": 0, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "4MjHlpfRWWdD", "colab_type": "code", "colab": {}, "outputId": "b6ba1858-2040-457c-9e9e-a019e65d2155" }, "source": [ "plt.figure()\n", "plt.plot(pred,'r',label='pred')\n", "plt.plot(ground_truth, 'b',label='true')\n", "plt.legend()" ], "execution_count": 0, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "" ] }, "metadata": { "tags": [] }, "execution_count": 48 }, { "output_type": "display_data", "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "tags": [], "needs_background": "light" } } ] }, { "cell_type": "markdown", "metadata": { "id": "ujs2tGjwWWdI", "colab_type": "text" }, "source": [ "The test loss of our DNN is" ] }, { "cell_type": "code", "metadata": { "ExecuteTime": { "end_time": "2018-03-08T16:31:03.405678Z", "start_time": "2018-03-08T16:31:02.973483Z" }, "id": "adWkhv6UWWdJ", "colab_type": "code", "colab": {}, "outputId": "3d088908-9701-467a-e073-5e2f243f994a" }, "source": [ "score = model.evaluate(x_test, y_test, verbose=0)\n", "print('Test loss:', score[0])" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "Test loss: 1622.7285853794642\n" ], "name": "stdout" } ] }, { "cell_type": "markdown", "metadata": { "id": "ScCzLiyzWWdP", "colab_type": "text" }, "source": [ "#### Exercise:\n", "Compare this result with the ridge regression. Can you explain why one of the models is able to achieve smaller loss than the other? Which model class do you prefer?" ] }, { "cell_type": "markdown", "metadata": { "id": "t1vEiSlnWWdQ", "colab_type": "text" }, "source": [ "#### Solution" ] } ] }