"
+ ],
+ "text/plain": [
+ " City name Population Area square miles Population density\n",
+ "0 San Francisco 852469 46.87 18187.945381\n",
+ "1 San Jose 1015785 176.53 5754.177760\n",
+ "2 Sacramento 485199 97.92 4955.055147"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 13
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "text",
+ "id": "6qh63m-ayb-c"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "## Exercise #1\n",
+ "\n",
+ "Modify the `cities` table by adding a new boolean column that is True if and only if *both* of the following are True:\n",
+ "\n",
+ " * The city is named after a saint.\n",
+ " * The city has an area greater than 50 square miles.\n",
+ "\n",
+ "**Note:** Boolean `Series` are combined using the bitwise, rather than the traditional boolean, operators. For example, when performing *logical and*, use `&` instead of `and`.\n",
+ "\n",
+ "**Hint:** \"San\" in Spanish means \"saint.\""
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "code",
+ "id": "zCOn8ftSyddH",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 142
+ },
+ "outputId": "19c212af-cdfb-4b88-db56-0155001eee8f"
+ },
+ "cell_type": "code",
+ "source": [
+ "# Your code here\n",
+ "cities['Is wide and has saint name'] = (cities['Area square miles'] > 50) & cities['City name'].apply(lambda name: name.startswith('San'))\n",
+ "cities"
+ ],
+ "execution_count": 14,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
City name
\n",
+ "
Population
\n",
+ "
Area square miles
\n",
+ "
Population density
\n",
+ "
Is wide and has saint name
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
0
\n",
+ "
San Francisco
\n",
+ "
852469
\n",
+ "
46.87
\n",
+ "
18187.945381
\n",
+ "
False
\n",
+ "
\n",
+ "
\n",
+ "
1
\n",
+ "
San Jose
\n",
+ "
1015785
\n",
+ "
176.53
\n",
+ "
5754.177760
\n",
+ "
True
\n",
+ "
\n",
+ "
\n",
+ "
2
\n",
+ "
Sacramento
\n",
+ "
485199
\n",
+ "
97.92
\n",
+ "
4955.055147
\n",
+ "
False
\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " City name Population Area square miles Population density \\\n",
+ "0 San Francisco 852469 46.87 18187.945381 \n",
+ "1 San Jose 1015785 176.53 5754.177760 \n",
+ "2 Sacramento 485199 97.92 4955.055147 \n",
+ "\n",
+ " Is wide and has saint name \n",
+ "0 False \n",
+ "1 True \n",
+ "2 False "
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 14
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "text",
+ "id": "YHIWvc9Ms-Ll"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "### Solution\n",
+ "\n",
+ "Click below for a solution."
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "code",
+ "id": "T5OlrqtdtCIb",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "cities['Is wide and has saint name'] = (cities['Area square miles'] > 50) & cities['City name'].apply(lambda name: name.startswith('San'))\n",
+ "cities"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "colab_type": "text",
+ "id": "f-xAOJeMiXFB"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "## Indexes\n",
+ "Both `Series` and `DataFrame` objects also define an `index` property that assigns an identifier value to each `Series` item or `DataFrame` row. \n",
+ "\n",
+ "By default, at construction, *pandas* assigns index values that reflect the ordering of the source data. Once created, the index values are stable; that is, they do not change when data is reordered."
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "code",
+ "id": "2684gsWNinq9",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 35
+ },
+ "outputId": "86257f88-2859-4aad-f353-8e5a1f90d77c"
+ },
+ "cell_type": "code",
+ "source": [
+ "city_names.index"
+ ],
+ "execution_count": 16,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "RangeIndex(start=0, stop=3, step=1)"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 16
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "code",
+ "id": "F_qPe2TBjfWd",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 35
+ },
+ "outputId": "e7cc6faf-4648-4009-e389-5ab482f91957"
+ },
+ "cell_type": "code",
+ "source": [
+ "cities.index"
+ ],
+ "execution_count": 17,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/plain": [
+ "RangeIndex(start=0, stop=3, step=1)"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 17
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "text",
+ "id": "hp2oWY9Slo_h"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "Call `DataFrame.reindex` to manually reorder the rows. For example, the following has the same effect as sorting by city name:"
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "code",
+ "id": "sN0zUzSAj-U1",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 142
+ },
+ "outputId": "20b32782-700a-4da2-c018-30c86e7bbf7f"
+ },
+ "cell_type": "code",
+ "source": [
+ "cities.reindex([2, 0, 1])"
+ ],
+ "execution_count": 18,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
City name
\n",
+ "
Population
\n",
+ "
Area square miles
\n",
+ "
Population density
\n",
+ "
Is wide and has saint name
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
2
\n",
+ "
Sacramento
\n",
+ "
485199
\n",
+ "
97.92
\n",
+ "
4955.055147
\n",
+ "
False
\n",
+ "
\n",
+ "
\n",
+ "
0
\n",
+ "
San Francisco
\n",
+ "
852469
\n",
+ "
46.87
\n",
+ "
18187.945381
\n",
+ "
False
\n",
+ "
\n",
+ "
\n",
+ "
1
\n",
+ "
San Jose
\n",
+ "
1015785
\n",
+ "
176.53
\n",
+ "
5754.177760
\n",
+ "
True
\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " City name Population Area square miles Population density \\\n",
+ "2 Sacramento 485199 97.92 4955.055147 \n",
+ "0 San Francisco 852469 46.87 18187.945381 \n",
+ "1 San Jose 1015785 176.53 5754.177760 \n",
+ "\n",
+ " Is wide and has saint name \n",
+ "2 False \n",
+ "0 False \n",
+ "1 True "
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 18
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "text",
+ "id": "-GQFz8NZuS06"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "Reindexing is a great way to shuffle (randomize) a `DataFrame`. In the example below, we take the index, which is array-like, and pass it to NumPy's `random.permutation` function, which shuffles its values in place. Calling `reindex` with this shuffled array causes the `DataFrame` rows to be shuffled in the same way.\n",
+ "Try running the following cell multiple times!"
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "code",
+ "id": "mF8GC0k8uYhz",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 142
+ },
+ "outputId": "55402571-b383-42b0-d3f9-7803f81af85a"
+ },
+ "cell_type": "code",
+ "source": [
+ "cities.reindex(np.random.permutation(cities.index))"
+ ],
+ "execution_count": 19,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
City name
\n",
+ "
Population
\n",
+ "
Area square miles
\n",
+ "
Population density
\n",
+ "
Is wide and has saint name
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
2
\n",
+ "
Sacramento
\n",
+ "
485199
\n",
+ "
97.92
\n",
+ "
4955.055147
\n",
+ "
False
\n",
+ "
\n",
+ "
\n",
+ "
0
\n",
+ "
San Francisco
\n",
+ "
852469
\n",
+ "
46.87
\n",
+ "
18187.945381
\n",
+ "
False
\n",
+ "
\n",
+ "
\n",
+ "
1
\n",
+ "
San Jose
\n",
+ "
1015785
\n",
+ "
176.53
\n",
+ "
5754.177760
\n",
+ "
True
\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " City name Population Area square miles Population density \\\n",
+ "2 Sacramento 485199 97.92 4955.055147 \n",
+ "0 San Francisco 852469 46.87 18187.945381 \n",
+ "1 San Jose 1015785 176.53 5754.177760 \n",
+ "\n",
+ " Is wide and has saint name \n",
+ "2 False \n",
+ "0 False \n",
+ "1 True "
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 19
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "text",
+ "id": "fSso35fQmGKb"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "For more information, see the [Index documentation](http://pandas.pydata.org/pandas-docs/stable/indexing.html#index-objects)."
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "text",
+ "id": "8UngIdVhz8C0"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "## Exercise #2\n",
+ "\n",
+ "The `reindex` method allows index values that are not in the original `DataFrame`'s index values. Try it and see what happens if you use such values! Why do you think this is allowed?"
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "code",
+ "id": "PN55GrDX0jzO",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 173
+ },
+ "outputId": "9a6f0d46-1bdc-4ad8-a899-085133ac8116"
+ },
+ "cell_type": "code",
+ "source": [
+ "# Your code here\n",
+ "cities.reindex([0, 1, 5, 3])"
+ ],
+ "execution_count": 20,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
City name
\n",
+ "
Population
\n",
+ "
Area square miles
\n",
+ "
Population density
\n",
+ "
Is wide and has saint name
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
0
\n",
+ "
San Francisco
\n",
+ "
852469.0
\n",
+ "
46.87
\n",
+ "
18187.945381
\n",
+ "
False
\n",
+ "
\n",
+ "
\n",
+ "
1
\n",
+ "
San Jose
\n",
+ "
1015785.0
\n",
+ "
176.53
\n",
+ "
5754.177760
\n",
+ "
True
\n",
+ "
\n",
+ "
\n",
+ "
5
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ "
\n",
+ "
3
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
NaN
\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " City name Population Area square miles Population density \\\n",
+ "0 San Francisco 852469.0 46.87 18187.945381 \n",
+ "1 San Jose 1015785.0 176.53 5754.177760 \n",
+ "5 NaN NaN NaN NaN \n",
+ "3 NaN NaN NaN NaN \n",
+ "\n",
+ " Is wide and has saint name \n",
+ "0 False \n",
+ "1 True \n",
+ "5 NaN \n",
+ "3 NaN "
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 20
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "text",
+ "id": "TJffr5_Jwqvd"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "### Solution\n",
+ "\n",
+ "Click below for the solution."
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "text",
+ "id": "8oSvi2QWwuDH"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "If your `reindex` input array includes values not in the original `DataFrame` index values, `reindex` will add new rows for these \"missing\" indices and populate all corresponding columns with `NaN` values:"
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "code",
+ "id": "yBdkucKCwy4x",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "cities.reindex([0, 4, 5, 2])"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "colab_type": "text",
+ "id": "2l82PhPbwz7g"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "This behavior is desirable because indexes are often strings pulled from the actual data (see the [*pandas* reindex\n",
+ "documentation](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.reindex.html) for an example\n",
+ "in which the index values are browser names).\n",
+ "\n",
+ "In this case, allowing \"missing\" indices makes it easy to reindex using an external list, as you don't have to worry about\n",
+ "sanitizing the input."
+ ]
+ }
+ ]
+}
\ No newline at end of file
From e35d05a090d087e5a6685ec099cbd216fd559959 Mon Sep 17 00:00:00 2001
From: Amartya Bhattacharya
<36528245+amartyabhattacharya@users.noreply.github.com>
Date: Sun, 17 Feb 2019 01:06:36 +0530
Subject: [PATCH 02/11] Created using Colaboratory
---
first_steps_with_tensor_flow.ipynb | 1764 ++++++++++++++++++++++++++++
1 file changed, 1764 insertions(+)
create mode 100644 first_steps_with_tensor_flow.ipynb
diff --git a/first_steps_with_tensor_flow.ipynb b/first_steps_with_tensor_flow.ipynb
new file mode 100644
index 0000000..f1bd9f2
--- /dev/null
+++ b/first_steps_with_tensor_flow.ipynb
@@ -0,0 +1,1764 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 0,
+ "metadata": {
+ "colab": {
+ "name": "first_steps_with_tensor_flow.ipynb",
+ "version": "0.3.2",
+ "provenance": [],
+ "collapsed_sections": [
+ "JndnmDMp66FL",
+ "ajVM7rkoYXeL",
+ "ci1ISxxrZ7v0"
+ ],
+ "include_colab_link": true
+ },
+ "kernelspec": {
+ "name": "python2",
+ "display_name": "Python 2"
+ }
+ },
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "view-in-github",
+ "colab_type": "text"
+ },
+ "source": [
+ ""
+ ]
+ },
+ {
+ "metadata": {
+ "id": "JndnmDMp66FL",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "#### Copyright 2017 Google LLC."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "hMqWDc_m6rUC",
+ "colab_type": "code",
+ "cellView": "both",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "# Licensed under the Apache License, Version 2.0 (the \"License\");\n",
+ "# you may not use this file except in compliance with the License.\n",
+ "# You may obtain a copy of the License at\n",
+ "#\n",
+ "# https://www.apache.org/licenses/LICENSE-2.0\n",
+ "#\n",
+ "# Unless required by applicable law or agreed to in writing, software\n",
+ "# distributed under the License is distributed on an \"AS IS\" BASIS,\n",
+ "# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n",
+ "# See the License for the specific language governing permissions and\n",
+ "# limitations under the License."
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "4f3CKqFUqL2-",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "# First Steps with TensorFlow"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "Bd2Zkk1LE2Zr",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "**Learning Objectives:**\n",
+ " * Learn fundamental TensorFlow concepts\n",
+ " * Use the `LinearRegressor` class in TensorFlow to predict median housing price, at the granularity of city blocks, based on one input feature\n",
+ " * Evaluate the accuracy of a model's predictions using Root Mean Squared Error (RMSE)\n",
+ " * Improve the accuracy of a model by tuning its hyperparameters"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "MxiIKhP4E2Zr",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "The [data](https://developers.google.com/machine-learning/crash-course/california-housing-data-description) is based on 1990 census data from California."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "6TjLjL9IU80G",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "## Setup\n",
+ "In this first cell, we'll load the necessary libraries."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "rVFf5asKE2Zt",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "from __future__ import print_function\n",
+ "\n",
+ "import math\n",
+ "\n",
+ "from IPython import display\n",
+ "from matplotlib import cm\n",
+ "from matplotlib import gridspec\n",
+ "from matplotlib import pyplot as plt\n",
+ "import numpy as np\n",
+ "import pandas as pd\n",
+ "from sklearn import metrics\n",
+ "import tensorflow as tf\n",
+ "from tensorflow.python.data import Dataset\n",
+ "\n",
+ "tf.logging.set_verbosity(tf.logging.ERROR)\n",
+ "pd.options.display.max_rows = 10\n",
+ "pd.options.display.float_format = '{:.1f}'.format"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "ipRyUHjhU80Q",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "Next, we'll load our data set."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "9ivCDWnwE2Zx",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "california_housing_dataframe = pd.read_csv(\"https://download.mlcc.google.com/mledu-datasets/california_housing_train.csv\", sep=\",\")"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "vVk_qlG6U80j",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "We'll randomize the data, just to be sure not to get any pathological ordering effects that might harm the performance of Stochastic Gradient Descent. Additionally, we'll scale `median_house_value` to be in units of thousands, so it can be learned a little more easily with learning rates in a range that we usually use."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "r0eVyguIU80m",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 419
+ },
+ "outputId": "27720739-976f-4efe-edfc-48e077a2d608"
+ },
+ "cell_type": "code",
+ "source": [
+ "california_housing_dataframe = california_housing_dataframe.reindex(\n",
+ " np.random.permutation(california_housing_dataframe.index))\n",
+ "california_housing_dataframe[\"median_house_value\"] /= 1000.0\n",
+ "california_housing_dataframe"
+ ],
+ "execution_count": 3,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/html": [
+ "
"
+ ],
+ "text/plain": [
+ " longitude latitude housing_median_age total_rooms total_bedrooms \\\n",
+ "count 17000.0 17000.0 17000.0 17000.0 17000.0 \n",
+ "mean -119.6 35.6 28.6 2643.7 539.4 \n",
+ "std 2.0 2.1 12.6 2179.9 421.5 \n",
+ "min -124.3 32.5 1.0 2.0 1.0 \n",
+ "25% -121.8 33.9 18.0 1462.0 297.0 \n",
+ "50% -118.5 34.2 29.0 2127.0 434.0 \n",
+ "75% -118.0 37.7 37.0 3151.2 648.2 \n",
+ "max -114.3 42.0 52.0 37937.0 6445.0 \n",
+ "\n",
+ " population households median_income median_house_value \n",
+ "count 17000.0 17000.0 17000.0 17000.0 \n",
+ "mean 1429.6 501.2 3.9 207.3 \n",
+ "std 1147.9 384.5 1.9 116.0 \n",
+ "min 3.0 1.0 0.5 15.0 \n",
+ "25% 790.0 282.0 2.6 119.4 \n",
+ "50% 1167.0 409.0 3.5 180.4 \n",
+ "75% 1721.0 605.2 4.8 265.0 \n",
+ "max 35682.0 6082.0 15.0 500.0 "
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 4
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "Lr6wYl2bt2Ep",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "## Build the First Model\n",
+ "\n",
+ "In this exercise, we'll try to predict `median_house_value`, which will be our label (sometimes also called a target). We'll use `total_rooms` as our input feature.\n",
+ "\n",
+ "**NOTE:** Our data is at the city block level, so this feature represents the total number of rooms in that block.\n",
+ "\n",
+ "To train our model, we'll use the [LinearRegressor](https://www.tensorflow.org/api_docs/python/tf/estimator/LinearRegressor) interface provided by the TensorFlow [Estimator](https://www.tensorflow.org/get_started/estimator) API. This API takes care of a lot of the low-level model plumbing, and exposes convenient methods for performing model training, evaluation, and inference."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "0cpcsieFhsNI",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "### Step 1: Define Features and Configure Feature Columns"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "EL8-9d4ZJNR7",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "In order to import our training data into TensorFlow, we need to specify what type of data each feature contains. There are two main types of data we'll use in this and future exercises:\n",
+ "\n",
+ "* **Categorical Data**: Data that is textual. In this exercise, our housing data set does not contain any categorical features, but examples you might see would be the home style, the words in a real-estate ad.\n",
+ "\n",
+ "* **Numerical Data**: Data that is a number (integer or float) and that you want to treat as a number. As we will discuss more later sometimes you might want to treat numerical data (e.g., a postal code) as if it were categorical.\n",
+ "\n",
+ "In TensorFlow, we indicate a feature's data type using a construct called a **feature column**. Feature columns store only a description of the feature data; they do not contain the feature data itself.\n",
+ "\n",
+ "To start, we're going to use just one numeric input feature, `total_rooms`. The following code pulls the `total_rooms` data from our `california_housing_dataframe` and defines the feature column using `numeric_column`, which specifies its data is numeric:"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "rhEbFCZ86cDZ",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "# Define the input feature: total_rooms.\n",
+ "my_feature = california_housing_dataframe[[\"total_rooms\"]]\n",
+ "\n",
+ "# Configure a numeric feature column for total_rooms.\n",
+ "feature_columns = [tf.feature_column.numeric_column(\"total_rooms\")]"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "K_3S8teX7Rd2",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "**NOTE:** The shape of our `total_rooms` data is a one-dimensional array (a list of the total number of rooms for each block). This is the default shape for `numeric_column`, so we don't have to pass it as an argument."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "UMl3qrU5MGV6",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "### Step 2: Define the Target"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "cw4nrfcB7kyk",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "Next, we'll define our target, which is `median_house_value`. Again, we can pull it from our `california_housing_dataframe`:"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "l1NvvNkH8Kbt",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "# Define the label.\n",
+ "targets = california_housing_dataframe[\"median_house_value\"]"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "4M-rTFHL2UkA",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "### Step 3: Configure the LinearRegressor"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "fUfGQUNp7jdL",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "Next, we'll configure a linear regression model using LinearRegressor. We'll train this model using the `GradientDescentOptimizer`, which implements Mini-Batch Stochastic Gradient Descent (SGD). The `learning_rate` argument controls the size of the gradient step.\n",
+ "\n",
+ "**NOTE:** To be safe, we also apply [gradient clipping](https://developers.google.com/machine-learning/glossary/#gradient_clipping) to our optimizer via `clip_gradients_by_norm`. Gradient clipping ensures the magnitude of the gradients do not become too large during training, which can cause gradient descent to fail. "
+ ]
+ },
+ {
+ "metadata": {
+ "id": "ubhtW-NGU802",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 143
+ },
+ "outputId": "3884b076-3587-4f6c-8150-7564729b6bce"
+ },
+ "cell_type": "code",
+ "source": [
+ "# Use gradient descent as the optimizer for training the model.\n",
+ "my_optimizer=tf.train.GradientDescentOptimizer(learning_rate=0.0000001)\n",
+ "my_optimizer = tf.contrib.estimator.clip_gradients_by_norm(my_optimizer, 5.0)\n",
+ "\n",
+ "# Configure the linear regression model with our feature columns and optimizer.\n",
+ "# Set a learning rate of 0.0000001 for Gradient Descent.\n",
+ "linear_regressor = tf.estimator.LinearRegressor(\n",
+ " feature_columns=feature_columns,\n",
+ " optimizer=my_optimizer\n",
+ ")"
+ ],
+ "execution_count": 7,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "WARNING: The TensorFlow contrib module will not be included in TensorFlow 2.0.\n",
+ "For more information, please see:\n",
+ " * https://github.com/tensorflow/community/blob/master/rfcs/20180907-contrib-sunset.md\n",
+ " * https://github.com/tensorflow/addons\n",
+ "If you depend on functionality not listed there, please file an issue.\n",
+ "\n"
+ ],
+ "name": "stdout"
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "-0IztwdK2f3F",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "### Step 4: Define the Input Function"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "S5M5j6xSCHxx",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "To import our California housing data into our `LinearRegressor`, we need to define an input function, which instructs TensorFlow how to preprocess\n",
+ "the data, as well as how to batch, shuffle, and repeat it during model training.\n",
+ "\n",
+ "First, we'll convert our *pandas* feature data into a dict of NumPy arrays. We can then use the TensorFlow [Dataset API](https://www.tensorflow.org/programmers_guide/datasets) to construct a dataset object from our data, and then break\n",
+ "our data into batches of `batch_size`, to be repeated for the specified number of epochs (num_epochs). \n",
+ "\n",
+ "**NOTE:** When the default value of `num_epochs=None` is passed to `repeat()`, the input data will be repeated indefinitely.\n",
+ "\n",
+ "Next, if `shuffle` is set to `True`, we'll shuffle the data so that it's passed to the model randomly during training. The `buffer_size` argument specifies\n",
+ "the size of the dataset from which `shuffle` will randomly sample.\n",
+ "\n",
+ "Finally, our input function constructs an iterator for the dataset and returns the next batch of data to the LinearRegressor."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "RKZ9zNcHJtwc",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "def my_input_fn(features, targets, batch_size=1, shuffle=True, num_epochs=None):\n",
+ " \"\"\"Trains a linear regression model of one feature.\n",
+ " \n",
+ " Args:\n",
+ " features: pandas DataFrame of features\n",
+ " targets: pandas DataFrame of targets\n",
+ " batch_size: Size of batches to be passed to the model\n",
+ " shuffle: True or False. Whether to shuffle the data.\n",
+ " num_epochs: Number of epochs for which data should be repeated. None = repeat indefinitely\n",
+ " Returns:\n",
+ " Tuple of (features, labels) for next data batch\n",
+ " \"\"\"\n",
+ " \n",
+ " # Convert pandas data into a dict of np arrays.\n",
+ " features = {key:np.array(value) for key,value in dict(features).items()} \n",
+ " \n",
+ " # Construct a dataset, and configure batching/repeating.\n",
+ " ds = Dataset.from_tensor_slices((features,targets)) # warning: 2GB limit\n",
+ " ds = ds.batch(batch_size).repeat(num_epochs)\n",
+ " \n",
+ " # Shuffle the data, if specified.\n",
+ " if shuffle:\n",
+ " ds = ds.shuffle(buffer_size=10000)\n",
+ " \n",
+ " # Return the next batch of data.\n",
+ " features, labels = ds.make_one_shot_iterator().get_next()\n",
+ " return features, labels"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "wwa6UeA1V5F_",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "**NOTE:** We'll continue to use this same input function in later exercises. For more\n",
+ "detailed documentation of input functions and the `Dataset` API, see the [TensorFlow Programmer's Guide](https://www.tensorflow.org/programmers_guide/datasets)."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "4YS50CQb2ooO",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "### Step 5: Train the Model"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "yP92XkzhU803",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "We can now call `train()` on our `linear_regressor` to train the model. We'll wrap `my_input_fn` in a `lambda`\n",
+ "so we can pass in `my_feature` and `target` as arguments (see this [TensorFlow input function tutorial](https://www.tensorflow.org/get_started/input_fn#passing_input_fn_data_to_your_model) for more details), and to start, we'll\n",
+ "train for 100 steps."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "5M-Kt6w8U803",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "_ = linear_regressor.train(\n",
+ " input_fn = lambda:my_input_fn(my_feature, targets),\n",
+ " steps=100\n",
+ ")"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "7Nwxqxlx2sOv",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "### Step 6: Evaluate the Model"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "KoDaF2dlJQG5",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "Let's make predictions on that training data, to see how well our model fit it during training.\n",
+ "\n",
+ "**NOTE:** Training error measures how well your model fits the training data, but it **_does not_** measure how well your model **_generalizes to new data_**. In later exercises, you'll explore how to split your data to evaluate your model's ability to generalize.\n"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "pDIxp6vcU809",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 53
+ },
+ "outputId": "93c81944-3447-4729-bf28-a2a6c72796bd"
+ },
+ "cell_type": "code",
+ "source": [
+ "# Create an input function for predictions.\n",
+ "# Note: Since we're making just one prediction for each example, we don't \n",
+ "# need to repeat or shuffle the data here.\n",
+ "prediction_input_fn =lambda: my_input_fn(my_feature, targets, num_epochs=1, shuffle=False)\n",
+ "\n",
+ "# Call predict() on the linear_regressor to make predictions.\n",
+ "predictions = linear_regressor.predict(input_fn=prediction_input_fn)\n",
+ "\n",
+ "# Format predictions as a NumPy array, so we can calculate error metrics.\n",
+ "predictions = np.array([item['predictions'][0] for item in predictions])\n",
+ "\n",
+ "# Print Mean Squared Error and Root Mean Squared Error.\n",
+ "mean_squared_error = metrics.mean_squared_error(predictions, targets)\n",
+ "root_mean_squared_error = math.sqrt(mean_squared_error)\n",
+ "print(\"Mean Squared Error (on training data): %0.3f\" % mean_squared_error)\n",
+ "print(\"Root Mean Squared Error (on training data): %0.3f\" % root_mean_squared_error)"
+ ],
+ "execution_count": 10,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "Mean Squared Error (on training data): 56367.025\n",
+ "Root Mean Squared Error (on training data): 237.417\n"
+ ],
+ "name": "stdout"
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "AKWstXXPzOVz",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "Is this a good model? How would you judge how large this error is?\n",
+ "\n",
+ "Mean Squared Error (MSE) can be hard to interpret, so we often look at Root Mean Squared Error (RMSE)\n",
+ "instead. A nice property of RMSE is that it can be interpreted on the same scale as the original targets.\n",
+ "\n",
+ "Let's compare the RMSE to the difference of the min and max of our targets:"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "7UwqGbbxP53O",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 89
+ },
+ "outputId": "748444c5-5bb8-48da-cb8f-ac7d13942118"
+ },
+ "cell_type": "code",
+ "source": [
+ "min_house_value = california_housing_dataframe[\"median_house_value\"].min()\n",
+ "max_house_value = california_housing_dataframe[\"median_house_value\"].max()\n",
+ "min_max_difference = max_house_value - min_house_value\n",
+ "\n",
+ "print(\"Min. Median House Value: %0.3f\" % min_house_value)\n",
+ "print(\"Max. Median House Value: %0.3f\" % max_house_value)\n",
+ "print(\"Difference between Min. and Max.: %0.3f\" % min_max_difference)\n",
+ "print(\"Root Mean Squared Error: %0.3f\" % root_mean_squared_error)"
+ ],
+ "execution_count": 11,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "Min. Median House Value: 14.999\n",
+ "Max. Median House Value: 500.001\n",
+ "Difference between Min. and Max.: 485.002\n",
+ "Root Mean Squared Error: 237.417\n"
+ ],
+ "name": "stdout"
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "JigJr0C7Pzit",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "Our error spans nearly half the range of the target values. Can we do better?\n",
+ "\n",
+ "This is the question that nags at every model developer. Let's develop some basic strategies to reduce model error.\n",
+ "\n",
+ "The first thing we can do is take a look at how well our predictions match our targets, in terms of overall summary statistics."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "941nclxbzqGH",
+ "colab_type": "code",
+ "cellView": "both",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 297
+ },
+ "outputId": "537af436-f081-41f0-f6a8-a3c883d09f85"
+ },
+ "cell_type": "code",
+ "source": [
+ "calibration_data = pd.DataFrame()\n",
+ "calibration_data[\"predictions\"] = pd.Series(predictions)\n",
+ "calibration_data[\"targets\"] = pd.Series(targets)\n",
+ "calibration_data.describe()"
+ ],
+ "execution_count": 12,
+ "outputs": [
+ {
+ "output_type": "execute_result",
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
predictions
\n",
+ "
targets
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
count
\n",
+ "
17000.0
\n",
+ "
17000.0
\n",
+ "
\n",
+ "
\n",
+ "
mean
\n",
+ "
0.1
\n",
+ "
207.3
\n",
+ "
\n",
+ "
\n",
+ "
std
\n",
+ "
0.1
\n",
+ "
116.0
\n",
+ "
\n",
+ "
\n",
+ "
min
\n",
+ "
0.0
\n",
+ "
15.0
\n",
+ "
\n",
+ "
\n",
+ "
25%
\n",
+ "
0.1
\n",
+ "
119.4
\n",
+ "
\n",
+ "
\n",
+ "
50%
\n",
+ "
0.1
\n",
+ "
180.4
\n",
+ "
\n",
+ "
\n",
+ "
75%
\n",
+ "
0.2
\n",
+ "
265.0
\n",
+ "
\n",
+ "
\n",
+ "
max
\n",
+ "
1.9
\n",
+ "
500.0
\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " predictions targets\n",
+ "count 17000.0 17000.0\n",
+ "mean 0.1 207.3\n",
+ "std 0.1 116.0\n",
+ "min 0.0 15.0\n",
+ "25% 0.1 119.4\n",
+ "50% 0.1 180.4\n",
+ "75% 0.2 265.0\n",
+ "max 1.9 500.0"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 12
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "E2-bf8Hq36y8",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "Okay, maybe this information is helpful. How does the mean value compare to the model's RMSE? How about the various quantiles?\n",
+ "\n",
+ "We can also visualize the data and the line we've learned. Recall that linear regression on a single feature can be drawn as a line mapping input *x* to output *y*.\n",
+ "\n",
+ "First, we'll get a uniform random sample of the data so we can make a readable scatter plot."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "SGRIi3mAU81H",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "sample = california_housing_dataframe.sample(n=300)"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "N-JwuJBKU81J",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "Next, we'll plot the line we've learned, drawing from the model's bias term and feature weight, together with the scatter plot. The line will show up red."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "7G12E76-339G",
+ "colab_type": "code",
+ "cellView": "both",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 361
+ },
+ "outputId": "7d475ade-6ea6-408c-f0b9-416bb0b57ca1"
+ },
+ "cell_type": "code",
+ "source": [
+ "# Get the min and max total_rooms values.\n",
+ "x_0 = sample[\"total_rooms\"].min()\n",
+ "x_1 = sample[\"total_rooms\"].max()\n",
+ "\n",
+ "# Retrieve the final weight and bias generated during training.\n",
+ "weight = linear_regressor.get_variable_value('linear/linear_model/total_rooms/weights')[0]\n",
+ "bias = linear_regressor.get_variable_value('linear/linear_model/bias_weights')\n",
+ "\n",
+ "# Get the predicted median_house_values for the min and max total_rooms values.\n",
+ "y_0 = weight * x_0 + bias \n",
+ "y_1 = weight * x_1 + bias\n",
+ "\n",
+ "# Plot our regression line from (x_0, y_0) to (x_1, y_1).\n",
+ "plt.plot([x_0, x_1], [y_0, y_1], c='r')\n",
+ "\n",
+ "# Label the graph axes.\n",
+ "plt.ylabel(\"median_house_value\")\n",
+ "plt.xlabel(\"total_rooms\")\n",
+ "\n",
+ "# Plot a scatter plot from our data sample.\n",
+ "plt.scatter(sample[\"total_rooms\"], sample[\"median_house_value\"])\n",
+ "\n",
+ "# Display graph.\n",
+ "plt.show()"
+ ],
+ "execution_count": 14,
+ "outputs": [
+ {
+ "output_type": "display_data",
+ "data": {
+ "image/png": "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\nz7uQkBBGR0fp6enB6XTS1NREXFzcgrdZZj/7Q3l5OW1tbRgMBvbs2TOrI93d559/TmVlJatXr9bW\nbdq0ibq6Ory9vfHx8aGkpITAwEAaGxupra3VbvGlpKTgcrkoKiriypUrmEwmSktLuffeexcx0Wyj\no6Ps3LmT4eFhJicnyc7Oxmq1UlBQwPj4OKtWraKkpASj0ajLfDD9L2cffvghNTU1AJw+fZqamhq8\nvb2xWCy8//77eHt789lnn3Hy5EkMBgN5eXnExsYyNjbG22+/zbVr11ixYgX79u1j+fLli5xoOlNZ\nWRkOhwMvLy8sFgvl5eW888478+q3X375hd27dzM1NUVERAS7du1ym3xXr15lyZIl2kBgzZo1vPvu\nu+zbt4+WlhY8PDxISEggKytLl/nsdjvV1dXzuq64c77KykoqKyuJiooiKSkJAKfTSVFREZcvX8bl\ncpGens7mzZtvet5duHCB8vJyAJ555hm2bdu24FmkkAshhBA6JrfWhRBCCB2TQi6EEELomBRyIYQQ\nQsekkAshhBA6JoVcCCGE0DEp5EIIIYSOSSEXQudOnDhxy9e//fbbW07eAZCRkUFzc/O/2SwhxB0i\nhVwIHXO5XFRVVd1ym0OHDjE0NHSHWiSEuNNk0hQhdKywsBCHw8HWrVtJSkri2LFjeHt7ExgYSHFx\nMQ0NDbS1tbFz505KSkq4fPkyNTU1mEwmXC4Xe/fuJSQk5C+P09PTQ1ZWFg899BDh4eG8+uqrfPDB\nB3R2dgJgs9nIy8sDoKqqijNnzuDl5UV4eDhFRUX09fXx2muvERcXR1tbGwEBAaSkpHDixAkcDgcf\nffQR69ato7y8nJaWFkwmExaLhbKyMrf8XXwh3MqCz3guhFgw3d3dKj4+XjkcDvXkk0+qkZERpZRS\npaWlqrKyUiml1FNPPaWuXLmilFKqvr5eORwOpZRS+/fvV6WlpUoppex2uzp37twtj2O1WtWvv/6q\nlFLq5MmTavv27Wpqako5nU6VmpqqWltbVXt7u9q4caOamJhQSimVk5Ojjh8/rr2/q6tLa9NM+yoq\nKlRxcbG6du2aioyMVE6nUyml1KlTp7S2CiFuTkbkQvwHXLx4kfXr12u/8f3oo49y7NixG7YLCgqi\noKAApRQDAwM3TEF5K35+foSFhQHwww8/EBsbi8FgwNPTk+joaDo6OvD09CQmJgaj0ai1o6Ojg5iY\nGAICArT5ACwWC4888ggAwcHB9Pb24ufnR3x8PHa7ncTERJKSkggODp7X5yLE3UCekQvxH6SUwmAw\nzFo3OTlJXl4e7733HnV1dWRkZNzWPmeKM3DDvmeOd7P1AJ6enrNe+/Oy+mPKh4qKCoqLiwGw2+38\n9NNPt9VGIe5GUsiF0DEPDw+cTicbNmygs7OT0dFRAJqbm4mIiACmi67T6WRsbAwPDw/uu+8+xsfH\n+eabb5iYmPhHx42MjKS5uVmbmvO7774jIiKCyMhIWltbmZycBOD8+fNaO/5Kd3c3hw4dYs2aNWzd\nupXExEQuXbr0j9onxN1Ebq0LoWNms5mgoCDeeOMNtm/fziuvvILJZCI4OJi33noLgCeeeILXX3+d\nsrIykpOTSU1NZdWqVWzbto38/Hy++OKL2z7us88+S3t7O+np6UxNTfH0008TFRUFwPPPP8+WLVvw\n8PBg/fr1JCcn09vb+5f7tFgsXLx4kdTUVHx9ffHz8yM7O/u22ybE3UamMRVCCCF0TEbkQghg+tZ2\nYWHhnK8VFhZitVrvcIuEEH+HjMiFEEIIHZM/dhNCCCF0TAq5EEIIoWNSyIUQQggdk0IuhBBC6JgU\nciGEEELHfgddfldB02T70QAAAABJRU5ErkJggg==\n",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ }
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "t0lRt4USU81L",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "This initial line looks way off. See if you can look back at the summary stats and see the same information encoded there.\n",
+ "\n",
+ "Together, these initial sanity checks suggest we may be able to find a much better line."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "AZWF67uv0HTG",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "## Tweak the Model Hyperparameters\n",
+ "For this exercise, we've put all the above code in a single function for convenience. You can call the function with different parameters to see the effect.\n",
+ "\n",
+ "In this function, we'll proceed in 10 evenly divided periods so that we can observe the model improvement at each period.\n",
+ "\n",
+ "For each period, we'll compute and graph training loss. This may help you judge when a model is converged, or if it needs more iterations.\n",
+ "\n",
+ "We'll also plot the feature weight and bias term values learned by the model over time. This is another way to see how things converge."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "wgSMeD5UU81N",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "def train_model(learning_rate, steps, batch_size, input_feature=\"total_rooms\"):\n",
+ " \"\"\"Trains a linear regression model of one feature.\n",
+ " \n",
+ " Args:\n",
+ " learning_rate: A `float`, the learning rate.\n",
+ " steps: A non-zero `int`, the total number of training steps. A training step\n",
+ " consists of a forward and backward pass using a single batch.\n",
+ " batch_size: A non-zero `int`, the batch size.\n",
+ " input_feature: A `string` specifying a column from `california_housing_dataframe`\n",
+ " to use as input feature.\n",
+ " \"\"\"\n",
+ " \n",
+ " periods = 10\n",
+ " steps_per_period = steps / periods\n",
+ "\n",
+ " my_feature = input_feature\n",
+ " my_feature_data = california_housing_dataframe[[my_feature]]\n",
+ " my_label = \"median_house_value\"\n",
+ " targets = california_housing_dataframe[my_label]\n",
+ "\n",
+ " # Create feature columns.\n",
+ " feature_columns = [tf.feature_column.numeric_column(my_feature)]\n",
+ " \n",
+ " # Create input functions.\n",
+ " training_input_fn = lambda:my_input_fn(my_feature_data, targets, batch_size=batch_size)\n",
+ " prediction_input_fn = lambda: my_input_fn(my_feature_data, targets, num_epochs=1, shuffle=False)\n",
+ " \n",
+ " # Create a linear regressor object.\n",
+ " my_optimizer = tf.train.GradientDescentOptimizer(learning_rate=learning_rate)\n",
+ " my_optimizer = tf.contrib.estimator.clip_gradients_by_norm(my_optimizer, 5.0)\n",
+ " linear_regressor = tf.estimator.LinearRegressor(\n",
+ " feature_columns=feature_columns,\n",
+ " optimizer=my_optimizer\n",
+ " )\n",
+ "\n",
+ " # Set up to plot the state of our model's line each period.\n",
+ " plt.figure(figsize=(15, 6))\n",
+ " plt.subplot(1, 2, 1)\n",
+ " plt.title(\"Learned Line by Period\")\n",
+ " plt.ylabel(my_label)\n",
+ " plt.xlabel(my_feature)\n",
+ " sample = california_housing_dataframe.sample(n=300)\n",
+ " plt.scatter(sample[my_feature], sample[my_label])\n",
+ " colors = [cm.coolwarm(x) for x in np.linspace(-1, 1, periods)]\n",
+ "\n",
+ " # Train the model, but do so inside a loop so that we can periodically assess\n",
+ " # loss metrics.\n",
+ " print(\"Training model...\")\n",
+ " print(\"RMSE (on training data):\")\n",
+ " root_mean_squared_errors = []\n",
+ " for period in range (0, periods):\n",
+ " # Train the model, starting from the prior state.\n",
+ " linear_regressor.train(\n",
+ " input_fn=training_input_fn,\n",
+ " steps=steps_per_period\n",
+ " )\n",
+ " # Take a break and compute predictions.\n",
+ " predictions = linear_regressor.predict(input_fn=prediction_input_fn)\n",
+ " predictions = np.array([item['predictions'][0] for item in predictions])\n",
+ " \n",
+ " # Compute loss.\n",
+ " root_mean_squared_error = math.sqrt(\n",
+ " metrics.mean_squared_error(predictions, targets))\n",
+ " # Occasionally print the current loss.\n",
+ " print(\" period %02d : %0.2f\" % (period, root_mean_squared_error))\n",
+ " # Add the loss metrics from this period to our list.\n",
+ " root_mean_squared_errors.append(root_mean_squared_error)\n",
+ " # Finally, track the weights and biases over time.\n",
+ " # Apply some math to ensure that the data and line are plotted neatly.\n",
+ " y_extents = np.array([0, sample[my_label].max()])\n",
+ " \n",
+ " weight = linear_regressor.get_variable_value('linear/linear_model/%s/weights' % input_feature)[0]\n",
+ " bias = linear_regressor.get_variable_value('linear/linear_model/bias_weights')\n",
+ "\n",
+ " x_extents = (y_extents - bias) / weight\n",
+ " x_extents = np.maximum(np.minimum(x_extents,\n",
+ " sample[my_feature].max()),\n",
+ " sample[my_feature].min())\n",
+ " y_extents = weight * x_extents + bias\n",
+ " plt.plot(x_extents, y_extents, color=colors[period]) \n",
+ " print(\"Model training finished.\")\n",
+ "\n",
+ " # Output a graph of loss metrics over periods.\n",
+ " plt.subplot(1, 2, 2)\n",
+ " plt.ylabel('RMSE')\n",
+ " plt.xlabel('Periods')\n",
+ " plt.title(\"Root Mean Squared Error vs. Periods\")\n",
+ " plt.tight_layout()\n",
+ " plt.plot(root_mean_squared_errors)\n",
+ "\n",
+ " # Output a table with calibration data.\n",
+ " calibration_data = pd.DataFrame()\n",
+ " calibration_data[\"predictions\"] = pd.Series(predictions)\n",
+ " calibration_data[\"targets\"] = pd.Series(targets)\n",
+ " display.display(calibration_data.describe())\n",
+ "\n",
+ " print(\"Final RMSE (on training data): %0.2f\" % root_mean_squared_error)"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "kg8A4ArBU81Q",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "## Task 1: Achieve an RMSE of 180 or Below\n",
+ "\n",
+ "Tweak the model hyperparameters to improve loss and better match the target distribution.\n",
+ "If, after 5 minutes or so, you're having trouble beating a RMSE of 180, check the solution for a possible combination."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "UzoZUSdLIolF",
+ "colab_type": "code",
+ "cellView": "both",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 969
+ },
+ "outputId": "9722f72e-9b62-4bfe-85f6-a54cbdbc7846"
+ },
+ "cell_type": "code",
+ "source": [
+ "train_model(\n",
+ " learning_rate=0.00001,\n",
+ " steps=1000,\n",
+ " batch_size=5\n",
+ ")"
+ ],
+ "execution_count": 17,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "Training model...\n",
+ "RMSE (on training data):\n",
+ " period 00 : 225.63\n",
+ " period 01 : 214.42\n",
+ " period 02 : 204.04\n",
+ " period 03 : 195.33\n",
+ " period 04 : 187.55\n",
+ " period 05 : 180.94\n",
+ " period 06 : 175.88\n",
+ " period 07 : 171.99\n",
+ " period 08 : 169.53\n",
+ " period 09 : 167.70\n",
+ "Model training finished.\n"
+ ],
+ "name": "stdout"
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ " predictions targets\n",
+ "count 17000.0 17000.0\n",
+ "mean 114.2 207.3\n",
+ "std 94.2 116.0\n",
+ "min 0.1 15.0\n",
+ "25% 63.2 119.4\n",
+ "50% 91.9 180.4\n",
+ "75% 136.1 265.0\n",
+ "max 1638.9 500.0"
+ ],
+ "text/html": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ }
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "ajVM7rkoYXeL",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "### Solution\n",
+ "\n",
+ "Click below for one possible solution."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "T3zmldDwYy5c",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "train_model(\n",
+ " learning_rate=0.00002,\n",
+ " steps=500,\n",
+ " batch_size=5\n",
+ ")"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "M8H0_D4vYa49",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "This is just one possible configuration; there may be other combinations of settings that also give good results. Note that in general, this exercise isn't about finding the *one best* setting, but to help build your intutions about how tweaking the model configuration affects prediction quality."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "QU5sLyYTqzqL",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "### Is There a Standard Heuristic for Model Tuning?\n",
+ "\n",
+ "This is a commonly asked question. The short answer is that the effects of different hyperparameters are data dependent. So there are no hard-and-fast rules; you'll need to test on your data.\n",
+ "\n",
+ "That said, here are a few rules of thumb that may help guide you:\n",
+ "\n",
+ " * Training error should steadily decrease, steeply at first, and should eventually plateau as training converges.\n",
+ " * If the training has not converged, try running it for longer.\n",
+ " * If the training error decreases too slowly, increasing the learning rate may help it decrease faster.\n",
+ " * But sometimes the exact opposite may happen if the learning rate is too high.\n",
+ " * If the training error varies wildly, try decreasing the learning rate.\n",
+ " * Lower learning rate plus larger number of steps or larger batch size is often a good combination.\n",
+ " * Very small batch sizes can also cause instability. First try larger values like 100 or 1000, and decrease until you see degradation.\n",
+ "\n",
+ "Again, never go strictly by these rules of thumb, because the effects are data dependent. Always experiment and verify."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "GpV-uF_cBCBU",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "## Task 2: Try a Different Feature\n",
+ "\n",
+ "See if you can do any better by replacing the `total_rooms` feature with the `population` feature.\n",
+ "\n",
+ "Don't take more than 5 minutes on this portion."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "YMyOxzb0ZlAH",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 969
+ },
+ "outputId": "d5df5f3d-a51c-4db5-8697-c806efa46268"
+ },
+ "cell_type": "code",
+ "source": [
+ "# YOUR CODE HERE\n",
+ "train_model(\n",
+ " learning_rate=0.00002,\n",
+ " steps=1000,\n",
+ " batch_size=5,\n",
+ " input_feature=\"population\"\n",
+ ")"
+ ],
+ "execution_count": 18,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "Training model...\n",
+ "RMSE (on training data):\n",
+ " period 00 : 225.63\n",
+ " period 01 : 214.62\n",
+ " period 02 : 204.86\n",
+ " period 03 : 196.59\n",
+ " period 04 : 189.80\n",
+ " period 05 : 184.24\n",
+ " period 06 : 180.03\n",
+ " period 07 : 178.07\n",
+ " period 08 : 176.70\n",
+ " period 09 : 176.02\n",
+ "Model training finished.\n"
+ ],
+ "name": "stdout"
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ " predictions targets\n",
+ "count 17000.0 17000.0\n",
+ "mean 119.8 207.3\n",
+ "std 96.2 116.0\n",
+ "min 0.3 15.0\n",
+ "25% 66.2 119.4\n",
+ "50% 97.8 180.4\n",
+ "75% 144.2 265.0\n",
+ "max 2990.3 500.0"
+ ],
+ "text/html": [
+ "
"
+ ],
+ "text/plain": [
+ " median_house_value\n",
+ "count 5000.0\n",
+ "mean 229.5\n",
+ "std 122.5\n",
+ "min 15.0\n",
+ "25% 130.4\n",
+ "50% 213.0\n",
+ "75% 303.2\n",
+ "max 500.0"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ },
+ "execution_count": 6
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "z3TZV1pgfZ1n",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "## Task 1: Examine the Data\n",
+ "Okay, let's look at the data above. We have `9` input features that we can use.\n",
+ "\n",
+ "Take a quick skim over the table of values. Everything look okay? See how many issues you can spot. Don't worry if you don't have a background in statistics; common sense will get you far.\n",
+ "\n",
+ "After you've had a chance to look over the data yourself, check the solution for some additional thoughts on how to verify data."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "4Xp9NhOCYSuz",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "### Solution\n",
+ "\n",
+ "Click below for the solution."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "gqeRmK57YWpy",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "Let's check our data against some baseline expectations:\n",
+ "\n",
+ "* For some values, like `median_house_value`, we can check to see if these values fall within reasonable ranges (keeping in mind this was 1990 data — not today!).\n",
+ "\n",
+ "* For other values, like `latitude` and `longitude`, we can do a quick check to see if these line up with expected values from a quick Google search.\n",
+ "\n",
+ "If you look closely, you may see some oddities:\n",
+ "\n",
+ "* `median_income` is on a scale from about 3 to 15. It's not at all clear what this scale refers to—looks like maybe some log scale? It's not documented anywhere; all we can assume is that higher values correspond to higher income.\n",
+ "\n",
+ "* The maximum `median_house_value` is 500,001. This looks like an artificial cap of some kind.\n",
+ "\n",
+ "* Our `rooms_per_person` feature is generally on a sane scale, with a 75th percentile value of about 2. But there are some very large values, like 18 or 55, which may show some amount of corruption in the data.\n",
+ "\n",
+ "We'll use these features as given for now. But hopefully these kinds of examples can help to build a little intuition about how to check data that comes to you from an unknown source."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "fXliy7FYZZRm",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "## Task 2: Plot Latitude/Longitude vs. Median House Value"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "aJIWKBdfsDjg",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "Let's take a close look at two features in particular: **`latitude`** and **`longitude`**. These are geographical coordinates of the city block in question.\n",
+ "\n",
+ "This might make a nice visualization — let's plot `latitude` and `longitude`, and use color to show the `median_house_value`."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "5_LD23bJ06TW",
+ "colab_type": "code",
+ "cellView": "both",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 498
+ },
+ "outputId": "0d1b97a0-9c10-4b8a-aed7-b0ca6d2af1ea"
+ },
+ "cell_type": "code",
+ "source": [
+ "plt.figure(figsize=(13, 8))\n",
+ "\n",
+ "ax = plt.subplot(1, 2, 1)\n",
+ "ax.set_title(\"Validation Data\")\n",
+ "\n",
+ "ax.set_autoscaley_on(False)\n",
+ "ax.set_ylim([32, 43])\n",
+ "ax.set_autoscalex_on(False)\n",
+ "ax.set_xlim([-126, -112])\n",
+ "plt.scatter(validation_examples[\"longitude\"],\n",
+ " validation_examples[\"latitude\"],\n",
+ " cmap=\"coolwarm\",\n",
+ " c=validation_targets[\"median_house_value\"] / validation_targets[\"median_house_value\"].max())\n",
+ "\n",
+ "ax = plt.subplot(1,2,2)\n",
+ "ax.set_title(\"Training Data\")\n",
+ "\n",
+ "ax.set_autoscaley_on(False)\n",
+ "ax.set_ylim([32, 43])\n",
+ "ax.set_autoscalex_on(False)\n",
+ "ax.set_xlim([-126, -112])\n",
+ "plt.scatter(training_examples[\"longitude\"],\n",
+ " training_examples[\"latitude\"],\n",
+ " cmap=\"coolwarm\",\n",
+ " c=training_targets[\"median_house_value\"] / training_targets[\"median_house_value\"].max())\n",
+ "_ = plt.plot()"
+ ],
+ "execution_count": 7,
+ "outputs": [
+ {
+ "output_type": "display_data",
+ "data": {
+ "image/png": "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\nYII=\n",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ }
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "32_DbjnfXJlC",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "Wait a second...this should have given us a nice map of the state of California, with red showing up in expensive areas like the San Francisco and Los Angeles.\n",
+ "\n",
+ "The training set sort of does, compared to a [real map](https://www.google.com/maps/place/California/@37.1870174,-123.7642688,6z/data=!3m1!4b1!4m2!3m1!1s0x808fb9fe5f285e3d:0x8b5109a227086f55), but the validation set clearly doesn't.\n",
+ "\n",
+ "**Go back up and look at the data from Task 1 again.**\n",
+ "\n",
+ "Do you see any other differences in the distributions of features or targets between the training and validation data?"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "pECTKgw5ZvFK",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "### Solution\n",
+ "\n",
+ "Click below for the solution."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "49NC4_KIZxk_",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "Looking at the tables of summary stats above, it's easy to wonder how anyone would do a useful data check. What's the right 75th percentile value for total_rooms per city block?\n",
+ "\n",
+ "The key thing to notice is that for any given feature or column, the distribution of values between the train and validation splits should be roughly equal.\n",
+ "\n",
+ "The fact that this is not the case is a real worry, and shows that we likely have a fault in the way that our train and validation split was created."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "025Ky0Dq9ig0",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "## Task 3: Return to the Data Importing and Pre-Processing Code, and See if You Spot Any Bugs\n",
+ "If you do, go ahead and fix the bug. Don't spend more than a minute or two looking. If you can't find the bug, check the solution."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "JFsd2eWHAMdy",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "When you've found and fixed the issue, re-run `latitude` / `longitude` plotting cell above and confirm that our sanity checks look better.\n",
+ "\n",
+ "By the way, there's an important lesson here.\n",
+ "\n",
+ "**Debugging in ML is often *data debugging* rather than code debugging.**\n",
+ "\n",
+ "If the data is wrong, even the most advanced ML code can't save things."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "dER2_43pWj1T",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "### Solution\n",
+ "\n",
+ "Click below for the solution."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "BnEVbYJvW2wu",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "The code that randomizes the data (`np.random.permutation`) is commented out, so we're not doing any randomization prior to splitting the data.\n",
+ "\n",
+ "If we don't randomize the data properly before creating training and validation splits, then we may be in trouble if the data is given to us in some sorted order, which appears to be the case here."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "xCdqLpQyAos2",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "## Task 4: Train and Evaluate a Model\n",
+ "\n",
+ "**Spend 5 minutes or so trying different hyperparameter settings. Try to get the best validation performance you can.**\n",
+ "\n",
+ "Next, we'll train a linear regressor using all the features in the data set, and see how well we do.\n",
+ "\n",
+ "Let's define the same input function we've used previously for loading the data into a TensorFlow model.\n"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "rzcIPGxxgG0t",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "def my_input_fn(features, targets, batch_size=1, shuffle=True, num_epochs=None):\n",
+ " \"\"\"Trains a linear regression model of multiple features.\n",
+ " \n",
+ " Args:\n",
+ " features: pandas DataFrame of features\n",
+ " targets: pandas DataFrame of targets\n",
+ " batch_size: Size of batches to be passed to the model\n",
+ " shuffle: True or False. Whether to shuffle the data.\n",
+ " num_epochs: Number of epochs for which data should be repeated. None = repeat indefinitely\n",
+ " Returns:\n",
+ " Tuple of (features, labels) for next data batch\n",
+ " \"\"\"\n",
+ " \n",
+ " # Convert pandas data into a dict of np arrays.\n",
+ " features = {key:np.array(value) for key,value in dict(features).items()} \n",
+ " \n",
+ " # Construct a dataset, and configure batching/repeating.\n",
+ " ds = Dataset.from_tensor_slices((features,targets)) # warning: 2GB limit\n",
+ " ds = ds.batch(batch_size).repeat(num_epochs)\n",
+ " \n",
+ " # Shuffle the data, if specified.\n",
+ " if shuffle:\n",
+ " ds = ds.shuffle(10000)\n",
+ " \n",
+ " # Return the next batch of data.\n",
+ " features, labels = ds.make_one_shot_iterator().get_next()\n",
+ " return features, labels"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "CvrKoBmNgRCO",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "Because we're now working with multiple input features, let's modularize our code for configuring feature columns into a separate function. (For now, this code is fairly simple, as all our features are numeric, but we'll build on this code as we use other types of features in future exercises.)"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "wEW5_XYtgZ-H",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "def construct_feature_columns(input_features):\n",
+ " \"\"\"Construct the TensorFlow Feature Columns.\n",
+ "\n",
+ " Args:\n",
+ " input_features: The names of the numerical input features to use.\n",
+ " Returns:\n",
+ " A set of feature columns\n",
+ " \"\"\" \n",
+ " return set([tf.feature_column.numeric_column(my_feature)\n",
+ " for my_feature in input_features])"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "D0o2wnnzf8BD",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "Next, go ahead and complete the `train_model()` code below to set up the input functions and calculate predictions.\n",
+ "\n",
+ "**NOTE:** It's okay to reference the code from the previous exercises, but make sure to call `predict()` on the appropriate data sets.\n",
+ "\n",
+ "Compare the losses on training data and validation data. With a single raw feature, our best root mean squared error (RMSE) was of about 180.\n",
+ "\n",
+ "See how much better you can do now that we can use multiple features.\n",
+ "\n",
+ "Check the data using some of the methods we've looked at before. These might include:\n",
+ "\n",
+ " * Comparing distributions of predictions and actual target values\n",
+ "\n",
+ " * Creating a scatter plot of predictions vs. target values\n",
+ "\n",
+ " * Creating two scatter plots of validation data using `latitude` and `longitude`:\n",
+ " * One plot mapping color to actual target `median_house_value`\n",
+ " * A second plot mapping color to predicted `median_house_value` for side-by-side comparison."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "UXt0_4ZTEf4V",
+ "colab_type": "code",
+ "cellView": "both",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "def train_model(\n",
+ " learning_rate,\n",
+ " steps,\n",
+ " batch_size,\n",
+ " training_examples,\n",
+ " training_targets,\n",
+ " validation_examples,\n",
+ " validation_targets):\n",
+ " \"\"\"Trains a linear regression model of multiple features.\n",
+ " \n",
+ " In addition to training, this function also prints training progress information,\n",
+ " as well as a plot of the training and validation loss over time.\n",
+ " \n",
+ " Args:\n",
+ " learning_rate: A `float`, the learning rate.\n",
+ " steps: A non-zero `int`, the total number of training steps. A training step\n",
+ " consists of a forward and backward pass using a single batch.\n",
+ " batch_size: A non-zero `int`, the batch size.\n",
+ " training_examples: A `DataFrame` containing one or more columns from\n",
+ " `california_housing_dataframe` to use as input features for training.\n",
+ " training_targets: A `DataFrame` containing exactly one column from\n",
+ " `california_housing_dataframe` to use as target for training.\n",
+ " validation_examples: A `DataFrame` containing one or more columns from\n",
+ " `california_housing_dataframe` to use as input features for validation.\n",
+ " validation_targets: A `DataFrame` containing exactly one column from\n",
+ " `california_housing_dataframe` to use as target for validation.\n",
+ " \n",
+ " Returns:\n",
+ " A `LinearRegressor` object trained on the training data.\n",
+ " \"\"\"\n",
+ "\n",
+ " periods = 10\n",
+ " steps_per_period = steps / periods\n",
+ " \n",
+ " # Create a linear regressor object.\n",
+ " my_optimizer = tf.train.GradientDescentOptimizer(learning_rate=learning_rate)\n",
+ " my_optimizer = tf.contrib.estimator.clip_gradients_by_norm(my_optimizer, 5.0)\n",
+ " linear_regressor = tf.estimator.LinearRegressor(\n",
+ " feature_columns=construct_feature_columns(training_examples),\n",
+ " optimizer=my_optimizer\n",
+ " )\n",
+ " \n",
+ " # Create input functions.\n",
+ " training_input_fn = lambda: my_input_fn(\n",
+ " training_examples, \n",
+ " training_targets[\"median_house_value\"], \n",
+ " batch_size=batch_size)\n",
+ " predict_training_input_fn = lambda: my_input_fn(\n",
+ " training_examples, \n",
+ " training_targets[\"median_house_value\"], \n",
+ " num_epochs=1, \n",
+ " shuffle=False)\n",
+ " predict_validation_input_fn = lambda: my_input_fn(\n",
+ " validation_examples, validation_targets[\"median_house_value\"], \n",
+ " num_epochs=1, \n",
+ " shuffle=False)\n",
+ "\n",
+ " # Train the model, but do so inside a loop so that we can periodically assess\n",
+ " # loss metrics.\n",
+ " print(\"Training model...\")\n",
+ " print(\"RMSE (on training data):\")\n",
+ " training_rmse = []\n",
+ " validation_rmse = []\n",
+ " for period in range (0, periods):\n",
+ " # Train the model, starting from the prior state.\n",
+ " linear_regressor.train(\n",
+ " input_fn=training_input_fn,\n",
+ " steps=steps_per_period,\n",
+ " )\n",
+ " # Take a break and compute predictions.\n",
+ " training_predictions = linear_regressor.predict(input_fn=predict_training_input_fn)\n",
+ " training_predictions = np.array([item['predictions'][0] for item in training_predictions])\n",
+ " \n",
+ " validation_predictions = linear_regressor.predict(input_fn=predict_validation_input_fn)\n",
+ " validation_predictions = np.array([item['predictions'][0] for item in validation_predictions])\n",
+ " \n",
+ " \n",
+ " # Compute training and validation loss.\n",
+ " training_root_mean_squared_error = math.sqrt(\n",
+ " metrics.mean_squared_error(training_predictions, training_targets))\n",
+ " validation_root_mean_squared_error = math.sqrt(\n",
+ " metrics.mean_squared_error(validation_predictions, validation_targets))\n",
+ " # Occasionally print the current loss.\n",
+ " print(\" period %02d : %0.2f\" % (period, training_root_mean_squared_error))\n",
+ " # Add the loss metrics from this period to our list.\n",
+ " training_rmse.append(training_root_mean_squared_error)\n",
+ " validation_rmse.append(validation_root_mean_squared_error)\n",
+ " print(\"Model training finished.\")\n",
+ "\n",
+ " # Output a graph of loss metrics over periods.\n",
+ " plt.ylabel(\"RMSE\")\n",
+ " plt.xlabel(\"Periods\")\n",
+ " plt.title(\"Root Mean Squared Error vs. Periods\")\n",
+ " plt.tight_layout()\n",
+ " plt.plot(training_rmse, label=\"training\")\n",
+ " plt.plot(validation_rmse, label=\"validation\")\n",
+ " plt.legend()\n",
+ "\n",
+ " return linear_regressor"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "zFFRmvUGh8wd",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 635
+ },
+ "outputId": "4beb9302-648e-4cf5-a908-071245684798"
+ },
+ "cell_type": "code",
+ "source": [
+ "linear_regressor = train_model(\n",
+ " # TWEAK THESE VALUES TO SEE HOW MUCH YOU CAN IMPROVE THE RMSE\n",
+ " learning_rate=0.00002,\n",
+ " steps=1000,\n",
+ " batch_size=5,\n",
+ " training_examples=training_examples,\n",
+ " training_targets=training_targets,\n",
+ " validation_examples=validation_examples,\n",
+ " validation_targets=validation_targets)"
+ ],
+ "execution_count": 16,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "Training model...\n",
+ "RMSE (on training data):\n",
+ " period 00 : 201.29\n",
+ " period 01 : 180.20\n",
+ " period 02 : 169.46\n",
+ " period 03 : 163.52\n",
+ " period 04 : 161.19\n",
+ " period 05 : 160.91\n",
+ " period 06 : 161.44\n",
+ " period 07 : 162.41\n",
+ " period 08 : 162.92\n",
+ " period 09 : 163.21\n",
+ "Model training finished.\n"
+ ],
+ "name": "stdout"
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjAAAAGACAYAAACz01iHAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzs3Xd8FHX+x/HX7G56Nr1T0ugYEkro\nLbRQBQxFKYpiOYWzcT8579DTU1E5G0hVxIKnIhEQkA7SpQYCSAuhJBAgCamkkDa/P9A9agiQzewm\nn+fjwePB7k55Tz6BfPKd78woqqqqCCGEEEJYEZ3WAYQQQggh7pY0MEIIIYSwOtLACCGEEMLqSAMj\nhBBCCKsjDYwQQgghrI40MEIIIYSwOgatAwhhyRo2bEjdunXR6/UAlJaWEhkZyaRJk3B0dLzn7f74\n448MGzbspvcXLVrEq6++yuzZs4mKijK9X1hYSPv27enVqxfvvffePe+3opKSkpg8eTKnTp0CwMHB\ngfHjx9OjRw+z7/tuzJw5k6SkpJu+Jjt37mTs2LHUrl37pnVWrVpVVfHuy9mzZ+nevTvBwcEAqKqK\nl5cX//znP2nSpMldbevDDz8kICCARx55pMLr/Pzzz8TGxjJ//vy72pcQVUUaGCHuYP78+fj5+QFQ\nVFTESy+9xJw5c3jppZfuaXtpaWnMnTv3lg0MgL+/P8uXL7+ugfn1119xcXG5p/3di7/97W8MHDiQ\n2bNnAxAfH89jjz3GypUr8ff3r7Ic98Pf399qmpXb0ev11x3DihUrGDduHKtXr8bW1rbC25kwYYI5\n4gmhKTmFJMRdsLW1pVOnThw5cgSAK1eu8PrrrxMdHU2fPn147733KC0tBeDo0aM8/PDD9O7dm4ED\nB7JlyxYAHn74YVJSUujduzdFRUU37aNFixbs3LmTgoIC03srVqygQ4cOptdFRUW8/fbbREdH061b\nN1OjAbBv3z4eeughevfuTd++fdm+fTtw9Tf6jh078s033zBgwAA6derEihUrbnmcx48fJzw83PQ6\nPDyc1atXmxq56dOn06VLFwYNGsRnn31Gt27dAPj73//OzJkzTetd+/pOuSZPnsyoUaMA2Lt3LzEx\nMfTs2ZNhw4aRnJwMXB2JevHFF4mKimLUqFFcuHDhDhW7tUWLFjF+/Hgee+wxpkyZws6dO3n44Yd5\n4YUXTD/sV65cSf/+/enduzePPvooSUlJAHz66adMmjSJIUOG8NVXX1233RdeeIF58+aZXh85coSO\nHTtSVlbGxx9/THR0NNHR0Tz66KNcvHjxrnP37duXwsJCTp48CcCCBQvo3bs33bp14+WXX6awsBC4\n+nV/9913GTBgACtXrryuDrf7viwrK+Pf//43Xbt2ZciQIRw9etS03127djF48GD69u1Lnz59WLly\n5V1nF6LSqUKI22rQoIF6/vx50+usrCx15MiR6syZM1VVVdU5c+aoTz31lFpcXKwWFBSoMTEx6pIl\nS9TS0lK1T58+6rJly1RVVdUDBw6okZGRam5urrpjxw61R48et9zfTz/9pE6cOFH929/+Zlo3NzdX\n7d69u7pw4UJ14sSJqqqq6vTp09XHHntMvXLlipqXl6cOGjRI3bBhg6qqqtq/f391+fLlqqqq6uLF\ni037Sk5OVps0aaLOnz9fVVVVXbFihdqzZ89b5vjrX/+qRkVFqV9//bV64sSJ6z47duyY2qpVKzU1\nNVUtLi5Wn332WTUqKkpVVVWdOHGiOmPGDNOy174uL1fTpk3VRYsWmY43MjJS3bp1q6qqqrps2TJ1\n8ODBqqqq6rfffquOHDlSLS4uVjMyMtSoqCjT1+Ra5X2N//w6R0REqKdOnTItHxYWpm7fvl1VVVU9\nd+6c2rJlS/X06dOqqqrqF198oT722GOqqqrqtGnT1I4dO6qXLl26abu//PKLOnLkSNPrqVOnqm+9\n9ZZ6/PhxtVevXmpRUZGqqqr6zTffqIsXL75tvj+/Lo0bN77p/cjISDUxMVHdvXu32q5dO/XChQuq\nqqrqa6+9pr733nuqql79ug8YMEAtLCw0vZ4xY0a535cbN25Ue/XqpV6+fFktKChQhwwZoo4aNUpV\nVVV96KGH1J07d6qqqqqnTp1SX3755XKzC1EVZARGiDsYPXo0vXv3pnv37nTv3p22bdvy1FNPAbBx\n40aGDRuGwWDA3t6eAQMGsG3bNs6ePUt6ejr9+vUDICwsjICAAA4ePFihffbr14/ly5cDsG7dOqKi\notDp/vfP9ddff2XEiBHY2tri6OjIwIEDWbNmDQBLliyhT58+ALRs2dI0egFQUlLCQw89BEDTpk1J\nSUm55f7/85//MHLkSJYtW0b//v3p1q0b33//PXB1dCQyMhJvb28MBgP9+/ev0DGVl6u4uJiePXua\n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\nEREFnf8PC2bXkjWC5mUAAAAASUVORK5CYII=\n",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ }
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "I-La4N9ObC1x",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "### Solution\n",
+ "\n",
+ "Click below for a solution."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "Xyz6n1YHbGef",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "def train_model(\n",
+ " learning_rate,\n",
+ " steps,\n",
+ " batch_size,\n",
+ " training_examples,\n",
+ " training_targets,\n",
+ " validation_examples,\n",
+ " validation_targets):\n",
+ " \"\"\"Trains a linear regression model of multiple features.\n",
+ " \n",
+ " In addition to training, this function also prints training progress information,\n",
+ " as well as a plot of the training and validation loss over time.\n",
+ " \n",
+ " Args:\n",
+ " learning_rate: A `float`, the learning rate.\n",
+ " steps: A non-zero `int`, the total number of training steps. A training step\n",
+ " consists of a forward and backward pass using a single batch.\n",
+ " batch_size: A non-zero `int`, the batch size.\n",
+ " training_examples: A `DataFrame` containing one or more columns from\n",
+ " `california_housing_dataframe` to use as input features for training.\n",
+ " training_targets: A `DataFrame` containing exactly one column from\n",
+ " `california_housing_dataframe` to use as target for training.\n",
+ " validation_examples: A `DataFrame` containing one or more columns from\n",
+ " `california_housing_dataframe` to use as input features for validation.\n",
+ " validation_targets: A `DataFrame` containing exactly one column from\n",
+ " `california_housing_dataframe` to use as target for validation.\n",
+ " \n",
+ " Returns:\n",
+ " A `LinearRegressor` object trained on the training data.\n",
+ " \"\"\"\n",
+ "\n",
+ " periods = 10\n",
+ " steps_per_period = steps / periods\n",
+ " \n",
+ " # Create a linear regressor object.\n",
+ " my_optimizer = tf.train.GradientDescentOptimizer(learning_rate=learning_rate)\n",
+ " my_optimizer = tf.contrib.estimator.clip_gradients_by_norm(my_optimizer, 5.0)\n",
+ " linear_regressor = tf.estimator.LinearRegressor(\n",
+ " feature_columns=construct_feature_columns(training_examples),\n",
+ " optimizer=my_optimizer\n",
+ " )\n",
+ " \n",
+ " # Create input functions.\n",
+ " training_input_fn = lambda: my_input_fn(\n",
+ " training_examples, \n",
+ " training_targets[\"median_house_value\"], \n",
+ " batch_size=batch_size)\n",
+ " predict_training_input_fn = lambda: my_input_fn(\n",
+ " training_examples, \n",
+ " training_targets[\"median_house_value\"], \n",
+ " num_epochs=1, \n",
+ " shuffle=False)\n",
+ " predict_validation_input_fn = lambda: my_input_fn(\n",
+ " validation_examples, validation_targets[\"median_house_value\"], \n",
+ " num_epochs=1, \n",
+ " shuffle=False)\n",
+ "\n",
+ " # Train the model, but do so inside a loop so that we can periodically assess\n",
+ " # loss metrics.\n",
+ " print(\"Training model...\")\n",
+ " print(\"RMSE (on training data):\")\n",
+ " training_rmse = []\n",
+ " validation_rmse = []\n",
+ " for period in range (0, periods):\n",
+ " # Train the model, starting from the prior state.\n",
+ " linear_regressor.train(\n",
+ " input_fn=training_input_fn,\n",
+ " steps=steps_per_period,\n",
+ " )\n",
+ " # Take a break and compute predictions.\n",
+ " training_predictions = linear_regressor.predict(input_fn=predict_training_input_fn)\n",
+ " training_predictions = np.array([item['predictions'][0] for item in training_predictions])\n",
+ " \n",
+ " validation_predictions = linear_regressor.predict(input_fn=predict_validation_input_fn)\n",
+ " validation_predictions = np.array([item['predictions'][0] for item in validation_predictions])\n",
+ " \n",
+ " \n",
+ " # Compute training and validation loss.\n",
+ " training_root_mean_squared_error = math.sqrt(\n",
+ " metrics.mean_squared_error(training_predictions, training_targets))\n",
+ " validation_root_mean_squared_error = math.sqrt(\n",
+ " metrics.mean_squared_error(validation_predictions, validation_targets))\n",
+ " # Occasionally print the current loss.\n",
+ " print(\" period %02d : %0.2f\" % (period, training_root_mean_squared_error))\n",
+ " # Add the loss metrics from this period to our list.\n",
+ " training_rmse.append(training_root_mean_squared_error)\n",
+ " validation_rmse.append(validation_root_mean_squared_error)\n",
+ " print(\"Model training finished.\")\n",
+ "\n",
+ " # Output a graph of loss metrics over periods.\n",
+ " plt.ylabel(\"RMSE\")\n",
+ " plt.xlabel(\"Periods\")\n",
+ " plt.title(\"Root Mean Squared Error vs. Periods\")\n",
+ " plt.tight_layout()\n",
+ " plt.plot(training_rmse, label=\"training\")\n",
+ " plt.plot(validation_rmse, label=\"validation\")\n",
+ " plt.legend()\n",
+ "\n",
+ " return linear_regressor"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "i1imhjFzbWwt",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "linear_regressor = train_model(\n",
+ " learning_rate=0.00003,\n",
+ " steps=500,\n",
+ " batch_size=5,\n",
+ " training_examples=training_examples,\n",
+ " training_targets=training_targets,\n",
+ " validation_examples=validation_examples,\n",
+ " validation_targets=validation_targets)"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "65sin-E5NmHN",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "## Task 5: Evaluate on Test Data\n",
+ "\n",
+ "**In the cell below, load in the test data set and evaluate your model on it.**\n",
+ "\n",
+ "We've done a lot of iteration on our validation data. Let's make sure we haven't overfit to the pecularities of that particular sample.\n",
+ "\n",
+ "Test data set is located [here](https://download.mlcc.google.com/mledu-datasets/california_housing_test.csv).\n",
+ "\n",
+ "How does your test performance compare to the validation performance? What does this say about the generalization performance of your model?"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "icEJIl5Vp51r",
+ "colab_type": "code",
+ "cellView": "both",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 35
+ },
+ "outputId": "3145f814-bce4-4cdc-c4f9-cc0a48c1a330"
+ },
+ "cell_type": "code",
+ "source": [
+ "california_housing_test_data = pd.read_csv(\"https://download.mlcc.google.com/mledu-datasets/california_housing_test.csv\", sep=\",\")\n",
+ "#\n",
+ "# YOUR CODE HERE\n",
+ "#\n",
+ "test_X = preprocess_features(california_housing_test_data)\n",
+ "test_Y = preprocess_targets(california_housing_test_data)\n",
+ "\n",
+ "predict_test_input_fn = lambda: my_input_fn(\n",
+ " test_X, \n",
+ " test_Y[\"median_house_value\"], \n",
+ " num_epochs=1, \n",
+ " shuffle=False)\n",
+ "\n",
+ "test_predictions = linear_regressor.predict(input_fn=predict_test_input_fn)\n",
+ "test_predictions = np.array([item['predictions'][0] for item in test_predictions])\n",
+ "\n",
+ "root_mean_squared_error = math.sqrt(\n",
+ " metrics.mean_squared_error(test_predictions, test_Y))\n",
+ "\n",
+ "print(\"Final RMSE (on test data): %0.2f\" % root_mean_squared_error)"
+ ],
+ "execution_count": 17,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "Final RMSE (on test data): 160.92\n"
+ ],
+ "name": "stdout"
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "yTghc_5HkJDW",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "### Solution\n",
+ "\n",
+ "Click below for the solution."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "_xSYTarykO8U",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "california_housing_test_data = pd.read_csv(\"https://download.mlcc.google.com/mledu-datasets/california_housing_test.csv\", sep=\",\")\n",
+ "\n",
+ "test_examples = preprocess_features(california_housing_test_data)\n",
+ "test_targets = preprocess_targets(california_housing_test_data)\n",
+ "\n",
+ "predict_test_input_fn = lambda: my_input_fn(\n",
+ " test_examples, \n",
+ " test_targets[\"median_house_value\"], \n",
+ " num_epochs=1, \n",
+ " shuffle=False)\n",
+ "\n",
+ "test_predictions = linear_regressor.predict(input_fn=predict_test_input_fn)\n",
+ "test_predictions = np.array([item['predictions'][0] for item in test_predictions])\n",
+ "\n",
+ "root_mean_squared_error = math.sqrt(\n",
+ " metrics.mean_squared_error(test_predictions, test_targets))\n",
+ "\n",
+ "print(\"Final RMSE (on test data): %0.2f\" % root_mean_squared_error)"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ }
+ ]
+}
\ No newline at end of file
From 282d2ae016ac5b07c018a9c4be22ea9bcc9ded7c Mon Sep 17 00:00:00 2001
From: Amartya Bhattacharya
<36528245+amartyabhattacharya@users.noreply.github.com>
Date: Sun, 17 Feb 2019 11:29:15 +0530
Subject: [PATCH 05/11] Created using Colaboratory
---
feature_sets.ipynb | 1535 ++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 1535 insertions(+)
create mode 100644 feature_sets.ipynb
diff --git a/feature_sets.ipynb b/feature_sets.ipynb
new file mode 100644
index 0000000..42aa4a6
--- /dev/null
+++ b/feature_sets.ipynb
@@ -0,0 +1,1535 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 0,
+ "metadata": {
+ "colab": {
+ "name": "feature_sets.ipynb",
+ "version": "0.3.2",
+ "provenance": [],
+ "collapsed_sections": [
+ "JndnmDMp66FL",
+ "IGINhMIJ5Wyt",
+ "pZa8miwu6_tQ"
+ ],
+ "include_colab_link": true
+ },
+ "kernelspec": {
+ "name": "python2",
+ "display_name": "Python 2"
+ }
+ },
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "view-in-github",
+ "colab_type": "text"
+ },
+ "source": [
+ ""
+ ]
+ },
+ {
+ "metadata": {
+ "id": "JndnmDMp66FL",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "#### Copyright 2017 Google LLC."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "hMqWDc_m6rUC",
+ "colab_type": "code",
+ "cellView": "both",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "# Licensed under the Apache License, Version 2.0 (the \"License\");\n",
+ "# you may not use this file except in compliance with the License.\n",
+ "# You may obtain a copy of the License at\n",
+ "#\n",
+ "# https://www.apache.org/licenses/LICENSE-2.0\n",
+ "#\n",
+ "# Unless required by applicable law or agreed to in writing, software\n",
+ "# distributed under the License is distributed on an \"AS IS\" BASIS,\n",
+ "# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n",
+ "# See the License for the specific language governing permissions and\n",
+ "# limitations under the License."
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "zbIgBK-oXHO7",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "# Feature Sets"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "bL04rAQwH3pH",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "**Learning Objective:** Create a minimal set of features that performs just as well as a more complex feature set"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "F8Hci6tAH3pH",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "So far, we've thrown all of our features into the model. Models with fewer features use fewer resources and are easier to maintain. Let's see if we can build a model on a minimal set of housing features that will perform equally as well as one that uses all the features in the data set."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "F5ZjVwK_qOyR",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "## Setup\n",
+ "\n",
+ "As before, let's load and prepare the California housing data."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "SrOYRILAH3pJ",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "from __future__ import print_function\n",
+ "\n",
+ "import math\n",
+ "\n",
+ "from IPython import display\n",
+ "from matplotlib import cm\n",
+ "from matplotlib import gridspec\n",
+ "from matplotlib import pyplot as plt\n",
+ "import numpy as np\n",
+ "import pandas as pd\n",
+ "from sklearn import metrics\n",
+ "import tensorflow as tf\n",
+ "from tensorflow.python.data import Dataset\n",
+ "\n",
+ "tf.logging.set_verbosity(tf.logging.ERROR)\n",
+ "pd.options.display.max_rows = 10\n",
+ "pd.options.display.float_format = '{:.1f}'.format\n",
+ "\n",
+ "california_housing_dataframe = pd.read_csv(\"https://download.mlcc.google.com/mledu-datasets/california_housing_train.csv\", sep=\",\")\n",
+ "\n",
+ "california_housing_dataframe = california_housing_dataframe.reindex(\n",
+ " np.random.permutation(california_housing_dataframe.index))"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "dGnXo7flH3pM",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "def preprocess_features(california_housing_dataframe):\n",
+ " \"\"\"Prepares input features from California housing data set.\n",
+ "\n",
+ " Args:\n",
+ " california_housing_dataframe: A Pandas DataFrame expected to contain data\n",
+ " from the California housing data set.\n",
+ " Returns:\n",
+ " A DataFrame that contains the features to be used for the model, including\n",
+ " synthetic features.\n",
+ " \"\"\"\n",
+ " selected_features = california_housing_dataframe[\n",
+ " [\"latitude\",\n",
+ " \"longitude\",\n",
+ " \"housing_median_age\",\n",
+ " \"total_rooms\",\n",
+ " \"total_bedrooms\",\n",
+ " \"population\",\n",
+ " \"households\",\n",
+ " \"median_income\"]]\n",
+ " processed_features = selected_features.copy()\n",
+ " # Create a synthetic feature.\n",
+ " processed_features[\"rooms_per_person\"] = (\n",
+ " california_housing_dataframe[\"total_rooms\"] /\n",
+ " california_housing_dataframe[\"population\"])\n",
+ " return processed_features\n",
+ "\n",
+ "def preprocess_targets(california_housing_dataframe):\n",
+ " \"\"\"Prepares target features (i.e., labels) from California housing data set.\n",
+ "\n",
+ " Args:\n",
+ " california_housing_dataframe: A Pandas DataFrame expected to contain data\n",
+ " from the California housing data set.\n",
+ " Returns:\n",
+ " A DataFrame that contains the target feature.\n",
+ " \"\"\"\n",
+ " output_targets = pd.DataFrame()\n",
+ " # Scale the target to be in units of thousands of dollars.\n",
+ " output_targets[\"median_house_value\"] = (\n",
+ " california_housing_dataframe[\"median_house_value\"] / 1000.0)\n",
+ " return output_targets"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "jLXC8y4AqsIy",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 1209
+ },
+ "outputId": "159ac19e-1d90-4f35-9fee-e08d71be1262"
+ },
+ "cell_type": "code",
+ "source": [
+ "# Choose the first 12000 (out of 17000) examples for training.\n",
+ "training_examples = preprocess_features(california_housing_dataframe.head(12000))\n",
+ "training_targets = preprocess_targets(california_housing_dataframe.head(12000))\n",
+ "\n",
+ "# Choose the last 5000 (out of 17000) examples for validation.\n",
+ "validation_examples = preprocess_features(california_housing_dataframe.tail(5000))\n",
+ "validation_targets = preprocess_targets(california_housing_dataframe.tail(5000))\n",
+ "\n",
+ "# Double-check that we've done the right thing.\n",
+ "print(\"Training examples summary:\")\n",
+ "display.display(training_examples.describe())\n",
+ "print(\"Validation examples summary:\")\n",
+ "display.display(validation_examples.describe())\n",
+ "\n",
+ "print(\"Training targets summary:\")\n",
+ "display.display(training_targets.describe())\n",
+ "print(\"Validation targets summary:\")\n",
+ "display.display(validation_targets.describe())"
+ ],
+ "execution_count": 3,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "Training examples summary:\n"
+ ],
+ "name": "stdout"
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ " latitude longitude housing_median_age total_rooms total_bedrooms \\\n",
+ "count 12000.0 12000.0 12000.0 12000.0 12000.0 \n",
+ "mean 35.6 -119.6 28.5 2651.0 540.8 \n",
+ "std 2.1 2.0 12.6 2203.9 425.1 \n",
+ "min 32.5 -124.3 2.0 2.0 2.0 \n",
+ "25% 33.9 -121.8 18.0 1460.0 296.0 \n",
+ "50% 34.2 -118.5 29.0 2125.0 434.0 \n",
+ "75% 37.7 -118.0 37.0 3160.2 650.0 \n",
+ "max 42.0 -114.6 52.0 37937.0 6445.0 \n",
+ "\n",
+ " population households median_income rooms_per_person \n",
+ "count 12000.0 12000.0 12000.0 12000.0 \n",
+ "mean 1436.5 503.3 3.9 2.0 \n",
+ "std 1142.3 390.6 1.9 1.3 \n",
+ "min 3.0 2.0 0.5 0.0 \n",
+ "25% 788.0 281.0 2.6 1.5 \n",
+ "50% 1171.0 408.0 3.5 1.9 \n",
+ "75% 1729.2 607.0 4.7 2.3 \n",
+ "max 28566.0 6082.0 15.0 55.2 "
+ ],
+ "text/html": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ }
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "uon1LB3A31VN",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "## How Would Linear Regression Fare?\n",
+ "To see why logistic regression is effective, let us first train a naive model that uses linear regression. This model will use labels with values in the set `{0, 1}` and will try to predict a continuous value that is as close as possible to `0` or `1`. Furthermore, we wish to interpret the output as a probability, so it would be ideal if the output will be within the range `(0, 1)`. We would then apply a threshold of `0.5` to determine the label.\n",
+ "\n",
+ "Run the cells below to train the linear regression model using [LinearRegressor](https://www.tensorflow.org/api_docs/python/tf/estimator/LinearRegressor)."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "smmUYRDtWOV_",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "def construct_feature_columns(input_features):\n",
+ " \"\"\"Construct the TensorFlow Feature Columns.\n",
+ "\n",
+ " Args:\n",
+ " input_features: The names of the numerical input features to use.\n",
+ " Returns:\n",
+ " A set of feature columns\n",
+ " \"\"\"\n",
+ " return set([tf.feature_column.numeric_column(my_feature)\n",
+ " for my_feature in input_features])"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "B5OwSrr1yIKD",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "def my_input_fn(features, targets, batch_size=1, shuffle=True, num_epochs=None):\n",
+ " \"\"\"Trains a linear regression model.\n",
+ " \n",
+ " Args:\n",
+ " features: pandas DataFrame of features\n",
+ " targets: pandas DataFrame of targets\n",
+ " batch_size: Size of batches to be passed to the model\n",
+ " shuffle: True or False. Whether to shuffle the data.\n",
+ " num_epochs: Number of epochs for which data should be repeated. None = repeat indefinitely\n",
+ " Returns:\n",
+ " Tuple of (features, labels) for next data batch\n",
+ " \"\"\"\n",
+ " \n",
+ " # Convert pandas data into a dict of np arrays.\n",
+ " features = {key:np.array(value) for key,value in dict(features).items()} \n",
+ " \n",
+ " # Construct a dataset, and configure batching/repeating.\n",
+ " ds = Dataset.from_tensor_slices((features,targets)) # warning: 2GB limit\n",
+ " ds = ds.batch(batch_size).repeat(num_epochs)\n",
+ " \n",
+ " # Shuffle the data, if specified.\n",
+ " if shuffle:\n",
+ " ds = ds.shuffle(10000)\n",
+ " \n",
+ " # Return the next batch of data.\n",
+ " features, labels = ds.make_one_shot_iterator().get_next()\n",
+ " return features, labels"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "SE2-hq8PIYHz",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "def train_linear_regressor_model(\n",
+ " learning_rate,\n",
+ " steps,\n",
+ " batch_size,\n",
+ " training_examples,\n",
+ " training_targets,\n",
+ " validation_examples,\n",
+ " validation_targets):\n",
+ " \"\"\"Trains a linear regression model.\n",
+ " \n",
+ " In addition to training, this function also prints training progress information,\n",
+ " as well as a plot of the training and validation loss over time.\n",
+ " \n",
+ " Args:\n",
+ " learning_rate: A `float`, the learning rate.\n",
+ " steps: A non-zero `int`, the total number of training steps. A training step\n",
+ " consists of a forward and backward pass using a single batch.\n",
+ " batch_size: A non-zero `int`, the batch size.\n",
+ " training_examples: A `DataFrame` containing one or more columns from\n",
+ " `california_housing_dataframe` to use as input features for training.\n",
+ " training_targets: A `DataFrame` containing exactly one column from\n",
+ " `california_housing_dataframe` to use as target for training.\n",
+ " validation_examples: A `DataFrame` containing one or more columns from\n",
+ " `california_housing_dataframe` to use as input features for validation.\n",
+ " validation_targets: A `DataFrame` containing exactly one column from\n",
+ " `california_housing_dataframe` to use as target for validation.\n",
+ " \n",
+ " Returns:\n",
+ " A `LinearRegressor` object trained on the training data.\n",
+ " \"\"\"\n",
+ "\n",
+ " periods = 10\n",
+ " steps_per_period = steps / periods\n",
+ "\n",
+ " # Create a linear regressor object.\n",
+ " my_optimizer = tf.train.GradientDescentOptimizer(learning_rate=learning_rate)\n",
+ " my_optimizer = tf.contrib.estimator.clip_gradients_by_norm(my_optimizer, 5.0)\n",
+ " linear_regressor = tf.estimator.LinearRegressor(\n",
+ " feature_columns=construct_feature_columns(training_examples),\n",
+ " optimizer=my_optimizer\n",
+ " )\n",
+ " \n",
+ " # Create input functions.\n",
+ " training_input_fn = lambda: my_input_fn(training_examples, \n",
+ " training_targets[\"median_house_value_is_high\"], \n",
+ " batch_size=batch_size)\n",
+ " predict_training_input_fn = lambda: my_input_fn(training_examples, \n",
+ " training_targets[\"median_house_value_is_high\"], \n",
+ " num_epochs=1, \n",
+ " shuffle=False)\n",
+ " predict_validation_input_fn = lambda: my_input_fn(validation_examples, \n",
+ " validation_targets[\"median_house_value_is_high\"], \n",
+ " num_epochs=1, \n",
+ " shuffle=False)\n",
+ "\n",
+ " # Train the model, but do so inside a loop so that we can periodically assess\n",
+ " # loss metrics.\n",
+ " print(\"Training model...\")\n",
+ " print(\"RMSE (on training data):\")\n",
+ " training_rmse = []\n",
+ " validation_rmse = []\n",
+ " for period in range (0, periods):\n",
+ " # Train the model, starting from the prior state.\n",
+ " linear_regressor.train(\n",
+ " input_fn=training_input_fn,\n",
+ " steps=steps_per_period\n",
+ " )\n",
+ " \n",
+ " # Take a break and compute predictions.\n",
+ " training_predictions = linear_regressor.predict(input_fn=predict_training_input_fn)\n",
+ " training_predictions = np.array([item['predictions'][0] for item in training_predictions])\n",
+ " \n",
+ " validation_predictions = linear_regressor.predict(input_fn=predict_validation_input_fn)\n",
+ " validation_predictions = np.array([item['predictions'][0] for item in validation_predictions])\n",
+ " \n",
+ " # Compute training and validation loss.\n",
+ " training_root_mean_squared_error = math.sqrt(\n",
+ " metrics.mean_squared_error(training_predictions, training_targets))\n",
+ " validation_root_mean_squared_error = math.sqrt(\n",
+ " metrics.mean_squared_error(validation_predictions, validation_targets))\n",
+ " # Occasionally print the current loss.\n",
+ " print(\" period %02d : %0.2f\" % (period, training_root_mean_squared_error))\n",
+ " # Add the loss metrics from this period to our list.\n",
+ " training_rmse.append(training_root_mean_squared_error)\n",
+ " validation_rmse.append(validation_root_mean_squared_error)\n",
+ " print(\"Model training finished.\")\n",
+ " \n",
+ " # Output a graph of loss metrics over periods.\n",
+ " plt.ylabel(\"RMSE\")\n",
+ " plt.xlabel(\"Periods\")\n",
+ " plt.title(\"Root Mean Squared Error vs. Periods\")\n",
+ " plt.tight_layout()\n",
+ " plt.plot(training_rmse, label=\"training\")\n",
+ " plt.plot(validation_rmse, label=\"validation\")\n",
+ " plt.legend()\n",
+ "\n",
+ " return linear_regressor"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "TDBD8xeeIYH2",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 761
+ },
+ "outputId": "70a7dbeb-f358-44b4-a465-233ca0c32d61"
+ },
+ "cell_type": "code",
+ "source": [
+ "linear_regressor = train_linear_regressor_model(\n",
+ " learning_rate=0.000001,\n",
+ " steps=200,\n",
+ " batch_size=20,\n",
+ " training_examples=training_examples,\n",
+ " training_targets=training_targets,\n",
+ " validation_examples=validation_examples,\n",
+ " validation_targets=validation_targets)"
+ ],
+ "execution_count": 7,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "WARNING: The TensorFlow contrib module will not be included in TensorFlow 2.0.\n",
+ "For more information, please see:\n",
+ " * https://github.com/tensorflow/community/blob/master/rfcs/20180907-contrib-sunset.md\n",
+ " * https://github.com/tensorflow/addons\n",
+ "If you depend on functionality not listed there, please file an issue.\n",
+ "\n",
+ "Training model...\n",
+ "RMSE (on training data):\n",
+ " period 00 : 0.45\n",
+ " period 01 : 0.45\n",
+ " period 02 : 0.45\n",
+ " period 03 : 0.44\n",
+ " period 04 : 0.44\n",
+ " period 05 : 0.44\n",
+ " period 06 : 0.44\n",
+ " period 07 : 0.44\n",
+ " period 08 : 0.44\n",
+ " period 09 : 0.44\n",
+ "Model training finished.\n"
+ ],
+ "name": "stdout"
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "image/png": "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\ncUz20jZ5JVUs+Fcq4cFePKFeH7tpFznfL22bijOVJH23mt2lGZiMJqZ0mcDIsOvU+2MF+r65NJe9\nnH3RokV88MEHnDp1ikmTJjF58mT8/R1nS3eRqyk00JNBMWbSDhSTnnmcft3U6yPtg28HH37T+3Z2\nFKfzzsEPeC/zI3YU72Z2j+kEewTZujyRFpyefPLJJy/0wZiYGKZOncp1113H7t27ee6559iwYQMG\ng4GIiAicne13jPqnVFfXWu3aHh4drHp9uXz21DadA9zZsDOfwrJqru/X2aF7feypXaSly2kbg8FA\nZ89ghnQaRHlNBfvKDvLtsVQMBiNR3uHq/blK9H1zaTw8OlzwY5f0ldipUyfuu+8+PvnkEyZMmMAz\nzzzTJic3i9haSKAng3uYOVp0kl2ZpbYuR+Sq83Lx5K5es/hN7zvwMLnz4eF1/GXbYnJPXnzOqEhr\nuaQumxMnTrBmzRqSk5NpaGjg3nvvZfLkydauTaRdunFYFGn7i/ngm2z6de3o0L0+0n71DYylm28U\nyZlrSSlI44VtLzM+YhQJkWNaZfdrkQu56FffN998w3vvvcfevXsZP348zz//PN27d2+t2kTapZCO\nHgzuYSZ1fzG7DpXSv3ugrUsSsQp3kzuze0xnoLkv/z6winVHvmBXyV5mx0wnyifc1uWJjVTXnWZj\n/re4OrsyMnRYq3/+n13VFRkZSd++fTEazx8Ve+6556xa3NWmVV2OyR7b5ljpKR5/fSthZk8W/Hqw\nQ/b62GO7SBNrtE1NfQ0fZK1jY/63GDAwOmw4k7uMx8XJ5ap+nvauLX/fnK4/zVe53/Bl7iZO19cQ\n7RPJgwPvs8rnuuxVXd8vVy8vL8fPr+WunHl5eVehNBHH1LmjB3E9g9i6r4idh0oZoF4faedcnV2Z\ncc2vGGDuw78PvMsXuRvZXZrBrJhb6OYXbevyxIpq6mvYkLeZL3I2Ul1/Gg+TO7+KnsiI0Hib1HPR\n4GM0Gpk7dy5nzpzB39+ff/zjH0RERPDWW2/x2muvMW3atNaqU6TdmTIsktR9RU1zfbp1xOiAvT7i\neLr5dWF+3Fw+yl7PlzmbeGnnPxgRMpSp0TfgeoUPfhX7UlN/ho353/J5ztecqqvG3dmNKV0SuD40\n3qZtfdHg87e//Y1ly5YRHR3NF198wRNPPEFjYyM+Pj68++67rVWjSLvUKcCDa3sGsWVfETsPljLw\n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\n",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ }
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "JjBZ_q7aD9gh",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "## Task 1: Can We Calculate LogLoss for These Predictions?\n",
+ "\n",
+ "**Examine the predictions and decide whether or not we can use them to calculate LogLoss.**\n",
+ "\n",
+ "`LinearRegressor` uses the L2 loss, which doesn't do a great job at penalizing misclassifications when the output is interpreted as a probability. For example, there should be a huge difference whether a negative example is classified as positive with a probability of 0.9 vs 0.9999, but L2 loss doesn't strongly differentiate these cases.\n",
+ "\n",
+ "In contrast, `LogLoss` penalizes these \"confidence errors\" much more heavily. Remember, `LogLoss` is defined as:\n",
+ "\n",
+ "$$Log Loss = \\sum_{(x,y)\\in D} -y \\cdot log(y_{pred}) - (1 - y) \\cdot log(1 - y_{pred})$$\n",
+ "\n",
+ "\n",
+ "But first, we'll need to obtain the prediction values. We could use `LinearRegressor.predict` to obtain these.\n",
+ "\n",
+ "Given the predictions and the targets, can we calculate `LogLoss`?"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "dPpJUV862FYI",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "### Solution\n",
+ "\n",
+ "Click below to display the solution."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "kXFQ5uig2RoP",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 347
+ },
+ "outputId": "0bbf2121-de39-4dc3-9898-a878aa7ba090"
+ },
+ "cell_type": "code",
+ "source": [
+ "predict_validation_input_fn = lambda: my_input_fn(validation_examples, \n",
+ " validation_targets[\"median_house_value_is_high\"], \n",
+ " num_epochs=1, \n",
+ " shuffle=False)\n",
+ "\n",
+ "validation_predictions = linear_regressor.predict(input_fn=predict_validation_input_fn)\n",
+ "validation_predictions = np.array([item['predictions'][0] for item in validation_predictions])\n",
+ "\n",
+ "_ = plt.hist(validation_predictions)"
+ ],
+ "execution_count": 8,
+ "outputs": [
+ {
+ "output_type": "display_data",
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAeoAAAFKCAYAAADScRzUAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAGzxJREFUeJzt3W9MnfX9//HX+cPZkXkQDjtXZ2Pn\nlqWuTBmW4FghrULFWJJF1NIVUpet6DSis5GprFo1MRn0D6ZtJKl2o5I2KvFkN/iapjSuLLHhyKYn\nIdSYoLuxdG0t5zgsFKhQcv1u9OfRzvZciAfOp/B83LLXuU7P53rnWp+7roueumzbtgUAAIzkTvcC\nAADA5RFqAAAMRqgBADAYoQYAwGCEGgAAgxFqAAAM5k33Ai4lFhtJ9xKMkpOTqaGhsXQvw2jMyBkz\ncsaMnDEjZzOZUSgUuOxrXFFfAbxeT7qXYDxm5IwZOWNGzpiRs1TPiFADAGAwQg0AgMEINQAABiPU\nAAAYjFADAGAwQg0AgMEINQAABiPUAAAYjFADAGAwQg0AgMEINQAABiPUAAAYzMh/PWsh2th8JN1L\nSKqtsTzdSwCABYkragAADEaoAQAwGKEGAMBghBoAAIM5/jDZ+Pi4Ghsb9emnn+rzzz/Xww8/rK6u\nLn3wwQfKzs6WJNXV1em2225TZ2en2tvb5Xa7tW7dOlVXV2tyclKNjY06efKkPB6PmpqatGTJklk/\nMAAA5gPHUHd3d+umm27SAw88oBMnTmjjxo1avny5Hn/8cZWVlSX2GxsbU2trq8LhsDIyMrR27VpV\nVFSou7tbWVlZamlp0dGjR9XS0qKdO3fO6kEBADBfOIa6srIy8d+nTp3SokWLLrlfX1+f8vPzFQgE\nJEmFhYWKRqOKRCKqqqqSJJWUlGjz5s2pWDcAAAvCtP8e9fr16/XJJ59oz549evXVV3XgwAHt27dP\nubm52rJli+LxuILBYGL/YDCoWCx20Xa32y2Xy6WJiQn5fL7LflZOTqa8Xs+3OCykWigUSPcSHF0J\na0w3ZuSMGTljRs5SOaNph/qNN97Qhx9+qCeeeEKbN29Wdna28vLy9Morr+ill17S8uXLL9rftu1L\n/j6X2/5VQ0Nj010W5kgsNpLuJSQVCgWMX2O6MSNnzMgZM3I2kxklC7vjT30fO3ZMp06dkiTl5eVp\nampKN9xwg/Ly8iRJ5eXlGhgYkGVZisfjifcNDg7KsixZlqVYLCZJmpyclG3bSa+mAQDAlxxD/d57\n76mtrU2SFI/HNTY2pmeffVbHjx+XJPX29mrp0qUqKChQf3+/hoeHNTo6qmg0qqKiIpWWlurQoUOS\nLvxgWnFx8SweDgAA84vjre/169fr6aefVm1trc6dO6dnn31WmZmZ2rRpk6666iplZmaqqalJfr9f\nDQ0Nqqurk8vlUn19vQKBgCorK9XT06Oamhr5fD41NzfPxXEBADAvuOzpPDSeYwvx+Qf/KMe3w3Mz\nZ8zIGTNyxoyczfkzagAAkD6EGgAAgxFqAAAMRqgBADAYoQYAwGCEGgAAgxFqAAAMRqgBADAYoQYA\nwGCEGgAAgxFqAAAMRqgBADAYoQYAwGCEGgAAgxFqAAAMRqgBADAYoQYAwGCEGgAAgxFqAAAMRqgB\nADAYoQYAwGCEGgAAgxFqAAAMRqgBADAYoQYAwGCEGgAAgxFqAAAMRqgBADAYoQYAwGCEGgAAg3md\ndhgfH1djY6M+/fRTff7553r44Ye1bNkyPfnkk5qamlIoFNL27dvl8/nU2dmp9vZ2ud1urVu3TtXV\n1ZqcnFRjY6NOnjwpj8ejpqYmLVmyZC6ODQCAK57jFXV3d7duuukmHThwQDt37lRzc7N2796t2tpa\nvfbaa7r++usVDoc1Njam1tZWvfrqq9q/f7/a29v12Wef6a233lJWVpZef/11PfTQQ2ppaZmL4wIA\nYF5wDHVlZaUeeOABSdKpU6e0aNEi9fb2avXq1ZKksrIyRSIR9fX1KT8/X4FAQH6/X4WFhYpGo4pE\nIqqoqJAklZSUKBqNzuLhAAAwvzje+v7C+vXr9cknn2jPnj367W9/K5/PJ0nKzc1VLBZTPB5XMBhM\n7B8MBr+23e12y+VyaWJiIvF+AABwedMO9RtvvKEPP/xQTzzxhGzbTmz/6n9/1Tfd/lU5OZnyej3T\nXRrmQCgUSPcSHF0Ja0w3ZuSMGTljRs5SOSPHUB87dky5ubm69tprlZeXp6mpKX33u9/VuXPn5Pf7\ndfr0aVmWJcuyFI/HE+8bHBzUzTffLMuyFIvFtGzZMk1OTsq2bcer6aGhsW9/ZEipWGwk3UtIKhQK\nGL/GdGNGzpiRM2bkbCYzShZ2x2fU7733ntra2iRJ8XhcY2NjKikpUVdXlyTp8OHDWrlypQoKCtTf\n36/h4WGNjo4qGo2qqKhIpaWlOnTokKQLP5hWXFz8jRYPAMBC5nhFvX79ej399NOqra3VuXPn9Oyz\nz+qmm27SU089pY6ODi1evFhVVVXKyMhQQ0OD6urq5HK5VF9fr0AgoMrKSvX09KimpkY+n0/Nzc1z\ncVwAAMwLLns6D43n2EK8rbKx+Ui6l5BUW2N5upeQFLfjnDEjZ8zIGTNyNue3vgEAQPoQagAADEao\nAQAwGKEGAMBghBoAAIMRagAADEaoAQAwGKEGAMBghBoAAIMRagAADEaoAQAwGKEGAMBghBoAAIMR\nagAADEaoAQAwGKEGAMBghBoAAIMRagAADEaoAQAwGKEGAMBghBoAAIMRagAADEaoAQAwGKEGAMBg\nhBoAAIMRagAADEaoAQAwGKEGAMBghBoAAIMRagAADEaoAQAwmHc6O23btk3vv/++zp8/rwcffFBH\njhzRBx98oOzsbElSXV2dbrvtNnV2dqq9vV1ut1vr1q1TdXW1Jicn1djYqJMnT8rj8aipqUlLliyZ\n1YMCAGC+cAz1u+++q48++kgdHR0aGhrS3XffrV/84hd6/PHHVVZWlthvbGxMra2tCofDysjI0Nq1\na1VRUaHu7m5lZWWppaVFR48eVUtLi3bu3DmrBwUAwHzheOv7lltu0a5duyRJWVlZGh8f19TU1Nf2\n6+vrU35+vgKBgPx+vwoLCxWNRhWJRFRRUSFJKikpUTQaTfEhAAAwfzleUXs8HmVmZkqSwuGwVq1a\nJY/HowMHDmjfvn3Kzc3Vli1bFI/HFQwGE+8LBoOKxWIXbXe73XK5XJqYmJDP57vsZ+bkZMrr9Xzb\nY0MKhUKBdC/B0ZWwxnRjRs6YkTNm5CyVM5rWM2pJevvttxUOh9XW1qZjx44pOztbeXl5euWVV/TS\nSy9p+fLlF+1v2/Ylf5/Lbf+qoaGx6S4LcyQWG0n3EpIKhQLGrzHdmJEzZuSMGTmbyYyShX1aP/X9\nzjvvaM+ePdq7d68CgYBWrFihvLw8SVJ5ebkGBgZkWZbi8XjiPYODg7IsS5ZlKRaLSZImJydl23bS\nq2kAAPAlx1CPjIxo27ZtevnllxM/5f3oo4/q+PHjkqTe3l4tXbpUBQUF6u/v1/DwsEZHRxWNRlVU\nVKTS0lIdOnRIktTd3a3i4uJZPBwAAOYXx1vfBw8e1NDQkDZt2pTYds8992jTpk266qqrlJmZqaam\nJvn9fjU0NKiurk4ul0v19fUKBAKqrKxUT0+Pampq5PP51NzcPKsHBADAfOKyp/PQeI4txOcfG5uP\npHsJSbU1lqd7CUnx3MwZM3LGjJwxI2dpeUYNAADSg1ADAGAwQg0AgMEINQAABiPUAAAYjFADAGAw\nQg0AgMEINQAABiPUAAAYjFADAGAwQg0AgMEINQAABiPUAAAYjFADAGAwQg0AgMEINQAABiPUAAAY\njFADAGAwQg0AgMEINQAABiPUAAAYjFADAGAwQg0AgMEINQAABiPUAAAYjFADAGAwQg0AgMEINQAA\nBiPUAAAYjFADAGAw73R22rZtm95//32dP39eDz74oPLz8/Xkk09qampKoVBI27dvl8/nU2dnp9rb\n2+V2u7Vu3TpVV1drcnJSjY2NOnnypDwej5qamrRkyZLZPi4AAOYFx1C/++67+uijj9TR0aGhoSHd\nfffdWrFihWpra7VmzRq9+OKLCofDqqqqUmtrq8LhsDIyMrR27VpVVFSou7tbWVlZamlp0dGjR9XS\n0qKdO3fOxbEBAHDFc7z1fcstt2jXrl2SpKysLI2Pj6u3t1erV6+WJJWVlSkSiaivr0/5+fkKBALy\n+/0qLCxUNBpVJBJRRUWFJKmkpETRaHQWDwcAgPnFMdQej0eZmZmSpHA4rFWrVml8fFw+n0+SlJub\nq1gspng8rmAwmHhfMBj82na32y2Xy6WJiYnZOBYAAOadaT2jlqS3335b4XBYbW1tuuOOOxLbbdu+\n5P7fdPtX5eRkyuv1THdpmAOhUCDdS3B0Jawx3ZiRM2bkjBk5S+WMphXqd955R3v27NGf//xnBQIB\nZWZm6ty5c/L7/Tp9+rQsy5JlWYrH44n3DA4O6uabb5ZlWYrFYlq2bJkmJydl23biavxyhobGvt1R\nIeVisZF0LyGpUChg/BrTjRk5Y0bOmJGzmcwoWdgdb32PjIxo27Ztevnll5WdnS3pwrPmrq4uSdLh\nw4e1cuVKFRQUqL+/X8PDwxodHVU0GlVRUZFKS0t16NAhSVJ3d7eKi4u/0eIBAFjIHK+oDx48qKGh\nIW3atCmxrbm5Wc8884w6Ojq0ePFiVVVVKSMjQw0NDaqrq5PL5VJ9fb0CgYAqKyvV09Ojmpoa+Xw+\nNTc3z+oBAQAwn7js6Tw0nmML8bbKxuYj6V5CUm2N5eleQlLcjnPGjJwxI2fMyNmc3/oGAADpQ6gB\nADAYoQYAwGCEGgAAgxFqAAAMRqgBADAYoQYAwGCEGgAAgxFqAAAMRqgBADAYoQYAwGCEGgAAgxFq\nAAAMRqgBADAYoQYAwGCEGgAAgxFqAAAMRqgBADAYoQYAwGCEGgAAgxFqAAAMRqgBADAYoQYAwGCE\nGgAAgxFqAAAMRqgBADAYoQYAwGCEGgAAgxFqAAAMRqgBADAYoQYAwGDTCvXAwIBuv/12HThwQJLU\n2NioX/7yl7rvvvt033336e9//7skqbOzU/fee6+qq6v15ptvSpImJyfV0NCgmpoabdiwQcePH5+d\nIwEAYB7yOu0wNjamF154QStWrLho++OPP66ysrKL9mttbVU4HFZGRobWrl2riooKdXd3KysrSy0t\nLTp69KhaWlq0c+fO1B8JAADzkOMVtc/n0969e2VZVtL9+vr6lJ+fr0AgIL/fr8LCQkWjUUUiEVVU\nVEiSSkpKFI1GU7NyAAAWAMcraq/XK6/367sdOHBA+/btU25urrZs2aJ4PK5gMJh4PRgMKhaLXbTd\n7XbL5XJpYmJCPp/vsp+Zk5Mpr9czk+PBLAmFAulegqMrYY3pxoycMSNnzMhZKmfkGOpLueuuu5Sd\nna28vDy98soreumll7R8+fKL9rFt+5Lvvdz2rxoaGpvJsjCLYrGRdC8hqVAoYPwa040ZOWNGzpiR\ns5nMKFnYZ/RT3ytWrFBeXp4kqby8XAMDA7IsS/F4PLHP4OCgLMuSZVmKxWKSLvxgmW3bSa+mAQDA\nl2YU6kcffTTx09u9vb1aunSpCgoK1N/fr+HhYY2OjioajaqoqEilpaU6dOiQJKm7u1vFxcWpWz0A\nAPOc463vY8eOaevWrTpx4oS8Xq+6urq0YcMGbdq0SVdddZUyMzPV1NQkv9+vhoYG1dXVyeVyqb6+\nXoFAQJWVlerp6VFNTY18Pp+am5vn4rgAAJgXXPZ0HhrPsYX4/GNj85F0LyGptsbydC8hKZ6bOWNG\nzpiRM2bkzIhn1AAAYG4QagAADEaoAQAwGKEGAMBghBoAAIMRagAADEaoAQAwGKEGAMBghBoAAIMR\nagAADEaoAQAwGKEGAMBghBoAAIMRagAADEaoAQAwGKEGAMBghBoAAIMRagAADEaoAQAwGKEGAMBg\nhBoAAIMRagAADOZN9wJwZdjYfCTdS3DU1lie7iUAQMpxRQ0AgMEINQAABiPUAAAYjFADAGAwQg0A\ngMEINQAABiPUAAAYbFqhHhgY0O23364DBw5Ikk6dOqX77rtPtbW1euyxxzQxMSFJ6uzs1L333qvq\n6mq9+eabkqTJyUk1NDSopqZGGzZs0PHjx2fpUAAAmH8cQz02NqYXXnhBK1asSGzbvXu3amtr9dpr\nr+n6669XOBzW2NiYWltb9eqrr2r//v1qb2/XZ599prfeektZWVl6/fXX9dBDD6mlpWVWDwgAgPnE\nMdQ+n0979+6VZVmJbb29vVq9erUkqaysTJFIRH19fcrPz1cgEJDf71dhYaGi0agikYgqKiokSSUl\nJYpGo7N0KAAAzD+OofZ6vfL7/RdtGx8fl8/nkyTl5uYqFospHo8rGAwm9gkGg1/b7na75XK5ErfK\nAQBAct/6u75t207J9q/KycmU1+v5VuvCwhMKBdK9BOMxI2fMyBkzcpbKGc0o1JmZmTp37pz8fr9O\nnz4ty7JkWZbi8Xhin8HBQd18882yLEuxWEzLli3T5OSkbNtOXI1fztDQ2EyWhQUuFhtJ9xKMFgoF\nmJEDZuSMGTmbyYyShX1Gfz2rpKREXV1dkqTDhw9r5cqVKigoUH9/v4aHhzU6OqpoNKqioiKVlpbq\n0KFDkqTu7m4VFxfP5CMBAFiQHK+ojx07pq1bt+rEiRPyer3q6urSjh071NjYqI6ODi1evFhVVVXK\nyMhQQ0OD6urq5HK5VF9fr0AgoMrKSvX09KimpkY+n0/Nzc1zcVwAAMwLLns6D43n2EK8rXIl/HvP\npuPfo06OW5bOmJEzZuTMiFvfAABgbhBqAAAMRqgBADAYoQYAwGCEGgAAgxFqAAAMRqgBADAYoQYA\nwGCEGgAAgxFqAAAMRqgBADAYoQYAwGCEGgAAgxFqAAAMRqgBADAYoQYAwGCEGgAAgxFqAAAMRqgB\nADAYoQYAwGCEGgAAgxFqAAAMRqgBADAYoQYAwGCEGgAAgxFqAAAMRqgBADAYoQYAwGCEGgAAgxFq\nAAAMRqgBADCYdyZv6u3t1WOPPaalS5dKkm644Qbdf//9evLJJzU1NaVQKKTt27fL5/Ops7NT7e3t\ncrvdWrdunaqrq1N6AAAAzGczCrUk/fznP9fu3bsTv/7jH/+o2tparVmzRi+++KLC4bCqqqrU2tqq\ncDisjIwMrV27VhUVFcrOzk7J4gEAmO9Sduu7t7dXq1evliSVlZUpEomor69P+fn5CgQC8vv9Kiws\nVDQaTdVHAgAw7834ivrjjz/WQw89pDNnzuiRRx7R+Pi4fD6fJCk3N1exWEzxeFzBYDDxnmAwqFgs\n5vh75+Rkyuv1zHRpWKBCoUC6l2A8ZuSMGTljRs5SOaMZhfqHP/yhHnnkEa1Zs0bHjx/Xr3/9a01N\nTSVet237ku+73Pb/NTQ0NpNlYYGLxUbSvQSjhUIBZuSAGTljRs5mMqNkYZ/Rre9FixapsrJSLpdL\nP/jBD/S9731PZ86c0blz5yRJp0+flmVZsixL8Xg88b7BwUFZljWTjwQAYEGaUag7Ozv1l7/8RZIU\ni8X06aef6p577lFXV5ck6fDhw1q5cqUKCgrU39+v4eFhjY6OKhqNqqioKHWrBwBgnpvRre/y8nL9\n4Q9/0N/+9jdNTk7q+eefV15enp566il1dHRo8eLFqqqqUkZGhhoaGlRXVyeXy6X6+noFAjzbAABg\numYU6quvvlp79uz52vZ9+/Z9bdudd96pO++8cyYfAwDAgsc3kwEAYDBCDQCAwQg1AAAGI9QAABiM\nUAMAYDBCDQCAwQg1AAAGI9QAABiMUAMAYDBCDQCAwQg1AAAGI9QAABiMUAMAYDBCDQCAwQg1AAAG\nI9QAABiMUAMAYDBCDQCAwQg1AAAGI9QAABiMUAMAYDBCDQCAwbzpXgCQKhubj6R7CUm1NZanewkA\nrkBcUQMAYDBCDQCAwQg1AAAGI9QAABiMUAMAYDBCDQCAwQg1AAAGm5O/R/2nP/1JfX19crlc2rx5\ns372s5/NxccCRjH973lL/F1vwESzHup//OMf+ve//62Ojg7961//0ubNm9XR0THbHwsAwLww66GO\nRCK6/fbbJUk//vGPdebMGZ09e1ZXX331bH80gG/I9Kt+rvixEM16qOPxuG688cbEr4PBoGKx2JyG\n2vQ/fABMD/9bTg3+D8+VZc6/69u2bcd9QqFASj/z/1ruSunvBwALWar/jJ6PUjmjWf+pb8uyFI/H\nE78eHBxUKBSa7Y8FAGBemPVQl5aWqqurS5L0wQcfyLIsnk8DADBNs37ru7CwUDfeeKPWr18vl8ul\n5557brY/EgCAecNlT+ehMQAASAu+mQwAAIMRagAADDbnfz0LySX7utWenh69+OKL8ng8WrVqlerr\n69O40vRJNqPy8nJ9//vfl8fjkSTt2LFDixYtStdS02ZgYEAPP/ywfvOb32jDhg0XvcZ5dEGyGXEe\nXbBt2za9//77On/+vB588EHdcccdidc4j5LPJ6XnkA1j9Pb22r/73e9s27btjz/+2F63bt1Fr69Z\ns8Y+efKkPTU1ZdfU1NgfffRROpaZVk4zKisrs8+ePZuOpRljdHTU3rBhg/3MM8/Y+/fv/9rrnEfO\nM+I8su1IJGLff//9tm3b9n//+1/71ltvvej1hX4eOc0nlecQt74NcrmvW5Wk48eP65prrtG1114r\nt9utW2+9VZFIJJ3LTYtkM8IFPp9Pe/fulWVZX3uN8+iCZDPCBbfccot27dolScrKytL4+LimpqYk\ncR5JyeeTaoTaIPF4XDk5OYlff/F1q5IUi8UUDAYv+dpCkmxGX3juuedUU1OjHTt2TOub8OYbr9cr\nv99/ydc4jy5INqMvLPTzyOPxKDMzU5IUDoe1atWqxG1czqPk8/lCqs4hnlEbbCH+4fBN/e+Mfv/7\n32vlypW65pprVF9fr66uLt15551pWh2uVJxHX3r77bcVDofV1taW7qUY6XLzSeU5xBW1QZJ93er/\nvnb69OkFedvO6Stpq6qqlJubK6/Xq1WrVmlgYCAdyzQW59H0cB5d8M4772jPnj3au3evAoEvv7ua\n8+iCy81HSu05RKgNkuzrVq+77jqdPXtW//nPf3T+/Hl1d3ertLQ0nctNi2QzGhkZUV1dnSYmJiRJ\n//znP7V06dK0rdVEnEfOOI8uGBkZ0bZt2/Tyyy8rOzv7otc4j5LPJ9XnELe+DXKpr1v961//qkAg\noIqKCj3//PNqaGiQJFVWVupHP/pRmlc895xmtGrVKv3qV7/Sd77zHf30pz9dkLcrjx07pq1bt+rE\niRPyer3q6upSeXm5rrvuOs6j/89pRpxH0sGDBzU0NKRNmzYlthUXF+snP/kJ55Gc55PKc4ivEAUA\nwGDc+gYAwGCEGgAAgxFqAAAMRqgBADAYoQYAwGCEGgAAgxFqAAAMRqgBADDY/wOd/t8z0pRcYgAA\nAABJRU5ErkJggg==\n",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ }
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "rYpy336F9wBg",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "## Task 2: Train a Logistic Regression Model and Calculate LogLoss on the Validation Set\n",
+ "\n",
+ "To use logistic regression, simply use [LinearClassifier](https://www.tensorflow.org/api_docs/python/tf/estimator/LinearClassifier) instead of `LinearRegressor`. Complete the code below.\n",
+ "\n",
+ "**NOTE**: When running `train()` and `predict()` on a `LinearClassifier` model, you can access the real-valued predicted probabilities via the `\"probabilities\"` key in the returned dict—e.g., `predictions[\"probabilities\"]`. Sklearn's [log_loss](http://scikit-learn.org/stable/modules/generated/sklearn.metrics.log_loss.html) function is handy for calculating LogLoss using these probabilities.\n"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "JElcb--E9wBm",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "def train_linear_classifier_model(\n",
+ " learning_rate,\n",
+ " steps,\n",
+ " batch_size,\n",
+ " training_examples,\n",
+ " training_targets,\n",
+ " validation_examples,\n",
+ " validation_targets):\n",
+ " \"\"\"Trains a linear classification model.\n",
+ " \n",
+ " In addition to training, this function also prints training progress information,\n",
+ " as well as a plot of the training and validation loss over time.\n",
+ " \n",
+ " Args:\n",
+ " learning_rate: A `float`, the learning rate.\n",
+ " steps: A non-zero `int`, the total number of training steps. A training step\n",
+ " consists of a forward and backward pass using a single batch.\n",
+ " batch_size: A non-zero `int`, the batch size.\n",
+ " training_examples: A `DataFrame` containing one or more columns from\n",
+ " `california_housing_dataframe` to use as input features for training.\n",
+ " training_targets: A `DataFrame` containing exactly one column from\n",
+ " `california_housing_dataframe` to use as target for training.\n",
+ " validation_examples: A `DataFrame` containing one or more columns from\n",
+ " `california_housing_dataframe` to use as input features for validation.\n",
+ " validation_targets: A `DataFrame` containing exactly one column from\n",
+ " `california_housing_dataframe` to use as target for validation.\n",
+ " \n",
+ " Returns:\n",
+ " A `LinearClassifier` object trained on the training data.\n",
+ " \"\"\"\n",
+ "\n",
+ " periods = 10\n",
+ " steps_per_period = steps / periods\n",
+ " \n",
+ " # Create a linear classifier object.\n",
+ " my_optimizer = tf.train.GradientDescentOptimizer(learning_rate=learning_rate)\n",
+ " my_optimizer = tf.contrib.estimator.clip_gradients_by_norm(my_optimizer, 5.0) \n",
+ " linear_classifier = tf.estimator.LinearClassifier(\n",
+ " feature_columns=construct_feature_columns(training_examples),\n",
+ " optimizer=my_optimizer\n",
+ " )\n",
+ " \n",
+ " # Create input functions.\n",
+ " training_input_fn = lambda: my_input_fn(training_examples, \n",
+ " training_targets[\"median_house_value_is_high\"], \n",
+ " batch_size=batch_size)\n",
+ " predict_training_input_fn = lambda: my_input_fn(training_examples, \n",
+ " training_targets[\"median_house_value_is_high\"], \n",
+ " num_epochs=1, \n",
+ " shuffle=False)\n",
+ " predict_validation_input_fn = lambda: my_input_fn(validation_examples, \n",
+ " validation_targets[\"median_house_value_is_high\"], \n",
+ " num_epochs=1, \n",
+ " shuffle=False)\n",
+ " \n",
+ " # Train the model, but do so inside a loop so that we can periodically assess\n",
+ " # loss metrics.\n",
+ " print(\"Training model...\")\n",
+ " print(\"LogLoss (on training data):\")\n",
+ " training_log_losses = []\n",
+ " validation_log_losses = []\n",
+ " for period in range (0, periods):\n",
+ " # Train the model, starting from the prior state.\n",
+ " linear_classifier.train(\n",
+ " input_fn=training_input_fn,\n",
+ " steps=steps_per_period\n",
+ " )\n",
+ " # Take a break and compute predictions. \n",
+ " training_probabilities = linear_classifier.predict(input_fn=predict_training_input_fn)\n",
+ " training_probabilities = np.array([item['probabilities'] for item in training_probabilities])\n",
+ " \n",
+ " validation_probabilities = linear_classifier.predict(input_fn=predict_validation_input_fn)\n",
+ " validation_probabilities = np.array([item['probabilities'] for item in validation_probabilities])\n",
+ " \n",
+ " training_log_loss = metrics.log_loss(training_targets, training_probabilities)\n",
+ " validation_log_loss = metrics.log_loss(validation_targets, validation_probabilities)\n",
+ " # Occasionally print the current loss.\n",
+ " print(\" period %02d : %0.2f\" % (period, training_log_loss))\n",
+ " # Add the loss metrics from this period to our list.\n",
+ " training_log_losses.append(training_log_loss)\n",
+ " validation_log_losses.append(validation_log_loss)\n",
+ " print(\"Model training finished.\")\n",
+ " \n",
+ " # Output a graph of loss metrics over periods.\n",
+ " plt.ylabel(\"LogLoss\")\n",
+ " plt.xlabel(\"Periods\")\n",
+ " plt.title(\"LogLoss vs. Periods\")\n",
+ " plt.tight_layout()\n",
+ " plt.plot(training_log_losses, label=\"training\")\n",
+ " plt.plot(validation_log_losses, label=\"validation\")\n",
+ " plt.legend()\n",
+ "\n",
+ " return linear_classifier"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "VM0wmnFUIYH9",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 635
+ },
+ "outputId": "fcb8e9d7-06d6-4967-9566-e8aac205573d"
+ },
+ "cell_type": "code",
+ "source": [
+ "linear_classifier = train_linear_classifier_model(\n",
+ " learning_rate=0.000005,\n",
+ " steps=500,\n",
+ " batch_size=20,\n",
+ " training_examples=training_examples,\n",
+ " training_targets=training_targets,\n",
+ " validation_examples=validation_examples,\n",
+ " validation_targets=validation_targets)"
+ ],
+ "execution_count": 11,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "Training model...\n",
+ "LogLoss (on training data):\n",
+ " period 00 : 0.60\n",
+ " period 01 : 0.58\n",
+ " period 02 : 0.57\n",
+ " period 03 : 0.57\n",
+ " period 04 : 0.55\n",
+ " period 05 : 0.54\n",
+ " period 06 : 0.54\n",
+ " period 07 : 0.53\n",
+ " period 08 : 0.53\n",
+ " period 09 : 0.55\n",
+ "Model training finished.\n"
+ ],
+ "name": "stdout"
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ }
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "i2e3TlyL57Qs",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "### Solution\n",
+ "\n",
+ "Click below to see the solution.\n",
+ "\n"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "5YxXd2hn6MuF",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "def train_linear_classifier_model(\n",
+ " learning_rate,\n",
+ " steps,\n",
+ " batch_size,\n",
+ " training_examples,\n",
+ " training_targets,\n",
+ " validation_examples,\n",
+ " validation_targets):\n",
+ " \"\"\"Trains a linear classification model.\n",
+ " \n",
+ " In addition to training, this function also prints training progress information,\n",
+ " as well as a plot of the training and validation loss over time.\n",
+ " \n",
+ " Args:\n",
+ " learning_rate: A `float`, the learning rate.\n",
+ " steps: A non-zero `int`, the total number of training steps. A training step\n",
+ " consists of a forward and backward pass using a single batch.\n",
+ " batch_size: A non-zero `int`, the batch size.\n",
+ " training_examples: A `DataFrame` containing one or more columns from\n",
+ " `california_housing_dataframe` to use as input features for training.\n",
+ " training_targets: A `DataFrame` containing exactly one column from\n",
+ " `california_housing_dataframe` to use as target for training.\n",
+ " validation_examples: A `DataFrame` containing one or more columns from\n",
+ " `california_housing_dataframe` to use as input features for validation.\n",
+ " validation_targets: A `DataFrame` containing exactly one column from\n",
+ " `california_housing_dataframe` to use as target for validation.\n",
+ " \n",
+ " Returns:\n",
+ " A `LinearClassifier` object trained on the training data.\n",
+ " \"\"\"\n",
+ "\n",
+ " periods = 10\n",
+ " steps_per_period = steps / periods\n",
+ " \n",
+ " # Create a linear classifier object.\n",
+ " my_optimizer = tf.train.GradientDescentOptimizer(learning_rate=learning_rate)\n",
+ " my_optimizer = tf.contrib.estimator.clip_gradients_by_norm(my_optimizer, 5.0) \n",
+ " linear_classifier = tf.estimator.LinearClassifier(\n",
+ " feature_columns=construct_feature_columns(training_examples),\n",
+ " optimizer=my_optimizer\n",
+ " )\n",
+ " \n",
+ " # Create input functions.\n",
+ " training_input_fn = lambda: my_input_fn(training_examples, \n",
+ " training_targets[\"median_house_value_is_high\"], \n",
+ " batch_size=batch_size)\n",
+ " predict_training_input_fn = lambda: my_input_fn(training_examples, \n",
+ " training_targets[\"median_house_value_is_high\"], \n",
+ " num_epochs=1, \n",
+ " shuffle=False)\n",
+ " predict_validation_input_fn = lambda: my_input_fn(validation_examples, \n",
+ " validation_targets[\"median_house_value_is_high\"], \n",
+ " num_epochs=1, \n",
+ " shuffle=False)\n",
+ " \n",
+ " # Train the model, but do so inside a loop so that we can periodically assess\n",
+ " # loss metrics.\n",
+ " print(\"Training model...\")\n",
+ " print(\"LogLoss (on training data):\")\n",
+ " training_log_losses = []\n",
+ " validation_log_losses = []\n",
+ " for period in range (0, periods):\n",
+ " # Train the model, starting from the prior state.\n",
+ " linear_classifier.train(\n",
+ " input_fn=training_input_fn,\n",
+ " steps=steps_per_period\n",
+ " )\n",
+ " # Take a break and compute predictions. \n",
+ " training_probabilities = linear_classifier.predict(input_fn=predict_training_input_fn)\n",
+ " training_probabilities = np.array([item['probabilities'] for item in training_probabilities])\n",
+ " \n",
+ " validation_probabilities = linear_classifier.predict(input_fn=predict_validation_input_fn)\n",
+ " validation_probabilities = np.array([item['probabilities'] for item in validation_probabilities])\n",
+ " \n",
+ " training_log_loss = metrics.log_loss(training_targets, training_probabilities)\n",
+ " validation_log_loss = metrics.log_loss(validation_targets, validation_probabilities)\n",
+ " # Occasionally print the current loss.\n",
+ " print(\" period %02d : %0.2f\" % (period, training_log_loss))\n",
+ " # Add the loss metrics from this period to our list.\n",
+ " training_log_losses.append(training_log_loss)\n",
+ " validation_log_losses.append(validation_log_loss)\n",
+ " print(\"Model training finished.\")\n",
+ " \n",
+ " # Output a graph of loss metrics over periods.\n",
+ " plt.ylabel(\"LogLoss\")\n",
+ " plt.xlabel(\"Periods\")\n",
+ " plt.title(\"LogLoss vs. Periods\")\n",
+ " plt.tight_layout()\n",
+ " plt.plot(training_log_losses, label=\"training\")\n",
+ " plt.plot(validation_log_losses, label=\"validation\")\n",
+ " plt.legend()\n",
+ "\n",
+ " return linear_classifier"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "UPM_T1FXsTaL",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "linear_classifier = train_linear_classifier_model(\n",
+ " learning_rate=0.000005,\n",
+ " steps=500,\n",
+ " batch_size=20,\n",
+ " training_examples=training_examples,\n",
+ " training_targets=training_targets,\n",
+ " validation_examples=validation_examples,\n",
+ " validation_targets=validation_targets)"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "i-Xo83_aR6s_",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "## Task 3: Calculate Accuracy and plot a ROC Curve for the Validation Set\n",
+ "\n",
+ "A few of the metrics useful for classification are the model [accuracy](https://en.wikipedia.org/wiki/Accuracy_and_precision#In_binary_classification), the [ROC curve](https://en.wikipedia.org/wiki/Receiver_operating_characteristic) and the area under the ROC curve (AUC). We'll examine these metrics.\n",
+ "\n",
+ "`LinearClassifier.evaluate` calculates useful metrics like accuracy and AUC."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "DKSQ87VVIYIA",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 53
+ },
+ "outputId": "6d0269d3-5c9d-44ca-ea3d-1194ea6efc58"
+ },
+ "cell_type": "code",
+ "source": [
+ "evaluation_metrics = linear_classifier.evaluate(input_fn=predict_validation_input_fn)\n",
+ "\n",
+ "print(\"AUC on the validation set: %0.2f\" % evaluation_metrics['auc'])\n",
+ "print(\"Accuracy on the validation set: %0.2f\" % evaluation_metrics['accuracy'])"
+ ],
+ "execution_count": 13,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "AUC on the validation set: 0.69\n",
+ "Accuracy on the validation set: 0.74\n"
+ ],
+ "name": "stdout"
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "47xGS2uNIYIE",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "You may use class probabilities, such as those calculated by `LinearClassifier.predict`,\n",
+ "and Sklearn's [roc_curve](http://scikit-learn.org/stable/modules/model_evaluation.html#roc-metrics) to\n",
+ "obtain the true positive and false positive rates needed to plot a ROC curve."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "xaU7ttj8IYIF",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 347
+ },
+ "outputId": "8749116d-665c-4023-8cae-a637182f6e81"
+ },
+ "cell_type": "code",
+ "source": [
+ "validation_probabilities = linear_classifier.predict(input_fn=predict_validation_input_fn)\n",
+ "# Get just the probabilities for the positive class.\n",
+ "validation_probabilities = np.array([item['probabilities'][1] for item in validation_probabilities])\n",
+ "\n",
+ "false_positive_rate, true_positive_rate, thresholds = metrics.roc_curve(\n",
+ " validation_targets, validation_probabilities)\n",
+ "plt.plot(false_positive_rate, true_positive_rate, label=\"our model\")\n",
+ "plt.plot([0, 1], [0, 1], label=\"random classifier\")\n",
+ "_ = plt.legend(loc=2)"
+ ],
+ "execution_count": 14,
+ "outputs": [
+ {
+ "output_type": "display_data",
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ }
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "PIdhwfgzIYII",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "**See if you can tune the learning settings of the model trained at Task 2 to improve AUC.**\n",
+ "\n",
+ "Often times, certain metrics improve at the detriment of others, and you'll need to find the settings that achieve a good compromise.\n",
+ "\n",
+ "**Verify if all metrics improve at the same time.**"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "XKIqjsqcCaxO",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 671
+ },
+ "outputId": "40962832-0c45-4a82-a55c-eecd6066d571"
+ },
+ "cell_type": "code",
+ "source": [
+ "# TUNE THE SETTINGS BELOW TO IMPROVE AUC\n",
+ "linear_classifier = train_linear_classifier_model(\n",
+ " learning_rate=0.000005,\n",
+ " steps=500,\n",
+ " batch_size=20,\n",
+ " training_examples=training_examples,\n",
+ " training_targets=training_targets,\n",
+ " validation_examples=validation_examples,\n",
+ " validation_targets=validation_targets)\n",
+ "\n",
+ "evaluation_metrics = linear_classifier.evaluate(input_fn=predict_validation_input_fn)\n",
+ "\n",
+ "print(\"AUC on the validation set: %0.2f\" % evaluation_metrics['auc'])\n",
+ "print(\"Accuracy on the validation set: %0.2f\" % evaluation_metrics['accuracy'])"
+ ],
+ "execution_count": 15,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "Training model...\n",
+ "LogLoss (on training data):\n",
+ " period 00 : 0.60\n",
+ " period 01 : 0.58\n",
+ " period 02 : 0.58\n",
+ " period 03 : 0.56\n",
+ " period 04 : 0.55\n",
+ " period 05 : 0.55\n",
+ " period 06 : 0.54\n",
+ " period 07 : 0.54\n",
+ " period 08 : 0.53\n",
+ " period 09 : 0.53\n",
+ "Model training finished.\n",
+ "AUC on the validation set: 0.73\n",
+ "Accuracy on the validation set: 0.75\n"
+ ],
+ "name": "stdout"
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "image/png": "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\nv/yFN998k1deecXbpUi/P/3pT8ycOZPk5GRvlyJn0dTUxLPPPsuJEye48847+eSTTzCZTN4ua0T7\n85//zJgxY3j55ZcpKyujoKBAc80ugMLMGeLj47Fare7l+vp64uLivFiRnGrr1q288MIL/O53vyMs\nLMzb5Ui/LVu22YjDRQAABBtJREFUUFVVxZYtW6itrSUgIIDExEQWLVrk7dJGvJiYGGbNmoWfnx8p\nKSmEhITQ2NhITEyMt0sb0b755hsWL14MwJQpU6ivr9ew+QXQMNMZsrOz2bx5MwAlJSXEx8drvoxB\ntLa28sQTT/Db3/6WyMhIb5cjp3j66afZuHEjr7/+Orfccgtr1qxRkDGIxYsXs23bNpxOJzabjY6O\nDs3PMIDU1FR2794NQHV1NSEhIQoyF0BnZs4we/ZsMjIyyMvLw2QyUVhY6O2SpN+7776LzWbjn/7p\nn9w/W79+PWPGjPFiVSLGlpCQwNVXX82tt94KwM9+9jPMZv0e6225ubkUFBRwxx13YLfbefTRR71d\nkk8zuTQpRERERHyY4rmIiIj4NIUZERER8WkKMyIiIuLTFGZERETEpynMiIiIiE9TmBGRYXP8+HEy\nMzPJz8933y34wQcfpKWlZdDbyM/Px+FwDHr92267je3btw+lXBHxEQozIjKsoqOj2bBhAxs2bOC1\n114jPj6e559/ftCv37Bhgy4uJiKn0UXzRMSr5s2bR1FREWVlZaxfvx673U5vby8///nPSU9PJz8/\nnylTplBaWsqrr75Keno6JSUl9PT08Mgjj1BbW4vdbuf6669n9erVdHZ28s///M/YbDZSU1Pp7u4G\noK6ujoceegiArq4ucnNzufnmm7256yJykSjMiIjXOBwOPvzwQ+bMmcPDDz/Mc889R0pKyvduvBcc\nHMzvf//70167YcMGwsPDeeqpp+jq6mLVqlUsWbKEL7/8kqCgIIqKiqivr+fKK68E4L333mPChAk8\n9thjdHd388Ybbwz7/oqIZyjMiMiwamxsJD8/HwCn08ncuXO56aabeOaZZ/jpT3/qXq+trQ2n0wn0\n3WbkTLt37+bGG28EICgoiMzMTEpKSigvL2fOnDlA341jJ0yYAMCSJUv4r//6L9auXcvll19Obm6u\nR/dTRIaPwoyIDKvv5sycqrW1FX9//+/9/Dv+/v7f+5nJZDpt2eVyYTKZcLlcp9176LtANHHiRN55\n5x127tzJ+++/z6uvvsprr712obsjIgagCcAi4nVhYWEkJSXx6aefAnDkyBGeffbZAV8zY8YMtm7d\nCkBHRwclJSVkZGQwceJEdu3aBUBNTQ1HjhwB4O2332bv3r0sWrSIwsJCampqsNvtHtwrERkuOjMj\nIoawfv16Hn/8cV588UXsdjtr164dcP38/HweeeQRbr/9dnp6elizZg1JSUlcf/31fPzxx6xevZqk\npCSmTZsGwKRJkygsLCQgIACXy8U999yDn5/+ChS5FOiu2SIiIuLTNMwkIiIiPk1hRkRERHyawoyI\niIj4NIUZERER8WkKMyIiIuLTFGZERETEpynMiIiIiE9TmBERERGf9v8BPZxkbt+cjhUAAAAASUVO\nRK5CYII=\n",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ }
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "wCugvl0JdWYL",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "### Solution\n",
+ "\n",
+ "Click below for a possible solution."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "VHosS1g2aetf",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "One possible solution that works is to just train for longer, as long as we don't overfit. \n",
+ "\n",
+ "We can do this by increasing the number the steps, the batch size, or both.\n",
+ "\n",
+ "All metrics improve at the same time, so our loss metric is a good proxy\n",
+ "for both AUC and accuracy.\n",
+ "\n",
+ "Notice how it takes many, many more iterations just to squeeze a few more \n",
+ "units of AUC. This commonly happens. But often even this small gain is worth \n",
+ "the costs."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "dWgTEYMddaA-",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "linear_classifier = train_linear_classifier_model(\n",
+ " learning_rate=0.000003,\n",
+ " steps=20000,\n",
+ " batch_size=500,\n",
+ " training_examples=training_examples,\n",
+ " training_targets=training_targets,\n",
+ " validation_examples=validation_examples,\n",
+ " validation_targets=validation_targets)\n",
+ "\n",
+ "evaluation_metrics = linear_classifier.evaluate(input_fn=predict_validation_input_fn)\n",
+ "\n",
+ "print(\"AUC on the validation set: %0.2f\" % evaluation_metrics['auc'])\n",
+ "print(\"Accuracy on the validation set: %0.2f\" % evaluation_metrics['accuracy'])"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ }
+ ]
+}
\ No newline at end of file
From 8c0411eedcc4d5c1d88cc73306bcb79e946c154d Mon Sep 17 00:00:00 2001
From: Amartya Bhattacharya
<36528245+amartyabhattacharya@users.noreply.github.com>
Date: Sun, 17 Feb 2019 12:53:02 +0530
Subject: [PATCH 08/11] Created using Colaboratory
---
sparsity_and_l1_regularization.ipynb | 1148 ++++++++++++++++++++++++++
1 file changed, 1148 insertions(+)
create mode 100644 sparsity_and_l1_regularization.ipynb
diff --git a/sparsity_and_l1_regularization.ipynb b/sparsity_and_l1_regularization.ipynb
new file mode 100644
index 0000000..6491b01
--- /dev/null
+++ b/sparsity_and_l1_regularization.ipynb
@@ -0,0 +1,1148 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 0,
+ "metadata": {
+ "colab": {
+ "name": "sparsity_and_l1_regularization.ipynb",
+ "version": "0.3.2",
+ "provenance": [],
+ "collapsed_sections": [
+ "JndnmDMp66FL",
+ "yjUCX5LAkxAX"
+ ],
+ "include_colab_link": true
+ },
+ "kernelspec": {
+ "name": "python2",
+ "display_name": "Python 2"
+ }
+ },
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "view-in-github",
+ "colab_type": "text"
+ },
+ "source": [
+ ""
+ ]
+ },
+ {
+ "metadata": {
+ "id": "JndnmDMp66FL",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "#### Copyright 2017 Google LLC."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "hMqWDc_m6rUC",
+ "colab_type": "code",
+ "cellView": "both",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "# Licensed under the Apache License, Version 2.0 (the \"License\");\n",
+ "# you may not use this file except in compliance with the License.\n",
+ "# You may obtain a copy of the License at\n",
+ "#\n",
+ "# https://www.apache.org/licenses/LICENSE-2.0\n",
+ "#\n",
+ "# Unless required by applicable law or agreed to in writing, software\n",
+ "# distributed under the License is distributed on an \"AS IS\" BASIS,\n",
+ "# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n",
+ "# See the License for the specific language governing permissions and\n",
+ "# limitations under the License."
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "g4T-_IsVbweU",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "# Sparsity and L1 Regularization"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "g8ue2FyFIjnQ",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "**Learning Objectives:**\n",
+ " * Calculate the size of a model\n",
+ " * Apply L1 regularization to reduce the size of a model by increasing sparsity"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "ME_WXE7cIjnS",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "One way to reduce complexity is to use a regularization function that encourages weights to be exactly zero. For linear models such as regression, a zero weight is equivalent to not using the corresponding feature at all. In addition to avoiding overfitting, the resulting model will be more efficient.\n",
+ "\n",
+ "L1 regularization is a good way to increase sparsity.\n",
+ "\n"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "fHRzeWkRLrHF",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "## Setup\n",
+ "\n",
+ "Run the cells below to load the data and create feature definitions."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "pb7rSrLKIjnS",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "from __future__ import print_function\n",
+ "\n",
+ "import math\n",
+ "\n",
+ "from IPython import display\n",
+ "from matplotlib import cm\n",
+ "from matplotlib import gridspec\n",
+ "from matplotlib import pyplot as plt\n",
+ "import numpy as np\n",
+ "import pandas as pd\n",
+ "from sklearn import metrics\n",
+ "import tensorflow as tf\n",
+ "from tensorflow.python.data import Dataset\n",
+ "\n",
+ "tf.logging.set_verbosity(tf.logging.ERROR)\n",
+ "pd.options.display.max_rows = 10\n",
+ "pd.options.display.float_format = '{:.1f}'.format\n",
+ "\n",
+ "california_housing_dataframe = pd.read_csv(\"https://download.mlcc.google.com/mledu-datasets/california_housing_train.csv\", sep=\",\")\n",
+ "\n",
+ "california_housing_dataframe = california_housing_dataframe.reindex(\n",
+ " np.random.permutation(california_housing_dataframe.index))"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "3V7q8jk0IjnW",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "def preprocess_features(california_housing_dataframe):\n",
+ " \"\"\"Prepares input features from California housing data set.\n",
+ "\n",
+ " Args:\n",
+ " california_housing_dataframe: A Pandas DataFrame expected to contain data\n",
+ " from the California housing data set.\n",
+ " Returns:\n",
+ " A DataFrame that contains the features to be used for the model, including\n",
+ " synthetic features.\n",
+ " \"\"\"\n",
+ " selected_features = california_housing_dataframe[\n",
+ " [\"latitude\",\n",
+ " \"longitude\",\n",
+ " \"housing_median_age\",\n",
+ " \"total_rooms\",\n",
+ " \"total_bedrooms\",\n",
+ " \"population\",\n",
+ " \"households\",\n",
+ " \"median_income\"]]\n",
+ " processed_features = selected_features.copy()\n",
+ " # Create a synthetic feature.\n",
+ " processed_features[\"rooms_per_person\"] = (\n",
+ " california_housing_dataframe[\"total_rooms\"] /\n",
+ " california_housing_dataframe[\"population\"])\n",
+ " return processed_features\n",
+ "\n",
+ "def preprocess_targets(california_housing_dataframe):\n",
+ " \"\"\"Prepares target features (i.e., labels) from California housing data set.\n",
+ "\n",
+ " Args:\n",
+ " california_housing_dataframe: A Pandas DataFrame expected to contain data\n",
+ " from the California housing data set.\n",
+ " Returns:\n",
+ " A DataFrame that contains the target feature.\n",
+ " \"\"\"\n",
+ " output_targets = pd.DataFrame()\n",
+ " # Create a boolean categorical feature representing whether the\n",
+ " # median_house_value is above a set threshold.\n",
+ " output_targets[\"median_house_value_is_high\"] = (\n",
+ " california_housing_dataframe[\"median_house_value\"] > 265000).astype(float)\n",
+ " return output_targets"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "pAG3tmgwIjnY",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 1209
+ },
+ "outputId": "b2b92073-a84d-44c0-adf0-0229a914815c"
+ },
+ "cell_type": "code",
+ "source": [
+ "# Choose the first 12000 (out of 17000) examples for training.\n",
+ "training_examples = preprocess_features(california_housing_dataframe.head(12000))\n",
+ "training_targets = preprocess_targets(california_housing_dataframe.head(12000))\n",
+ "\n",
+ "# Choose the last 5000 (out of 17000) examples for validation.\n",
+ "validation_examples = preprocess_features(california_housing_dataframe.tail(5000))\n",
+ "validation_targets = preprocess_targets(california_housing_dataframe.tail(5000))\n",
+ "\n",
+ "# Double-check that we've done the right thing.\n",
+ "print(\"Training examples summary:\")\n",
+ "display.display(training_examples.describe())\n",
+ "print(\"Validation examples summary:\")\n",
+ "display.display(validation_examples.describe())\n",
+ "\n",
+ "print(\"Training targets summary:\")\n",
+ "display.display(training_targets.describe())\n",
+ "print(\"Validation targets summary:\")\n",
+ "display.display(validation_targets.describe())"
+ ],
+ "execution_count": 3,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "Training examples summary:\n"
+ ],
+ "name": "stdout"
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ " latitude longitude housing_median_age total_rooms total_bedrooms \\\n",
+ "count 12000.0 12000.0 12000.0 12000.0 12000.0 \n",
+ "mean 35.6 -119.6 28.6 2654.1 542.0 \n",
+ "std 2.1 2.0 12.6 2246.4 433.1 \n",
+ "min 32.5 -124.3 1.0 2.0 1.0 \n",
+ "25% 33.9 -121.8 18.0 1447.0 295.0 \n",
+ "50% 34.2 -118.5 29.0 2124.5 433.5 \n",
+ "75% 37.7 -118.0 37.0 3144.0 649.0 \n",
+ "max 42.0 -114.5 52.0 37937.0 6445.0 \n",
+ "\n",
+ " population households median_income rooms_per_person \n",
+ "count 12000.0 12000.0 12000.0 12000.0 \n",
+ "mean 1436.1 504.0 3.9 2.0 \n",
+ "std 1157.2 394.7 1.9 1.1 \n",
+ "min 3.0 1.0 0.5 0.0 \n",
+ "25% 790.0 280.0 2.6 1.5 \n",
+ "50% 1166.0 410.0 3.5 1.9 \n",
+ "75% 1727.0 607.0 4.7 2.3 \n",
+ "max 28566.0 6082.0 15.0 52.0 "
+ ],
+ "text/html": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ }
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "RWq0xecNKNeG",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "## Building a Neural Network\n",
+ "\n",
+ "The NN is defined by the [DNNRegressor](https://www.tensorflow.org/api_docs/python/tf/estimator/DNNRegressor) class.\n",
+ "\n",
+ "Use **`hidden_units`** to define the structure of the NN. The `hidden_units` argument provides a list of ints, where each int corresponds to a hidden layer and indicates the number of nodes in it. For example, consider the following assignment:\n",
+ "\n",
+ "`hidden_units=[3,10]`\n",
+ "\n",
+ "The preceding assignment specifies a neural net with two hidden layers:\n",
+ "\n",
+ "* The first hidden layer contains 3 nodes.\n",
+ "* The second hidden layer contains 10 nodes.\n",
+ "\n",
+ "If we wanted to add more layers, we'd add more ints to the list. For example, `hidden_units=[10,20,30,40]` would create four layers with ten, twenty, thirty, and forty units, respectively.\n",
+ "\n",
+ "By default, all hidden layers will use ReLu activation and will be fully connected."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "ni0S6zHcTb04",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "def construct_feature_columns(input_features):\n",
+ " \"\"\"Construct the TensorFlow Feature Columns.\n",
+ "\n",
+ " Args:\n",
+ " input_features: The names of the numerical input features to use.\n",
+ " Returns:\n",
+ " A set of feature columns\n",
+ " \"\"\" \n",
+ " return set([tf.feature_column.numeric_column(my_feature)\n",
+ " for my_feature in input_features])"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "zvCqgNdzpaFg",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "def my_input_fn(features, targets, batch_size=1, shuffle=True, num_epochs=None):\n",
+ " \"\"\"Trains a neural net regression model.\n",
+ " \n",
+ " Args:\n",
+ " features: pandas DataFrame of features\n",
+ " targets: pandas DataFrame of targets\n",
+ " batch_size: Size of batches to be passed to the model\n",
+ " shuffle: True or False. Whether to shuffle the data.\n",
+ " num_epochs: Number of epochs for which data should be repeated. None = repeat indefinitely\n",
+ " Returns:\n",
+ " Tuple of (features, labels) for next data batch\n",
+ " \"\"\"\n",
+ " \n",
+ " # Convert pandas data into a dict of np arrays.\n",
+ " features = {key:np.array(value) for key,value in dict(features).items()} \n",
+ " \n",
+ " # Construct a dataset, and configure batching/repeating.\n",
+ " ds = Dataset.from_tensor_slices((features,targets)) # warning: 2GB limit\n",
+ " ds = ds.batch(batch_size).repeat(num_epochs)\n",
+ " \n",
+ " # Shuffle the data, if specified.\n",
+ " if shuffle:\n",
+ " ds = ds.shuffle(10000)\n",
+ " \n",
+ " # Return the next batch of data.\n",
+ " features, labels = ds.make_one_shot_iterator().get_next()\n",
+ " return features, labels"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "U52Ychv9KNeH",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "def train_nn_regression_model(\n",
+ " learning_rate,\n",
+ " steps,\n",
+ " batch_size,\n",
+ " hidden_units,\n",
+ " training_examples,\n",
+ " training_targets,\n",
+ " validation_examples,\n",
+ " validation_targets):\n",
+ " \"\"\"Trains a neural network regression model.\n",
+ " \n",
+ " In addition to training, this function also prints training progress information,\n",
+ " as well as a plot of the training and validation loss over time.\n",
+ " \n",
+ " Args:\n",
+ " learning_rate: A `float`, the learning rate.\n",
+ " steps: A non-zero `int`, the total number of training steps. A training step\n",
+ " consists of a forward and backward pass using a single batch.\n",
+ " batch_size: A non-zero `int`, the batch size.\n",
+ " hidden_units: A `list` of int values, specifying the number of neurons in each layer.\n",
+ " training_examples: A `DataFrame` containing one or more columns from\n",
+ " `california_housing_dataframe` to use as input features for training.\n",
+ " training_targets: A `DataFrame` containing exactly one column from\n",
+ " `california_housing_dataframe` to use as target for training.\n",
+ " validation_examples: A `DataFrame` containing one or more columns from\n",
+ " `california_housing_dataframe` to use as input features for validation.\n",
+ " validation_targets: A `DataFrame` containing exactly one column from\n",
+ " `california_housing_dataframe` to use as target for validation.\n",
+ " \n",
+ " Returns:\n",
+ " A `DNNRegressor` object trained on the training data.\n",
+ " \"\"\"\n",
+ "\n",
+ " periods = 10\n",
+ " steps_per_period = steps / periods\n",
+ " \n",
+ " # Create a DNNRegressor object.\n",
+ " my_optimizer = tf.train.GradientDescentOptimizer(learning_rate=learning_rate)\n",
+ " my_optimizer = tf.contrib.estimator.clip_gradients_by_norm(my_optimizer, 5.0)\n",
+ " dnn_regressor = tf.estimator.DNNRegressor(\n",
+ " feature_columns=construct_feature_columns(training_examples),\n",
+ " hidden_units=hidden_units,\n",
+ " optimizer=my_optimizer,\n",
+ " )\n",
+ " \n",
+ " # Create input functions.\n",
+ " training_input_fn = lambda: my_input_fn(training_examples, \n",
+ " training_targets[\"median_house_value\"], \n",
+ " batch_size=batch_size)\n",
+ " predict_training_input_fn = lambda: my_input_fn(training_examples, \n",
+ " training_targets[\"median_house_value\"], \n",
+ " num_epochs=1, \n",
+ " shuffle=False)\n",
+ " predict_validation_input_fn = lambda: my_input_fn(validation_examples, \n",
+ " validation_targets[\"median_house_value\"], \n",
+ " num_epochs=1, \n",
+ " shuffle=False)\n",
+ "\n",
+ " # Train the model, but do so inside a loop so that we can periodically assess\n",
+ " # loss metrics.\n",
+ " print(\"Training model...\")\n",
+ " print(\"RMSE (on training data):\")\n",
+ " training_rmse = []\n",
+ " validation_rmse = []\n",
+ " for period in range (0, periods):\n",
+ " # Train the model, starting from the prior state.\n",
+ " dnn_regressor.train(\n",
+ " input_fn=training_input_fn,\n",
+ " steps=steps_per_period\n",
+ " )\n",
+ " # Take a break and compute predictions.\n",
+ " training_predictions = dnn_regressor.predict(input_fn=predict_training_input_fn)\n",
+ " training_predictions = np.array([item['predictions'][0] for item in training_predictions])\n",
+ " \n",
+ " validation_predictions = dnn_regressor.predict(input_fn=predict_validation_input_fn)\n",
+ " validation_predictions = np.array([item['predictions'][0] for item in validation_predictions])\n",
+ " \n",
+ " # Compute training and validation loss.\n",
+ " training_root_mean_squared_error = math.sqrt(\n",
+ " metrics.mean_squared_error(training_predictions, training_targets))\n",
+ " validation_root_mean_squared_error = math.sqrt(\n",
+ " metrics.mean_squared_error(validation_predictions, validation_targets))\n",
+ " # Occasionally print the current loss.\n",
+ " print(\" period %02d : %0.2f\" % (period, training_root_mean_squared_error))\n",
+ " # Add the loss metrics from this period to our list.\n",
+ " training_rmse.append(training_root_mean_squared_error)\n",
+ " validation_rmse.append(validation_root_mean_squared_error)\n",
+ " print(\"Model training finished.\")\n",
+ "\n",
+ " # Output a graph of loss metrics over periods.\n",
+ " plt.ylabel(\"RMSE\")\n",
+ " plt.xlabel(\"Periods\")\n",
+ " plt.title(\"Root Mean Squared Error vs. Periods\")\n",
+ " plt.tight_layout()\n",
+ " plt.plot(training_rmse, label=\"training\")\n",
+ " plt.plot(validation_rmse, label=\"validation\")\n",
+ " plt.legend()\n",
+ "\n",
+ " print(\"Final RMSE (on training data): %0.2f\" % training_root_mean_squared_error)\n",
+ " print(\"Final RMSE (on validation data): %0.2f\" % validation_root_mean_squared_error)\n",
+ "\n",
+ " return dnn_regressor"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "id": "2QhdcCy-Y8QR",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "## Task 1: Train a NN Model\n",
+ "\n",
+ "**Adjust hyperparameters, aiming to drop RMSE below 110.**\n",
+ "\n",
+ "Run the following block to train a NN model. \n",
+ "\n",
+ "Recall that in the linear regression exercise with many features, an RMSE of 110 or so was pretty good. We'll aim to beat that.\n",
+ "\n",
+ "Your task here is to modify various learning settings to improve accuracy on validation data.\n",
+ "\n",
+ "Overfitting is a real potential hazard for NNs. You can look at the gap between loss on training data and loss on validation data to help judge if your model is starting to overfit. If the gap starts to grow, that is usually a sure sign of overfitting.\n",
+ "\n",
+ "Because of the number of different possible settings, it's strongly recommended that you take notes on each trial to help guide your development process.\n",
+ "\n",
+ "Also, when you get a good setting, try running it multiple times and see how repeatable your result is. NN weights are typically initialized to small random values, so you should see differences from run to run.\n"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "rXmtSW1yKNeK",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 671
+ },
+ "outputId": "eda1ac91-75fa-49f2-f572-8735086a8020"
+ },
+ "cell_type": "code",
+ "source": [
+ "dnn_regressor = train_nn_regression_model(\n",
+ " learning_rate=0.008,\n",
+ " steps=500,\n",
+ " batch_size=10,\n",
+ " hidden_units=[10, 2],\n",
+ " training_examples=training_examples,\n",
+ " training_targets=training_targets,\n",
+ " validation_examples=validation_examples,\n",
+ " validation_targets=validation_targets)"
+ ],
+ "execution_count": 10,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "Training model...\n",
+ "RMSE (on training data):\n",
+ " period 00 : 187.06\n",
+ " period 01 : 162.55\n",
+ " period 02 : 158.74\n",
+ " period 03 : 159.71\n",
+ " period 04 : 164.83\n",
+ " period 05 : 147.35\n",
+ " period 06 : 148.93\n",
+ " period 07 : 176.86\n",
+ " period 08 : 136.24\n",
+ " period 09 : 131.05\n",
+ "Model training finished.\n",
+ "Final RMSE (on training data): 131.05\n",
+ "Final RMSE (on validation data): 135.63\n"
+ ],
+ "name": "stdout"
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjAAAAGACAYAAACz01iHAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzs3Xl4VPXZ8PHvLNn3fSUJeyAhECCQ\nDUgCQhBwA6lWUmutvq21WvWptk/V2lK3ttqKinVpa8XH1qq4ICCKJIEQCIQESCAQtuz7HrLPzHn/\nCBkJhBAgyUzC/bmuXnXOmXPOPXOGzD2/7VYpiqIghBBCCDGCqE0dgBBCCCHElZIERgghhBAjjiQw\nQgghhBhxJIERQgghxIgjCYwQQgghRhxJYIQQQggx4mhNHYAQ5mzy5MkEBASg0WgA0Ov1RERE8OST\nT2Jra3vV5/3vf//L6tWrL9q+ceNGfv3rX/O3v/2N+Ph44/b29naio6NZvHgxL7zwwlVfd6CKiop4\n7rnnOHPmDAA2NjY8+OCDLFq0aMivfSXWr19PUVHRRe9JRkYG9957L/7+/hcd89VXXw1XeNekpKSE\nhQsXMnbsWAAURcHd3Z3f/OY3TJ069YrO9dJLL+Hr68udd9454GM+//xzPv74YzZs2HBF1xJiuEgC\nI8RlbNiwAW9vbwA6Ozt55JFHePPNN3nkkUeu6nzV1dW88847fSYwAD4+Pnz55Ze9Epjk5GQcHR2v\n6npX43/+53+4+eab+dvf/gbAoUOHuPvuu9m6dSs+Pj7DFse18PHxGTHJyqVoNJper2HLli387Gc/\nY9u2bVhaWg74PI899thQhCeESUkXkhBXwNLSknnz5pGXlwdAR0cHTz/9NEuWLGHp0qW88MIL6PV6\nAI4dO8Ydd9xBYmIiN998M7t27QLgjjvuoKysjMTERDo7Oy+6xsyZM8nIyKCtrc24bcuWLcTExBgf\nd3Z28oc//IElS5aQkJBgTDQAsrOzue2220hMTOTGG28kPT0d6P5FHxsby3vvvceKFSuYN28eW7Zs\n6fN15ufnM336dOPj6dOns23bNmMi99prr7FgwQJuueUW3nrrLRISEgD41a9+xfr1643Hnf/4cnE9\n99xzrFmzBoADBw6wcuVKbrjhBlavXk1xcTHQ3RL1i1/8gvj4eNasWUNFRcVl7ljfNm7cyIMPPsjd\nd9/NH//4RzIyMrjjjjt4+OGHjV/2W7duZfny5SQmJvKDH/yAoqIiAF599VWefPJJVq1axbvvvtvr\nvA8//DD/+Mc/jI/z8vKIjY3FYDDwl7/8hSVLlrBkyRJ+8IMfUFlZecVx33jjjbS3t3P69GkAPvzw\nQxITE0lISODRRx+lvb0d6H7fn3/+eVasWMHWrVt73YdLfS4NBgO///3viYuLY9WqVRw7dsx43X37\n9nHrrbdy4403snTpUrZu3XrFsQsx6BQhxCVNmjRJKS8vNz5uaGhQ7rrrLmX9+vWKoijKm2++qdx3\n331KV1eX0tbWpqxcuVL57LPPFL1eryxdulTZtGmToiiKcvjwYSUiIkJpbm5W9u7dqyxatKjP633y\nySfKE088ofzP//yP8djm5mZl4cKFykcffaQ88cQTiqIoymuvvabcfffdSkdHh9LS0qLccsstyo4d\nOxRFUZTly5crX375paIoivLpp58ar1VcXKxMnTpV2bBhg6IoirJlyxblhhtu6DOOn//850p8fLzy\nr3/9Szl58mSvfcePH1dmz56tVFVVKV1dXcpPf/pTJT4+XlEURXniiSeU119/3fjc8x/3F1dISIiy\nceNG4+uNiIhQ0tLSFEVRlE2bNim33nqroiiK8v777yt33XWX0tXVpdTV1Snx8fHG9+R8/b3HPe/z\njBkzlDNnzhifP23aNCU9PV1RFEUpLS1VZs2apRQUFCiKoih///vflbvvvltRFEVZt26dEhsbq9TW\n1l503s2bNyt33XWX8fErr7yirF27VsnPz1cWL16sdHZ2KoqiKO+9957y6aefXjK+nvdlypQpF22P\niIhQTp06pezfv1+JiopSKioqFEVRlKeeekp54YUXFEXpft9XrFihtLe3Gx+//vrr/X4uU1JSlMWL\nFytnz55V2tralFWrVilr1qxRFEVRbrvtNiUjI0NRFEU5c+aM8uijj/YbuxDDQVpghLiMpKQkEhMT\nWbhwIQsXLiQyMpL77rsPgJSUFFavXo1Wq8Xa2poVK1awe/duSkpKqKmpYdmyZQBMmzYNX19fcnJy\nBnTNZcuW8eWXXwKwfft24uPjUau/++eanJzM97//fSwtLbG1teXmm2/m66+/BuCzzz5j6dKlAMya\nNcvYegGg0+m47bbbAAgJCaGsrKzP6//pT3/irrvuYtOmTSxfvpyEhAT+/e9/A92tIxEREXh4eKDV\n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\n/j8ZOfHywY2d3AAAAABJRU5ErkJggg==\n",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ }
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "O2q5RRCKqYaU",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "### Solution\n",
+ "\n",
+ "Click below to see a possible solution"
+ ]
+ },
+ {
+ "metadata": {
+ "id": "j2Yd5VfrqcC3",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "**NOTE:** This selection of parameters is somewhat arbitrary. Here we've tried combinations that are increasingly complex, combined with training for longer, until the error falls below our objective (training is nondeterministic, so results may fluctuate a bit each time you run the solution). This may not be the best combination; others may attain an even lower RMSE. If your aim is to find the model that can attain the best error, then you'll want to use a more rigorous process, like a parameter search."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "IjkpSqmxqnSM",
+ "colab_type": "code",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 671
+ },
+ "outputId": "b74e840e-819f-4df4-bf1b-e2c890f58619"
+ },
+ "cell_type": "code",
+ "source": [
+ "dnn_regressor = train_nn_regression_model(\n",
+ " learning_rate=0.001,\n",
+ " steps=2000,\n",
+ " batch_size=100,\n",
+ " hidden_units=[10, 10],\n",
+ " training_examples=training_examples,\n",
+ " training_targets=training_targets,\n",
+ " validation_examples=validation_examples,\n",
+ " validation_targets=validation_targets)"
+ ],
+ "execution_count": 11,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "Training model...\n",
+ "RMSE (on training data):\n",
+ " period 00 : 162.33\n",
+ " period 01 : 159.35\n",
+ " period 02 : 156.65\n",
+ " period 03 : 152.98\n",
+ " period 04 : 148.63\n",
+ " period 05 : 144.46\n",
+ " period 06 : 138.59\n",
+ " period 07 : 131.69\n",
+ " period 08 : 119.71\n",
+ " period 09 : 119.24\n",
+ "Model training finished.\n",
+ "Final RMSE (on training data): 119.24\n",
+ "Final RMSE (on validation data): 120.68\n"
+ ],
+ "name": "stdout"
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjAAAAGACAYAAACz01iHAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzs3Xd4FWX6//H3Kem9Jychjd5CCgmE\n0EINTSyIirDoWnZt68+yq+7qqouNtezacMW173dtiAVpgvQWCIEAIaGENNJ7r+fM7w/WKCXhHEjC\nhNyv6/K6OGVmnsnnGXNn5pl5NIqiKAghhBBC9CDaK90AIYQQQghLSQEjhBBCiB5HChghhBBC9DhS\nwAghhBCix5ECRgghhBA9jhQwQgghhOhx9Fe6AUKo2cCBAwkMDESn0wFgNBqJjo7mySefxN7e/pLX\n++WXXzJ//vzz3l+5ciVPPPEE//rXv4iPj297v7GxkTFjxjBt2jReeumlS96uuXJycnjhhRfIzMwE\nwM7Ojvvvv58pU6Z0+bYtsWzZMnJycs77mSQmJnLHHXcQEBBw3jLr1q3rruZdltOnTzN58mRCQkIA\nUBQFT09P/vKXvzBkyBCL1vXqq69iMBi45ZZbzF7mu+++Y8WKFXz66acWbUuI7iIFjBAX8emnn+Lr\n6wtAc3MzDz30EO+++y4PPfTQJa2vpKSEf//73xcsYAD8/Pz44YcfzipgNm/ejLOz8yVt71I8+uij\nzJ07l3/9618ApKSksHjxYtauXYufn1+3teNy+Pn59ZhipT06ne6sfVizZg333Xcf69evx9ra2uz1\nPPLII13RPCGuKLmEJIQFrK2tGTduHGlpaQA0NTXx17/+lenTpzNjxgxeeukljEYjAOnp6dx8880k\nJCQwd+5ctm/fDsDNN99Mfn4+CQkJNDc3n7eNyMhIEhMTaWhoaHtvzZo1xMXFtb1ubm7mueeeY/r0\n6UyaNKmt0AA4cOAA119/PQkJCcycOZNdu3YBZ/6iHzt2LJ988glz5sxh3LhxrFmz5oL7efz4cUaM\nGNH2esSIEaxfv76tkHvrrbeYMGEC1157LcuXL2fSpEkAPP744yxbtqxtuV+/vli7XnjhBRYuXAjA\n/v37ueGGG5g6dSrz588nNzcXOHMm6v/9v/9HfHw8CxcupLCw8CKJXdjKlSu5//77Wbx4MX//+99J\nTEzk5ptv5sEHH2z7Zb927Vpmz55NQkICv/nNb8jJyQHgzTff5Mknn2TevHl89NFHZ633wQcf5IMP\nPmh7nZaWxtixYzGZTPzjH/9g+vTpTJ8+nd/85jcUFRVZ3O6ZM2fS2NjIqVOnAPjiiy9ISEhg0qRJ\nPPzwwzQ2NgJnfu4vvvgic+bMYe3atWfl0F6/NJlM/O1vf2PixInMmzeP9PT0tu3u3buX6667jpkz\nZzJjxgzWrl1rcduF6HSKEKJdAwYMUAoKCtpeV1ZWKrfeequybNkyRVEU5d1331XuuusupaWlRWlo\naFBuuOEG5dtvv1WMRqMyY8YMZdWqVYqiKMqhQ4eU6OhopaamRtmzZ48yZcqUC27v66+/Vh577DHl\n0UcfbVu2pqZGmTx5svLVV18pjz32mKIoivLWW28pixcvVpqampS6ujrl2muvVTZt2qQoiqLMnj1b\n+eGHHxRFUZRvvvmmbVu5ubnKkCFDlE8//VRRFEVZs2aNMnXq1Au244EHHlDi4+OVjz/+WDl58uRZ\nnx07dkwZOXKkUlxcrLS0tCj33HOPEh8fryiKojz22GPK22+/3fbdX7/uqF1Dhw5VVq5c2ba/0dHR\nyo4dOxRFUZRVq1Yp1113naIoivKf//xHufXWW5WWlhalvLxciY+Pb/uZ/FpHP+Off87h4eFKZmZm\n2/eHDx+u7Nq1S1EURcnLy1OioqKUrKwsRVEU5f3331cWL16sKIqivPHGG8rYsWOVsrKy89a7evVq\n5dZbb217/frrrytLlixRjh8/rkybNk1pbm5WFEVRPvnkE+Wbb75pt30//1wGDx583vvR0dFKRkaG\nsm/fPiU2NlYpLCxUFEVRnnrqKeWll15SFOXMz33OnDlKY2Nj2+u33367w365ZcsWZdq0aUptba3S\n0NCgzJs3T1m4cKGiKIpy/fXXK4mJiYqiKEpmZqby8MMPd9h2IbqDnIER4iIWLVpEQkICkydPZvLk\nyYwePZq77roLgC1btjB//nz0ej22trbMmTOHnTt3cvr0aUpLS5k1axYAw4cPx2AwcPjwYbO2OWvW\nLH744QcANm7cSHx8PFrtL4fr5s2bWbBgAdbW1tjb2zN37lx+/PFHAL799ltmzJgBQFRUVNvZC4DW\n1lauv/56AIYOHUp+fv4Ft//yyy9z6623smrVKmbPns2kSZP47LPPgDNnR6Kjo/Hy8kKv1zN79myz\n9qmjdrW0tDB16tS29fv4+LSdcZo9ezY5OTnk5+eTlJTE1KlT0ev1uLm5nXWZ7VwFBQUkJCSc9d+v\nx8oEBwcTHBzc9trW1pbY2FgAdu7cyahRowgKCgLgxhtvJDExkdbWVuDMGSl3d/fztjlx4kSOHj1K\nZWUlABs2bCAhIQFnZ2fKy8tZtWoVVVVVLFq0iGuvvdasn9vPFEXhiy++wMfHh+DgYDZt2sTMmTPx\n8fEB4JZbbmnrAwCxsbHY2NictY6O+uW+ffuYMGECDg4O2NratmUF4OHhwbfffktGRgbBwcG8+uqr\nFrVdiK4gY2CEuIifx8CUl5e3Xf7Q688cOuXl5bi4uLR918XFhbKyMsrLy3FyckKj0bR99vMvMU9P\nz4tuMy4ujieffJLKykpWr17Nvffe2zagFqCmpoYXX3yR1157DThzSSksLAyAVatW8cknn1BXV4fJ\nZEL51XRnOp2ubfCxVqvFZDJdcPs2Njbccccd3HHHHVRXV7Nu3TpeeOEFAgICqKqqOms8joeHx0X3\nx5x2OTo6AlBdXU1ubi4JCQltn1tbW1NeXk5VVRVOTk5t7zs7O1NXV3fB7V1sDMyvczv3dUVFxVn7\n6OTkhKIoVFRUXHDZn9nb2zNmzBi2bNlCVFQU1dXVREVFodFoePPNN/nggw9YsmQJ0dHRPPvssxcd\nT2Q0Gtt+Doqi0K9fP5YtW4ZWq6WmpoYNGzawY8eOts9bWlra3T+gw35ZVVWFt7f3We//7IUXXuCd\nd97h9ttvx9bWlocffvisfIS4EqSAEcJM7u7uLFq0iJdffpl33nkHAE9Pz7a/tgEqKyvx9PTEw8OD\nqqoqFEVp+2VRWVlp9i97Kysr4uPj+fbbb8nOziYiIuKsAsbb25vf/va3552BKCoq4sknn+Srr75i\n8ODBZGVlMX36dIv2s7y8nLS0tLYzIM7OzsyfP5/t27dz/PhxnJycqKmpOev7Pzu3KKqqqrK4Xd7e\n3oSGhrJy5crzPnN2dm53253Jw8ODAwcOtL2uqqpCq9Xi5uZ20WWnT5/Ohg0bqKioYPr06W35jx49\nmtGjR1NfX8/SpUt55ZVXLnom49xBvL/m7e3Nddddx2OPPWbRfrXXLzv62Xp6evLUU0/x1FNPsWPH\nDh544AHGjRuHg4OD2dsWorPJJSQhLHD77bdz4MAB9u7dC5y5ZLBixQqMRiP19fV89913TJgwgYCA\nAHx9fdsGySYnJ1NaWkpYWBh6vZ76+vq2yxHtmTVrFu+9994Fb12ePHkyX331FUajEUVRWLZsGdu2\nbaO8vBx7e3tCQ0NpbW3liy++AGj3LMWFNDY28oc//KFtcCdAdnY2KSkpjBw5koiICJKSkigvL6e1\ntZVvv/227XteXl5tgz9zc3NJTk4GsKhdI0aMoKSkhJSUlLb1/PGPf0RRFMLDw9m0aRNGo5Hy8nK2\nbdtm9n5ZIi4ujqSkpLbLXJ9//jlxcXFtZ946Eh8fz4EDB9i4cWPbZZgdO3bw7LPPYjKZsLe3Z9Cg\nQWedBbkUkyZN4scff2wrNDZu3Mjy5cs7XKajfhkREcGOHTtoaGigoaGhrXBqaWlh0aJFFBcXA2cu\nPer1+rMuaQpxJcgZGCEs4OjoyN13383SpUtZsWIFixYtIjc3l1mzZqHRaEhISGDGjBloNBpee+01\nnn76ad566y3s7Ox4/fXXsbe3Z+DAgbi4uBAXF8c333yDwWC44LZiYmLQaDTMnDnzvM8WLFjA6dOn\nmTVrFoqiMGzYMBYvXoy9vT3jx49n+vTpeHh48Pjjj5OcnMyiRYt44403zNpHg8HAO++8wxtvvMFz\nzz2Hoig4OjryxBNPtN2ZdNNNN3Hdddfh5ubGtGnTOHHiBADz58/n/vvvZ9q0aQwZMqTtLMugQYPM\nbpetrS1vvPEGS5Ysoa6uDisrKx588EE0Gg3z588nKSmJKVOmYDAYmDJlyllnDX7t5zEw5/r73/9+\n0Z+Br68vzz33HPfeey8tLS0EBASwZMkSs35+jo6ODB06lGPHjhEeHg5AdHQ0q1evZvr06VhbW+Pu\n7s4LL7wAwJ/+9Ke2O4ksMXToUH7/+9+zaNEiTCYTHh4ePPvssx0u01G/jI+PZ8uWLSQkJODp6cmE\nCRNISkrCysqKefPmcdtttwFnzrI9+eST2NnZWdReITqbRvn1hWghhLBQUlISf/rTn9i0adOVbooQ\noheRc4BCCCGE6HGkgBFCCCFEjyOXkIQQQgjR48gZGCGEEEL0OFLACCGEEKLH6ZG3UZeUXPi2yc7g\n5mZPRUV9l61fXDrJRp0kF/WSbNRLsjGPl5dTu5/JGZhz6PW6K90E0Q7JRp0kF/WSbNRLsrl8UsAI\nIYQQoseRAkYIIYQQPY4UMEIIIYTocaSAEUIIIUSPIwWMEEIIIXocKWCEEEII0eNIASOEEEKIHkcK\nGCGEEOIqs2XLT2Z97/XXXyU/P6/dzx9//OHOalKnkwJGCCGEuIoUFOSzceN6s7774IOPYDD4t/v5\nSy+91lnN6nQ9cioBIYQQQlzYa68tJS0tlXHjopk2bQYFBfn885/LePHFv1FSUkxDQwO//e3dxMWN\n4/777+bhh//E5s0/UVdXS05ONnl5p/nDHx4hNjaOWbMms3r1T9x//91ER48iOTmJyspKli79B56e\nnvztb09RWFjA8OFhbNq0kW++WdNt+ykFjBBCCNFFvtx0kn3pxee9r9NpMBqVS1pn9CBv5k/q1+7n\nt9yyiJUrvyQkpC85OVksW/ZvKirKiYkZzYwZs8nLO81TTz1OXNy4s5YrLi7ilVfeYM+eXXz33dfE\nxsad9bmDgwOvv/4O77zzJtu2bcJgCKC5uYnlyz9i587tfPnlZ5e0P5dKCphfKWsoJ/N0Bv76Pljr\nrK90c4QQQojLMnjwUACcnJxJS0vl++9XotFoqa6uOu+7YWHhAHh7e1NbW3ve5yNGRLR9XlVVRXZ2\nJsOHjwAgNjYOna5753eSAuZX1mb9xO6CfdjqbBnpM4JYQzRBTn3QaDRXumlCCCF6oPmT+l3wbImX\nlxMlJTVdvn0rKysANmxYR3V1NW+//W+qq6u5885F53331wWIopx/dujczxVFQas9855Go+n235VS\nwPyKvngImuJKTF557MhPZEd+IgYHX2L9RhLtG4mTteOVbqIQQgjRIa1Wi9FoPOu9yspK/PwMaLVa\ntm7dREtLy2Vvx98/oO1up71795y3za4mdyH9ykCDN7blQ6naN46mY1HY1AdQUFfM1yd/4C87n+e9\nw59wpDQNo6l7QxJCCCHMFRQUwrFj6dTV/XIZaOLESezatZ0HH7wHOzs7vL29+fDD9y5rO2PGjKOu\nro577rmDlJQDODu7XG7TLaJRLnSeSOW68rSbu7sDmxKz2ZaST0pGKYquGRvvQhwM+TRoKwFwsXZm\ntN9IRvuNxNves8vaIs7WXadchWUkF/WSbNTrasimurqK5OQkJk6cTElJMQ8+eA///e/XnboNLy+n\ndj+TS0jn0Om0hPf3JLy/JxU1Tew4lM+2FGfKkvqgcajGpU8hdc55rM/exPrsTfRzDWGMXwzh3sOx\nkYG/Qgghegl7ewc2bdrIf//7KYpi4oEHuvehd3IG5hwXqopNisLRzHK2puRz8EQpRlqx9izGpU8R\ntbpCAGx1NkT5jCDWL4ZgZxn42xWuhr9YrkaSi3pJNuol2ZhHzsBcJq1Gw7BQD4aFelBV18yuwwVs\nS3GkaL8fGpt6XPoUgUceO/P3sjN/L74OPozxiyZGBv4KIYQQXULOwJzD3KpYURSO5VSyLSWfpGMl\ntBqN6F3L8AgpodYqFxMmtBotwz2HMMYvmsHuA9Bpu/ce+auN/MWiTpKLekk26iXZmEfOwHQBjUbD\noCA3BgW5saChhd1HCtmWkk/eAU/Q98UloAQbn3xSSo6QUnIEF2snRvmNJNZvJN72Xle6+UIIIUSP\nJmdgznE5VbGiKGTkV7PtYD5704tobjGic6jBu28p9XbZNCtNAPR1CSHWEE2kd5gM/LWA/MWiTpKL\nekk26iXZmKejMzDyHJhOpNFo6Ofvwm9nDea1+8ayaNpA/B0NFBwKpWrveKzyonDX+JNRlcl/0r7k\niR1/4//SVpBZlX3Bpx4KIYQQXWXevDnU19fz6acfceTIobM+q6+vZ968OR0u//ND7NasWcXWrZu7\nrJ3tkUtIXcTeVk98ZADxkQFkFZ45K7PnqDV5eV5orfviO6CCZqcsdhXsZVfBXnztvYk1nBn462zd\nfsUphBBCdKZFi26zeJmCgnw2blzPxImTmTmz40Knq0gB0w2CfZ0JTnBm/qR+7EsrZltKPhlH7AED\nTt5VuAeXUNKQxTcnV/NdxlqGewwm1hDNEPeBMvBXCCGERX7721t54YVX8fX1pbCwgCeeeAQvL28a\nGhpobGzkoYf+yJAhw9q+//zzzzBx4mTCwyP4y1/+RHNzc9vEjgA//riWFSu+QKfTEhzcl8ce+wuv\nvbaUtLRUPvzwPUwmE66urtxww00sW/Y6hw+n0Npq5IYb5pOQMIv777+b6OhRJCcnUVlZydKl/8DX\n1/ey91MKmG5ka61n3AgD40YYOF1cy7aUfHanWpG91xV0Qfj3r0JxzyGlNJWU0lScrZ0Y5RtFrN9I\nfBy8r3TzhRBCWGjlyR84UHz4vPd1Wg1G06UNHYjwHs71/Wa3+/n48fHs3LmNG26Yz/btWxk/Pp6+\nffszfvxE9u/fx//938c8//zL5y23fv1aQkP78oc/PMJPP/3Ixo3rAWhoaODVV9/EycmJ++67i4yM\nk9xyyyJWrvyS22+/i/fffxeAgweTOXUqg3fe+YCGhgYWL76Z8eMnAuDg4MDrr7/DO++8ybZtm5g/\nf8El7fuvdWkBc/z4ce69915uu+02Fi5cSEtLC48//jjZ2dk4ODjwxhtv4OLiwvfff8/HH3+MVqtl\n/vz53HjjjV3ZLFUI8HZkwdQBzJvYl/3HStiWks+xdGvACwe3Onz6lVFhPMWGnC1syNlCX5dgYv2i\nifAOw1Zvc6WbL4QQQqXGj4/nrbf+yQ03zGfHjq3cf/9DfP75p3z22ae0tLRga2t7weWysk4RHh4F\nQEREVNv7zs7OPPHEIwBkZ2dSVVV5weXT048SHh4JgJ2dHcHBoeTm5gIwYkQEAN7e3lRVVXXKfnZZ\nAVNfX8+SJUuIjY1te+/LL7/Ezc2NV199lS+++IKkpCRiY2N5++23WbFiBVZWVsybN4+pU6fi6ura\nVU1TFWsrHbHDfIkd5ktBWR3bUwrYeaSAU/scQOOPf99arH3yyKjKIqMqi69OfEeU9whiDdGEOAfJ\nE3+FEELFru83+4JnS7ryLqTQ0L6UlZVQVFRITU0N27dvwdPTm6eeWkJ6+lHeeuufF1xOUUCrPfM7\nxfS/s0MtLS289trf+eij/+Lh4cmf/vT/2t2uRqPh1/ejtLa2tK1Pp/tlOERn3bTSZXchWVtb8957\n7+Ht/culj82bN3PNNdcAcNNNNzF58mRSUlIYPnw4Tk5O2NraEhkZSXJyclc1S9X8PByYP6kfr94X\nxz3XDmNokCd5J13I3DkEjk4iwBiBjdaOXQX7eHX/MpYkvsqG7C1UNcmteEIIIX4RGzuW5cuXMW7c\nBKqqKvH3DwBg69bNtLa2XnCZwMAg0tPTAEhOTgKgvr4OnU6Hh4cnRUWFpKen0drailarxWg0nrX8\noEFDOXBg//+Wqycv7zQBAYFdtYtddwZGr9ej15+9+ry8PLZt28bLL7+Mp6cnTz/9NKWlpbi7u7d9\nx93dnZKSkq5qVo+g12mJHuRN9CBvSiob2H4on+2HCjix3xrwxhDcgGNAIQUNp/g2Yw3fn1rHMI/B\nxPqNZKjHIBn4K4QQvdyECfH8/ve/5aOPPqOxsYHnnnuazZs3csMN89m48UdWr/7+vGUSEmbx5z8/\nyoMP3kNYWDgajQYXF1eio0dx552/oV+//ixYsIg33niNN998l2PH0nnjjVdxcDgzZc6IEeEMHDiI\n++67i9bWVn7/+/uxs7Prsn3s8gfZvfnmm7i5ubFw4UISEhJ44IEHmDVrFsuWLaOmpoYhQ4Zw+PBh\n/vznPwPwj3/8A4PBwE033dTuOltbjej1veuXtNFoIimtiPWJ2exPK8KkgJ29kb7D6ql3yKSgLh8A\nF1tnJgSPIj5kDP7Olz/KWwghhFCjbr0LydPTk+joaADGjh3Lm2++ycSJEyktLW37TnFxMeHh4e2t\nAoCKivoua6Oan44Y6uPIPdcMpXxiX3YcLmB7SgFH9uqAMPwCBuMRXEp+63G+T9/A9+kbCHUJIsY3\nikjvMBys7K908y+bmrPpzSQX9ZJs1EuyMY9qnsQ7fvx4tm/fDkBqaiohISGMGDGCw4cPU11dTV1d\nHcnJyYwcObI7m9XjuDvbck1cCEt/H8vD80cQNcCL4nxrjuzwo3bfeIKbJhBoH0JmVQ6fH1vJEzuW\nsPzQxxwoPkyLseVKN18IIYS4bF12CenIkSMsXbqUvLw89Ho9Pj4+vPLKKzz//POUlJRgb2/P0qVL\n8fT0ZN26dbz//vtoNBoWLlzYNtC3PWqdC+lKqqprZufhAral5FNc0QCAjzcY+lVRYXWKooYiAOz0\ntkR4DSfaN5J+riFoNT1nNomems3VTnJRL8lGvSQb83R0BkYmczxHT+9UJkXhWE4l21Ly2X+smFbj\nmXiDQ8C1TwmFppNUNZ+5B9/VxoVonwiifSPwd/S7ks02S0/P5moluaiXZKNeko15Oipg5Em8Vxmt\nRsPgIDcGB7lR3ziApGMl7Ekt5FhmJVmZXuh1XoQOaMXWp4jcpuNtD8rzd/Qj2ieCkT7huNn2jmfw\nCCGE6LnkDMw5rtaquLy6kcSjRexOLeJ0SS0AdrYaQgc1glse2fUZGBUjGjT0dw0l2jeSCO9h2Om7\n7hY4S12t2fR0kot6STbqJdmYRy4hWaA3dKrTxbXsPlrIntQiKmqaAHB10RA4sIYG+2xO15959LNe\nq2e45xBifCIY4jEQvfbKnrDrDdn0RJKLekk26iXZmEcKGAv0pk5lUhRO5FayO7WQfeklNDSdeTqj\nrx/4hFRQrs+gtPHMLe4OensifMKI8Ykk1OXKTGHQm7LpSSQX9ZJs1EuyMY8UMBborZ2qpdXIoYwy\n9qQWkZJR+r/BvwrBIQrOASUUmk5Q03Lm0pOHrTvRvhFE+0Tg242zZPfWbNROclEvyUa9JBvzyCBe\ncVFWeh1RA72JGuhNXWML+/83+Dc9sxIyfdDrfAgd0IK1dwGnm0+yLusn1mX9RKCTP9G+kUR5h+Ni\n035HE0IIITqTnIE5h1TFZ/tl8G8hp0vqALCzg5CBDZhcT5PbkIlJMaFBwyD3/kT7RDDCaxi2eptO\nb4tko06Si3pJNuol2ZhHLiFZQDpV+3KLa9mTWsieo78a/OsKfQZUU2eXTUFDHgDWWivCvIYS4xvJ\nILf+nTa5pGSjTpKLekk26iXZmEcKGAtIp7q49gf/mvAOqaBMl0F5UzkAjlYORPmEE+MbQZBTn8sa\n/CvZqJPkol6SjXpJNuaRAsYC0qks097g36BQE87+xRQYT1LXeubSk7ed5/8G/0biZe9h8bYkG3WS\nXNRLslEvycY8UsBYQDrVpft58O/uI4Ucy60EQK9TCB3YgpVXPrlNGbSYzkwmGeIcSLRvJJHeYThZ\nO5q1fslGnSQX9ZJs1EuyMY8UMBaQTtU5yqoaSUwrYs85g3+DB9ZhdDnN6YYsFBS0Gi1D3AcQ7RtJ\nmOcQrHXW7a5TslEnyUW9JBv1kmzMI7dRi27n4WLLzNFBzBwddNbg37SDAANxdRtAQP8qam2yOVKW\nzpGydGx01oR7DSfGN5IBbn171EzZQgghupecgTmHVMVdx6QoHM+pZM/Rcwb/Gox4BZdTqs2gsvnM\npScXa6f/Df6NJMDRgEajkWxUSnJRL8lGvSQb88glJAtIp+oePw/+3Z1axKGzBv+24uhfRIExg4bW\nBgB8HXyI9olgxtBxKHVWV7bh4jxyzKiXZKNeko15pICxgHSq7lfX2EJSejF7Uot+GfyrNxEyoBm9\nZz6nm07RqrSiQcMQj4HEGWIY5jG4054vIy6PHDPqJdmol2RjHhkDI1TNwdaKCeH+TAj3bxv8uzu1\nkBNH64BQ7OxCCBpUi9Eth9SydFLL0nG2dmK030jiDDF42ll+S7YQQoieTc7AnEOqYvXILa5ld2oh\nib968m//flo8Qoo5XpfadolpoFs/4gwxhHkNw0orNXl3k2NGvSQb9ZJszCOXkCwgnUp9TIpCWlYF\nG/af5tDJUgD693FkUFgjmc2pZFRlAmee+jvKN4oxhphunSW7t5NjRr0kG/WSbMwjBYwFpFOpl5eX\nE7sO5LJqVxZHTp2ZqqCvvzNjo50o1R1nb2EytS1nnjnT1yWEOEMMEd5hWOtk4G9XkmNGvSQb9ZJs\nzCMFjAWkU6nXr7PJLKhm1c4sDv7vjEyQrxMzYwPQuBaxO38f6RUnALDT2xHjG0GcYRT+jn5XrO1X\nMzlm1EuyUS/JxjxSwFhAOpV6XSibnKIaftidzf70YhQgwMuB2WOCCQ7Usacwid0F+6huPrNMsHMg\ncYYYIr1HYKu3uQJ7cHWSY0a9JBv1kmzMIwWMBaRTqVdH2eSV1rFmdxZ7jhahKODrbs+s2CCiB3uS\nVnGMnfl7OVp2DAUFG501I31sHuBKAAAgAElEQVQiiDPEEOgUcFkzZAs5ZtRMslEvycY8UsBYQDqV\nepmTTVFFPat3Z7P7SCFGk4KXqy2zYoMZM8yXmpZqdhXsY3f+PiqazjxvJsDRQJwhhmjfCOz0dt2x\nG1cdOWbUS7JRL8nGPFLAWEA6lXpZkk1pZQNrE3PYfiifVqOCu7MNM0YFMX6EHzqdhrTy4+zM38vh\n0qOYFBNWWiuivEcQ5x9DiHOQnJWxgBwz6iXZqJdkYx4pYCwgnUq9LiWbipom1iXmsPVgHs2tJlwc\nrZkRE8iEcH9srHVUNdWQWJDEzvxEShvP3Nnk6+BDnCGGGN9IHK0cumJXripyzKiXZKNeko15pICx\ngHQq9bqcbKrqmvlxbw6bDuTR1GzEyd6KadF9mBQZgJ2NHpNi4nhFBrvy95JScoRWxYheqyfcaxhx\nhhj6u/aVszLtkGNGvSQb9ZJszCMFjAWkU6lXZ2RT29DChn25bNx/moamVhxs9UwZ2YcpIwNwsD3z\nvJja5joSC/ezM38vRfXFAHjbeTLGEMMovyicrds/oHojOWbUS7JRL8nGPFLAWEA6lXp1Zjb1jS38\nlJzHj3tzqGtsxc5Gx6TIAKZF98HJ3hoARVHIqMpiZ34iB4oP0WJqRavREuY5lDhDDIPc+6PVaDul\nPT2ZHDPqJdmol2RjHilgLCCdSr26IpvG5lY2H8hjfWIO1fUtWFtpiY/wJyEmEBfHX54VU99Sz96i\nA+zK30tebQEA7rZujPGLJtYQjauNS6e2qyeRY0a9JBv1kmzMIwWMBaRTqVdXZtPcYmRrSj7rEnOo\nqGlCr9MyYYSBGaMDcXe2bfueoihk1+SyM28vScUHaTY2o0HDMM9BjPGLYajHIHRaXZe0Ua3kmFEv\nyUa9JBvzSAFjAelU6tUd2bS0mth5uIDVu7Mpq25Ep9UwNsyPmaOD8HI9+zkxja2N7C9KYUd+Ijk1\npwFwsXYm1hDNGL9oPOzcu7StaiHHjHpJNuol2ZhHChgLSKdSr+7MptVoYndqIat3Z1Nc0YBWoyF2\nqA+zxgTj625/3vdza/LZlZ/IvqIDNLQ2okHDIPf+jDHEEOY5BL1W3y3tvhLkmFEvyUa9JBvzSAFj\nAelU6nUlsjGaTOxLK+aH3dnkl9ah0UD0IG9mjwkmwMvxvO83G5tJLj7Ezvy9nKrKAsDJypFRflGM\nMcTgY+/Vre3vDnLMqJdko16SjXmkgLGAdCr1upLZmBSF5GMlrNqVRW5xLQBRA7yYPSaYIN8LH2AF\ndUXsyt9LYuF+6lrqAejvGkqcYRThXsOw0ll1W/u7khwz6iXZqJdkYx4pYCwgnUq91JCNoiiknCxj\n1a5MMgvOtCWsrwdz4oLpa7jwnUgtplZSSo6wMy+R45UZADhaOTA9KJ5x/rE9vpBRQy7iwiQb9ZJs\nzCMFjAWkU6mXmrJRFIXUrHJW7czixOkqAIYGuzF7TDADA93aXa64vpRd+XvZnrebRmMTrjYuJARP\nZoxfdI+9e0lNuYizSTbqJdmYRwoYC0inUi+1ZnMsp4Lvd2aRll0BwIA+rsyJC2ZIkFu70w/UttSx\nMXsrW07vpMXUgqetOzNDphLtG9HjHo6n1lyEZKNmko15pICxgHQq9VJ7NifzqvhhVxaHMsoACDU4\nM2dMMGF9PdotZKqaqlmfvZmdeXtoVYz42nszK3Qa4V7Dekwho/ZcejPJRr0kG/NIAWMB6VTq1VOy\nySqsZtXOLA6cKAUg0MeROWOCiRjghbadQqasoYJ1WRvZU7gfk2Kij6OB2aHTGeoxSPWTSPaUXHoj\nyUa9JBvzSAFjAelU6tXTsjldXMsPu7PYl1aMAvh7OTA7NpjoQd5otRcuSorrS1iduYH9RSkoKIS6\nBDEndDoD3Pp1a9st0dNy6U0kG/WSbMwjBYwFpFOpV0/NpqCsjtW7s9mTWoRJUfBxt2fOmCBGD/Vt\n94xMXm0Bq0/9SEppKgAD3foxJ3Q6IS5B3dl0s/TUXHoDyUa9JBvzSAFjAelU6tXTsymuqGfNnmx2\nHi7EaFII9nViwdQB9PNvfyLI7OpcVp1aT1r5cQCGeQxmduh0+jgZuqvZF9XTc7maSTbqJdmYRwoY\nC0inUq+rJZvSqga+3nqKxKNFAIwe6sO8CX3PmjTyXCcqTrHq1HoyqjIBiPQOY1bINHwdvLulzR25\nWnK5Gkk26iXZmEcKGAtIp1Kvqy2b47mVfLbxBNlFNVhbaZk1OojpMYFYW134eTCKopBWfpxVp9aT\nU3MaDRpifCOZGTIVzys4ceTVlsvVRLJRL8nGPFLAWEA6lXpdjdmYFIWdhwr4etspquua8XC25aZJ\n/Yga6NXu3UeKonCoNJUfTv1Ifl0hOo2OMYYYEoIn4WrT/uWornI15nK1kGzUS7IxjxQwFpBOpV5X\nczYNTa38sCuLH/flYjQpDOzjyi1T+hPo0/7Ba1JM7C9KYXXmj5Q0lGGl1TPOP5ZpQfE4WZ8/0WRX\nuZpz6ekkG/WSbMwjBYwFpFOpV2/Ipqi8ni82neTgyVI0Ghg/wsB140NxtrdudxmjyUhi4X7WZG6k\noqkSG5018X3GMbnPeOyt7Lq8zb0hl55KslEvycY8UsBYQDqVevWmbI5klvH5TyfJL63DzkbP3Lhg\nJkUFoNe1/3TeFlMrO/MSWZf9EzXNtdjp7ZgSOIGJAXHY6m26rK29KZeeRrJRL8nGPFLAWEA6lXr1\ntmxajSa2HMjj2+2Z1De14utuz82T+xPW16PD5ZqNzWw9vYsN2Vuoa63HycqRacHxjDOM7pKZr3tb\nLj2JZKNeko15pICxgHQq9eqt2dTUN/Ptjky2HMhDUSCsrwc3TeqHn4dDh8s1tDawKWc7m3K3d+nM\n1701l55AslEvycY8UsBYQDqVevX2bE4X1/LZTydIy65Ap9UwOSqAa+KCsbft+KxKV8983dtzUTPJ\nRr0kG/NIAWMB6VTqJdmcuYX6wIlSvth0gpLKRhztrLh+Qijjwwztzq/0szMzX29iR14ixk6c+Vpy\nUS/JRr0kG/NIAWMB6VTqJdn8oqXVyI/7cvlhVzZNLUb6eDuyYEp/Bga6XXTZzp75WnJRL8lGvSQb\n80gBYwHpVOol2ZyvoqaJlVsz2HmkEICRg7yZP7Evnq4Xv326qL6ENZ0w87Xkol6SjXpJNuaRAsYC\n0qnUS7Jp36n8aj7beJyM/Gqs9FqmxwQya3QQNtYXH6x74ZmvEwhxCTRr25KLekk26iXZmEcKGAtI\np1IvyaZjJkUh8WgRX20+SWVtM25ONsyb2JfRQ3zMujR07szXwz0HMztkOgEXmflaclEvyUa9JBvz\nSAFjAelU6iXZmKexuZU1e3JYl5hDq9FEX39nFkwZQIifs1nLn5n5eh0ZVVnAxWe+llzUS7JRL8nG\nPFLAWEA6lXpJNpYpqWzgq80nSTpWAkDccF9umNAXV8eLP5X3l5mv15FTk4cGDaN8o5gZMgWPc2a+\nllzUS7JRL8nGPB0VMLpnnnnmma7a8PHjx7npppvQarWEhYXx+OOP8/rrr7N27Vq++eYb3N3dCQ4O\n5vvvv+fPf/4zK1asQKPRMHTo0A7XW1/f3FVNxsHBpkvXLy6dZGMZB1srogf7MLCPK9lFtaRmlrPl\nYD5ajYZgX2d0Hdx2rdFo8LL3JM4wCn8nA/l1haRXnGBb3m6qmmsIcDJgq7c9sx3JRbUkG/WSbMzj\n4ND+H1z6rtpofX09S5YsITY29qz3H374YeLj48/63ttvv82KFSuwsrJi3rx5TJ06FVdX165qmhC9\nyqAgN565PZptKfms3HaKFVsy2HYwn5sm9SO8v2eH42M0Gg3hXsMI8xzSNvP19rzd7CnYx3j/MUwN\nmogX7f+FJIQQXeXyH8PZDmtra9577z28vS983fxnKSkpDB8+HCcnJ2xtbYmMjCQ5ObmrmiVEr6TV\napgY4c9LvxvNtOg+lFU38ubKw7zy+UFOl9RefHmNlmjfCJ4a9SgLBt2Ao5UjP+Vu4+ndL/H54e+p\nbanrhr0QQohfdNkZGL1ej15//ur/85//8OGHH+Lh4cFTTz1FaWkp7u6/XFN3d3enpKSkq5olRK9m\nb2vFzZP7MyHcwGc/neDIqXKe/mAv8RH+XDsuFEe7jqcl0Gl1xBlGEeMb1Tbz9cqja/lBu5E4wygm\nBY7D3fbiD9MTQojL1WUFzIXMnTsXV1dXBg8ezPLly3nrrbeIiIg46zvmjCl2c7NHr++8yejO1dGg\nIXFlSTadw8vLibBBviSlFfHv7w6zKTmPvWnF3JowiBmxweh0Fz85e6NPAnPC4tmYsYPVx35i8+kd\nbMvbRVxgNNcMmkqgq3837Im4GDlm1EuyuTzdWsD8ejzMpEmTeOaZZ5g+fTqlpaVt7xcXFxMeHt7h\neioq6rusjTIyXL0km84X5GnP07dF89P+03y/M5N3vznMD9tPcfOU/gwNdr/4CoDZAycT5RpJUtFB\nNuRsZVt2ItuyExnmMYipQfH0cw3p4r0Q7ZFjRr0kG/N0VOR12RiYC3nggQfIzc0FIDExkf79+zNi\nxAgOHz5MdXU1dXV1JCcnM3LkyO5slhC9ml535sm9L94dy/gRBvJL63j184O8+fUhisz8Y0Gv1TPa\nbyR/iXmI34fdRqhLMEfK0vlH8ju8uv9tDpWkYlJMXbwnQojepMueA3PkyBGWLl1KXl4eer0eHx8f\nFi5cyPLly7Gzs8Pe3p4XX3wRDw8P1q1bx/vvv49Go2HhwoVcc801Ha5bngPTO0k23SO7sIbPNh7n\n+Okq9DoNU6P7MDs2GDubC5+wbS+Xk5WZbMjewpGyNAB8HXyYEjiBaJ9w9NpuPfnba8kxo16SjXnk\nQXYWkE6lXpJN91EUhX3pxXy1+SRl1U04O1hzw4RQ4ob7oT3ntuuL5ZJfW8jGnK3sKzqASTHhauPC\npD7jiDPEtD1LRnQNOWbUS7IxjxQwFpBOpV6STfdrbjGybm8Oa3Zn09xqIsjXiVunDKBfgEvbd8zN\npbyxgk2529mZv5dmYzP2ejvG+8cysc9YnKwdu3I3ei05ZtRLsjGPFDAWkE6lXpLNlVNe3ciKLRns\nOVoEwOghPsyb2Bd3Z1uLc6ltqWP76d1sOb2T2pY6rLR6Yv2imRw4Hk87j67ahV5Jjhn1kmzMIwWM\nBaRTqZdkc+WdOF3JfzeeILuwBmsrLTNHB7Fw1lCqKy2/M7DZ2MzugiR+ytlKWWMFGjREeocxNSie\nPheZAVuYR44Z9ZJszCMFjAWkU6mXZKMOJkVh5+ECvt56iuq6Zrzc7LhubAgxQ3zOGx9jDqPJSHLx\nITbkbCGvtgCAwe4DmBo4kQFufTuc6kB0TI4Z9ZJszCMFjAWkU6mXZKMuDU2t/LA7iw37TtNqNBHs\n68RNk/oxMPDSnsSrKApHy4+zIXszJypPARDk1IepQRMZ4TUUraZbn/pwVZBjRr0kG/NIAWMB6VTq\nJdmok1Gr5b1vDrE3rRiA8H6e3BjfFz8Ph0teZ2ZVDhtytnCoJBUFBW87T6YETiDGNxIrXcfTHYhf\nyDGjXpKNeaSAsYB0KvWSbNTp51xO5Vfz5aYTHD9dhVajYUK4gbljQ3B2sL7kdRfVFbMxZyuJhckY\nFSPO1k7E9xnLOP/R2OntOnEvrk5yzKiXZGMeKWAsIJ1KvSQbdfp1LoqicPBEKV9uyaCovB5bax0z\nRgcxLboPNlaXPn9ZZVMVm3N3sCNvD43GJmx1tozzH018n7G42Dh31q5cdeSYUS/JxjxSwFhAOpV6\nSTbqdKFcWo0mtqXk8+32TGobWnBzsuG6caGMGeaLVnvpg3LrWxrYkbeHTae3U9Nci16jI8Y3iilB\nE/Cx97rcXbnqyDGjXpKNeaSAsYB0KvWSbNSpo1zqG1tZm5jNj/tyaWk1EeDlyE2T+jE0xLyJItvT\nYmwhsXA/G3O2UtJQhgYNI7yGMS1oIkHOfS5r3VcTOWbUS7IxjxQwFpBOpV6SjTqZk0t5dSMrt51i\n95FCFGBYiDvz4/sR4H15T+A1KSYOlhxhQ/ZmcmryABjg2pepQRMZ7D6g19+CLceMekk25pECxgLS\nqdRLslEnS3LJLqzhy80nScuuQKOBuOF+XDcuFDcnm8tqg6IoHKs4yYbsLaRXnAAgwNHA1MAJRHiH\nodNe+vibnkyOGfWSbMwjBYwFpFOpl2SjTpbmoigKh0+V89Xmk+SV1mFtpWV6dCAJowLbnfHaEjk1\np9mYvZXk4kMoKHjYujM5cDyxfiOx1l36HVE9kRwz6iXZmEcKGAtIp1IvyUadLjUXo8nEzsOFfLPt\nFFV1zTg7WHPtuBDGhfmh017+Q+tK6svYmLuVPQVJtJpacbRyYGLAWMYHxOJgZX/Z6+8J5JhRL8nG\nPFLAWEA6lXpJNup0ubk0Nreyfm8u6xJzaGox4udhz/z4foT19eiUMSzVzTVsyd3JtrzdNLQ2YK2z\nZqxhFJP6jMPN1vWy169mcsyol2RjHilgLCCdSr0kG3XqrFwqa5v4dnsm2w/loygwKNCVmyb1J8i3\n/f+BWaKxtZEd+Ylszt1BZVMVWo2WaJ8IpgZNxM/Bp1O2oTZyzKiXZGMeKWAsIJ1KvSQbdersXPJK\navlqSwaHMsoAiB3qw/Xj++LhYtsp6281tbKv8AAbcrZSVH9m+oPhnoOZGhhPX9fgTtmGWsgxo16S\njXmkgLGAdCr1kmzUqatyOZpVzpebTpJTXItep2VqdACzRgdjb3v5A33hzC3Yh0uPsiF7C5nVOQCE\nugRzfb9ZhLgEdco2rjQ5ZtRLsjGPFDAWkE6lXpKNOnVlLiZFYfeRQlZuO0VFTROOdlZcExfMxAh/\n9LrOmZ1aURROVmayIWcLqWXp6DU6bh18IzG+kZ2y/itJjhn1kmzM01EBo3vmmWee6b6mdI76+uYu\nW7eDg02Xrl9cOslGnboyF41GQ6CPE/ER/thY6ziWU8mBE6UkphXh5mSDn4f9ZQ/01Wg0eNi5Ee0b\nQahLECmlqSQVHQRFob9raI9+GJ4cM+ol2ZjHwaH9Z0RJAXMO6VTqJdmoU3fkotNpGdDHlXFhBppb\njaRlV5CYVszR7AoMHg64O3fO+BgvOw+Gew4htewYh0pTKW4oZZjHoB77IDw5ZtRLsjGPFDAWkE6l\nXpKNOnVnLjbWOsL6ehIz2IeKmiZSM8vZfqiA/NI6gnydcLC1uuxtOFk7MtInnIzKLI6WH+N4ZQbD\nPYdg0wMfgifHjHpJNuaRAsYC0qnUS7JRpyuRi6OdFTGDfRgc5EZeaR2pWeVsTs6jvrGVYD9nrK0u\n74yJjc6aaJ8IShvLSS07xoHiwwxy74+T9eXN3dTd5JhRL8nGPFLAWEA6lXpJNup0JXPxcLFl/Ag/\nDJ4OZBZUc/hUOVsP5qPVagjydbysJ/rqtDrCvYYBcKg0lX1FBwh0CsDTzqOzmt/l5JhRL8nGPFLA\nWEA6lXpJNup0pXPRaDT4ezkyMcIfB1s9x3MrOXiylD2pRTg5WGHwdLjkgbgajYYBbn3xsvPgYPFh\n9hYl42ztSKBzQCfvRde40tmI9kk25pECxgLSqdRLslEnteSi02ro5+/C+HADRpPC0awKktJLOHyq\nDF93ezxd7C553f6OfvR368vh0qMkFx+iqbWJge79VH+HklqyEeeTbMwjBYwFpFOpl2SjTmrLxdpK\nx7BQD0YP9aW6rpnUzAp2Hi4kp6iGQB9HnOwvbTCuu60bEd7DSSs/weGyo+TVFjDccwh6Fd+hpLZs\nxC8kG/NIAWMB6VTqJdmok1pzcbC1YuQgb4aFulNYVk9qVgVbDuRTVd9MiK8zNtaWFx72VvZE+0SQ\nU3Oao+XHOFqWzjDPwdjqO+c27s6m1myEZGMuKWAsIJ1KvSQbdVJ7Lu5Otowd7kcfbyeyC6s5klnO\nloN5KAoE+TpZ/ERfK50VI33CqW6u4UhZOvuLUhjg1hcXG+cu2oNLp/ZsejPJxjxSwFhAOpV6STbq\n1BNy0Wg0GDwdmBjhj7ODNSdOV5GSUcauI4U42lkR4O1o0XgWrUbLMI/B2OhtSClJZW/hfgwOvvg4\neHfhXliuJ2TTW0k25pECxgLSqdRLslGnnpSLVqsh1ODMhHB/ANJzKkg6VsLBE6V4udnh7Wr+QF+N\nRkOoSzD+jn4cLDnCvqIDWOusCXEOUs3g3p6UTW8j2ZhHChgLSKdSL8lGnXpiLlZ6LUOC3Rkz1Jfa\nhhZSs8rZfaSQjPwqQvyccbQz/4m+vg7eDPEYyOHSNA6WHKGquYYh7gPRajpnssnL0ROz6S0kG/N0\nVMBc+SNMCCGuEA8XW+6aM4Snb4tmcJAbR06V8+xH+0hKL7ZoPYFOAfxx5P0EOBrYmZ/IspQPqG9p\n6KJWCyFAChghhCDI14lHbw7n7muGgALLvj3CF5tOYDSZzF6Hm60rD0Xew3DPwaRXnODV/W9T2lDW\nha0WoneTAkYIITgzpmX0EF+eXDwSX3d71u/N5eXPDlJV22T2Omz1Ntw9fDGT+oyjsL6Yl5Pe4lRV\nVtc1WoheTAoYIYT4FX9PB55aPJKoAV4cz63kmY/2cTy30uzltRotN/Sfw80Dr6O+tYHXDywnqfBA\nF7ZYiN5JChghhDiHnY2ee68bxvz4ftTUtfDyZwfYsC8XRVHMXsc4/1juDfsteo2eD49+xurMDRYt\nL4TomBQwQghxARqNhoRRgfzxlnAcbPV89tMJ3v0+lcbmVrPXMdhjAI+OvA8PWzfWZG7g46Of02Js\n6cJWC9F7SAEjhBAdGBjoxtO3x9DP34W9acU898l+CsrqzF7ez8GHP458gBDnIPYVHeCNg+9R01zb\nhS0WoneQAkYIIS7CzcmGPy2IYEpUAPmldfzt4ySLbrV2snbkwYi7ifIewamqLF5JeovCOstu1RZC\nnE0KGCGEMINep2XB1AHcfc0QFEVh2bdH+HLTSbNvtbbSWXH70AXMCJ5CaWM5r+x/i/TyE13caiGu\nXlLACCGEBUYP8eWp34zEx92edXtzePXzg1TVmfdEVY1Gw+zQaSwecjMtxhbeTnmfnXmJXdxiIa5O\nUsAIIYSF/L0c+ev/brVOz6nk2Q/3cvJ0ldnLx/hG8kDE3djpbfnvsa/55uRqTIr5D80TQlxGAZOV\nldWJzRBCiJ7l51utb4zvS1VdM0v/m8yGJPNvte7nGsIfox7Ax96LjTlb+ffhT2kyytw4QpirwwLm\n9ttvP+v1smXL2v7917/+tWtaJIQQPYRGo2HGqCAevTnizK3WG0+wfNVRs2+19rL34NGo+xjg1o+U\n0lT+kfwOlU3mn8kRojfrsIBpbT37INyzZ0/bv+WBTEIIccbgoDO3Wvf1dybxaBHPf7KfwvJ6s5a1\nt7Ln/hF3MMYvmtyaPF5OeovcmrwubrEQPV+HBYxGoznr9a+LlnM/E0KI3szNyYbHFkQyOSqAvNI6\n/vbRPvYfKzFrWZ1Wx4JB87i270yqmqp5LfkdDpce7eIWC9GzWTQGRooWIYRon16n5dapA7h7zhBM\nisLb3xzmq83m3Wqt0WiYGjSRO4cvQlEU3j30MZtytsnZbiHaoe/ow6qqKnbv3t32urq6mj179qAo\nCtXV1V3eOCGE6IlGD/UlwNuRt1ceZm1iDpkF1fxu7jBcHKwvumy41zAeivw97x76iK9P/kBRQynz\n+89Fp9V1Q8uF6Dk0Sgfl/aJFizpc+NNPP+30BpmjpKSmy9bt5eXUpesXl06yUSfJpX31ja18sCaN\n5OMluDpac+91w+nn72LWshWNlbxz6EPyagsY7D6AO4bdip3ezqLtSzbqJdmYx8vLqd3POixg1EoK\nmN5JslEnyaVjiqKwLjGHFVsz0Go03Dy5P5Mi/c26JN/Y2sSHqf/lSFkavg4+3BN2O5527mZvW7JR\nL8nGPB0VMB2OgamtreWjjz5qe/35558zd+5c/vCHP1BaWtppDRRCiKuVRqNhxuggHr0pHHtbPf+3\n4TjvrTpKU7Pxosva6m34Xdhi4vuMpbCuiJeT3uRUVXY3tFoI9euwgPnrX/9KWVkZAJmZmbz22ms8\n9thjjBkzhueff75bGiiEEFeDwcHuPH1bNH0Nzuw5WsRznyaZdau1VqNlXv9ruGnAddS3NvD6gXdJ\nKjrYDS0WQt06LGByc3N55JFHAFi/fj0JCQmMGTOGm2++Wc7ACCGEhdydbXns1kgmRfqTV1LHko/3\nkXzcvFutxwfEck/Y7eg1ej5M/S9rMzfKHUqiV+uwgLG3t2/79969exk9enTba7mlWgghLKfXaVk4\nbSB3zRmC0ajw1srDfLXFvFuth3gM5JGoe3G3deOHzB/5+OgXtJjMe+qvEFebDgsYo9FIWVkZOTk5\nHDhwgLi4OADq6upoaGjolgYKIcTVKHaoL0/+ZiTebnas3ZPDa1+kUG3GrNYGR1/+OPJ+QpwD2VeU\nzJsHllPbXNcNLRZCXTosYO666y5mzpzJnDlzuPfee3FxcaGxsZEFCxZw7bXXdlcbhRDiqhTg7chf\nF0cT0d+TtOwKnv1oHxl5F58LydnaiT9E/I4o7xFkVGXxctKbFNYVd0OLhVCPi95G3dLSQlNTE46O\njm3v7dixg7Fjx3Z549ojt1H3TpKNOkkul8+kKKzdk83KbacsutXapJhYnbmBdVk/Yae3485hCxnk\n3r/tc8lGvSQb81zyc2Dy8/M7XLHBYLj0Vl0GKWB6J8lGnSSXznM0q5x3v0+lpr6F2KE+/Gb6IGys\nL/4E3sSC/fxf+goUFG4eeB1xhlGAZKNmko15OipgOpxKYNKkSYSEhODl5QWcP5njJ5980uGGjx8/\nzr333sttt93GwoUL297fvn07d955J8eOHQPg+++/5+OPP0ar1TJ//nxuvPHGi++VEEJcZYb871br\nZd8eYXdqEbnFtdx33XB83O07XG6UXxTutm68d/gT/pv+NcX1pcztO6ObWi3EldFhAbN06VK+++47\n6urqmDVrFrNnz8bd3aB8CTUAACAASURBVLynQNbX17NkyRJiY2PPer+pqYnly5e3FUX19fW8/fbb\nrFixAisrK+bNm8fUqVNxdXW9xF0SQoiey93ZlscWRPL5phNsTs7jbx/v485ZQ4gY4NXhcv3dQnl0\n5P28c+gDNuZspaShjEfG39lNrRai+3U4iHfu3Ll88MEH/POf/6S2tpZbb72VO++8k1WrVtHY2Njh\niq2trXnvvffw9vY+6/1//etfLFiwAGvrM5OapaSkMHz4cJycnLC1tSUyMpLk5OTL3C0hhOi5rPRa\nFk0byJ2zB2M0Kry58jBfb83AZOr4uS/e9p78Mep+Brj2JaXkCM9seo3KposPChaiJ+qwgPmZn58f\n9957L2vXrmX69Ok899xzFx3Eq9frsbW1Peu9zMxM0tPTmTHjl1ObpaWlZ53VcXd3p6TEvAc7CSHE\n1WzMMD/+8puReLvasXp3Nq9+cZDq+o5vtba3sue+8DsY4xfNqYoc/r7vDbKrc7upxUJ0nw4vIf2s\nurqa77//npUrV2I0Gvnd737H7NmzLd7Yiy++yJNPPtnhd8x5sqSbmz16fddNLd/RoCFxZUk26iS5\ndB0vLydeD/Xkn58lk5hayHMfJ/H44mgGBnV8Of9B79vpdzyQT1NW8o8D/+LemEXEBUZ3U6uFOeS4\nuTwdFjA7duzg66+/5siRI0ybNo2XXnqJAQMGXNKGioqKOHXqFI8++igAxcXFLFy4kAceeOCsaQn+\nf3v3HR1Vua8P/NnTMmmQSa+E9AiEVI6GjhBAaVKDmID3ci0X0J9eRJHjEV269IB6jkfAroCJSBex\nBZCOBAWCASIhBQgkpPdk0qb8/kiIDIEklGmZ57OWK85+9zt840vkYc+797ekpAQRERGdvldlZdf9\nQ+4Ud4abLq6NaeK6GMYTE++Dt7MNth+6gJdWH8GcMUEYGdn5rdYTQ8bAVtMLazM24D+pXyKrMA8P\n+8VBJHTr4jvpEX9uuueOb6MODQ1F3759ER4eDpGo42/4t99+u8tffNWqVVAoFDp3IQGtdzjt27cP\njY2NmDRpErZt2waxWIxp06Zh69atsLe/ddG8jdoycW1ME9fFsDIuVeCT7zJQ19CC2P7umDs+BFbS\nm1+RvrY2hfXF+Dh9LcoaKxDhEoa5/eJhJZYZuHK6Hn9uuueOb6O+dpt0ZWUlFAqFzlh+fn6nv+jZ\ns2exYsUKFBQUQCKRYNeuXVi1alWHu4vkcjkWL16M+fPnQxAELFy4sNPwQkRkyfr3dcRr/zUIa749\ni9SMIlwpqcOiaQPgqrj1rdYetm5YEvMMPj+bhD9Kz6D8ZDmeGvg4FHLe7Unmq9MrMCdOnMDzzz+P\npqYmODo64pNPPoGvry+Sk5Px6aef4tChQ4astR2vwFgmro1p4roYR4tKg417s7H/VAGsrSR4YmI/\nRAQ565xz49qoNCpsztqBX6/+jl4yezwZNg9+vfsYunQCf266646vwPz73//GunXrEBAQgL179+LV\nV1+FRqNB7969sWXLlnteKBERdY9UIkLiuBAEePXCVynn8cG205g42BePDPWHSHTzfTESkQSPhkyH\nh607tmV/j/dPfYyE0JkY5B5p4OqJ7l6nO7lEIhECAgIAAKNHj0ZBQQHmzp2L1atXw83NzSAFEhHR\nrQ0e4IFlidFwdbDGD0fz8O/Nf6C2k1utBUHAKJ+h+N/w/4ZEkGDdn99gZ24KNFqNAasmunudBpgb\nd7d7eHggLi5OrwUREdHt6eNmj1cfj0FEoDMyLrV2tb5wtabTOf2dQrAkZiGcrZ2wK28fPj+bjEZV\nk4EqJrp7t3UvXVedUYmIyDhs5FIsmh6GqcP9UVnThH9+fRIpqZc6neNu64YlMX89ufdfaR+iorHS\nIPUS3a1ON/GGhYXBycmp/XV5eTmcnJyg1WohCAIOHDhgiBo74CZey8S1MU1cF9OTcbG1q3VdQwsm\nDe6LR4b5dfoXULVGjc3Z3+FIwTHYS+3w5MB58O/ta8CKLQ9/brrnjp8DU1BQ0Okbe3l53XlVd4EB\nxjJxbUwT18U0lVQ14D9bTqOwvB4jIzyRMDbklpt7gdanoB8sOIpt2d9DBAFzQmfgfo9oA1ZsWfhz\n0z13HGBMFQOMZeLamCaui+mSyKV45cNfcbmkDtEhLnhyUn9IJZ3vHDhXkYUvziajQdWIuD4jMTlg\nPJ/cqwf8uemezgIMf1cSEfVQCns5XpwThdA+Djh5vhTvb0lHQ5Oq0zn3OQZjSfQiuFo7Y8/lA/j0\nzFdoVDUaqGKi7mOAISLqwWzkEjw/KxxRwS44l1eJlRtOoaa+847WbraueCFmEUIUgThT9ifeO/kh\nyhu4uZdMCwMMEVEPJ5WIseCRARge7om84lq8lXwSpVUNnc6xldpgYfh8DPeKxdX6Iqw88QFyqy4Z\npmCibmCAISKyACKRgHnjQzAh1hcllQ14K/kk8kvqOp0jFokRHzIV8cGPQKlqwH9OfYLUwhMGqpio\ncwwwREQWQhAETB8RgNmjg1Bd14x/fp2GrCtVXc4b7j0YC8Pnw0osQ/K5zdie8wOf3EtGxwBDRGRh\nxg7ywROT+qGpRY33Nv2BP3LKupwT6hiEJTGL4Gbjgr2XD+GT0+vRwM29ZEQMMEREFii2vzuemT4Q\nAoDV287g1zOFXc5xtXHBC9GLEKoIwtnyc3jv5BqUNZTrv1iim2CAISKyUAMDnPDCo5GwthLjix/P\nIeW3y13OsZFaY0H4f2OE9xAU1hfjnROrkVN10QDVEuligCEismCBXr2x9LEoKOytsHl/Drbsz0FX\nzzcVi8SYFTwFs0OmQalqwAenPsXRq8cNVDFRKwYYIiIL5+Vih2UJ0XB3tMHPv13G2p8yodZ0vUl3\nmNcDeCbif2AlluHrzC3Ylv09N/eSwTDAEBERnHrL8XJCFPw87HHkTCHWbD+L5hZ1l/OCFYFYEvMM\n3Gxcse/KYXx0ei0aVJ0/Y4boXmCAISIiAIC9jQxLHo1E/74K/JFThn9t+gPKxpYu57naOGNJzEL0\ncwzBn+Xn8e6JNShVcnMv6RcDDBERtZPLJHh2RjgGhboiK78a//z6FKrqmrqcZy2xxtMDH8con6Eo\nUpbgnROrkFWZa4CKyVIxwBARkQ6pRISnJvfHqCgv5JfW4a2kkyiuVHY5TywSY0bQZMwJnY4GdSNW\n/fEZfi34zQAVkyVigCEiog5EIgEJccGYMtQPZdWNeDvpJPKKars1d4jn/Xg24glYS+TYcH4btmR9\nB7Wm6/00RLeDAYaIiG5KEARMGeqHhLHBqFW2YMWGNGTmda8rdZAiAC/GPAN3WzccyP8VH51eC2UL\nN/fSvcMAQ0REnXowyhtPTemPFpUG/9qcjpPnS7s1z9naCS9EL0R/p1Ccq8jCuydXo0TZddsCou5g\ngCEioi797T43PDcrHGKRgA93nMGh9KvdmmctkePpgY9jtM9wFCtL8c6JVThfkaPnaskSMMAQEVG3\n9O/riBfnRMJWLsW6nzPxY+qlLp/aCwAiQYRpQRPxWOhMNKmbsTr9cxwuSNV/wdSjMcAQEVG3+Xn0\nwssJUXDqZYVtBy9g494caLoRYgBgsOcgPBv5JGwk1th4/ltsztrBzb10xxhgiIjotng42WJZYgy8\nnG2x58QVfP7Dn1Cpu9dCINDBD0tinoGnrTsO5h/Fh+lfQtnS9S3aRDdigCEiotumsLfCS49FIcCr\nF45lFGPVtjNoau7e1RRna0f8X/QCDHC6D5mV2Xjn5GoUK7u3MZjoGgYYIiK6I3bWUrwQH4kwfyec\nuVCOdzeeQl1D160HgNbNvU8NnIcxfUagRFmGd06sRmZFtp4rpp6EAYaIiO6YlUyMZ6aHIba/G3Kv\n1uCfX6ehoqaxW3NFgghTAycg4b5ZaFE3Y036FziYf1TPFVNPwQBDRER3RSIWYf7EfoiL8cHVsnq8\nlXwSheX13Z4f6xGDZyOfgo3EGpuzdmDj+W+5uZe6xABDRER3TSQImD06ENNH+KOipglvJ6fhwtWa\nbs8PcOiLF2OehZedBw4XpGJ1+heo5+Ze6gQDDBER3ROCIGBCbF88/lAo6htb8M43p5BxsaLb852s\nFfi/qAUY6NwfWZU5eOfEKhTVl+ixYjJnDDBERHRPDQ/3xMKpYVBrtHh/Szp+P1fc7blyiRWeCEvE\nWN9RKG0ox7snV+NceZYeqyVzxQBDRET3XFSwCxbHh0MmFeGT7zKwLy2/23NFgghTAh7C3Pvi0aJu\nwZr0L7D/yhE9VkvmiAGGiIj0IqSPAi/NiYK9rQzJu7Ow4/CFbrUeuOZ+j2j8v6inYSe1xdbsnThZ\n/IceqyVzwwBDRER608fNHssSouDcW46dv15C8p4saDTdDzH+vX3xfPT/QiKSYHvOj2hSN+uxWjIn\nDDBERKRXrgobLEuMhreLHfanFeCTnRloUXWv9QAAuNm4YIzPcFQ1VWN33n49VkrmhAGGiIj0zsHO\nCksfi0Swd28czyzBf7amo6FJ1e35Y/s+CAer3vjl8kGUNXT/zibquRhgiIjIIGzkUvxffAQiAp3x\n56VKvPPNKdQou/eRkJVYhkcCHoZKo8L2nB/0XCmZAwYYIiIyGJlUjIXTBmBomAcuFdXi7eQ0lFU3\ndGtujFsE/Hv3RXrpWfZNIgYYIiIyLLFIhP96OBQPPdAHxRVKvJV0EgWldV3OEwQBs4KnQICArdk7\n2W7AwjHAEBGRwQmCgJkjAzFrVCCq6prxz6/TkJNf3eU8H3svDPYchML6YhwqSDVApWSqGGCIiMho\nxt/fB/Mn3IeGJjXe3XgKp3PLupwzyX88rCVy/HhxD2qbu75yQz0TAwwRERnVkDAPPDM9DADwwdYz\nSD1b1On59jI7TPAbiwZVA76/sMsQJZIJYoAhIiKjCw90xuLZEZDLxPjshz+x+/iVTs8f7hULd1s3\nHL36O67UFhioSjIlDDBERGQSgrwdsPSxKPS2k2Hj3mxsO5h7y9YDYpEYM4MmQwsttmR9d1stCqhn\nYIAhIiKT4e1qh78nRMNNYY0fU/Ow7udMqDU3f2pvqGMQwp37I7f6EvskWSAGGCIiMinODtZ4OSEa\nvm72OHy6EB9+exYtqpvfMj0taCIkIgm+zf2JfZIsDAMMERGZnF62Mrw4JxL3+SpwKrsM/9qUjqbm\njiHG2dqJfZIsFAMMERGZJGsrCZ6bGY7oEBecv1KFbYdyb3qebp+kcgNXScbCAENERCZLKhHhyUn9\n4Kawxt6T+bhYWNPhHCuxDFPb+yT9aIQqyRgYYIiIyKRJJWLMHRcCrRZYf4tNvdFuEQhgnySLwgBD\nREQm776+jhgywB2XS+qw53h+h3FBEDCzrU/SFvZJsggMMEREZBZmPRgIO2spdhy5gLKqjh2sW/sk\n/Q1F7JNkERhgiIjILNjbyBD/YCCaWzRI3pN104fXTfIf19YnaTf7JPVwDDBERGQ2Bg9wx32+CpzO\nLcfxzJIO43/1SWpkn6QejgGGiIjMhiAImDs+BFKJCN/8kg1lY0uHc9gnyTLoNcBkZWVhzJgxSE5O\nBgCcOnUKjz76KBITEzF//nxUVFQAAHbu3Inp06dj5syZ2LJliz5LIiIiM+emsMGkwX1RXd+MrQc6\nPhvm+j5Jm9knqcfSW4BRKpV44403EBsb235s7dq1WLlyJZKSkhAZGYnNmzdDqVRizZo1WLduHZKS\nkrB+/XpUVVXpqywiIuoBxt/fB17Otjjwx1VkXen4Z0aoYxDCXQbgAvsk9Vh6CzAymQyfffYZXF1d\n24998MEH8PHxgVarRXFxMdzd3ZGeno6wsDDY29tDLpcjKioKaWlp+iqLiIh6AIlYhHnjQwEAX+06\nD5W647NhpgWyT1JPprcAI5FIIJfLOxw/dOgQxo8fj7KyMkyePBllZWVwdHRsH3d0dERpaam+yiIi\noh4i0Ls3RkZ64WpZPX4+ltdh3NnaEWP6jGjtk3RpnxEqJH2SGPoXHD58OIYNG4Z3330Xn376Kby8\nvHTGu/NZpUJhA4lErK8S4eJir7f3prvDtTFNXBfT1dPX5qnp4UjPKcMPqXkYN8QfXi52OuNzFJNw\nvDgNe68cwoQBI+Fm52KkSjvq6WujbwYNMHv27EFcXBwEQcC4ceOwatUqREZGoqysrP2ckpISRERE\ndPo+lZVKvdXo4mKP0tJavb0/3TmujWniupguS1mb2aOD8NGOs3h/w0kseTQSgiDojE/2G4+1f36D\nz3/bhCcHzjNSlbosZW3uVmchz6C3Ua9atQrnzp0DAKSnp8PPzw/h4eE4c+YMampqUF9fj7S0NMTE\nxBiyLCIiMmMxIS4YGOCEzMtVOHq2qMN4e5+ksgz2SepB9HYF5uzZs1ixYgUKCgogkUiwa9cuvPnm\nm3j99dchFoshl8uxcuVKyOVyLF68GPPnz4cgCFi4cCHs7XlZjYiIukcQBCSMDcYrn/+GTftyMDDA\nCfY2Mp3xmcFTsOL4B9iSvRPLBj0HsUh/2xDIMAStGd4gr8/LbrysZ7q4NqaJ62K6LG1tdv9+GRv3\n5WDwAHf8z8R+Hca/ydyGI1d/w4ygyRjlM9QIFf7F0tbmTpnMR0hERET6MjrGG75u9jh6tgh/Xqro\nMD7JfzysJdbsk9RDMMAQEVGPIBaJ8PhDoRCE1mfDNLeodcbtZLaY4BfHPkk9BAMMERH1GL7u9oiL\n8UFJZQN+SL3UYXy4Vyw82vokXa7NN3h9dO8wwBARUY/yyDA/OPWyws/HLiO/VPejIrFIjBltfZK2\nZO1knyQzxgBDREQ9ilwmwWNjQ6DWaPFVynlobggp1/dJOsE+SWaLAYaIiHqciEBnxIS4IKegGgf/\nuNph/FqfpB3sk2S2GGCIiKhHenRMMKytxNh6IBdVdU06Y+yTZP4YYIiIqEdS2FthxogANDSpsOGX\njk/gHes7Cg5WvfHLlUMoayg3QoV0NxhgiIioxxoR6YVAr944kVmC9JwynTErsQxTAydApVFhe/YP\nRqqQ7hQDDBER9VgiQcDc8SEQiwQk7z6PxmaVzni0azgCevshvSwD5yqyjFQl3QkGGCIi6tG8Xeww\n/v4+KK9pwo7DF3XGrvVJEiBga9ZOqDXqW7wLmRoGGCIi6vEmDe4LV4U19py4grwi3R5EPvaeGOL5\nNxQpS3CoINVIFdLtYoAhIqIeTyYVY+64EGi1wLqfM6HWaHTG2SfJ/DDAEBGRRejX1xGx/d2RV1yL\nvSd02wjYyWwx0W9sW5+kFCNVSLeDAYaIiCxG/OhA2FlL8e3hiyivbtQZG+b1QFufpOPsk2QGGGCI\niMhi9LKRYdaoQDS1qJG8+7xOLyT2STIvDDBERGRRhoS5I7SPA9Jzy3HyfKnOWKhjECLYJ8ksMMAQ\nEZFFEQQBc8eHQiIW4etfsqBs1H02zNTr+iQ1qppu8S5kbAwwRERkcdwdbTBpsC+q65qx7WCuzpiz\ntSPirvVJyttvpAqpKwwwRERkkR56wBeezrY4cKoAOQXVOmNxbX2S9l4+iFIl+ySZIgYYIiKySBKx\nqPXZMADWp2RCpf7r2TDtfZK0amzPYZ8kU8QAQ0REFivYxwEjIjxRUFqPXb9f1hm71ifpNPskmSQG\nGCIismgzRgagl60M3x25hOJKZftx9kkybQwwRERk0WzlUswZEwSVWoOvUnSfDeNj74khXvejSFmC\ngwVHjVgl3YgBhoiILN6gUFeE+TvhXF4lUjOKdMYm+Y2DtcQaP13cwz5JJoQBhoiILJ4gCEgcGwyZ\nVISNe3NQq2xuH2OfJNPEAENERATA2cEajwz1R11DCzbvz9EZ0+mTVMM+SaaAAYaIiKhN3CBv9HG1\nw69ninAur7L9uFgkxsygKa19krK/Y58kE8AAQ0RE1EYsEmHeQ6EQBOCrlEy0qP668yjEMbCtT1Ie\njhefMmKVBDDAEBER6fDz6IXR0d4ormzAD0fzdMamBU6EVCTBjhz2STI2BhgiIqIbTB3mD4W9FX46\nloeCsvr2407WjhjTZwSqm2vYJ8nIGGCIiIhuYG0lQcLYYKg1WnyVkgnNdXtexvqOgsLKgX2SjIwB\nhoiI6CYig1wQHeyC7PxqHEq/2n5cJpZhauDD7JNkZAwwREREtzAnLhhymRhb9ueiuu6vPS9RruEI\ndGjrk1TOPknGwABDRER0Cwp7K0wfEYCGJhW+2ZvdflwQBMwIauuTlM0+ScbAAENERNSJUZFe8Pfs\nhd/PleB07l97XtgnybgYYIiIiDohEgmYNz4UYpGApF3n0dT819WWSX7jYCOxxo8X2CfJ0BhgiIiI\nuuDjaodxf+uD8ppGfHfkYvtxO5ktJviPRaO6ETtz2SfJkBhgiIiIumHykL5wcZBj9/EruFxc2358\nmOcD8LR1R2oh+yQZEgMMERFRN8ikYswdFwqNVot1P2dCo2l9NoxYJMaMoMnsk2RgDDBERETd1N/P\nEQ/0d8OlolrsTfvraktrn6Qw9kkyIAYYIiKi2zD7wSDYyiXYfugCKmoa249PC5zAPkkGxABDRER0\nG3rZyjBrVCCamtVI3p3V/pFRa5+kkahursGuvH1GrrLnY4AhIiK6TUMHeiDExwF/5JQhLau0/fhY\n35FQWDlg3+VD7JOkZwwwREREt0kQBMwdHwKJWMDXe7KgbFQBuNYnaQJUWjW25Xxv5Cp7NgYYIiKi\nO+DhZIsJsX1RVdeM7Ydy249HuQ5EkIM/zpT9yT5JesQAQ0REdIcefsAXHk422J9WgNyCagDX+iRN\nhgABW9gnSW8YYIiIiO6QVCLCvPGh0AJYn5IJlVoDAPC298RQrwdQrCzBwfxfjVtkD8UAQ0REdBeC\nfRwwPNwD+aX12H38Svvxif5jW/skXfyFfZL0gAGGiIjoLs0cFYheNlLsPHIRJVUNAAA7Kfsk6RMD\nDBER0V2ylUsxe0wQmlUaJO063/5sGPZJ0h8GGCIionvg/vvcMMDPERkXK3Dsz2IArX2SZga39kna\nnMU+SfcSAwwREdE9IAgCEseFQCYRYePebNQ1tAAAghWBiHQJw8Ua9km6lxhgiIiI7hEXB2tMGeqH\nWmULNu/PaT8+NXAi+yTdYwwwRERE91DcIB94u9jhyOlCnL9cCQBwslawT9I9xgBDRER0D0nEIjz+\nUCgEAOtTzqNF1fpsmOv7JJ0oSMfF6jxcqb2KovoSlDdUoKa5Fg2qBrRoVNwr0w0SYxdARETU0/h7\n9sKD0d7YezIfP6ZewiPD/Nv7JH2Z8TVWHvm40/kCBEhEEkjb/pGIpJCKpTqvZdeOXztPLG2bI207\nRwKZSNrhHKnOvBtei6WQCGIIgmCY/1B3gQGGiIhID6YN90daVil+OpaH+/u5wcPJFlGuAyEIAqq1\nlaiurUeLpgUtGhVUGlXbv7egRa3qeEyjQlNzE5o1LWhRt0AL/V6h6TwkXfdaJEWIYxBiPWL0Ws/N\nMMAQERHpgbWVBI/FBWP19jNYn3IeL86JhEgQEOU6EC4u9igtrb3j91Zr1GhpCzh/BZ3W0NOs1j3W\nISSpbwxNt56v0qjQrGlBU0tT+zkarUanlmJlac8LMFlZWViwYAEef/xxJCQkoLCwEC+//DJUKhUk\nEgneeecduLi4YOfOnVi/fj1EIhFmzZqFmTNn6rMsIiIig4gKdkFkkDNOZZfhyOlCDA/3vCfvKxaJ\nIRaJIYfVPXm/23EtPF0LOXYyO4PXAOhxE69SqcQbb7yB2NjY9mPvv/8+Zs2aheTkZMTFxWHt2rVQ\nKpVYs2YN1q1bh6SkJKxfvx5VVVX6KouIiMigHosLhlwmxpb9OaiubzZ2OXdNLBJDLrGCncwWCrkD\npCLjfJijtwAjk8nw2WefwdXVtf3Y8uXLMW7cOACAQqFAVVUV0tPTERYWBnt7e8jlckRFRSEtLU1f\nZRERERmUYy85pg33R32jChv3Zhu7nB5DbwFGIpFALpfrHLOxsYFYLIZarcaGDRswadIklJWVwdHR\nsf0cR0dHlJaW6qssIiIig3swyht+Hr3w25/FOHOh3Njl9AgGv+6jVqvx4osv4oEHHkBsbCy+//57\nnfHu3PuuUNhAIhHrq0S4uNjr7b3p7nBtTBPXxXRxbUzH83Oi8Ny/D2LDL9kYHOnNtblLBg8wL7/8\nMnx9fbFo0SIAgKurK8rKytrHS0pKEBER0el7VFYq9Vbf3e4MJ/3h2pgmrovp4tqYFjupCGMH+SDl\nt8tIWJ4CGysJbKwksJa3frXR+Sptf2193di1cyViy3gObWchz6ABZufOnZBKpXj22Wfbj4WHh+OV\nV15BTU0NxGIx0tLSsGzZMkOWRUREZBCtfZKaUVjRgNr6JlTVNeFqeT1u98G7MqmoLexIdcLPzcLO\nzQKRVGL+AUjQ6ul5xWfPnsWKFStQUFAAiUQCNzc3lJeXw8rKCnZ2rbdcBQQE4LXXXkNKSgq++OIL\nCIKAhIQETJ48udP31uffKPg3FtPFtTFNXBfTxbUxXdevjVarRWOzGg1NKigbVVC2f22BslHVerzD\nmAoN173W3OYf5VKJSDf4tIedWwei679K9biN43qdXYHRW4DRJwYYy8S1MU1cF9PFtTFd93JttFot\nmlrUaGhSQ9nY0knYuXUgUmtuLwpIxKL2QBMZ5IyZowLvyfdyI5P5CImIiIjuLUEQIJdJIJdJoLC/\n/QfbabVaNKs0HcPODVd5bvq1SYWy6kY9fFddY4AhIiKyYIIgwEoqhpVUfEcByFjMfxcPERERWRwG\nGCIiIjI7DDBERERkdhhgiIiIyOwwwBAREZHZYYAhIiIis8MAQ0RERGaHAYaIiIjMDgMMERERmR0G\nGCIiIjI7DDBERERkdhhgiIiIyOwwwBAREZHZEbRardbYRRARERHdDl6BISIiIrPDAENERERmhwGG\niIiIzA4DDBEREZkdBhgiIiIyOwwwREREZHYYYK7z1ltvIT4+HrNnz8bp06eNXQ5dZ+XKlYiPj8f0\n6dOxe/duY5dD5lUOLAAABhtJREFU12lsbMSYMWOwfft2Y5dC19m5cycmT56MadOm4cCBA8YuhwDU\n19dj0aJFSExMxOzZs3H48GFjl2TWJMYuwFT8/vvvyMvLw6ZNm5Cbm4tly5Zh06ZNxi6LABw7dgzZ\n2dnYtGkTKisrMXXqVIwdO9bYZVGbjz76CL179zZ2GXSdyspKrFmzBtu2bYNSqcSqVaswcuRIY5dl\n8b799lv4+flh8eLFKC4uxrx585CSkmLssswWA0yb1NRUjBkzBgAQEBCA6upq1NXVwc7OzsiV0aBB\ngzBw4EAAQK9evdDQ0AC1Wg2xWGzkyig3Nxc5OTn8w9HEpKamIjY2FnZ2drCzs8Mbb7xh7JIIgEKh\nwPnz5wEANTU1UCgURq7IvPEjpDZlZWU6v5kcHR1RWlpqxIroGrFYDBsbGwDA1q1bMXz4cIYXE7Fi\nxQosXbrU2GXQDfLz89HY2Iinn34ac+bMQWpqqrFLIgATJkzA1atXERcXh4SEBLz00kvGLsms8QrM\nLbDDgun55ZdfsHXrVnz55ZfGLoUA7NixAxEREfDx8TF2KXQTVVVVWL16Na5evYq5c+di//79EATB\n2GVZtO+++w6enp744osvkJmZiWXLlnHv2F1ggGnj6uqKsrKy9tclJSVwcXExYkV0vcOHD+Pjjz/G\n559/Dnt7e2OXQwAOHDiAK1eu4MCBAygqKoJMJoO7uzsGDx5s7NIsnpOTEyIjIyGRSNCnTx/Y2tqi\noqICTk5Oxi7NoqWlpWHo0KEAgNDQUJSUlPDj8LvAj5DaDBkyBLt27QIAZGRkwNXVlftfTERtbS1W\nrlyJTz75BA4ODsYuh9q8//772LZtGzZv3oyZM2diwYIFDC8mYujQoTh27Bg0Gg0qKyuhVCq538IE\n+Pr6Ij09HQBQUFAAW1tbhpe7wCswbaKiotC/f3/Mnj0bgiBg+fLlxi6J2vz000+orKzEc889135s\nxYoV8PT0NGJVRKbLzc0N48aNw6xZswAAr7zyCkQi/n3V2OLj47Fs2TIkJCRApVLhtddeM3ZJZk3Q\ncrMHERERmRlGciIiIjI7DDBERERkdhhgiIiIyOwwwBAREZHZYYAhIiIis8MAQ0R6lZ+fjwEDBiAx\nMbG9C+/ixYtRU1PT7fdITEyEWq3u9vmPPvoofvvttzspl4jMBAMMEemdo6MjkpKSkJSUhI0bN8LV\n1RUfffRRt+cnJSXxgV9EpIMPsiMigxs0aBA2bdqEzMxMrFixAiqVCi0tLXj11VfRr18/JCYmIjQ0\nFOfOncP69evRr18/ZGRkoLm5Gf/4xz9QVFQElUqFKVOmYM6cOWhoaMDzzz+PyspK+Pr6oqmpCQBQ\nXFyMF154AQDQ2NiI+Ph4zJgxw5jfOhHdIwwwRGRQarUae/bsQXR0NJYsWYI1a9agT58+HZrb2djY\nIDk5WWduUlISevXqhffeew+NjY14+OGHMWzYMBw9ehRyuRybNm1CSUkJRo8eDQD4+eef4e/vj9df\nfx1NTU3YsmWLwb9fItIPBhgi0ruKigokJiYCADQaDWJiYjB9+nR88MEH+Pvf/95+Xl1dHTQaDYDW\n9h43Sk9Px7Rp0wAAcrkcAwYMQEZGBrKyshAdHQ2gtTGrv78/AGDYsGHYsGEDli5dihEjRiA+Pl6v\n3ycRGQ4DDBHp3bU9MNerra2FVCrtcPwaqVTa4ZggCDqvtVotBEGAVqvV6fVzLQQFBATgxx9/xPHj\nx5GSkoL169dj48aNd/vtEJEJ4CZeIjIKe3t7eHt74+DBgwCAixcvYvXq1Z3OCQ8Px+HDhwEASqUS\nGRkZ6N+/PwICAnDq1CkAQGFhIS5evAgA+P7773HmzBkMHjwYy5cvR2FhIVQqlR6/KyIyFF6BISKj\nWbFiBd588018+umnUKlUWLp0aafnJyYm4h//+Acee+wxNDc3Y8GCBfD29saUKVOwb98+zJkzB97e\n3ggLCwMABAYGYvny5ZDJZNBqtXjiiScgkfB/e0Q9AbtRExERkdnhR0hERERkdhhgiIiIyOwwwBAR\nEZHZYYAhIiIis8MAQ0RERGaHAYaIiIjMDgMMERERmR0GGCIiIjI7/x/FibkSuQdbcQAAAABJRU5E\nrkJggg==\n",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ }
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "c6diezCSeH4Y",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "## Task 2: Evaluate on Test Data\n",
+ "\n",
+ "**Confirm that your validation performance results hold up on test data.**\n",
+ "\n",
+ "Once you have a model you're happy with, evaluate it on test data to compare that to validation performance.\n",
+ "\n",
+ "Reminder, the test data set is located [here](https://download.mlcc.google.com/mledu-datasets/california_housing_test.csv)."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "icEJIl5Vp51r",
+ "colab_type": "code",
+ "cellView": "both",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 35
+ },
+ "outputId": "61356a86-4e08-4c2f-9e8d-0cf2520ab1ce"
+ },
+ "cell_type": "code",
+ "source": [
+ "california_housing_test_data = pd.read_csv(\"https://download.mlcc.google.com/mledu-datasets/california_housing_test.csv\", sep=\",\")\n",
+ "\n",
+ "# YOUR CODE HERE\n",
+ "test_examples = preprocess_features(california_housing_test_data)\n",
+ "test_targets = preprocess_targets(california_housing_test_data)\n",
+ "\n",
+ "predict_testing_input_fn = lambda: my_input_fn(test_examples, \n",
+ " test_targets[\"median_house_value\"], \n",
+ " num_epochs=1, \n",
+ " shuffle=False)\n",
+ "\n",
+ "test_predictions = dnn_regressor.predict(input_fn=predict_testing_input_fn)\n",
+ "test_predictions = np.array([item['predictions'][0] for item in test_predictions])\n",
+ "\n",
+ "root_mean_squared_error = math.sqrt(\n",
+ " metrics.mean_squared_error(test_predictions, test_targets))\n",
+ "\n",
+ "print(\"Final RMSE (on test data): %0.2f\" % root_mean_squared_error)"
+ ],
+ "execution_count": 12,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "Final RMSE (on test data): 122.78\n"
+ ],
+ "name": "stdout"
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "id": "vvT2jDWjrKew",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "### Solution\n",
+ "\n",
+ "Click below to see a possible solution."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "FyDh7Qy6rQb0",
+ "colab_type": "text"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "Similar to what the code at the top does, we just need to load the appropriate data file, preprocess it and call predict and mean_squared_error.\n",
+ "\n",
+ "Note that we don't have to randomize the test data, since we will use all records."
+ ]
+ },
+ {
+ "metadata": {
+ "id": "vhb0CtdvrWZx",
+ "colab_type": "code",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "california_housing_test_data = pd.read_csv(\"https://download.mlcc.google.com/mledu-datasets/california_housing_test.csv\", sep=\",\")\n",
+ "\n",
+ "test_examples = preprocess_features(california_housing_test_data)\n",
+ "test_targets = preprocess_targets(california_housing_test_data)\n",
+ "\n",
+ "predict_testing_input_fn = lambda: my_input_fn(test_examples, \n",
+ " test_targets[\"median_house_value\"], \n",
+ " num_epochs=1, \n",
+ " shuffle=False)\n",
+ "\n",
+ "test_predictions = dnn_regressor.predict(input_fn=predict_testing_input_fn)\n",
+ "test_predictions = np.array([item['predictions'][0] for item in test_predictions])\n",
+ "\n",
+ "root_mean_squared_error = math.sqrt(\n",
+ " metrics.mean_squared_error(test_predictions, test_targets))\n",
+ "\n",
+ "print(\"Final RMSE (on test data): %0.2f\" % root_mean_squared_error)"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ }
+ ]
+}
\ No newline at end of file
From 9d9fa47f56d50f7f21dda3cbf038dc8872427799 Mon Sep 17 00:00:00 2001
From: Amartya Bhattacharya
<36528245+amartyabhattacharya@users.noreply.github.com>
Date: Sun, 17 Feb 2019 14:05:31 +0530
Subject: [PATCH 10/11] Created using Colaboratory
---
improving_neural_net_performance.ipynb | 1858 ++++++++++++++++++++++++
1 file changed, 1858 insertions(+)
create mode 100644 improving_neural_net_performance.ipynb
diff --git a/improving_neural_net_performance.ipynb b/improving_neural_net_performance.ipynb
new file mode 100644
index 0000000..aff4f7d
--- /dev/null
+++ b/improving_neural_net_performance.ipynb
@@ -0,0 +1,1858 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 0,
+ "metadata": {
+ "colab": {
+ "name": "improving_neural_net_performance.ipynb",
+ "version": "0.3.2",
+ "provenance": [],
+ "collapsed_sections": [
+ "JndnmDMp66FL",
+ "jFfc3saSxg6t",
+ "FSPZIiYgyh93",
+ "GhFtWjQRzD2l",
+ "P8BLQ7T71JWd"
+ ],
+ "include_colab_link": true
+ },
+ "kernelspec": {
+ "name": "python2",
+ "display_name": "Python 2"
+ }
+ },
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "view-in-github",
+ "colab_type": "text"
+ },
+ "source": [
+ ""
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "text",
+ "id": "JndnmDMp66FL"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "#### Copyright 2017 Google LLC."
+ ]
+ },
+ {
+ "metadata": {
+ "cellView": "both",
+ "colab_type": "code",
+ "id": "hMqWDc_m6rUC",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "# Licensed under the Apache License, Version 2.0 (the \"License\");\n",
+ "# you may not use this file except in compliance with the License.\n",
+ "# You may obtain a copy of the License at\n",
+ "#\n",
+ "# https://www.apache.org/licenses/LICENSE-2.0\n",
+ "#\n",
+ "# Unless required by applicable law or agreed to in writing, software\n",
+ "# distributed under the License is distributed on an \"AS IS\" BASIS,\n",
+ "# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n",
+ "# See the License for the specific language governing permissions and\n",
+ "# limitations under the License."
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "colab_type": "text",
+ "id": "eV16J6oUY-HN"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "# Improving Neural Net Performance"
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "text",
+ "id": "0Rwl1iXIKxkm"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "**Learning Objective:** Improve the performance of a neural network by normalizing features and applying various optimization algorithms\n",
+ "\n",
+ "**NOTE:** The optimization methods described in this exercise are not specific to neural networks; they are effective means to improve most types of models."
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "text",
+ "id": "lBPTONWzKxkn"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "## Setup\n",
+ "\n",
+ "First, we'll load the data."
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "code",
+ "id": "VtYVuONUKxko",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "from __future__ import print_function\n",
+ "\n",
+ "import math\n",
+ "\n",
+ "from IPython import display\n",
+ "from matplotlib import cm\n",
+ "from matplotlib import gridspec\n",
+ "from matplotlib import pyplot as plt\n",
+ "import numpy as np\n",
+ "import pandas as pd\n",
+ "from sklearn import metrics\n",
+ "import tensorflow as tf\n",
+ "from tensorflow.python.data import Dataset\n",
+ "\n",
+ "tf.logging.set_verbosity(tf.logging.ERROR)\n",
+ "pd.options.display.max_rows = 10\n",
+ "pd.options.display.float_format = '{:.1f}'.format\n",
+ "\n",
+ "california_housing_dataframe = pd.read_csv(\"https://download.mlcc.google.com/mledu-datasets/california_housing_train.csv\", sep=\",\")\n",
+ "\n",
+ "california_housing_dataframe = california_housing_dataframe.reindex(\n",
+ " np.random.permutation(california_housing_dataframe.index))"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "colab_type": "code",
+ "id": "B8qC-jTIKxkr",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "def preprocess_features(california_housing_dataframe):\n",
+ " \"\"\"Prepares input features from California housing data set.\n",
+ "\n",
+ " Args:\n",
+ " california_housing_dataframe: A Pandas DataFrame expected to contain data\n",
+ " from the California housing data set.\n",
+ " Returns:\n",
+ " A DataFrame that contains the features to be used for the model, including\n",
+ " synthetic features.\n",
+ " \"\"\"\n",
+ " selected_features = california_housing_dataframe[\n",
+ " [\"latitude\",\n",
+ " \"longitude\",\n",
+ " \"housing_median_age\",\n",
+ " \"total_rooms\",\n",
+ " \"total_bedrooms\",\n",
+ " \"population\",\n",
+ " \"households\",\n",
+ " \"median_income\"]]\n",
+ " processed_features = selected_features.copy()\n",
+ " # Create a synthetic feature.\n",
+ " processed_features[\"rooms_per_person\"] = (\n",
+ " california_housing_dataframe[\"total_rooms\"] /\n",
+ " california_housing_dataframe[\"population\"])\n",
+ " return processed_features\n",
+ "\n",
+ "def preprocess_targets(california_housing_dataframe):\n",
+ " \"\"\"Prepares target features (i.e., labels) from California housing data set.\n",
+ "\n",
+ " Args:\n",
+ " california_housing_dataframe: A Pandas DataFrame expected to contain data\n",
+ " from the California housing data set.\n",
+ " Returns:\n",
+ " A DataFrame that contains the target feature.\n",
+ " \"\"\"\n",
+ " output_targets = pd.DataFrame()\n",
+ " # Scale the target to be in units of thousands of dollars.\n",
+ " output_targets[\"median_house_value\"] = (\n",
+ " california_housing_dataframe[\"median_house_value\"] / 1000.0)\n",
+ " return output_targets"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "colab_type": "code",
+ "id": "Ah6LjMIJ2spZ",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 1209
+ },
+ "outputId": "216c08ea-ee8c-4060-e6a8-250455d110a5"
+ },
+ "cell_type": "code",
+ "source": [
+ "# Choose the first 12000 (out of 17000) examples for training.\n",
+ "training_examples = preprocess_features(california_housing_dataframe.head(12000))\n",
+ "training_targets = preprocess_targets(california_housing_dataframe.head(12000))\n",
+ "\n",
+ "# Choose the last 5000 (out of 17000) examples for validation.\n",
+ "validation_examples = preprocess_features(california_housing_dataframe.tail(5000))\n",
+ "validation_targets = preprocess_targets(california_housing_dataframe.tail(5000))\n",
+ "\n",
+ "# Double-check that we've done the right thing.\n",
+ "print(\"Training examples summary:\")\n",
+ "display.display(training_examples.describe())\n",
+ "print(\"Validation examples summary:\")\n",
+ "display.display(validation_examples.describe())\n",
+ "\n",
+ "print(\"Training targets summary:\")\n",
+ "display.display(training_targets.describe())\n",
+ "print(\"Validation targets summary:\")\n",
+ "display.display(validation_targets.describe())"
+ ],
+ "execution_count": 3,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "Training examples summary:\n"
+ ],
+ "name": "stdout"
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ " latitude longitude housing_median_age total_rooms total_bedrooms \\\n",
+ "count 12000.0 12000.0 12000.0 12000.0 12000.0 \n",
+ "mean 35.6 -119.6 28.7 2631.7 537.3 \n",
+ "std 2.1 2.0 12.6 2151.2 417.6 \n",
+ "min 32.5 -124.3 1.0 2.0 1.0 \n",
+ "25% 33.9 -121.8 18.0 1453.0 297.0 \n",
+ "50% 34.2 -118.5 29.0 2123.0 431.0 \n",
+ "75% 37.7 -118.0 37.0 3146.0 647.0 \n",
+ "max 41.9 -114.6 52.0 32627.0 6445.0 \n",
+ "\n",
+ " population households median_income rooms_per_person \n",
+ "count 12000.0 12000.0 12000.0 12000.0 \n",
+ "mean 1425.8 499.9 3.9 2.0 \n",
+ "std 1149.8 380.3 1.9 1.1 \n",
+ "min 6.0 1.0 0.5 0.0 \n",
+ "25% 788.0 281.0 2.6 1.5 \n",
+ "50% 1165.0 407.0 3.5 1.9 \n",
+ "75% 1727.0 606.0 4.7 2.3 \n",
+ "max 35682.0 6082.0 15.0 55.2 "
+ ],
+ "text/html": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ }
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "text",
+ "id": "NqIbXxx222ea"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "## Train the Neural Network\n",
+ "\n",
+ "Next, we'll train the neural network."
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "code",
+ "id": "6k3xYlSg27VB",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "def construct_feature_columns(input_features):\n",
+ " \"\"\"Construct the TensorFlow Feature Columns.\n",
+ "\n",
+ " Args:\n",
+ " input_features: The names of the numerical input features to use.\n",
+ " Returns:\n",
+ " A set of feature columns\n",
+ " \"\"\" \n",
+ " return set([tf.feature_column.numeric_column(my_feature)\n",
+ " for my_feature in input_features])"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "colab_type": "code",
+ "id": "De9jwyy4wTUT",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "def my_input_fn(features, targets, batch_size=1, shuffle=True, num_epochs=None):\n",
+ " \"\"\"Trains a neural network model.\n",
+ " \n",
+ " Args:\n",
+ " features: pandas DataFrame of features\n",
+ " targets: pandas DataFrame of targets\n",
+ " batch_size: Size of batches to be passed to the model\n",
+ " shuffle: True or False. Whether to shuffle the data.\n",
+ " num_epochs: Number of epochs for which data should be repeated. None = repeat indefinitely\n",
+ " Returns:\n",
+ " Tuple of (features, labels) for next data batch\n",
+ " \"\"\"\n",
+ " \n",
+ " # Convert pandas data into a dict of np arrays.\n",
+ " features = {key:np.array(value) for key,value in dict(features).items()} \n",
+ " \n",
+ " # Construct a dataset, and configure batching/repeating.\n",
+ " ds = Dataset.from_tensor_slices((features,targets)) # warning: 2GB limit\n",
+ " ds = ds.batch(batch_size).repeat(num_epochs)\n",
+ " \n",
+ " # Shuffle the data, if specified.\n",
+ " if shuffle:\n",
+ " ds = ds.shuffle(10000)\n",
+ " \n",
+ " # Return the next batch of data.\n",
+ " features, labels = ds.make_one_shot_iterator().get_next()\n",
+ " return features, labels"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "colab_type": "code",
+ "id": "W-51R3yIKxk4",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "def train_nn_regression_model(\n",
+ " my_optimizer,\n",
+ " steps,\n",
+ " batch_size,\n",
+ " hidden_units,\n",
+ " training_examples,\n",
+ " training_targets,\n",
+ " validation_examples,\n",
+ " validation_targets):\n",
+ " \"\"\"Trains a neural network regression model.\n",
+ " \n",
+ " In addition to training, this function also prints training progress information,\n",
+ " as well as a plot of the training and validation loss over time.\n",
+ " \n",
+ " Args:\n",
+ " my_optimizer: An instance of `tf.train.Optimizer`, the optimizer to use.\n",
+ " steps: A non-zero `int`, the total number of training steps. A training step\n",
+ " consists of a forward and backward pass using a single batch.\n",
+ " batch_size: A non-zero `int`, the batch size.\n",
+ " hidden_units: A `list` of int values, specifying the number of neurons in each layer.\n",
+ " training_examples: A `DataFrame` containing one or more columns from\n",
+ " `california_housing_dataframe` to use as input features for training.\n",
+ " training_targets: A `DataFrame` containing exactly one column from\n",
+ " `california_housing_dataframe` to use as target for training.\n",
+ " validation_examples: A `DataFrame` containing one or more columns from\n",
+ " `california_housing_dataframe` to use as input features for validation.\n",
+ " validation_targets: A `DataFrame` containing exactly one column from\n",
+ " `california_housing_dataframe` to use as target for validation.\n",
+ " \n",
+ " Returns:\n",
+ " A tuple `(estimator, training_losses, validation_losses)`:\n",
+ " estimator: the trained `DNNRegressor` object.\n",
+ " training_losses: a `list` containing the training loss values taken during training.\n",
+ " validation_losses: a `list` containing the validation loss values taken during training.\n",
+ " \"\"\"\n",
+ "\n",
+ " periods = 10\n",
+ " steps_per_period = steps / periods\n",
+ " \n",
+ " # Create a DNNRegressor object.\n",
+ " my_optimizer = tf.contrib.estimator.clip_gradients_by_norm(my_optimizer, 5.0)\n",
+ " dnn_regressor = tf.estimator.DNNRegressor(\n",
+ " feature_columns=construct_feature_columns(training_examples),\n",
+ " hidden_units=hidden_units,\n",
+ " optimizer=my_optimizer\n",
+ " )\n",
+ " \n",
+ " # Create input functions.\n",
+ " training_input_fn = lambda: my_input_fn(training_examples, \n",
+ " training_targets[\"median_house_value\"], \n",
+ " batch_size=batch_size)\n",
+ " predict_training_input_fn = lambda: my_input_fn(training_examples, \n",
+ " training_targets[\"median_house_value\"], \n",
+ " num_epochs=1, \n",
+ " shuffle=False)\n",
+ " predict_validation_input_fn = lambda: my_input_fn(validation_examples, \n",
+ " validation_targets[\"median_house_value\"], \n",
+ " num_epochs=1, \n",
+ " shuffle=False)\n",
+ "\n",
+ " # Train the model, but do so inside a loop so that we can periodically assess\n",
+ " # loss metrics.\n",
+ " print(\"Training model...\")\n",
+ " print(\"RMSE (on training data):\")\n",
+ " training_rmse = []\n",
+ " validation_rmse = []\n",
+ " for period in range (0, periods):\n",
+ " # Train the model, starting from the prior state.\n",
+ " dnn_regressor.train(\n",
+ " input_fn=training_input_fn,\n",
+ " steps=steps_per_period\n",
+ " )\n",
+ " # Take a break and compute predictions.\n",
+ " training_predictions = dnn_regressor.predict(input_fn=predict_training_input_fn)\n",
+ " training_predictions = np.array([item['predictions'][0] for item in training_predictions])\n",
+ " \n",
+ " validation_predictions = dnn_regressor.predict(input_fn=predict_validation_input_fn)\n",
+ " validation_predictions = np.array([item['predictions'][0] for item in validation_predictions])\n",
+ " \n",
+ " # Compute training and validation loss.\n",
+ " training_root_mean_squared_error = math.sqrt(\n",
+ " metrics.mean_squared_error(training_predictions, training_targets))\n",
+ " validation_root_mean_squared_error = math.sqrt(\n",
+ " metrics.mean_squared_error(validation_predictions, validation_targets))\n",
+ " # Occasionally print the current loss.\n",
+ " print(\" period %02d : %0.2f\" % (period, training_root_mean_squared_error))\n",
+ " # Add the loss metrics from this period to our list.\n",
+ " training_rmse.append(training_root_mean_squared_error)\n",
+ " validation_rmse.append(validation_root_mean_squared_error)\n",
+ " print(\"Model training finished.\")\n",
+ "\n",
+ " # Output a graph of loss metrics over periods.\n",
+ " plt.ylabel(\"RMSE\")\n",
+ " plt.xlabel(\"Periods\")\n",
+ " plt.title(\"Root Mean Squared Error vs. Periods\")\n",
+ " plt.tight_layout()\n",
+ " plt.plot(training_rmse, label=\"training\")\n",
+ " plt.plot(validation_rmse, label=\"validation\")\n",
+ " plt.legend()\n",
+ "\n",
+ " print(\"Final RMSE (on training data): %0.2f\" % training_root_mean_squared_error)\n",
+ " print(\"Final RMSE (on validation data): %0.2f\" % validation_root_mean_squared_error)\n",
+ "\n",
+ " return dnn_regressor, training_rmse, validation_rmse"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "colab_type": "code",
+ "id": "KueReMZ9Kxk7",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 797
+ },
+ "outputId": "a7fbd5ad-d212-4fbc-f2cc-affb71a76ca6"
+ },
+ "cell_type": "code",
+ "source": [
+ "_ = train_nn_regression_model(\n",
+ " my_optimizer=tf.train.GradientDescentOptimizer(learning_rate=0.0007),\n",
+ " steps=5000,\n",
+ " batch_size=70,\n",
+ " hidden_units=[10, 10],\n",
+ " training_examples=training_examples,\n",
+ " training_targets=training_targets,\n",
+ " validation_examples=validation_examples,\n",
+ " validation_targets=validation_targets)"
+ ],
+ "execution_count": 7,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "WARNING: The TensorFlow contrib module will not be included in TensorFlow 2.0.\n",
+ "For more information, please see:\n",
+ " * https://github.com/tensorflow/community/blob/master/rfcs/20180907-contrib-sunset.md\n",
+ " * https://github.com/tensorflow/addons\n",
+ "If you depend on functionality not listed there, please file an issue.\n",
+ "\n",
+ "Training model...\n",
+ "RMSE (on training data):\n",
+ " period 00 : 141.30\n",
+ " period 01 : 132.06\n",
+ " period 02 : 120.77\n",
+ " period 03 : 112.41\n",
+ " period 04 : 108.40\n",
+ " period 05 : 107.49\n",
+ " period 06 : 104.89\n",
+ " period 07 : 103.65\n",
+ " period 08 : 104.84\n",
+ " period 09 : 102.61\n",
+ "Model training finished.\n",
+ "Final RMSE (on training data): 102.61\n",
+ "Final RMSE (on validation data): 101.84\n"
+ ],
+ "name": "stdout"
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjAAAAGACAYAAACz01iHAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzs3XlUFFfaBvCnuptmbZAdXBBBBEVw\nRcVdRMF9Q+ICMcaYSdQkkzijyTcmMxmzmT0aNdFJNIImijtuuMU9ahSjoiwqIorIvu901/eHkx5J\nQ0eUpht4fudwDl33raq3+8Lh5datW4IoiiKIiIiImhCJvhMgIiIiqi8WMERERNTksIAhIiKiJocF\nDBERETU5LGCIiIioyWEBQ0RERE2OTN8JEBkyT09PuLi4QCqVAgCUSiX8/PywZMkSmJmZPfFxt2zZ\ngtDQUI3t27dvx1tvvYVvvvkGw4YNU28vLy9H//79MXLkSHz00UdPfN7HlZqaig8++AC3b98GAJia\nmmLBggUIDAzU+bnrY9WqVUhNTdX4TM6dO4c5c+agbdu2GvscOHCgsdJ7Kvfu3cPw4cPRoUMHAIAo\nirCzs8M//vEPdOnSpV7H+uyzz9C6dWtMnz79sffZtWsXtm7dioiIiHqdi6ixsIAh+hMRERFwcnIC\nAFRWVuL111/Ht99+i9dff/2JjpeVlYX//Oc/tRYwAODs7Iw9e/bUKGB+/vlnWFpaPtH5nsTf/vY3\nTJgwAd988w0A4PLly5g1axb2798PZ2fnRsvjaTg7OzeZYqUuUqm0xnvYt28f5s+fj5iYGMjl8sc+\nzsKFC3WRHpFe8RISUT3I5XIMGjQI8fHxAICKigq88847CAoKwqhRo/DRRx9BqVQCABISEjBt2jQE\nBwdjwoQJOHnyJABg2rRpuH//PoKDg1FZWalxjp49e+LcuXMoKytTb9u3bx8GDBigfl1ZWYn33nsP\nQUFBCAgIUBcaAHDp0iVMnjwZwcHBGD16NM6cOQPg4X/0AwcOxIYNGzBu3DgMGjQI+/btq/V9JiUl\noVu3burX3bp1Q0xMjLqQ+/rrrzFkyBBMnDgRa9asQUBAAADgzTffxKpVq9T7Pfr6z/L64IMPEBYW\nBgC4ePEipkyZghEjRiA0NBR3794F8HAk6q9//SuGDRuGsLAwPHjw4E96rHbbt2/HggULMGvWLHz8\n8cc4d+4cpk2bhtdee039x37//v0YO3YsgoOD8eyzzyI1NRUAsGLFCixZsgQhISFYv359jeO+9tpr\n+P7779Wv4+PjMXDgQKhUKnzxxRcICgpCUFAQnn32WWRkZNQ779GjR6O8vBzJyckAgM2bNyM4OBgB\nAQF44403UF5eDuDh5/7hhx9i3Lhx2L9/f41+qOvnUqVS4d///jeGDh2KkJAQJCQkqM97/vx5TJo0\nCaNHj8aoUaOwf//+eudO1OBEIqpTp06dxPT0dPXr/Px8cebMmeKqVatEURTFb7/9Vpw7d65YVVUl\nlpWViVOmTBF37twpKpVKcdSoUWJ0dLQoiqJ45coV0c/PTywqKhLPnj0rBgYG1nq+bdu2iYsXLxb/\n9re/qfctKioShw8fLkZFRYmLFy8WRVEUv/76a3HWrFliRUWFWFJSIk6cOFE8evSoKIqiOHbsWHHP\nnj2iKIrijh071Oe6e/eu2KVLFzEiIkIURVHct2+fOGLEiFrzeOWVV8Rhw4aJP/zwg3jz5s0abYmJ\niWLv3r3FzMxMsaqqSnz55ZfFYcOGiaIoiosXLxZXrlypjn30tba8vL29xe3bt6vfr5+fn3jq1ClR\nFEUxOjpanDRpkiiKohgZGSnOnDlTrKqqEnNzc8Vhw4apP5NHafuMf/+cu3fvLt6+fVsd7+PjI545\nc0YURVFMS0sTe/XqJaakpIiiKIrfffedOGvWLFEURXH58uXiwIEDxZycHI3j7t27V5w5c6b69Vdf\nfSUuXbpUTEpKEkeOHClWVlaKoiiKGzZsEHfs2FFnfr9/Lp07d9bY7ufnJ966dUv89ddfRX9/f/HB\ngweiKIri22+/LX700UeiKD783MeNGyeWl5erX69cuVLrz+WxY8fEkSNHisXFxWJZWZkYEhIihoWF\niaIoipMnTxbPnTsniqIo3r59W3zjjTe05k7UGDgCQ/QnwsPDERwcjOHDh2P48OHo168f5s6dCwA4\nduwYQkNDIZPJYGJignHjxuH06dO4d+8esrOzMWbMGACAj48PWrdujatXrz7WOceMGYM9e/YAAA4f\nPoxhw4ZBIvnfr+vPP/+MGTNmQC6Xw8zMDBMmTMDBgwcBADt37sSoUaMAAL169VKPXgBAdXU1Jk+e\nDADw9vbG/fv3az3/J598gpkzZyI6Ohpjx45FQEAAfvzxRwAPR0f8/Pxgb28PmUyGsWPHPtZ70pZX\nVVUVRowYoT6+o6OjesRp7NixSE1Nxf3793HhwgWMGDECMpkM1tbWNS6z/VF6ejqCg4NrfD06V8bV\n1RWurq7q1yYmJvD39wcAnD59Gn379kX79u0BAFOnTsW5c+dQXV0N4OGIlI2NjcY5hw4diuvXryM/\nPx8AcOjQIQQHB8PS0hK5ubmIjo5GQUEBwsPDMXHixMf63H4niiI2b94MR0dHuLq64ujRoxg9ejQc\nHR0BANOnT1f/DACAv78/jI2NaxxD28/lr7/+iiFDhsDc3BwmJibqvgIAW1tb7Ny5E7du3YKrqys+\n++yzeuVOpAucA0P0J36fA5Obm6u+/CGTPfzVyc3NhZWVlTrWysoKOTk5yM3NhUKhgCAI6rbf/4jZ\n2dn96TkHDBiAJUuWID8/H3v37sW8efPUE2oBoKioCB9++CE+//xzAA8vKfn6+gIAoqOjsWHDBpSU\nlEClUkF85HFnUqlUPflYIpFApVLVen5jY2PMmTMHc+bMQWFhIQ4cOIAPPvgAbdu2RUFBQY35OLa2\ntn/6fh4nLwsLCwBAYWEh7t69i+DgYHW7XC5Hbm4uCgoKoFAo1NstLS1RUlJS6/n+bA7Mo/32x9d5\neXk13qNCoYAoisjLy6t139+ZmZmhf//+OHbsGHr16oXCwkL06tULgiBgxYoV+P7777F06VL4+fnh\n3Xff/dP5REqlUv05iKKIjh07YtWqVZBIJCgqKsKhQ4dw6tQpdXtVVVWd7w+A1p/LgoICODg41Nj+\nuw8++ACrV6/G7NmzYWJigjfeeKNG/xDpAwsYosdkY2OD8PBwfPLJJ1i9ejUAwM7OTv3fNgDk5+fD\nzs4Otra2KCgogCiK6j8W+fn5j/3H3sjICMOGDcPOnTtx584d9OjRo0YB4+DggOeff15jBCIjIwNL\nlixBVFQUOnfujJSUFAQFBdXrfebm5iI+Pl49AmJpaYnQ0FCcPHkSSUlJUCgUKCoqqhH/uz8WRQUF\nBfXOy8HBAW5ubti+fbtGm6WlZZ3nbki2tra4dOmS+nVBQQEkEgmsra3/dN+goCAcOnQIeXl5CAoK\nUvd/v3790K9fP5SWlmLZsmX49NNP/3Qk44+TeB/l4OCASZMmYfHixfV6X3X9XGr7bO3s7PD222/j\n7bffxqlTp/DKK69g0KBBMDc3f+xzEzU0XkIiqofZs2fj0qVLOH/+PICHlwy2bt0KpVKJ0tJS7Nq1\nC0OGDEHbtm3h5OSkniQbGxuL7Oxs+Pr6QiaTobS0VH05oi5jxozB2rVra711efjw4YiKioJSqYQo\nili1ahVOnDiB3NxcmJmZwc3NDdXV1di8eTMA1DlKUZvy8nK8+uqr6smdAHDnzh1cvnwZvXv3Ro8e\nPXDhwgXk5uaiuroaO3fuVMfZ29urJ3/evXsXsbGxAFCvvLp164asrCxcvnxZfZy///3vEEUR3bt3\nx9GjR6FUKpGbm4sTJ0489vuqjwEDBuDChQvqy1w//fQTBgwYoB5502bYsGG4dOkSDh8+rL4Mc+rU\nKbz77rtQqVQwMzODl5dXjVGQJxEQEICDBw+qC43Dhw9jzZo1WvfR9nPZo0cPnDp1CmVlZSgrK1MX\nTlVVVQgPD0dmZiaAh5ceZTJZjUuaRPrAERiierCwsMCLL76IZcuWYevWrQgPD8fdu3cxZswYCIKA\n4OBgjBo1CoIg4PPPP8c///lPfP311zA1NcVXX30FMzMzeHp6wsrKCgMGDMCOHTvQunXrWs/Vp08f\nCIKA0aNHa7TNmDED9+7dw5gxYyCKIrp27YpZs2bBzMwMgwcPRlBQEGxtbfHmm28iNjYW4eHhWL58\n+WO9x9atW2P16tVYvnw53nvvPYiiCAsLC7z11lvqO5OeeeYZTJo0CdbW1hg5ciRu3LgBAAgNDcWC\nBQswcuRIdOnSRT3K4uXl9dh5mZiYYPny5Vi6dClKSkpgZGSE1157DYIgIDQ0FBcuXEBgYCBat26N\nwMDAGqMGj/p9Dswfffzxx3/6GTg5OeG9997DvHnzUFVVhbZt22Lp0qWP9flZWFjA29sbiYmJ6N69\nOwDAz88Pe/fuRVBQEORyOWxsbPDBBx8AABYtWqS+k6g+vL298dJLLyE8PBwqlQq2trZ49913te6j\n7edy2LBhOHbsGIKDg2FnZ4chQ4bgwoULMDIyQkhICJ577jkAD0fZlixZAlNT03rlS9TQBPHRC9FE\nRPV04cIFLFq0CEePHtV3KkTUgnAMkIiIiJocFjBERETU5PASEhERETU5HIEhIiKiJocFDBERETU5\nTfI26qys2m+bbAjW1mbIyyvV2fHpybFvDBP7xXCxbwwX++bx2Nsr6mzjCMwfyGRSfadAdWDfGCb2\ni+Fi3xgu9s3TYwFDRERETQ4LGCIiImpyWMAQERFRk8MChoiIiJocFjBERETU5LCAISIioiaHBQwR\nERE1OSxgiIiImpljx448VtxXX32G+/fT6mx/8803GiqlBscChoiIqBlJT7+Pw4djHiv2tdcWonXr\nNnW2f/TR5w2VVoNrko8SICIiotp9/vkyxMdfw6BBfhg5chTS0+/jyy9X4cMP/42srEyUlZXh+edf\nxIABg7BgwYt4441F+PnnIygpKUZq6h2kpd3Dq68uhL//AIwZMxx79x7BggUvws+vL2JjLyA/Px/L\nln0BOzs7/Pvfb+PBg3T4+Pji6NHD2LFjX6O9TxYwREREOrLl6E38mpCpsV0qFaBUik90TD8vB4QG\ndKyzffr0cGzfvgUdOrgjNTUFq1b9B3l5uejTpx9GjRqLtLR7ePvtNzFgwKAa+2VmZuDTT5fj7Nkz\n2LVrG/z9B9RoNzc3x1dfrcbq1Stw4sRRtG7dFpWVFVizZj1Onz6JLVt+fKL386RYwDwiO78M6QXl\ncLYy0XcqRERET61zZ28AgEJhifj4a9i9ezsEQYLCwgKNWF/f7gAABwcHFBcXa7R369ZD3V5QUIA7\nd27Dx6cbAMDffwCk0sZ9vhMLmEdEn0nBySvpeHWKL7p72Ok7HSIiauJCAzrWOlpib69AVlaRzs9v\nZGQEADh06AAKCwuxcuV/UFhYiBdeCNeIfbQAEUXN0aE/touiCInk4TZBECAIQkOnrxUn8T4isHc7\nyGUSfLf3OnILy/WdDhERUb1JJBIolcoa2/Lz8+Hs3BoSiQTHjx9FVVXVU5+nTZu2SEy8DgA4f/6s\nxjl1jQXMI9o5WGDuRB+UlFfjm13XUK1U6TslIiKiemnfvgMSExNQUvK/y0BDhwbgzJmTeO21l2Fq\nagoHBwesW7f2qc7Tv/8glJSU4OWX5+Dy5UuwtLR62tTrRRBrGycycLocdrOzs8B7353F+fhMjO7X\nHiFD3XV2Lqqfxhpypfphvxgu9o3hag59U1hYgNjYCxg6dDiysjLx2msvY9OmbQ16Dnt7RZ1tnAPz\nB4IgYFawF1IeFGHf2TvwdGkFHzdbfadFRERkUMzMzHH06GFs2hQBUVThlVcad9E7jsD8we9V8Z0H\nRXg/4gJM5DK8+3wfWCuMdXZOejzN4T+W5oj9YrjYN4aLffN4tI3AcA5MHdo7KfBMgAeKy6qwZvc1\nKFWcD0NERGQodFrAJCUlITAwEJGRkTW2nzx5Ep6enurXu3fvxpQpUzB16lRERUXpMqV6CejZBr06\n2SPxbj6iT6foOx0iIiL6L50VMKWlpVi6dCn8/f1rbK+oqMCaNWtgb2+vjlu5ciXWr1+PiIgI/PDD\nD8jPz9dVWlrtv30YC/f/GyVVpQAezoeZPdoLdlYmiD6dguspuXrJi4iIiGrSWQEjl8uxdu1aODg4\n1Nj+zTffYMaMGZDL5QCAy5cvw8fHBwqFAiYmJujZsydiY2N1lZZWxlI57hamY9uNaPU2MxMjvDSh\nKyQSAWuir6OgpFIvuREREdH/6OwuJJlMBpms5uFv376NhIQEvPbaa/jkk08AANnZ2bCxsVHH2NjY\nICsrS+uxra3NIJM1/JLFIbbBuJRzBeceXMQwj77o2doHwMNJRM/ll+O73XH44UAi/vWiP6SSxl1x\nkB7SNqGL9If9YrjYN4ZL330TEBCA6OhobNy4EX5+fujRo4e6raSkBOPGjcPRo0fr3D8mJgZBQUHY\nvn07FAoFRowY0RhpqzXqbdQffvghlixZojXmcW6KyssrbaiUNMzr8ywWH/wQ35zfiCV934CpzBQA\n0L+zPS5et8NvN7LwQ3QcxvV31VkOVDvO2jdM7BfDxb4xXIbQN0qlCtnZxZg0aTqAmnf4lpaWQqlU\n1Zljevp9bN++Ez179segQSM09m8oBrEOTEZGBpKTk/G3v/0NAJCZmYmwsDC88soryM7OVsdlZmai\ne/fujZWWBpdWbRDsGoC9tw9h+429mNk5BMDD+TDPj+mMf607j50nk9GprRU8Xaz1licREVFtnn9+\nJj744DM4OTnhwYN0vPXWQtjbO6CsrAzl5eV4/fW/o0uXrur499//F4YOHY7u3XvgH/9YhMrKSvWD\nHQHg4MH92Lp1M6RSCVxd3bF48T/w+efLEB9/DevWrYVKpUKrVq0wZcozWLXqK1y9ehnV1UpMmRKK\n4OAxWLDgRfj59UVs7AXk5+dj2bIv4OTk9NTvs9EKGEdHRxw+fFj9OiAgAJGRkSgvL8eSJUtQWFgI\nqVSK2NhY/N///V9jpVWrke2H4besOJxJP4+ejr7obNMJAGBhaoSXxnfFRxtj8e3ua/jX831gaSbX\na65ERGS4tt/cg0uZVzW2SyUClKonW4ath4MPJnccW2f74MHDcPr0CUyZEoqTJ49j8OBhcHf3wODB\nQ3Hx4q/YuPEHvP/+Jxr7xcTsh5ubO159dSGOHDmIw4djAABlZWX47LMVUCgUmD9/Lm7duonp08Ox\nffsWzJ49F9999y0A4LffYpGcfAurV3+PsrIyzJo1DYMHDwUAmJub46uvVmP16hU4ceIoQkNnPNF7\nf5TOJvHGxcUhPDwcO3bswIYNGxAeHl7r3UUmJiZYuHAh5syZg9mzZ2P+/PlQKPR7XVAmkSGs81RI\nBAk2JWxDefX/HuzYsa0VJg9xQ35xJb7bEw9V01sHkIiImrGHBcxJAMCpU8cxcOAQHD9+BC+/PAer\nV69AQUFBrfulpCSja9duAIAePXqpt1taWuKttxZiwYIXcefObRQU1H6ncELCdXTv3hMAYGpqCldX\nN9y9excA0K3bw/k1Dg4OKC4urnX/+tLZCEzXrl0RERFRZ/ujE4OCg4MRHBysq1SeiIuiLUa6DMWB\nO0ex69Z+POM5Sd0W3NcFCal5uJqcg5hzqRjVr70eMyUiIkM1uePYWkdLdDkHxs3NHTk5WcjIeICi\noiKcPHkMdnYOePvtpUhIuI6vv/6y1v1EEZD89wYV1X9Hh6qqqvD55x9j/fpNsLW1w6JFf63zvIIg\n4NH/6aurq9THk0r/d+NNQz0AgCvxahHcIRBO5o44kfYLkvJuqbdLBAEvjO2CVhZybDuejJv3aq9m\niYiI9MHffyDWrFmFQYOGoKAgH23atAUAHD/+M6qrq2vdx8WlPRIS4gEAsbEXAAClpSWQSqWwtbVD\nRsYDJCTEo7q6GhKJBEqlssb+Xl7euHTp4n/3K0Va2j20beuiq7fIAkYbI4kM4Z2nQoCAjfFRqFD+\nbw0YSzM5/jLeGyJEfLs7DsVlVXrMlIiI6H+GDBmGw4djMHTocAQHj8HmzRvx+uvz4e3dFTk5Odi7\nd7fGPsHBY3Dt2lW89trLuHv3DgRBgJVVK/j59cULLzyLdevWYsaMcCxf/jnat++AxMQELF/+mXr/\nbt26w9PTC/Pnz8Xrr8/HSy8tgKmpqc7eIx/m+Ae1DevtuLkXh1OPY1i7gQjxGF+jbffp29h58ja6\nd7TDK1N8IAhcH0ZXDOG2Q9LEfjFc7BvDxb55PHyY41Ma02EkHMzscOzuadzKT6nRNtbfFZ3bW+O3\nm9k4dOGefhIkIiJqYVjAPAa51AhhXqEAgMiELahU/u9ykUQi4MVxXWBpLkfUzzdxO71QX2kSERG1\nGCxgHpN7K1cMbTsAmaXZ2Hf7UI02KwtjzB3XBSqViNU741BazvkwREREusQCph7GuQfDzsQGh1OP\nI6UwtUabt6sNxvR3RXZBOdbvT2iw28SIiIhIEwuYejCWyjGz81SIEBEZH4UqVc1b0SYMdEWndq1w\nITELP19K01OWREREzR8LmHrqZO2OQW38kV6SgQMpR2q0SSUS/GW8NyxMjfDTkRu484AzzImIiHSB\nBcwTmOg+CtbGrXDwzs+4W1RzpMVaYYwXxnZBtVLE6l1xKKuofcEgIiIienIsYJ6AicwEM71CoBJV\niIjfAqWq5mqEvu62GNXXBZl5ZdgQk8j5MERERA2MBcwT6mzbCf7OfkgrTsfBOz9rtE8a7Ab3NpY4\ndz0DJ6+k6yFDIiKi5osFzFOY3HEsrOSW2J9yBGnFNYsUmVSCl8Z3hbmJDBsPJeFeZsM8fZOIiIhY\nwDwVMyNTTPeaDKWoRGR8lMalJFsrEzw/pjOqqlVYvSsOFZXKOo5ERERE9cEC5in52HWBn2NPpBbd\nw5G7JzTae3jYY6RfO6TnlCLyYKIeMiQiImp+WMA0gKmdxkMht8De24fwoCRToz1kqDs6OCtwOu4B\nTl/lfBgiIqKnxQKmAZgbmWGa52RUq6oRGR8Flaiq0S6TSvDShK4wNZYh4mAi7meX6ClTIiKi5oEF\nTAPpbt8VPR18cbvwDo7dPaXRbt/KFLNHeaGy6uF8mMoqzochIiJ6UixgGlBop4mwMDLH7uQYZJZm\na7T39nJAQM82SMsqwabDN/SQIRERUfPAAqYBKeQWCO00AVWqKmxM0LyUBADPBHSEi4MFTly+j7PX\nH+ghSyIioqaPBUwD6+nQDd3svHEz/zZOpp3VaDeSSfHyxK4wlkvxw4FEZOSW6iFLIiKipo0FTAMT\nBAHPeE6GmcwUO2/tQ3ZZrkaMo40ZZgV7oqJSidU741BVzfkwRERE9cECRgesjBUI8RiPSmUlNiVs\nrfVZSP26OGFwt9ZIzSzG5qM39ZAlERFR08UCRkf6OPWEt60XEvNu4sz987XGTA/0QBt7cxyNTcOF\nBM31Y4iIiKh2LGB0RBAETPecDBOpCbbf3IO88nyNGGMjKV6e0BVyIwnW7Y9HZn6ZHjIlIiJqeljA\n6JC1SStM8RiLcmUFNiVuq/VSUms7c4SP9ERZhRLf7opDtVLzziUiIiKqiQWMjvk7+8HL2gPXcxJx\n7sHFWmMG+DhjQFcn3E4vwtZjtxo5QyIioqaHBYyOCYKAGV4hMJbKsfVGNPIrCmqNCxvpCWdbMxz8\n9S4u3chq5CyJiIiaFp0WMElJSQgMDERkZCQA4NKlS5g+fTrCw8MxZ84c5OY+vMXY29sb4eHh6i+l\nsnndVmxrao2J7mNQVl2GnxJ31HopyVj+cD6MkUyC7/fGI6egXA+ZEhERNQ06K2BKS0uxdOlS+Pv7\nq7etW7cOH3/8MSIiItCjRw9s2bIFAGBhYYGIiAj1l1Qq1VVaejOwTV94tHLD1ezruJjxW60xbR0s\nMHNEJ5SUV+Ob3ZwPQ0REVBedFTByuRxr166Fg4ODetvy5cvRrl07iKKIjIwMODk56er0BkciSDDT\nayrkEiNsubELhZVFtcYN8nVG3y6OuJVWiB0nkhs5SyIioqZBprMDy2SQyTQPf+LECbz//vtwc3PD\n+PHjAQCVlZVYuHAh0tLSEBQUhNmzZ2s9trW1GWQy3Y3S2NsrdHNcKDCjYiLWX4rCrjt78Ub/ubXG\nvTGzF/76xXHsP5eKPj6t0buzo07yaYp01Tf0dNgvhot9Y7jYN09HEGubkNGAVqxYAWtra4SFham3\niaKITz/9FAqFAi+99BJ+/PFHjB8/HoIgICwsDO+++y58fHzqPGZWVu2jFw3B3l6h0+OrRBW+iF2N\n5II7eKFrOHo41P4+7zwowvsRF2Ail+Hd5/vAWmGss5yaCl33DT0Z9ovhYt8YLvbN49FW5DXqXUiH\nDh0C8PDOnKCgIFy8+PC24unTp8Pc3BxmZmbo168fkpKSGjOtRiURJAjzmgojiQybE3eguLKk1rj2\nTgpMG+6B4rIqfLsrDkoV58MQERH9rlELmBUrViA+Ph4AcPnyZXTo0AHJyclYuHAhRFFEdXU1YmNj\n4eHh0ZhpNTpHcweM6TASRVXF2Hpjd51xw3q0QW9PeyTdK8CuUymNlyAREZGB09kcmLi4OCxbtgxp\naWmQyWSIiYnBe++9h3fffRdSqRQmJib4+OOPYWtrCycnJ4SEhEAikSAgIAC+vr66SstgBLQbhEuZ\nV/FrxiX0cuwGH7suGjGCIOC5UZ2R8qAIe8+kwNOlFbxdbfSQLRERkWHR+RwYXWjKc2Aedb/4AZb9\n+hXMjcywpO9CmBmZ1Rp3O70QH0RchLmpEd6d7Qcri5Y5H4bXjA0T+8VwsW8MF/vm8RjMHBiqqbWF\nE0Z1CERBZRG23dxTZ1wHZ0tMHdYRhSWVWBN9HSpVk6s5iYiIGhQLGD0b4TIU7Sxa42z6BVzLSaw7\nrndbdO9oh/g7edjzS0qj5UdERGSIWMDomVQiRVjnUEgECTYlbEVZde2PEBAEAc+P6QxbS2PsOnUb\nial5jZwpERGR4WABYwDaKlojqH0A8isKsPPm3jrjLEyN8JcJXSFAwLe7r6GwtLIRsyQiIjIcLGAM\nRLBrAFqbO+HU/XNIzL1ZZ1yj47LTAAAgAElEQVTHNlaYMsQN+cWV+E/0daia3hxsIiKip8YCxkDI\nJDKEdZ4KiSDBxoQolFdX1Bkb1NcFPm62iLudiwPnUhsxSyIiIsPAAsaAtLdsh0CXIcgpz8Pu5AN1\nxkkEAXPGdkYrCzm2H0/GjXv5jZglERGR/rGAMTCjXQPhaOaA4/dO42b+7TrjLM3k+Mt4b4gQ8e3u\nayguq2rELImIiPSLBYyBMZIaIazzVAgQEBm/BZXKuifqerpYY+LADsgtrMD3e+PRBNckJCIieiIs\nYAyQm1V7DGs3EFllOdiTfFBr7Bh/V3RxtcZvN7Nx6Ne7jZQhERGRfrGAMVDj3IJgb2qLo3dP4nbB\nnTrjJBIBc8d5w9Jcjqhjt5B8v7ARsyQiItIPFjAGSi6VY6bXVIgQEREfhSpl3XNcrMzleHFcF6hU\nIr7ZFYfScs6HISKi5o0FjAHzsHbDkLb9kVGaiX0ph7XGdnG1wbgBrsguKMe6fQmcD0NERM0aCxgD\nN95tFGxNrHE49ThSC+9pjx3QAZ7tWuFiUhaOxqY1UoZERESNjwWMgTORGWOGVwhUogoR8VtQraqu\nM1YiEfDieG9YmBph89EbuPOAj2onIqLmiQVME+Bl44EBrfvifskDxKQc1RprrTDG3HFdUK0UsXpn\nHMoq6i54iIiImioWME3EpI6j0crYCgfuHMW9ovtaY33cbDG6X3tk5pdh+4nkRsqQiIio8bCAaSJM\nZabqS0mR8VugVCm1xk8c1AFONmY4GnuPl5KIiKjZYQHThHjbeqKfU2/cLb6PQ6nHtcbKpBKEjewE\nUQQ2xCTyqdVERNSssIBpYqZ4jIWVXIH9tw/hfvEDrbFdXG3Qt4sjbqcX4sRl7ZediIiImhIWME2M\nmZEZpnlORrWoRGRC1J9eSnomoCNM5FJsO3YLhaV1P1eJiIioKWEB0wT52nujt2N33Cm8i5/vndIa\n28rCGJMGuaGkvBpbj91qpAyJiIh0iwVMEzXVYwIURhbYkxyDjNIsrbEBvdqgnYMFTl1Jx417+Y2U\nIRERke6wgGmiLOTmCPWciCpVNSLjo6ASVXXGSiUShAd5AgAiYhKhVNUdS0RE1BSwgGnCejr4ooe9\nD5ILUnD83hmtsR3bWGFwN2fcyyrBkQvaH0lARERk6FjANHGhnhNhbmSG3bf2I6s0R2tsyNCOsDA1\nwo5Tt5FXVNFIGRIRETU8FjBNnKVcgakeE1CpqsLGBO2XkixMjRAy1B0VlUpsPnqjEbMkIiJqWCxg\nmoHejt3hY9cFN/KTcfr+Oa2xA32d4d7aEufjM3Htdm4jZUhERNSwdFrAJCUlITAwEJGRkQCAS5cu\nYfr06QgPD8ecOXOQm/vwD+ju3bsxZcoUTJ06FVFRUbpMqVkSBAHTPCfBVGaKHTf3Iqcsr85YiSAg\nPMgTggBEHkxEVTUn9BIRUdOjswKmtLQUS5cuhb+/v3rbunXr8PHHHyMiIgI9evTAli1bUFpaipUr\nV2L9+vWIiIjADz/8gPx83upbX62MrTDFYxwqlJXYlLAVopZHB7g4KjC8V1tk5JXhwLk7jZglERFR\nw9BZASOXy7F27Vo4ODioty1fvhzt2rWDKIrIyMiAk5MTLl++DB8fHygUCpiYmKBnz56IjY3VVVrN\nWj+nXuhi44mEvBv4Jf2C1thJg9xgZSHHnl/uICu/rJEyJCIiahg6K2BkMhlMTEw0tp84cQLBwcHI\nzs7G+PHjkZ2dDRsbG3W7jY0NsrK0L8xGtRMEATO8psBEaoztN6ORX1FQZ6ypsQzPBHREVbUKGw8l\naR2xISIiMjSyxj7h4MGDMWjQIHz66adYs2YN2rRpU6P9cf6QWlubQSaT6ipF2NsrdHZsXbOHAs9W\nTsGaC5uwLXkXFg+aB0EQao0dO9gCZ69n4srNbCRnlqBfV+dGzrb+mnLfNGfsF8PFvjFc7Jun06gF\nzKFDhzBixAgIgoCgoCCsWLECPXr0QHZ2tjomMzMT3bt313qcvLxSneVob69AVlaRzo7fGHwV3eBp\nfR6x6XHYe/U4+jr3qjP2mWHuuJacg2+2XUZba1MYy3VXGD6t5tA3zRH7xXCxbwwX++bxaCvyGvU2\n6hUrViA+Ph4AcPnyZXTo0AHdunXD1atXUVhYiJKSEsTGxqJ3796NmVaz8/BSUgjkEiNsuxGNwsq6\nf0mcbc0R3NcFOYUViD6T0nhJEhERPQWdjcDExcVh2bJlSEtLg0wmQ0xMDN577z28++67kEqlMDEx\nwccffwwTExMsXLgQc+bMgSAImD9/PhQKDqs9LTtTG0xwH42oG7uwJXEnXvAJrzN2bH9XnL2WgZjz\nqejf1Qmt7cwbMVMiIqL6E8QmOHtTl8NuzWlYTyWq8EXsN0guSMGcrmHo6eBbZ+ylG1lYse0qvFxa\n4e/Te9Q5b0afmlPfNCfsF8PFvjFc7JvHYzCXkKhxSQQJwrxCIJPIsCVxJ4qrSuqM7eFhj+4d7ZCQ\nmo9z1zMaMUsiIqL6YwHTzDmaO2Bsh5EoqirGthvRWmOnB3pALpPgp6M3UVpe3UgZEhER1R8LmBYg\noN0guCja4PyDWMRlx9cZZ9/KFGP7u6KwpBI7TiY3YoZERET1wwKmBZBKpAjrHAqpIMWPidtRVl33\nyrtBfVzgaGOGo7H3cOcBr88SEZFhYgHTQrSxcEaQawDyKwqw4+a+OuOMZBKEjewEUQQiDiZC1fTm\neBMRUQvAAqYFCWo/DK3NnXD6/jkk5N6oM87b1QZ9Ojsg+X4hTl6+34gZEhERPR4WMC2ITCJDWOep\nECBgU8I2VCgr64x9JsADJnIpth67haLSuuOIiIj0gQVMC9Pesh0CXYYgpzwX0bcO1BlnrTDGpEFu\nKCmvxtZjtxoxQyIioj/HAqYFGt1hBBzM7HDs3mncyk+pMy6gVxu0c7DAySvpuHmv7idbExERNTYW\nMC2QXGqEMK9QAMDGhChUKatqjZNKJAgf6QkA2BCTCKVK1Wg5EhERacMCpoVyb+WKIW37I6M0C/tS\nDtcZ17GtFQb5OuNeVjGOXExrxAyJiIjqxgKmBRvnFgxbE2scTj2O1MJ7dcaFDHWHuYkMO08mI6+o\nohEzJCIiqh0LmBbMRGaMGV4hUIkqRCZEoVpV++MDFGZyTB3WEeWVSmw+Wvft10RERI2FBUwL52Xj\ngQGt+yCtOB0H7/xcZ9xAX2e4t7bE+fhMXEvJbcQMiYiINLGAIUzqOAatjK1wIOUo7hc/qDVGIggI\nG+kJQQAiDyahqpoTeomISH9YwBBMZaaY5jkJSlGJyPgoKFXKWuPaOykwvGdbZOSW4sD51EbOkoiI\n6H9YwBAAwMeuC/wce+JO0V0cvXuyzriJg9xgZS7HnjMpyMqv+6GQREREusQChtRCOo2DwsgCe28f\nREZpVq0xZiYyPBPQEVXVKvx4mBN6iYhIP1jAkJqFkTlCPSeiSlWNjfFRUIm1z3Pp28URXi6t8NvN\nbFy6UXuhQ0REpEssYKiGng6+6G7fFbcKUnAi7ZdaY4T/TuiVSgRsOnQDFZW1z5khIiLSFRYwpCG0\n0ySYyUyx69Z+5JTVfst0aztzBPd1QU5hOfb8ktKo+REREbGAIQ1WxgqEeIxHpbISmxK2QRTFWuPG\n9neFraUJDpxLRXpOSSNnSURELRkLGKpVH6ee6GLriYS8G/gl/ddaY4yNpJgR6AGlSkTkwaQ6Cx0i\nIqKGxgKGaiUIAmZ4ToGJ1BjbbuxBfkVBrXHdPezQzd0W8XfycC4+o5GzJCKilooFDNXJ2qQVJnUc\ng3JlOX5M2F7rCIsgCJgxohOMZBJsPnITpeW1P0+JiIioIbGAIa0GtO6LTq3cEZcTjwsZv9UaY9/K\nFGP7u6KgpBI7TyY3coZERNQSsYAhrQRBwAyvEMglRoi6sQtFlcW1xgX3cYGjjRmOxN5DakZRI2dJ\nREQtDQsY+lP2ZrYY7z4KJVWl2JK0s9YYI5kEYSM7QRSBiJhEqDihl4iIdIgFDD2WIW37o4Nle8Rm\nXsFvWXG1xni72qBPZwfcul+IU1fSGzlDIiJqSXRawCQlJSEwMBCRkZEAgPT0dDz33HMICwvDc889\nh6ysh8vQe3t7Izw8XP2lVHJlV0MjESQI6zwVMokMmxN3oKSqtNa4ZwI8YCKXIurnmygqrWzkLImI\nqKXQWQFTWlqKpUuXwt/fX73tyy+/RGhoKCIjIzFixAisW7cOAGBhYYGIiAj1l1Qq1VVa9BSczB0w\nxnUECiuLsO1GdK0x1gpjTBzkhpLyamw9dquRMyQiopZCZwWMXC7H2rVr4eDgoN72z3/+E0FBQQAA\na2tr5Ofn6+r0pCPDXQajnaINzj24iGs5CbXH9GqDtvYWOHklHTfTal8/hoiI6GkIoo6XT12xYgWs\nra0RFham3qZUKjFr1izMnz8f/v7+6NGjBwICApCWloagoCDMnj1b6zGrq5WQyThKoy8peffw1qEP\n0crUCp8Fvw0zI1ONmOu3c7D461Po0NoSX/x1CKRSTrciIqKGI2vsEyqVSixatAj9+vVTX15atGgR\nxo8f//Apx2Fh6N27N3x8fOo8Rl5e7fMvGoK9vQJZWbwNWBtzWGFk+wDsTzmM/5zbgumekzVi7C3k\nGOjrjFNX0rE5JgEj/No99XnZN4aJ/WK42DeGi33zeOztFXW2Nfq/xW+99Rbat2+PBQsWqLdNnz4d\n5ubmMDMzQ79+/ZCUlNTYaVE9BbsGwNncEafSziIpr/a5LlOHusPcRIYdJ5ORV1TRyBkSEVFz1qgF\nzO7du2FkZIRXX31VvS05ORkLFy6EKIqorq5GbGwsPDw8GjMtegIyiQxhnadCgICN8VGoUGrecaQw\nkyNkqDvKK5XYfPSGHrIkIqLmSmeXkOLi4rBs2TKkpaVBJpMhJiYGOTk5MDY2Rnh4OADA3d0d//rX\nv+Dk5ISQkBBIJBIEBATA19dXV2lRA3K1dEGAyyAcST2BPckxmOIxTiNmULfWOHklHefjMzG4Wy66\nuNroIVMiImpudD6JVxd0ed2Q1yXrp1JZhQ/Pf4Gsshy80Wse3Kzaa8TceVCEf//wKxytzfDu831g\nJHuygT/2jWFivxgu9o3hYt88HoOaA0PNi1xqhJmdp0KEiI3xUahSVmnEtHdSIKBnWzzILUXM+VQ9\nZElERM0NCxh6ah1bdcDgNv3xoDQT+1OO1BozaZAbLM3l2HMmBdn5ZY2cIRERNTcsYKhBTHAPho2J\nNQ6lHkNq0T2NdjMTGaYFdERltQqbDnNCLxERPR0WMNQgTGQmmOE1BSpRhcj4KChVms+z6tvFEV4u\nrfDbzWxcupGlhyyJiKi5YAFDDaazTSf4O/shrTgdB+8c02gXBAFhIz0hlQjYdOgGKqr40E4iInoy\nLGCoQU3uOBZWcgX2pxzG/eIHGu2t7cwR1McFOYXl2HMmpfETJCKiZuGJC5iUlJQGTIOaCzMjU0zz\nnAylqERkQhRUokojZlx/V9haGuPAuVSk55ToIUsiImrqtBYwf3yo4qpVq9Tfv/POO7rJiJo8X3tv\n9HbsjjuFd3H07kmNdmO5FDMCO0GpEhF5MAlNcCkiIiLSM60FTHV1dY3XZ8+eVX/PPzqkzVSPCbAw\nMsee5BhklmpO2O3uYQdfd1vE38nD+fhMPWRIRERNmdYCRhCEGq8fLVr+2Eb0KAu5OUI7TUSVqhob\nE7ZqXEoSBAEzRnSCkUyCn47cQGl5dR1HIiIi0lSvOTAsWqg+ejr4opudN27m38aptLMa7Q6tTDHW\nvz0KSiqx81SyHjIkIqKmSuvDHAsKCvDLL7+oXxcWFuLs2bMQRRGFhYU6T46aNkEQ8IznJCTlJ2Pn\nrX3wtu0MW1PrGjHBfdvjTNwDHLl4DwN9nOHiWPdzL4iIiH6ndQTG0tISq1atUn8pFAqsXLlS/T3R\nn7EytkSIxzhUKCvxY+I2jblTRjIJwkZ6QhSBiIOJUHFuFRERPQatIzARERGNlQc1Y32deuFixmVc\nz03E2fQL8G/tV6Pdu4MN/Lwc8GtCJk5dScfgbq31lCkRETUVWkdgiouLsX79evXrn376CRMmTMCr\nr76K7OxsXedGzYQgCJjuNRnGUjm23dyD/IoCjZhpwz1gLJci6uebKCqt1EOWRETUlGgtYN555x3k\n5OQAAG7fvo3PP/8cixcvRv/+/fH+++83SoLUPNiYWGOi+xiUVZfhp8QdGpeSrBXGmDSwA0rKq7Ht\n+C09ZUlERE2F1gLm7t27WLhwIQAgJiYGwcHB6N+/P6ZNm8YRGKq3gW36wqOVG65mX8fFzMsa7cN7\nt0VbewucuJyOm2maozRERES/01rAmJmZqb8/f/48+vXrp37NW6qpviSCBDO8QmAkMUJU0i4UVRbX\naJdKJAgP6gQAiIxJhFKl+RgCIiIi4E8KGKVSiZycHKSmpuLSpUsYMGAAAKCkpARlZWWNkiA1Lw5m\ndhjnFoTiqhJEJe3SaPdo2woDfZyRmlmMo7FpesiQiIiaAq0FzNy5czF69GiMGzcO8+bNg5WVFcrL\nyzFjxgxMnDixsXKkZmZYu4FwtXTBxczLuJx1TaM9ZJg7zE1k2HEiGfnFFXrIkIiIDJ3WAmbIkCE4\ndeoUTp8+jblz5wIATExM8Pe//x0zZ85slASp+ZEIEoR1ngqZIMXmxO0orSqt0W5pJseUoe4or1Ri\n89GbesqSiIgMmdYC5v79+8jKykJhYSHu37+v/nJzc8P9+/cbK0dqhpzNHTGqQyAKKouw7eYejfbB\n3Vqjg7Mlzl3PQHxKrh4yJCIiQ6Z1IbuAgAB06NAB9vb2ADQf5rhhwwbdZkfN2giXobiUeRVn0y+g\nl0M3dLH1VLdJBAHPBnni3z/8ioiDSfj3nD56zJSIiAyN1hGYZcuWwdnZGRUVFQgMDMRXX32FiIgI\nREREsHihpyaVSBHWORQSQYJNCdtQXl1eo729kwIBPdriQW4pYs6n6ilLIiIyRFoLmAkTJuD777/H\nl19+ieLiYsycORMvvPACoqOjUV5erm1XosfSTtEaI12GIq8iH7tu7ddonzS4AyzN5Yg+nYKM3NJa\njkBERC2R1gLmd87Ozpg3bx7279+PoKAgvPfeexg4cKCuc6MWIrhDIJzMHHAi7RfcyKu5Cq+ZiRGe\nCeiIymoVlm++xLVhiIgIwGMWMIWFhYiMjMTkyZMRGRmJv/zlL9i3b5+uc6MWwkgiQ1jnUAgQsDFh\nKyqVNZ+F1K+LI3p42OHKzWz8dIR3JRER0Z9M4j116hS2bduGuLg4jBw5Eh999BE6derUWLlRC9LB\nygXD2g3E0bsnsSf5ICZ7jFW3CYKAF8Z2wcc/XsKRi/fQ1t4cQ7q30WO2RESkb4L4x6fqPcLLywuu\nrq7o1q0bJBLNwZoPP/xQ68GTkpIwb948PPfccwgLC0N6ejreeustVFdXQyaT4ZNPPoG9vT12796N\nH374ARKJBKGhoZg6darW42ZlFT3m26s/e3uFTo9PdatUVuL9818gpywXC3vNRwcrlxrtSokEr39x\nHGUV1fj79B7o1K6VnjKlR/F3xnCxbwwX++bx2Nsr6mzTOgLz+51GeXl5sLa2rtF27949rSctLS3F\n0qVL4e/vr9725ZdfIjQ0FKNHj8bGjRuxbt06LFiwACtXrsTWrVthZGSEkJAQjBgxAq1a8Y9TSyOX\nyhHmFYIvL32LyIQovOn3Gowk//sRdbI1x7yJXfHZ5t+wcsdVvD2rN+ysTPWYMRER6YvWOTASiQQL\nFy7E22+/jXfeeQeOjo7o06cPkpKS8OWXX2o9sFwux9q1a+Hg4KDe9s9//hNBQUEAAGtra+Tn5+Py\n5cvw8fGBQqGAiYkJevbsidjY2AZ4a9QUeVi7Y1AbfzwoycCBlCMa7V7trTEj0ANFpVVYvvUqyiur\n9ZAlERHpm9YRmC+++ALr16+Hu7s7jhw5gnfeeQcqlQpWVlaIiorSfmCZDDJZzcP//nRrpVKJTZs2\nYf78+cjOzoaNjY06xsbGBllZWVqPbW1tBplMqjXmaWgbsiLde6FVKOIPJOLQnZ8R0KkvXK3bqdvs\n7RUIDeqM7OJK7D+TgohDN/Dms36QSPh0dH3i74zhYt8YLvbN09FawEgkEri7uwMAhg8fjg8//BCL\nFy/GiBEjnviESqUSixYtQr9+/eDv74/o6Oga7Vqm5Kjl5eluPRBelzQMz3hMwsrL32HFmfX4e+9X\nIJVIa/TNpAGuuH0vH79cTcd3O69g4iA3PWfccvF3xnCxbwwX++bxaCvytF5CEoSa/9U6Ozs/VfEC\nAG+99Rbat2+PBQsWAAAcHByQnZ2tbs/MzKxx2Ylapi62nujn1Bt3i+/jUOpxjXaZVIKXJ3aFnZUJ\ndp9OwYWETD1kSURE+vJY68D87o8FTX3t3r0bRkZGePXVV9XbunXrhqtXr6KwsBAlJSWIjY1F7969\nn+o81DxM8RgLS7kC+28fwoOSDI12hZkcr4b4wlguxX/2XkdqBv+bISJqKbTeRu3j4wNbW1v165yc\nHNja2kIURQiCgGPHjtV54Li4OCxbtgxpaWmQyWRwdHRETk4OjI2NYWFhAQBwd3fHv/71Lxw4cADf\nffcdBEFAWFgYxo8frzVp3kbdclzOisOaqxvQwdIFHwYtRk5OiUbMpaQsrNh+FTaWxnh7lh+szOV6\nyLTl4u+M4WLfGC72zePRdglJawGTlpam9cBt2uhnMTEWMC3L93EbcTHzMmb6TkJ/O/9aY6LPpGDH\niWR0bGuFRdN7QCat1+AiPQX+zhgu9o3hYt88nideB0ZfBQrRo6Z2moCk/FvYdGUnzHwU6G7fVSNm\nrH97pGUV43x8JiJiEvHcKK+nvuRJRESGi/+mksFTyC0wz/d5yGVyrLu2CTfzb2vECIKA2aM7o72j\nAievpOPwRe0LLRIRUdPGAoaaBBfLtljYfy5UogrfXllf66ReYyMpXpniA0tzOX46cgPXbufqIVMi\nImoMLGCoyeju7I0ZXiEorS7D1799h/yKAo0YG0sTLJjsA6lEwOqdccjI1d2aQUREpD8sYKhJ8Xfu\njbEdgpBXkY9Vl79HWXW5RkzHNlaYFeyF0opqLN92BaXlfNwAEVFzwwKGmpxg1wAMbN0XacXp+M/V\nCFSrNAuUAT7OCOrTDuk5pVgTfQ0q1Z+v8ExERE0HCxhqcgRBQGinifCx64KEvBuIjI+CSlRpxE0d\n2hFd3Wxw5VYOth6/pYdMiYhIV1jAUJMklUjxvPcMdLB0wa8Zl7D71gGNGIlEwEvjveFkY4YD51Jx\nJi5dD5kSEZEusIChJksuleMl39lwMLXDodRjOHbvtEaMmYkRXg3xhamxDOv3J+LWfc2Jv0RE1PSw\ngKEmzUJujvnd50Aht8DWpN34LfOqRoyTjRlenuANpUqFr7ddRV5RhR4yJSKihsQChpo8O1NbzPN9\nHkZSI6y7/mOtC911dbPFM8M6oqCkEiu2XUFllVIPmRIRUUNhAUPNgotlW7zQNVzrQncj/NphoI8z\nUh4UYd3+BGh5DBgRERk4FjDUbHjbemKmloXuBEFAeJAn3NtY4tz1DOw7e0dPmRIR0dNiAUPNSj/n\n3hjnVvdCd0YyCRZM8oG1whjbjyfjtxvZesqUiIieBgsYanaC2gdgYJt+SCtOx9qrGzQWurOyMMar\nU3xhJJPg2+hrSMsq1lOmRET0pFjAULMjCAKe6TQRvnbeSMy7WetCd+2dFHh+TGdUVCqxfNsVFJdV\n6SlbIiJ6EixgqFmSCBLM9p6udaG7Pp0dMba/K7Lyy7Fqx1VUKzVX8yUiIsPEAoaaLfVCd2b/Xeju\nruZCdxMHdUAPDzskpObjpyM39JAlERE9CRYw1KxZyM0xv9sLDxe6u7Ebl/6w0J1EEDB3XBe0tTfH\n0dg0HLuUpqdMiYioPljAULNnZ2qDed2eh1xqhPW1LHRnIpfhlSm+sDA1wsZDSUhMzdNTpkRE9LhY\nwFCL4KJoi7ldn1UvdJf+h4Xu7FuZYv6krgCAlTvikJ1fpo80iYjoMbGAoRajs20nhHlNRWl1GVbW\nstCdp4s1Zo7ohOKyKizfdgXlldV1HImIiPSNBQy1KH2de2G8W/AjC93VHGkZ2qMNAnq2wb2sEqyN\nvg4VHzdARGSQWMBQizOy/TAMauOPtOJ0rLkaobHQ3bThHvByaYVLN7Kx66TmgyGJiEj/WMBQiyMI\nAkI7TUA3O28k5d1ERPyWGgvdyaQSzJvkA/tWJog+k4Lz8ZoPhiQiIv1iAUMtkkSQ4DnvGXCzao8L\nGb9h1639NdotTI3w6hRfGMul+H5vPO48KNJTpkREVBsWMNRiyaVG+Ivvc3A0s8fh1OP4+e6pGu1t\n7C3wl3HeqKpWYfm2KygoqdRTpkRE9EcsYKhFszAyx/xuc2ApV2DbjWjEZl6p0d7dww6Th7ghr6gC\nK7dfRVU1HzdARGQIdFrAJCUlITAwEJGRkeptGzZsgLe3N0pKStTbvL29ER4erv5SKpW6TIuoBttH\nFrr74fpPGgvdje7XHn27OOJmWgEiYhIh8s4kIiK901kBU1paiqVLl8Lf31+9befOncjJyYGDg0ON\nWAsLC0RERKi/pFKprtIiqlU7RRvM9Xm40N03f1joThAEzB7lhfZOCpy6mo5DF+7pMVMiIgJ0WMDI\n5XKsXbu2RrESGBiI119/HYIg6Oq0RE+ss83Dhe7KalnoTm4kxatTfGFlLsfmozcQdztHj5kSEZHO\nChiZTAYTE5Ma2ywsLGqNraysxMKFCzFt2jSsW7dOVykR/am+zr0wwW0U8irysfK372osdGetMMaC\nKT6QSiT4Zuc1PMgt1WOmREQtm0zfCQDAokWLMH78eAiCgLCwMPTu3Rs+Pj51xltbm0Em091lJnt7\nhc6OTU+nMfpmht04lElKcPDmCaxL2Ij/G7wARlIj9flfqVLhix8vYeWOOHz62mBYmBrpPCdDx98Z\nw8W+MVzsm6djEAXM9GH907AAACAASURBVOnT1d/369cPSUlJWguYvDzd/edrb69AVhbX/DBEjdk3\n49qNRkZ+Di5nXsMXJ7/HrC7TIBEeDlj6tLdGcB8XHDifive/P4u/hnSDRNJyL4vyd8ZwsW8MF/vm\n8Wgr8vR+G3VycjIWLlwIURRRXV2N2NhYeHh46DstauH+uNDdzlv7arSHDHWHj5st4pJzEXXspp6y\nJCJquXQ2AhMXF4dly5YhLS0NMpkMMTEx6N+/P86cOYOsrCzMnTsX3bt3x6JFi+Dk5ISQkBBIJBIE\nBATA19dXV2kRPbbfF7r7/OIqHEk9AWvjVhjWbiAAQCIR8Jfx3nhvwwXEnL+LtvYWGODjrOeMiYha\nDkFsgota6HLYjcN6hktffZNTlotPL65EUWUxnu868//bu/O4qO973+Ov32zAwLDPsIOCiguoAdyI\nJqZqkqaJabPUxGqb3tw+2ub0cU57cpradEl70ts8bNOec9N40iZNT1Nz09iYpaZJjFncEtxR3AEF\n2ZdhE5gZllnuH4Ojo4YD6ji/gc/z8eCBMD+GL75nhje/5fulwHK+YLd02Hnypf0MOF08trKASWkx\n1318wSbPGfWSbNRLshkZVR9CEkLtvBPdPUyY1sBLx1+lsrPKd1tSvJFvfzEPl9vDs28coaO7L4gj\nFUKI8UMKjBAjkGFK9U1094cjL9HY2+y7bcbEeB743GS6bQP87o0j9A/KTNJCCBFoUmCEGKGp8ZNZ\nPe3L3onuyvwnultalM6imSnUNPfw3++ekOUGhBAiwKTACDEKc5MLuDvn83T1n/Wb6E5RFFbdmsuk\n9Bj2nmjlnV01QR6pEEKMbVJghBilZZmLuTm9mEZbM88f/guDbicAep2Gf/pSPvHRYbyxo4qDFdYg\nj1QIIcYuKTBCjJKiKNw3eTmzzHlUdJ1m/fENuD1uAGIiDfzzvTMx6DU8/4/j1Lf2Bnm0QggxNkmB\nEeIKaBQND01/kOyYCRxoLfOb6C4zycTDX5hO/4CLZ14/TI99IIgjFUKIsUkKjBBXyKDV862ZD5Fk\ntPBR7Q4+rtvpu23OVAvLb5xA29k+nnvrKE6XO4gjFUKIsUcKjBBXIVJv5J9mPUyMwcQblf+gtPWw\n77blCydSOMXMydou/vphZRBHKYQQY48UGCGuUkJEHN8+N9Hdsb9S2XkaAI2i8PCd00g3R7H1YANb\nS+uDPFIhhBg7pMAIcQ2cm+jOA34T3YUbdPzzvflEReh55cNKTtZ0BnegQggxRkiBEeIamRo/mVXT\n7sfh7GNd2Yt09nUBkBgbwXfuyQfgv946SmuXI5jDFEKIMUEKjBDX0NzkAr6Ycwdd/Wf5r7I/YR/0\nlpUpGbGsunUKvY5Bfvf6YRz9ziCPVAghQpsUGCGusaWZN3Nz+o3eie6OvOSb6O7m2WksKUinwWrj\nub8fpdsml1cLIcSVkgIjxDXmnejuLmab86jsqvKb6O6BpZOYMTGeo1Ud/PD53WzZVyeXWAshxBWQ\nAiNEAGgUDV+b/iA55ya6O+Wd6E6r0fDd+2eyculkFODVjyp54k97OVrdHtwBCyFEiJECI0SAGLR6\nvjnzIZKNFj6q28HHtTsAb4lZWpTBU9+cz+Ib0mhut/PbDWX87vXDtHbagzxqIYQIDVJghAigSL2R\nf5r9MDGGaF4/9Q8OtJT5bjMZDXz1tlye+PocpqTHcLCyjR//cQ+vbz9N34Cc5CuEEMORAiNEgMWH\nx/HIrP9FuDaMvxx/1TfR3TmZSSZ+8JUCvnX3DExGA+/squHx53ez61gzHo8nSKMWQgh1kwIjxHWQ\n/hkT3Z2jKApzpyXxy2/M567iCfQ6nLzw9nGeermUM83dwRm0EEKomPZnP/vZz4I9iNGyB3B138jI\nsIDev7hyoZ5NYkQCiREJ7G85xMHWw+g1etJMqWiV839H6LQapmXFsWBGEh09/Ryr7mDHoUY6uvvI\nSY0hzKAN4k9weaGey1gm2aiXZDMykZFhn3mbFJiLyINKvcZCNmlRKcQYTBxvL+dw2zH2NpcSoYsg\nNTIJzQVFxhiuZ+60JKakx3CmuYej1R1sL2tAr9WQlWxCo1GC+FP4Gwu5jFWSjXpJNiMzXIFRPCF4\nkN1q7QnYfZvNpoDev7hyYymb3gEbW2q2sr2hBKfbSZLRwp3Zt3KDOR9F8S8nLrebbQcbeXNHFfZ+\nJykJRh5cMpm87IQgjd7fWMplrJFs1EuyGRmz2fSZt0mBuYg8qNRrLGbT2dfFe2c+YlfTPtweN5mm\nNO7Kvp1p8VMuKTI99gHe3FnN9kMNeDwwe1IiK5ZMIinOGKTRe43FXMYKyUa9JJuRkQIzCvKgUq+x\nnE2r3co71R+wv+UQAJNjs1meczvZMRMu2ba2pYdXPqykoq4LnVbh1jmZ3FmcRbhBd51H7TWWcwl1\nko16STYjIwVmFORBpV7jIZv6nkbernqfo+0nAMhLmMpd2beTbkr1287j8bDvZCt/23qKju5+YqIM\nfHnxJObPSLpkz02gjYdcQpVko16SzchIgRkFeVCp13jKpursGTad3kxlVxUAhZZZ3Jl9Kxaj2W+7\n/kEX7+2u4b09tQw63eSkRbNy6RQmpkRft7GOp1xCjWSjXpLNyEiBGQV5UKnXeMvG4/FwsqOSTVXv\nUdvTgEbRsCCliM9PWEpceKzftm1dDjZsPcWBcisKcOPMFO69OYeYSEPAxznecgklko16STYjIwVm\nFORBpV7jNRuPx8Mh61HernqfFnsrOo2Om9IWcGvWLZgMUX7bnjjTwSsfVdJgtRERpmX5jRNZUpiO\nThu4OSvHay6hQLJRL8lmZIYrMAGdB6aiooIVK1ag0WiYOXMmAH/5y19YuXIlDz30EAaD96/DTZs2\n8fjjj7Nx40YURWHGjBnD3q/MAzM+jddsFEUhJTKJhanzSIhIoKa7jhMdFexs2IXT7STDlIZe4z2B\n1xwbwc2zU4k2Giiv7eJgZRv7TrZiiYsI2NVK4zWXUCDZqJdkMzLDzQMTsMsW7HY7Tz75JAsWLPB9\n7q233qK9vR2LxeK33bp169i4cSN6vZ777ruPZcuWERsbe7m7FWLc0mq0LEgpoihpNp827GHzmY94\n98yHbG8o4dasW7gprRiDVo9Wo2FJYTpzp1l4a2c12w418B9/K1PNZddCCHEtBGy/ssFg4IUXXvAr\nK0uXLuV73/ue31USZWVl5OfnYzKZCA8Pp6CggNLS0kANS4iQp9foWJxxIz8vXsNd2bfj9rh589Q7\n/Hz3r/ikYTcutwvwrna9+rZcnnhoDlMyYjl0qo2f/HEPr207haNfVrsWQoS2gO2B0el06HT+dx8V\nFXXJdm1tbcTHx/s+jo+Px2q1DnvfcXFGdLrArQkz3DE3EVySjb/VyXfzpVlL2XTyA96r2Mpfy9/g\n44adrMi7k+LMIjSKBrPZRMGMFD4pa+RPbx/jvd217Dnewte+MIPFBenXZFkCyUW9JBv1kmyuTnBm\nvhrGSM4p7uy0B+z7y4lV6iXZfLZlKUuYGz+X92s+4pOGPTyz+7/ZeOQ9lufcTl7CNBRFYWpaNE8+\nPNd32fV//LWUTdtPsXLZ1V12Lbmol2SjXpLNyAxX8gJ3acIIWSwW2trafB+3trb6HXYSQoxMTJiJ\nL0/5Ij+d/33mJRfSZGvh94f/zG8O/BcVnacBCNNr+eKibP7P/55HUa6Z043d/OKl/fzp3ROctckJ\nhUKI0BH0AjNr1iyOHDlCd3c3NpuN0tJSioqKgj0sIUJWYkQ8X52+gh/N+1dmm/Oo7q7h/x78A787\n+AI13XXebWIjeORL+Xz/wRtINUfyyeEmHn9+F5v31OJ0uYP8EwghxP8sYPPAHD16lLVr19LQ0IBO\npyMpKYni4mJKSko4dOgQ+fn5zJ49m8cee4zNmzfz4osvoigKq1atYvny5cPet8wDMz5JNlempruO\nTac3c7KzEoDZ5jzuzL6NlMgk4Pxq12/trMLW5yQ53siDSyeTP8LVriUX9ZJs1EuyGRmZyG4U5EGl\nXpLN1anoPMWm05up7q5FQWFucgFfmLiMhAjvSfS9jkHe3FnFtoPe1a5n5STwwNLJ/+Nl15KLekk2\n6iXZjIwUmFGQB5V6STZXz+PxcLT9BJtOb6bR1oxW0bIwbR63ZS0hJsz7QlHX2ssrH1RQPrTa9bI5\nGdy5YAIRYZc/519yUS/JRr0km5GRAjMK8qBSL8nm2nF73BxoKeMf1Vtoc7Rj0OhZnLGQZZk3Y9Qb\n8Xg87C+38rePK2kfWu36vptzWJCXjOai1a4lF/WSbNRLshkZKTCjIA8q9ZJsrj2X20VJ0z7eq/6Q\nswPdROjCWZq5mFsyFhKmNVy62nVq9CWXXUsu6iXZqJdkMzJSYEZBHlTqJdkEzoBrkB0NJWw5sxWb\n047JEMXtWUu4MW0eeo2OtrMO/rb1NPtPtgKwMD+Fexd7V7uWXNRLslEvyWZkpMCMgjyo1EuyCTyH\n08FHtTv5uG4H/a4B4sPjuGPiMuYlF6BRNJys6eSVDyuoH1rt+q7iiTxw+zS6Om3BHrq4DHnOqJdk\nMzJSYEZBHlTqJdlcPz0DvWyp2cqOoRWvk40W7sy+jdnmPNweD9sPNfLmDu9l1ykJkWSnmDDHRlzw\nFk50pMFv3TNx/clzRr0km5GRAjMK8qBSL8nm+uvs6+K9Mx+yq2k/bo+bTFMay7M/z9T4ydj6nLy5\ns4odhxpxuS99GTHoNL5Ckxgb7ldwEmPCCdMHbj0z4SXPGfWSbEZGCswoyINKvSSb4GmxW3mnagsH\nWssAmBybzfKc28mOmUBsnJHy021YuxxDb33n/33WgaPfddn7jIk0+PbW+O+9iSAmynDJ1U5i9OQ5\no16SzchIgRkFeVCpl2QTfHU9jfyjajNH208CkJcwjVUFdxMxGI1Oc+k8MR6PB1uf84Jy419wOrr7\ncV/mJUin1ZwvNjH+JScxNpxwg+rWoVUlec6ol2QzMlJgRkEeVOol2ajHqa5qNp3ezOmz1b7P6TU6\nInQRROjCL3gfftHHEX6fMyhh9Pcr9PZC11kXbWf7fAWnrcuBrc952e8fbdSTeMH5Nt6S432LM4Wh\n0cjeG5DnjJpJNiMzXIGRP2OEEKM2KXYi3yv4Fic6KjjYcYj23rM4nH04nA5sg3baHB24PJc/dPRZ\nFBTCdeFEWMKJSA0nWxeOQQlDcetxO3U4B7T092mw26G3F2p7PFSf1UKVHo9TBy49eDRoNQqJMRcf\nljr/8WfNKCyECC3yTBZCXBFFUZiekMvNU4su+UvS4/Ew6HbicDp8xcb//YVvl97W7uikz9V36TfV\nAibvmz4F9BePyaNBcRvodmrpGtRRYdfh6dZDtQ6Py1tyDJowosOMxEZEEh8VhcUUjSU6mrT4WJJj\nTei18rIoRCiQZ6oQ4ppTFAWDVo9BqycmLPp//oLLcHvc9Dn7hyk/n/F5lwPHYB92Z+9l9wJ5gLND\nbzXuCz6oA48HwgctzEucy10z52M0GK78P0EIEVBSYIQQqqRRNBj1ERj1EVd8H4OuQRyuPhyDjqH3\nfThcfdgG7XTaeumw9dLlsNPTb8M+6MDustEf1sqO7n+w4+MPSdPM4M7cReRnpsicNkKojBQYIcSY\npdfq0Wv1RBs++0TAix1tquHtk9uo156kQXuA31eWYjiYwRzzXO6YOYs4U1gARyyEGCkpMEIIcYG8\nlCzyUr6GbcDO34/vZF/bXgaiaynpr+WTrR+Q4pnBrVPmUTg5Cb1OE+zhCjFuyWXUF5FL29RLslGn\nsZ6L2+PmUPNJ3j21naaBalDAM2BA6cyiKKGIz82cRGZSlCoPMY31bEKZZDMychm1EEJcIY2ioSBl\nOgUp07Ha23n31HZK20pxJlWyz32K3TuTiO+fyuIpeSzISybaKCf+CnE9yB6Yi0grVi/JRp3GYy79\nrgH2NB5gy5mddA62AeC2mXC3ZjE9No+bZmaQn52AThvcQ0zjMZtQIdmMjOyBEUKIayhMa+CmjAUs\nSp9PZVcVH9V8wjGOo5l4lHJnOcf2pBPxUQ7FUyayMD+FNHNUsIcsxJgjBUYIIa6QoihMicthSlwO\nnX1d7GjYxc76PThSq3F6qtnaYeGD17LIjMxiYX4q86YnERl+8fR7QogrIYeQLiK79dRLslEnycXf\noGuQA61lbKv7lLreBgDcjiicLZkonekUTEpmYX4K0yfEB3zNJslGvSSbkZFDSEIIcZ3otXrmpxQx\nL7mQM921bKv/lIOtR9BMOA4ZFRy0prHv75nEGuIpzvOWmaR4Y7CHLUTIkQIjhBABoCgKE2OymBiT\nxT2Tevi0cTc7G3bTnVyDLrmGvm4z7x3P5J1diUxKj2VhfgpzplpksUkhRkieKUIIEWAxYSbumLiM\nW7Nuocx6lG31JVRxhrBoKzpnFGca0jm1pY1XPgyjKNfCwvwUpmTGolHh3DJCqIUUGCGEuE50Gh2F\nSbMpTJpNXU8D2+tL2N9yEH3WScKzTqF0pbPr9FlKjjaTGBPOwvwUivOTSYy58vWghBir5CTei8iJ\nVeol2aiT5HJ1egdtlDTuZUf9Ljr7uwCIciXTXZNKf1siChqmZsWxMD+FglwzYXrtiO9bslEvyWZk\n5CReIYRQqSh9JLdm3cLSzJs50nacbfUlVHSeQpPdTMIkE/quiZw4NcCJmk4iPtAyZ2oSC2emkJMa\nrcrlC4S4XgJaYCoqKnjkkUd46KGHWLVqFU1NTTz22GO4XC7MZjO//vWvMRgMzJgxg4KCAt/X/fnP\nf0arHflfGUIIEeo0ioZZ5jxmmfNosrWwvb6EPc0HsEcfJqpQi4Uc2qtS2FHmYkdZI8nxRm7MT6Y4\nL0VWyBbjUsAOIdntdr75zW8yYcIEcnNzWbVqFT/84Q+56aab+PznP89vf/tbkpOTWblyJfPmzWPP\nnj0jvm85hDQ+STbqJLkEjn3QwZ7mA2yv/xSrox2A5LA09GezqToeidMJigJ5ExNYODOF2ZMS/VbI\nlmzUS7IZmeEOIQVsoQ6DwcALL7yAxWLxfW7Pnj0sWbIEgFtuuYVdu3YF6tsLIUTIM+ojuCVjIT+d\n/30emfUwMxKm0tzfQF34TuLnfULBTZ1kpOo5UtXOc28d5V+f/YT/t6WCmuYeQvD0RiFGJWCHkHQ6\nHTqd/907HA4MBu9KrQkJCVitVgAGBgZ49NFHaWho4LbbbuPrX//6sPcdF2dEpwvcIabhGp8ILslG\nnSSXwEuyFLF4ahHNPa28f2oHW6tLONG3B226hgU3zCTsbA4HDw3yUWk9H5XWMyElmoWzUslOi2FC\nSgyJseFyzowK9A04aWqzEdk3KM+bqxS0k3gv/OvgscceY/ny5SiKwqpVqygqKiI/P/8zv7az0x6w\nccluPfWSbNRJcrm+tERwR/ptfC55MftaStleX8Kh1kPAIdLnpLHAMJOWqjgOn+rk5c0nfV9nDNOR\nbokiwxxFuiWSdEsUaYmRhBvkWo5AcLndtHQ4qLf20mC1ed+32bB2OvAAOq2G6RPiKMq1MHtyIlER\nskbW5ajmKiSj0UhfXx/h4eG0tLT4Di89+OCDvm3mz59PRUXFsAVGCCHGu3BdGIvSFrAwdT6VXafZ\nVl/CYesx6mkg0mzk1ulFTDTm01jror7NTn1rL5X1XVTUdfndjyU2gnRLFOnmSDIsUaRbojDHRsgk\neiPk8Xho7+7zKyn1rTaaO2w4Xf6H8SLDdUzJiCUpPoLaVhuHT7dz+HQ7Wo3C1Kw4CnPNFEw2Ex1p\nCNJPE1qua4EpLi7m/fff5+6772bLli0sWrSIqqoq1q1bx9NPP43L5aK0tJTbb7/9eg5LCCFClndF\n7ElMiZtEu6OTTxp382njHrY17mAbO4jUG8mckM6CmRmkGlMxDMTT1alQZ+2lvrWXequN0gorpRVW\n330a9BrSzVGkm6O8pcYcSZo5atzvJeixD1BvtdFg9f6/NbR59670Dbj8tjPoNWRYokhL9P7fJSdG\noI3spdPZQl1PNY22ZmZOz+Qu3TQaa3UcKLdyrLqDY9UdrH+/nNyMWApzLRRMMcsVZsMI2FVIR48e\nZe3atTQ0NKDT6UhKSuLpp59mzZo19Pf3k5qaylNPPYVer+fXv/41u3fvRqPR8LnPfY5vf/vbw963\nXIU0Pkk26iS5qM/A0IrYVb2nqbBW09bX4Xd7bFgMWaZ0MqMzyDSlEadNor3D5Ss1da02mtptuNz+\nvx7iTGFDhcZ7GCrDHEVSvBGdNmDXgwRF34CTxjb7JYd/um0DfttpFIXkBKO34CVGkm6OIjkhjAF9\nN3U99dT2NFDXU09jbzNOj+uy3ystKoXi1LnkhE/jeFUvB8qtnGo467t9UloMhblmCnPN43JG5uEO\nIclMvBeRF2P1kmzUSXJRr3PZ9A7aqO2up6a7npqeOmq76zg74J+ZOSKBrOgMX7FJMabQ2eU8X2qG\nfpl39vT7fZ1Oq5CaEDl0GOp8sYmONKj+pGGny01zh/18SRl633a275JtE2PCvSVl6NyhdHMUCbEG\nrH2t1A5TVnSKltSoFDKj08k0pZFpSifJaKHF3cjmk9s53HYct8eNTqPjBnM+xalzSdSmcbCyjQPl\nrZTXdXHut/SEZBNFUy0U5ppJihsfK5hLgRkFeTFWL8lGnSQX9Roum67+s9R013lLTXcdNT31OJwO\n3+0KCimRSd5SE51OlimD1Khk+vo9vkLjPQTl/cU/4HT73b/JqL/gEJT3fWqiEX0AryD9LG6Ph7az\nfTRctEelud1+yV6maKOeNHOUX1lJTYxEr4fG3ma/stLQ24zrorKSFpVKRnSar6ykRCah01x6tsa5\nbLoHetjTdICSpr202tu8t0UksCBlDvNTilCc4ZRWWjlQbuXEmU7cQ7+y081RFE01U5hrIS0xMoD/\ne8ElBWYU5MVYvSQbdZJc1Gs02Xg8HqyOdmqHykxNdx11PQ0MuAd92+g0OtKiUsgyDZWa6AySjGbw\nKLR2OYYOP3lLTb21F2uX/54MRYHkeOPQnprzV0QlRF+bS7w9Hg/d9kFfqTp3rkpjm43+Qf9DOGEG\nLemJkaSZI33nqqQN7TkadDtp8pUVb2FpvLisaHSkRaaMqKxczsXZeDweTp89Q0njXkpbDzPoHkSj\naJiRMJUbU+cyPT4XR7+bQ5Vt7C9v5fiZDt9JwikJRgpzLRTlmsmwRKl+z9doSIEZBXkxVi/JRp0k\nF/W62mxcbhfN9la/Q08X73UI0xrINKWTObSXJis6g4TwOBRFwdHvHLoqx3+PjaPfv0xEhGkvKjXe\nPR8RYZ9dBnz3fVFZ6XUM+m2n1SikJHhLU9pQSUlPjCQ+JhyNovjKSk1Pve+8leHKSpYpnQxTOqmR\nSWg1V743abhsHE4H+1sOUdK4l9qeBgBiDCbmp8xhQcoczMYE7H1Oyk63caDcypGqdgaH9oBZYiMo\nzDVTNNXChGRTyJcZKTCjIC/G6iXZqJPkol6ByGbQNUiDrcnv0FOLrRUP53+VROkjyTSl+/bSZJoy\niAnz/iI6d9lxfavNr9Q0d9i5+LdRYky47xBUQkw4LZ32obJio737or07gDk24nxJGXqfFBfhO8l4\n0O2ksbfJdwhouLJy7pyVa1FWLmek2dT1NFDSuI99LaU4nN6feUpsDsWpc5ltzkOv1dM34ORIVQcH\nylspO9Xu29uUEB1GYa73nJmctJiQvDReCswoyIuxekk26iS5qNf1yqbP2UddT4Pv0FNNdz3tl7vy\naegkYW+pSceoP39VzcCgi6Z2u+8QVN3Q4aiL96gAxEQZhg7/ePeqpJujSE2IJMxwvmSMuKxEpXj3\nIAWwrFzOaLMZcA1yyHqEksa9VHZVAWDURTAnuYAbU+eSFpXi3W7QxbHqDvaXWzl0qg1HvxPw/p8V\nTvGeMzMlIwatJjSuHJMCMwryYqxeko06SS7qFcxsegdsQ4Wm1ncIqmeg128bS0Si99BTdAZZpgwy\nTKkYtOcncfN4PHTbBqiz9tLR3U9SXASpiZGYjP4TvV1SVrrrabS1DFtWzp2zcj3KyuVcTTatdiu7\nmvazu2k/3UNXk2WZMliQOoeipNlE6MIB71VWx890cqC8lYOVbb4yGBWhp2CKmaJcM1Oz4lR9GbwU\nmFGQF2P1kmzUSXJRLzVl4/F4zl/5NLSnpran3ndYBECjaLxXPg1dyp0VnU5aZIpfyThfVuqp7R66\ndHnYsuItLMEsK5dzLbJxuV0cbT9JSeNejrWfxIMHg0ZPgWUWxalzyY7J8p0D43K7Ka/tYn+5d9LC\nc3PaRIbrmD0pkcJcCzMmxgXlKrHhSIEZBTU94YU/yUadJBf1Uns2bo8bq6PdW2aG9tLU9TQyeNGV\nT+lRqZgjEmi2tVy2rKRHpfoOAamxrFzOtc6mq/8su5sOsKtxr2/iwiSjheLUOcxLLsRkiPJt63Z7\nqKzv4kC5lQMVVt/cPuEGLbMmJVKUayYvO4EwffD/D6XAjILan/DjmWSjTpKLeoViNi63iyZbCzU9\n3nNparvraLA14/a40Wt0pIVgWbmcQGXj9rip7KyipGkvh1qP4PS40Cpa8hOnU5w6l2nxk9Eomgu2\n91Dd2M2Bciv7y1t9k/gZ9BpmZidQmGthZk7CsFeEBZIUmFEIxSf8eCHZqJPkol5jJZtB1yCd/V0k\nhMeHZFm5nOuRTe+gjX3NBylp3EujrRmAuLBYFqQUMT9lDgkRcX7bezwealt62V/eyv5yKy0ddsC7\ncnbexHgKc83MnpxIZPj1WxNLCswojJUn/Fgk2aiT5KJeko16Xc9sPB4PtT31fNq4l/0tB+l3DaCg\nMDV+MsWpc8lPnI7+ogn4PB4PDW029p9s5UCFlQarDfDOqzNtQhxFuRZumJx4yQnV15oUmFGQJ7x6\nSTbqJLmol2SjXsHKps/Zz8HWw5Q07aPq7BnAO2/P3OQCilPnkhKZdNmva2q3ec+ZKbdS0+Idt0ZR\nyM2MZVlRBrMnHdkYqQAACfhJREFUJwZkvFJgRkGe8Ool2aiT5KJeko16qSGbZlsLJY372NN8gN5B\n7x6W7JgsilPmcoNlJuG6sMt+XWuXg9JyKwfKWznd2E26OZJ/f3heQMYoBWYU1PCgEpcn2aiT5KJe\nko16qSkbp9vJ4bbjlDTu5WRHJR48hGkNFCXNpjh1LlmmjM9ckqCzpx+tRiE6MjCHkoYrMME5rVgI\nIYQQqqDT6CiwzKTAMpN2Rye7m/ezq3Efnzbu5dPGvaRGJlOcOpe5yQVE6o1+XxtnuvxemutB9sBc\nRE2tWPiTbNRJclEvyUa91J6N2+PmZEclJY17Odx2HJfHhU6jY7Y5j+KUuUyOy/a7HDtQZA+MEEII\nIUZMo2iYnpDL9IRcegZ62dN8gF2N+9jfcoj9LYdICI+nOHUO81OKiA2LCcoYZQ/MRdTeisczyUad\nJBf1kmzUKxSz8Xg8VHfX8GnjXkpbyhhwD6KgsDj9Ru6bsjwg31P2wAghhBDiqiiKQnbMBLJjJnDf\n5OUcaDnE7qYDvgUlrzcpMEIIIYQYlQhdOAvT5rMwbX7QxqDeNbSFEEIIIT6DFBghhBBChBwpMEII\nIYQIOVJghBBCCBFypMAIIYQQIuRIgRFCCCFEyJECI4QQQoiQIwVGCCGEECEnoAWmoqKCpUuX8vLL\nLwPQ1NTE6tWrWblyJf/yL//CwMAAAJs2beLee+/l/vvv57XXXgvkkIQQQggxBgSswNjtdp588kkW\nLFjg+9wzzzzDypUreeWVV8jKymLjxo3Y7XbWrVvHn//8Z9avX89LL71EV1dXoIYlhBBCiDEgYAXG\nYDDwwgsvYLFYfJ/bs2cPS5YsAeCWW25h165dlJWVkZ+fj8lkIjw8nIKCAkpLSwM1LCGEEEKMAQFb\nC0mn06HT+d+9w+HAYDAAkJCQgNVqpa2tjfj4eN828fHxWK3WQA1LCCGEEGNA0BZz9Hg8o/r8heLi\njOh02ms9JJ/hlu8WwSXZqJPkol6SjXpJNlfnul6FZDQa6evrA6ClpQWLxYLFYqGtrc23TWtrq99h\np8sJZHkRQgghhPpd1wJTXFzM+++/D8CWLVtYtGgRs2bN4siRI3R3d2Oz2SgtLaWoqOh6DksIIYQQ\nIUbxjOSYzRU4evQoa9eupaGhAZ1OR1JSEk8//TRr1qyhv7+f1NRUnnrqKfR6PZs3b+bFF19EURRW\nrVrF8uXLAzEkIYQQQowRASswQgghhBCBIjPxCiGEECLkSIERQgghRMiRAiOEEEKIkCMF5gK//OUv\nWbFiBQ888ACHDx8O9nDEBX71q1+xYsUK7r33XrZs2RLs4YgL9PX1sXTpUt54441gD0VcYNOmTSxf\nvpx77rmHbdu2BXs4ArDZbHznO99h9erVPPDAA+zcuTPYQwppQZvITm327t1LTU0NGzZs4PTp0zz+\n+ONs2LAh2MMSwO7du6msrGTDhg10dnbypS99iVtvvTXYwxJDnnvuOWJiYoI9DHGBzs5O1q1bx+uv\nv47dbud3v/sdixcvDvawxr0333yTiRMn8uijj9LS0sLXvvY1Nm/eHOxhhSwpMEN27drF0qVLAcjJ\nyeHs2bP09vYSFRUV5JGJOXPmMHPmTACio6NxOBy4XC60WpnQMNhOnz7NqVOn5JejyuzatYsFCxYQ\nFRVFVFQUTz75ZLCHJIC4uDjKy8sB6O7uJi4uLsgjCm1yCGlIW1ub34NJ1mRSD61Wi9FoBGDjxo3c\ndNNNUl5UYu3ataxZsybYwxAXqa+vp6+vj29961usXLmSXbt2BXtIAvjCF75AY2Mjy5YtY9WqVfzg\nBz8I9pBCmuyB+QwyPY76fPjhh2zcuJE//elPwR6KAN566y1mz55NRkZGsIciLqOrq4tnn32WxsZG\nvvrVr7J161YURQn2sMa1v//976SmpvLiiy9y8uRJHn/8cTl37CpIgRlyuTWZzGZzEEckLrRz505+\n//vf88c//hGTSRZAU4Nt27ZRV1fHtm3baG5uxmAwkJycTHFxcbCHNu4lJCRwww03oNPpyMzMJDIy\nko6ODhISEoI9tHGttLSUhQsXAjB16lRaW1vlcPhVkENIQ2688UbfOk3Hjh3DYrHI+S8q0dPTw69+\n9Sv+8Ic/EBsbG+zhiCH/+Z//yeuvv87f/vY37r//fh555BEpLyqxcOFCdu/ejdvtprOzE7vdLudb\nqEBWVhZlZWUANDQ0EBkZKeXlKsgemCEFBQXMmDGDBx54AEVReOKJJ4I9JDHk3XffpbOzk+9+97u+\nz61du5bU1NQgjkoI9UpKSuK2227jy1/+MgA//vGP0Wjk79VgW7FiBY8//jirVq3C6XTys5/9LNhD\nCmmyFpIQQgghQo5UciGEEEKEHCkwQgghhAg5UmCEEEIIEXKkwAghhBAi5EiBEUIIIUTIkQIjhAio\n+vp68vLyWL16tW8V3kcffZTu7u4R38fq1atxuVwj3v7BBx9kz549VzJcIUSIkAIjhAi4+Ph41q9f\nz/r163n11VexWCw899xzI/769evXy4RfQgg/MpGdEOK6mzNnDhs2bODkyZOsXbsWp9PJ4OAgP/3p\nT5k+fTqrV69m6tSpnDhxgpdeeonp06dz7NgxBgYG+MlPfkJzczNOp5O7776blStX4nA4+N73vkdn\nZydZWVn09/cD0NLSwr/9278B0NfXx4oVK7jvvvuC+aMLIa4RKTBCiOvK5XLxwQcfUFhYyPe//33W\nrVtHZmbmJYvbGY1GXn75Zb+vXb9+PdHR0fzmN7+hr6+PO+64g0WLFlFSUkJ4eDgbNmygtbWVJUuW\nAPDee++RnZ3Nz3/+c/r7+3nttdeu+88rhAgMKTBCiIDr6Ohg9erVALjdboqKirj33nt55pln+NGP\nfuTbrre3F7fbDXiX97hYWVkZ99xzDwDh4eHk5eVx7NgxKioqKCwsBLwLs2ZnZwOwaNEiXnnlFdas\nWcPNN9/MihUrAvpzCiGuHykwQoiAO3cOzIV6enrQ6/WXfP4cvV5/yecURfH72OPxoCgKHo/Hb62f\ncyUoJyeHd955h3379rF582ZeeuklXn311av9cYQQKiAn8QohgsJkMpGens727dsBqK6u5tlnnx32\na2bNmsXOnTsBsNvtHDt2jBkzZpCTk8PBgwcBaGpqorq6GoC3336bI0eOUFxczBNPPEFTUxNOpzOA\nP5UQ4nqRPTBCiKBZu3Ytv/jFL3j++edxOp2sWbNm2O1Xr17NT37yE77yla8wMDDAI488Qnp6Onff\nfTcff/wxK1euJD09nfz8fAAmTZrEE088gcFgwOPx8I1vfAOdTl72hBgLZDVqIYQQQoQcOYQkhBBC\niJAjBUYIIYQQIUcKjBBCCCFCjhQYIYQQQoQcKTBCCCGECDlSYIQQQggRcqTACCGEECLkSIERQggh\nRMj5/3nBlDPDtKsVAAAAAElFTkSuQmCC\n",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ }
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "text",
+ "id": "flxmFt0KKxk9"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "## Linear Scaling\n",
+ "It can be a good standard practice to normalize the inputs to fall within the range -1, 1. This helps SGD not get stuck taking steps that are too large in one dimension, or too small in another. Fans of numerical optimization may note that there's a connection to the idea of using a preconditioner here."
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "code",
+ "id": "Dws5rIQjKxk-",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "def linear_scale(series):\n",
+ " min_val = series.min()\n",
+ " max_val = series.max()\n",
+ " scale = (max_val - min_val) / 2.0\n",
+ " return series.apply(lambda x:((x - min_val) / scale) - 1.0)"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "colab_type": "text",
+ "id": "MVmuHI76N2Sz"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "## Task 1: Normalize the Features Using Linear Scaling\n",
+ "\n",
+ "**Normalize the inputs to the scale -1, 1.**\n",
+ "\n",
+ "**Spend about 5 minutes training and evaluating on the newly normalized data. How well can you do?**\n",
+ "\n",
+ "As a rule of thumb, NN's train best when the input features are roughly on the same scale.\n",
+ "\n",
+ "Sanity check your normalized data. (What would happen if you forgot to normalize one feature?)\n"
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "code",
+ "id": "yD948ZgAM6Cx",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 671
+ },
+ "outputId": "62c57f8b-4c77-4550-9acd-585edbf4888e"
+ },
+ "cell_type": "code",
+ "source": [
+ "def normalize_linear_scale(examples_dataframe):\n",
+ " \"\"\"Returns a version of the input `DataFrame` that has all its features normalized linearly.\"\"\"\n",
+ " #\n",
+ " # Your code here: normalize the inputs.\n",
+ " #\n",
+ " processed_features = pd.DataFrame()\n",
+ " processed_features[\"latitude\"] = linear_scale(examples_dataframe[\"latitude\"])\n",
+ " processed_features[\"longitude\"] = linear_scale(examples_dataframe[\"longitude\"])\n",
+ " processed_features[\"housing_median_age\"] = linear_scale(examples_dataframe[\"housing_median_age\"])\n",
+ " processed_features[\"total_rooms\"] = linear_scale(examples_dataframe[\"total_rooms\"])\n",
+ " processed_features[\"total_bedrooms\"] = linear_scale(examples_dataframe[\"total_bedrooms\"])\n",
+ " processed_features[\"population\"] = linear_scale(examples_dataframe[\"population\"])\n",
+ " processed_features[\"households\"] = linear_scale(examples_dataframe[\"households\"])\n",
+ " processed_features[\"median_income\"] = linear_scale(examples_dataframe[\"median_income\"])\n",
+ " processed_features[\"rooms_per_person\"] = linear_scale(examples_dataframe[\"rooms_per_person\"])\n",
+ " return processed_features\n",
+ "\n",
+ "normalized_dataframe = normalize_linear_scale(preprocess_features(california_housing_dataframe))\n",
+ "normalized_training_examples = normalized_dataframe.head(12000)\n",
+ "normalized_validation_examples = normalized_dataframe.tail(5000)\n",
+ "\n",
+ "_ = train_nn_regression_model(\n",
+ " my_optimizer=tf.train.GradientDescentOptimizer(learning_rate=0.0007),\n",
+ " steps=5000,\n",
+ " batch_size=70,\n",
+ " hidden_units=[10, 10],\n",
+ " training_examples=normalized_training_examples,\n",
+ " training_targets=training_targets,\n",
+ " validation_examples=normalized_validation_examples,\n",
+ " validation_targets=validation_targets)"
+ ],
+ "execution_count": 10,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "Training model...\n",
+ "RMSE (on training data):\n",
+ " period 00 : 232.00\n",
+ " period 01 : 210.72\n",
+ " period 02 : 166.34\n",
+ " period 03 : 121.53\n",
+ " period 04 : 117.07\n",
+ " period 05 : 113.20\n",
+ " period 06 : 108.93\n",
+ " period 07 : 104.03\n",
+ " period 08 : 98.18\n",
+ " period 09 : 91.79\n",
+ "Model training finished.\n",
+ "Final RMSE (on training data): 91.79\n",
+ "Final RMSE (on validation data): 91.70\n"
+ ],
+ "name": "stdout"
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjAAAAGACAYAAACz01iHAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzs3Xd0VGXixvHvnZn03hu9SRFCVYog\nndAEBWPFxrpFWF3F1XV/6K6Loujq2sCCqyDoCmIDRVGkiyAhgKF3CAmkF0gv9/cHa9YIhAQymUny\nfM7xHObOzL3PzJvIwzt37muYpmkiIiIiUo9YHB1AREREpKZUYERERKTeUYERERGRekcFRkREROod\nFRgRERGpd1RgREREpN6xOTqAiDO74ooraNasGVarFYCysjJ69erF9OnT8fT0vOT9Ll68mNjY2HO2\nf/LJJzz22GO88cYbDBo0qGJ7YWEhffv2Zfjw4Tz77LOXfNzqOn78ODNnzuTIkSMAeHh4MHXqVIYO\nHWr3Y9fEnDlzOH78+DnvyebNm5k8eTJNmjQ55zlff/11XcW7LCdOnGDIkCG0bNkSANM0CQ4O5v/+\n7//o2LFjjfb1wgsvEBkZyS233FLt53z++ecsWbKEBQsW1OhYInVFBUbkIhYsWEB4eDgAxcXFPPjg\ng7z55ps8+OCDl7S/tLQ03n777fMWGICIiAi++OKLSgVm9erV+Pr6XtLxLsXDDz/MuHHjeOONNwDY\nsWMHd955J1999RURERF1luNyRERE1JuyciFWq7XSa1i+fDlTpkxhxYoVuLq6Vns/06ZNs0c8EYfS\nR0giNeDq6kr//v3Zs2cPAEVFRTzxxBOMGDGCkSNH8uyzz1JWVgbA3r17ufnmm4mJiWHcuHGsX78e\ngJtvvpnk5GRiYmIoLi4+5xjdu3dn8+bNFBQUVGxbvnw5/fr1q7hdXFzMU089xYgRIxg8eHBF0QDY\ntm0bN9xwAzExMYwaNYqNGzcCZ/9Ff8011/Dee+8xduxY+vfvz/Lly8/7Ovfv3090dHTF7ejoaFas\nWFFR5F577TWuvfZaxo8fz1tvvcXgwYMB+Mtf/sKcOXMqnvfL2xfLNXPmTG6//XYAtm7dyoQJExg2\nbBixsbEkJiYCZ2ei/vSnPzFo0CBuv/12Tp06dZERO79PPvmEqVOncuedd/Lcc8+xefNmbr75Zh54\n4IGKv+y/+uorxowZQ0xMDHfccQfHjx8H4NVXX2X69OlMnDiRefPmVdrvAw88wDvvvFNxe8+ePVxz\nzTWUl5fzr3/9ixEjRjBixAjuuOMOUlJSapx71KhRFBYWcvjwYQAWLVpETEwMgwcP5qGHHqKwsBA4\n+74/88wzjB07lq+++qrSOFzo57K8vJx//OMfDBw4kIkTJ7J3796K4/74449cf/31jBo1ipEjR/LV\nV1/VOLtIrTNF5ILatWtnnjx5suJ2dna2edttt5lz5swxTdM033zzTfPee+81S0pKzIKCAnPChAnm\nZ599ZpaVlZkjR440ly1bZpqmaf70009mr169zNOnT5ubNm0yhw4det7jffzxx+ajjz5qPvzwwxXP\nPX36tDlkyBDzo48+Mh999FHTNE3ztddeM++8806zqKjIzMvLM8ePH2+uWrXKNE3THDNmjPnFF1+Y\npmman376acWxEhMTzY4dO5oLFiwwTdM0ly9fbg4bNuy8Of74xz+agwYNMufPn28ePHiw0n379u0z\ne/bsaaamppolJSXmH/7wB3PQoEGmaZrmo48+as6ePbvisb+8XVWuTp06mZ988knF6+3Vq5e5YcMG\n0zRNc9myZeb1119vmqZpLly40LztttvMkpISMzMz0xw0aFDFe/JLVb3HP7/PXbt2NY8cOVLx+M6d\nO5sbN240TdM0k5KSzB49ephHjx41TdM0//3vf5t33nmnaZqm+corr5jXXHONmZGRcc5+v/zyS/O2\n226ruP3yyy+bM2bMMPfv328OHz7cLC4uNk3TNN977z3z008/vWC+n9+XDh06nLO9V69e5qFDh8wt\nW7aYffr0MU+dOmWapmk+/vjj5rPPPmua5tn3fezYsWZhYWHF7dmzZ1f5c7lmzRpz+PDh5pkzZ8yC\nggJz4sSJ5u23326apmnecMMN5ubNm03TNM0jR46YDz30UJXZReqCZmBELmLSpEnExMQwZMgQhgwZ\nQu/evbn33nsBWLNmDbGxsdhsNtzd3Rk7dizff/89J06cID09ndGjRwPQuXNnIiMjSUhIqNYxR48e\nzRdffAHAypUrGTRoEBbL/35dV69eza233oqrqyuenp6MGzeOb775BoDPPvuMkSNHAtCjR4+K2QuA\n0tJSbrjhBgA6depEcnLyeY///PPPc9ttt7Fs2TLGjBnD4MGD+c9//gOcnR3p1asXISEh2Gw2xowZ\n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\nRK5CYII=\n",
+ "text/plain": [
+ "
"
+ ]
+ },
+ "metadata": {
+ "tags": []
+ }
+ }
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "text",
+ "id": "jFfc3saSxg6t"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "### Solution\n",
+ "\n",
+ "Click below for one possible solution."
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "text",
+ "id": "Ax_IIQVRx4gr"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "Since normalization uses min and max, we have to ensure it's done on the entire dataset at once. \n",
+ "\n",
+ "We can do that here because all our data is in a single DataFrame. If we had multiple data sets, a good practice would be to derive the normalization parameters from the training set and apply those identically to the test set."
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "code",
+ "id": "D-bJBXrJx-U_",
+ "colab": {}
+ },
+ "cell_type": "code",
+ "source": [
+ "def normalize_linear_scale(examples_dataframe):\n",
+ " \"\"\"Returns a version of the input `DataFrame` that has all its features normalized linearly.\"\"\"\n",
+ " processed_features = pd.DataFrame()\n",
+ " processed_features[\"latitude\"] = linear_scale(examples_dataframe[\"latitude\"])\n",
+ " processed_features[\"longitude\"] = linear_scale(examples_dataframe[\"longitude\"])\n",
+ " processed_features[\"housing_median_age\"] = linear_scale(examples_dataframe[\"housing_median_age\"])\n",
+ " processed_features[\"total_rooms\"] = linear_scale(examples_dataframe[\"total_rooms\"])\n",
+ " processed_features[\"total_bedrooms\"] = linear_scale(examples_dataframe[\"total_bedrooms\"])\n",
+ " processed_features[\"population\"] = linear_scale(examples_dataframe[\"population\"])\n",
+ " processed_features[\"households\"] = linear_scale(examples_dataframe[\"households\"])\n",
+ " processed_features[\"median_income\"] = linear_scale(examples_dataframe[\"median_income\"])\n",
+ " processed_features[\"rooms_per_person\"] = linear_scale(examples_dataframe[\"rooms_per_person\"])\n",
+ " return processed_features\n",
+ "\n",
+ "normalized_dataframe = normalize_linear_scale(preprocess_features(california_housing_dataframe))\n",
+ "normalized_training_examples = normalized_dataframe.head(12000)\n",
+ "normalized_validation_examples = normalized_dataframe.tail(5000)\n",
+ "\n",
+ "_ = train_nn_regression_model(\n",
+ " my_optimizer=tf.train.GradientDescentOptimizer(learning_rate=0.005),\n",
+ " steps=2000,\n",
+ " batch_size=50,\n",
+ " hidden_units=[10, 10],\n",
+ " training_examples=normalized_training_examples,\n",
+ " training_targets=training_targets,\n",
+ " validation_examples=normalized_validation_examples,\n",
+ " validation_targets=validation_targets)"
+ ],
+ "execution_count": 0,
+ "outputs": []
+ },
+ {
+ "metadata": {
+ "colab_type": "text",
+ "id": "MrwtdStNJ6ZQ"
+ },
+ "cell_type": "markdown",
+ "source": [
+ "## Task 2: Try a Different Optimizer\n",
+ "\n",
+ "** Use the Adagrad and Adam optimizers and compare performance.**\n",
+ "\n",
+ "The Adagrad optimizer is one alternative. The key insight of Adagrad is that it modifies the learning rate adaptively for each coefficient in a model, monotonically lowering the effective learning rate. This works great for convex problems, but isn't always ideal for the non-convex problem Neural Net training. You can use Adagrad by specifying `AdagradOptimizer` instead of `GradientDescentOptimizer`. Note that you may need to use a larger learning rate with Adagrad.\n",
+ "\n",
+ "For non-convex optimization problems, Adam is sometimes more efficient than Adagrad. To use Adam, invoke the `tf.train.AdamOptimizer` method. This method takes several optional hyperparameters as arguments, but our solution only specifies one of these (`learning_rate`). In a production setting, you should specify and tune the optional hyperparameters carefully."
+ ]
+ },
+ {
+ "metadata": {
+ "colab_type": "code",
+ "id": "61GSlDvF7-7q",
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 671
+ },
+ "outputId": "982a6b04-6f24-4ad5-f578-fcaa168743e1"
+ },
+ "cell_type": "code",
+ "source": [
+ "#\n",
+ "# YOUR CODE HERE: Retrain the network using Adagrad and then Adam.\n",
+ "#\n",
+ "_, adagrad_training_losses, adagrad_validation_losses = train_nn_regression_model(\n",
+ " my_optimizer=tf.train.AdagradOptimizer(learning_rate=0.5),\n",
+ " steps=500,\n",
+ " batch_size=100,\n",
+ " hidden_units=[10, 10],\n",
+ " training_examples=normalized_training_examples,\n",
+ " training_targets=training_targets,\n",
+ " validation_examples=normalized_validation_examples,\n",
+ " validation_targets=validation_targets)"
+ ],
+ "execution_count": 11,
+ "outputs": [
+ {
+ "output_type": "stream",
+ "text": [
+ "Training model...\n",
+ "RMSE (on training data):\n",
+ " period 00 : 78.24\n",
+ " period 01 : 77.18\n",
+ " period 02 : 71.07\n",
+ " period 03 : 70.80\n",
+ " period 04 : 70.02\n",
+ " period 05 : 69.81\n",
+ " period 06 : 67.92\n",
+ " period 07 : 68.50\n",
+ " period 08 : 66.93\n",
+ " period 09 : 68.41\n",
+ "Model training finished.\n",
+ "Final RMSE (on training data): 68.41\n",
+ "Final RMSE (on validation data): 67.48\n"
+ ],
+ "name": "stdout"
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ "