{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "这里不是真正的搞推荐,只是尝试搭建一下 wide & deep 的模型结构。" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "2025-05-23 12:42:51.714036: 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", "2025-05-23 12:42:51.722264: I external/local_xla/xla/tsl/cuda/cudart_stub.cc:32] Could not find cuda drivers on your machine, GPU will not be used.\n", "2025-05-23 12:42:51.792226: I external/local_xla/xla/tsl/cuda/cudart_stub.cc:32] Could not find cuda drivers on your machine, GPU will not be used.\n", "2025-05-23 12:42:51.862966: E external/local_xla/xla/stream_executor/cuda/cuda_fft.cc:467] Unable to register cuFFT factory: Attempting to register factory for plugin cuFFT when one has already been registered\n", "WARNING: All log messages before absl::InitializeLog() is called are written to STDERR\n", "E0000 00:00:1747975371.919316 54527 cuda_dnn.cc:8579] Unable to register cuDNN factory: Attempting to register factory for plugin cuDNN when one has already been registered\n", "E0000 00:00:1747975371.937180 54527 cuda_blas.cc:1407] Unable to register cuBLAS factory: Attempting to register factory for plugin cuBLAS when one has already been registered\n", "W0000 00:00:1747975372.062499 54527 computation_placer.cc:177] computation placer already registered. Please check linkage and avoid linking the same target more than once.\n", "W0000 00:00:1747975372.062542 54527 computation_placer.cc:177] computation placer already registered. Please check linkage and avoid linking the same target more than once.\n", "W0000 00:00:1747975372.062549 54527 computation_placer.cc:177] computation placer already registered. Please check linkage and avoid linking the same target more than once.\n", "W0000 00:00:1747975372.062552 54527 computation_placer.cc:177] computation placer already registered. Please check linkage and avoid linking the same target more than once.\n", "2025-05-23 12:42:52.079978: 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 AVX_VNNI FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "2.19.0\n", "sys.version_info(major=3, minor=11, micro=2, releaselevel='final', serial=0)\n", "matplotlib 3.10.3\n", "numpy 2.1.3\n", "pandas 2.2.3\n", "sklearn 1.6.1\n", "tensorflow 2.19.0\n", "keras._tf_keras.keras 3.9.2\n" ] } ], "source": [ "import matplotlib as mpl\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "import numpy as np\n", "import sklearn\n", "import pandas as pd\n", "import os\n", "import sys\n", "import time\n", "import tensorflow as tf\n", "\n", "from tensorflow import keras\n", "\n", "print(tf.__version__)\n", "print(sys.version_info)\n", "for module in mpl, np, pd, sklearn, tf, keras:\n", " print(module.__name__, module.__version__)" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ ".. _california_housing_dataset:\n", "\n", "California Housing dataset\n", "--------------------------\n", "\n", "**Data Set Characteristics:**\n", "\n", ":Number of Instances: 20640\n", "\n", ":Number of Attributes: 8 numeric, predictive attributes and the target\n", "\n", ":Attribute Information:\n", " - MedInc median income in block group\n", " - HouseAge median house age in block group\n", " - AveRooms average number of rooms per household\n", " - AveBedrms average number of bedrooms per household\n", " - Population block group population\n", " - AveOccup average number of household members\n", " - Latitude block group latitude\n", " - Longitude block group longitude\n", "\n", ":Missing Attribute Values: None\n", "\n", "This dataset was obtained from the StatLib repository.\n", "https://www.dcc.fc.up.pt/~ltorgo/Regression/cal_housing.html\n", "\n", "The target variable is the median house value for California districts,\n", "expressed in hundreds of thousands of dollars ($100,000).\n", "\n", "This dataset was derived from the 1990 U.S. census, using one row per census\n", "block group. A block group is the smallest geographical unit for which the U.S.\n", "Census Bureau publishes sample data (a block group typically has a population\n", "of 600 to 3,000 people).\n", "\n", "A household is a group of people residing within a home. Since the average\n", "number of rooms and bedrooms in this dataset are provided per household, these\n", "columns may take surprisingly large values for block groups with few households\n", "and many empty houses, such as vacation resorts.\n", "\n", "It can be downloaded/loaded using the\n", ":func:`sklearn.datasets.fetch_california_housing` function.\n", "\n", ".. rubric:: References\n", "\n", "- Pace, R. Kelley and Ronald Barry, Sparse Spatial Autoregressions,\n", " Statistics and Probability Letters, 33 (1997) 291-297\n", "\n", "(20640, 8)\n", "(20640,)\n" ] } ], "source": [ "from sklearn.datasets import fetch_california_housing\n", "\n", "housing = fetch_california_housing()\n", "print(housing.DESCR)\n", "print(housing.data.shape)\n", "print(housing.target.shape)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(11610, 8) (11610,)\n", "(3870, 8) (3870,)\n", "(5160, 8) (5160,)\n" ] } ], "source": [ "from sklearn.model_selection import train_test_split\n", "\n", "x_train_all, x_test, y_train_all, y_test = train_test_split(\n", " housing.data, housing.target, random_state = 7)\n", "x_train, x_valid, y_train, y_valid = train_test_split(\n", " x_train_all, y_train_all, random_state = 11)\n", "print(x_train.shape, y_train.shape)\n", "print(x_valid.shape, y_valid.shape)\n", "print(x_test.shape, y_test.shape)\n" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "from sklearn.preprocessing import StandardScaler\n", "\n", "scaler = StandardScaler()\n", "x_train_scaled = scaler.fit_transform(x_train)\n", "x_valid_scaled = scaler.transform(x_valid)\n", "x_test_scaled = scaler.transform(x_test)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(8,)\n" ] } ], "source": [ "print(x_train.shape[1:])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "简单的模型示意:\n", "\n", "![pic1](./tf09.svg)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2025-05-23 12:42:53.857239: E external/local_xla/xla/stream_executor/cuda/cuda_platform.cc:51] failed call to cuInit: INTERNAL: CUDA error: Failed call to cuInit: UNKNOWN ERROR (303)\n" ] }, { "data": { "text/html": [ "
Model: \"functional\"\n",
       "
\n" ], "text/plain": [ "\u001b[1mModel: \"functional\"\u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
┏━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┓\n",
       "┃ Layer (type)         Output Shape          Param #  Connected to      ┃\n",
       "┡━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━┩\n",
       "│ input_layer         │ (None, 8)         │          0 │ -                 │\n",
       "│ (InputLayer)        │                   │            │                   │\n",
       "├─────────────────────┼───────────────────┼────────────┼───────────────────┤\n",
       "│ dense (Dense)       │ (None, 30)        │        270 │ input_layer[0][0] │\n",
       "├─────────────────────┼───────────────────┼────────────┼───────────────────┤\n",
       "│ dense_1 (Dense)     │ (None, 30)        │        930 │ dense[0][0]       │\n",
       "├─────────────────────┼───────────────────┼────────────┼───────────────────┤\n",
       "│ concatenate         │ (None, 38)        │          0 │ input_layer[0][0… │\n",
       "│ (Concatenate)       │                   │            │ dense_1[0][0]     │\n",
       "├─────────────────────┼───────────────────┼────────────┼───────────────────┤\n",
       "│ dense_2 (Dense)     │ (None, 1)         │         39 │ concatenate[0][0] │\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┃\u001b[1m \u001b[0m\u001b[1mConnected to \u001b[0m\u001b[1m \u001b[0m┃\n", "┡━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━┩\n", "│ input_layer │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m8\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │ - │\n", "│ (\u001b[38;5;33mInputLayer\u001b[0m) │ │ │ │\n", "├─────────────────────┼───────────────────┼────────────┼───────────────────┤\n", "│ dense (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m30\u001b[0m) │ \u001b[38;5;34m270\u001b[0m │ input_layer[\u001b[38;5;34m0\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;34m30\u001b[0m) │ \u001b[38;5;34m930\u001b[0m │ dense[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m] │\n", "├─────────────────────┼───────────────────┼────────────┼───────────────────┤\n", "│ concatenate │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m38\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │ input_layer[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m… │\n", "│ (\u001b[38;5;33mConcatenate\u001b[0m) │ │ │ dense_1[\u001b[38;5;34m0\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;34m39\u001b[0m │ concatenate[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m] │\n", "└─────────────────────┴───────────────────┴────────────┴───────────────────┘\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
 Total params: 1,239 (4.84 KB)\n",
       "
\n" ], "text/plain": [ "\u001b[1m Total params: \u001b[0m\u001b[38;5;34m1,239\u001b[0m (4.84 KB)\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
 Trainable params: 1,239 (4.84 KB)\n",
       "
\n" ], "text/plain": [ "\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m1,239\u001b[0m (4.84 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": [ "# 这部分在搭建deep模型\n", "# 函数式API 功能API,和之前不一样\n", "input = keras.layers.Input(shape=x_train.shape[1:])\n", "print(input)\n", "# input作为输入\n", "hidden1 = keras.layers.Dense(30, activation='relu')(input)\n", "#hidden1作为输入\n", "hidden2 = keras.layers.Dense(30, activation='relu')(hidden1)\n", "# 复合函数: f(x) = h(g(x))\n", "\n", "concat = keras.layers.concatenate([input, hidden2])\n", "output = keras.layers.Dense(1)(concat)\n", "\n", "#然后定义model,放入input,output\n", "model = keras.models.Model(inputs = [input],\n", " outputs = [output])\n", "\n", "model.summary()\n", "model.compile(loss=\"mean_squared_error\",\n", " optimizer = keras.optimizers.SGD(0.001))\n", "callbacks = [keras.callbacks.EarlyStopping(\n", " patience=5, min_delta=1e-3)]" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[,\n", " ,\n", " ,\n", " ,\n", " ]" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model.layers" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/100\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/home/zhiyue/Documents/myvenv/tf/lib/python3.11/site-packages/keras/src/models/functional.py:238: UserWarning: The structure of `inputs` doesn't match the expected structure.\n", "Expected: ['keras_tensor']\n", "Received: inputs=Tensor(shape=(None, 8))\n", " warnings.warn(msg)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 2.9595 - val_loss: 0.8802\n", "Epoch 2/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.7197 - val_loss: 0.6953\n", "Epoch 3/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.6419 - val_loss: 0.6567\n", "Epoch 4/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 3ms/step - loss: 0.5958 - val_loss: 0.6254\n", "Epoch 5/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 3ms/step - loss: 0.5722 - val_loss: 0.6058\n", "Epoch 6/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.5582 - val_loss: 0.5832\n", "Epoch 7/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.5394 - val_loss: 0.5652\n", "Epoch 8/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 3ms/step - loss: 0.5188 - val_loss: 0.5534\n", "Epoch 9/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.5140 - val_loss: 0.5437\n", "Epoch 10/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.5045 - val_loss: 0.5333\n", "Epoch 11/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.4951 - val_loss: 0.5251\n", "Epoch 12/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 3ms/step - loss: 0.4996 - val_loss: 0.5182\n", "Epoch 13/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.4882 - val_loss: 0.5102\n", "Epoch 14/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.4756 - val_loss: 0.5045\n", "Epoch 15/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 1ms/step - loss: 0.4673 - val_loss: 0.4974\n", "Epoch 16/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.4602 - val_loss: 0.4919\n", "Epoch 17/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.4665 - val_loss: 0.4887\n", "Epoch 18/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.4675 - val_loss: 0.4831\n", "Epoch 19/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.4505 - val_loss: 0.4810\n", "Epoch 20/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.4379 - val_loss: 0.4757\n", "Epoch 21/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.4539 - val_loss: 0.4714\n", "Epoch 22/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.4624 - val_loss: 0.4673\n", "Epoch 23/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.4597 - val_loss: 0.4640\n", "Epoch 24/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.4498 - val_loss: 0.4601\n", "Epoch 25/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.4520 - val_loss: 0.4580\n", "Epoch 26/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.4297 - val_loss: 0.4541\n", "Epoch 27/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.4133 - val_loss: 0.4512\n", "Epoch 28/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.4283 - val_loss: 0.4480\n", "Epoch 29/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.4194 - val_loss: 0.4461\n", "Epoch 30/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.4142 - val_loss: 0.4433\n", "Epoch 31/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.4247 - val_loss: 0.4400\n", "Epoch 32/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.4124 - val_loss: 0.4385\n", "Epoch 33/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.4299 - val_loss: 0.4356\n", "Epoch 34/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.4245 - val_loss: 0.4334\n", "Epoch 35/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.4124 - val_loss: 0.4308\n", "Epoch 36/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.4087 - val_loss: 0.4288\n", "Epoch 37/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.3971 - val_loss: 0.4269\n", "Epoch 38/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.4053 - val_loss: 0.4247\n", "Epoch 39/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.4042 - val_loss: 0.4230\n", "Epoch 40/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.4236 - val_loss: 0.4207\n", "Epoch 41/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.4019 - val_loss: 0.4183\n", "Epoch 42/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 1ms/step - loss: 0.3794 - val_loss: 0.4164\n", "Epoch 43/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.4030 - val_loss: 0.4151\n", "Epoch 44/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.3940 - val_loss: 0.4141\n", "Epoch 45/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.3786 - val_loss: 0.4112\n", "Epoch 46/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.3957 - val_loss: 0.4116\n", "Epoch 47/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.3716 - val_loss: 0.4088\n", "Epoch 48/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.3769 - val_loss: 0.4073\n", "Epoch 49/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.3772 - val_loss: 0.4068\n", "Epoch 50/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.3823 - val_loss: 0.4047\n", "Epoch 51/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 1ms/step - loss: 0.3944 - val_loss: 0.4038\n", "Epoch 52/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.3752 - val_loss: 0.4020\n", "Epoch 53/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.3737 - val_loss: 0.4006\n", "Epoch 54/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.3911 - val_loss: 0.3998\n", "Epoch 55/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.3894 - val_loss: 0.3984\n", "Epoch 56/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.3752 - val_loss: 0.3961\n", "Epoch 57/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.3888 - val_loss: 0.3962\n", "Epoch 58/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 1ms/step - loss: 0.3812 - val_loss: 0.3945\n", "Epoch 59/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 1ms/step - loss: 0.3997 - val_loss: 0.3931\n", "Epoch 60/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 1ms/step - loss: 0.3698 - val_loss: 0.3929\n", "Epoch 61/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.3661 - val_loss: 0.3918\n", "Epoch 62/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 1ms/step - loss: 0.3670 - val_loss: 0.3912\n", "Epoch 63/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.3669 - val_loss: 0.3892\n", "Epoch 64/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.3815 - val_loss: 0.3891\n", "Epoch 65/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.3719 - val_loss: 0.3876\n", "Epoch 66/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.3652 - val_loss: 0.3870\n", "Epoch 67/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.3771 - val_loss: 0.3875\n", "Epoch 68/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.3677 - val_loss: 0.3849\n", "Epoch 69/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.3525 - val_loss: 0.3856\n", "Epoch 70/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.3753 - val_loss: 0.3849\n", "Epoch 71/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.3578 - val_loss: 0.3837\n", "Epoch 72/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.3764 - val_loss: 0.3837\n", "Epoch 73/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.3815 - val_loss: 0.3823\n", "Epoch 74/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.3610 - val_loss: 0.3808\n", "Epoch 75/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.3586 - val_loss: 0.3809\n", "Epoch 76/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.3519 - val_loss: 0.3791\n", "Epoch 77/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.3519 - val_loss: 0.3790\n", "Epoch 78/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.3674 - val_loss: 0.3778\n", "Epoch 79/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 3ms/step - loss: 0.3498 - val_loss: 0.3773\n", "Epoch 80/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 3ms/step - loss: 0.3680 - val_loss: 0.3775\n", "Epoch 81/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 3ms/step - loss: 0.3552 - val_loss: 0.3762\n", "Epoch 82/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.3728 - val_loss: 0.3760\n", "Epoch 83/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.3615 - val_loss: 0.3751\n", "Epoch 84/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.3759 - val_loss: 0.3752\n", "Epoch 85/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.3628 - val_loss: 0.3748\n", "Epoch 86/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 3ms/step - loss: 0.3661 - val_loss: 0.3731\n", "Epoch 87/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.3482 - val_loss: 0.3727\n", "Epoch 88/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.3462 - val_loss: 0.3720\n", "Epoch 89/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 3ms/step - loss: 0.3620 - val_loss: 0.3717\n", "Epoch 90/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.3493 - val_loss: 0.3719\n", "Epoch 91/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.3523 - val_loss: 0.3713\n", "Epoch 92/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.3575 - val_loss: 0.3701\n", "Epoch 93/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.3475 - val_loss: 0.3698\n", "Epoch 94/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.3531 - val_loss: 0.3690\n", "Epoch 95/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.3535 - val_loss: 0.3687\n", "Epoch 96/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.3491 - val_loss: 0.3677\n", "Epoch 97/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.3618 - val_loss: 0.3688\n", "Epoch 98/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.3527 - val_loss: 0.3678\n", "Epoch 99/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.3415 - val_loss: 0.3685\n", "Epoch 100/100\n", "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - loss: 0.3428 - val_loss: 0.3675\n" ] } ], "source": [ "history = model.fit(x_train_scaled, y_train,\n", " validation_data = (x_valid_scaled, y_valid),\n", " epochs = 100,\n", " callbacks = callbacks)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'loss': [1.9442572593688965, 0.6913352608680725, 0.6317581534385681, 0.5972666144371033, 0.5714230537414551, 0.5534383058547974, 0.535968542098999, 0.5252794027328491, 0.5134387612342834, 0.5036860108375549, 0.49601900577545166, 0.48927369713783264, 0.4828236997127533, 0.4768630266189575, 0.4713060259819031, 0.46683475375175476, 0.46260249614715576, 0.45756420493125916, 0.4538637399673462, 0.44985923171043396, 0.4461941719055176, 0.4428238272666931, 0.4397617280483246, 0.43653327226638794, 0.4336789548397064, 0.43060487508773804, 0.42828431725502014, 0.42557764053344727, 0.4227480888366699, 0.4207237660884857, 0.41830214858055115, 0.415844202041626, 0.4137595295906067, 0.41187405586242676, 0.4097575545310974, 0.4081140160560608, 0.40589314699172974, 0.40427908301353455, 0.402235746383667, 0.4005247950553894, 0.39930883049964905, 0.39725461602211, 0.39584654569625854, 0.3939233720302582, 0.39237385988235474, 0.39076533913612366, 0.3893541991710663, 0.3885306119918823, 0.3869497776031494, 0.38506102561950684, 0.3840053081512451, 0.3829934000968933, 0.3817461133003235, 0.3802415728569031, 0.37931784987449646, 0.3782307207584381, 0.3774219751358032, 0.37668508291244507, 0.3756830394268036, 0.37428876757621765, 0.3734828233718872, 0.37263214588165283, 0.3714740574359894, 0.3709079921245575, 0.37050142884254456, 0.3696255385875702, 0.36843088269233704, 0.3678511083126068, 0.3673286736011505, 0.36620596051216125, 0.36584988236427307, 0.36545008420944214, 0.3645966947078705, 0.3635362386703491, 0.36297258734703064, 0.362659215927124, 0.361533522605896, 0.3611658215522766, 0.36051324009895325, 0.3601018190383911, 0.3593995273113251, 0.3583862781524658, 0.35829687118530273, 0.3574381470680237, 0.3572714924812317, 0.3564000725746155, 0.3556089699268341, 0.3548389971256256, 0.3546738028526306, 0.35405421257019043, 0.35344165563583374, 0.3525455892086029, 0.3523666560649872, 0.352120041847229, 0.3513154983520508, 0.3505692780017853, 0.34989097714424133, 0.3501761853694916, 0.34951359033584595, 0.3489224910736084], 'val_loss': [0.8802490234375, 0.6953044533729553, 0.656663715839386, 0.6253547668457031, 0.6057745814323425, 0.5831989645957947, 0.5652101039886475, 0.5533563494682312, 0.5437381863594055, 0.5332683324813843, 0.5251314043998718, 0.518224835395813, 0.510202169418335, 0.5045297741889954, 0.4973835051059723, 0.4918815493583679, 0.48867565393447876, 0.4831474721431732, 0.48095473647117615, 0.4757136106491089, 0.47138169407844543, 0.46733489632606506, 0.4639500379562378, 0.46007099747657776, 0.45795804262161255, 0.4540519118309021, 0.4512031674385071, 0.447951078414917, 0.44610485434532166, 0.44329336285591125, 0.4400191009044647, 0.43850427865982056, 0.4356461465358734, 0.433396577835083, 0.4307943880558014, 0.4287586212158203, 0.42685794830322266, 0.42466285824775696, 0.4229873716831207, 0.42072227597236633, 0.41834545135498047, 0.4164070188999176, 0.41507887840270996, 0.41407766938209534, 0.4111602306365967, 0.41160276532173157, 0.40883052349090576, 0.4073232412338257, 0.4067905843257904, 0.40465250611305237, 0.4037553071975708, 0.4019768536090851, 0.4006170630455017, 0.39982715249061584, 0.3984098434448242, 0.3960675895214081, 0.39619606733322144, 0.39449384808540344, 0.3931092917919159, 0.3929012715816498, 0.39182353019714355, 0.391218900680542, 0.389157772064209, 0.38912394642829895, 0.38763949275016785, 0.38704022765159607, 0.38750824332237244, 0.3849483132362366, 0.38561755418777466, 0.3849416673183441, 0.3837478756904602, 0.383711040019989, 0.3823179602622986, 0.380781352519989, 0.38092678785324097, 0.37907177209854126, 0.37901827692985535, 0.37776094675064087, 0.3773316442966461, 0.3774847984313965, 0.376169890165329, 0.3760264813899994, 0.3750779628753662, 0.37517932057380676, 0.37482428550720215, 0.3730897605419159, 0.3727302551269531, 0.37198606133461, 0.3716859817504883, 0.37189626693725586, 0.3713308572769165, 0.37005218863487244, 0.3697512745857239, 0.3690272271633148, 0.36869555711746216, 0.36770763993263245, 0.36876562237739563, 0.367801696062088, 0.3685286045074463, 0.3674905300140381]}\n" ] } ], "source": [ "print(history.history)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAp8AAAGyCAYAAACiMq99AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQAASWpJREFUeJzt3Xl8VPW9//H3mTWZrCQhCaugoKwiiyDQ61JRREul9vprlVvRVr32QivSutDbutS2tHVt1UptH5X2Vqq1V2mruKQgcBFEQVERRFEkCASEkD2Z7ZzfH2dmspA9k5kkvp6Px3nMzJkzc77JF9t3Puf7/R7DsixLAAAAQAI4kt0AAAAAfH4QPgEAAJAwhE8AAAAkDOETAAAACUP4BAAAQMIQPgEAAJAwhE8AAAAkDOETAAAACUP4BAAAQMIQPgEAAJAwHQqfy5Yt05lnnqmMjAzl5+dr3rx52r17d6ufWbFihQzDaLSlpKR0qdEAAADonToUPtevX6+FCxfqtddeU1FRkYLBoC688EJVV1e3+rnMzEwdOnQotu3bt69LjQYAAEDv5OrIwS+++GKj1ytWrFB+fr62bdums88+u8XPGYahwsLCzrUQAAAAfUaHwmdT5eXlkqScnJxWj6uqqtJJJ50k0zQ1adIk/exnP9PYsWNbPN7v98vv98dem6ap0tJS5ebmyjCMrjQZAAAA3cCyLFVWVmrgwIFyOFq+uG5YlmV15gSmaerLX/6yysrKtHHjxhaP27x5sz788EOdfvrpKi8v17333qsNGzbovffe0+DBg5v9zJ133qm77rqrM80CAABAEu3fv7/FjCd1IXx++9vf1gsvvKCNGze2eoKmgsGgRo8erSuuuEJ33313s8c0rXyWl5dr6NCh2rt3rzIyMjrT3A4JBoN65ZVXdN5558ntdnf7+dA96Me+gX7sG+jH3o8+7Bu6sx8rKys1fPhwlZWVKSsrq8XjOnXZfdGiRXruuee0YcOGDgVPSXK73Zo4caL27NnT4jFer1der/eE/Tk5OcrMzOxwezsqGAzK5/MpNzeX/8B6Mfqxb6Af+wb6sfejD/uG7uzH6Pe1NUSyQ7PdLcvSokWL9Oyzz2rt2rUaPnx4hxsWDof17rvvasCAAR3+LAAAAHq3DlU+Fy5cqJUrV+rvf/+7MjIyVFJSIknKyspSamqqJOmqq67SoEGDtGzZMknSj3/8Y5111lkaMWKEysrKdM8992jfvn269tpr4/yjAAAAoKfrUPh89NFHJUnnnntuo/2PP/64rr76aklScXFxoxlOx48f13XXXaeSkhL169dPkydP1qZNmzRmzJiutRwAAAC9TofCZ3vmJq1bt67R6wceeEAPPPBAhxoFAAA+38LhsILBYLKb0ecEg0G5XC7V1dUpHA536LNut1tOp7PLbejSOp8AAADxZFmWSkpKVFZWluym9EmWZamwsFD79+/v1Nrp2dnZKiws7NK664RPAADQY0SDZ35+vnw+HzeXiTPTNFVVVaX09PRWF4JvyrIs1dTU6MiRI5LUpYnjhE8AANAjhMPhWPDMzc1NdnP6JNM0FQgElJKS0qHwKSk2ufzIkSPKz8/v9CX4jp0VAACgm0THePp8viS3BC2J9k1XxuMSPgEAQI/CpfaeKx59Q/gEAABAwhA+AQAAuujcc8/V4sWLk92MXoHwCQAAgIQhfAIAACBhCJ8AAABxdPz4cV111VXq16+ffD6f5syZow8//DD2/r59+zR37lz169dPaWlpGjt2rFavXh377Pz589W/f3+lpqZq5MiRevzxx5P1o3QL1vkEAAA9lmVZqg127DaQ8ZLqdnZqdvfVV1+tDz/8UP/4xz+UmZmpW2+9VRdffLF27twpt9uthQsXKhAIaMOGDUpLS9POnTuVnp4uSfrRj36knTt36oUXXlBeXp727Nmj2traeP9oSUX4BAAAPVZtMKwxt7+UlHPv/PFs+Twdi0rR0Pnqq69qxowZkqQnnnhCQ4YM0apVq3T55ZeruLhYX/3qVzV+/HhJ0sknnxz7fHFxsSZOnKgpU6ZIkoYNGxafH6YH4bI7AABAnOzatUsul0vTpk2L7cvNzdVpp52mXbt2SZK++93v6ic/+YlmzpypO+64Q++8807s2G9/+9t68skndcYZZ+iWW27Rpk2bEv4zdDcqnwAAoMdKdTu188ezk3bu7nDttddq9uzZev755/Xyyy9r2bJluu+++/Sd73xHc+bM0b59+7R69WoVFRXp/PPP18KFC3Xvvfd2S1uSgconAADosQzDkM/jSsrWmfGeo0ePVigU0pYtW2L7jh07pt27d2vMmDGxfUOGDNENN9ygZ555Rt/73vf0u9/9LvZe//79tWDBAv35z3/Wgw8+qMcee6xrv8Qehson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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "def plot_learning_curves(history):\n", " pd.DataFrame(history.history).plot(figsize=(8, 5))\n", " plt.grid(True)\n", " plt.gca().set_ylim(0, 2.5)\n", " plt.show()\n", "plot_learning_curves(history)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.37196114659309387" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 不是这个模型不好,而是搭建的比较简单\n", "model.evaluate(x_test_scaled, y_test, verbose=0)" ] } ], "metadata": { "kernelspec": { "display_name": "tf", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.2" } }, "nbformat": 4, "nbformat_minor": 2 }