MLPHousingKeras.ipynb (62611B)
1 { 2 "cells": [ 3 { 4 "cell_type": "code", 5 "execution_count": 1, 6 "metadata": {}, 7 "outputs": [], 8 "source": [ 9 "from sklearn.datasets import fetch_california_housing\n", 10 "from sklearn.model_selection import train_test_split\n", 11 "\n", 12 "housing = fetch_california_housing()\n", 13 "\n", 14 "# Split train, validation, and test (in that order).\n", 15 "X_train_full, X_test, y_train_full, y_test = train_test_split(housing.data,housing.target,random_state=10)\n", 16 "X_train, X_valid, y_train, y_valid = train_test_split(X_train_full, y_train_full, random_state=10)" 17 ] 18 }, 19 { 20 "cell_type": "code", 21 "execution_count": 2, 22 "metadata": {}, 23 "outputs": [ 24 { 25 "name": "stderr", 26 "output_type": "stream", 27 "text": [ 28 "2024-06-11 07:03:53.306268: I external/local_tsl/tsl/cuda/cudart_stub.cc:32] Could not find cuda drivers on your machine, GPU will not be used.\n", 29 "2024-06-11 07:03:53.309533: I external/local_tsl/tsl/cuda/cudart_stub.cc:32] Could not find cuda drivers on your machine, GPU will not be used.\n", 30 "2024-06-11 07:03:53.351612: I tensorflow/core/platform/cpu_feature_guard.cc:210] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.\n", 31 "To enable the following instructions: AVX2 FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.\n", 32 "2024-06-11 07:03:54.094326: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Could not find TensorRT\n", 33 "/home/andrew/gitRepos/myvenv/lib/python3.11/site-packages/keras/src/layers/preprocessing/normalization.py:99: UserWarning: Do not pass an `input_shape`/`input_dim` argument to a layer. When using Sequential models, prefer using an `Input(shape)` object as the first layer in the model instead.\n", 34 " super().__init__(**kwargs)\n", 35 "2024-06-11 07:03:54.745587: I external/local_xla/xla/stream_executor/cuda/cuda_executor.cc:998] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355\n", 36 "2024-06-11 07:03:54.746044: W tensorflow/core/common_runtime/gpu/gpu_device.cc:2251] Cannot dlopen some GPU libraries. Please make sure the missing libraries mentioned above are installed properly if you would like to use GPU. Follow the guide at https://www.tensorflow.org/install/gpu for how to download and setup the required libraries for your platform.\n", 37 "Skipping registering GPU devices...\n" 38 ] 39 } 40 ], 41 "source": [ 42 "import tensorflow as tf\n", 43 "norm_layer = tf.keras.layers.Normalization(input_shape=X_train.shape[1:])\n", 44 "tf.random.set_seed(10)\n", 45 "model = tf.keras.Sequential([\n", 46 " norm_layer,\n", 47 " tf.keras.layers.Dense(50, activation='relu'),\n", 48 " tf.keras.layers.Dense(50, activation='relu'),\n", 49 " tf.keras.layers.Dense(50, activation='relu'),\n", 50 " tf.keras.layers.Dense(1)\n", 51 "])" 52 ] 53 }, 54 { 55 "cell_type": "code", 56 "execution_count": 3, 57 "metadata": {}, 58 "outputs": [ 59 { 60 "data": { 61 "text/html": [ 62 "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\">Model: \"sequential\"</span>\n", 63 "</pre>\n" 64 ], 65 "text/plain": [ 66 "\u001b[1mModel: \"sequential\"\u001b[0m\n" 67 ] 68 }, 69 "metadata": {}, 70 "output_type": "display_data" 71 }, 72 { 73 "data": { 74 "text/html": [ 75 "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n", 76 "┃<span style=\"font-weight: bold\"> Layer (type) </span>┃<span style=\"font-weight: bold\"> Output Shape </span>┃<span style=\"font-weight: bold\"> Param # </span>┃\n", 77 "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n", 78 "│ normalization (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Normalization</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">8</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">17</span> │\n", 79 "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", 80 "│ dense (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Dense</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">50</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">450</span> │\n", 81 "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", 82 "│ dense_1 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Dense</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">50</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">2,550</span> │\n", 83 "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", 84 "│ dense_2 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Dense</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">50</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">2,550</span> │\n", 85 "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", 86 "│ dense_3 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Dense</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">1</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">51</span> │\n", 87 "└─────────────────────────────────┴────────────────────────┴───────────────┘\n", 88 "</pre>\n" 89 ], 90 "text/plain": [ 91 "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n", 92 "┃\u001b[1m \u001b[0m\u001b[1mLayer (type) \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mOutput Shape \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1m Param #\u001b[0m\u001b[1m \u001b[0m┃\n", 93 "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n", 94 "│ normalization (\u001b[38;5;33mNormalization\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m8\u001b[0m) │ \u001b[38;5;34m17\u001b[0m │\n", 95 "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", 96 "│ dense (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m50\u001b[0m) │ \u001b[38;5;34m450\u001b[0m │\n", 97 "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", 98 "│ dense_1 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m50\u001b[0m) │ \u001b[38;5;34m2,550\u001b[0m │\n", 99 "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", 100 "│ dense_2 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m50\u001b[0m) │ \u001b[38;5;34m2,550\u001b[0m │\n", 101 "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", 102 "│ dense_3 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1\u001b[0m) │ \u001b[38;5;34m51\u001b[0m │\n", 103 "└─────────────────────────────────┴────────────────────────┴───────────────┘\n" 104 ] 105 }, 106 "metadata": {}, 107 "output_type": "display_data" 108 }, 109 { 110 "data": { 111 "text/html": [ 112 "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> Total params: </span><span style=\"color: #00af00; text-decoration-color: #00af00\">5,618</span> (21.95 KB)\n", 113 "</pre>\n" 114 ], 115 "text/plain": [ 116 "\u001b[1m Total params: \u001b[0m\u001b[38;5;34m5,618\u001b[0m (21.95 KB)\n" 117 ] 118 }, 119 "metadata": {}, 120 "output_type": "display_data" 121 }, 122 { 123 "data": { 124 "text/html": [ 125 "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> Trainable params: </span><span style=\"color: #00af00; text-decoration-color: #00af00\">5,601</span> (21.88 KB)\n", 126 "</pre>\n" 127 ], 128 "text/plain": [ 129 "\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m5,601\u001b[0m (21.88 KB)\n" 130 ] 131 }, 132 "metadata": {}, 133 "output_type": "display_data" 134 }, 135 { 136 "data": { 137 "text/html": [ 138 "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> Non-trainable params: </span><span style=\"color: #00af00; text-decoration-color: #00af00\">17</span> (72.00 B)\n", 139 "</pre>\n" 140 ], 141 "text/plain": [ 142 "\u001b[1m Non-trainable params: \u001b[0m\u001b[38;5;34m17\u001b[0m (72.00 B)\n" 143 ] 144 }, 145 "metadata": {}, 146 "output_type": "display_data" 147 } 148 ], 149 "source": [ 150 "model.summary()" 151 ] 152 }, 153 { 154 "cell_type": "code", 155 "execution_count": 4, 156 "metadata": {}, 157 "outputs": [], 158 "source": [ 159 "optimizer = tf.keras.optimizers.Adam(learning_rate=1e-3)\n", 160 "model.compile(loss='mse', optimizer=optimizer, metrics=['RootMeanSquaredError'])\n", 161 "norm_layer.adapt(X_train)" 162 ] 163 }, 164 { 165 "cell_type": "code", 166 "execution_count": 5, 167 "metadata": {}, 168 "outputs": [ 169 { 170 "name": "stdout", 171 "output_type": "stream", 172 "text": [ 173 "Epoch 1/20\n", 174 "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - RootMeanSquaredError: 1.2797 - loss: 1.7474 - val_RootMeanSquaredError: 0.6666 - val_loss: 0.4444\n", 175 "Epoch 2/20\n", 176 "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 988us/step - RootMeanSquaredError: 0.6317 - loss: 0.3996 - val_RootMeanSquaredError: 0.6262 - val_loss: 0.3921\n", 177 "Epoch 3/20\n", 178 "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 932us/step - RootMeanSquaredError: 0.6012 - loss: 0.3618 - val_RootMeanSquaredError: 0.6135 - val_loss: 0.3764\n", 179 "Epoch 4/20\n", 180 "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 981us/step - RootMeanSquaredError: 0.5898 - loss: 0.3483 - val_RootMeanSquaredError: 0.6002 - val_loss: 0.3602\n", 181 "Epoch 5/20\n", 182 "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 1ms/step - RootMeanSquaredError: 0.5737 - loss: 0.3295 - val_RootMeanSquaredError: 0.5929 - val_loss: 0.3516\n", 183 "Epoch 6/20\n", 184 "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 944us/step - RootMeanSquaredError: 0.5647 - loss: 0.3192 - val_RootMeanSquaredError: 0.5876 - val_loss: 0.3453\n", 185 "Epoch 7/20\n", 186 "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 969us/step - RootMeanSquaredError: 0.5633 - loss: 0.3178 - val_RootMeanSquaredError: 0.5853 - val_loss: 0.3425\n", 187 "Epoch 8/20\n", 188 "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 1ms/step - RootMeanSquaredError: 0.5551 - loss: 0.3085 - val_RootMeanSquaredError: 0.5816 - val_loss: 0.3383\n", 189 "Epoch 9/20\n", 190 "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 922us/step - RootMeanSquaredError: 0.5500 - loss: 0.3028 - val_RootMeanSquaredError: 0.5773 - val_loss: 0.3332\n", 191 "Epoch 10/20\n", 192 "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 1ms/step - RootMeanSquaredError: 0.5433 - loss: 0.2954 - val_RootMeanSquaredError: 0.5755 - val_loss: 0.3312\n", 193 "Epoch 11/20\n", 194 "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 1ms/step - RootMeanSquaredError: 0.5386 - loss: 0.2904 - val_RootMeanSquaredError: 0.5712 - val_loss: 0.3263\n", 195 "Epoch 12/20\n", 196 "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 1ms/step - RootMeanSquaredError: 0.5350 - loss: 0.2864 - val_RootMeanSquaredError: 0.5696 - val_loss: 0.3244\n", 197 "Epoch 13/20\n", 198 "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 950us/step - RootMeanSquaredError: 0.5329 - loss: 0.2842 - val_RootMeanSquaredError: 0.5701 - val_loss: 0.3250\n", 199 "Epoch 14/20\n", 200 "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 926us/step - RootMeanSquaredError: 0.5335 - loss: 0.2849 - val_RootMeanSquaredError: 0.5706 - val_loss: 0.3256\n", 201 "Epoch 15/20\n", 202 "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 1ms/step - RootMeanSquaredError: 0.5288 - loss: 0.2798 - val_RootMeanSquaredError: 0.5681 - val_loss: 0.3227\n", 203 "Epoch 16/20\n", 204 "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 952us/step - RootMeanSquaredError: 0.5263 - loss: 0.2772 - val_RootMeanSquaredError: 0.5674 - val_loss: 0.3220\n", 205 "Epoch 17/20\n", 206 "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 1ms/step - RootMeanSquaredError: 0.5243 - loss: 0.2751 - val_RootMeanSquaredError: 0.5638 - val_loss: 0.3179\n", 207 "Epoch 18/20\n", 208 "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - RootMeanSquaredError: 0.5240 - loss: 0.2748 - val_RootMeanSquaredError: 0.5647 - val_loss: 0.3189\n", 209 "Epoch 19/20\n", 210 "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 1ms/step - RootMeanSquaredError: 0.5233 - loss: 0.2741 - val_RootMeanSquaredError: 0.5676 - val_loss: 0.3221\n", 211 "Epoch 20/20\n", 212 "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 960us/step - RootMeanSquaredError: 0.5226 - loss: 0.2733 - val_RootMeanSquaredError: 0.5658 - val_loss: 0.3202\n" 213 ] 214 } 215 ], 216 "source": [ 217 "history = model.fit(X_train, y_train, epochs=20,\n", 218 " validation_data=(X_valid,y_valid))" 219 ] 220 }, 221 { 222 "cell_type": "code", 223 "execution_count": 6, 224 "metadata": {}, 225 "outputs": [ 226 { 227 "data": { 228 "text/plain": [ 229 "<Axes: >" 230 ] 231 }, 232 "execution_count": 6, 233 "metadata": {}, 234 "output_type": "execute_result" 235 }, 236 { 237 "data": { 238 "image/png": "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QGF3/bdRaaWfhdogza+jCal8rfb8nOTXBs+63jLP+vJrz37UhsrQIE8geM4zB885oKTKa/N56cowZ0XdMx4rNZ6ZjauElaEza58PqBkxjBARUfAp1YA+PNi1aN3qM4Ggw+o707H5grBiPi9dYeWyewYzn67cts/1DCNERETUSGqddAftyK41r+NyVAksVUJKbds0M4YRIiKijkSp9ly23TnYNZG1ntErRERE1CExjBAREVFQMYwQERFRUDGMEBERUVAxjBAREVFQMYwQERFRUDGMEBERUVAxjBAREVFQMYwQERFRUDGMEBERUVAxjBAREVFQMYwQERFRUDGMEBERUVC1ibv2iqIIADCbzUGuCREREdWX93vb+z1ekzYRRkpLSwEAycnJQa4JERERBaq0tBRhYWE1LhfEuuJKK+B2u3H+/HmEhoZCEIQm26/ZbEZycjLOnDkDk8nUZPttrTrS+fJc26+OdL481/aro5yvKIooLS1FYmIiFIqaR4a0iZYRhUKBTp06Ndv+TSZTu/5luFBHOl+ea/vVkc6X59p+dYTzra1FxIsDWImIiCioGEaIiIgoqDp0GNFqtVi8eDG0Wm2wq9IiOtL58lzbr450vjzX9qujnW9d2sQAViIiImq/OnTLCBEREQUfwwgREREFFcMIERERBRXDCBEREQVVuw8jy5cvR0pKCnQ6HUaOHIk9e/bUuv7nn3+O3r17Q6fTYcCAAdiwYUML1bRxlixZguHDhyM0NBSxsbGYPHky0tPTa91mzZo1EATB56HT6Vqoxg335JNPVqt37969a92mrX6uKSkp1c5VEATMnTvX7/pt7TP93//+h4kTJyIxMRGCIODLL7/0WS6KIhYtWoSEhATo9XqMHTsWx44dq3O/gf7dt4TaztXhcODRRx/FgAEDYDQakZiYiOnTp+P8+fO17rMhfwstoa7PdebMmdXqPW7cuDr32xo/V6Du8/X3NywIAl566aUa99laP9vm0q7DyGeffYYFCxZg8eLF2LdvHwYOHIi0tDTk5ub6XX/Hjh245ZZbcOedd+LXX3/F5MmTMXnyZBw8eLCFax64H3/8EXPnzsWuXbuwefNmOBwOXHPNNSgvL691O5PJhKysLPlx+vTpFqpx4/Tr18+n3tu2batx3bb8uf78888+57l582YAwE033VTjNm3pMy0vL8fAgQOxfPlyv8v/+c9/4rXXXsPKlSuxe/duGI1GpKWlwWq11rjPQP/uW0pt52qxWLBv3z488cQT2LdvH9auXYv09HRcf/31de43kL+FllLX5woA48aN86n3J598Uus+W+vnCtR9vlXPMysrC6tWrYIgCLjxxhtr3W9r/GybjdiOjRgxQpw7d6783uVyiYmJieKSJUv8rn/zzTeL1157rU/ZyJEjxb/+9a/NWs/mkJubKwIQf/zxxxrXWb16tRgWFtZylWoiixcvFgcOHFjv9dvT5/rAAw+I3bt3F91ut9/lbfUzFUVRBCB+8cUX8nu32y3Gx8eLL730klxWXFwsarVa8ZNPPqlxP4H+3QfDhefqz549e0QA4unTp2tcJ9C/hWDwd64zZswQJ02aFNB+2sLnKor1+2wnTZokXnXVVbWu0xY+26bUbltG7HY79u7di7Fjx8plCoUCY8eOxc6dO/1us3PnTp/1ASAtLa3G9VuzkpISAEBkZGSt65WVlaFLly5ITk7GpEmTcOjQoZaoXqMdO3YMiYmJ6NatG6ZNm4bMzMwa120vn6vdbseHH36IO+64o9YbRrbVz/RCGRkZyM7O9vnswsLCMHLkyBo/u4b83bdWJSUlEAQB4eHhta4XyN9Ca7J161bExsYiNTUV9957LwoKCmpctz19rjk5OVi/fj3uvPPOOtdtq59tQ7TbMJKfnw+Xy4W4uDif8ri4OGRnZ/vdJjs7O6D1Wyu324358+djzJgx6N+/f43rpaamYtWqVVi3bh0+/PBDuN1ujB49GmfPnm3B2gZu5MiRWLNmDTZu3IgVK1YgIyMDl156KUpLS/2u314+1y+//BLFxcWYOXNmjeu01c/UH+/nE8hn15C/+9bIarXi0UcfxS233FLrTdQC/VtoLcaNG4f3338fW7ZswYsvvogff/wR48ePh8vl8rt+e/lcAeC9995DaGgopkyZUut6bfWzbag2cddeCszcuXNx8ODBOvsXR40ahVGjRsnvR48ejT59+uCtt97CM88809zVbLDx48fLry+66CKMHDkSXbp0wX/+8596/W+jrXr33Xcxfvx4JCYm1rhOW/1MqZLD4cDNN98MURSxYsWKWtdtq38Lf/nLX+TXAwYMwEUXXYTu3btj69atuPrqq4NYs+a3atUqTJs2rc6B5W31s22odtsyEh0dDaVSiZycHJ/ynJwcxMfH+90mPj4+oPVbo3nz5uHrr7/GDz/8gE6dOgW0rVqtxuDBg3H8+PFmql3zCA8PR69evWqsd3v4XE+fPo3vvvsOd911V0DbtdXPFID8+QTy2TXk77418QaR06dPY/PmzQHfWr6uv4XWqlu3boiOjq6x3m39c/X66aefkJ6eHvDfMdB2P9v6ardhRKPRYOjQodiyZYtc5na7sWXLFp//OVY1atQon/UBYPPmzTWu35qIooh58+bhiy++wPfff4+uXbsGvA+Xy4Xff/8dCQkJzVDD5lNWVoYTJ07UWO+2/Ll6rV69GrGxsbj22msD2q6tfqYA0LVrV8THx/t8dmazGbt3767xs2vI331r4Q0ix44dw3fffYeoqKiA91HX30JrdfbsWRQUFNRY77b8uVb17rvvYujQoRg4cGDA27bVz7begj2Ctjl9+umnolarFdesWSMePnxYvPvuu8Xw8HAxOztbFEVRvP3228W///3v8vrbt28XVSqV+PLLL4tHjhwRFy9eLKrVavH3338P1inU27333iuGhYWJW7duFbOysuSHxWKR17nwfJ966ilx06ZN4okTJ8S9e/eKf/nLX0SdTiceOnQoGKdQbw8++KC4detWMSMjQ9y+fbs4duxYMTo6WszNzRVFsX19rqIoXTXQuXNn8dFHH622rK1/pqWlpeKvv/4q/vrrryIAcenSpeKvv/4qX0HywgsviOHh4eK6devE3377TZw0aZLYtWtXsaKiQt7HVVddJb7++uvy+7r+7oOltnO12+3i9ddfL3bq1Encv3+/z9+wzWaT93Hhudb1txAstZ1raWmp+NBDD4k7d+4UMzIyxO+++04cMmSI2LNnT9Fqtcr7aCufqyjW/XssiqJYUlIiGgwGccWKFX730VY+2+bSrsOIKIri66+/Lnbu3FnUaDTiiBEjxF27dsnLLr/8cnHGjBk+6//nP/8Re/XqJWo0GrFfv37i+vXrW7jGDQPA72P16tXyOhee7/z58+WfTVxcnDhhwgRx3759LV/5AE2dOlVMSEgQNRqNmJSUJE6dOlU8fvy4vLw9fa6iKIqbNm0SAYjp6enVlrX1z/SHH37w+3vrPSe32y0+8cQTYlxcnKjVasWrr7662s+hS5cu4uLFi33Kavu7D5bazjUjI6PGv+EffvhB3seF51rX30Kw1HauFotFvOaaa8SYmBhRrVaLXbp0EWfPnl0tVLSVz1UU6/49FkVRfOutt0S9Xi8WFxf73Udb+WybiyCKotisTS9EREREtWi3Y0aIiIiobWAYISIioqBiGCEiIqKgYhghIiKioGIYISIioqBiGCEiIqKgYhghIiKioGIYISIioqBiGCEiIqKgYhghIiKioGIYISIioqBiGCEiIqKg+v+8VzGYSNy1wgAAAABJRU5ErkJggg==", 239 "text/plain": [ 240 "<Figure size 640x480 with 1 Axes>" 241 ] 242 }, 243 "metadata": {}, 244 "output_type": "display_data" 245 } 246 ], 247 "source": [ 248 "import pandas as pd\n", 249 "\n", 250 "pd.DataFrame(history.history).plot()" 251 ] 252 }, 253 { 254 "cell_type": "code", 255 "execution_count": 7, 256 "metadata": {}, 257 "outputs": [ 258 { 259 "name": "stdout", 260 "output_type": "stream", 261 "text": [ 262 "\u001b[1m162/162\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 981us/step\n", 263 "72.50016054455384\n" 264 ] 265 } 266 ], 267 "source": [ 268 "import numpy as np\n", 269 "\n", 270 "y_pred = model.predict(X_test)\n", 271 "\n", 272 "residuals = y_test - y_pred\n", 273 "\n", 274 "percent_off = np.abs(residuals) / y_test * 100\n", 275 "\n", 276 "print(percent_off.mean())" 277 ] 278 } 279 ], 280 "metadata": { 281 "kernelspec": { 282 "display_name": "notebook", 283 "language": "python", 284 "name": "notebook" 285 }, 286 "language_info": { 287 "codemirror_mode": { 288 "name": "ipython", 289 "version": 3 290 }, 291 "file_extension": ".py", 292 "mimetype": "text/x-python", 293 "name": "python", 294 "nbconvert_exporter": "python", 295 "pygments_lexer": "ipython3", 296 "version": "3.11.2" 297 } 298 }, 299 "nbformat": 4, 300 "nbformat_minor": 2 301 }