{ "cells": [ { "cell_type": "markdown", "id": "1587aa08", "metadata": {}, "source": [ "# Lesson 28: TensorFlow/Keras neural network demonstration - part 1" ] }, { "cell_type": "markdown", "id": "1e712197", "metadata": {}, "source": [ "## Introduction to TensorFlow and Keras\n", "\n", "**TensorFlow** is an open-source numerical computation library developed by Google. It represents computations as a directed graph of operations on tensors (multi-dimensional arrays), and handles the low-level work of executing those operations efficiently on available hardware. It also provides automatic differentiation, which makes computing gradients for backpropagation automatic rather than something you have to derive by hand.\n", "\n", "**Keras** is a high-level neural network API that ships as part of TensorFlow (`tensorflow.keras`). It sits on top of TensorFlow and provides an 'easy' interface for defining model architectures, training loops, and evaluation. In practice, you write Keras code and TensorFlow does the underlying computation.\n", "\n", "### How the layers fit together\n", "\n", "```text\n", " ┌─────────────────────────────────────┐\n", " │ Your Python code │\n", " │ (define model, call .fit()) │\n", " └──────────────────┬──────────────────┘\n", " │\n", " ▼\n", " ┌─────────────────────────────────────┐\n", " │ Keras │\n", " │ (layers, losses, optimizers, │\n", " │ training loop) │\n", " └──────────────────┬──────────────────┘\n", " │\n", " ▼\n", " ┌─────────────────────────────────────┐\n", " │ TensorFlow Python API │\n", " │ (computation graph, autodiff, │\n", " │ op dispatch) │\n", " └──────────────────┬──────────────────┘\n", " │\n", " ▼\n", " ┌─────────────────────────────────────┐\n", " │ TensorFlow C++ runtime │\n", " │ (compiled ops: matmul, conv, │\n", " │ activations, autodiff) │\n", " └──────────────────┬──────────────────┘\n", " │\n", " ▼\n", " ┌─────────────────────────────────────┐\n", " │ Hardware backend │\n", " └──────────────────┬──────────────────┘\n", " ┌────────┴────────┐\n", " │ │\n", " ▼ ▼\n", " ┌─────────────┐ ┌─────────────┐\n", " │ CUDA GPU │ │ CPU │\n", " │ (parallel │ │ (fallback / │\n", " │ matrix ops) │ │small models)│\n", " └─────────────┘ └─────────────┘\n", "```\n", "\n", "When you call `model.fit()`, Keras translates your high-level instructions into TensorFlow Python API calls. Those calls are dispatched to TensorFlow's C++ runtime, where the actual numerical operations (matrix multiplications, convolutions, activation functions, and so on) are executed as compiled C++ code. The C++ runtime then hands off the work to whichever hardware backend is available: CUDA for a compatible NVIDIA GPU, or the CPU otherwise. The gradient computation for backpropagation is handled automatically by TensorFlow's autodiff engine at the C++ level, so neither you nor Keras needs to implement it explicitly." ] }, { "cell_type": "markdown", "id": "f55bc9f2", "metadata": {}, "source": [ "## Notebook set up\n", "\n", "### Vocareum compatibility" ] }, { "cell_type": "code", "execution_count": 1, "id": "235d8c63-1d5e-4a49-9481-b02ffc2667ee", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Running in Vocareum environment\n", "Note: you may need to restart the kernel to use updated packages.\n" ] } ], "source": [ "from pathlib import Path\n", "\n", "# Get the parts of the current directory path as a tuple\n", "path_parts = Path.cwd().parts\n", "\n", "# Check if 'voc' is the first directory level\n", "is_voc_root = len(path_parts) > 1 and path_parts[1] == \"voc\"\n", "\n", "# If we are in a Vocareum instance, upgrade TensorFlow and Keras\n", "if is_voc_root:\n", " print(\"Running in Vocareum environment\")\n", "\n", " get_ipython().run_line_magic(\n", " \"pip\", \"install -qq --no-warn-script-location tensorflow==2.17.0 keras==3.2.0\"\n", " )" ] }, { "cell_type": "markdown", "id": "cb78fd87-ab77-4980-9090-d158ca602ad1", "metadata": {}, "source": [ "### Imports" ] }, { "cell_type": "code", "execution_count": null, "id": "39b9bf45", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "2026-08-26 16:51:13.952201: I tensorflow/core/util/port.cc:153] oneDNN custom operations are on. You may see slightly different numerical results due to floating-point round-off errors from different computation orders. To turn them off, set the environment variable `TF_ENABLE_ONEDNN_OPTS=0`.\n", "2026-08-26 16:51:13.966297: E external/local_xla/xla/stream_executor/cuda/cuda_fft.cc:485] Unable to register cuFFT factory: Attempting to register factory for plugin cuFFT when one has already been registered\n", "2026-08-26 16:51:14.002408: E external/local_xla/xla/stream_executor/cuda/cuda_dnn.cc:8454] Unable to register cuDNN factory: Attempting to register factory for plugin cuDNN when one has already been registered\n", "2026-08-26 16:51:14.006989: E external/local_xla/xla/stream_executor/cuda/cuda_blas.cc:1452] Unable to register cuBLAS factory: Attempting to register factory for plugin cuBLAS when one has already been registered\n", "2026-08-26 16:51:14.018982: I tensorflow/core/platform/cpu_feature_guard.cc:210] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.\n", "To enable the following instructions: AVX2 AVX512F AVX512_VNNI FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.\n", "2026-08-26 16:51:18.215136: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Could not find TensorRT\n" ] } ], "source": [ "# Suppress noisy TensorFlow logs before importing\n", "import os\n", "os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'\n", "\n", "# Third party imports\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import pandas as pd\n", "import tensorflow as tf\n", "\n", "from sklearn.linear_model import LinearRegression\n", "from sklearn.model_selection import train_test_split\n", "from sklearn.preprocessing import StandardScaler\n", "from tensorflow import keras\n", "from tensorflow.keras import layers, Model\n", "\n", "tf.random.set_seed(315)" ] }, { "cell_type": "markdown", "id": "51df7cb5-2594-4c2c-8127-43f4900c58ce", "metadata": {}, "source": [ "### GPU configuration (if present)" ] }, { "cell_type": "code", "execution_count": null, "id": "a3e026f4-87f9-435b-84be-e6f8187228f8", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "2026-08-26 16:51:24.023398: E external/local_xla/xla/stream_executor/cuda/cuda_driver.cc:266] failed call to cuInit: CUDA_ERROR_NO_DEVICE: no CUDA-capable device is detected\n" ] } ], "source": [ "# Configure GPU settings\n", "gpus = tf.config.list_physical_devices('GPU')\n", "\n", "if gpus:\n", " try:\n", " # Use only GPU 0\n", " tf.config.set_visible_devices(gpus[0], 'GPU')\n", "\n", " # Enable memory growth\n", " tf.config.experimental.set_memory_growth(gpus[0], True)\n", "\n", " # Get GPU\n", " details = tf.config.experimental.get_device_details(gpus[0])\n", " cc = details.get('compute_capability', (0, 0))\n", " device = details.get('device_name', '')\n", "\n", " print(f'Using GPU: {device}, compute capability {cc[0]}.{cc[1]}')\n", " print('Memory growth enabled')\n", "\n", " except RuntimeError as e:\n", " print(e)" ] }, { "cell_type": "markdown", "id": "98f5eab8", "metadata": {}, "source": [ "## 1. Data preparation\n", "\n", "### 1.1. Load California housing data" ] }, { "cell_type": "code", "execution_count": 4, "id": "e94bf1e5", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
| \n", " | MedInc | \n", "HouseAge | \n", "AveRooms | \n", "AveBedrms | \n", "Population | \n", "AveOccup | \n", "Latitude | \n", "Longitude | \n", "MedHouseVal | \n", "
|---|---|---|---|---|---|---|---|---|---|
| 0 | \n", "8.3252 | \n", "41.0 | \n", "6.984127 | \n", "1.023810 | \n", "322.0 | \n", "2.555556 | \n", "37.88 | \n", "-122.23 | \n", "4.526 | \n", "
| 1 | \n", "8.3014 | \n", "21.0 | \n", "6.238137 | \n", "0.971880 | \n", "2401.0 | \n", "2.109842 | \n", "37.86 | \n", "-122.22 | \n", "3.585 | \n", "
| 2 | \n", "7.2574 | \n", "52.0 | \n", "8.288136 | \n", "1.073446 | \n", "496.0 | \n", "2.802260 | \n", "37.85 | \n", "-122.24 | \n", "3.521 | \n", "
| 3 | \n", "5.6431 | \n", "52.0 | \n", "5.817352 | \n", "1.073059 | \n", "558.0 | \n", "2.547945 | \n", "37.85 | \n", "-122.25 | \n", "3.413 | \n", "
| 4 | \n", "3.8462 | \n", "52.0 | \n", "6.281853 | \n", "1.081081 | \n", "565.0 | \n", "2.181467 | \n", "37.85 | \n", "-122.25 | \n", "3.422 | \n", "
Model: \"sequential\"\n",
"\n"
],
"text/plain": [
"\u001b[1mModel: \"sequential\"\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n",
"┃ Layer (type) ┃ Output Shape ┃ Param # ┃\n",
"┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n",
"│ dense (Dense) │ (None, 64) │ 576 │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ dropout (Dropout) │ (None, 64) │ 0 │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ dense_1 (Dense) │ (None, 32) │ 2,080 │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ dropout_1 (Dropout) │ (None, 32) │ 0 │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ dense_2 (Dense) │ (None, 1) │ 33 │\n",
"└─────────────────────────────────┴────────────────────────┴───────────────┘\n",
"\n"
],
"text/plain": [
"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n",
"┃\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",
"┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n",
"│ dense (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m576\u001b[0m │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ dropout (\u001b[38;5;33mDropout\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ dense_1 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m2,080\u001b[0m │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ dropout_1 (\u001b[38;5;33mDropout\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ dense_2 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1\u001b[0m) │ \u001b[38;5;34m33\u001b[0m │\n",
"└─────────────────────────────────┴────────────────────────┴───────────────┘\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"Total params: 2,689 (10.50 KB)\n", "\n" ], "text/plain": [ "\u001b[1m Total params: \u001b[0m\u001b[38;5;34m2,689\u001b[0m (10.50 KB)\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
Trainable params: 2,689 (10.50 KB)\n", "\n" ], "text/plain": [ "\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m2,689\u001b[0m (10.50 KB)\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
Non-trainable params: 0 (0.00 B)\n", "\n" ], "text/plain": [ "\u001b[1m Non-trainable params: \u001b[0m\u001b[38;5;34m0\u001b[0m (0.00 B)\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sequential_model = keras.Sequential([\n", " layers.Input(shape=(8,)),\n", " layers.Dense(64, activation='relu'),\n", " layers.Dropout(0.2),\n", " layers.Dense(32, activation='relu'),\n", " layers.Dropout(0.2),\n", " layers.Dense(1)\n", "])\n", "\n", "sequential_model.compile(\n", " optimizer=keras.optimizers.Adam(learning_rate=5e-4),\n", " loss='mse',\n", " metrics=['mae']\n", ")\n", "\n", "sequential_model.summary()" ] }, { "cell_type": "markdown", "id": "04aa4af3", "metadata": {}, "source": [ "### 3.2. Train model" ] }, { "cell_type": "code", "execution_count": 14, "id": "5178fc7f", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 2ms/step - loss: 0.6672 - mae: 0.6230 - val_loss: 0.3666 - val_mae: 0.4339\n", "Epoch 2/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.3991 - mae: 0.4688 - val_loss: 0.3225 - val_mae: 0.4081\n", "Epoch 3/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.3548 - mae: 0.4382 - val_loss: 0.3072 - val_mae: 0.3968\n", "Epoch 4/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.3254 - mae: 0.4122 - val_loss: 0.2977 - val_mae: 0.3885\n", "Epoch 5/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.3170 - mae: 0.4092 - val_loss: 0.2920 - val_mae: 0.3833\n", "Epoch 6/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.3092 - mae: 0.4026 - val_loss: 0.2872 - val_mae: 0.3829\n", "Epoch 7/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.2938 - mae: 0.3919 - val_loss: 0.2850 - val_mae: 0.3780\n", "Epoch 8/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.2969 - mae: 0.3922 - val_loss: 0.2796 - val_mae: 0.3734\n", "Epoch 9/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.2861 - mae: 0.3826 - val_loss: 0.2763 - val_mae: 0.3708\n", "Epoch 10/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.2782 - mae: 0.3785 - val_loss: 0.2752 - val_mae: 0.3699\n", "Epoch 11/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.2735 - mae: 0.3768 - val_loss: 0.2702 - val_mae: 0.3678\n", "Epoch 12/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.2737 - mae: 0.3753 - val_loss: 0.2683 - val_mae: 0.3648\n", "Epoch 13/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.2694 - mae: 0.3707 - val_loss: 0.2674 - val_mae: 0.3667\n", "Epoch 14/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.2634 - mae: 0.3686 - val_loss: 0.2653 - val_mae: 0.3623\n", "Epoch 15/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.2648 - mae: 0.3674 - val_loss: 0.2645 - val_mae: 0.3603\n", "Epoch 16/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.2651 - mae: 0.3683 - val_loss: 0.2614 - val_mae: 0.3617\n", "Epoch 17/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.2591 - mae: 0.3625 - val_loss: 0.2601 - val_mae: 0.3581\n", "Epoch 18/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.2606 - mae: 0.3654 - val_loss: 0.2575 - val_mae: 0.3550\n", "Epoch 19/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.2527 - mae: 0.3580 - val_loss: 0.2571 - val_mae: 0.3544\n", "Epoch 20/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.2574 - mae: 0.3617 - val_loss: 0.2563 - val_mae: 0.3517\n", "Epoch 21/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.2561 - mae: 0.3621 - val_loss: 0.2523 - val_mae: 0.3496\n", "Epoch 22/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.2528 - mae: 0.3564 - val_loss: 0.2526 - val_mae: 0.3506\n", "Epoch 23/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.2486 - mae: 0.3553 - val_loss: 0.2527 - val_mae: 0.3539\n", "Epoch 24/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.2511 - mae: 0.3542 - val_loss: 0.2527 - val_mae: 0.3506\n", "Epoch 25/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.2479 - mae: 0.3550 - val_loss: 0.2508 - val_mae: 0.3491\n", "Epoch 26/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.2528 - mae: 0.3547 - val_loss: 0.2490 - val_mae: 0.3498\n", "Epoch 27/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 884us/step - loss: 0.2521 - mae: 0.3570 - val_loss: 0.2483 - val_mae: 0.3484\n", "Epoch 28/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 1ms/step - loss: 0.2490 - mae: 0.3573 - val_loss: 0.2484 - val_mae: 0.3480\n", "Epoch 29/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.2508 - mae: 0.3549 - val_loss: 0.2458 - val_mae: 0.3441\n", "Epoch 30/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.2430 - mae: 0.3492 - val_loss: 0.2448 - val_mae: 0.3459\n", "Epoch 31/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.2473 - mae: 0.3538 - val_loss: 0.2437 - val_mae: 0.3421\n", "Epoch 32/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.2426 - mae: 0.3491 - val_loss: 0.2425 - val_mae: 0.3438\n", "Epoch 33/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.2405 - mae: 0.3492 - val_loss: 0.2424 - val_mae: 0.3400\n", "Epoch 34/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.2410 - mae: 0.3474 - val_loss: 0.2436 - val_mae: 0.3434\n", "Epoch 35/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.2436 - mae: 0.3497 - val_loss: 0.2428 - val_mae: 0.3420\n", "Epoch 36/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.2402 - mae: 0.3461 - val_loss: 0.2416 - val_mae: 0.3426\n", "Epoch 37/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.2380 - mae: 0.3468 - val_loss: 0.2408 - val_mae: 0.3406\n", "Epoch 38/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.2392 - mae: 0.3465 - val_loss: 0.2407 - val_mae: 0.3386\n", "Epoch 39/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.2389 - mae: 0.3455 - val_loss: 0.2400 - val_mae: 0.3374\n", "Epoch 40/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.2387 - mae: 0.3470 - val_loss: 0.2378 - val_mae: 0.3362\n", "Epoch 41/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.2351 - mae: 0.3445 - val_loss: 0.2365 - val_mae: 0.3358\n", "Epoch 42/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.2333 - mae: 0.3416 - val_loss: 0.2375 - val_mae: 0.3373\n", "Epoch 43/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.2337 - mae: 0.3417 - val_loss: 0.2365 - val_mae: 0.3330\n", "Epoch 44/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.2370 - mae: 0.3451 - val_loss: 0.2359 - val_mae: 0.3369\n", "Epoch 45/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.2352 - mae: 0.3435 - val_loss: 0.2352 - val_mae: 0.3339\n", "Epoch 46/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.2364 - mae: 0.3422 - val_loss: 0.2362 - val_mae: 0.3350\n", "Epoch 47/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.2379 - mae: 0.3449 - val_loss: 0.2353 - val_mae: 0.3376\n", "Epoch 48/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.2356 - mae: 0.3427 - val_loss: 0.2342 - val_mae: 0.3326\n", "Epoch 49/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.2297 - mae: 0.3401 - val_loss: 0.2340 - val_mae: 0.3352\n", "Epoch 50/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.2368 - mae: 0.3433 - val_loss: 0.2361 - val_mae: 0.3316\n", "Epoch 51/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.2328 - mae: 0.3411 - val_loss: 0.2334 - val_mae: 0.3329\n", "Epoch 52/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.2308 - mae: 0.3398 - val_loss: 0.2342 - val_mae: 0.3346\n", "Epoch 53/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 1ms/step - loss: 0.2297 - mae: 0.3403 - val_loss: 0.2337 - val_mae: 0.3376\n", "Epoch 54/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 879us/step - loss: 0.2314 - mae: 0.3403 - val_loss: 0.2308 - val_mae: 0.3310\n", "Epoch 55/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 943us/step - loss: 0.2312 - mae: 0.3390 - val_loss: 0.2316 - val_mae: 0.3316\n", "Epoch 56/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 862us/step - loss: 0.2353 - mae: 0.3413 - val_loss: 0.2311 - val_mae: 0.3309\n", "Epoch 57/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 873us/step - loss: 0.2320 - mae: 0.3382 - val_loss: 0.2310 - val_mae: 0.3320\n", "Epoch 58/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 938us/step - loss: 0.2311 - mae: 0.3390 - val_loss: 0.2307 - val_mae: 0.3309\n", "Epoch 59/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 869us/step - loss: 0.2288 - mae: 0.3367 - val_loss: 0.2325 - val_mae: 0.3310\n", "Epoch 60/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 936us/step - loss: 0.2274 - mae: 0.3360 - val_loss: 0.2299 - val_mae: 0.3268\n", "Epoch 61/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 876us/step - loss: 0.2296 - mae: 0.3369 - val_loss: 0.2306 - val_mae: 0.3268\n", "Epoch 62/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 868us/step - loss: 0.2304 - mae: 0.3365 - val_loss: 0.2292 - val_mae: 0.3309\n", "Epoch 63/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 860us/step - loss: 0.2308 - mae: 0.3392 - val_loss: 0.2284 - val_mae: 0.3296\n", "Epoch 64/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 856us/step - loss: 0.2292 - mae: 0.3371 - val_loss: 0.2280 - val_mae: 0.3275\n", "Epoch 65/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 881us/step - loss: 0.2296 - mae: 0.3366 - val_loss: 0.2279 - val_mae: 0.3297\n", "Epoch 66/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 890us/step - loss: 0.2280 - mae: 0.3371 - val_loss: 0.2263 - val_mae: 0.3255\n", "Epoch 67/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 885us/step - loss: 0.2294 - mae: 0.3387 - val_loss: 0.2296 - val_mae: 0.3309\n", "Epoch 68/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 888us/step - loss: 0.2279 - mae: 0.3356 - val_loss: 0.2277 - val_mae: 0.3275\n", "Epoch 69/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 876us/step - loss: 0.2264 - mae: 0.3359 - val_loss: 0.2270 - val_mae: 0.3274\n", "Epoch 70/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 888us/step - loss: 0.2261 - mae: 0.3357 - val_loss: 0.2272 - val_mae: 0.3274\n", "Epoch 71/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 913us/step - loss: 0.2264 - mae: 0.3332 - val_loss: 0.2267 - val_mae: 0.3258\n", "Epoch 72/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 912us/step - loss: 0.2237 - mae: 0.3357 - val_loss: 0.2257 - val_mae: 0.3277\n", "Epoch 73/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 869us/step - loss: 0.2275 - mae: 0.3368 - val_loss: 0.2274 - val_mae: 0.3255\n", "Epoch 74/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 867us/step - loss: 0.2278 - mae: 0.3345 - val_loss: 0.2270 - val_mae: 0.3252\n", "Epoch 75/75\n", "\u001b[1m387/387\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 872us/step - loss: 0.2265 - mae: 0.3361 - val_loss: 0.2251 - val_mae: 0.3234\n", "\n", "Training complete.\n", "Final training loss: 0.2301\n", "Final validation loss: 0.2251\n", "\n", "CPU times: user 44.4 s, sys: 4.55 s, total: 48.9 s\n", "Wall time: 45.6 s\n" ] } ], "source": [ "%%time\n", "\n", "sequential_history = sequential_model.fit(\n", " training_df[features],\n", " training_df[label],\n", " epochs=75,\n", " batch_size=32,\n", " validation_split=0.2,\n", " verbose=1\n", ")\n", "\n", "print('\\nTraining complete.')\n", "print(f'Final training loss: {sequential_history.history[\"loss\"][-1]:.4f}')\n", "print(f'Final validation loss: {sequential_history.history[\"val_loss\"][-1]:.4f}\\n')" ] }, { "cell_type": "markdown", "id": "d74f3b7e", "metadata": {}, "source": [ "### 3.3. Learning curves" ] }, { "cell_type": "code", "execution_count": 15, "id": "e0f48c27", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
Model: \"functional_mlp\"\n",
"\n"
],
"text/plain": [
"\u001b[1mModel: \"functional_mlp\"\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n",
"┃ Layer (type) ┃ Output Shape ┃ Param # ┃\n",
"┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n",
"│ input_features (InputLayer) │ (None, 8) │ 0 │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ hidden_1 (Dense) │ (None, 64) │ 576 │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ dropout_1 (Dropout) │ (None, 64) │ 0 │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ hidden_2 (Dense) │ (None, 32) │ 2,080 │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ dropout_2 (Dropout) │ (None, 32) │ 0 │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ output (Dense) │ (None, 1) │ 33 │\n",
"└─────────────────────────────────┴────────────────────────┴───────────────┘\n",
"\n"
],
"text/plain": [
"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n",
"┃\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",
"┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n",
"│ input_features (\u001b[38;5;33mInputLayer\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m8\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ hidden_1 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m576\u001b[0m │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ dropout_1 (\u001b[38;5;33mDropout\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ hidden_2 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m2,080\u001b[0m │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ dropout_2 (\u001b[38;5;33mDropout\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ output (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1\u001b[0m) │ \u001b[38;5;34m33\u001b[0m │\n",
"└─────────────────────────────────┴────────────────────────┴───────────────┘\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"Total params: 2,689 (10.50 KB)\n", "\n" ], "text/plain": [ "\u001b[1m Total params: \u001b[0m\u001b[38;5;34m2,689\u001b[0m (10.50 KB)\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
Trainable params: 2,689 (10.50 KB)\n", "\n" ], "text/plain": [ "\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m2,689\u001b[0m (10.50 KB)\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
Non-trainable params: 0 (0.00 B)\n", "\n" ], "text/plain": [ "\u001b[1m Non-trainable params: \u001b[0m\u001b[38;5;34m0\u001b[0m (0.00 B)\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Define input layer\n", "inputs = keras.Input(shape=(8,), name='input_features')\n", "\n", "# Define hidden layers\n", "x = layers.Dense(64, activation='relu', name='hidden_1')(inputs)\n", "x = layers.Dropout(0.2, name='dropout_1')(x)\n", "x = layers.Dense(32, activation='relu', name='hidden_2')(x)\n", "x = layers.Dropout(0.2, name='dropout_2')(x)\n", "\n", "# Define output layer\n", "outputs = layers.Dense(1, name='output')(x)\n", "\n", "# Create model\n", "functional_model = Model(inputs=inputs, outputs=outputs, name='functional_mlp')\n", "\n", "functional_model.compile(\n", " optimizer=keras.optimizers.Adam(learning_rate=5e-4),\n", " loss='mse',\n", " metrics=['mae']\n", ")\n", "\n", "functional_model.summary()" ] }, { "cell_type": "markdown", "id": "58042a68", "metadata": {}, "source": [ "### 4.2. Train model" ] }, { "cell_type": "code", "execution_count": 19, "id": "50a40114", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 1ms/step - loss: 0.6101 - mae: 0.5943 - val_loss: 0.3551 - val_mae: 0.4213\n", "Epoch 2/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 877us/step - loss: 0.3749 - mae: 0.4537 - val_loss: 0.3120 - val_mae: 0.3960\n", "Epoch 3/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 839us/step - loss: 0.3410 - mae: 0.4281 - val_loss: 0.3036 - val_mae: 0.3859\n", "Epoch 4/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 841us/step - loss: 0.3170 - mae: 0.4063 - val_loss: 0.2910 - val_mae: 0.3782\n", "Epoch 5/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 855us/step - loss: 0.3042 - mae: 0.3994 - val_loss: 0.2852 - val_mae: 0.3749\n", "Epoch 6/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 836us/step - loss: 0.2873 - mae: 0.3864 - val_loss: 0.2833 - val_mae: 0.3717\n", "Epoch 7/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 844us/step - loss: 0.2833 - mae: 0.3813 - val_loss: 0.2719 - val_mae: 0.3667\n", "Epoch 8/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 855us/step - loss: 0.2808 - mae: 0.3791 - val_loss: 0.2700 - val_mae: 0.3658\n", "Epoch 9/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 838us/step - loss: 0.2768 - mae: 0.3749 - val_loss: 0.2673 - val_mae: 0.3606\n", "Epoch 10/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 880us/step - loss: 0.2684 - mae: 0.3697 - val_loss: 0.2611 - val_mae: 0.3568\n", "Epoch 11/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 843us/step - loss: 0.2691 - mae: 0.3690 - val_loss: 0.2608 - val_mae: 0.3581\n", "Epoch 12/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 859us/step - loss: 0.2640 - mae: 0.3650 - val_loss: 0.2596 - val_mae: 0.3570\n", "Epoch 13/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 858us/step - loss: 0.2591 - mae: 0.3627 - val_loss: 0.2529 - val_mae: 0.3488\n", "Epoch 14/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 853us/step - loss: 0.2547 - mae: 0.3595 - val_loss: 0.2501 - val_mae: 0.3480\n", "Epoch 15/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 836us/step - loss: 0.2561 - mae: 0.3602 - val_loss: 0.2489 - val_mae: 0.3481\n", "Epoch 16/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 864us/step - loss: 0.2540 - mae: 0.3582 - val_loss: 0.2477 - val_mae: 0.3451\n", "Epoch 17/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 870us/step - loss: 0.2552 - mae: 0.3586 - val_loss: 0.2474 - val_mae: 0.3482\n", "Epoch 18/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 846us/step - loss: 0.2517 - mae: 0.3557 - val_loss: 0.2463 - val_mae: 0.3444\n", "Epoch 19/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 851us/step - loss: 0.2434 - mae: 0.3502 - val_loss: 0.2434 - val_mae: 0.3427\n", "Epoch 20/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 853us/step - loss: 0.2477 - mae: 0.3535 - val_loss: 0.2474 - val_mae: 0.3429\n", "Epoch 21/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 833us/step - loss: 0.2484 - mae: 0.3525 - val_loss: 0.2431 - val_mae: 0.3449\n", "Epoch 22/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 857us/step - loss: 0.2460 - mae: 0.3498 - val_loss: 0.2415 - val_mae: 0.3392\n", "Epoch 23/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 861us/step - loss: 0.2426 - mae: 0.3486 - val_loss: 0.2406 - val_mae: 0.3433\n", "Epoch 24/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 909us/step - loss: 0.2471 - mae: 0.3526 - val_loss: 0.2396 - val_mae: 0.3388\n", "Epoch 25/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 851us/step - loss: 0.2411 - mae: 0.3490 - val_loss: 0.2413 - val_mae: 0.3405\n", "Epoch 26/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 865us/step - loss: 0.2429 - mae: 0.3498 - val_loss: 0.2446 - val_mae: 0.3403\n", "Epoch 27/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 839us/step - loss: 0.2393 - mae: 0.3466 - val_loss: 0.2372 - val_mae: 0.3382\n", "Epoch 28/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 849us/step - loss: 0.2439 - mae: 0.3500 - val_loss: 0.2370 - val_mae: 0.3367\n", "Epoch 29/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 847us/step - loss: 0.2437 - mae: 0.3508 - val_loss: 0.2374 - val_mae: 0.3362\n", "Epoch 30/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 878us/step - loss: 0.2402 - mae: 0.3463 - val_loss: 0.2392 - val_mae: 0.3377\n", "Epoch 31/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 848us/step - loss: 0.2393 - mae: 0.3482 - val_loss: 0.2344 - val_mae: 0.3329\n", "Epoch 32/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 876us/step - loss: 0.2387 - mae: 0.3469 - val_loss: 0.2339 - val_mae: 0.3325\n", "Epoch 33/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 850us/step - loss: 0.2405 - mae: 0.3472 - val_loss: 0.2348 - val_mae: 0.3333\n", "Epoch 34/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 839us/step - loss: 0.2393 - mae: 0.3458 - val_loss: 0.2366 - val_mae: 0.3330\n", "Epoch 35/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 844us/step - loss: 0.2370 - mae: 0.3440 - val_loss: 0.2345 - val_mae: 0.3370\n", "Epoch 36/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 831us/step - loss: 0.2377 - mae: 0.3461 - val_loss: 0.2348 - val_mae: 0.3341\n", "Epoch 37/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 857us/step - loss: 0.2332 - mae: 0.3416 - val_loss: 0.2357 - val_mae: 0.3364\n", "Epoch 38/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 862us/step - loss: 0.2394 - mae: 0.3468 - val_loss: 0.2316 - val_mae: 0.3313\n", "Epoch 39/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 846us/step - loss: 0.2373 - mae: 0.3471 - val_loss: 0.2302 - val_mae: 0.3329\n", "Epoch 40/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 849us/step - loss: 0.2360 - mae: 0.3451 - val_loss: 0.2330 - val_mae: 0.3331\n", "Epoch 41/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 852us/step - loss: 0.2370 - mae: 0.3427 - val_loss: 0.2327 - val_mae: 0.3321\n", "Epoch 42/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 849us/step - loss: 0.2397 - mae: 0.3457 - val_loss: 0.2322 - val_mae: 0.3321\n", "Epoch 43/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 848us/step - loss: 0.2348 - mae: 0.3415 - val_loss: 0.2284 - val_mae: 0.3281\n", "Epoch 44/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 852us/step - loss: 0.2346 - mae: 0.3436 - val_loss: 0.2321 - val_mae: 0.3301\n", "Epoch 45/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 845us/step - loss: 0.2346 - mae: 0.3418 - val_loss: 0.2302 - val_mae: 0.3298\n", "Epoch 46/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 861us/step - loss: 0.2394 - mae: 0.3448 - val_loss: 0.2270 - val_mae: 0.3299\n", "Epoch 47/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 847us/step - loss: 0.2339 - mae: 0.3424 - val_loss: 0.2292 - val_mae: 0.3289\n", "Epoch 48/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 846us/step - loss: 0.2342 - mae: 0.3420 - val_loss: 0.2254 - val_mae: 0.3259\n", "Epoch 49/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 848us/step - loss: 0.2337 - mae: 0.3418 - val_loss: 0.2306 - val_mae: 0.3267\n", "Epoch 50/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 877us/step - loss: 0.2306 - mae: 0.3398 - val_loss: 0.2294 - val_mae: 0.3284\n", "Epoch 51/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 841us/step - loss: 0.2333 - mae: 0.3412 - val_loss: 0.2291 - val_mae: 0.3298\n", "Epoch 52/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 856us/step - loss: 0.2323 - mae: 0.3401 - val_loss: 0.2269 - val_mae: 0.3267\n", "Epoch 53/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 892us/step - loss: 0.2344 - mae: 0.3418 - val_loss: 0.2263 - val_mae: 0.3251\n", "Epoch 54/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 840us/step - loss: 0.2289 - mae: 0.3377 - val_loss: 0.2273 - val_mae: 0.3254\n", "Epoch 55/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 853us/step - loss: 0.2314 - mae: 0.3365 - val_loss: 0.2241 - val_mae: 0.3218\n", "Epoch 56/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 853us/step - loss: 0.2313 - mae: 0.3382 - val_loss: 0.2258 - val_mae: 0.3258\n", "Epoch 57/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 841us/step - loss: 0.2328 - mae: 0.3423 - val_loss: 0.2247 - val_mae: 0.3282\n", "Epoch 58/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 848us/step - loss: 0.2294 - mae: 0.3383 - val_loss: 0.2258 - val_mae: 0.3235\n", "Epoch 59/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 865us/step - loss: 0.2284 - mae: 0.3369 - val_loss: 0.2252 - val_mae: 0.3217\n", "Epoch 60/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 841us/step - loss: 0.2295 - mae: 0.3376 - val_loss: 0.2257 - val_mae: 0.3266\n", "Epoch 61/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 847us/step - loss: 0.2258 - mae: 0.3357 - val_loss: 0.2283 - val_mae: 0.3250\n", "Epoch 62/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 844us/step - loss: 0.2268 - mae: 0.3363 - val_loss: 0.2248 - val_mae: 0.3256\n", "Epoch 63/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 835us/step - loss: 0.2277 - mae: 0.3366 - val_loss: 0.2236 - val_mae: 0.3240\n", "Epoch 64/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 847us/step - loss: 0.2321 - mae: 0.3394 - val_loss: 0.2225 - val_mae: 0.3251\n", "Epoch 65/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 854us/step - loss: 0.2303 - mae: 0.3397 - val_loss: 0.2235 - val_mae: 0.3229\n", "Epoch 66/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 876us/step - loss: 0.2300 - mae: 0.3390 - val_loss: 0.2227 - val_mae: 0.3213\n", "Epoch 67/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 845us/step - loss: 0.2261 - mae: 0.3353 - val_loss: 0.2250 - val_mae: 0.3225\n", "Epoch 68/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 857us/step - loss: 0.2279 - mae: 0.3370 - val_loss: 0.2221 - val_mae: 0.3251\n", "Epoch 69/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 840us/step - loss: 0.2237 - mae: 0.3335 - val_loss: 0.2229 - val_mae: 0.3250\n", "Epoch 70/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 848us/step - loss: 0.2284 - mae: 0.3395 - val_loss: 0.2235 - val_mae: 0.3253\n", "Epoch 71/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 847us/step - loss: 0.2241 - mae: 0.3335 - val_loss: 0.2225 - val_mae: 0.3195\n", "Epoch 72/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 855us/step - loss: 0.2271 - mae: 0.3361 - val_loss: 0.2210 - val_mae: 0.3203\n", "Epoch 73/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 848us/step - loss: 0.2296 - mae: 0.3385 - val_loss: 0.2226 - val_mae: 0.3246\n", "Epoch 74/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 855us/step - loss: 0.2304 - mae: 0.3372 - val_loss: 0.2225 - val_mae: 0.3205\n", "Epoch 75/75\n", "\u001b[1m774/774\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 872us/step - loss: 0.2251 - mae: 0.3322 - val_loss: 0.2241 - val_mae: 0.3253\n", "Training complete.\n", "Final training loss: 0.2277\n", "Final validation loss: 0.2241\n" ] } ], "source": [ "functional_history = functional_model.fit(\n", " training_df[features],\n", " training_df[label],\n", " epochs=75,\n", " batch_size=16,\n", " validation_split=0.2,\n", " verbose=1\n", ")\n", "\n", "print('Training complete.')\n", "print(f'Final training loss: {functional_history.history[\"loss\"][-1]:.4f}')\n", "print(f'Final validation loss: {functional_history.history[\"val_loss\"][-1]:.4f}')" ] }, { "cell_type": "markdown", "id": "15632d7d", "metadata": {}, "source": [ "### 4.3. Learning curves" ] }, { "cell_type": "code", "execution_count": 20, "id": "72ba22ca", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "