From d95124e7b22a966c0e2df9b9c533fea244067335 Mon Sep 17 00:00:00 2001 From: AdamAdham Date: Sat, 24 Jan 2026 00:39:07 +0200 Subject: [PATCH] fix: correct Dense layer input shape in nb_ch04_03.ipynb - Updated the Dense layer input from `batch_input_shape` to `input_shape` for Keras compatibility. - **Disclaimer:** I did not rerun the full training since it would take a very long time; the ou --- chapter_04/nb_ch04_03.ipynb | 2006 +++++++++++++++++------------------ 1 file changed, 1002 insertions(+), 1004 deletions(-) diff --git a/chapter_04/nb_ch04_03.ipynb b/chapter_04/nb_ch04_03.ipynb index d53c560..1c326a7 100644 --- a/chapter_04/nb_ch04_03.ipynb +++ b/chapter_04/nb_ch04_03.ipynb @@ -1,1194 +1,1192 @@ { - "nbformat": 4, - "nbformat_minor": 0, - "metadata": { - "colab": { - "name": "nb_ch04_03.ipynb", - "provenance": [], - "collapsed_sections": [], - "toc_visible": true + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "O2sP8Kwe7L9Z" + }, + "source": [ + "# Maximum Likelihood as a linear regression problem\n", + "\n", + "\n", + "**Goal:** In this notebook you will learn how to calculate the maximum likelihood loss which is also the negative log likelihood, for an regression problem. You will define the negative log likelihood (NLL) loss function in Keras and use it to optimize the weights of a regression network. You will see that minimizing the NLL us the same as minimizing the mean squared error (MSE). You will learn that the optimal weights do not depend on $\\sigma^2$ when you assume that the variance $\\sigma^2$ is constant. In an second example you will try to minimize the NLL for 4 obervation pairs by changing $\\mu$ and $\\sigma^2$ with sliders and by using Tensorflow.\n", + "\n", + "**Usage:** We recommend to read chapter 4.3 before working through this notebook. The idea of the notebook is that you try to understand the provided code by running it, checking the output and playing with it by slightly changing the code and rerunning it. In addition you will find two exercises where you can do some experiments by yourself.\n", + "\n", + "**Dataset:** For the first experiment, you work with the systolic blood pressure and age data of 33 American women. For the second experiment you work with four observed blood pressure values.\n", + "\n", + "**Content:**\n", + "\n", + "* First experiment on fitting a linear regression model\n", + " * define the density function of a Normal distribution with constant variance. \n", + " * define a custom loss for the NLL\n", + " * fit a linear regression model for the blood pressure data with the NLL loss \n", + " * see that the weights of the NN do not depend on $\\sigma^2$ \n", + "\n", + "\n", + "* Second experiment on fitting a Normal distribution\n", + " * Plot a Normal distribution along with the likelihood of the observed values as shown in figure 4.17\n", + " * Manually adapt the parameter values of the Normal distribution to achieve a maximal joint likelihood or minimal NLL \n", + " * use Tensorflow to optimize $\\mu$ and $\\sigma^2$ automatically by minimizing the NLL\n", + "\n", + "\n", + "[open in colab](https://colab.research.google.com/github/tensorchiefs/dl_book/blob/master/chapter_04/nb_ch04_03.ipynb)" + ] }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "btSfD1dmNODK" }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.5.2" + "source": [ + "#### Install correct TF version (colab only)" + ] }, - "kernelspec": { - "name": "python3", - "display_name": "Python 3" + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 649 + }, + "colab_type": "code", + "id": "H1UmXAB6NOso", + "outputId": "4aad8df0-7dff-48cc-c735-9830ed90ea0a" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: tensorflow==2.0.0 in /usr/local/lib/python3.6/dist-packages (2.0.0)\n", + "Requirement already satisfied: gast==0.2.2 in /usr/local/lib/python3.6/dist-packages (from tensorflow==2.0.0) (0.2.2)\n", + "Requirement already satisfied: keras-applications>=1.0.8 in /usr/local/lib/python3.6/dist-packages (from tensorflow==2.0.0) (1.0.8)\n", + "Requirement already satisfied: opt-einsum>=2.3.2 in /usr/local/lib/python3.6/dist-packages (from tensorflow==2.0.0) (3.3.0)\n", + "Requirement already satisfied: keras-preprocessing>=1.0.5 in /usr/local/lib/python3.6/dist-packages (from tensorflow==2.0.0) (1.1.2)\n", + "Requirement already satisfied: astor>=0.6.0 in /usr/local/lib/python3.6/dist-packages (from tensorflow==2.0.0) (0.8.1)\n", + "Requirement already satisfied: google-pasta>=0.1.6 in /usr/local/lib/python3.6/dist-packages (from tensorflow==2.0.0) (0.2.0)\n", + "Requirement already satisfied: protobuf>=3.6.1 in /usr/local/lib/python3.6/dist-packages (from tensorflow==2.0.0) (3.12.4)\n", + "Requirement already satisfied: grpcio>=1.8.6 in /usr/local/lib/python3.6/dist-packages (from tensorflow==2.0.0) (1.31.0)\n", + "Requirement already satisfied: termcolor>=1.1.0 in /usr/local/lib/python3.6/dist-packages (from tensorflow==2.0.0) (1.1.0)\n", + "Requirement already satisfied: wrapt>=1.11.1 in /usr/local/lib/python3.6/dist-packages (from tensorflow==2.0.0) (1.12.1)\n", + "Requirement already satisfied: numpy<2.0,>=1.16.0 in /usr/local/lib/python3.6/dist-packages (from tensorflow==2.0.0) (1.18.5)\n", + "Requirement already satisfied: wheel>=0.26 in /usr/local/lib/python3.6/dist-packages (from tensorflow==2.0.0) (0.35.1)\n", + "Requirement already satisfied: tensorflow-estimator<2.1.0,>=2.0.0 in /usr/local/lib/python3.6/dist-packages (from tensorflow==2.0.0) (2.0.1)\n", + "Requirement already satisfied: absl-py>=0.7.0 in /usr/local/lib/python3.6/dist-packages (from tensorflow==2.0.0) (0.8.1)\n", + "Requirement already satisfied: six>=1.10.0 in /usr/local/lib/python3.6/dist-packages (from tensorflow==2.0.0) (1.15.0)\n", + "Requirement already satisfied: tensorboard<2.1.0,>=2.0.0 in /usr/local/lib/python3.6/dist-packages (from tensorflow==2.0.0) (2.0.2)\n", + "Requirement already satisfied: h5py in /usr/local/lib/python3.6/dist-packages (from keras-applications>=1.0.8->tensorflow==2.0.0) (2.10.0)\n", + "Requirement already satisfied: setuptools in /usr/local/lib/python3.6/dist-packages (from protobuf>=3.6.1->tensorflow==2.0.0) (49.6.0)\n", + "Requirement already satisfied: google-auth-oauthlib<0.5,>=0.4.1 in /usr/local/lib/python3.6/dist-packages (from tensorboard<2.1.0,>=2.0.0->tensorflow==2.0.0) (0.4.1)\n", + "Requirement already satisfied: requests<3,>=2.21.0 in /usr/local/lib/python3.6/dist-packages (from tensorboard<2.1.0,>=2.0.0->tensorflow==2.0.0) (2.23.0)\n", + "Requirement already satisfied: werkzeug>=0.11.15 in /usr/local/lib/python3.6/dist-packages (from tensorboard<2.1.0,>=2.0.0->tensorflow==2.0.0) (1.0.1)\n", + "Requirement already satisfied: google-auth<2,>=1.6.3 in /usr/local/lib/python3.6/dist-packages (from tensorboard<2.1.0,>=2.0.0->tensorflow==2.0.0) (1.17.2)\n", + "Requirement already satisfied: markdown>=2.6.8 in /usr/local/lib/python3.6/dist-packages (from tensorboard<2.1.0,>=2.0.0->tensorflow==2.0.0) (3.2.2)\n", + "Requirement already satisfied: requests-oauthlib>=0.7.0 in /usr/local/lib/python3.6/dist-packages (from google-auth-oauthlib<0.5,>=0.4.1->tensorboard<2.1.0,>=2.0.0->tensorflow==2.0.0) (1.3.0)\n", + "Requirement already satisfied: chardet<4,>=3.0.2 in /usr/local/lib/python3.6/dist-packages (from requests<3,>=2.21.0->tensorboard<2.1.0,>=2.0.0->tensorflow==2.0.0) (3.0.4)\n", + "Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in /usr/local/lib/python3.6/dist-packages (from requests<3,>=2.21.0->tensorboard<2.1.0,>=2.0.0->tensorflow==2.0.0) (1.24.3)\n", + "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.6/dist-packages (from requests<3,>=2.21.0->tensorboard<2.1.0,>=2.0.0->tensorflow==2.0.0) (2020.6.20)\n", + "Requirement already satisfied: idna<3,>=2.5 in /usr/local/lib/python3.6/dist-packages (from requests<3,>=2.21.0->tensorboard<2.1.0,>=2.0.0->tensorflow==2.0.0) (2.10)\n", + "Requirement already satisfied: cachetools<5.0,>=2.0.0 in /usr/local/lib/python3.6/dist-packages (from google-auth<2,>=1.6.3->tensorboard<2.1.0,>=2.0.0->tensorflow==2.0.0) (4.1.1)\n", + "Requirement already satisfied: rsa<5,>=3.1.4; python_version >= \"3\" in /usr/local/lib/python3.6/dist-packages (from google-auth<2,>=1.6.3->tensorboard<2.1.0,>=2.0.0->tensorflow==2.0.0) (4.6)\n", + "Requirement already satisfied: pyasn1-modules>=0.2.1 in /usr/local/lib/python3.6/dist-packages (from google-auth<2,>=1.6.3->tensorboard<2.1.0,>=2.0.0->tensorflow==2.0.0) (0.2.8)\n", + "Requirement already satisfied: importlib-metadata; python_version < \"3.8\" in /usr/local/lib/python3.6/dist-packages (from markdown>=2.6.8->tensorboard<2.1.0,>=2.0.0->tensorflow==2.0.0) (1.7.0)\n", + "Requirement already satisfied: oauthlib>=3.0.0 in /usr/local/lib/python3.6/dist-packages (from requests-oauthlib>=0.7.0->google-auth-oauthlib<0.5,>=0.4.1->tensorboard<2.1.0,>=2.0.0->tensorflow==2.0.0) (3.1.0)\n", + "Requirement already satisfied: pyasn1>=0.1.3 in /usr/local/lib/python3.6/dist-packages (from rsa<5,>=3.1.4; python_version >= \"3\"->google-auth<2,>=1.6.3->tensorboard<2.1.0,>=2.0.0->tensorflow==2.0.0) (0.4.8)\n", + "Requirement already satisfied: zipp>=0.5 in /usr/local/lib/python3.6/dist-packages (from importlib-metadata; python_version < \"3.8\"->markdown>=2.6.8->tensorboard<2.1.0,>=2.0.0->tensorflow==2.0.0) (3.1.0)\n" + ] + } + ], + "source": [ + "# Execute this cell to be sure to have a compatible TF (2.0) version. \n", + "# If you are bold you can skip this cell. \n", + "try: #If running in colab \n", + " import google.colab\n", + " !pip install tensorflow==2.0.0\n", + "except:\n", + " print('Not running in colab')" + ] }, - "accelerator": "GPU", - "widgets": { - "application/vnd.jupyter.widget-state+json": { - "cfe34b2bfdfc4168972001eeb817e2b2": { - "model_module": "@jupyter-widgets/controls", - "model_name": "VBoxModel", - "state": { - "_view_name": "VBoxView", - "_dom_classes": [ - "widget-interact" - ], - "_model_name": "VBoxModel", - "_view_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_view_count": null, - "_view_module_version": "1.5.0", - "box_style": "", - "layout": "IPY_MODEL_401b292ae54a406783720d454e1203de", - "_model_module": "@jupyter-widgets/controls", - "children": [ - "IPY_MODEL_e50e9dd71ffd4c989c3e2453de138b87", - "IPY_MODEL_a21b6cce9ef34cfca0c3fbb4ca52c48e", - "IPY_MODEL_61a6ca3684a24561a2c133887f136eab" - ] - } + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "IxDnHMLUL64a" + }, + "source": [ + "#### Imports\n", + "In the next two cells, we load all the required libraries. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "VG3-vQmhxxuJ" + }, + "outputs": [], + "source": [ + "try: #If running in colab \n", + " import google.colab\n", + " IN_COLAB = True \n", + " %tensorflow_version 2.x\n", + "except:\n", + " IN_COLAB = False" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 }, - "401b292ae54a406783720d454e1203de": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "state": { - "_view_name": "LayoutView", - "grid_template_rows": null, - "right": null, - "justify_content": null, - "_view_module": "@jupyter-widgets/base", - "overflow": null, - "_model_module_version": "1.2.0", - "_view_count": null, - "flex_flow": null, - "width": null, - "min_width": null, - "border": null, - "align_items": null, - "bottom": null, - "_model_module": "@jupyter-widgets/base", - "top": null, - "grid_column": null, - "overflow_y": null, - "overflow_x": null, - "grid_auto_flow": null, - "grid_area": null, - "grid_template_columns": null, - "flex": null, - "_model_name": "LayoutModel", - "justify_items": null, - "grid_row": null, - "max_height": null, - "align_content": null, - "visibility": null, - "align_self": null, - "height": null, - "min_height": null, - "padding": null, - "grid_auto_rows": null, - "grid_gap": null, - "max_width": null, - "order": null, - "_view_module_version": "1.2.0", - "grid_template_areas": null, - "object_position": null, - "object_fit": null, - "grid_auto_columns": null, - "margin": null, - "display": null, - "left": null - } + "colab_type": "code", + "id": "HU8-Z3M3-T0f", + "outputId": "55f106c3-91bc-4ae4-b5b8-3f8539a153fe" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Tensorflow version: 2.0.0 running in colab?: True\n" + ] + } + ], + "source": [ + "import tensorflow as tf\n", + "if (not tf.__version__.startswith('2')): #Checking if tf 2.0 is installed\n", + " print('Please install tensorflow 2.0 to run this notebook')\n", + "print('Tensorflow version: ',tf.__version__, ' running in colab?: ', IN_COLAB)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 35 }, - "e50e9dd71ffd4c989c3e2453de138b87": { - "model_module": "@jupyter-widgets/controls", - "model_name": "IntSliderModel", - "state": { - "_view_name": "IntSliderView", - "style": "IPY_MODEL_eadd7d1869fb45c880a47bc24ab4b7e5", - "_dom_classes": [], - "description": "mu", - "step": 1, - "_model_name": "IntSliderModel", - "orientation": "horizontal", - "max": 130, - "_view_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "value": 110, - "_view_count": null, - "disabled": false, - "_view_module_version": "1.5.0", - "min": 90, - "continuous_update": true, - "readout_format": "d", - "description_tooltip": null, - "readout": true, - "_model_module": "@jupyter-widgets/controls", - "layout": "IPY_MODEL_95815afd535443cfad28a159055ff070" - } - }, - "a21b6cce9ef34cfca0c3fbb4ca52c48e": { - "model_module": "@jupyter-widgets/controls", - "model_name": "IntSliderModel", - "state": { - "_view_name": "IntSliderView", - "style": "IPY_MODEL_d17791dacefc4f5f8083e365c4269a9d", - "_dom_classes": [], - "description": "sigma", - "step": 1, - "_model_name": "IntSliderModel", - "orientation": "horizontal", - "max": 20, - "_view_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "value": 11, - "_view_count": null, - "disabled": false, - "_view_module_version": "1.5.0", - "min": 2, - "continuous_update": true, - "readout_format": "d", - "description_tooltip": null, - "readout": true, - "_model_module": "@jupyter-widgets/controls", - "layout": "IPY_MODEL_40ab5affb3db41bea57aca47a6021d8c" - } + "colab_type": "code", + "id": "2Ns6420jRmbQ", + "outputId": "c2e44f09-109c-4d47-c516-67cad4ee8d96" + }, + "outputs": [ + { + "data": { + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "string" + }, + "text/plain": [ + "'2.0.0'" + ] + }, + "execution_count": 4, + "metadata": { + "tags": [] + }, + "output_type": "execute_result" + } + ], + "source": [ + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "%matplotlib inline\n", + "plt.style.use('default')\n", + "\n", + "from tensorflow.keras.models import Sequential\n", + "from tensorflow.keras.layers import Dense, Convolution2D, MaxPooling2D, Flatten , Activation\n", + "from tensorflow.keras import optimizers\n", + "\n", + "tf.__version__" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "L2R0rF0O8ouY" + }, + "source": [ + "## Define a custom functions for the Normal densitiy and the NLL" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "-InT4JzIDqLo" + }, + "source": [ + "Now let's define a function that calculates the density $f(y,\\mu,\\sigma)$ of a normal distribution at $y$, given the parameters $\\mu$ and $\\sigma$ using the formula:\n", + "\n", + "$$\n", + " f(y, \\mu, \\sigma) = \\frac{1}{\\sqrt{2 \\pi \\sigma^2}} e^{-\\frac{(y - \\mu)^2}{2 \\sigma^2}}\n", + "$$\n", + "\n", + "we will keep $\\sigma$ to the fixed value 20.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": {}, + "colab_type": "code", + "id": "ER2qr3DcDGB2" + }, + "outputs": [], + "source": [ + "def f(y, mu, sigma=20):\n", + " return (1/(sigma * tf.math.sqrt(2 * np.pi)) * tf.math.exp( - (y - mu)**2 / (2 * sigma**2)))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "eLkwBmeOxJpB" + }, + "source": [ + "In the next cell we want to use the functon to calculate the density of a normal distribution at the systolic blood pressure $y=131$, for a given $\\mu=111$ and $\\sigma=20$.\n", + "Compare the result with the Figure 4.13 in the book." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 }, - "61a6ca3684a24561a2c133887f136eab": { - "model_module": "@jupyter-widgets/output", - "model_name": "OutputModel", - "state": { - "_view_name": "OutputView", - "msg_id": "", - "_dom_classes": [], - "_model_name": "OutputModel", - "outputs": [ - { - "output_type": "display_data", - "metadata": { - "tags": [] - }, - "image/png": "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\n", - "text/plain": "
" - } - ], - "_view_module": "@jupyter-widgets/output", - "_model_module_version": "1.0.0", - "_view_count": null, - "_view_module_version": "1.0.0", - "layout": "IPY_MODEL_659972b9eae746e0ac317d3e84c8a7de", - "_model_module": "@jupyter-widgets/output" - } + "colab_type": "code", + "id": "1pU2_gg_KTD9", + "outputId": "29ded67a-8ec0-4de0-80e7-15ae5b9acec8" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 6, + "metadata": { + "tags": [] + }, + "output_type": "execute_result" + } + ], + "source": [ + "f(131, 111)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 466 }, - "eadd7d1869fb45c880a47bc24ab4b7e5": { - "model_module": "@jupyter-widgets/controls", - "model_name": "SliderStyleModel", - "state": { - "_view_name": "StyleView", - "handle_color": null, - "_model_name": "SliderStyleModel", - "description_width": "", - "_view_module": "@jupyter-widgets/base", - "_model_module_version": "1.5.0", - "_view_count": null, - "_view_module_version": "1.2.0", - "_model_module": "@jupyter-widgets/controls" - } + "colab_type": "code", + "id": "sdr2XfQTJWB_", + "outputId": "e8974208-c07b-46b9-8aef-90fbf6ec516a", + "scrolled": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0, 0.5, 'probability density')" + ] + }, + "execution_count": 7, + "metadata": { + "tags": [] + }, + "output_type": "execute_result" }, - "95815afd535443cfad28a159055ff070": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "state": { - "_view_name": "LayoutView", - "grid_template_rows": null, - "right": null, - "justify_content": null, - "_view_module": "@jupyter-widgets/base", - "overflow": null, - "_model_module_version": "1.2.0", - "_view_count": null, - "flex_flow": null, - "width": null, - "min_width": null, - "border": null, - "align_items": null, - "bottom": null, - "_model_module": "@jupyter-widgets/base", - "top": null, - "grid_column": null, - "overflow_y": null, - "overflow_x": null, - "grid_auto_flow": null, - "grid_area": null, - "grid_template_columns": null, - "flex": null, - "_model_name": "LayoutModel", - "justify_items": null, - "grid_row": null, - "max_height": null, - "align_content": null, - "visibility": null, - "align_self": null, - "height": null, - "min_height": null, - "padding": null, - "grid_auto_rows": null, - "grid_gap": null, - "max_width": null, - "order": null, - "_view_module_version": "1.2.0", - "grid_template_areas": null, - "object_position": null, - "object_fit": null, - "grid_auto_columns": null, - "margin": null, - "display": null, - "left": null - } - }, - "d17791dacefc4f5f8083e365c4269a9d": { - "model_module": "@jupyter-widgets/controls", - "model_name": "SliderStyleModel", - "state": { - "_view_name": "StyleView", - "handle_color": null, - "_model_name": "SliderStyleModel", - "description_width": "", - "_view_module": "@jupyter-widgets/base", - "_model_module_version": "1.5.0", - "_view_count": null, - "_view_module_version": "1.2.0", - "_model_module": "@jupyter-widgets/controls" - } - }, - "40ab5affb3db41bea57aca47a6021d8c": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "state": { - "_view_name": "LayoutView", - "grid_template_rows": null, - "right": null, - "justify_content": null, - "_view_module": "@jupyter-widgets/base", - "overflow": null, - "_model_module_version": "1.2.0", - "_view_count": null, - "flex_flow": null, - "width": null, - "min_width": null, - "border": null, - "align_items": null, - "bottom": null, - "_model_module": "@jupyter-widgets/base", - "top": null, - "grid_column": null, - "overflow_y": null, - "overflow_x": null, - "grid_auto_flow": null, - "grid_area": null, - "grid_template_columns": null, - "flex": null, - "_model_name": "LayoutModel", - "justify_items": null, - "grid_row": null, - "max_height": null, - "align_content": null, - "visibility": null, - "align_self": null, - "height": null, - "min_height": null, - "padding": null, - "grid_auto_rows": null, - "grid_gap": null, - "max_width": null, - "order": null, - "_view_module_version": "1.2.0", - "grid_template_areas": null, - "object_position": null, - "object_fit": null, - "grid_auto_columns": null, - "margin": null, - "display": null, - "left": null - } - }, - "659972b9eae746e0ac317d3e84c8a7de": { - "model_module": "@jupyter-widgets/base", - "model_name": "LayoutModel", - "state": { - "_view_name": "LayoutView", - "grid_template_rows": null, - "right": null, - "justify_content": null, - "_view_module": "@jupyter-widgets/base", - "overflow": null, - "_model_module_version": "1.2.0", - "_view_count": null, - "flex_flow": null, - "width": null, - "min_width": null, - "border": null, - "align_items": null, - "bottom": null, - "_model_module": "@jupyter-widgets/base", - "top": null, - "grid_column": null, - "overflow_y": null, - "overflow_x": null, - "grid_auto_flow": null, - "grid_area": null, - "grid_template_columns": null, - "flex": null, - "_model_name": "LayoutModel", - "justify_items": null, - "grid_row": null, - "max_height": null, - "align_content": null, - "visibility": null, - "align_self": null, - "height": null, - "min_height": null, - "padding": null, - "grid_auto_rows": null, - "grid_gap": null, - "max_width": null, - "order": null, - "_view_module_version": "1.2.0", - "grid_template_areas": null, - "object_position": null, - "object_fit": null, - "grid_auto_columns": null, - "margin": null, - "display": null, - "left": null - } + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [] + }, + "output_type": "display_data" } - } - } - }, - "cells": [ + ], + "source": [ + "sbp = np.linspace(60,160,50, dtype='float32')\n", + "plt.plot([131, 131], [0, f(131,111)], 'k-', lw=2,color='red')\n", + "plt.plot(sbp, f(sbp, 111),linewidth=3)\n", + "plt.xlabel('sbp')\n", + "plt.ylabel('probability density')" + ] + }, { "cell_type": "markdown", "metadata": { "colab_type": "text", - "id": "O2sP8Kwe7L9Z" + "id": "IBydsxU0_2Qy" }, "source": [ - "# Maximum Likelihood as a linear regression problem\n", - "\n", - "\n", - "**Goal:** In this notebook you will learn how to calculate the maximum likelihood loss which is also the negative log likelihood, for an regression problem. You will define the negative log likelihood (NLL) loss function in Keras and use it to optimize the weights of a regression network. You will see that minimizing the NLL us the same as minimizing the mean squared error (MSE). You will learn that the optimal weights do not depend on $\\sigma^2$ when you assume that the variance $\\sigma^2$ is constant. In an second example you will try to minimize the NLL for 4 obervation pairs by changing $\\mu$ and $\\sigma^2$ with sliders and by using Tensorflow.\n", - "\n", - "**Usage:** We recommend to read chapter 4.3 before working through this notebook. The idea of the notebook is that you try to understand the provided code by running it, checking the output and playing with it by slightly changing the code and rerunning it. In addition you will find two exercises where you can do some experiments by yourself.\n", - "\n", - "**Dataset:** For the first experiment, you work with the systolic blood pressure and age data of 33 American women. For the second experiment you work with four observed blood pressure values.\n", - "\n", - "**Content:**\n", - "\n", - "* First experiment on fitting a linear regression model\n", - " * define the density function of a Normal distribution with constant variance. \n", - " * define a custom loss for the NLL\n", - " * fit a linear regression model for the blood pressure data with the NLL loss \n", - " * see that the weights of the NN do not depend on $\\sigma^2$ \n", - "\n", - "\n", - "* Second experiment on fitting a Normal distribution\n", - " * Plot a Normal distribution along with the likelihood of the observed values as shown in figure 4.17\n", - " * Manually adapt the parameter values of the Normal distribution to achieve a maximal joint likelihood or minimal NLL \n", - " * use Tensorflow to optimize $\\mu$ and $\\sigma^2$ automatically by minimizing the NLL\n", - "\n", - "\n", - "[open in colab](https://colab.research.google.com/github/tensorchiefs/dl_book/blob/master/chapter_04/nb_ch04_03.ipynb)" + "## First experiment on fitting a linear regression model" ] }, { "cell_type": "markdown", "metadata": { - "id": "btSfD1dmNODK", - "colab_type": "text" + "colab_type": "text", + "id": "SnLKI-JnwJxi" }, "source": [ - "#### Install correct TF version (colab only)" + "Here we define the systolic blood pressure and the age of the 33 American women of our dataset" ] }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "H1UmXAB6NOso", + "colab": {}, "colab_type": "code", - "colab": { - "base_uri": "https://localhost:8080/", - "height": 649 - }, - "outputId": "4aad8df0-7dff-48cc-c735-9830ed90ea0a" + "id": "cFR-y-HER-Uo" }, + "outputs": [], "source": [ - "# Execute this cell to be sure to have a compatible TF (2.0) version. \n", - "# If you are bold you can skip this cell. \n", - "try: #If running in colab \n", - " import google.colab\n", - " !pip install tensorflow==2.0.0\n", - "except:\n", - " print('Not running in colab')" - ], - "execution_count": 1, - "outputs": [ - { - "output_type": "stream", - "text": [ - "Requirement already satisfied: tensorflow==2.0.0 in /usr/local/lib/python3.6/dist-packages (2.0.0)\n", - "Requirement already satisfied: gast==0.2.2 in /usr/local/lib/python3.6/dist-packages (from tensorflow==2.0.0) (0.2.2)\n", - "Requirement already satisfied: keras-applications>=1.0.8 in /usr/local/lib/python3.6/dist-packages (from tensorflow==2.0.0) (1.0.8)\n", - "Requirement already satisfied: opt-einsum>=2.3.2 in /usr/local/lib/python3.6/dist-packages (from tensorflow==2.0.0) (3.3.0)\n", - "Requirement already satisfied: keras-preprocessing>=1.0.5 in /usr/local/lib/python3.6/dist-packages (from tensorflow==2.0.0) (1.1.2)\n", - "Requirement already satisfied: astor>=0.6.0 in /usr/local/lib/python3.6/dist-packages (from tensorflow==2.0.0) (0.8.1)\n", - "Requirement already satisfied: google-pasta>=0.1.6 in /usr/local/lib/python3.6/dist-packages (from tensorflow==2.0.0) (0.2.0)\n", - "Requirement already satisfied: protobuf>=3.6.1 in /usr/local/lib/python3.6/dist-packages (from tensorflow==2.0.0) (3.12.4)\n", - "Requirement already satisfied: grpcio>=1.8.6 in /usr/local/lib/python3.6/dist-packages (from tensorflow==2.0.0) (1.31.0)\n", - "Requirement already satisfied: termcolor>=1.1.0 in /usr/local/lib/python3.6/dist-packages (from tensorflow==2.0.0) (1.1.0)\n", - "Requirement already satisfied: wrapt>=1.11.1 in /usr/local/lib/python3.6/dist-packages (from tensorflow==2.0.0) (1.12.1)\n", - "Requirement already satisfied: numpy<2.0,>=1.16.0 in /usr/local/lib/python3.6/dist-packages (from tensorflow==2.0.0) (1.18.5)\n", - "Requirement already satisfied: wheel>=0.26 in /usr/local/lib/python3.6/dist-packages (from tensorflow==2.0.0) (0.35.1)\n", - "Requirement already satisfied: tensorflow-estimator<2.1.0,>=2.0.0 in /usr/local/lib/python3.6/dist-packages (from tensorflow==2.0.0) (2.0.1)\n", - "Requirement already satisfied: absl-py>=0.7.0 in /usr/local/lib/python3.6/dist-packages (from tensorflow==2.0.0) (0.8.1)\n", - "Requirement already satisfied: six>=1.10.0 in /usr/local/lib/python3.6/dist-packages (from tensorflow==2.0.0) (1.15.0)\n", - "Requirement already satisfied: tensorboard<2.1.0,>=2.0.0 in /usr/local/lib/python3.6/dist-packages (from tensorflow==2.0.0) (2.0.2)\n", - "Requirement already satisfied: h5py in /usr/local/lib/python3.6/dist-packages (from keras-applications>=1.0.8->tensorflow==2.0.0) (2.10.0)\n", - "Requirement already satisfied: setuptools in /usr/local/lib/python3.6/dist-packages (from protobuf>=3.6.1->tensorflow==2.0.0) (49.6.0)\n", - "Requirement already satisfied: google-auth-oauthlib<0.5,>=0.4.1 in /usr/local/lib/python3.6/dist-packages (from tensorboard<2.1.0,>=2.0.0->tensorflow==2.0.0) (0.4.1)\n", - "Requirement already satisfied: requests<3,>=2.21.0 in /usr/local/lib/python3.6/dist-packages (from tensorboard<2.1.0,>=2.0.0->tensorflow==2.0.0) (2.23.0)\n", - "Requirement already satisfied: werkzeug>=0.11.15 in /usr/local/lib/python3.6/dist-packages (from tensorboard<2.1.0,>=2.0.0->tensorflow==2.0.0) (1.0.1)\n", - "Requirement already satisfied: google-auth<2,>=1.6.3 in /usr/local/lib/python3.6/dist-packages (from tensorboard<2.1.0,>=2.0.0->tensorflow==2.0.0) (1.17.2)\n", - "Requirement already satisfied: markdown>=2.6.8 in /usr/local/lib/python3.6/dist-packages (from tensorboard<2.1.0,>=2.0.0->tensorflow==2.0.0) (3.2.2)\n", - "Requirement already satisfied: requests-oauthlib>=0.7.0 in /usr/local/lib/python3.6/dist-packages (from google-auth-oauthlib<0.5,>=0.4.1->tensorboard<2.1.0,>=2.0.0->tensorflow==2.0.0) (1.3.0)\n", - "Requirement already satisfied: chardet<4,>=3.0.2 in /usr/local/lib/python3.6/dist-packages (from requests<3,>=2.21.0->tensorboard<2.1.0,>=2.0.0->tensorflow==2.0.0) (3.0.4)\n", - "Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in /usr/local/lib/python3.6/dist-packages (from requests<3,>=2.21.0->tensorboard<2.1.0,>=2.0.0->tensorflow==2.0.0) (1.24.3)\n", - "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.6/dist-packages (from requests<3,>=2.21.0->tensorboard<2.1.0,>=2.0.0->tensorflow==2.0.0) (2020.6.20)\n", - "Requirement already satisfied: idna<3,>=2.5 in /usr/local/lib/python3.6/dist-packages (from requests<3,>=2.21.0->tensorboard<2.1.0,>=2.0.0->tensorflow==2.0.0) (2.10)\n", - "Requirement already satisfied: cachetools<5.0,>=2.0.0 in /usr/local/lib/python3.6/dist-packages (from google-auth<2,>=1.6.3->tensorboard<2.1.0,>=2.0.0->tensorflow==2.0.0) (4.1.1)\n", - "Requirement already satisfied: rsa<5,>=3.1.4; python_version >= \"3\" in /usr/local/lib/python3.6/dist-packages (from google-auth<2,>=1.6.3->tensorboard<2.1.0,>=2.0.0->tensorflow==2.0.0) (4.6)\n", - "Requirement already satisfied: pyasn1-modules>=0.2.1 in /usr/local/lib/python3.6/dist-packages (from google-auth<2,>=1.6.3->tensorboard<2.1.0,>=2.0.0->tensorflow==2.0.0) (0.2.8)\n", - "Requirement already satisfied: importlib-metadata; python_version < \"3.8\" in /usr/local/lib/python3.6/dist-packages (from markdown>=2.6.8->tensorboard<2.1.0,>=2.0.0->tensorflow==2.0.0) (1.7.0)\n", - "Requirement already satisfied: oauthlib>=3.0.0 in /usr/local/lib/python3.6/dist-packages (from requests-oauthlib>=0.7.0->google-auth-oauthlib<0.5,>=0.4.1->tensorboard<2.1.0,>=2.0.0->tensorflow==2.0.0) (3.1.0)\n", - "Requirement already satisfied: pyasn1>=0.1.3 in /usr/local/lib/python3.6/dist-packages (from rsa<5,>=3.1.4; python_version >= \"3\"->google-auth<2,>=1.6.3->tensorboard<2.1.0,>=2.0.0->tensorflow==2.0.0) (0.4.8)\n", - "Requirement already satisfied: zipp>=0.5 in /usr/local/lib/python3.6/dist-packages (from importlib-metadata; python_version < \"3.8\"->markdown>=2.6.8->tensorboard<2.1.0,>=2.0.0->tensorflow==2.0.0) (3.1.0)\n" - ], - "name": "stdout" - } + "# Blood Pressure data\n", + "x = [22, 41, 52, 23, 41, 54, 24, 46, 56, 27, 47, 57, 28, 48, 58, 9, \n", + " 49, 59, 30, 49, 63, 32, 50, 67, 33, 51, 71, 35, 51, 77, 40, 51, 81]\n", + "y = [131, 139, 128, 128, 171, 105, 116, 137, 145, 106, 111, 141, 114, \n", + " 115, 153, 123, 133, 157, 117, 128, 155, 122, 183,\n", + " 176, 99, 130, 172, 121, 133, 178, 147, 144, 217] \n", + "x = np.asarray(x, np.float32) \n", + "y = np.asarray(y, np.float32)" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", - "id": "IxDnHMLUL64a" + "id": "AKyGXV0Lxxu0" }, "source": [ - "#### Imports\n", - "In the next two cells, we load all the required libraries. " + "Let's fit a simple linear regression to the systolic blood pressure of the 33 women. You can assume a constant variance and a mean that depends linearly on the age. Therefor you setup a NN without any hidden layer and only one output node for the mean of the CPD. The NLL for this case is the MSE which is a standard loss function in Keras (recall chapter 3). You still use here the custom loss function for the NLL to check that it yields the same result as you got with the Keras MSE loss.\n", + "\n", + "\n", + "To create a custom loss function, you have to follow the interface \n", + " `loss(y_true, y_pred)`.\n", + " \n", + "We define the loss as follows:\n", + "$\n", + " l = -\\sum_{i=1}^n \\log (f(y_i, a \\cdot x+b)) = -\\sum_{i=1}^n \\log(f(y_i, ypred_i)) \n", + "$" ] }, { - "cell_type": "code", + "cell_type": "markdown", "metadata": { - "colab_type": "code", - "id": "VG3-vQmhxxuJ", - "colab": {} + "colab_type": "text", + "id": "i6dQ_GXXH_tA" }, "source": [ - "try: #If running in colab \n", - " import google.colab\n", - " IN_COLAB = True \n", - " %tensorflow_version 2.x\n", - "except:\n", - " IN_COLAB = False" - ], - "execution_count": 2, - "outputs": [] + "#### Listing 4.4: Estimating the maximum likelihood solution \n" + ] }, { "cell_type": "code", + "execution_count": null, "metadata": { - "id": "HU8-Z3M3-T0f", + "colab": {}, "colab_type": "code", + "id": "tOJnqqd8xxu2" + }, + "outputs": [], + "source": [ + "# custom loss function\n", + "def my_loss(y_true,y_pred): #A\n", + " loss = -tf.reduce_sum(tf.math.log(f(y_true,y_pred)))\n", + " return loss\n", + "\n", + "# setup NN w/o hidden layer and with output node\n", + "model = Sequential() \n", + "model.add(Dense(1, activation='linear', \n", + " batch_input_shape=(1,)))\n", + "model.compile(loss=my_loss,optimizer=\"adam\") # use custom loss" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { "colab": { "base_uri": "https://localhost:8080/", - "height": 34 + "height": 425 }, - "outputId": "55f106c3-91bc-4ae4-b5b8-3f8539a153fe" + "colab_type": "code", + "id": "AJe5kpMKxxu9", + "outputId": "f205a051-e33f-4f56-f180-a91ab0f2545e" }, - "source": [ - "import tensorflow as tf\n", - "if (not tf.__version__.startswith('2')): #Checking if tf 2.0 is installed\n", - " print('Please install tensorflow 2.0 to run this notebook')\n", - "print('Tensorflow version: ',tf.__version__, ' running in colab?: ', IN_COLAB)" - ], - "execution_count": 3, "outputs": [ { + "name": "stdout", "output_type": "stream", "text": [ - "Tensorflow version: 2.0.0 running in colab?: True\n" - ], - "name": "stdout" + "Epoch: 5000 slope= 2.6768923 intercept= 3.2861192 MSE= 1146.3853\n", + "Epoch: 10000 slope= 2.6660204 intercept= 6.7347355 MSE= 1075.9537\n", + "Epoch: 15000 slope= 2.570664 intercept= 11.642588 MSE= 990.4867\n", + "Epoch: 20000 slope= 2.4754844 intercept= 16.576927 MSE= 909.94775\n", + "Epoch: 25000 slope= 2.3804352 intercept= 21.507423 MSE= 834.8677\n", + "Epoch: 30000 slope= 2.2854965 intercept= 26.43024 MSE= 765.2859\n", + "Epoch: 35000 slope= 2.190644 intercept= 31.348665 MSE= 701.1361\n", + "Epoch: 40000 slope= 2.0961258 intercept= 36.256508 MSE= 642.47455\n", + "Epoch: 45000 slope= 2.001636 intercept= 41.158394 MSE= 589.21906\n", + "Epoch: 50000 slope= 1.9073676 intercept= 46.04868 MSE= 541.40216\n", + "Epoch: 55000 slope= 1.813271 intercept= 50.92797 MSE= 498.98123\n", + "Epoch: 60000 slope= 1.7195925 intercept= 55.78917 MSE= 461.97067\n", + "Epoch: 65000 slope= 1.6263069 intercept= 60.627724 MSE= 430.3394\n", + "Epoch: 70000 slope= 1.5335361 intercept= 65.440414 MSE= 404.03018\n", + "Epoch: 75000 slope= 1.4417399 intercept= 70.20454 MSE= 383.04834\n", + "Epoch: 80000 slope= 1.3511539 intercept= 74.903 MSE= 367.28796\n", + "Epoch: 85000 slope= 1.2628688 intercept= 79.48206 MSE= 356.64124\n", + "Epoch: 90000 slope= 1.1798283 intercept= 83.792145 MSE= 350.87042\n", + "Epoch: 95000 slope= 1.1150823 intercept= 87.151825 MSE= 349.23093\n", + "Epoch: 100000 slope= 1.1050111 intercept= 87.67141 MSE= 349.2009\n", + "Epoch: 105000 slope= 1.1050212 intercept= 87.671425 MSE= 349.2009\n", + "Epoch: 110000 slope= 1.10502 intercept= 87.67142 MSE= 349.20087\n", + "Epoch: 115000 slope= 1.105022 intercept= 87.671425 MSE= 349.2009\n", + "Epoch: 120000 slope= 1.1050217 intercept= 87.671425 MSE= 349.20084\n" + ] } + ], + "source": [ + "# fit the model and give out the two weights of the NN (slope and intercept)\n", + "for i in range(0,int(120000/5000)):\n", + " model.fit(x=x,y=y,batch_size=33,\n", + " epochs=5000,\n", + " verbose = 0)\n", + " a,b=model.get_weights()\n", + " mse=np.mean(np.square(model.predict(x).reshape(len(x),)-y))\n", + " print(\"Epoch:\",i*5000+5000,\"slope=\",a[0][0],\"intercept=\",b[0],\"MSE=\",mse)\n", + "\n", + "#Should reach (you might need to do more iteration)\n", + "#1. optimal value for slope: 1.1050216\n", + "#2. optimal value for intercept: 87.67143\n", + "#3. minimal MSE: 349.200787168560" ] }, { - "cell_type": "code", + "cell_type": "markdown", "metadata": { - "colab_type": "code", - "id": "2Ns6420jRmbQ", - "colab": { - "base_uri": "https://localhost:8080/", - "height": 35 - }, - "outputId": "c2e44f09-109c-4d47-c516-67cad4ee8d96" + "colab_type": "text", + "id": "Qy-C01R-1vYu" }, "source": [ - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "%matplotlib inline\n", - "plt.style.use('default')\n", + "When we minimize the negativ log likelihood, the optimal values for the slope and intercept are the same as in chapter 3, where we minized the MSE!\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "bynRM7KxxxvC" + }, + "source": [ + "### Exercise 1 \n", + " \n", "\n", - "from tensorflow.keras.models import Sequential\n", - "from tensorflow.keras.layers import Dense, Convolution2D, MaxPooling2D, Flatten , Activation\n", - "from tensorflow.keras import optimizers\n", "\n", - "tf.__version__" - ], - "execution_count": 4, - "outputs": [ - { - "output_type": "execute_result", - "data": { - "application/vnd.google.colaboratory.intrinsic+json": { - "type": "string" - }, - "text/plain": [ - "'2.0.0'" - ] - }, - "metadata": { - "tags": [] - }, - "execution_count": 4 - } + "*Exercise 1: Change the value of sigma in the calculation of the likelihood (function f) and rerun the cells. Does the result depend on it?*" ] }, { "cell_type": "markdown", "metadata": { - "id": "L2R0rF0O8ouY", - "colab_type": "text" + "colab_type": "text", + "id": "4UDRuNw49R16" }, "source": [ - "## Define a custom functions for the Normal densitiy and the NLL" + "Scroll down to see the solution.\n", + "
\n", + "
\n", + "
\n", + "
\n", + "
\n", + "
\n", + "
\n", + "
\n", + "
\n", + "
\n", + "
\n", + "
" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", - "id": "-InT4JzIDqLo" + "id": "iwFa6LuG9Pc6" }, "source": [ - "Now let's define a function that calculates the density $f(y,\\mu,\\sigma)$ of a normal distribution at $y$, given the parameters $\\mu$ and $\\sigma$ using the formula:\n", - "\n", - "$$\n", - " f(y, \\mu, \\sigma) = \\frac{1}{\\sqrt{2 \\pi \\sigma^2}} e^{-\\frac{(y - \\mu)^2}{2 \\sigma^2}}\n", - "$$\n", + "**Solution**\n", "\n", - "we will keep $\\sigma$ to the fixed value 20.\n" + "No, the result does not on the value of the variance which is a assumed to be constant." ] }, { - "cell_type": "code", + "cell_type": "markdown", "metadata": { - "colab_type": "code", - "id": "ER2qr3DcDGB2", - "colab": {} + "colab_type": "text", + "id": "Sb8XZ6b93Tza" }, "source": [ - "def f(y, mu, sigma=20):\n", - " return (1/(sigma * tf.math.sqrt(2 * np.pi)) * tf.math.exp( - (y - mu)**2 / (2 * sigma**2)))" - ], - "execution_count": 5, - "outputs": [] + "### Return to the book \n", + " " + ] }, { "cell_type": "markdown", "metadata": { - "id": "eLkwBmeOxJpB", - "colab_type": "text" + "colab_type": "text", + "id": "63bFgR0nxxvE" }, "source": [ - "In the next cell we want to use the functon to calculate the density of a normal distribution at the systolic blood pressure $y=131$, for a given $\\mu=111$ and $\\sigma=20$.\n", - "Compare the result with the Figure 4.13 in the book." + "## Second experiment on fitting a Normal distribution model\n", + "\n", + "In the next cells you will assume that you observed the systolic blood pressure of 4 women of the same age: sbp=[131,105,114,117].\n", + "Let's plot a normal distribution along with the likelihood of the observed values,\n", + "Your task is to manually adapt the parameters $\\mu$ and $\\sigma$ of the Normal distribution (with the interactive silders) that yield a maximal joint likelihood which you get with the same parameter values that yield a minimal NLL.\n", + "\n" ] }, { "cell_type": "code", + "execution_count": 11, "metadata": { + "colab": {}, "colab_type": "code", - "id": "1pU2_gg_KTD9", - "colab": { - "base_uri": "https://localhost:8080/", - "height": 34 - }, - "outputId": "29ded67a-8ec0-4de0-80e7-15ae5b9acec8" + "id": "Sviq09_AxxvF" }, + "outputs": [], "source": [ - "f(131, 111)" - ], - "execution_count": 6, - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": [ - "" - ] - }, - "metadata": { - "tags": [] - }, - "execution_count": 6 - } + "#!pip install ipywidgets" ] }, { "cell_type": "code", + "execution_count": null, "metadata": { - "colab_type": "code", - "id": "sdr2XfQTJWB_", - "scrolled": false, "colab": { "base_uri": "https://localhost:8080/", - "height": 466 + "height": 553, + "referenced_widgets": [ + "cfe34b2bfdfc4168972001eeb817e2b2", + "401b292ae54a406783720d454e1203de", + "e50e9dd71ffd4c989c3e2453de138b87", + "a21b6cce9ef34cfca0c3fbb4ca52c48e", + "61a6ca3684a24561a2c133887f136eab", + "eadd7d1869fb45c880a47bc24ab4b7e5", + "95815afd535443cfad28a159055ff070", + "d17791dacefc4f5f8083e365c4269a9d", + "40ab5affb3db41bea57aca47a6021d8c", + "659972b9eae746e0ac317d3e84c8a7de" + ] }, - "outputId": "e8974208-c07b-46b9-8aef-90fbf6ec516a" + "colab_type": "code", + "id": "JrgTsZfSxxvN", + "outputId": "e83d7a73-b350-41d8-eabe-1c6834af3a24" }, - "source": [ - "sbp = np.linspace(60,160,50, dtype='float32')\n", - "plt.plot([131, 131], [0, f(131,111)], 'k-', lw=2,color='red')\n", - "plt.plot(sbp, f(sbp, 111),linewidth=3)\n", - "plt.xlabel('sbp')\n", - "plt.ylabel('probability density')" - ], - "execution_count": 7, "outputs": [ { - "output_type": "execute_result", "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "cfe34b2bfdfc4168972001eeb817e2b2", + "version_major": 2, + "version_minor": 0 + }, "text/plain": [ - "Text(0, 0.5, 'probability density')" + "interactive(children=(IntSlider(value=110, description='mu', max=130, min=90), IntSlider(value=11, description…" ] }, "metadata": { "tags": [] }, - "execution_count": 7 + "output_type": "display_data" }, { - "output_type": "display_data", "data": { - "image/png": "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\n", "text/plain": [ - "
" + "
" ] }, "metadata": { "tags": [] - } + }, + "output_type": "display_data" } + ], + "source": [ + "from ipywidgets import interactive\n", + "plt.figure(figsize=(5,5))\n", + "ys=np.array([131,105,114,117], dtype='float32')\n", + "sbp = np.linspace(80,140,200, dtype='float32')\n", + "\n", + "def make_interactive(mu, sigma):\n", + " likelihoods = f(ys, mu,sigma)\n", + " for i in range(4):\n", + " plt.plot([ys[i], ys[i]], [0, likelihoods[i]], 'k-', lw=1,color='red') \n", + " plt.plot(sbp, f(sbp, mu,sigma),linewidth=3)\n", + " plt.xlabel('sbp')\n", + " plt.ylabel('likelihood')\n", + " plt.title('NLL: {:.2f}'.format(-np.sum(np.log(likelihoods))))\n", + "\n", + "interactive(make_interactive,mu=(90, 130, 1), sigma=(2,20,1))" ] }, { "cell_type": "markdown", "metadata": { - "id": "IBydsxU0_2Qy", - "colab_type": "text" + "colab_type": "text", + "id": "FnhT9I229GWH" }, "source": [ - "## First experiment on fitting a linear regression model" + "### Exercise 2\n", + " \n", + "\n", + "Exercise 2: Use TF to fit a Normal distribution that minimizes the NLL for the systolic blood pressure of the 4 observed sbp values . Compare the results with your manually determined parameters $\\mu$ and $\\sigma$." ] }, { - "cell_type": "markdown", + "cell_type": "code", + "execution_count": 13, "metadata": { - "id": "SnLKI-JnwJxi", - "colab_type": "text" + "colab": {}, + "colab_type": "code", + "id": "n-nSWXYadTft" }, + "outputs": [], "source": [ - "Here we define the systolic blood pressure and the age of the 33 American women of our dataset" + "# Write your code here" ] }, { - "cell_type": "code", + "cell_type": "markdown", "metadata": { - "colab_type": "code", - "id": "cFR-y-HER-Uo", - "colab": {} + "colab_type": "text", + "id": "Hv1IEA74dPF6" }, "source": [ - "# Blood Pressure data\n", - "x = [22, 41, 52, 23, 41, 54, 24, 46, 56, 27, 47, 57, 28, 48, 58, 9, \n", - " 49, 59, 30, 49, 63, 32, 50, 67, 33, 51, 71, 35, 51, 77, 40, 51, 81]\n", - "y = [131, 139, 128, 128, 171, 105, 116, 137, 145, 106, 111, 141, 114, \n", - " 115, 153, 123, 133, 157, 117, 128, 155, 122, 183,\n", - " 176, 99, 130, 172, 121, 133, 178, 147, 144, 217] \n", - "x = np.asarray(x, np.float32) \n", - "y = np.asarray(y, np.float32)" - ], - "execution_count": 8, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": { - "colab_type": "text", - "id": "AKyGXV0Lxxu0" - }, - "source": [ - "Let's fit a simple linear regression to the systolic blood pressure of the 33 women. You can assume a constant variance and a mean that depends linearly on the age. Therefor you setup a NN without any hidden layer and only one output node for the mean of the CPD. The NLL for this case is the MSE which is a standard loss function in Keras (recall chapter 3). You still use here the custom loss function for the NLL to check that it yields the same result as you got with the Keras MSE loss.\n", - "\n", + "Scroll down to see the solution.\n", "\n", - "To create a custom loss function, you have to follow the interface \n", - " `loss(y_true, y_pred)`.\n", - " \n", - "We define the loss as follows:\n", - "$\n", - " l = -\\sum_{i=1}^n \\log (f(y_i, a \\cdot x+b)) = -\\sum_{i=1}^n \\log(f(y_i, ypred_i)) \n", - "$" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "i6dQ_GXXH_tA", - "colab_type": "text" - }, - "source": [ - "#### Listing 4.4: Estimating the maximum likelihood solution \n" + "
\n", + "
\n", + "
\n", + "
\n", + "
\n", + "
\n", + "
\n", + "
\n", + "
\n", + "
\n", + "
\n", + "
\n", + "
\n", + "
\n", + "
\n", + "
\n", + "
\n", + "
\n", + "
\n", + "
\n", + "
" ] }, { "cell_type": "code", + "execution_count": null, "metadata": { + "colab": {}, "colab_type": "code", - "id": "tOJnqqd8xxu2", - "colab": {} + "id": "9j1rQwNbxxvW" }, + "outputs": [], "source": [ - "# custom loss function\n", - "def my_loss(y_true,y_pred): #A\n", - " loss = -tf.reduce_sum(tf.math.log(f(y_true,y_pred)))\n", - " return loss\n", - "\n", - "# setup NN w/o hidden layer and with output node\n", - "model = Sequential() \n", - "model.add(Dense(1, activation='linear', \n", - " batch_input_shape=(None, 1)))\n", - "model.compile(loss=my_loss,optimizer=\"adam\") # use custom loss\n" - ], - "execution_count": 9, - "outputs": [] + "mu = tf.Variable(124.0)\n", + "sigma = tf.Variable(10.0)\n", + "variables = [mu,sigma]\n", + "#eta = 0.0004\n", + "#likelihoods = f(ys, mu,sigma)\n", + "#loss = -tf.math.reduce_sum(tf.math.log(likelihoods)) \n", + "optimizer = tf.optimizers.Adam()\n" + ] }, { "cell_type": "code", + "execution_count": null, "metadata": { - "colab_type": "code", - "id": "AJe5kpMKxxu9", "colab": { "base_uri": "https://localhost:8080/", - "height": 425 + "height": 697 }, - "outputId": "f205a051-e33f-4f56-f180-a91ab0f2545e" + "colab_type": "code", + "id": "_WnpNZojxxva", + "outputId": "4acbb4be-9cfd-4b03-fe7f-6d6ac616b13a" }, - "source": [ - "# fit the model and give out the two weights of the NN (slope and intercept)\n", - "for i in range(0,int(120000/5000)):\n", - " model.fit(x=x,y=y,batch_size=33,\n", - " epochs=5000,\n", - " verbose = 0)\n", - " a,b=model.get_weights()\n", - " mse=np.mean(np.square(model.predict(x).reshape(len(x),)-y))\n", - " print(\"Epoch:\",i*5000+5000,\"slope=\",a[0][0],\"intercept=\",b[0],\"MSE=\",mse)\n", - "\n", - "#Should reach (you might need to do more iteration)\n", - "#1. optimal value for slope: 1.1050216\n", - "#2. optimal value for intercept: 87.67143\n", - "#3. minimal MSE: 349.200787168560" - ], - "execution_count": 10, "outputs": [ { + "name": "stdout", "output_type": "stream", "text": [ - "Epoch: 5000 slope= 2.6768923 intercept= 3.2861192 MSE= 1146.3853\n", - "Epoch: 10000 slope= 2.6660204 intercept= 6.7347355 MSE= 1075.9537\n", - "Epoch: 15000 slope= 2.570664 intercept= 11.642588 MSE= 990.4867\n", - "Epoch: 20000 slope= 2.4754844 intercept= 16.576927 MSE= 909.94775\n", - "Epoch: 25000 slope= 2.3804352 intercept= 21.507423 MSE= 834.8677\n", - "Epoch: 30000 slope= 2.2854965 intercept= 26.43024 MSE= 765.2859\n", - "Epoch: 35000 slope= 2.190644 intercept= 31.348665 MSE= 701.1361\n", - "Epoch: 40000 slope= 2.0961258 intercept= 36.256508 MSE= 642.47455\n", - "Epoch: 45000 slope= 2.001636 intercept= 41.158394 MSE= 589.21906\n", - "Epoch: 50000 slope= 1.9073676 intercept= 46.04868 MSE= 541.40216\n", - "Epoch: 55000 slope= 1.813271 intercept= 50.92797 MSE= 498.98123\n", - "Epoch: 60000 slope= 1.7195925 intercept= 55.78917 MSE= 461.97067\n", - "Epoch: 65000 slope= 1.6263069 intercept= 60.627724 MSE= 430.3394\n", - "Epoch: 70000 slope= 1.5335361 intercept= 65.440414 MSE= 404.03018\n", - "Epoch: 75000 slope= 1.4417399 intercept= 70.20454 MSE= 383.04834\n", - "Epoch: 80000 slope= 1.3511539 intercept= 74.903 MSE= 367.28796\n", - "Epoch: 85000 slope= 1.2628688 intercept= 79.48206 MSE= 356.64124\n", - "Epoch: 90000 slope= 1.1798283 intercept= 83.792145 MSE= 350.87042\n", - "Epoch: 95000 slope= 1.1150823 intercept= 87.151825 MSE= 349.23093\n", - "Epoch: 100000 slope= 1.1050111 intercept= 87.67141 MSE= 349.2009\n", - "Epoch: 105000 slope= 1.1050212 intercept= 87.671425 MSE= 349.2009\n", - "Epoch: 110000 slope= 1.10502 intercept= 87.67142 MSE= 349.20087\n", - "Epoch: 115000 slope= 1.105022 intercept= 87.671425 MSE= 349.2009\n", - "Epoch: 120000 slope= 1.1050217 intercept= 87.671425 MSE= 349.20084\n" - ], - "name": "stdout" + "Epoch: 0 mu= 123.999 sigma= 10.001 NNL= 15.681095\n", + "Epoch: 250 mu= 123.75322 sigma= 10.235319 NNL= 15.580299\n", + "Epoch: 500 mu= 123.51592 sigma= 10.434735 NNL= 15.498944\n", + "Epoch: 750 mu= 123.28526 sigma= 10.599915 NNL= 15.4315815\n", + "Epoch: 1000 mu= 123.05974 sigma= 10.730648 NNL= 15.374268\n", + "Epoch: 1250 mu= 122.837746 sigma= 10.826036 NNL= 15.323981\n", + "Epoch: 1500 mu= 122.61827 sigma= 10.884986 NNL= 15.27849\n", + "Epoch: 1750 mu= 122.40066 sigma= 10.906953 NNL= 15.23614\n", + "Epoch: 2000 mu= 122.18322 sigma= 10.892846 NNL= 15.195525\n", + "Epoch: 2250 mu= 121.96578 sigma= 10.845757 NNL= 15.155945\n", + "Epoch: 2500 mu= 121.747444 sigma= 10.77124 NNL= 15.116928\n", + "Epoch: 2750 mu= 121.5281 sigma= 10.676418 NNL= 15.07843\n", + "Epoch: 3000 mu= 121.30838 sigma= 10.569158 NNL= 15.040689\n", + "Epoch: 3250 mu= 121.08713 sigma= 10.456282 NNL= 15.003695\n", + "Epoch: 3500 mu= 120.86592 sigma= 10.343266 NNL= 14.967867\n", + "Epoch: 3750 mu= 120.646576 sigma= 10.234177 NNL= 14.933611\n", + "Epoch: 4000 mu= 120.42786 sigma= 10.131305 NNL= 14.900812\n", + "Epoch: 4250 mu= 120.211075 sigma= 10.035813 NNL= 14.869716\n", + "Epoch: 4500 mu= 119.996605 sigma= 9.948094 NNL= 14.840401\n", + "Epoch: 4750 mu= 119.78515 sigma= 9.868075 NNL= 14.812966\n", + "Epoch: 5000 mu= 119.576965 sigma= 9.795481 NNL= 14.78744\n", + "Epoch: 5250 mu= 119.37256 sigma= 9.729924 NNL= 14.7638645\n", + "Epoch: 5500 mu= 119.17229 sigma= 9.671015 NNL= 14.742243\n", + "Epoch: 5750 mu= 118.9765 sigma= 9.618367 NNL= 14.722568\n", + "Epoch: 6000 mu= 118.7857 sigma= 9.571617 NNL= 14.7048235\n", + "Epoch: 6250 mu= 118.60021 sigma= 9.530409 NNL= 14.688967\n", + "Epoch: 6500 mu= 118.42044 sigma= 9.494398 NNL= 14.674938\n", + "Epoch: 6750 mu= 118.246956 sigma= 9.463246 NNL= 14.662679\n", + "Epoch: 7000 mu= 118.08017 sigma= 9.436613 NNL= 14.652098\n", + "Epoch: 7250 mu= 117.92072 sigma= 9.414148 NNL= 14.6431055\n", + "Epoch: 7500 mu= 117.76924 sigma= 9.395499 NNL= 14.635593\n", + "Epoch: 7750 mu= 117.6263 sigma= 9.380307 NNL= 14.629436\n", + "Epoch: 8000 mu= 117.49268 sigma= 9.368198 NNL= 14.624507\n", + "Epoch: 8250 mu= 117.369156 sigma= 9.358791 NNL= 14.620665\n", + "Epoch: 8500 mu= 117.256355 sigma= 9.351704 NNL= 14.617759\n", + "Epoch: 8750 mu= 117.15502 sigma= 9.346558 NNL= 14.615643\n", + "Epoch: 9000 mu= 117.065704 sigma= 9.342973 NNL= 14.614166\n", + "Epoch: 9250 mu= 116.988884 sigma= 9.340602 NNL= 14.613188\n", + "Epoch: 9500 mu= 116.92455 sigma= 9.339123 NNL= 14.612577\n", + "Epoch: 9750 mu= 116.872574 sigma= 9.338255 NNL= 14.612222\n" + ] } - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "Qy-C01R-1vYu", - "colab_type": "text" - }, - "source": [ - "When we minimize the negativ log likelihood, the optimal values for the slope and intercept are the same as in chapter 3, where we minized the MSE!\n" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "colab_type": "text", - "id": "bynRM7KxxxvC" - }, + ], "source": [ - "### Exercise 1 \n", - " \n", - "\n", + "# Gradient Decent with TF in eager modus:\n", + "for i in range(10000):\n", + " with tf.GradientTape() as tape: #Record the gradients from now on\n", + " likelihoods = f(ys, mu,sigma)\n", + " loss = -tf.math.reduce_sum(tf.math.log(likelihoods))\n", + " grads = tape.gradient(loss, variables)\n", + " optimizer.apply_gradients(zip(grads, variables))\n", + " #grad_mu, grad_sigma = tape.gradient(loss, [mu,sigma])\n", + " #mu = tf.Variable(mu - eta * grad_mu)\n", + " #sigma = tf.Variable(sigma - eta * grad_sigma)\n", "\n", - "*Exercise 1: Change the value of sigma in the calculation of the likelihood (function f) and rerun the cells. Does the result depend on it?*" + " if (i % 250 == 0):\n", + " print(\"Epoch:\",i, \"mu=\",mu.numpy(),\"sigma=\",sigma.numpy(), \"NNL=\", loss.numpy())" ] }, { - "cell_type": "markdown", + "cell_type": "code", + "execution_count": null, "metadata": { - "id": "4UDRuNw49R16", - "colab_type": "text" + "colab": {}, + "colab_type": "code", + "id": "Tjd6PU5oAgf2" }, - "source": [ - "Scroll down to see the solution.\n", - "
\n", - "
\n", - "
\n", - "
\n", - "
\n", - "
\n", - "
\n", - "
\n", - "
\n", - "
\n", - "
\n", - "
" - ] + "outputs": [], + "source": [] + } + ], + "metadata": { + "accelerator": "GPU", + "colab": { + "collapsed_sections": [], + "name": "nb_ch04_03.ipynb", + "provenance": [], + "toc_visible": true }, - { - "cell_type": "markdown", - "metadata": { - "id": "iwFa6LuG9Pc6", - "colab_type": "text" - }, - "source": [ - "**Solution**\n", - "\n", - "No, the result does not on the value of the variance which is a assumed to be constant." - ] + "kernelspec": { + "display_name": "Python 3", + "name": "python3" }, - { - "cell_type": "markdown", - "metadata": { - "id": "Sb8XZ6b93Tza", - "colab_type": "text" + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 }, - "source": [ - "### Return to the book \n", - " " - ] + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.2" }, - { - "cell_type": "markdown", - "metadata": { - "colab_type": "text", - "id": "63bFgR0nxxvE" - }, - "source": [ - "## Second experiment on fitting a Normal distribution model\n", - "\n", - "In the next cells you will assume that you observed the systolic blood pressure of 4 women of the same age: sbp=[131,105,114,117].\n", - "Let's plot a normal distribution along with the likelihood of the observed values,\n", - "Your task is to manually adapt the parameters $\\mu$ and $\\sigma$ of the Normal distribution (with the interactive silders) that yield a maximal joint likelihood which you get with the same parameter values that yield a minimal NLL.\n", - "\n" - ] - }, - { - "cell_type": "code", - "metadata": { - "colab_type": "code", - "id": "Sviq09_AxxvF", - "colab": {} - }, - "source": [ - "#!pip install ipywidgets" - ], - "execution_count": 11, - "outputs": [] - }, - { - "cell_type": "code", - "metadata": { - "colab_type": "code", - "id": "JrgTsZfSxxvN", - "colab": { - "base_uri": "https://localhost:8080/", - "height": 553, - "referenced_widgets": [ - "cfe34b2bfdfc4168972001eeb817e2b2", - "401b292ae54a406783720d454e1203de", - "e50e9dd71ffd4c989c3e2453de138b87", - "a21b6cce9ef34cfca0c3fbb4ca52c48e", - "61a6ca3684a24561a2c133887f136eab", - "eadd7d1869fb45c880a47bc24ab4b7e5", - "95815afd535443cfad28a159055ff070", - "d17791dacefc4f5f8083e365c4269a9d", - "40ab5affb3db41bea57aca47a6021d8c", - "659972b9eae746e0ac317d3e84c8a7de" - ] + "widgets": { + "application/vnd.jupyter.widget-state+json": { + "401b292ae54a406783720d454e1203de": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "40ab5affb3db41bea57aca47a6021d8c": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "61a6ca3684a24561a2c133887f136eab": { + "model_module": "@jupyter-widgets/output", + "model_name": "OutputModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/output", + "_model_module_version": "1.0.0", + "_model_name": "OutputModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/output", + "_view_module_version": "1.0.0", + "_view_name": "OutputView", + "layout": "IPY_MODEL_659972b9eae746e0ac317d3e84c8a7de", + "msg_id": "", + "outputs": [ + { + "image/png": "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\n", + "metadata": { + "tags": [] + }, + "output_type": "display_data", + "text/plain": "
" + } + ] + } + }, + "659972b9eae746e0ac317d3e84c8a7de": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "95815afd535443cfad28a159055ff070": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "a21b6cce9ef34cfca0c3fbb4ca52c48e": { + "model_module": "@jupyter-widgets/controls", + "model_name": "IntSliderModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "IntSliderModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "IntSliderView", + "continuous_update": true, + "description": "sigma", + "description_tooltip": null, + "disabled": false, + "layout": "IPY_MODEL_40ab5affb3db41bea57aca47a6021d8c", + "max": 20, + "min": 2, + "orientation": "horizontal", + "readout": true, + "readout_format": "d", + "step": 1, + "style": "IPY_MODEL_d17791dacefc4f5f8083e365c4269a9d", + "value": 11 + } + }, + "cfe34b2bfdfc4168972001eeb817e2b2": { + "model_module": "@jupyter-widgets/controls", + "model_name": "VBoxModel", + "state": { + "_dom_classes": [ + "widget-interact" + ], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "VBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "VBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_e50e9dd71ffd4c989c3e2453de138b87", + "IPY_MODEL_a21b6cce9ef34cfca0c3fbb4ca52c48e", + "IPY_MODEL_61a6ca3684a24561a2c133887f136eab" + ], + "layout": "IPY_MODEL_401b292ae54a406783720d454e1203de" + } }, - "outputId": "e83d7a73-b350-41d8-eabe-1c6834af3a24" - }, - "source": [ - "from ipywidgets import interactive\n", - "plt.figure(figsize=(5,5))\n", - "ys=np.array([131,105,114,117], dtype='float32')\n", - "sbp = np.linspace(80,140,200, dtype='float32')\n", - "\n", - "def make_interactive(mu, sigma):\n", - " likelihoods = f(ys, mu,sigma)\n", - " for i in range(4):\n", - " plt.plot([ys[i], ys[i]], [0, likelihoods[i]], 'k-', lw=1,color='red') \n", - " plt.plot(sbp, f(sbp, mu,sigma),linewidth=3)\n", - " plt.xlabel('sbp')\n", - " plt.ylabel('likelihood')\n", - " plt.title('NLL: {:.2f}'.format(-np.sum(np.log(likelihoods))))\n", - "\n", - "interactive(make_interactive,mu=(90, 130, 1), sigma=(2,20,1))" - ], - "execution_count": 12, - "outputs": [ - { - "output_type": "display_data", - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "cfe34b2bfdfc4168972001eeb817e2b2", - "version_minor": 0, - "version_major": 2 - }, - "text/plain": [ - "interactive(children=(IntSlider(value=110, description='mu', max=130, min=90), IntSlider(value=11, description…" - ] - }, - "metadata": { - "tags": [] + "d17791dacefc4f5f8083e365c4269a9d": { + "model_module": "@jupyter-widgets/controls", + "model_name": "SliderStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "SliderStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "", + "handle_color": null } }, - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ] - }, - "metadata": { - "tags": [] + "e50e9dd71ffd4c989c3e2453de138b87": { + "model_module": "@jupyter-widgets/controls", + "model_name": "IntSliderModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "IntSliderModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "IntSliderView", + "continuous_update": true, + "description": "mu", + "description_tooltip": null, + "disabled": false, + "layout": "IPY_MODEL_95815afd535443cfad28a159055ff070", + "max": 130, + "min": 90, + "orientation": "horizontal", + "readout": true, + "readout_format": "d", + "step": 1, + "style": "IPY_MODEL_eadd7d1869fb45c880a47bc24ab4b7e5", + "value": 110 } - } - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "FnhT9I229GWH", - "colab_type": "text" - }, - "source": [ - "### Exercise 2\n", - " \n", - "\n", - "Exercise 2: Use TF to fit a Normal distribution that minimizes the NLL for the systolic blood pressure of the 4 observed sbp values . Compare the results with your manually determined parameters $\\mu$ and $\\sigma$." - ] - }, - { - "cell_type": "code", - "metadata": { - "id": "n-nSWXYadTft", - "colab_type": "code", - "colab": {} - }, - "source": [ - "# Write your code here" - ], - "execution_count": 13, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "Hv1IEA74dPF6", - "colab_type": "text" - }, - "source": [ - "Scroll down to see the solution.\n", - "\n", - "
\n", - "
\n", - "
\n", - "
\n", - "
\n", - "
\n", - "
\n", - "
\n", - "
\n", - "
\n", - "
\n", - "
\n", - "
\n", - "
\n", - "
\n", - "
\n", - "
\n", - "
\n", - "
\n", - "
\n", - "
" - ] - }, - { - "cell_type": "code", - "metadata": { - "colab_type": "code", - "id": "9j1rQwNbxxvW", - "colab": {} - }, - "source": [ - "mu = tf.Variable(124.0)\n", - "sigma = tf.Variable(10.0)\n", - "variables = [mu,sigma]\n", - "#eta = 0.0004\n", - "#likelihoods = f(ys, mu,sigma)\n", - "#loss = -tf.math.reduce_sum(tf.math.log(likelihoods)) \n", - "optimizer = tf.optimizers.Adam()\n" - ], - "execution_count": 14, - "outputs": [] - }, - { - "cell_type": "code", - "metadata": { - "colab_type": "code", - "id": "_WnpNZojxxva", - "colab": { - "base_uri": "https://localhost:8080/", - "height": 697 }, - "outputId": "4acbb4be-9cfd-4b03-fe7f-6d6ac616b13a" - }, - "source": [ - "# Gradient Decent with TF in eager modus:\n", - "for i in range(10000):\n", - " with tf.GradientTape() as tape: #Record the gradients from now on\n", - " likelihoods = f(ys, mu,sigma)\n", - " loss = -tf.math.reduce_sum(tf.math.log(likelihoods))\n", - " grads = tape.gradient(loss, variables)\n", - " optimizer.apply_gradients(zip(grads, variables))\n", - " #grad_mu, grad_sigma = tape.gradient(loss, [mu,sigma])\n", - " #mu = tf.Variable(mu - eta * grad_mu)\n", - " #sigma = tf.Variable(sigma - eta * grad_sigma)\n", - "\n", - " if (i % 250 == 0):\n", - " print(\"Epoch:\",i, \"mu=\",mu.numpy(),\"sigma=\",sigma.numpy(), \"NNL=\", loss.numpy())" - ], - "execution_count": 15, - "outputs": [ - { - "output_type": "stream", - "text": [ - "Epoch: 0 mu= 123.999 sigma= 10.001 NNL= 15.681095\n", - "Epoch: 250 mu= 123.75322 sigma= 10.235319 NNL= 15.580299\n", - "Epoch: 500 mu= 123.51592 sigma= 10.434735 NNL= 15.498944\n", - "Epoch: 750 mu= 123.28526 sigma= 10.599915 NNL= 15.4315815\n", - "Epoch: 1000 mu= 123.05974 sigma= 10.730648 NNL= 15.374268\n", - "Epoch: 1250 mu= 122.837746 sigma= 10.826036 NNL= 15.323981\n", - "Epoch: 1500 mu= 122.61827 sigma= 10.884986 NNL= 15.27849\n", - "Epoch: 1750 mu= 122.40066 sigma= 10.906953 NNL= 15.23614\n", - "Epoch: 2000 mu= 122.18322 sigma= 10.892846 NNL= 15.195525\n", - "Epoch: 2250 mu= 121.96578 sigma= 10.845757 NNL= 15.155945\n", - "Epoch: 2500 mu= 121.747444 sigma= 10.77124 NNL= 15.116928\n", - "Epoch: 2750 mu= 121.5281 sigma= 10.676418 NNL= 15.07843\n", - "Epoch: 3000 mu= 121.30838 sigma= 10.569158 NNL= 15.040689\n", - "Epoch: 3250 mu= 121.08713 sigma= 10.456282 NNL= 15.003695\n", - "Epoch: 3500 mu= 120.86592 sigma= 10.343266 NNL= 14.967867\n", - "Epoch: 3750 mu= 120.646576 sigma= 10.234177 NNL= 14.933611\n", - "Epoch: 4000 mu= 120.42786 sigma= 10.131305 NNL= 14.900812\n", - "Epoch: 4250 mu= 120.211075 sigma= 10.035813 NNL= 14.869716\n", - "Epoch: 4500 mu= 119.996605 sigma= 9.948094 NNL= 14.840401\n", - "Epoch: 4750 mu= 119.78515 sigma= 9.868075 NNL= 14.812966\n", - "Epoch: 5000 mu= 119.576965 sigma= 9.795481 NNL= 14.78744\n", - "Epoch: 5250 mu= 119.37256 sigma= 9.729924 NNL= 14.7638645\n", - "Epoch: 5500 mu= 119.17229 sigma= 9.671015 NNL= 14.742243\n", - "Epoch: 5750 mu= 118.9765 sigma= 9.618367 NNL= 14.722568\n", - "Epoch: 6000 mu= 118.7857 sigma= 9.571617 NNL= 14.7048235\n", - "Epoch: 6250 mu= 118.60021 sigma= 9.530409 NNL= 14.688967\n", - "Epoch: 6500 mu= 118.42044 sigma= 9.494398 NNL= 14.674938\n", - "Epoch: 6750 mu= 118.246956 sigma= 9.463246 NNL= 14.662679\n", - "Epoch: 7000 mu= 118.08017 sigma= 9.436613 NNL= 14.652098\n", - "Epoch: 7250 mu= 117.92072 sigma= 9.414148 NNL= 14.6431055\n", - "Epoch: 7500 mu= 117.76924 sigma= 9.395499 NNL= 14.635593\n", - "Epoch: 7750 mu= 117.6263 sigma= 9.380307 NNL= 14.629436\n", - "Epoch: 8000 mu= 117.49268 sigma= 9.368198 NNL= 14.624507\n", - "Epoch: 8250 mu= 117.369156 sigma= 9.358791 NNL= 14.620665\n", - "Epoch: 8500 mu= 117.256355 sigma= 9.351704 NNL= 14.617759\n", - "Epoch: 8750 mu= 117.15502 sigma= 9.346558 NNL= 14.615643\n", - "Epoch: 9000 mu= 117.065704 sigma= 9.342973 NNL= 14.614166\n", - "Epoch: 9250 mu= 116.988884 sigma= 9.340602 NNL= 14.613188\n", - "Epoch: 9500 mu= 116.92455 sigma= 9.339123 NNL= 14.612577\n", - "Epoch: 9750 mu= 116.872574 sigma= 9.338255 NNL= 14.612222\n" - ], - "name": "stdout" + "eadd7d1869fb45c880a47bc24ab4b7e5": { + "model_module": "@jupyter-widgets/controls", + "model_name": "SliderStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "SliderStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "", + "handle_color": null + } } - ] - }, - { - "cell_type": "code", - "metadata": { - "id": "Tjd6PU5oAgf2", - "colab_type": "code", - "colab": {} - }, - "source": [ - "" - ], - "execution_count": null, - "outputs": [] + } } - ] -} \ No newline at end of file + }, + "nbformat": 4, + "nbformat_minor": 0 +}