{ "cells": [ { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "**Chương 10 – Giới thiệu về Mạng Nơ-ron Nhân tạo với Keras**\n", "\n", "_Notebook này sẽ chứa tất cả các mã lập trình mẫu và lời giải cho các bài tập trong chương 10._" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "\n", " \n", " \n", "
\n", " \"Open\n", " \n", " \n", "
" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "# Cài đặt" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Đầu tiên hãy nhập một vài mô-đun thông dụng, đảm bảo rằng Matplotlib sẽ vẽ đồ thị ngay trong notebook, và chuẩn bị một hàm để lưu đồ thị. Ta cũng kiểm tra xem Python phiên bản từ 3.5 trở lên đã được cài đặt hay chưa (mặc dù Python 2.x vẫn có thể hoạt động, phiên bản này đã không còn sử dụng nên chúng tôi rất khuyến khích việc sử dụng Python 3), cũng như Scikit-Learn ≥ 0.20." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "# Python ≥3.5 is required\n", "import sys\n", "assert sys.version_info >= (3, 5)\n", "\n", "# Scikit-Learn ≥0.20 is required\n", "import sklearn\n", "assert sklearn.__version__ >= \"0.20\"\n", "\n", "try:\n", " # %tensorflow_version only exists in Colab.\n", " %tensorflow_version 2.x\n", "except Exception:\n", " pass\n", "\n", "# TensorFlow ≥2.0 is required\n", "import tensorflow as tf\n", "assert tf.__version__ >= \"2.0\"\n", "\n", "# Common imports\n", "import numpy as np\n", "import os\n", "\n", "# to make this notebook's output stable across runs\n", "np.random.seed(42)\n", "\n", "# To plot pretty figures\n", "%matplotlib inline\n", "import matplotlib as mpl\n", "import matplotlib.pyplot as plt\n", "mpl.rc('axes', labelsize=14)\n", "mpl.rc('xtick', labelsize=12)\n", "mpl.rc('ytick', labelsize=12)\n", "\n", "# Where to save the figures\n", "PROJECT_ROOT_DIR = \".\"\n", "CHAPTER_ID = \"ann\"\n", "IMAGES_PATH = os.path.join(PROJECT_ROOT_DIR, \"images\", CHAPTER_ID)\n", "os.makedirs(IMAGES_PATH, exist_ok=True)\n", "\n", "def save_fig(fig_id, tight_layout=True, fig_extension=\"png\", resolution=300):\n", " path = os.path.join(IMAGES_PATH, fig_id + \".\" + fig_extension)\n", " print(\"Saving figure\", fig_id)\n", " if tight_layout:\n", " plt.tight_layout()\n", " plt.savefig(path, format=fig_extension, dpi=resolution)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Perceptrons" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Chú ý**: ta thiết lập `max_iter` và `tol` một cách rõ ràng để tránh các cảnh báo là giá trị mặc định của chúng sẽ thay đổi trong các phiên bản tương lai của Scikit-Learn." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/tmp/ipykernel_584199/3295362500.py:7: DeprecationWarning: `np.int` is a deprecated alias for the builtin `int`. To silence this warning, use `int` by itself. Doing this will not modify any behavior and is safe. When replacing `np.int`, you may wish to use e.g. `np.int64` or `np.int32` to specify the precision. If you wish to review your current use, check the release note link for additional information.\n", "Deprecated in NumPy 1.20; for more details and guidance: https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations\n", " y = (iris.target == 0).astype(np.int)\n" ] } ], "source": [ "import numpy as np\n", "from sklearn.datasets import load_iris\n", "from sklearn.linear_model import Perceptron\n", "\n", "iris = load_iris()\n", "X = iris.data[:, (2, 3)] # petal length, petal width\n", "y = (iris.target == 0).astype(np.int)\n", "\n", "per_clf = Perceptron(max_iter=1000, tol=1e-3, random_state=42)\n", "per_clf.fit(X, y)\n", "\n", "y_pred = per_clf.predict([[2, 0.5]])" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([1])" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "y_pred" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Saving figure perceptron_iris_plot\n" ] }, { "data": { "image/png": "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By1pnZNFRITTrl1z4uLG8NJLt1KoUAFf24oVX9KnTx0mTmzPnj1/hTBLyQ7//TeRtWsrs2pVGGvXVua//yaGLJcjRzz/5pQqVZqiRdMcWZmmF15oz7RpH9K373B++mkNH300gzZt7ubff1P/90kkUKFYKOQxoBCwE5gEdHDOrTKzGO98xjHefrFACWC631zHX3nbIoG+wC5gN/AE0Mo5p7mQ5STBWwI5+5eNzsm0pHXOV6xYIXr1asuqVaO4776rMPN86eZcIj/++Abdu1fnyy/7EB9/IMSZSlb477+JbN/ejoSETYAjIWET27e3C1qRfPxq8ogRg6hbtwL16lUAPEMsOnfu6Ov3v/9NpWnT84iJKUTNmqVp2bIpO3fuSPW433zzOU899RLXXnsjMTGVOe+8BjzwQAceeuhxXx/nHK+9NpgLLqhGTEwhmjatw5QpJ36JbtiwCgDXXnsB5coZrVpdDkBiYiLDhvWhXr2KVKgQRdOmdfjqq8+SnH/o0N40aFCJChWiqF27PI8/fq+vbdasr7nppkupUaMUNWuW5rbbmrF2bVzm30QJmaAXyM65f5xzrZxzRZxzMc65D7zxzc65os65zd7nVzjnIryx49t13rZdzrkLnHPFnHMlnXONnHMzg/1aJHdIbanjrF8CObUfp/yxYGWw3ufgfZ55V4UKZRg37gl++eVlrrqqri8eH3+AL77oTvfuNfnpp7dJTEztWwnJDXbu7IpzB5PEnDvIzp1dg5bDvHlzWL16OZMnf83HH393UvuOHX/x6KN3cPvt9zF3bhyfffYDt9560syvSZQrV55Zs75m797k9/yfMGBANz744C0GDRrJjz+u5sknX+KFFx5l5swvAfjmG88X05Mnf82KFX/yzjtTARg79lVGjhxCbOwg5sxZwXXX3cwDD9zCihVLAfjii08YNWoogwaNYv7835k48X80aHCh77wHDhygXbun+eabX/j009kUL16Cu+++yXf1XHKPYN+kJxJ0MTF3s27dqCRfy2fHEsjR0dd6xyCfHE9NwYIVUxxOUbBgxTTOFE7KwynCU+lfgJSHUxRIIeYREVE6xeEUERGlU90nWO9zsM6TH9StW4Xp03syY8YSOncez6pVmwHYs2c777//ELNmDad166Gcc07qf4cl50pI2BxQPDsULFiQV199m6ioqBTbd+zYTkJCAjfd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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "a = -per_clf.coef_[0][0] / per_clf.coef_[0][1]\n", "b = -per_clf.intercept_ / per_clf.coef_[0][1]\n", "\n", "axes = [0, 5, 0, 2]\n", "\n", "x0, x1 = np.meshgrid(\n", " np.linspace(axes[0], axes[1], 500).reshape(-1, 1),\n", " np.linspace(axes[2], axes[3], 200).reshape(-1, 1),\n", " )\n", "X_new = np.c_[x0.ravel(), x1.ravel()]\n", "y_predict = per_clf.predict(X_new)\n", "zz = y_predict.reshape(x0.shape)\n", "\n", "plt.figure(figsize=(10, 4))\n", "plt.plot(X[y==0, 0], X[y==0, 1], \"bs\", label=\"Không phải Iris-Setosa\")\n", "plt.plot(X[y==1, 0], X[y==1, 1], \"yo\", label=\"Iris-Setosa\")\n", "\n", "plt.plot([axes[0], axes[1]], [a * axes[0] + b, a * axes[1] + b], \"k-\", linewidth=3)\n", "from matplotlib.colors import ListedColormap\n", "custom_cmap = ListedColormap(['#9898ff', '#fafab0'])\n", "\n", "plt.contourf(x0, x1, zz, cmap=custom_cmap)\n", "plt.xlabel(\"Chiều dài cánh hoa\", fontsize=14)\n", "plt.ylabel(\"Chiều rộng cánh hoa\", fontsize=14)\n", "plt.legend(loc=\"lower right\", fontsize=14)\n", "plt.axis(axes)\n", "\n", "save_fig(\"perceptron_iris_plot\")\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Hàm Kích hoạt" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "def sigmoid(z):\n", " return 1 / (1 + np.exp(-z))\n", "\n", "def relu(z):\n", " return np.maximum(0, z)\n", "\n", "def derivative(f, z, eps=0.000001):\n", " return (f(z + eps) - f(z - eps))/(2 * eps)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Saving figure activation_functions_plot\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "z = np.linspace(-5, 5, 200)\n", "\n", "plt.figure(figsize=(11,4))\n", "\n", "plt.subplot(121)\n", "plt.plot(z, np.sign(z), \"r-\", linewidth=1, label=\"Hàm Bước\")\n", "plt.plot(z, sigmoid(z), \"g--\", linewidth=2, label=\"Sigmoid\")\n", "plt.plot(z, np.tanh(z), \"b-\", linewidth=2, label=\"Tanh\")\n", "plt.plot(z, relu(z), \"m-.\", linewidth=2, label=\"ReLU\")\n", "plt.grid(True)\n", "plt.legend(loc=\"center right\", fontsize=14)\n", "plt.title(\"Hàm Kích hoạt\", fontsize=14)\n", "plt.axis([-5, 5, -1.2, 1.2])\n", "\n", "plt.subplot(122)\n", "plt.plot(z, derivative(np.sign, z), \"r-\", linewidth=1, label=\"Hàm Bước\")\n", "plt.plot(0, 0, \"ro\", markersize=5)\n", "plt.plot(0, 0, \"rx\", markersize=10)\n", "plt.plot(z, derivative(sigmoid, z), \"g--\", linewidth=2, label=\"Sigmoid\")\n", "plt.plot(z, derivative(np.tanh, z), \"b-\", linewidth=2, label=\"Tanh\")\n", "plt.plot(z, derivative(relu, z), \"m-.\", linewidth=2, label=\"ReLU\")\n", "plt.grid(True)\n", "#plt.legend(loc=\"center right\", fontsize=14)\n", "plt.title(\"Đạo Hàm\", fontsize=14)\n", "plt.axis([-5, 5, -0.2, 1.2])\n", "\n", "save_fig(\"activation_functions_plot\")\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "def heaviside(z):\n", " return (z >= 0).astype(z.dtype)\n", "\n", "def mlp_xor(x1, x2, activation=heaviside):\n", " return activation(-activation(x1 + x2 - 1.5) + activation(x1 + x2 - 0.5) - 0.5)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "x1s = np.linspace(-0.2, 1.2, 100)\n", "x2s = np.linspace(-0.2, 1.2, 100)\n", "x1, x2 = np.meshgrid(x1s, x2s)\n", "\n", "z1 = mlp_xor(x1, x2, activation=heaviside)\n", "z2 = mlp_xor(x1, x2, activation=sigmoid)\n", "\n", "plt.figure(figsize=(10,4))\n", "\n", "plt.subplot(121)\n", "plt.contourf(x1, x2, z1)\n", "plt.plot([0, 1], [0, 1], \"gs\", markersize=20)\n", "plt.plot([0, 1], [1, 0], \"y^\", markersize=20)\n", "plt.title(\"Hàm Kích hoạt: heaviside\", fontsize=14)\n", "plt.grid(True)\n", "\n", "plt.subplot(122)\n", "plt.contourf(x1, x2, z2)\n", "plt.plot([0, 1], [0, 1], \"gs\", markersize=20)\n", "plt.plot([0, 1], [1, 0], \"y^\", markersize=20)\n", "plt.title(\"Hàm Kích hoạt: sigmoid\", fontsize=14)\n", "plt.grid(True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Xây dựng một bộ Phân loại Hình ảnh" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Đầu tiên hãy nạp TensoFlow và Keras." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "import tensorflow as tf\n", "from tensorflow import keras" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'2.4.1'" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tf.__version__" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'2.4.0'" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "keras.__version__" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Hãy bắt đầu bằng cách tải tập dữ liệu MNIST thời trang. Keras có một số phương thức để tải các bộ dữ liệu phổ biến trong `keras.datasets`. Tập dữ liệu đã được phân chia thành tập huấn luyện và tập kiểm tra cho chúng ta, nhưng sẽ là hữu ích khi ta chia tập huấn luyện một lần nữa để có được tập kiểm định:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "fashion_mnist = keras.datasets.fashion_mnist\n", "(X_train_full, y_train_full), (X_test, y_test) = fashion_mnist.load_data()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Tập huấn luyện chứa 60,000 ảnh xám, mỗi ảnh có kích thước 28x28 pixel:" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(60000, 28, 28)" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X_train_full.shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Cường độ mỗi điểm ảnh được biểu diễn bởi một byte (từ 0 tới 255):" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "dtype('uint8')" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X_train_full.dtype" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "Hãy chia tập huấn luyện đầy đủ thành một tập kiểm định và một tập huấn luyện (nhỏ hơn). Ta cũng tỷ lệ hóa cường độ pixel xuống khoảng 0-1 và chuyển đổi chúng thành kiểu float bằng cách chia cho 255. " ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "X_valid, X_train = X_train_full[:5000] / 255., X_train_full[5000:] / 255.\n", "y_valid, y_train = y_train_full[:5000], y_train_full[5000:]\n", "X_test = X_test / 255." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Ta có thể biểu diễn hình ảnh này sử dụng hàm `imshow()` của Matplotlib, với bản đồ màu `binary`:" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.imshow(X_train[0], cmap=\"binary\")\n", "plt.axis('off')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Nhãn là ID của lớp (biểu diễn dưới kiểu uint8), từ 0 tới 9:" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([4, 0, 7, ..., 3, 0, 5], dtype=uint8)" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "y_train" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Dưới đây là tên của các lớp tương ứng:" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [], "source": [ "class_names = [\"T-shirt/top\", \"Trouser\", \"Pullover\", \"Dress\", \"Coat\",\n", " \"Sandal\", \"Shirt\", \"Sneaker\", \"Bag\", \"Ankle boot\"]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Vậy nên hình ảnh đầu tiên trong tập huấn luyện là một cái áo khoác (coat):" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'Coat'" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "class_names[y_train[0]]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Tập kiểm định chứa 5.000 hình ảnh và tập kiểm tra chứa 10.000 hình ảnh:" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(5000, 28, 28)" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X_valid.shape" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(10000, 28, 28)" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X_test.shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Hãy xem một ví dụ các hình ảnh trong tập dữ liệu:" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Saving figure fashion_mnist_plot\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "n_rows = 4\n", "n_cols = 10\n", "plt.figure(figsize=(n_cols * 1.2, n_rows * 1.2))\n", "for row in range(n_rows):\n", " for col in range(n_cols):\n", " index = n_cols * row + col\n", " plt.subplot(n_rows, n_cols, index + 1)\n", " plt.imshow(X_train[index], cmap=\"binary\", interpolation=\"nearest\")\n", " plt.axis('off')\n", " plt.title(class_names[y_train[index]], fontsize=12)\n", "plt.subplots_adjust(wspace=0.2, hspace=0.5)\n", "save_fig('fashion_mnist_plot', tight_layout=False)\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [], "source": [ "model = keras.models.Sequential()\n", "model.add(keras.layers.Flatten(input_shape=[28, 28]))\n", "model.add(keras.layers.Dense(300, activation=\"relu\"))\n", "model.add(keras.layers.Dense(100, activation=\"relu\"))\n", "model.add(keras.layers.Dense(10, activation=\"softmax\"))" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [], "source": [ "keras.backend.clear_session()\n", "np.random.seed(42)\n", "tf.random.set_seed(42)" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [], "source": [ "model = keras.models.Sequential([\n", " keras.layers.Flatten(input_shape=[28, 28]),\n", " keras.layers.Dense(300, activation=\"relu\"),\n", " keras.layers.Dense(100, activation=\"relu\"),\n", " keras.layers.Dense(10, activation=\"softmax\")\n", "])" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[,\n", " ,\n", " ,\n", " ]" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model.layers" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Model: \"sequential\"\n", "_________________________________________________________________\n", "Layer (type) Output Shape Param # \n", "=================================================================\n", "flatten (Flatten) (None, 784) 0 \n", "_________________________________________________________________\n", "dense (Dense) (None, 300) 235500 \n", "_________________________________________________________________\n", "dense_1 (Dense) (None, 100) 30100 \n", "_________________________________________________________________\n", "dense_2 (Dense) (None, 10) 1010 \n", "=================================================================\n", "Total params: 266,610\n", "Trainable params: 266,610\n", "Non-trainable params: 0\n", "_________________________________________________________________\n" ] } ], "source": [ "model.summary()" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "keras.utils.plot_model(model, \"my_fashion_mnist_model.png\", show_shapes=True)" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'dense'" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "hidden1 = model.layers[1]\n", "hidden1.name" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model.get_layer(hidden1.name) is hidden1" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [], "source": [ "weights, biases = hidden1.get_weights()" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 0.02448617, -0.00877795, -0.02189048, ..., -0.02766046,\n", " 0.03859074, -0.06889391],\n", " [ 0.00476504, -0.03105379, -0.0586676 , ..., 0.00602964,\n", " -0.02763776, -0.04165364],\n", " [-0.06189284, -0.06901957, 0.07102345, ..., -0.04238207,\n", " 0.07121518, -0.07331658],\n", " ...,\n", " [-0.03048757, 0.02155137, -0.05400612, ..., -0.00113463,\n", " 0.00228987, 0.05581069],\n", " [ 0.07061854, -0.06960931, 0.07038955, ..., -0.00384101,\n", " 0.00034875, 0.02878492],\n", " [-0.06022581, 0.01577859, -0.02585464, ..., -0.00527829,\n", " 0.00272203, -0.06793761]], dtype=float32)" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "weights" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(784, 300)" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "weights.shape" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], dtype=float32)" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "biases" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(300,)" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "biases.shape" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [], "source": [ "model.compile(loss=\"sparse_categorical_crossentropy\",\n", " optimizer=\"sgd\",\n", " metrics=[\"accuracy\"])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Điều này tương đương với:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "```python\n", "model.compile(loss=keras.losses.sparse_categorical_crossentropy,\n", " optimizer=keras.optimizers.SGD(),\n", " metrics=[keras.metrics.sparse_categorical_accuracy])\n", "```" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/30\n", "1719/1719 [==============================] - 2s 1ms/step - loss: 1.0187 - accuracy: 0.6807 - val_loss: 0.5207 - val_accuracy: 0.8234\n", "Epoch 2/30\n", "1719/1719 [==============================] - 2s 921us/step - loss: 0.5028 - accuracy: 0.8260 - val_loss: 0.4345 - val_accuracy: 0.8538\n", "Epoch 3/30\n", "1719/1719 [==============================] - 2s 881us/step - loss: 0.4485 - accuracy: 0.8423 - val_loss: 0.5334 - val_accuracy: 0.7982\n", "Epoch 4/30\n", "1719/1719 [==============================] - 2s 902us/step - loss: 0.4209 - accuracy: 0.8535 - val_loss: 0.3916 - val_accuracy: 0.8652\n", "Epoch 5/30\n", "1719/1719 [==============================] - 2s 908us/step - loss: 0.4061 - accuracy: 0.8580 - val_loss: 0.3750 - val_accuracy: 0.8686\n", "Epoch 6/30\n", "1719/1719 [==============================] - 2s 916us/step - loss: 0.3755 - accuracy: 0.8669 - val_loss: 0.3709 - val_accuracy: 0.8718\n", "Epoch 7/30\n", "1719/1719 [==============================] - 2s 879us/step - loss: 0.3655 - accuracy: 0.8711 - val_loss: 0.3618 - val_accuracy: 0.8722\n", "Epoch 8/30\n", "1719/1719 [==============================] - 2s 894us/step - loss: 0.3483 - accuracy: 0.8760 - val_loss: 0.3862 - val_accuracy: 0.8618\n", "Epoch 9/30\n", "1719/1719 [==============================] - 2s 906us/step - loss: 0.3486 - accuracy: 0.8756 - val_loss: 0.3604 - val_accuracy: 0.8696\n", "Epoch 10/30\n", "1719/1719 [==============================] - 2s 905us/step - loss: 0.3299 - accuracy: 0.8835 - val_loss: 0.3430 - val_accuracy: 0.8772\n", "Epoch 11/30\n", "1719/1719 [==============================] - 2s 926us/step - loss: 0.3219 - accuracy: 0.8831 - val_loss: 0.3439 - val_accuracy: 0.8772\n", "Epoch 12/30\n", "1719/1719 [==============================] - 2s 883us/step - loss: 0.3123 - accuracy: 0.8873 - val_loss: 0.3310 - val_accuracy: 0.8832\n", "Epoch 13/30\n", "1719/1719 [==============================] - 2s 914us/step - loss: 0.3055 - accuracy: 0.8893 - val_loss: 0.3263 - val_accuracy: 0.8878\n", "Epoch 14/30\n", "1719/1719 [==============================] - 2s 924us/step - loss: 0.2992 - accuracy: 0.8914 - val_loss: 0.3412 - val_accuracy: 0.8782\n", "Epoch 15/30\n", "1719/1719 [==============================] - 2s 885us/step - loss: 0.2936 - accuracy: 0.8939 - val_loss: 0.3218 - val_accuracy: 0.8848\n", "Epoch 16/30\n", "1719/1719 [==============================] - 2s 916us/step - loss: 0.2863 - accuracy: 0.8975 - val_loss: 0.3095 - val_accuracy: 0.8898\n", "Epoch 17/30\n", "1719/1719 [==============================] - 2s 905us/step - loss: 0.2781 - accuracy: 0.9004 - val_loss: 0.3572 - val_accuracy: 0.8736\n", "Epoch 18/30\n", "1719/1719 [==============================] - 2s 904us/step - loss: 0.2782 - accuracy: 0.8997 - val_loss: 0.3138 - val_accuracy: 0.8898\n", "Epoch 19/30\n", "1719/1719 [==============================] - 2s 921us/step - loss: 0.2742 - accuracy: 0.9026 - val_loss: 0.3130 - val_accuracy: 0.8894\n", "Epoch 20/30\n", "1719/1719 [==============================] - 2s 910us/step - loss: 0.2700 - accuracy: 0.9037 - val_loss: 0.3252 - val_accuracy: 0.8824\n", "Epoch 21/30\n", "1719/1719 [==============================] - 2s 891us/step - loss: 0.2671 - accuracy: 0.9050 - val_loss: 0.3049 - val_accuracy: 0.8930\n", "Epoch 22/30\n", "1719/1719 [==============================] - 2s 942us/step - loss: 0.2615 - accuracy: 0.9052 - val_loss: 0.2976 - val_accuracy: 0.8976\n", "Epoch 23/30\n", "1719/1719 [==============================] - 2s 928us/step - loss: 0.2548 - accuracy: 0.9084 - val_loss: 0.2983 - val_accuracy: 0.8930\n", "Epoch 24/30\n", "1719/1719 [==============================] - 2s 901us/step - loss: 0.2454 - accuracy: 0.9118 - val_loss: 0.3079 - val_accuracy: 0.8892\n", "Epoch 25/30\n", "1719/1719 [==============================] - 2s 922us/step - loss: 0.2496 - accuracy: 0.9109 - val_loss: 0.2975 - val_accuracy: 0.8956\n", "Epoch 26/30\n", "1719/1719 [==============================] - 2s 891us/step - loss: 0.2431 - accuracy: 0.9136 - val_loss: 0.3068 - val_accuracy: 0.8888\n", "Epoch 27/30\n", "1719/1719 [==============================] - 2s 883us/step - loss: 0.2374 - accuracy: 0.9163 - val_loss: 0.3023 - val_accuracy: 0.8938\n", "Epoch 28/30\n", "1719/1719 [==============================] - 2s 935us/step - loss: 0.2314 - accuracy: 0.9176 - val_loss: 0.2992 - val_accuracy: 0.8930\n", "Epoch 29/30\n", "1719/1719 [==============================] - 2s 917us/step - loss: 0.2284 - accuracy: 0.9177 - val_loss: 0.3053 - val_accuracy: 0.8896\n", "Epoch 30/30\n", "1719/1719 [==============================] - 2s 916us/step - loss: 0.2252 - accuracy: 0.9211 - val_loss: 0.3004 - val_accuracy: 0.8920\n" ] } ], "source": [ "history = model.fit(X_train, y_train, epochs=30,\n", " validation_data=(X_valid, y_valid))" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'verbose': 1, 'epochs': 30, 'steps': 1719}" ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ "history.params" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29]\n" ] } ], "source": [ "print(history.epoch)" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "dict_keys(['loss', 'accuracy', 'val_loss', 'val_accuracy'])" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ "history.history.keys()" ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Saving figure keras_learning_curves_plot\n" ] }, { "data": { "image/png": "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REQGlJ7OQXM98DiwB6gAvmVZ1ipjTCGwGhhnWdZ24E4gBXi1VQfedy3LOju2xT68LrzwQj744AMmT56MMYZ7772X3Nxc5s2bx3333YfT6cTj8fDkk0+yY8cOrrrqKkKh8G3lf/nLX/Zx6UVERAaWHoUby7IqgQs6WL+dcIfjltf9ati31xseoWWM4b777uO+++5rs/2KK67giiuu2O84tdaIiIj0nSP69gsiIiIivaVwIyIiIv2Kwo2IiIj0Kwo3IiIi0q8o3IiIiEi/onAjIiIi/YrCjYiIiPQrCjdHgEAg0NdFEBER6Td6OkNx3/rPD6HswG9TFR8MgL3dR82dCGf/qttjL7jgAkpKSvD5fHznO9/huuuu47XXXuP2228nGAySmZnJW2+9hdfr5cYbb2TJkiUYY/jJT37CRRddhMfjiU4G+Pzzz/PKK6/wxBNPcOWVV5Kens6yZcuYNm0aX/7yl7n55ptpbGwkPj6ev/71r4wePZpgMMitt97K66+/jjGGa6+9lnHjxvHHP/6R+fPnA/DGG2/w8MMP8+KLLx5wHYmIiPQXR0e46UOPP/446enpNDY2cswxxzB37lyuvfZa3nnnHYYOHUplZSUAd999NykpKaxYEQ5hVVVV3Z57/fr1vPnmm9jtdmpra3nnnXdwOBy8+eab3H777bzwwgs8+uijbNmyhWXLluFwOKisrCQtLY0bbriBvXv3kpWVxV//+leuuuqqQ1oPIiIiR4ujI9z0oIWlK411dSQlJR3Qsb///e+jLSQlJSU8+uijnHzyyQwdOhSA9PR0AN58802eeeaZ6HFpaWndnvuLX/widrsdgJqaGq644go2bNiAMYbm5uboeb/5zW/icDjavN/ll1/OU089xVVXXcUHH3zAk08+eUCfT0REpL85OsJNHykuLubNN9/kgw8+ICEhgVmzZjF58mTWrVu3376WZdHqZqFRrdf5fL422xITE6PLd955J6eeeirz589n69atzJo1q8vzXnXVVZx//vm43W6++MUvRsOPiIjIQKcOxV2oqakhLS2NhIQE1q5dy//+9z+ampp4++232bJlC0D0stQZZ5zBH//4x+ixLZelcnJyWLNmDaFQKNoC1Nl75efnA/DEE09E159xxhk88sgj0U7HLe83aNAgBg0axD333MOVV14Zs88sIiJytFO46cJZZ51FIBBg0qRJ3HnnnRx33HFkZWXx6KOP8oUvfIHJkyfz5S9/GYA77riDqqoqJkyYwOTJk1m0aBEAv/rVrzjvvPM47bTTyMvL6/S9fvCDH3DbbbdxwgknEAwGo+uvueYaCgsLmTRpEpMnT+bvf/97dNtll13G4MGDGTdu3CGqARERkaOPrmV0IS4ujv/85z8dbjv77LPbvPZ4PMybN2+//S6++GIuvvji/da3bp0BOP7441m/fn309d133w2Aw+Hg/vvv5/7779/vHIsXL+baa6/t9nOIiIgMJAo3R6np06eTmJjIb3/7274uioiIyBFF4eYo9cknn/R1EURERI5I6nMjIiIi/YrCjYiIiPQrCjciIiLSryjciIiISL+icCMiIiL9isJNjHg8nk63bd26lQkTJhzG0oiIiAxcR8VQ8F9/9GvWVq494OODwWD0BpUtxqSP4dZjbz3YoomIiMgRRi03nbj11lt56KGHoq/vuusufvrTnzJ79mymTZvGxIkTeemll3p9Xp/Px1VXXcXEiROZOnVq9DYNq1at4thjj2XKlClMmjSJDRs2UF9fz7nnnsvkyZOZMGECzz77bMw+n4iISH91VLTcHGwLS11dHUlJSb065pJLLuHmm2/m+uuvB+C5557jtdde45ZbbiE5OZny8nKOO+445syZ0+Fduzvz4IMPArBixQrWrl3LGWecwfr163nkkUf4zne+w2WXXYbf7ycYDPLqq68yaNAg/v3vfwPhm2uKiIhI19Ry04mpU6eyZ88edu7cyaeffkpaWhp5eXncfvvtTJo0idNPP50dO3awe/fuXp138eLFXH755QCMGTOGoqIi1q9fz/HHH88vfvELfv3rX7Nt2zbi4+OZOHEib775JrfeeivvvvsuKSkph+KjioiI9CsKN124+OKLef7553n22We55JJLePrpp9m7dy+ffPIJy5cvJycnB5/P16tzWpbV4fpLL72UBQsWEB8fz5lnnsnChQsZNWoUn3zyCRMnTuS2227jZz/7WSw+loiISL92VFyW6iuXXHIJ1157LeXl5bz99ts899xzZGdn43Q6WbRoEdu2bev1OU8++WSefvppTjvtNNavX8/27dsZPXo0mzdvZtiwYdx0001s3ryZzz77jDFjxpCens5Xv/pVPB7PfncSFxERkf0p3HRh/Pjx1NXVkZ+fT15eHpdddhnnn38+M2bMYMqUKYwZM6bX57z++uv55je/ycSJE3E4HDzxxBPExcXx7LPP8tRTT+F0OsnNzeXHP/4xH3/8Md///vex2Ww4nU4efvjhQ/ApRURE+heFm26sWLEiupyZmckHH3zQ4X5er7fTcwwZMoSVK1cC4Ha7O2yBue2227jtttvarDvzzDM588wzD6DUIiIiA5f63IiIiEi/opabGFqxYkV0JFSLuLg4Pvzwwz4qkYiIyMCjcBNDEydOZPny5X1dDBERkQFNl6VERESkX1G4ERERkX5F4UZERET6FYUbERER6VcUbmLE4/H0dRFERESEo2S0VNkvfkHTmrUHfHwgGKTSbm+zLm7sGHJvv/1gi3bECQQCOBxHxT+riIjIIaGWm07ceuutPPTQQ9HXd911Fz/96U+ZPXs206ZNY+LEibz00ks9OpfX6+30uCeffJJJkyYxefLk6Bw5u3fv5sILL2Ty5MlMnjyZ999/n61btzJhwoTocb/5zW+46667AJg1axa33347p5xyCr/73e94+eWXmTlzJlOnTuX000+P3rnc6/Vy1VVXMXHiRCZNmsQLL7zAX/7yF2655ZboeR977DG++93vHnC9iYiI9LWj4r/4B9vCUldXR1JSUq+OueSSS7j55pu5/vrrAXjuued47bXXuOWWW0hOTqa8vJzjjjuOOXPmYIzp8lxut5v58+fvd9zq1av5+c9/znvvvUdmZiaVlZUA3HTTTZxyyinMnz+fYDCI1+ulqqqqy/eorq7m7bffBqCqqor//e9/GGP485//zL333stvf/tb7r77blJSUqK3lKiqqsLlcjFp0iTuvfdenE4nf/3rX/nTn/7Uq7oSERE5khwV4aYvTJ06lT179rBz50727t1LWloaeXl53HLLLbzzzjvYbDZ27NjB7t27yc3N7fJclmVx++2373fcwoULufjii8nMzAQgPT0dgIULF/Lkk08CYLfbSUlJ6TbcfPnLX44ul5aW8uUvf5ldu3bh9/sZOnQoAG+++SbPPPNMdL+0tDQATjvtNF555RXGjh1Lc3MzEydO7GVtiYiIHDkUbrpw8cUX8/zzz1NWVsYll1zC008/zd69e/nkk09wOp0MGTIEn8/X7Xk6O86yrG5bfVo4HA5CoVD0dfv3TUxMjC7feOONfPe732XOnDkUFxdHL1919n7XXHMNv/jFLxgzZgxX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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import pandas as pd\n", "\n", "pd.DataFrame(history.history).plot(figsize=(8, 5))\n", "plt.grid(True)\n", "plt.gca().set_ylim(0, 1)\n", "save_fig(\"keras_learning_curves_plot\")\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "313/313 [==============================] - 0s 639us/step - loss: 0.3357 - accuracy: 0.8837\n" ] }, { "data": { "text/plain": [ "[0.3357059359550476, 0.8837000131607056]" ] }, "execution_count": 42, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model.evaluate(X_test, y_test)" ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[0. , 0. , 0. , 0. , 0. , 0.01, 0. , 0.03, 0. , 0.96],\n", " [0. , 0. , 0.99, 0. , 0.01, 0. , 0. , 0. , 0. , 0. ],\n", " [0. , 1. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ]],\n", " dtype=float32)" ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X_new = X_test[:3]\n", "y_proba = model.predict(X_new)\n", "y_proba.round(2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Cảnh báo**: `model.predict_classes(X_new)` không còn được sử dụng nữa. Nó được thay thế bằng `np.argmax(model.predict(X_new), axis=-1)`." ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([9, 2, 1])" ] }, "execution_count": 44, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#y_pred = model.predict_classes(X_new) # deprecated\n", "y_pred = np.argmax(model.predict(X_new), axis=-1)\n", "y_pred" ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array(['Ankle boot', 'Pullover', 'Trouser'], dtype='" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(7.2, 2.4))\n", "for index, image in enumerate(X_new):\n", " plt.subplot(1, 3, index + 1)\n", " plt.imshow(image, cmap=\"binary\", interpolation=\"nearest\")\n", " plt.axis('off')\n", " plt.title(class_names[y_test[index]], fontsize=12)\n", "plt.subplots_adjust(wspace=0.2, hspace=0.5)\n", "save_fig('fashion_mnist_images_plot', tight_layout=False)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# MLP Hồi quy" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Hãy tải, phân tách và chia tỷ lệ tập dữ liệu nhà ở California (bản gốc, không phải bản sửa đổi như trong chương 2):" ] }, { "cell_type": "code", "execution_count": 48, "metadata": {}, "outputs": [], "source": [ "from sklearn.datasets import fetch_california_housing\n", "from sklearn.model_selection import train_test_split\n", "from sklearn.preprocessing import StandardScaler\n", "\n", "housing = fetch_california_housing()\n", "\n", "X_train_full, X_test, y_train_full, y_test = train_test_split(housing.data, housing.target, random_state=42)\n", "X_train, X_valid, y_train, y_valid = train_test_split(X_train_full, y_train_full, random_state=42)\n", "\n", "scaler = StandardScaler()\n", "X_train = scaler.fit_transform(X_train)\n", "X_valid = scaler.transform(X_valid)\n", "X_test = scaler.transform(X_test)" ] }, { "cell_type": "code", "execution_count": 49, "metadata": {}, "outputs": [], "source": [ "np.random.seed(42)\n", "tf.random.set_seed(42)" ] }, { "cell_type": "code", "execution_count": 50, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/20\n", "363/363 [==============================] - 0s 893us/step - loss: 2.2656 - val_loss: 0.8560\n", "Epoch 2/20\n", "363/363 [==============================] - 0s 670us/step - loss: 0.7413 - val_loss: 0.6531\n", "Epoch 3/20\n", "363/363 [==============================] - 0s 661us/step - loss: 0.6604 - val_loss: 0.6099\n", "Epoch 4/20\n", "363/363 [==============================] - 0s 640us/step - loss: 0.6245 - val_loss: 0.5658\n", "Epoch 5/20\n", "363/363 [==============================] - 0s 688us/step - loss: 0.5770 - val_loss: 0.5355\n", "Epoch 6/20\n", "363/363 [==============================] - 0s 668us/step - loss: 0.5609 - val_loss: 0.5173\n", "Epoch 7/20\n", "363/363 [==============================] - 0s 667us/step - loss: 0.5500 - val_loss: 0.5081\n", "Epoch 8/20\n", "363/363 [==============================] - 0s 647us/step - loss: 0.5200 - val_loss: 0.4799\n", "Epoch 9/20\n", "363/363 [==============================] - 0s 683us/step - loss: 0.5051 - val_loss: 0.4690\n", "Epoch 10/20\n", "363/363 [==============================] - 0s 679us/step - loss: 0.4910 - val_loss: 0.4656\n", "Epoch 11/20\n", "363/363 [==============================] - 0s 643us/step - loss: 0.4794 - val_loss: 0.4482\n", "Epoch 12/20\n", "363/363 [==============================] - 0s 644us/step - loss: 0.4656 - val_loss: 0.4479\n", "Epoch 13/20\n", "363/363 [==============================] - 0s 666us/step - loss: 0.4693 - val_loss: 0.4296\n", "Epoch 14/20\n", "363/363 [==============================] - 0s 655us/step - loss: 0.4537 - val_loss: 0.4233\n", "Epoch 15/20\n", "363/363 [==============================] - 0s 636us/step - loss: 0.4586 - val_loss: 0.4176\n", "Epoch 16/20\n", "363/363 [==============================] - 0s 646us/step - loss: 0.4612 - val_loss: 0.4123\n", "Epoch 17/20\n", "363/363 [==============================] - 0s 620us/step - loss: 0.4449 - val_loss: 0.4071\n", "Epoch 18/20\n", "363/363 [==============================] - 0s 675us/step - loss: 0.4407 - val_loss: 0.4037\n", "Epoch 19/20\n", "363/363 [==============================] - 0s 650us/step - loss: 0.4184 - val_loss: 0.4000\n", "Epoch 20/20\n", "363/363 [==============================] - 0s 646us/step - loss: 0.4128 - val_loss: 0.3969\n", "162/162 [==============================] - 0s 428us/step - loss: 0.4212\n" ] } ], "source": [ "model = keras.models.Sequential([\n", " keras.layers.Dense(30, activation=\"relu\", input_shape=X_train.shape[1:]),\n", " keras.layers.Dense(1)\n", "])\n", "model.compile(loss=\"mean_squared_error\", optimizer=keras.optimizers.SGD(learning_rate=1e-3))\n", "history = model.fit(X_train, y_train, epochs=20, validation_data=(X_valid, y_valid))\n", "mse_test = model.evaluate(X_test, y_test)\n", "X_new = X_test[:3]\n", "y_pred = model.predict(X_new)" ] }, { "cell_type": "code", "execution_count": 51, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAEACAYAAABI5zaHAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAApX0lEQVR4nO3de3xcdZ3/8dcnk0wuk3ubJr1S2kLpvZBWKFBoRaEqqD+rgCCXXYQVvKwXvPxWWRTdXUXXy+4qwi6IF6DIWlBU5NoKRVpaLi2kQOm9pdckTZvJ/fLdP86knaSTZNJMksmZ9/PxOI/MnPM9Zz49nbzPyZnv+Y455xAREX9JG+oCREQk8RTuIiI+pHAXEfEhhbuIiA8p3EVEfEjhLiLiQwp3EREfiivczewzZrbOzJrM7N5e2n7BzPaZ2WEzu8fMMhNSqYiIxC3eM/c9wHeAe3pqZGYXAV8DLgAmApOAb/WjPhEROQFxhbtzbrlz7hGgqpem1wB3O+cqnHOHgG8D1/arQhER6bP0BG9vBvD7qOfrgVIzG+Gc63RgMLMbgBsAsrOzy8ePH39CL9je3k5aWu/HqLoWx8EGx9jcNDIG8ZOGeOsbSsleo+rrH9XXP8lc36ZNmyqdcyUxFzrn4p7wLs3c28PyLcCSqOcZgAMm9rTd8vJyd6JWrFgRV7u/vnXAnfTVP7q126pO+LVORLz1DaVkr1H19Y/q659krg9Y57rJ1UQfjsJAftTzjse1CX6dPisOBQGormse4kpERAZeosO9ApgT9XwOsN91uSQzFIoi4X6oXuEuIv4Xb1fIdDPLAgJAwMyyzCzW9fpfAdeZ2XQzKwK+AdybsGr7oTin48y9ZYgrEREZePGeuX8DaMDr5viJyONvmNkEMwub2QQA59xfgNuBFcCOyHRrwqs+AdnBAFkZaTpzF5GUEFdvGefcN4FvdrM4t0vbHwI/7FdVA6Q4J6hr7iKSEpKzf88AKQop3EUkNaRUuBcr3EUkRaRcuOuau4ikgpQK9yJdcxeRFJFS4V4cClLb2EpLW/tQlyIiMqBSKtx1I5OIpIqUCveOG5kO6UYmEfG5lAr3olAGoPFlRMT/UircNXiYiKSK1Ax3XXMXEZ9LqXAvOnrNXeEuIv6WUuGeEUgjLytdl2VExPdSKtxBd6mKSGpIuXDXXaoikgpSLtx15i4iqSDlwr0oJ0h1WOEuIv6WcuFeHMpQV0gR8b0UDPdMGlvaaWhuG+pSREQGTAqGe2QIAp29i4iPpVy460YmEUkFKRfuGl9GRFJByoW7xnQXkVSQcuHeMaa7ztxFxM+GfbhnNh7oU/uC7AzSTOEuIv42vMP91QdYsPp6qHw77lXS0kxDEIiI7w3vcJ+8GEcabHiwT6sVaQgCEfG54R3ueWUcKprthXt7e9yrFevMXUR8bniHO7C/dDHU7IRdq+NepyiUoS/JFhFfG/bhfrDkLMgIwfplca9THArqDlUR8bVhH+7tgSyYdjFUPAItjXGtU5QT5FBdM865gS1ORGSIDPtwB2D2ZdB0GDb9Ja7mxaEgre2OI42tA1yYiMjQ8Ee4T1oEuWVx95rR+DIi4nf+CPe0AMz6KLz9BNRV9dq8ODdyl6quu4uIT/kj3AHmXA7trVCxvNemxTpzFxGfiyvczazYzB42szoz22FmV3TTzszsO2b2jpkdNrOVZjYjsSV3o2wWjJoRV68ZjQwpIn4X75n7T4FmoBS4Erijm9D+GPD3wEKgGHgB+HUC6ozPnMvgnXVQubnHZhoZUkT8rtdwN7MQsBS4xTkXds6tAv4AXBWj+cnAKufcVudcG/AbYHoiC+7RrI8B1usHq6FggGAgjWrdyCQiPmW99fU2s9OBvznnsqPm3Qyc75y7pEvbk4CHgcuBbcC/AKc65z4cY7s3ADcAlJaWli9bFv9NSNHC4TC5ublHn89e/89kN+xjzZl3glm3631+RT2zSwL8/czME3rdE60vGSV7jaqvf1Rf/yRzfYsXL37JOTcv5kLnXI8T3iWWfV3mXQ+sjNE2CPwEcEArXsCf3NtrlJeXuxO1YsWKzjNeud+5W/Od2/63Hte76Ed/ddfdu/aEXzdex9WXhJK9RtXXP6qvf5K5PmCd6yZX47nmHgbyu8zLB2pjtL0VmA+MB7KAbwHPmFlOHK+TGNMugYwc2NDzXwLFGhlSRHwsnnDfBKSb2SlR8+YAFTHazgEedM7tds61OufuBYoYzOvumblw2sVQ8XCPwxEUh4LqCikivtVruDvn6oDlwG1mFjKzc4APEbsXzFrgY2ZWamZpZnYVkAH03H0l0eZcBo2H4e3Hu22iwcNExM/i7Qp5E5ANHAAeAG50zlWY2QQzC5vZhEi77wHrgVeBGuALwFLnXE0ii+7VyYsgtxTWd99rpignyOGGFlrb4h8HXkRkuEiPp5Fzrhr4cIz5O4HcqOeNwKcj09AJpHvdItfcCfXVkFN8XJPiUBDn4HBDCyNyB7bHjIjIYPPP8ANdzb4M2lvg9d/FXKwbmUTEz/wb7mWzYNT0bm9o6hhfRjcyiYgf+Tfczbyz991roWrLcYuLQhkAVNc1DXZlIiIDzr/hDj0ORzAi5F1n15m7iPiRv8O9YCycfJ4X7l2GWSjM8c7cdc1dRPzI3+EO3jjvh7bDrjWdZmdlBAgFAxr2V0R8yf/hPu0SSM+OeWmmSHepiohP+T/cM/Ng2sXw+nJo7fzhqe5SFRG/8n+4A8y+HBprvO9YjVKUozN3EfGn1Aj3SYsgNOq4r+ArDgWpUriLiA+lRrgH0mHWR2HT495wBBE6cxcRv0qNcIdjwxFUPHx01ojcIHXNbTS2tA1hYSIiiZc64T56DpSc1qnXTFFkCIKaet3IJCL+kjrh3jEcwa41UL0VgLIC7y7V3728eygrExFJuNQJd4DZl+INR/BbAM47pYSLZ4/m+4+/xY+e3NTxPbAiIsNeaoV7wTiYeK7Xa8Y50gNp/OTy07l03jh+8vTb/Muf3lDAi4gvpFa4Q2Q4gm3eaJFAIM347kdmc+3ZE/mfVdv4+iOv096ugBeR4S31wn3aByE9q1Of97Q049ZLpnPTosncv2YnX3povb5+T0SGtdQL96x8OO0DULEcWo/1cTczvrLkNL580VQefuUdPn3/yzS1qoukiAxPqRfu4A1H0HDouOEIAD69eAq3XjKdxyv2c8OvXqKhWQEvIsNPaob75HdDqAQ2LIu5+O/OOZnbl87m2bcPcu0vXiTc1DrIBYqI9E9qhnsgHWZGhiNoOBSzyaXzx/OTy09n3Y5DXPk/a6jR6JEiMoykZrgDzLkM2po7DUfQ1QfnjOGOK8/gjT1HuPyu1Rys1fetisjwkLrhPnoujJwK64//Eo9oF84o4+5r57Gjqp7L7nyBvYcbBqc+EZF+SN1wN/PO3nethud/0qnnTFcLTynhV9e9i4O1TXzs5y+ws6p+EAsVEem71A13gPmfhFOXwJP/DHcsgLef6r7pxGLuu/5Mwk2tfOzOv7H5QO0gFioi0jepHe5ZBXDFg3DFQ+Ac3LcU7r8cqrbEbD57XCEP3rCAtna49M7VVOw5PMgFi4jEJ7XDvcOpF8JNq+G9t8H25+BnZ8HTt0FT+LimU8vyeOhTC8hKT+Pjd63m5Z2xe9uIiAwlhXuH9CCc84/w2Zdg5lJ47t/hv+bBhshZfZSTR4b47acWUBwK8on/WcNPnnqbww0aE15EkofCvau8Mvh/P4frnoTcUlj+SfjF+2Dv+k7NxhXl8Nt/WMC5U0byo6c2sfB7zyjkRSRpKNy7M/5dcP0K+OB/QuXbcOf58Ojnoa7qaJNR+VncdfU8/vjZczlr0giFvIgkDYV7T9LS4IyrvUs1Z34KXv4V/OcZ8OJ/Q9uxIQlmji3oNuTrWjR8sIgMPoV7PLIL4X3fhRuf976L9c83w53nwbbnOjWLFfI3/7WeHz+1SWfyIjKo4gp3Mys2s4fNrM7MdpjZFT20nWRmfzSzWjOrNLPbE1fuEBs1Da7+PVz6a2iuhV9eDA9dC4c7fwdrdMhPKw7w46fe5tzvPaOQF5FBE++Z+0+BZqAUuBK4w8xmdG1kZkHgSeAZoAwYB/wmMaUmCTOY/kH49Iuw+Ovw1mPwX/O93jWtnceemTm2gM+dkcWfPncuZ08eoZAXkUHTa7ibWQhYCtzinAs751YBfwCuitH8WmCPc+6Hzrk651yjc25DQitOFhnZcP5XvJCf/G6vX/wdZ8Pmp49rOmNMAXdeNU8hLyKDxnr7QmgzOx34m3MuO2rezcD5zrlLurS9B8gARgLzgdeBzzrnXoux3RuAGwBKS0vLly2LPbZ6b8LhMLm5uSe0biIVV73MlM13kdOwl4MjF7B5ynU0ZZXErG/HkTb+sKWFl/a3kZ0OZ45O55wx6UwpTMPMBr32ZNmH3VF9/aP6+ieZ61u8ePFLzrl5MRc653qcgIXAvi7zrgdWxmj7BNACvA8IAl8GtgLBnl6jvLzcnagVK1ac8LoJ19Lo3F+/79y3S73pr7e7lU8/0W3z19+pcV9Y9oo77RuPuZO++kd33u3PuB8/ucntrKobxKKTbB/GoPr6R/X1TzLXB6xz3eRqPNfcw0B+l3n5QKyRsxqAVc65x5xzzcAPgBHAtDheZ/hLz4TzbobPrIVT3gvPfIf5az8Lbz8Zs/mMMQX88LK5rP3Ge/jBx+YwtjCbHz+9iYW3r+DSO1/gwbU7OdKoyzYi0nfxhPsmIN3MTomaNweoiNF2A6CO3YXj4bJfwyeWAwb3fRQeuAIO7YjZPDcznY+Wj+P+689i1VffzZcvmkplbRNf/d1rzP/OU3z2gVdY8dYBWtvaB/ffISLDVnpvDZxzdWa2HLjNzD4JzAU+BJwdo/lvgC+Z2XuAFcDngErgjYRVPJxMuYC18/+D8zNeg2e/Dz99F5z7RW8Mm4ysmKuMLczm04uncNOiyazffZjfvbSbRzfs4dH1eyjJy+TDc8fwkTPGMW101z+mRESO6TXcI24C7gEOAFXAjc65CjObAGwEpjvndjrn3jKzTwA/B0YBLwMfjFyiSUkuLQMWfhFmXwqPfx1W/iusvx+WfA+mLul2PTNj7vhC5o4v5BsXT2PFmwdZ/vJufvH8dv77uW1MG53P0jPG8sG5YxiVF/tAISKpK65wd85VAx+OMX8nkNtl3nJgeSKK85WCcXDpL2HLCnjsK/DAZd4XhSz5LhSf3OOqmekBlswsY8nMMqrrmnl0/R6Wv7yb7/zpDf71z28wf2IxS2aWceGMMsYWZve4LRFJDfGeuUuiTF4Mn3oe1twBK7/nXaqZudT7Vqix5d5NUj0oDgW55uyJXHP2RDYfqOX3r+7h8Yp9fOvRjXzr0Y3MGlvARTNKWTKzjCmj8gbpHyUiyUbhPhQ6xo6f9THvztb1y2D9A1A22wv5WR+FYKjXzUwZlceXLpzKly6cytaDYR6v2M/jFfv4wROb+METm5hUEuKiGWVcNKOMOeMKhqQPvYgMDYX7UMofAx/4d3jPN2HDg7D2Hnj0c/DELTD34zDvOig5Na5NTSrJ5cZFudy4aDL7Djfy5MZ9/KViH3c9u5U7Vm5hdEEWF04v5aIZZbzr5GLSAxozTsTPFO7JIDPPO2Ofdx3sXA3r7oa1d8Oan8PEhd6y0z4AgYy4NldWkMVVCyZy1YKJ1NQ38/QbB3i8Yh/L1u7ily/soCgngwumeUG/8JSRA/yPE5GhoHBPJmZw0gJvuujf4JVfwbp74aFrILcMyq+BM66BgrFxb7IwJ8jS8nEsLR9HfXMrz246yOMV+3miYh//+9JusjMCTC6AjWzmrEkjmDW2gAyd1YsMewr3ZJVbAgu/BOd83rvDdd3d8Nfb4dkfwNT3eWfzJ5/vfaFInHKC6SyZOZolM0fT0tbO6q1VPLVxP0+/tpPb//IWAKFggHkTizlr0gjOmlTMrLEFuoQjMgwp3JNdWsDrDz91CVRvg5d+Aa/8Bt78I4yYAuV/B6dcCCNP6bWnTbSMQBoLTylh4SklLC6oZOa8Bby4rZrVW6tYvbWK7/3lTcAL+/knd4T9CGaOyVfYiwwDCvfhpPhkeO9tsOifYOPvvbP5J77uTaFRcNLZMPFcOOkcKDmtT2f1I3Mzef+s0bx/1mgAKsNNrNnqhf0LW6v47mNe2OdmpjN/YtHRsJ+hsBdJSgr34SgjC+Zc5k1VW2D7KtjxPGx/HjY+4rXJLu4c9qUz+xz2H5g9mg/M9sL+YG0Ta7Z5Z/UvbKlixVsHAS/s54wvYM44727auRMKdcesSBJQuA93IyZ7U/k14BzU7PBCfsfzXui/+UevXVYBTDgbJp7jhX3ZbAjE/99fkpfJxbPHcPHsMQAcqG1kzdZq1myr4tVdNdz17FZa270x48YWZjNnfEFk+IQiZo7NJyeot5rIYNJvnJ+YQdFEbzr9Sm9eza5jQb/jedj0mDc/mAcTzoKTzmbkwSbYWwSFEyCrMK5r96PysrhkzhgumeOFfWNLGxV7DvPKzhpe3VXD+t01/Pm1fQAE0oxTS/MiYV/A3PFFTBmVSyBNN1WJDBSFu98VjofCy2HO5d7zI3tgx9+Ohf3mJ5kJUPFdb3lmvhfy3U3dhH9WRoDyk4opP6n46LzKcBPrd9WwflcNr+yq4U8b9vDAizsB74Pa2eMKmTO+kJlj85k+Op+JI0KkKfBFEkLhnmryx3jDG8z6qPe84RDrnlrOvMklULPz2HRoB2x7FprDndfvGv5FE2Hq+6HopONeamRuJhdMK+WCaaUAtLc7tlfV8equyNn9rhruXrWVljbvck5OMMBpZXnMGFPA9DFe4E8t0/g4IidC4Z7qsosI502G6YuOX+YcNBzqHPrR07bnoLkW/vI1r8/96VfBtIu9Lw+PIS3NmFSSy6SSXD5yxjgAmlrb2HwgTMWeI2zcc4SNe4/wyCvv8OvV3hebpBmUhYz5+15h+uj8o6E/IjdzoPaIiC8o3KV7ZpBT7E1j5h6/3Dkv5Dc86PW9X/5JyCzw/io4/RMw5vRer99npgeYMaaAGWMKojbr2H2ogYo9h9m45wjPvraNtduq+f2re462KcvPYvqYfKaNzuPU0jwml+QyqSSkD25FIvSbICfOzLscc/5XYOHNsGOVF/Kv3uf1wR81w/tgd/ZlEIp/DBszY3xxDuOLc1gyczRnBPeyaNEiDtU1s3HvsTP8jXuO8NdNB2lrP/bNjmMLs5k8KpfJJSGmjMplckkuU0blMiIU1KiYklIU7pIYaWlw8nne9P7vw+u/84L+8X+CJ2/17rA9/SqYfEGfumBGKwoFOWfKSM6ZcuxA0dTaxvbKerYcDLP5QJgtB71p7bZqGlrajrYryM6IhH3n0B9XlKNeO+JLCndJvKwCmPf33nTgDS/k1y+DNx71BkCb+3GY+wkYOaXfL5WZHmBqWd5xH7y2tzv2Hmn0Av9AmM0HvZ/PvHmA367bfbRdMD2N8UXZTCjOYULkr4XxUY9zM/UrIsOT3rkysEZNg4v+BS64Fd5+wgv65/8DVv0IJiyAuVd430BVPKnbD2JPRFqaMbYwm7GF2Zx/akmnZTX1zd4Z/oE6thwMs7O6np3V9azbfojaptZObUeEgkfDPvoAMGFEDmX5WTrrl6SlcJfBkR70etJMuxhq93ln8q/8Bv7w2UgDg4LxkTtup0RNk8G19bjpvirMCR7XJx+8D3IPN7QcDfud1fXsivx8dVcNf3ptb6fr+xkB7wASopHHKjcwtiibcUXeAWVsUTZl+Vkad0eGjMJdBl9eGZz7ee+rBvdXwME3vTFyqjZ704YHoenI0ebnWTpUREJ/5JTO4R8q6dNomD0xMwpzghTmBJk9rvC45a1t7ew93Ngp/HdW1/PGjkaefvMAleGmTu0DaUZZfhZjCyOhHxX8YwuzGVOYTVZGICG1i3SlcJehYwZlM70pmnNQV3k07He/8gwTQs3e881PQlvzsbbBPO8afzAEwRwI5kJGTuR51JQRWda1XWYelEyN65JQeiDt6DX5c6Lmr1y5kkWLFtHY0saemgbeqWlg96EG3jnkPX7nUANrtlWz99UGok78Ae9Gr7KCTEblZVGan0lJXhaj8jK9Kd+bNzI3U1+gIn2mcJfkY+Z9WUluCZy0gK1HxjNh0SJvWXsbHN4VCf4tUL0Vmmqhuc6bWuohvC/yvD7yM9zzpZ20DBh7hjfWzoQFMP5Mr29/H2VlBI7epBVLS1s7+w43Hg38jp/7axvZd7iRDbsPU1XXhOtyADCD4pwgJXmZlOZHwj8/+oDgHQBK8jLVz1+O0jtBhpe0wLHB0aa8J751nPPO9qMPAM1hL/wbquGdl2DHC/DCz+D5n3jrlEzzvu5wQmQqHN/v0jOizvy709rWTmW4mQO1jRw40sSB2ib2H2nkQG0TB2u9n2/tq+VguKnT9f8OoWCAkXmZlOQeC/xwZTN7sndGDgLBowcDXRLyN4W7+J8ZpGd6U6wz8ukf8n62NHhBv/MFL+w3PATr7vGW5Y+LhP1Z3tDJffwylHilB9IoK8iirKDnMfHb2h3Vdd5BoDLczMHaJg7WNlEZPvZzy8Ewq7dVUVPfwsObXztuG3lZ6ZTkZTIiFKS405RJcSiD4pC3rCgUZEQoqIPBMKNwF+mQke19ucnEc73n7W2w/3XYudobSXPbs/DaQ96yrEIv6MfNZ8w7B2DtZsAiH+4aWFrU464/o5alBbyx9UdM7tMHw4E0oyTPOzPvzVPPrGBG+VlU1jZzMNwYCf9jB4Tquma2V9bz0o4aDtU3x/yLALyB3TodBHK8n0WhIIU5GRRmBynKyaAgJ4PCHO9xdkZAdwYPEYW7SHfSAjB6jjed+Q/e5Z1D246F/c7VsOkvnArwdj9fK7f02IFl4kKvJ1CCQjE9zRhdkM3ogmygoMe27e2O2sZWquq80O+YqiI/D0UeV4WbeXt/mOq65k53AncVDKR5wR8J/MJs73FRTpCCyM9d+1oJvH2Q/KwM8rMzyM9KJy8rg2C6PkTuD4W7SLzMvJutiid5N18BNB7m+WdXcM6CBYDzDgA4cO1Rj2P87Hjc2uhdCtq+ypte/5233dCoqLA/F0aemrCw70lamlEQOfueVNJ7e/C+qOVwQwuH6pupqW+JTM3UROYdjsw7VN/Mzup61u9u5lB9C82t7Ue38bNXXzxuu9kZAfKz048L/c7zMsjLSo+avOe5memEgukp/f0ACneR/sgqoCVYCHmlJ76NsllQfq0X+NVbjwX99lVQsdxrEyo59n24Exd63TeT5HJHVkaArIwApfl9++7cxpY2DtU38/SzLzB11lyONLRwpLGFIw2tnR83eo8rw81srayLLGvt9vJRBzPvO37zMqNCP+oA4M33nudmRpZFfh57noHr2n1pmFC4iyQLs+O/E/fQti5h/7DXNmdk5Ptwz/V6DoVGegeA0MiEDuMwkLIyAowuyGZcXhrzJ/at66lzjvrmNo40tlDb2BqZvMfhJu9xuLGVI5Fl4SZvWXVdMzuq6o+2bYr666E7aQZ5zz7hHSiigr/jeU4wnVAwQHYwnVBmgOyMAKHMdLKDAXKiHoeCkXnBwKDct6BwF0lW0ZeBzrg6EvbbO4f9xt8fv14wD0IjImFfwqlHWqDtWe+A0HEAiCwjZ8QJj9I5lMyMUGY6ocx0Rvf8MUKPmlrbqGtqI9zYSm2Td0AIN3UcILyfFW9tYUTZ2KMHiXBTK4fqvEtMtY2t1De1Ut/Sdtz9CT0JBtLIyfTC/6oFE7lx0eQT/0d0Y/j9r4qkKjMoPtmbzrjKC/sj78CRvVBfCXUHI1NlZDoINbsYcWg37F8B7a2xt5tV6IV8p6k4xrzI/KzCAekGOhQy0wNkpnu9gLqz0u1i0aIZPW7HOUdjSzv1za3UN7dFpuMf1zW10tDcRn1Lm3dQaG5jfPHA/KWlcBcZrsygYJw39eCFlStZdP750FhzLPSjDwT11VBf5U1H3oF9r3kHi9bGbl43DbKLj4V9djFkF0FOkffz6FTc+XkwlDSfEySamZEdDJAdDDBiqIuJULiLpAKzYyE78pT41mmuPxb69VWdDwLRU80O2Puq9327LfXdby8Q7BL+3gFgcmUY0tZBdmGM5UXel7L79KAwkOIKdzMrBu4GLgQqgf/vnLu/l3WeARYDGc65bv4eFJGkFczxpr4MvdDS6IX80am68/P6qOc1O2HPq4ypq4Ldj3S/TQt4g8PFCv7sQm/wt2DI+6zh6GBxuV0Gj8v1hp1OIfGeuf8UaAZKgbnAn8xsvXOuIlZjM7uyD9sWEb/IyIKM0ZA/Ou5Vnlu5kkXnnOVdNmqo6XJwiDHVHYTKTV77xsPx15aWAZm5sYO/Y15m7rGDRKTtiMptsD392AEkM9I2I5TUnz30GsBmFgKWAjOdc2FglZn9AbgK+FqM9gXArcDVwAuJLVdEfCkjCzLKvLH++6K97diAcM110Bw1QmhzuJvHUc+bwlC/69h6TWFobej0ErMAXu+u7o4hpbOjhpbO8eZnZB973O28nMiH5JNOZK/1yHrroG9mpwN/c85lR827GTjfOXdJjPY/BTYDDwPb6OayjJndANwAUFpaWr5s2bIT+geEw2Fyc2MPsZoMkr0+SP4aVV//qL6+sfY20tobSW9tINDWQFO4mrygEWjznnfMD7Q1Rn42EWhrJK29MfK4KebjtG6uTu8c/xG2Tr7mhGpdvHjxS865eTEXOud6nICFwL4u864HVsZoOw94Fe8vgomAA9J7e43y8nJ3olasWHHC6w6GZK/PueSvUfX1j+rrn4TV19rsXEONc4f3OFe52bm9G5zbsdq5qq0nvElgnesmV+O5Lh4G8rvMywdqo2eYWRrwM+AfnXOtGglORCRKIAMCBd6Hw4Mgnk8DNgHpZhbdf2oO0PXD1Hy8M/cHzWwfsDYyf7eZLex3pSIiErdez9ydc3Vmthy4zcw+iddb5kPA2V2aHgbGRD0fD7wIlAMHE1KtiIjEJd5+PDcB2cAB4AHgRudchZlNMLOwmU2IXALa1zFxLND3O+eau9uwiIgkXlx90Z1z1cCHY8zfCcT8mNs5tx3QhXcRkSGQvD3wRUTkhCncRUR8SOEuIuJDCncRER9SuIuI+JDCXUTEhxTuIiI+pHAXEfEhhbuIiA8p3EVEfEjhLiLiQwp3EREfUriLiPiQwl1ExIcU7iIiPqRwFxHxIYW7iIgPKdxFRHxI4S4i4kMKdxERH1K4i4j4kMJdRMSHFO4iIj6kcBcR8SGFu4iIDyncRUR8SOEuIuJDCncRER9SuIuI+JDCXUTEhxTuIiI+pHAXEfEhhbuIiA/FFe5mVmxmD5tZnZntMLMruml3jZm9ZGZHzGy3md1uZumJLVlERHoT75n7T4FmoBS4ErjDzGbEaJcDfB4YCZwJXADc3P8yRUSkL3o9qzazELAUmOmcCwOrzOwPwFXA16LbOufuiHr6jpndByxOYL0iIhIHc8713MDsdOBvzrnsqHk3A+c75y7pZd1HgDedc1+LsewG4AaA0tLS8mXLlvW9eiAcDpObm3tC6w6GZK8Pkr9G1dc/qq9/krm+xYsXv+ScmxdzoXOuxwlYCOzrMu96YGUv6/0dsBsY2dtrlJeXuxO1YsWKE153MCR7fc4lf42qr39UX/8kc33AOtdNrsbzYWcYyO8yLx+o7W4FM/sw8F3gPc65yjheQ0REEiieD1Q3AelmdkrUvDlARazGZrYE+G/gEufca/0vUURE+qrXcHfO1QHLgdvMLGRm5wAfAn7dta2ZvRu4D1jqnHsx0cWKiEh84u0KeROQDRwAHgBudM5VmNkEMwub2YRIu1uAAuDPkflhM3ss8WWLiEhP4rrByDlXDXw4xvydQG7Uc3V7FBFJAhp+QETEhxTuIiI+pHAXEfEhhbuIiA8p3EVEfEjhLiLiQwp3EREfUriLiPiQwl1ExIcU7iIiPqRwFxHxIYW7iIgPKdxFRHxI4S4i4kMKdxERH1K4i4j4kMJdRMSHFO4iIj6kcBcR8SGFu4iIDyncRUR8SOEuIuJDCncRER9SuIuI+JDCXUTEhxTuIiI+pHAXEfEhhbuIiA8p3EVEfEjhLiLiQwp3EREfUriLiPiQwl1ExIcU7iIiPhRXuJtZsZk9bGZ1ZrbDzK7ooe0XzGyfmR02s3vMLDNx5YqISDziPXP/KdAMlAJXAneY2YyujczsIuBrwAXARGAS8K2EVCoiInHrNdzNLAQsBW5xzoWdc6uAPwBXxWh+DXC3c67COXcI+DZwbQLrFRGROKTH0eZUoM05tylq3nrg/BhtZwC/79Ku1MxGOOeqohua2Q3ADZGnYTN7K/6yOxkJVJ7guoMh2euD5K9R9fWP6uufZK7vpO4WxBPuucDhLvMOA3lxtO14nAd0Cnfn3F3AXXG8fo/MbJ1zbl5/tzNQkr0+SP4aVV//qL7+Sfb6uhPPNfcwkN9lXj5QG0fbjsex2oqIyACJJ9w3AelmdkrUvDlARYy2FZFl0e32d70kIyIiA6vXcHfO1QHLgdvMLGRm5wAfAn4do/mvgOvMbLqZFQHfAO5NYL2x9PvSzgBL9vog+WtUff2j+von2euLyZxzvTcyKwbuAd6Ld+38a865+81sArARmO6c2xlp+0Xgq0A28DvgU865pgGqX0REYogr3EVEZHjR8AMiIj6kcBcR8aFhEe7JPLaNmWWa2d2RumrN7BUze183ba81szYzC0dNiwayvsjrrjSzxqjX7PaGsSHYf+EuU5uZ/Wc3bQdl/5nZZ8xsnZk1mdm9XZZdYGZvmlm9ma0ws25vIunL+zYR9ZnZWWb2pJlVm9lBM3vIzEb3sJ243xcJqm+imbku/3+39LCdwd5/V3aprT5Sb3k32xmQ/ZcowyLcSe6xbdKBXXh37BYAtwC/NbOJ3bR/wTmXGzWtHOD6Onwm6jWnxmowFPsvel/g/f82AA/1sMpg7L89wHfwOhEcZWYj8XqO3QIUA+uAB3vYTlzv20TVBxTh9eyYiHfnYi3wi1621ev7IoH1dSiMes1v97CdQd1/zrn7urwfbwK2Ai/3sK2B2H8JkfThbkk+to1zrs45903n3HbnXLtz7o/ANiDm0T7JDfXYQB8FDgDPDeJrHsc5t9w59whd7qoGPgJUOOcecs41At8E5pjZaV230cf3bULqc849FqntiHOuHvgv4Jz+vl6i6uuLodh/MVwD/MoN014nSR/udD+2Tawj+IzIsuh2pWY2YgDr68TMSvFqjnWTF8DpZlZpZpvM7BYzi2cIiET4t8jrPt/DpYyh3n/x/DIN1f6DLvsncg/IFmK/F/vyvh0o59H9+7BDPO+LRNthZrvN7BeRv4ZiGdL9F7ncdh7evTs9GYr9F5fhEO6JGttmwJlZBnAf8Evn3JsxmjwLzARG4Z2VfBz48iCU9lW8Syxj8f5sf9TMJsdoN2T7z7x7Js4HftlDs6Hafx36817sqW3Cmdls4J/pef/E+75IlEpgPt4lo3K8fXFfN22HdP8BVwPPOee29dBmsPdfnwyHcB8WY9uYWRreXbvNwGditXHObXXObYtcvnkNuA3vUsSAcs6tcc7VOueanHO/BJ4H3h+j6VCODXQ1sKqnX6ah2n9R+vNe7KltQpnZFOAx4B+dc91e4urD+yIhIpdX1jnnWp1z+/F+Ty40s677CYZw/0VcTc8nGoO+//pqOIR70o9tY2YG3I33wc9S51xLnKs6wAassL6/7lCODdTrL1MMg73/Ou2fyHXhycR+L/blfZswkcsJTwHfds7FGiKkJ4O9Pzsuv8V6zSHZfwDmDbEyBvjfPq46VL/PsTnnkn4ClgEPACG8D4gOAzNitFsC7AOm4/UceAb47iDU93NgNZDbS7v3AaWRx6cBrwO3DnBthcBFQBZez54rgTpgahLtv7MjNeUlw/6L7Kcs4N/w/hrr2Hclkffe0si87wGr+/u+TWB9Y/E+A/hyIt8XCazvTGAq3knlCLyeRiuSZf9FLb8L77OfIdl/CXsfD3UBcf5nFAOPRHbeTuCKyPwJeH++TYhq+0VgP3AErxtY5gDXdhLeEbsxUkvHdGXX+oAfRGqrw+tidRuQMcD1lQBr8f6crcE7CL03WfZf5DXvBH4dY/6Q7D+8XjCuy/TNyLL3AG/iddlcCUyMWu+fgMd6e98OVH3ArZHH0e/DcKz6enpfDGB9H8frSVYH7MX7sLIsWfZfZFlWZH9cEGO9Qdl/iZo0toyIiA8Nh2vuIiLSRwp3EREfUriLiPiQwl1ExIcU7iIiPqRwFxHxIYW7iIgPKdxFRHzo/wBmhquKPyS1kgAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.plot(pd.DataFrame(history.history))\n", "plt.grid(True)\n", "plt.gca().set_ylim(0, 1)\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 52, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[0.3885664],\n", " [1.6792021],\n", " [3.1022797]], dtype=float32)" ] }, "execution_count": 52, "metadata": {}, "output_type": "execute_result" } ], "source": [ "y_pred" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "# Functional API" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Không phải tất cả các mô hình mạng nơ-ron đều đơn giản là tuần tự. Một số có thể có cấu trúc liên kết phức tạp. Một số có thể có nhiều đầu vào và/hoặc nhiều đầu ra. Ví dụ: mạng nơ-ron Rộng & Sâu (xem [bài báo](https://ai.google/research/pubs/pub45413)) kết nối trực tiếp tất cả hoặc một phần đầu vào với tầng đầu ra." ] }, { "cell_type": "code", "execution_count": 53, "metadata": {}, "outputs": [], "source": [ "np.random.seed(42)\n", "tf.random.set_seed(42)" ] }, { "cell_type": "code", "execution_count": 54, "metadata": {}, "outputs": [], "source": [ "input_ = keras.layers.Input(shape=X_train.shape[1:])\n", "hidden1 = keras.layers.Dense(30, activation=\"relu\")(input_)\n", "hidden2 = keras.layers.Dense(30, activation=\"relu\")(hidden1)\n", "concat = keras.layers.concatenate([input_, hidden2])\n", "output = keras.layers.Dense(1)(concat)\n", "model = keras.models.Model(inputs=[input_], outputs=[output])" ] }, { "cell_type": "code", "execution_count": 55, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Model: \"model\"\n", "__________________________________________________________________________________________________\n", "Layer (type) Output Shape Param # Connected to \n", "==================================================================================================\n", "input_1 (InputLayer) [(None, 8)] 0 \n", "__________________________________________________________________________________________________\n", "dense_5 (Dense) (None, 30) 270 input_1[0][0] \n", "__________________________________________________________________________________________________\n", "dense_6 (Dense) (None, 30) 930 dense_5[0][0] \n", "__________________________________________________________________________________________________\n", "concatenate (Concatenate) (None, 38) 0 input_1[0][0] \n", " dense_6[0][0] \n", "__________________________________________________________________________________________________\n", "dense_7 (Dense) (None, 1) 39 concatenate[0][0] \n", "==================================================================================================\n", "Total params: 1,239\n", "Trainable params: 1,239\n", "Non-trainable params: 0\n", "__________________________________________________________________________________________________\n" ] } ], "source": [ "model.summary()" ] }, { "cell_type": "code", "execution_count": 56, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/20\n", "363/363 [==============================] - 1s 887us/step - loss: 1.9731 - val_loss: 3.3940\n", "Epoch 2/20\n", "363/363 [==============================] - 0s 683us/step - loss: 0.7638 - val_loss: 0.9360\n", "Epoch 3/20\n", "363/363 [==============================] - 0s 687us/step - loss: 0.6045 - val_loss: 0.5649\n", "Epoch 4/20\n", "363/363 [==============================] - 0s 709us/step - loss: 0.5862 - val_loss: 0.5712\n", "Epoch 5/20\n", "363/363 [==============================] - 0s 707us/step - loss: 0.5452 - val_loss: 0.5045\n", "Epoch 6/20\n", "363/363 [==============================] - 0s 672us/step - loss: 0.5243 - val_loss: 0.4831\n", "Epoch 7/20\n", "363/363 [==============================] - 0s 681us/step - loss: 0.5185 - val_loss: 0.4639\n", "Epoch 8/20\n", "363/363 [==============================] - 0s 700us/step - loss: 0.4947 - val_loss: 0.4638\n", "Epoch 9/20\n", "363/363 [==============================] - 0s 675us/step - loss: 0.4782 - val_loss: 0.4421\n", "Epoch 10/20\n", "363/363 [==============================] - 0s 693us/step - loss: 0.4708 - val_loss: 0.4313\n", "Epoch 11/20\n", "363/363 [==============================] - 0s 668us/step - loss: 0.4585 - val_loss: 0.4345\n", "Epoch 12/20\n", "363/363 [==============================] - 0s 686us/step - loss: 0.4481 - val_loss: 0.4168\n", "Epoch 13/20\n", "363/363 [==============================] - 0s 675us/step - loss: 0.4476 - val_loss: 0.4230\n", "Epoch 14/20\n", "363/363 [==============================] - 0s 681us/step - loss: 0.4361 - val_loss: 0.4047\n", "Epoch 15/20\n", "363/363 [==============================] - 0s 698us/step - loss: 0.4392 - val_loss: 0.4078\n", "Epoch 16/20\n", "363/363 [==============================] - 0s 682us/step - loss: 0.4420 - val_loss: 0.3938\n", "Epoch 17/20\n", "363/363 [==============================] - 0s 680us/step - loss: 0.4277 - val_loss: 0.3952\n", "Epoch 18/20\n", "363/363 [==============================] - 0s 671us/step - loss: 0.4216 - val_loss: 0.3860\n", "Epoch 19/20\n", "363/363 [==============================] - 0s 660us/step - loss: 0.4033 - val_loss: 0.3827\n", "Epoch 20/20\n", "363/363 [==============================] - 0s 662us/step - loss: 0.3939 - val_loss: 0.4054\n", "162/162 [==============================] - 0s 423us/step - loss: 0.4032\n" ] } ], "source": [ "model.compile(loss=\"mean_squared_error\", optimizer=keras.optimizers.SGD(learning_rate=1e-3))\n", "history = model.fit(X_train, y_train, epochs=20,\n", " validation_data=(X_valid, y_valid))\n", "mse_test = model.evaluate(X_test, y_test)\n", "y_pred = model.predict(X_new)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Điều gì sẽ xảy ra nếu bạn muốn gửi các tập hợp con khác nhau của các đặc trưng đầu vào thông qua các đường dẫn rộng hoặc sâu? Chúng ta sẽ gửi 5 đặc trưng (đặc trưng 0 đến 4) và 6 thông qua đường dẫn sâu (đặc trưng 2 đến 7). Lưu ý rằng cả ba đặc trưng sẽ đi qua cả hai (đặc trưng 2, 3 và 4)." ] }, { "cell_type": "code", "execution_count": 57, "metadata": {}, "outputs": [], "source": [ "np.random.seed(42)\n", "tf.random.set_seed(42)" ] }, { "cell_type": "code", "execution_count": 58, "metadata": {}, "outputs": [], "source": [ "input_A = keras.layers.Input(shape=[5], name=\"wide_input\")\n", "input_B = keras.layers.Input(shape=[6], name=\"deep_input\")\n", "hidden1 = keras.layers.Dense(30, activation=\"relu\")(input_B)\n", "hidden2 = keras.layers.Dense(30, activation=\"relu\")(hidden1)\n", "concat = keras.layers.concatenate([input_A, hidden2])\n", "output = keras.layers.Dense(1, name=\"output\")(concat)\n", "model = keras.models.Model(inputs=[input_A, input_B], outputs=[output])" ] }, { "cell_type": "code", "execution_count": 59, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/20\n", "363/363 [==============================] - 1s 934us/step - loss: 3.1941 - val_loss: 0.8072\n", "Epoch 2/20\n", "363/363 [==============================] - 0s 734us/step - loss: 0.7247 - val_loss: 0.6658\n", "Epoch 3/20\n", "363/363 [==============================] - 0s 719us/step - loss: 0.6176 - val_loss: 0.5687\n", "Epoch 4/20\n", "363/363 [==============================] - 0s 718us/step - loss: 0.5799 - val_loss: 0.5296\n", "Epoch 5/20\n", "363/363 [==============================] - 0s 689us/step - loss: 0.5409 - val_loss: 0.4993\n", "Epoch 6/20\n", "363/363 [==============================] - 0s 717us/step - loss: 0.5173 - val_loss: 0.4811\n", "Epoch 7/20\n", "363/363 [==============================] - 0s 708us/step - loss: 0.5186 - val_loss: 0.4696\n", "Epoch 8/20\n", "363/363 [==============================] - 0s 697us/step - loss: 0.4977 - val_loss: 0.4496\n", "Epoch 9/20\n", "363/363 [==============================] - 0s 713us/step - loss: 0.4765 - val_loss: 0.4404\n", "Epoch 10/20\n", "363/363 [==============================] - 0s 723us/step - loss: 0.4676 - val_loss: 0.4315\n", "Epoch 11/20\n", "363/363 [==============================] - 0s 713us/step - loss: 0.4574 - val_loss: 0.4268\n", "Epoch 12/20\n", "363/363 [==============================] - 0s 697us/step - loss: 0.4479 - val_loss: 0.4166\n", "Epoch 13/20\n", "363/363 [==============================] - 0s 710us/step - loss: 0.4487 - val_loss: 0.4125\n", "Epoch 14/20\n", "363/363 [==============================] - 0s 684us/step - loss: 0.4469 - val_loss: 0.4074\n", "Epoch 15/20\n", "363/363 [==============================] - 0s 738us/step - loss: 0.4460 - val_loss: 0.4044\n", "Epoch 16/20\n", "363/363 [==============================] - 0s 734us/step - loss: 0.4495 - val_loss: 0.4007\n", "Epoch 17/20\n", "363/363 [==============================] - 0s 698us/step - loss: 0.4378 - val_loss: 0.4013\n", "Epoch 18/20\n", "363/363 [==============================] - 0s 715us/step - loss: 0.4375 - val_loss: 0.3987\n", "Epoch 19/20\n", "363/363 [==============================] - 0s 733us/step - loss: 0.4151 - val_loss: 0.3934\n", "Epoch 20/20\n", "363/363 [==============================] - 0s 701us/step - loss: 0.4078 - val_loss: 0.4204\n", "162/162 [==============================] - 0s 447us/step - loss: 0.4219\n" ] } ], "source": [ "model.compile(loss=\"mse\", optimizer=keras.optimizers.SGD(learning_rate=1e-3))\n", "\n", "X_train_A, X_train_B = X_train[:, :5], X_train[:, 2:]\n", "X_valid_A, X_valid_B = X_valid[:, :5], X_valid[:, 2:]\n", "X_test_A, X_test_B = X_test[:, :5], X_test[:, 2:]\n", "X_new_A, X_new_B = X_test_A[:3], X_test_B[:3]\n", "\n", "history = model.fit((X_train_A, X_train_B), y_train, epochs=20,\n", " validation_data=((X_valid_A, X_valid_B), y_valid))\n", "mse_test = model.evaluate((X_test_A, X_test_B), y_test)\n", "y_pred = model.predict((X_new_A, X_new_B))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Thêm một đầu ra phụ trợ cho mục đích điểu chuẩn:" ] }, { "cell_type": "code", "execution_count": 60, "metadata": {}, "outputs": [], "source": [ "np.random.seed(42)\n", "tf.random.set_seed(42)" ] }, { "cell_type": "code", "execution_count": 61, "metadata": {}, "outputs": [], "source": [ "input_A = keras.layers.Input(shape=[5], name=\"wide_input\")\n", "input_B = keras.layers.Input(shape=[6], name=\"deep_input\")\n", "hidden1 = keras.layers.Dense(30, activation=\"relu\")(input_B)\n", "hidden2 = keras.layers.Dense(30, activation=\"relu\")(hidden1)\n", "concat = keras.layers.concatenate([input_A, hidden2])\n", "output = keras.layers.Dense(1, name=\"main_output\")(concat)\n", "aux_output = keras.layers.Dense(1, name=\"aux_output\")(hidden2)\n", "model = keras.models.Model(inputs=[input_A, input_B],\n", " outputs=[output, aux_output])" ] }, { "cell_type": "code", "execution_count": 62, "metadata": {}, "outputs": [], "source": [ "model.compile(loss=[\"mse\", \"mse\"], loss_weights=[0.9, 0.1], optimizer=keras.optimizers.SGD(learning_rate=1e-3))" ] }, { "cell_type": "code", "execution_count": 63, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/20\n", "363/363 [==============================] - 1s 1ms/step - loss: 3.4633 - main_output_loss: 3.3289 - aux_output_loss: 4.6732 - val_loss: 1.6233 - val_main_output_loss: 0.8468 - val_aux_output_loss: 8.6117\n", "Epoch 2/20\n", "363/363 [==============================] - 0s 879us/step - loss: 0.9807 - main_output_loss: 0.7503 - aux_output_loss: 3.0537 - val_loss: 1.5163 - val_main_output_loss: 0.6836 - val_aux_output_loss: 9.0109\n", "Epoch 3/20\n", "363/363 [==============================] - 0s 890us/step - loss: 0.7742 - main_output_loss: 0.6290 - aux_output_loss: 2.0810 - val_loss: 1.4639 - val_main_output_loss: 0.6229 - val_aux_output_loss: 9.0326\n", "Epoch 4/20\n", "363/363 [==============================] - 0s 847us/step - loss: 0.6952 - main_output_loss: 0.5897 - aux_output_loss: 1.6449 - val_loss: 1.3388 - val_main_output_loss: 0.5481 - val_aux_output_loss: 8.4552\n", "Epoch 5/20\n", "363/363 [==============================] - 0s 902us/step - loss: 0.6469 - main_output_loss: 0.5508 - aux_output_loss: 1.5118 - val_loss: 1.2177 - val_main_output_loss: 0.5194 - val_aux_output_loss: 7.5030\n", "Epoch 6/20\n", "363/363 [==============================] - 0s 867us/step - loss: 0.6120 - main_output_loss: 0.5251 - aux_output_loss: 1.3943 - val_loss: 1.0935 - val_main_output_loss: 0.5106 - val_aux_output_loss: 6.3396\n", "Epoch 7/20\n", "363/363 [==============================] - 0s 864us/step - loss: 0.6114 - main_output_loss: 0.5256 - aux_output_loss: 1.3833 - val_loss: 0.9918 - val_main_output_loss: 0.5115 - val_aux_output_loss: 5.3151\n", "Epoch 8/20\n", "363/363 [==============================] - 0s 850us/step - loss: 0.5765 - main_output_loss: 0.5024 - aux_output_loss: 1.2439 - val_loss: 0.8733 - val_main_output_loss: 0.4733 - val_aux_output_loss: 4.4740\n", "Epoch 9/20\n", "363/363 [==============================] - 0s 882us/step - loss: 0.5535 - main_output_loss: 0.4811 - aux_output_loss: 1.2057 - val_loss: 0.7832 - val_main_output_loss: 0.4555 - val_aux_output_loss: 3.7323\n", "Epoch 10/20\n", "363/363 [==============================] - 0s 846us/step - loss: 0.5456 - main_output_loss: 0.4708 - aux_output_loss: 1.2189 - val_loss: 0.7170 - val_main_output_loss: 0.4604 - val_aux_output_loss: 3.0262\n", "Epoch 11/20\n", "363/363 [==============================] - 0s 875us/step - loss: 0.5297 - main_output_loss: 0.4587 - aux_output_loss: 1.1684 - val_loss: 0.6510 - val_main_output_loss: 0.4293 - val_aux_output_loss: 2.6468\n", "Epoch 12/20\n", "363/363 [==============================] - 0s 879us/step - loss: 0.5181 - main_output_loss: 0.4501 - aux_output_loss: 1.1305 - val_loss: 0.6051 - val_main_output_loss: 0.4310 - val_aux_output_loss: 2.1722\n", "Epoch 13/20\n", "363/363 [==============================] - 0s 879us/step - loss: 0.5100 - main_output_loss: 0.4487 - aux_output_loss: 1.0620 - val_loss: 0.5644 - val_main_output_loss: 0.4161 - val_aux_output_loss: 1.8992\n", "Epoch 14/20\n", "363/363 [==============================] - 0s 884us/step - loss: 0.5064 - main_output_loss: 0.4459 - aux_output_loss: 1.0503 - val_loss: 0.5354 - val_main_output_loss: 0.4119 - val_aux_output_loss: 1.6466\n", "Epoch 15/20\n", "363/363 [==============================] - 0s 878us/step - loss: 0.5027 - main_output_loss: 0.4452 - aux_output_loss: 1.0207 - val_loss: 0.5124 - val_main_output_loss: 0.4047 - val_aux_output_loss: 1.4812\n", "Epoch 16/20\n", "363/363 [==============================] - 0s 864us/step - loss: 0.5057 - main_output_loss: 0.4480 - aux_output_loss: 1.0249 - val_loss: 0.4934 - val_main_output_loss: 0.4034 - val_aux_output_loss: 1.3035\n", "Epoch 17/20\n", "363/363 [==============================] - 0s 855us/step - loss: 0.4931 - main_output_loss: 0.4360 - aux_output_loss: 1.0075 - val_loss: 0.4801 - val_main_output_loss: 0.3984 - val_aux_output_loss: 1.2150\n", "Epoch 18/20\n", "363/363 [==============================] - 0s 863us/step - loss: 0.4922 - main_output_loss: 0.4352 - aux_output_loss: 1.0053 - val_loss: 0.4694 - val_main_output_loss: 0.3962 - val_aux_output_loss: 1.1279\n", "Epoch 19/20\n", "363/363 [==============================] - 0s 895us/step - loss: 0.4658 - main_output_loss: 0.4139 - aux_output_loss: 0.9323 - val_loss: 0.4580 - val_main_output_loss: 0.3936 - val_aux_output_loss: 1.0372\n", "Epoch 20/20\n", "363/363 [==============================] - 0s 870us/step - loss: 0.4589 - main_output_loss: 0.4072 - aux_output_loss: 0.9243 - val_loss: 0.4655 - val_main_output_loss: 0.4048 - val_aux_output_loss: 1.0118\n" ] } ], "source": [ "history = model.fit([X_train_A, X_train_B], [y_train, y_train], epochs=20,\n", " validation_data=([X_valid_A, X_valid_B], [y_valid, y_valid]))" ] }, { "cell_type": "code", "execution_count": 64, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "162/162 [==============================] - 0s 546us/step - loss: 0.4668 - main_output_loss: 0.4178 - aux_output_loss: 0.9082\n", "WARNING:tensorflow:5 out of the last 6 calls to .predict_function at 0x7fd97a1a24d0> triggered tf.function retracing. Tracing is expensive and the excessive number of tracings could be due to (1) creating @tf.function repeatedly in a loop, (2) passing tensors with different shapes, (3) passing Python objects instead of tensors. For (1), please define your @tf.function outside of the loop. For (2), @tf.function has experimental_relax_shapes=True option that relaxes argument shapes that can avoid unnecessary retracing. For (3), please refer to https://www.tensorflow.org/guide/function#controlling_retracing and https://www.tensorflow.org/api_docs/python/tf/function for more details.\n" ] } ], "source": [ "total_loss, main_loss, aux_loss = model.evaluate(\n", " [X_test_A, X_test_B], [y_test, y_test])\n", "y_pred_main, y_pred_aux = model.predict([X_new_A, X_new_B])" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "# Subclassing API" ] }, { "cell_type": "code", "execution_count": 65, "metadata": {}, "outputs": [], "source": [ "class WideAndDeepModel(keras.models.Model):\n", " def __init__(self, units=30, activation=\"relu\", **kwargs):\n", " super().__init__(**kwargs)\n", " self.hidden1 = keras.layers.Dense(units, activation=activation)\n", " self.hidden2 = keras.layers.Dense(units, activation=activation)\n", " self.main_output = keras.layers.Dense(1)\n", " self.aux_output = keras.layers.Dense(1)\n", " \n", " def call(self, inputs):\n", " input_A, input_B = inputs\n", " hidden1 = self.hidden1(input_B)\n", " hidden2 = self.hidden2(hidden1)\n", " concat = keras.layers.concatenate([input_A, hidden2])\n", " main_output = self.main_output(concat)\n", " aux_output = self.aux_output(hidden2)\n", " return main_output, aux_output\n", "\n", "model = WideAndDeepModel(30, activation=\"relu\")" ] }, { "cell_type": "code", "execution_count": 66, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/10\n", "363/363 [==============================] - 1s 1ms/step - loss: 3.3855 - output_1_loss: 3.3304 - output_2_loss: 3.8821 - val_loss: 2.1435 - val_output_1_loss: 1.1581 - val_output_2_loss: 11.0117\n", "Epoch 2/10\n", "363/363 [==============================] - 0s 852us/step - loss: 1.0790 - output_1_loss: 0.9329 - output_2_loss: 2.3942 - val_loss: 1.7567 - val_output_1_loss: 0.8205 - val_output_2_loss: 10.1825\n", "Epoch 3/10\n", "363/363 [==============================] - 0s 885us/step - loss: 0.8644 - output_1_loss: 0.7583 - output_2_loss: 1.8194 - val_loss: 1.5664 - val_output_1_loss: 0.7913 - val_output_2_loss: 8.5419\n", "Epoch 4/10\n", "363/363 [==============================] - 0s 863us/step - loss: 0.7850 - output_1_loss: 0.6979 - output_2_loss: 1.5689 - val_loss: 1.3088 - val_output_1_loss: 0.6549 - val_output_2_loss: 7.1933\n", "Epoch 5/10\n", "363/363 [==============================] - 0s 843us/step - loss: 0.7294 - output_1_loss: 0.6499 - output_2_loss: 1.4452 - val_loss: 1.1357 - val_output_1_loss: 0.5964 - val_output_2_loss: 5.9898\n", "Epoch 6/10\n", "363/363 [==============================] - 0s 837us/step - loss: 0.6880 - output_1_loss: 0.6092 - output_2_loss: 1.3974 - val_loss: 1.0036 - val_output_1_loss: 0.5937 - val_output_2_loss: 4.6933\n", "Epoch 7/10\n", "363/363 [==============================] - 0s 866us/step - loss: 0.6918 - output_1_loss: 0.6143 - output_2_loss: 1.3899 - val_loss: 0.8904 - val_output_1_loss: 0.5591 - val_output_2_loss: 3.8714\n", "Epoch 8/10\n", "363/363 [==============================] - 0s 840us/step - loss: 0.6504 - output_1_loss: 0.5805 - output_2_loss: 1.2797 - val_loss: 0.8009 - val_output_1_loss: 0.5243 - val_output_2_loss: 3.2903\n", "Epoch 9/10\n", "363/363 [==============================] - 0s 842us/step - loss: 0.6270 - output_1_loss: 0.5574 - output_2_loss: 1.2533 - val_loss: 0.7357 - val_output_1_loss: 0.5144 - val_output_2_loss: 2.7275\n", "Epoch 10/10\n", "363/363 [==============================] - 0s 863us/step - loss: 0.6160 - output_1_loss: 0.5456 - output_2_loss: 1.2495 - val_loss: 0.6849 - val_output_1_loss: 0.5014 - val_output_2_loss: 2.3370\n", "162/162 [==============================] - 0s 546us/step - loss: 0.5841 - output_1_loss: 0.5188 - output_2_loss: 1.1722\n", "WARNING:tensorflow:6 out of the last 7 calls to .predict_function at 0x7fd9725c2320> triggered tf.function retracing. Tracing is expensive and the excessive number of tracings could be due to (1) creating @tf.function repeatedly in a loop, (2) passing tensors with different shapes, (3) passing Python objects instead of tensors. For (1), please define your @tf.function outside of the loop. For (2), @tf.function has experimental_relax_shapes=True option that relaxes argument shapes that can avoid unnecessary retracing. For (3), please refer to https://www.tensorflow.org/guide/function#controlling_retracing and https://www.tensorflow.org/api_docs/python/tf/function for more details.\n" ] } ], "source": [ "model.compile(loss=\"mse\", loss_weights=[0.9, 0.1], optimizer=keras.optimizers.SGD(learning_rate=1e-3))\n", "history = model.fit((X_train_A, X_train_B), (y_train, y_train), epochs=10,\n", " validation_data=((X_valid_A, X_valid_B), (y_valid, y_valid)))\n", "total_loss, main_loss, aux_loss = model.evaluate((X_test_A, X_test_B), (y_test, y_test))\n", "y_pred_main, y_pred_aux = model.predict((X_new_A, X_new_B))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Lưu trữ và Khôi phục" ] }, { "cell_type": "code", "execution_count": 68, "metadata": {}, "outputs": [], "source": [ "np.random.seed(42)\n", "tf.random.set_seed(42)" ] }, { "cell_type": "code", "execution_count": 69, "metadata": {}, "outputs": [], "source": [ "model = keras.models.Sequential([\n", " keras.layers.Dense(30, activation=\"relu\", input_shape=[8]),\n", " keras.layers.Dense(30, activation=\"relu\"),\n", " keras.layers.Dense(1)\n", "]) " ] }, { "cell_type": "code", "execution_count": 70, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/10\n", "363/363 [==============================] - 0s 882us/step - loss: 3.3697 - val_loss: 0.7126\n", "Epoch 2/10\n", "363/363 [==============================] - 0s 646us/step - loss: 0.6964 - val_loss: 0.6880\n", "Epoch 3/10\n", "363/363 [==============================] - 0s 658us/step - loss: 0.6167 - val_loss: 0.5803\n", "Epoch 4/10\n", "363/363 [==============================] - 0s 653us/step - loss: 0.5846 - val_loss: 0.5166\n", "Epoch 5/10\n", "363/363 [==============================] - 0s 649us/step - loss: 0.5321 - val_loss: 0.4895\n", "Epoch 6/10\n", "363/363 [==============================] - 0s 664us/step - loss: 0.5083 - val_loss: 0.4951\n", "Epoch 7/10\n", "363/363 [==============================] - 0s 677us/step - loss: 0.5044 - val_loss: 0.4861\n", "Epoch 8/10\n", "363/363 [==============================] - 0s 649us/step - loss: 0.4813 - val_loss: 0.4554\n", "Epoch 9/10\n", "363/363 [==============================] - 0s 676us/step - loss: 0.4627 - val_loss: 0.4413\n", "Epoch 10/10\n", "363/363 [==============================] - 0s 688us/step - loss: 0.4549 - val_loss: 0.4379\n", "162/162 [==============================] - 0s 497us/step - loss: 0.4382\n" ] } ], "source": [ "model.compile(loss=\"mse\", optimizer=keras.optimizers.SGD(learning_rate=1e-3))\n", "history = model.fit(X_train, y_train, epochs=10, validation_data=(X_valid, y_valid))\n", "mse_test = model.evaluate(X_test, y_test)" ] }, { "cell_type": "code", "execution_count": 71, "metadata": {}, "outputs": [], "source": [ "model.save(\"my_keras_model.h5\")" ] }, { "cell_type": "code", "execution_count": 72, "metadata": {}, "outputs": [], "source": [ "model = keras.models.load_model(\"my_keras_model.h5\")" ] }, { "cell_type": "code", "execution_count": 73, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "WARNING:tensorflow:7 out of the last 8 calls to .predict_function at 0x7fd9725c28c0> triggered tf.function retracing. Tracing is expensive and the excessive number of tracings could be due to (1) creating @tf.function repeatedly in a loop, (2) passing tensors with different shapes, (3) passing Python objects instead of tensors. For (1), please define your @tf.function outside of the loop. For (2), @tf.function has experimental_relax_shapes=True option that relaxes argument shapes that can avoid unnecessary retracing. For (3), please refer to https://www.tensorflow.org/guide/function#controlling_retracing and https://www.tensorflow.org/api_docs/python/tf/function for more details.\n" ] }, { "data": { "text/plain": [ "array([[0.5400236],\n", " [1.6505969],\n", " [3.0098243]], dtype=float32)" ] }, "execution_count": 73, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model.predict(X_new)" ] }, { "cell_type": "code", "execution_count": 74, "metadata": {}, "outputs": [], "source": [ "model.save_weights(\"my_keras_weights.ckpt\")" ] }, { "cell_type": "code", "execution_count": 75, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 75, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model.load_weights(\"my_keras_weights.ckpt\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Sử dụng Callback trong Huấn luyện" ] }, { "cell_type": "code", "execution_count": 76, "metadata": {}, "outputs": [], "source": [ "keras.backend.clear_session()\n", "np.random.seed(42)\n", "tf.random.set_seed(42)" ] }, { "cell_type": "code", "execution_count": 77, "metadata": {}, "outputs": [], "source": [ "model = keras.models.Sequential([\n", " keras.layers.Dense(30, activation=\"relu\", input_shape=[8]),\n", " keras.layers.Dense(30, activation=\"relu\"),\n", " keras.layers.Dense(1)\n", "]) " ] }, { "cell_type": "code", "execution_count": 78, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/10\n", "363/363 [==============================] - 0s 846us/step - loss: 3.3697 - val_loss: 0.7126\n", "Epoch 2/10\n", "363/363 [==============================] - 0s 672us/step - loss: 0.6964 - val_loss: 0.6880\n", "Epoch 3/10\n", "363/363 [==============================] - 0s 658us/step - loss: 0.6167 - val_loss: 0.5803\n", "Epoch 4/10\n", "363/363 [==============================] - 0s 651us/step - loss: 0.5846 - val_loss: 0.5166\n", "Epoch 5/10\n", "363/363 [==============================] - 0s 670us/step - loss: 0.5321 - val_loss: 0.4895\n", "Epoch 6/10\n", "363/363 [==============================] - 0s 658us/step - loss: 0.5083 - val_loss: 0.4951\n", "Epoch 7/10\n", "363/363 [==============================] - 0s 682us/step - loss: 0.5044 - val_loss: 0.4861\n", "Epoch 8/10\n", "363/363 [==============================] - 0s 657us/step - loss: 0.4813 - val_loss: 0.4554\n", "Epoch 9/10\n", "363/363 [==============================] - 0s 672us/step - loss: 0.4627 - val_loss: 0.4413\n", "Epoch 10/10\n", "363/363 [==============================] - 0s 655us/step - loss: 0.4549 - val_loss: 0.4379\n", "162/162 [==============================] - 0s 460us/step - loss: 0.4382\n" ] } ], "source": [ "model.compile(loss=\"mse\", optimizer=keras.optimizers.SGD(learning_rate=1e-3))\n", "checkpoint_cb = keras.callbacks.ModelCheckpoint(\"my_keras_model.h5\", save_best_only=True)\n", "history = model.fit(X_train, y_train, epochs=10,\n", " validation_data=(X_valid, y_valid),\n", " callbacks=[checkpoint_cb])\n", "model = keras.models.load_model(\"my_keras_model.h5\") # rollback to best model\n", "mse_test = model.evaluate(X_test, y_test)" ] }, { "cell_type": "code", "execution_count": 79, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/100\n", "363/363 [==============================] - 0s 878us/step - loss: 0.4578 - val_loss: 0.4110\n", "Epoch 2/100\n", "363/363 [==============================] - 0s 702us/step - loss: 0.4430 - val_loss: 0.4266\n", "Epoch 3/100\n", "363/363 [==============================] - 0s 676us/step - loss: 0.4376 - val_loss: 0.3996\n", "Epoch 4/100\n", "363/363 [==============================] - 0s 671us/step - loss: 0.4361 - val_loss: 0.3939\n", "Epoch 5/100\n", "363/363 [==============================] - 0s 674us/step - loss: 0.4204 - val_loss: 0.3889\n", "Epoch 6/100\n", "363/363 [==============================] - 0s 672us/step - loss: 0.4112 - val_loss: 0.3866\n", "Epoch 7/100\n", "363/363 [==============================] - 0s 671us/step - loss: 0.4226 - val_loss: 0.3860\n", "Epoch 8/100\n", "363/363 [==============================] - 0s 659us/step - loss: 0.4135 - val_loss: 0.3793\n", "Epoch 9/100\n", "363/363 [==============================] - 0s 661us/step - loss: 0.4039 - val_loss: 0.3746\n", "Epoch 10/100\n", "363/363 [==============================] - 0s 655us/step - loss: 0.4023 - val_loss: 0.3723\n", "Epoch 11/100\n", "363/363 [==============================] - 0s 674us/step - loss: 0.3950 - val_loss: 0.3697\n", "Epoch 12/100\n", "363/363 [==============================] - 0s 652us/step - loss: 0.3912 - val_loss: 0.3669\n", "Epoch 13/100\n", "363/363 [==============================] - 0s 660us/step - loss: 0.3939 - val_loss: 0.3661\n", "Epoch 14/100\n", "363/363 [==============================] - 0s 648us/step - loss: 0.3868 - val_loss: 0.3631\n", "Epoch 15/100\n", "363/363 [==============================] - 0s 677us/step - loss: 0.3878 - val_loss: 0.3660\n", "Epoch 16/100\n", "363/363 [==============================] - 0s 651us/step - loss: 0.3935 - val_loss: 0.3625\n", "Epoch 17/100\n", "363/363 [==============================] - 0s 653us/step - loss: 0.3817 - val_loss: 0.3592\n", "Epoch 18/100\n", "<<123 more lines>>\n", "Epoch 80/100\n", "363/363 [==============================] - 0s 677us/step - loss: 0.3323 - val_loss: 0.3354\n", "Epoch 81/100\n", "363/363 [==============================] - 0s 677us/step - loss: 0.3297 - val_loss: 0.3274\n", "Epoch 82/100\n", "363/363 [==============================] - 0s 643us/step - loss: 0.3441 - val_loss: 0.3167\n", "Epoch 83/100\n", "363/363 [==============================] - 0s 699us/step - loss: 0.3369 - val_loss: 0.3280\n", "Epoch 84/100\n", "363/363 [==============================] - 0s 646us/step - loss: 0.3182 - val_loss: 0.3634\n", "Epoch 85/100\n", "363/363 [==============================] - 0s 682us/step - loss: 0.3235 - val_loss: 0.3176\n", "Epoch 86/100\n", "363/363 [==============================] - 0s 590us/step - loss: 0.3184 - val_loss: 0.3156\n", "Epoch 87/100\n", "363/363 [==============================] - 0s 677us/step - loss: 0.3395 - val_loss: 0.3529\n", "Epoch 88/100\n", "363/363 [==============================] - 0s 701us/step - loss: 0.3264 - val_loss: 0.3258\n", "Epoch 89/100\n", "363/363 [==============================] - 0s 710us/step - loss: 0.3210 - val_loss: 0.3630\n", "Epoch 90/100\n", "363/363 [==============================] - 0s 692us/step - loss: 0.3192 - val_loss: 0.3376\n", "Epoch 91/100\n", "363/363 [==============================] - 0s 704us/step - loss: 0.3237 - val_loss: 0.3211\n", "Epoch 92/100\n", "363/363 [==============================] - 0s 696us/step - loss: 0.3281 - val_loss: 0.3456\n", "Epoch 93/100\n", "363/363 [==============================] - 0s 696us/step - loss: 0.3424 - val_loss: 0.3158\n", "Epoch 94/100\n", "363/363 [==============================] - 0s 684us/step - loss: 0.3209 - val_loss: 0.3409\n", "Epoch 95/100\n", "363/363 [==============================] - 0s 676us/step - loss: 0.3230 - val_loss: 0.3379\n", "Epoch 96/100\n", "363/363 [==============================] - 0s 676us/step - loss: 0.3341 - val_loss: 0.3213\n", "162/162 [==============================] - 0s 440us/step - loss: 0.3310\n" ] } ], "source": [ "model.compile(loss=\"mse\", optimizer=keras.optimizers.SGD(learning_rate=1e-3))\n", "early_stopping_cb = keras.callbacks.EarlyStopping(patience=10,\n", " restore_best_weights=True)\n", "history = model.fit(X_train, y_train, epochs=100,\n", " validation_data=(X_valid, y_valid),\n", " callbacks=[checkpoint_cb, early_stopping_cb])\n", "mse_test = model.evaluate(X_test, y_test)" ] }, { "cell_type": "code", "execution_count": 80, "metadata": {}, "outputs": [], "source": [ "class PrintValTrainRatioCallback(keras.callbacks.Callback):\n", " def on_epoch_end(self, epoch, logs):\n", " print(\"\\nval/train: {:.2f}\".format(logs[\"val_loss\"] / logs[\"loss\"]))" ] }, { "cell_type": "code", "execution_count": 81, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "363/363 [==============================] - 0s 799us/step - loss: 0.3302 - val_loss: 0.3556\n", "\n", "val/train: 1.08\n" ] } ], "source": [ "val_train_ratio_cb = PrintValTrainRatioCallback()\n", "history = model.fit(X_train, y_train, epochs=1,\n", " validation_data=(X_valid, y_valid),\n", " callbacks=[val_train_ratio_cb])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# TensorBoard" ] }, { "cell_type": "code", "execution_count": 82, "metadata": {}, "outputs": [], "source": [ "root_logdir = os.path.join(os.curdir, \"my_logs\")" ] }, { "cell_type": "code", "execution_count": 83, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'./my_logs/run_2021_02_13-18_39_20'" ] }, "execution_count": 83, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def get_run_logdir():\n", " import time\n", " run_id = time.strftime(\"run_%Y_%m_%d-%H_%M_%S\")\n", " return os.path.join(root_logdir, run_id)\n", "\n", "run_logdir = get_run_logdir()\n", "run_logdir" ] }, { "cell_type": "code", "execution_count": 84, "metadata": {}, "outputs": [], "source": [ "keras.backend.clear_session()\n", "np.random.seed(42)\n", "tf.random.set_seed(42)" ] }, { "cell_type": "code", "execution_count": 85, "metadata": {}, "outputs": [], "source": [ "model = keras.models.Sequential([\n", " keras.layers.Dense(30, activation=\"relu\", input_shape=[8]),\n", " keras.layers.Dense(30, activation=\"relu\"),\n", " keras.layers.Dense(1)\n", "]) \n", "model.compile(loss=\"mse\", optimizer=keras.optimizers.SGD(learning_rate=1e-3))" ] }, { "cell_type": "code", "execution_count": 86, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/30\n", "363/363 [==============================] - 1s 927us/step - loss: 3.3697 - val_loss: 0.7126\n", "Epoch 2/30\n", "363/363 [==============================] - 0s 695us/step - loss: 0.6964 - val_loss: 0.6880\n", "Epoch 3/30\n", "363/363 [==============================] - 0s 668us/step - loss: 0.6167 - val_loss: 0.5803\n", "Epoch 4/30\n", "363/363 [==============================] - 0s 672us/step - loss: 0.5846 - val_loss: 0.5166\n", "Epoch 5/30\n", "363/363 [==============================] - 0s 692us/step - loss: 0.5321 - val_loss: 0.4895\n", "Epoch 6/30\n", "363/363 [==============================] - 0s 755us/step - loss: 0.5083 - val_loss: 0.4951\n", "Epoch 7/30\n", "363/363 [==============================] - 0s 697us/step - loss: 0.5044 - val_loss: 0.4861\n", "Epoch 8/30\n", "363/363 [==============================] - 0s 668us/step - loss: 0.4813 - val_loss: 0.4554\n", "Epoch 9/30\n", "363/363 [==============================] - 0s 681us/step - loss: 0.4627 - val_loss: 0.4413\n", "Epoch 10/30\n", "363/363 [==============================] - 0s 701us/step - loss: 0.4549 - val_loss: 0.4379\n", "Epoch 11/30\n", "363/363 [==============================] - 0s 696us/step - loss: 0.4416 - val_loss: 0.4396\n", "Epoch 12/30\n", "363/363 [==============================] - 0s 692us/step - loss: 0.4295 - val_loss: 0.4507\n", "Epoch 13/30\n", "363/363 [==============================] - 0s 703us/step - loss: 0.4326 - val_loss: 0.3997\n", "Epoch 14/30\n", "363/363 [==============================] - 0s 703us/step - loss: 0.4207 - val_loss: 0.3956\n", "Epoch 15/30\n", "363/363 [==============================] - 0s 698us/step - loss: 0.4198 - val_loss: 0.3916\n", "Epoch 16/30\n", "363/363 [==============================] - 0s 695us/step - loss: 0.4248 - val_loss: 0.3937\n", "Epoch 17/30\n", "363/363 [==============================] - 0s 699us/step - loss: 0.4105 - val_loss: 0.3809\n", "Epoch 18/30\n", "363/363 [==============================] - 0s 697us/step - loss: 0.4070 - val_loss: 0.3793\n", "Epoch 19/30\n", "363/363 [==============================] - 0s 674us/step - loss: 0.3902 - val_loss: 0.3850\n", "Epoch 20/30\n", "363/363 [==============================] - 0s 680us/step - loss: 0.3864 - val_loss: 0.3809\n", "Epoch 21/30\n", "363/363 [==============================] - 0s 693us/step - loss: 0.3978 - val_loss: 0.3701\n", "Epoch 22/30\n", "363/363 [==============================] - 0s 694us/step - loss: 0.3816 - val_loss: 0.3781\n", "Epoch 23/30\n", "363/363 [==============================] - 0s 680us/step - loss: 0.4042 - val_loss: 0.3650\n", "Epoch 24/30\n", "363/363 [==============================] - 0s 630us/step - loss: 0.3823 - val_loss: 0.3655\n", "Epoch 25/30\n", "363/363 [==============================] - 0s 699us/step - loss: 0.3792 - val_loss: 0.3611\n", "Epoch 26/30\n", "363/363 [==============================] - 0s 684us/step - loss: 0.3800 - val_loss: 0.3626\n", "Epoch 27/30\n", "363/363 [==============================] - 0s 686us/step - loss: 0.3858 - val_loss: 0.3564\n", "Epoch 28/30\n", "363/363 [==============================] - 0s 690us/step - loss: 0.3839 - val_loss: 0.3579\n", "Epoch 29/30\n", "363/363 [==============================] - 0s 695us/step - loss: 0.3736 - val_loss: 0.3561\n", "Epoch 30/30\n", "363/363 [==============================] - 0s 684us/step - loss: 0.3843 - val_loss: 0.3548\n" ] } ], "source": [ "tensorboard_cb = keras.callbacks.TensorBoard(run_logdir)\n", "history = model.fit(X_train, y_train, epochs=30,\n", " validation_data=(X_valid, y_valid),\n", " callbacks=[checkpoint_cb, tensorboard_cb])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Để khởi động máy chủ TensorBoard, một tùy chọn là sử dụng terminal, nếu cần, hãy kích hoạt virtualenv nơi bạn đã cài đặt TensorBoard, đi tới thư mục của notebook này, sau đó nhập:\n", "\n", "```bash\n", "$ tensorboard --logdir=./my_logs --port=6006\n", "```\n", "\n", "Sau đó, bạn có thể mở trình duyệt web của mình với địa chỉ [localhost:6006](http://localhost:6006) và sử dụng TensorBoard. Khi bạn đã hoàn tất, hãy nhấn Ctrl-C trong cửa sổ đầu cuối, thao tác này sẽ tắt máy chủ TensorBoard.\n", "\n", "Ngoài ra, bạn có thể tải tiện ích mở rộng Jupyter của TensorBoard và chạy nó như thế này:" ] }, { "cell_type": "code", "execution_count": 87, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " \n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%load_ext tensorboard\n", "%tensorboard --logdir=./my_logs --port=6006" ] }, { "cell_type": "code", "execution_count": 88, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'./my_logs/run_2021_02_13-18_39_31'" ] }, "execution_count": 88, "metadata": {}, "output_type": "execute_result" } ], "source": [ "run_logdir2 = get_run_logdir()\n", "run_logdir2" ] }, { "cell_type": "code", "execution_count": 89, "metadata": {}, "outputs": [], "source": [ "keras.backend.clear_session()\n", "np.random.seed(42)\n", "tf.random.set_seed(42)" ] }, { "cell_type": "code", "execution_count": 90, "metadata": {}, "outputs": [], "source": [ "model = keras.models.Sequential([\n", " keras.layers.Dense(30, activation=\"relu\", input_shape=[8]),\n", " keras.layers.Dense(30, activation=\"relu\"),\n", " keras.layers.Dense(1)\n", "]) \n", "model.compile(loss=\"mse\", optimizer=keras.optimizers.SGD(learning_rate=0.05))" ] }, { "cell_type": "code", "execution_count": 91, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/30\n", "363/363 [==============================] - 1s 1ms/step - loss: 0.7645 - val_loss: 302.8536\n", "Epoch 2/30\n", "363/363 [==============================] - 0s 713us/step - loss: 8159520618.2209 - val_loss: 1.3230\n", "Epoch 3/30\n", "363/363 [==============================] - 0s 735us/step - loss: 1.3439 - val_loss: 1.3176\n", "Epoch 4/30\n", "363/363 [==============================] - 0s 738us/step - loss: 1.3546 - val_loss: 1.3261\n", "Epoch 5/30\n", "363/363 [==============================] - 0s 712us/step - loss: 1.3513 - val_loss: 1.3154\n", "Epoch 6/30\n", "363/363 [==============================] - 0s 724us/step - loss: 1.3274 - val_loss: 1.3203\n", "Epoch 7/30\n", "363/363 [==============================] - 0s 693us/step - loss: 1.3639 - val_loss: 1.3149\n", "Epoch 8/30\n", "363/363 [==============================] - 0s 709us/step - loss: 1.3487 - val_loss: 1.3157\n", "Epoch 9/30\n", "363/363 [==============================] - 0s 681us/step - loss: 1.3445 - val_loss: 1.3150\n", "Epoch 10/30\n", "363/363 [==============================] - 0s 681us/step - loss: 1.3697 - val_loss: 1.3172\n", "Epoch 11/30\n", "363/363 [==============================] - 0s 687us/step - loss: 1.3622 - val_loss: 1.3174\n", "Epoch 12/30\n", "363/363 [==============================] - 0s 693us/step - loss: 1.3389 - val_loss: 1.3150\n", "Epoch 13/30\n", "363/363 [==============================] - 0s 668us/step - loss: 1.3336 - val_loss: 1.3270\n", "Epoch 14/30\n", "363/363 [==============================] - 0s 673us/step - loss: 1.3429 - val_loss: 1.3195\n", "Epoch 15/30\n", "363/363 [==============================] - 0s 679us/step - loss: 1.3275 - val_loss: 1.3157\n", "Epoch 16/30\n", "363/363 [==============================] - 0s 701us/step - loss: 1.3669 - val_loss: 1.3182\n", "Epoch 17/30\n", "363/363 [==============================] - 0s 692us/step - loss: 1.3645 - val_loss: 1.3223\n", "Epoch 18/30\n", "363/363 [==============================] - 0s 691us/step - loss: 1.3839 - val_loss: 1.3154\n", "Epoch 19/30\n", "363/363 [==============================] - 0s 680us/step - loss: 1.3078 - val_loss: 1.3168\n", "Epoch 20/30\n", "363/363 [==============================] - 0s 663us/step - loss: 1.3215 - val_loss: 1.3151\n", "Epoch 21/30\n", "363/363 [==============================] - 0s 723us/step - loss: 1.3344 - val_loss: 1.3174\n", "Epoch 22/30\n", "363/363 [==============================] - 0s 674us/step - loss: 1.3269 - val_loss: 1.3204\n", "Epoch 23/30\n", "363/363 [==============================] - 0s 700us/step - loss: 1.3590 - val_loss: 1.3164\n", "Epoch 24/30\n", "363/363 [==============================] - 0s 687us/step - loss: 1.3381 - val_loss: 1.3157\n", "Epoch 25/30\n", "363/363 [==============================] - 0s 687us/step - loss: 1.3265 - val_loss: 1.3180\n", "Epoch 26/30\n", "363/363 [==============================] - 0s 704us/step - loss: 1.3532 - val_loss: 1.3195\n", "Epoch 27/30\n", "363/363 [==============================] - 0s 715us/step - loss: 1.3552 - val_loss: 1.3157\n", "Epoch 28/30\n", "363/363 [==============================] - 0s 698us/step - loss: 1.3447 - val_loss: 1.3222\n", "Epoch 29/30\n", "363/363 [==============================] - 0s 713us/step - loss: 1.3379 - val_loss: 1.3267\n", "Epoch 30/30\n", "363/363 [==============================] - 0s 698us/step - loss: 1.3583 - val_loss: 1.3174\n" ] } ], "source": [ "tensorboard_cb = keras.callbacks.TensorBoard(run_logdir2)\n", "history = model.fit(X_train, y_train, epochs=30,\n", " validation_data=(X_valid, y_valid),\n", " callbacks=[checkpoint_cb, tensorboard_cb])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Lưu ý cách TensorBoard hiển thị hai lần chạy và bạn có thể so sánh các đường cong học." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Kiểm tra các tùy chọn logging có sẵn khác:" ] }, { "cell_type": "code", "execution_count": 92, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Help on function __init__ in module tensorflow.python.keras.callbacks:\n", "\n", "__init__(self, log_dir='logs', histogram_freq=0, write_graph=True, write_images=False, update_freq='epoch', profile_batch=2, embeddings_freq=0, embeddings_metadata=None, **kwargs)\n", " Initialize self. See help(type(self)) for accurate signature.\n", "\n" ] } ], "source": [ "help(keras.callbacks.TensorBoard.__init__)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Tinh chỉnh Siêu tham số" ] }, { "cell_type": "code", "execution_count": 93, "metadata": {}, "outputs": [], "source": [ "keras.backend.clear_session()\n", "np.random.seed(42)\n", "tf.random.set_seed(42)" ] }, { "cell_type": "code", "execution_count": 94, "metadata": {}, "outputs": [], "source": [ "def build_model(n_hidden=1, n_neurons=30, learning_rate=3e-3, input_shape=[8]):\n", " model = keras.models.Sequential()\n", " model.add(keras.layers.InputLayer(input_shape=input_shape))\n", " for layer in range(n_hidden):\n", " model.add(keras.layers.Dense(n_neurons, activation=\"relu\"))\n", " model.add(keras.layers.Dense(1))\n", " optimizer = keras.optimizers.SGD(learning_rate=learning_rate)\n", " model.compile(loss=\"mse\", optimizer=optimizer)\n", " return model" ] }, { "cell_type": "code", "execution_count": 95, "metadata": {}, "outputs": [], "source": [ "keras_reg = keras.wrappers.scikit_learn.KerasRegressor(build_model)" ] }, { "cell_type": "code", "execution_count": 96, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/100\n", "363/363 [==============================] - 0s 905us/step - loss: 1.5673 - val_loss: 20.7721\n", "Epoch 2/100\n", "363/363 [==============================] - 0s 665us/step - loss: 1.3216 - val_loss: 5.0266\n", "Epoch 3/100\n", "363/363 [==============================] - 0s 671us/step - loss: 0.5972 - val_loss: 0.5490\n", "Epoch 4/100\n", "363/363 [==============================] - 0s 661us/step - loss: 0.4985 - val_loss: 0.4529\n", "Epoch 5/100\n", "363/363 [==============================] - 0s 687us/step - loss: 0.4608 - val_loss: 0.4188\n", "Epoch 6/100\n", "363/363 [==============================] - 0s 678us/step - loss: 0.4410 - val_loss: 0.4129\n", "Epoch 7/100\n", "363/363 [==============================] - 0s 676us/step - loss: 0.4463 - val_loss: 0.4004\n", "Epoch 8/100\n", "363/363 [==============================] - 0s 686us/step - loss: 0.4283 - val_loss: 0.3944\n", "Epoch 9/100\n", "363/363 [==============================] - 0s 660us/step - loss: 0.4139 - val_loss: 0.3961\n", "Epoch 10/100\n", "363/363 [==============================] - 0s 681us/step - loss: 0.4107 - val_loss: 0.4071\n", "Epoch 11/100\n", "363/363 [==============================] - 0s 655us/step - loss: 0.3992 - val_loss: 0.3855\n", "Epoch 12/100\n", "363/363 [==============================] - 0s 627us/step - loss: 0.3982 - val_loss: 0.4136\n", "Epoch 13/100\n", "363/363 [==============================] - 0s 692us/step - loss: 0.3983 - val_loss: 0.3997\n", "Epoch 14/100\n", "363/363 [==============================] - 0s 675us/step - loss: 0.3910 - val_loss: 0.3818\n", "Epoch 15/100\n", "363/363 [==============================] - 0s 592us/step - loss: 0.3948 - val_loss: 0.3829\n", "Epoch 16/100\n", "363/363 [==============================] - 0s 686us/step - loss: 0.3981 - val_loss: 0.3739\n", "Epoch 17/100\n", "363/363 [==============================] - 0s 674us/step - loss: 0.3821 - val_loss: 0.4022\n", "Epoch 18/100\n", "<<130 more lines>>\n", "363/363 [==============================] - 0s 627us/step - loss: 0.3441 - val_loss: 0.3342\n", "Epoch 84/100\n", "363/363 [==============================] - 0s 640us/step - loss: 0.3240 - val_loss: 0.4136\n", "Epoch 85/100\n", "363/363 [==============================] - 0s 656us/step - loss: 0.3303 - val_loss: 0.3285\n", "Epoch 86/100\n", "363/363 [==============================] - 0s 671us/step - loss: 0.3263 - val_loss: 0.3440\n", "Epoch 87/100\n", "363/363 [==============================] - 0s 672us/step - loss: 0.3483 - val_loss: 0.3733\n", "Epoch 88/100\n", "363/363 [==============================] - 0s 649us/step - loss: 0.3305 - val_loss: 0.3188\n", "Epoch 89/100\n", "363/363 [==============================] - 0s 578us/step - loss: 0.3283 - val_loss: 0.3492\n", "Epoch 90/100\n", "363/363 [==============================] - 0s 665us/step - loss: 0.3243 - val_loss: 0.3175\n", "Epoch 91/100\n", "363/363 [==============================] - 0s 664us/step - loss: 0.3288 - val_loss: 0.3594\n", "Epoch 92/100\n", "363/363 [==============================] - 0s 675us/step - loss: 0.3343 - val_loss: 0.3169\n", "Epoch 93/100\n", "363/363 [==============================] - 0s 666us/step - loss: 0.3485 - val_loss: 0.3607\n", "Epoch 94/100\n", "363/363 [==============================] - 0s 659us/step - loss: 0.3262 - val_loss: 0.5184\n", "Epoch 95/100\n", "363/363 [==============================] - 0s 677us/step - loss: 0.3284 - val_loss: 0.7536\n", "Epoch 96/100\n", "363/363 [==============================] - 0s 674us/step - loss: 0.3494 - val_loss: 0.5075\n", "Epoch 97/100\n", "363/363 [==============================] - 0s 628us/step - loss: 0.3290 - val_loss: 0.8087\n", "Epoch 98/100\n", "363/363 [==============================] - 0s 624us/step - loss: 0.3277 - val_loss: 1.0447\n", "Epoch 99/100\n", "363/363 [==============================] - 0s 683us/step - loss: 0.3199 - val_loss: 1.6881\n", "Epoch 100/100\n", "363/363 [==============================] - 0s 671us/step - loss: 0.3706 - val_loss: 1.9265\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 96, "metadata": {}, "output_type": "execute_result" } ], "source": [ "keras_reg.fit(X_train, y_train, epochs=100,\n", " validation_data=(X_valid, y_valid),\n", " callbacks=[keras.callbacks.EarlyStopping(patience=10)])" ] }, { "cell_type": "code", "execution_count": 97, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "162/162 [==============================] - 0s 417us/step - loss: 0.3409\n" ] } ], "source": [ "mse_test = keras_reg.score(X_test, y_test)" ] }, { "cell_type": "code", "execution_count": 98, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "WARNING:tensorflow:8 out of the last 9 calls to .predict_function at 0x7fd98963b7a0> triggered tf.function retracing. Tracing is expensive and the excessive number of tracings could be due to (1) creating @tf.function repeatedly in a loop, (2) passing tensors with different shapes, (3) passing Python objects instead of tensors. For (1), please define your @tf.function outside of the loop. For (2), @tf.function has experimental_relax_shapes=True option that relaxes argument shapes that can avoid unnecessary retracing. For (3), please refer to https://www.tensorflow.org/guide/function#controlling_retracing and https://www.tensorflow.org/api_docs/python/tf/function for more details.\n" ] } ], "source": [ "y_pred = keras_reg.predict(X_new)" ] }, { "cell_type": "code", "execution_count": 99, "metadata": {}, "outputs": [], "source": [ "np.random.seed(42)\n", "tf.random.set_seed(42)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Cảnh báo**: cell dưới đây gặp lỗi ở giai đoạn cuối quá trình huấn luyện. Điều này có vẻ là do [issue Keras #13586](https://github.com/keras-team/keras/issues/13586), gây ra bởi một thay đổi gần đây trong Scikit-Learn. [Pull Request #13598](https://github.com/keras-team/keras/pull/13598) dường như đã khắc phục được sự cố, vì vậy vấn đề sẽ sớm được giải quyết. Trong thời gian chờ đợi, tôi đã thêm `.tolist()` và `.rvs(1000).tolist()` làm giải pháp thay thế." ] }, { "cell_type": "code", "execution_count": 100, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Fitting 3 folds for each of 10 candidates, totalling 30 fits\n", "Epoch 1/100\n", "242/242 [==============================] - 0s 1ms/step - loss: 1.3827 - val_loss: 0.4703\n", "Epoch 2/100\n", "242/242 [==============================] - 0s 757us/step - loss: 0.4880 - val_loss: 0.4247\n", "Epoch 3/100\n", "242/242 [==============================] - 0s 765us/step - loss: 0.4541 - val_loss: 0.4052\n", "Epoch 4/100\n", "242/242 [==============================] - 0s 745us/step - loss: 0.4518 - val_loss: 0.3975\n", "Epoch 5/100\n", "242/242 [==============================] - 0s 765us/step - loss: 0.4337 - val_loss: 0.3991\n", "Epoch 6/100\n", "242/242 [==============================] - 0s 751us/step - loss: 0.4263 - val_loss: 0.4031\n", "Epoch 7/100\n", "242/242 [==============================] - 0s 743us/step - loss: 0.4385 - val_loss: 0.4043\n", "Epoch 8/100\n", "242/242 [==============================] - 0s 780us/step - loss: 0.4301 - val_loss: 0.3929\n", "Epoch 9/100\n", "242/242 [==============================] - 0s 792us/step - loss: 0.4108 - val_loss: 0.4040\n", "Epoch 10/100\n", "242/242 [==============================] - 0s 764us/step - loss: 0.4200 - val_loss: 0.3886\n", "Epoch 11/100\n", "242/242 [==============================] - 0s 745us/step - loss: 0.4099 - val_loss: 0.3999\n", "Epoch 12/100\n", "242/242 [==============================] - 0s 740us/step - loss: 0.3897 - val_loss: 0.4085\n", "Epoch 13/100\n", "242/242 [==============================] - 0s 765us/step - loss: 0.4265 - val_loss: 0.3922\n", "Epoch 14/100\n", "242/242 [==============================] - 0s 752us/step - loss: 0.4108 - val_loss: 0.3918\n", "Epoch 15/100\n", "242/242 [==============================] - 0s 731us/step - loss: 0.4070 - val_loss: 0.3886\n", "Epoch 16/100\n", "242/242 [==============================] - 0s 737us/step - loss: 0.4032 - val_loss: 0.3933\n", "Epoch 17/100\n", "242/242 [==============================] - 0s 774us/step - loss: 0.4212 - val_loss: 0.3907\n", "<<2367 more lines>>\n", "363/363 [==============================] - 0s 622us/step - loss: 0.3312 - val_loss: 0.5455\n", "Epoch 12/100\n", "363/363 [==============================] - 0s 727us/step - loss: 0.3456 - val_loss: 0.6470\n", "Epoch 13/100\n", "363/363 [==============================] - 0s 742us/step - loss: 0.3320 - val_loss: 0.3109\n", "Epoch 14/100\n", "363/363 [==============================] - 0s 697us/step - loss: 0.3259 - val_loss: 0.3198\n", "Epoch 15/100\n", "363/363 [==============================] - 0s 662us/step - loss: 0.3222 - val_loss: 0.3065\n", "Epoch 16/100\n", "363/363 [==============================] - 0s 748us/step - loss: 0.3277 - val_loss: 0.3252\n", "Epoch 17/100\n", "363/363 [==============================] - 0s 724us/step - loss: 0.3095 - val_loss: 0.3965\n", "Epoch 18/100\n", "363/363 [==============================] - 0s 703us/step - loss: 0.3107 - val_loss: 0.2997\n", "Epoch 19/100\n", "363/363 [==============================] - 0s 706us/step - loss: 0.3060 - val_loss: 0.3079\n", "Epoch 20/100\n", "363/363 [==============================] - 0s 704us/step - loss: 0.3003 - val_loss: 0.4544\n", "Epoch 21/100\n", "363/363 [==============================] - 0s 698us/step - loss: 0.3090 - val_loss: 0.3274\n", "Epoch 22/100\n", "363/363 [==============================] - 0s 709us/step - loss: 0.2949 - val_loss: 0.5018\n", "Epoch 23/100\n", "363/363 [==============================] - 0s 715us/step - loss: 0.3126 - val_loss: 0.5565\n", "Epoch 24/100\n", "363/363 [==============================] - 0s 702us/step - loss: 0.3031 - val_loss: 0.5390\n", "Epoch 25/100\n", "363/363 [==============================] - 0s 698us/step - loss: 0.2992 - val_loss: 0.3339\n", "Epoch 26/100\n", "363/363 [==============================] - 0s 719us/step - loss: 0.2988 - val_loss: 0.5095\n", "Epoch 27/100\n", "363/363 [==============================] - 0s 716us/step - loss: 0.3001 - val_loss: 0.6597\n", "Epoch 28/100\n", "363/363 [==============================] - 0s 721us/step - loss: 0.3058 - val_loss: 0.5106\n" ] }, { "data": { "text/plain": [ "RandomizedSearchCV(cv=3,\n", " estimator=,\n", " param_distributions={'learning_rate': [0.001683454924600351,\n", " 0.02390836445593178,\n", " 0.008731907739399206,\n", " 0.004725396149933917,\n", " 0.0006154014789262348,\n", " 0.0006153331256530192,\n", " 0.0003920021771415983,\n", " 0.01619845322936229,\n", " 0.004779156784872302,\n", " 0.0...\n", " 0.005021425736625637,\n", " 0.0005703073595961105,\n", " 0.001151888789941251,\n", " 0.001621231156394198,\n", " 0.0024505367684280487,\n", " 0.011155092541719619,\n", " 0.0007524347058135697,\n", " 0.0032032448128444043,\n", " 0.004591455636549438,\n", " 0.0003715541189658278, ...],\n", " 'n_hidden': [0, 1, 2, 3],\n", " 'n_neurons': [1, 2, 3, 4, 5, 6, 7, 8, 9,\n", " 10, 11, 12, 13, 14, 15,\n", " 16, 17, 18, 19, 20, 21,\n", " 22, 23, 24, 25, 26, 27,\n", " 28, 29, 30, ...]},\n", " verbose=2)" ] }, "execution_count": 100, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from scipy.stats import reciprocal\n", "from sklearn.model_selection import RandomizedSearchCV\n", "\n", "param_distribs = {\n", " \"n_hidden\": [0, 1, 2, 3],\n", " \"n_neurons\": np.arange(1, 100) .tolist(),\n", " \"learning_rate\": reciprocal(3e-4, 3e-2) .rvs(1000).tolist(),\n", "}\n", "\n", "rnd_search_cv = RandomizedSearchCV(keras_reg, param_distribs, n_iter=10, cv=3, verbose=2)\n", "rnd_search_cv.fit(X_train, y_train, epochs=100,\n", " validation_data=(X_valid, y_valid),\n", " callbacks=[keras.callbacks.EarlyStopping(patience=10)])" ] }, { "cell_type": "code", "execution_count": 101, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'n_neurons': 74, 'n_hidden': 3, 'learning_rate': 0.005803602934201024}" ] }, "execution_count": 101, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rnd_search_cv.best_params_" ] }, { "cell_type": "code", "execution_count": 102, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "-0.32039451599121094" ] }, "execution_count": 102, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rnd_search_cv.best_score_" ] }, { "cell_type": "code", "execution_count": 103, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 103, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rnd_search_cv.best_estimator_" ] }, { "cell_type": "code", "execution_count": 104, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "162/162 [==============================] - 0s 436us/step - loss: 0.3029\n" ] }, { "data": { "text/plain": [ "-0.3028871417045593" ] }, "execution_count": 104, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rnd_search_cv.score(X_test, y_test)" ] }, { "cell_type": "code", "execution_count": 105, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 105, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model = rnd_search_cv.best_estimator_.model\n", "model" ] }, { "cell_type": "code", "execution_count": 106, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "162/162 [==============================] - 0s 446us/step - loss: 0.3029\n" ] }, { "data": { "text/plain": [ "0.3028871417045593" ] }, "execution_count": 106, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model.evaluate(X_test, y_test)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Lời giải bài tập" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1. đến 9." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Tham khảo phụ lục A." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 10." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*Bài tập: Huấn luyện MLP sâu trên tập dữ liệu MNIST (bạn có thể tải nó bằng cách sử dụng `keras.datasets.mnist.load_data()`. Hãy xem liệu bạn có thể đạt được độ chính xác trên 98% hay không. Hãy thử tìm kiếm tốc độ học tối ưu bằng cách sử dụng phương pháp được trình bày trong chương này (như là tăng tốc độ học theo cấp số nhân, vẽ đồ thị mất mát và tìm điểm mà tại đó mất mát tăng lên). Hãy thử thêm tất cả các điểm lưu trữ (checkpoint), sử dụng tính năng dừng sớm và vẽ đồ thị đường cong học bằng TensorBoard.*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Nạp tập dữ liệu:" ] }, { "cell_type": "code", "execution_count": 107, "metadata": {}, "outputs": [], "source": [ "(X_train_full, y_train_full), (X_test, y_test) = keras.datasets.mnist.load_data()" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "Giống như đối với tập dữ liệu Fashion MNIST, tập huấn luyện MNIST chứa 60,000 hình ảnh thang độ xám, mỗi hình ảnh có kích thước 28x28 pixel:" ] }, { "cell_type": "code", "execution_count": 108, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(60000, 28, 28)" ] }, "execution_count": 108, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X_train_full.shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Mỗi cường độ pixel cũng được biểu diễn dưới kiểu byte (0 đến 255):" ] }, { "cell_type": "code", "execution_count": 109, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "dtype('uint8')" ] }, "execution_count": 109, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X_train_full.dtype" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Hãy chia toàn bộ tập huấn luyện thành một tập kiểm định và một tập huấn luyện (nhỏ hơn). Ta cũng tỷ lệ hóa cường độ pixel xuống trong khoảng 0-1 và chuyển đổi chúng thành kiểu float, bằng cách chia cho 255, giống như cách ta đã làm với Fashion MNIST:" ] }, { "cell_type": "code", "execution_count": 110, "metadata": {}, "outputs": [], "source": [ "X_valid, X_train = X_train_full[:5000] / 255., X_train_full[5000:] / 255.\n", "y_valid, y_train = y_train_full[:5000], y_train_full[5000:]\n", "X_test = X_test / 255." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Hãy biểu diễn một hình ảnh bằng cách sử dụng phương thức `imshow()` của Matplotlib, với bản đồ màu `'nhị phân'`:" ] }, { "cell_type": "code", "execution_count": 111, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAOcAAADnCAYAAADl9EEgAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAGHElEQVR4nO3cz4tNfQDH8blPU4Zc42dKydrCpJQaopSxIdlYsLSykDBbO1slJWExSjKRP2GytSEWyvjRGKUkGzYUcp/dU2rO9z7umTv3c++8XkufzpkjvTvl25lGq9UaAvL80+sHABYmTgglTgglTgglTgg13Gb3X7nQfY2F/tCbE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0KJE0IN9/oBlqPbt29Xbo1Go3jthg0bivvLly+L+/j4eHHft29fcWfpeHNCKHFCKHFCKHFCKHFCKHFCKHFCqJ6dc967d6+4P3v2rLhPTU0t5uMsqS9fvnR87fBw+Z/sx48fxX1kZKS4r1q1qnIbGxsrXvvgwYPivmnTpuLOn7w5IZQ4IZQ4IZQ4IZQ4IZQ4IZQ4IVSj1WqV9uLYzoULFyq3q1evFq/9/ft3nR9NDxw4cKC4T09PF/fNmzcv5uP0kwU/4vXmhFDihFDihFDihFDihFDihFDihFBdPefcunVr5fbhw4fite2+HVy5cmVHz7QY9u7dW9yPHTu2NA/SgZmZmeJ+586dym1+fr7Wz253Dnr//v3KbcC/BXXOCf1EnBBKnBBKnBBKnBBKnBBKnBCqq+ecr1+/rtxevHhRvHZiYqK4N5vNjp6Jsrm5ucrt8OHDxWtnZ2dr/ezLly9XbpOTk7XuHc45J/QTcUIocUIocUIocUIocUKorh6lMFgePnxY3I8fP17r/hs3bqzcPn/+XOve4RylQD8RJ4QSJ4QSJ4QSJ4QSJ4QSJ4QSJ4QSJ4QSJ4QSJ4QSJ4QSJ4QSJ4QSJ4Qa7vUDkOX69euV25MnT7r6s79//165PX36tHjtrl27Fvtxes6bE0KJE0KJE0KJE0KJE0KJE0KJE0L5vbU98PHjx8rt7t27xWuvXLmy2I/zh9Kz9dKaNWuK+9evX5foSbrC762FfiJOCCVOCCVOCCVOCCVOCCVOCOV7zg7MzMwU93bfHt68ebNye/fuXUfPNOhOnTrV60dYct6cEEqcEEqcEEqcEEqcEEqcEGpZHqW8efOmuJ8+fbq4P3r0aDEf569s27atuK9bt67W/S9dulS5jYyMFK89c+ZMcX/16lVHzzQ0NDS0ZcuWjq/tV96cEEqcEEqcEEqcEEqcEEqcEEqcEGpgzzlLv0Ly2rVrxWvn5uaK++rVq4v76OhocT9//nzl1u48b8+ePcW93TloN7X7e7fTbDYrtyNHjtS6dz/y5oRQ4oRQ4oRQ4oRQ4oRQ4oRQ4oRQA3vO+fjx48qt3Tnm0aNHi/vk5GRx379/f3HvV8+fPy/u79+/r3X/FStWVG7bt2+vde9+5M0JocQJocQJocQJocQJocQJocQJoQb2nPPGjRuV29jYWPHaixcvLvbjDIS3b98W90+fPtW6/8GDB2tdP2i8OSGUOCGUOCGUOCGUOCGUOCHUwB6lrF+/vnJzVNKZ0md4/8fatWuL+9mzZ2vdf9B4c0IocUIocUIocUIocUIocUIocUKogT3npDM7duyo3GZnZ2vd+9ChQ8V9fHy81v0HjTcnhBInhBInhBInhBInhBInhBInhHLOyR/m5+crt1+/fhWvHR0dLe7nzp3r4ImWL29OCCVOCCVOCCVOCCVOCCVOCCVOCOWcc5mZnp4u7t++favcms1m8dpbt24Vd99r/h1vTgglTgglTgglTgglTgglTgglTgjVaLVapb04kufnz5/Ffffu3cW99LtpT5w4Ubx2amqquFOpsdAfenNCKHFCKHFCKHFCKHFCKHFCKJ+MDZhGY8H/lf/PyZMni/vOnTsrt4mJiU4eiQ55c0IocUIocUIocUIocUIocUIocUIon4xB7/lkDPqJOCGUOCGUOCGUOCGUOCGUOCFUu+85yx8HAl3jzQmhxAmhxAmhxAmhxAmhxAmh/gWlotX4VjU5XgAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.imshow(X_train[0], cmap=\"binary\")\n", "plt.axis('off')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Các nhãn là ID lớp (được biểu thị bằng kiểu uint8), từ 0 đến 9. Một điều khá tiện đó là là ID lớp tương ứng với các chữ số được biểu thị trong hình ảnh, vì vậy chúng ta không cần mảng `class_names`:" ] }, { "cell_type": "code", "execution_count": 112, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([7, 3, 4, ..., 5, 6, 8], dtype=uint8)" ] }, "execution_count": 112, "metadata": {}, "output_type": "execute_result" } ], "source": [ "y_train" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "Tập kiểm định chứa 5,000 hình ảnh và tập kiểm tra chứa 10,000 hình ảnh:" ] }, { "cell_type": "code", "execution_count": 113, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(5000, 28, 28)" ] }, "execution_count": 113, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X_valid.shape" ] }, { "cell_type": "code", "execution_count": 114, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(10000, 28, 28)" ] }, "execution_count": 114, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X_test.shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Hãy xem một mẫu các hình ảnh trong tập dữ liệu:" ] }, { "cell_type": "code", "execution_count": 115, "metadata": {}, "outputs": [ { "data": { "image/png": "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AAgiamEn4wuZfZTFno0bN2bkyJEAtG3bFvBziFevXg0E11rJl0y3kniTJk2K+v9JJ53ECy+8kOPzu3TpAkC1atWAYD1HJFncVlj5PvPISe3RRx8FgsTVwpADROzatcuGemUqRaYBJk2alBZTrpKGsHTpUiC4KFStWtUOOuViMmDAAO68886o50nqgkzjQ7B6+uqrr0508+Pqu+++s0nwQqYDH3nkkXxdEOfPnw/4K/p+//33+DfSkc8++wyAxx9/3D4m9f7kvbfffjqRITfCb731FuAPpDp06OCySUkng8jIgcGRRx4J+DfyTZs2zfF7s6YxHH744fbCmw5+++23qI/pbu/evfY4kHqpkSSd67XXXgOw6XGRzjrrLMCvSTxhwgT7ugBbt26lcePG8W94guzevZsrr7wSCIId8n4YN25ctsoatWvXttcg+T2lUs3777+flDYni7wnJAiW379r/fr1AT8FrkmTJlFfK8p4EHRqXimllFJKOZLviOgrr7wCBCNfmULP6S763//+NxAsPMnNBx98YEPDP/30EwAff/wx4E+3SZJxKk/Ty92VRPIkCho5BS8RzmeeecZGOSUiOnXqVCC6tFOq1hMdPnw4O3fuBKBEiRIAvPHGGwD5nh6UKevffvvNRnfyc6yFnaQXSJT3nHPOsVNLGgkNyKyKfNxvv/3SKqKXH7J4wPM8mjVrBsDMmTOB2Av3/vzzT8BftCFT13L+kfNLOqtRowbgR7/Szfz58xkwYEDMr5144om8+eabQO4L0SRKOHbsWLuYTXZsSxW7d+8G/NQmiYTKWEXKWclxkJWMcdauXQsEswY7duygbNmyiWt0kkmqjqQJvvzyy7acVSySknHbbbcBsH37dltSUCLtRb026ZVNKaWUUko5ke+I6Icffghg9x+VJN94lPpo2bKlLZkgeSqSS/nxxx/baGnfvn2L/LNca9CgQY5fk+jEkUceaXN4JKk6MvohkeFULWj/5Zdf2s/bt28PQOvWre1jkpeUNZcY/GLEQFT5mc6dOwNQt27deDc16b799tuo/1911VXUqlXLUWvCS3LdlD9LIueHyEiozF4tXLgQgEsuuQTwz62Say7n23Qj581IEhk7/vjjk92chJFcTolQRTrxxBMB/9qddW/wdCWR3xEjRtjZRJklyCkSKiIXVEOwoUo6RUMBG/1cvnw54G+W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AO666y4ArrrqqmQ31ZnevXsD8OSTTwLw0Ucf0bp1a4ctUio1SCTwzTffZOrUqQDMmjULAGOyL1j9+OOPAWjVqlVS2pdI8+fPB+D+++/ntddey/Z1z/MXHFerVg3APuekk05KUgtVWC1atMheY7/55hsAdu/ebT9KNL1kyZJO2pcsDz/8MACtW7e2MwbJmDnQiKhSSimllHIi4RFRuQudPHkyAPfee6+NAMZy5JFHAvDhhx8CUL16dYoXT/3A7YwZMwDo1KkTAHv27AGioxTSV8YY1q5dC8D1118f9fxrr702OQ12SPpEPr733ntpHxH95ZdfAHjnnXeAIGK+ePFi3n77bQD69u0LwJlnnknDhg0BKF26NAAHHHAAAHv37uWFF14AYMeOHQD07NmTEiVKJOPXUI7IcXPnnXcCQVQHsr+fIp177rmAHxGqU6dOglsZXzt37gTgkksuAeDdd98F4M8//7TPOeusswA/qrNt2zYAXn75ZQA6duwIwJo1a+z7SGWWfv36Af74JGtesRg3bpx93hFHHJGspiWcjLEeffRRFi1aBMDq1asBqFixoo3+HnLIIQB89tlnCWtLwkZ4//zzDxBMr95www32a/vt5wdiy5YtC/iDLDmpyCBVpqabNGnCBx98APiD0lQl00B79+4FgotC+fLlOfbYY6Oee9RRR7F9+3YAJk6cCMCkSZMAuPLKKzNuUPHdd9/x999/A6Tl7z5+/Hh69OgBxB4syGMPPfQQEEyfABx66KEAdvA5d+5ce9IUrVq1omnTpvFvuHLqr7/+AvzjQQagsY6f3Pzxxx8APPHEE9x///3xbWCCyUBy9uzZQHCTfvbZZ3PiiScCwVRqsWLF7DVJzsGvvvoq4P/ut956a/IaniRyzly9ejX33nsvEJwncnPDDTdw9913A1CpUiWg4MdVmG3fvt2mrTz11FMAbN26NcfnN27cmAoVKiSlbcmwefNmAG6++WbAv75mJecFgC1btgDY99RLL71E3bp149omnZpXSimllFJOGJkOzkGht5N65plnAH9aMFLx4sXt3ZaUSfj555/t3fjo0aOBYCoa/KgowCeffAJQkLuT0GyvJRHOM888EwiiuyNHjrTR31huu+02AB588EHAv3vv1atXYZsRmv7IjUTPJZrueZ69Qytfvnw8f5TT/li3bh0ATZs25ffff/cbFCPyIFMjMnWUW3TC8zz79SpVqgD+lEq9evXy0yTnW3xOmDABgM8//7zQP1BmV55//nn7mETDCiF07xk5Z48YMQKA/v37R6X15PR8WfgIMGjQoKiv1a1bl7feegvApn3kIDT9IecCiWZG/n65kQWjku7Tv3//bLMIBRCa/pBjXM4TZ5xxBgArVqwodGMkjeGCCy7I77eEpj9y0qtXL0aNGpXn82rVqgX41yO5DhdCaPpDZleffvppAD799NNsz5H3VKVKldi1axcAGzZsiHpOnz597OycREsrVqyY32boFp9KKaWUUio8EpIjunfvXlsyJKs77rjDRkJFnTp1eOKJJ4CgjMiNN94IwPr1620OgyShp2K+Rrly5YDg95IIVW7R0MjvE9OmTStKRFSFiCSLy10lBItH7rnnHvuYRDY3btxon3/ZZZcBsGrVqmyvW7lyZSCIZuQzGhoK8+bNA2DMmDH2sdyifZHPyfp1+f/hhx8e72Y6IQsKZNZIPkaS3K0OHTrYhZEnn3xy1HNWrFhhI6Ji1apV/Pzzz0CeEdHQKegCEsnJl/zqdPHtt98C0Lx582xfk9z6yGtngwYNgKBwu3zcsmWLzaMdPnw4AG3bti1I1CuU5P0jiz9zIuOTSy+9FEiPBUqvv/463bp1A3I/j77++uuAPw5bv349ECz4k/6bM2eOXTgrJSfHjBnD0UcfXej2JWQgumHDBru4RjRu3BjwF9vkRqYARo4cCWA7I1107ty5SN+f08o+lXoip4dk4Z5cRGQFMMC//vUvIKiT+Oabb8YcgAq5uUnFSgOyEGvw4MG20sZvv/0G5H4C3bhxo114IOSm77777ktEU5PK87xcB6CS8jNs2DCAjFicJulfsRZb5EYunkuXLo17m5JNBozLly+na9euMZ9z1FFH2cVKssArFkmHGTRokB2sff3114CfBiLHVqqQMcg111wDBIu3JHUnUqlSpez7SqowyKLqVCbT8d26dSOnNMxLLrkk5iI2qR9av359ABYuXAj4qS1ffvll1HM7dOiQ6zUpL6nf00oppZRSKiUlJCI6ffp0+/n+++8PYBcjycKLvLz00kuAvy+w1FgcP348ALfccgvFihWLV3NDSRKJp02bFvV4uk0nZTKZMp0/f75dzJbbgotYU9SlSpUC/JQX8N9nMoXy/vvvA/60WqqQyHDZsmXtDlv58f7779uIqEw/SnmSrOktqSSyRFOsSCj4OwVJneJMcuGFFxbq+yQyFrkgNtXI+eLqq68Ggjrdka677jrAX/B68MEH5/haUm9YFr/lNXWdCiZPnmxT2HIrzST9cuutt9qp63QwduxYIJgVirxmyBjsxRdfBGKnckSSKXcpd5b19cCvgy3pVHnNeseiEVGllFJKKeVEXCOisnNFZMFtSZ6XHKb8ku/r3r27vVOTqM+5555rd2BKJ7IYa8aMGTYyJgX+JcqTdaGXSl2yEGDDhg2MGzcOyF/h6EMOOcTexd5yyy1AUGx4+/bttrSG7LaTShHRwpIkewgWo+S1EDAVSN5V//79s31NCrhLVEzlT9ZZplQkayciI6Ey+ygzAXJ85BYNBewe65EzmUIWKB144IFFam+yvPnmmwBcfPHF+SrZJqW8qlWrltB2JZtEJyN3GatZsyYAr7zyCkC2jXRyIou2Bg4caF9HyjwtX74c8GcXJEpfGBoRVUoppZRSTsQ1Iir5TCtXrozbazZq1CjbY6NHj46KuqYi6aNPPvnE7is+c+ZMIHqfaCF3ty1btkxSC1Wy3HXXXQXKd2vSpIld0ZgbOa4ywZNPPmmjySeddJLj1sSPrPCOXPEqOV6SA1iYckvyepGvm8fmJilPylPJ7INo1qxZ8htTBDt37uScc86Jeqxx48Z25jC/s49yDZKoYKR27doBQRWGsPeRVE74z3/+A+S+gcXZZ5/Nc889BwSl8WKRKiWRlXuOOeYYINyzLX/++afNg44kMyf5jYQKiYZLOcD69evbSGhkpQZZed+nT58Ctzlhe80L2Z0gk/3222+0aNECCHbTybrvcU5kevX0009PYAuVS3Xr1o3b3r2LFy+2n6daPciiMMbYgWg67IstNWOlRFHk7yQl7gr79x08eHC2PmrdunW2eqPpRsqAyeKc9u3bA3Daaac5a1NhTJo0yQ4EZDp+0KBBBUp/mzFjhp1yjdxXXEgaXNgHoEKuo7FKMwmphzl27Fi7yFMWdMoufpFkgB45EJX+6NatG9dffz0Q1GgNi549e/LVV19FPdaxY8d87zyWVZkyZQA4//zz7WNy/EWSRbKFoVPzSimllFLKibhGRKV4aqQePXrE80ekpG3bthW62KtELtKhuG5+ZZ02TPcpw3iQaaS3336b6tWrA0E6RzqTqetImzdvBvzIAPhTkDJ1J++nAQMG2IhGGEk0JnLaVIqRR+66VRBXXHEFEL1Zgrj55ptt5CMdzZs3L9vOMg888AAQvohWXiKjUZKeITuy5eX2228H4Nlnn40ZCQWoXr06TZo0KVojk0wWKcUiizWl/NCrr75qF/PMnj27QD9HirovXLiQNm3aAP6GAWEg6YpSlgmChWpTp05NyM+MvDYXJV0yc0Y3SimllFIqVOIaEf3xxx/j+XJp48ADD7RJvWvXrgWCfJUaNWrY50nh/qefftpu5Sm5OkKSyNNZrFw/2aZRohjKJzlRZ599NuDfocoxJVuzpaItW7bY6IPk9kmyfKT33nsv22NPPPFEtsdatWoFBJEjKVkTVrEiGLJIqbCRy3nz5gFB/ikE/ZLKiyA3bNgAwBtvvAH40b6suYLLly9n9+7dQHBeee211wC/9Eyq5EJmdfjhh+f5nK1bt9ryZs8++yzgv79yMnny5JQp1ySkzFQsMlskJR83bNjArl27ktGspPr222+B6OtmXsXqC2P58uXceeed2X5WUSR8sZLyd3aRnaLy48orr8xW202Sqdu2bZtR0/RCKjIon9Ts7d69OwCbNm0C/BOD3OSkoi+++ALwp84//PBDIPaOUrmRwVXkgDRW9Y0wkynDyKmvkSNHFuq1ZHHTihUrsn1NpnYPOOCAQr22Kzt37uTuu+8G4PHHHwewA82cyHlTFvjI/uvDhg2zq9Dlhu7SSy+1C0plILNmzRog6M8wkIFlhw4d7GDsv//9LxBMRX/xxRf5Wkgii7eOO+64BLQ0sWLtlS5k0J3b4NsYY98DkrKQailhsvOkMYamTZsC2OoA8fTUU0/xww8/RD1WrVo1W7GgMDJvRKOUUkoppUIhYRFR2TO6Tp06cX/tdNxVKVLlypXttJHsmCN7Sb/66qt06dLFWdtUOMiOKpE7CoFfXkSiXKlI9rn+4IMP7LSjRLDk/5GlzAYPHgz4JVbkfRFr3+1UU9RSVDt27LD1/ORcEvlasktKZEmWVCCLzq688kobPZcUFDlXtm7dOtsi2Ro1ajB69GggiP5Kms/ChQttH8nHdevW8fvvvwNBVEkiPq4joocddpj9XNJXTj75ZLv7XmHL6MjuQlLaKBPIubJcuXI2HWHo0KFA7hHU5s2bU7Vq1YS3r7B69eoFFG1HrF9//RUIUnkGDRoE+DszZT0vlSpVKl+1rXOiEVGllFJKKeVEwiKiUtl/69athfp+2QXjwQcfzPY113ekeZE9V4sX97u3KHeYkrfz2WefAX4+k0ZEM5MswLjiiits5FA0btwY8COERbkzdU1+jz59+tg7cJldiWXUqFFAsNAv00k+42233RaztBX4m4ykWlm9jz/+GAgiWEuXLuWyyy4DgsimnHclbxqCHXDeeustmzcnpID/6tWrbWHzK6+8EoD+/fvbyOmAAQMA6Nu3b3x/qUK6/PLLbQ6xrD3IbaHwgQceaH9XKWH1/vvv89RTT0U9L91nGmORDWM8z8vXYmuJBHbv3j3U59mjjz66SN+/cOFCmzctm/DkpkOHDkX6eRoRVUoppZRSTsQ1IhpZ2FVWOUu+Rda9cfNyySWXAEFJAsDupRvmFZ4bN260Ky8vuugiAG688cYCvcbff/9t85myrraXu36V+mSV4zvvvJNrYeV//etfAHz++edAsEI+kpSuiddWoa7IbEdhZj1SLcpXUJK/2Llz52xfk3OMzCTlFA0FPyompaBShfzuS5cuBaBJkybUrFkTCKLoUpJn69at9veTQue5FWg/+OCD7XaXcu5+5plnQlvaqlixYna2QFb2f//993b2UXIbzzjjDMB/X0hRdzF8+HD7ufRVKr9/ZLMGmRHIr6yrv3NSsmRJAK655hqg4Nf0ZIhc5S958t988w3gl6v78ssvgSCqG3nNkevHrFmzop6T18+R8pIyziusuA5EZecPOSggqAGYX8OGDQOCiy5AgwYNgGCnlGLFihWpnYn07bff2iR6SRrfuHFjrm/yadOmAdH1EmWaIGvpmkcffTQxDVdJI7UvI4+J3EoUyUK1yOfIiVFuWFJ9AFpQcrGVfcMhvRZZnHTSSUB0ySUpRyVTZfK3X7x4ca7Hj3xNzq2yu04qyVpD9rvvvrMLl4Qs4hk+fLgdMOSX7K4kC3ZkOj6s6tWrBwSBit9++82mw0kZq1gLhaWWbOSCphNOOAGIrmmdauQGQoJhMgCLh+bNmzNz5kwgOD7CKHKB42OPPQYE6YGDBw+2NyryvFg7a+V3kWS8b150al4ppZRSSjkR14ioRCSaNGli71Yl9C37Ot98880ceuih2b73gw8+ALBFiuXurkGDBnZv5DBPyYsaNWrYXTqktMbQoUMZMmQIENxpxIpgxHqsdOnSgN9vQLYplnSzd+/etE8/kLvrWHed+SnXY4yhRYsWgF+qJhPJe2vVqlVuG5Ig1157LRCUs9qwYYOdbs867R55zER+LlPWF198MRCcQ1KRRChvuukmwD/upVyRLOiUVCh5PJNUrlw5X8+7//77AaJ2Furdu3dC2pRMtWrVAoL3y1tvvcUtt9wCBJt/5KZEiRIcc8wxUY/JDGz79u1DHQkVEqWU9Bzwdw0DfzOGgm4MImT2Ta45LVu2tJHQeO3epxFRpZRSSinlhMljG6tC7XH166+/ctpppwFky+OpX7++LbYqxo8fz//+9z8g+93Lk08+me35BRCfjVAD+eqPBQsWAEEB2JkzZ+a6RaXcoUiO008//WTvUs877zwgyBkrIif9URBr167Nltu0//7720UHclzFSdL7Y9u2bZx66qkAfPXVV8E35uNuNdZzZMGG5ERVqlSpoG2OFO/+gAQcIxAk1UtflixZ0kYKZXFXnDh9z8gigk6dOuX+ovuOjfLlywN+rtzEiRMB4r0wyUl/yAyZbLNZq1Ytu9GBY6E/p0KQVywzKCtXrrR5ppI3GqdyRKHpD8mtl9Juck0tU6aMXfgsSpUqZRdIx1nS+kO2ex06dKh9z8sivG+++cZuFy7RcFn0Wrx4cXsdkcVv++23n+0vWaNz5plnxqP9MfsjIQNRCPa5lf18sw5Ic3LEEUcA2On4OnXqFGVv9VC8KebOnWsvCrJSul27doA/0JTf79xzzwVg+fLlNgweZ6Hoj9xs27bN1reTY+Duu++2K1jjLOn9sWjRomxTQJDzQPScc86xg295zmOPPZZttef69euBIifTp9xAtE2bNoC/l3xkhY04cvqekUVZEydOzHWlrhwbsgtQAldAh/4ckmQp0R8yJS+rnCEYgMqOVHGSEv2RRKHrj+XLlwNBGkP58uWjFpgnWMz+0Kl5pZRSSinlRMIiokKSZWXf0tGjRzN37lwguj7b5ZdfDgQ7YUjZgSIK3d2IY9of0ZLeH+vWrbOLRl555RX7eJkyZQC46667gGB3mMqVK2d7L/zxxx+2RMv3338PBNPR5cqVK0r7UzYi2r17d8aOHZuIH6XvmWjaH9FC3x9r1661KSxSDqx9+/Y23SnO5RBD3x9Jpv0RTSOiSimllFIqPBK217z9AfuiOVJe4b777kv0j1QqtGrWrGl3vZCPBRVZxiwVyookgmwKIIq617FS6Wr16tVRGyMAtGrVKtQbw6jMohFRpZRSSinlRMIjokopFW+yeUbTpk2BoOKEUira8ccfb8vyKBVGCV+s5JgmCkfT/oim/REtZRYrJZEeI9G0P6Jpf0TT/oim/RFNFysppZRSSqnwyCsiqpRSSimlVEJoRFQppZRSSjmhA1GllFJKKeWEDkSVUkoppZQTOhBVSimllFJO6EBUKaWUUko5oQNRpZRSSinlhA5ElVJKKaWUEzoQVUoppZRSTuhAVCmllFJKOZH0gagx5npjzAJjzG5jzLhk//ywMsZ0NcYsMcbsMMb8zxjT0nWbXDDGbM/yb68x5nHX7XJJ3zPRjDENjTEfGWP+MMasNMZ0ct0ml/Q9E5ueUwPGmFnGmF0Rx8gy121ySfsjmjGmrjHmbWPM78aYX4wxTxhjiifr57uIiK4DBgNjHfzsUDLGtAVGAD2A8sDJwA9OG+WI53nl5B9QHdgJvOK4Wa7pe2affSfH14EZQGXgamCiMeYIpw1zSN8z2ek5NabrI46VI103JgS0PwJPARuAg4BmQCugV7J+eNIHop7nTfU8bzqwOdk/O8TuBe7zPO8zz/P+8Txvred5a103KgTOx39zzHXdEJf0PROlAVATGOl53l7P8z4CPgEuddus0ND3jE/PqUrlXz1giud5uzzP+wWYCTRO1g/XHFHHjDHFgGOBqvumGdfsC4uXdt22EOgOvOB5nue6ISo0TA6PNUl2Q0Iq498zek7N0TBjzCZjzCfGmNauGxMC2h+BR4GuxpgyxphawBn4g9Gk0IGoe9WBEviRjJb4YfHmwACHbXLOGFMHf3pgvOu2qFBZih/xu9UYU8IYczr+cVLGbbPc0/eMpefU7G4HDgVqAc8AbxpjDnPbJKe0P6LNxo+AbgXWAAuA6cn64ToQdW/nvo+Pe5633vO8TcDDwJkO2xQG3YB5nuf96LohKjw8z/sbOBc4C/gF6AtMwT95Zjp9z/j0nJqF53mfe563zfO83Z7njcdPZ9H+0P7AGLMf8C4wFSgLVAEq4edYJ4UORB3zPO93/Itoxk6l5aAbGtlRMXie943nea08zzvQ87x2+JGNL1y3KwT0PYOeU/PJI3aaS6bK5P6oDBwMPLFvYL4ZeJ4kDsxdlG8qbowpBRQDihljSiWzTEBIPQ/0NsZUM8ZUAvrgrwrOSMaYE/GnTDJ65a/Q90w0Y8xR+/qgjDHmFvyVnuMcN8spfc9ko+fUfYwxFY0x7eS8YYy5GL+KwLuu2+aC9ke0fTMGPwLX7uuPivi55ouS1QYXEdEB+FMndwCX7Ps8k3N3AAYB84HlwBLga2CI0xa51R2Y6nneNtcNCQl9z0S7FFiPnyvaBmjred5ut01yTt8z0fScGiiBX/5tI7AJ6A2c63leptbO1P7I7jygPX6frAT2ADcl64ebDF5cqZRSSimlHNIcUaWUUkop5YQORJVSSimllBM6EFVKKaWUUk7oQFQppZRSSjmRVwmYVF/JFO+6YNof0bQ/oml/ZKd9Ek37I5r2RzTtj2jaH9HSsj80IqqUUkoppZzQgahSSimllHJCB6IhtHjxYipXrkzlypXp1asXvXr1wvM8tOarUkoppdKJDkSVUkoppZQTee2slOohuJRKFN65cycA1113Hc8//3zU1/766y8ASpQoUZQfkVL9kQTaH9F0sVJ2eoxES6n++PzzzwGYMGECc+bMAWDXrl0AnH766fZju3btAChZsmRBf0RK9UcSaH9E0/6IpouVlFJKKaVUeCQ9Irp9+3aGDh0KwKWXXgpAw4YN4/1jRErdjcybNw+Ali1b2sdq1KgBwOrVqwEoXjyvilu5Sqn+SIKU7I9XXnmF//znPwBMmTIFgPPPPz8eL60R0exS8hhJoJTojwULFgBw9tlnA7Bx40abY29M9l/hsssuA+C5554r6I9Kif5IIu2PaNof0TQiqpRSSimlwqNI4bXC+PLLL3nooYcAbGQ0023fvh2Axx57LNvXLrzwQqDIkVCVRgYNGhQzqqOU8nNAzzvvPMCPhAL83//9HxdddBEAXbt2BbB5+K+++irjxo0DghzRp556KplNViqjORndyMKb8ePHA9C9e3cXzQiNmTNnAv6Uq6hXrx4A1157rZM2JdKzzz5rf2f5/U477bRcv2fNmjUAfPjhh0BmHjOTJk0CYMWKFY5bklxPPPEEAL179wagQYMGHHjggUCQzpJJPv30UwD+/e9/A9CiRQtef/11AGrWrOmsXa7t2LED8KfZ165dC0DFihUBGDJkCKeeemrU82+77TYAevToQYcOHQB45513ANiyZYv9XuVbsmRJ1P8TmFIXF9u2bQOCgNehhx4KwLfffmuf89577wFQqlQpFi1alONr9ezZE4BHH30UKNSittD68ssv7edDhgwB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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "n_rows = 4\n", "n_cols = 10\n", "plt.figure(figsize=(n_cols * 1.2, n_rows * 1.2))\n", "for row in range(n_rows):\n", " for col in range(n_cols):\n", " index = n_cols * row + col\n", " plt.subplot(n_rows, n_cols, index + 1)\n", " plt.imshow(X_train[index], cmap=\"binary\", interpolation=\"nearest\")\n", " plt.axis('off')\n", " plt.title(y_train[index], fontsize=12)\n", "plt.subplots_adjust(wspace=0.2, hspace=0.5)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Hãy xây dựng một mạng dày đặc đơn giản và tìm tốc độ học tối ưu. Ta sẽ cần một callback để tăng tốc độ học sau mỗi vòng lặp. Nó cũng sẽ ghi lại tốc độ học và mất mát trong mỗi vòng lặp:" ] }, { "cell_type": "code", "execution_count": 116, "metadata": {}, "outputs": [], "source": [ "K = keras.backend\n", "\n", "class ExponentialLearningRate(keras.callbacks.Callback):\n", " def __init__(self, factor):\n", " self.factor = factor\n", " self.rates = []\n", " self.losses = []\n", " def on_batch_end(self, batch, logs):\n", " self.rates.append(K.get_value(self.model.optimizer.learning_rate))\n", " self.losses.append(logs[\"loss\"])\n", " K.set_value(self.model.optimizer.learning_rate, self.model.optimizer.learning_rate * self.factor)" ] }, { "cell_type": "code", "execution_count": 117, "metadata": {}, "outputs": [], "source": [ "keras.backend.clear_session()\n", "np.random.seed(42)\n", "tf.random.set_seed(42)" ] }, { "cell_type": "code", "execution_count": 118, "metadata": {}, "outputs": [], "source": [ "model = keras.models.Sequential([\n", " keras.layers.Flatten(input_shape=[28, 28]),\n", " keras.layers.Dense(300, activation=\"relu\"),\n", " keras.layers.Dense(100, activation=\"relu\"),\n", " keras.layers.Dense(10, activation=\"softmax\")\n", "])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Ta sẽ bắt đầu với tốc độ học nhỏ là 1e-3 và tăng giá trị này lên 0,5% sau mỗi vòng lặp:" ] }, { "cell_type": "code", "execution_count": 119, "metadata": {}, "outputs": [], "source": [ "model.compile(loss=\"sparse_categorical_crossentropy\",\n", " optimizer=keras.optimizers.SGD(learning_rate=1e-3),\n", " metrics=[\"accuracy\"])\n", "expon_lr = ExponentialLearningRate(factor=1.005)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Bây giờ hãy huấn luyện mô hình với chỉ 1 epoch:" ] }, { "cell_type": "code", "execution_count": 120, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1719/1719 [==============================] - 2s 1ms/step - loss: 4.6604 - accuracy: 0.4887 - val_loss: 2.3911 - val_accuracy: 0.1126\n" ] } ], "source": [ "history = model.fit(X_train, y_train, epochs=1,\n", " validation_data=(X_valid, y_valid),\n", " callbacks=[expon_lr])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Ta giờ đây có thể biểu diễn mất mát như là một hàm của tốc độ học:" ] }, { "cell_type": "code", "execution_count": 121, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0, 0.5, 'Loss')" ] }, "execution_count": 121, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.plot(expon_lr.rates, expon_lr.losses)\n", "plt.gca().set_xscale('log')\n", "plt.hlines(min(expon_lr.losses), min(expon_lr.rates), max(expon_lr.rates))\n", "plt.axis([min(expon_lr.rates), max(expon_lr.rates), 0, expon_lr.losses[0]])\n", "plt.grid()\n", "plt.xlabel(\"Tốc độ học\")\n", "plt.ylabel(\"Mất mát\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Mất mát bắt đầu tăng trở lại một cách dữ dội khi tốc độ học vượt quá 6e-1, vì vậy hãy thử sử dụng một nửa giá trị đó, ở mức 3e-1:" ] }, { "cell_type": "code", "execution_count": 122, "metadata": {}, "outputs": [], "source": [ "keras.backend.clear_session()\n", "np.random.seed(42)\n", "tf.random.set_seed(42)" ] }, { "cell_type": "code", "execution_count": 123, "metadata": {}, "outputs": [], "source": [ "model = keras.models.Sequential([\n", " keras.layers.Flatten(input_shape=[28, 28]),\n", " keras.layers.Dense(300, activation=\"relu\"),\n", " keras.layers.Dense(100, activation=\"relu\"),\n", " keras.layers.Dense(10, activation=\"softmax\")\n", "])" ] }, { "cell_type": "code", "execution_count": 124, "metadata": {}, "outputs": [], "source": [ "model.compile(loss=\"sparse_categorical_crossentropy\",\n", " optimizer=keras.optimizers.SGD(learning_rate=3e-1),\n", " metrics=[\"accuracy\"])" ] }, { "cell_type": "code", "execution_count": 125, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'./my_mnist_logs/run_001'" ] }, "execution_count": 125, "metadata": {}, "output_type": "execute_result" } ], "source": [ "run_index = 1 # increment this at every run\n", "run_logdir = os.path.join(os.curdir, \"my_mnist_logs\", \"run_{:03d}\".format(run_index))\n", "run_logdir" ] }, { "cell_type": "code", "execution_count": 126, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/100\n", "1719/1719 [==============================] - 3s 2ms/step - loss: 0.4195 - accuracy: 0.8677 - val_loss: 0.0995 - val_accuracy: 0.9724\n", "Epoch 2/100\n", "1719/1719 [==============================] - 2s 882us/step - loss: 0.0941 - accuracy: 0.9698 - val_loss: 0.0913 - val_accuracy: 0.9746\n", "Epoch 3/100\n", "1719/1719 [==============================] - 1s 845us/step - loss: 0.0650 - accuracy: 0.9792 - val_loss: 0.0785 - val_accuracy: 0.9772\n", "Epoch 4/100\n", "1719/1719 [==============================] - 2s 932us/step - loss: 0.0438 - accuracy: 0.9855 - val_loss: 0.0793 - val_accuracy: 0.9784\n", "Epoch 5/100\n", "1719/1719 [==============================] - 1s 832us/step - loss: 0.0348 - accuracy: 0.9888 - val_loss: 0.0724 - val_accuracy: 0.9812\n", "Epoch 6/100\n", "1719/1719 [==============================] - 1s 835us/step - loss: 0.0289 - accuracy: 0.9905 - val_loss: 0.0814 - val_accuracy: 0.9792\n", "Epoch 7/100\n", "1719/1719 [==============================] - 1s 868us/step - loss: 0.0230 - accuracy: 0.9926 - val_loss: 0.0794 - val_accuracy: 0.9808\n", "Epoch 8/100\n", "1719/1719 [==============================] - 1s 847us/step - loss: 0.0180 - accuracy: 0.9943 - val_loss: 0.0718 - val_accuracy: 0.9826\n", "Epoch 9/100\n", "1719/1719 [==============================] - 1s 848us/step - loss: 0.0158 - accuracy: 0.9949 - val_loss: 0.0874 - val_accuracy: 0.9798\n", "Epoch 10/100\n", "1719/1719 [==============================] - 1s 844us/step - loss: 0.0155 - accuracy: 0.9944 - val_loss: 0.0782 - val_accuracy: 0.9824\n", "Epoch 11/100\n", "1719/1719 [==============================] - 1s 834us/step - loss: 0.0089 - accuracy: 0.9971 - val_loss: 0.0902 - val_accuracy: 0.9832\n", "Epoch 12/100\n", "1719/1719 [==============================] - 1s 844us/step - loss: 0.0064 - accuracy: 0.9979 - val_loss: 0.0832 - val_accuracy: 0.9832\n", "Epoch 13/100\n", "1719/1719 [==============================] - 1s 859us/step - loss: 0.0059 - accuracy: 0.9981 - val_loss: 0.0888 - val_accuracy: 0.9814\n", "Epoch 14/100\n", "1719/1719 [==============================] - 2s 919us/step - loss: 0.0110 - accuracy: 0.9963 - val_loss: 0.1080 - val_accuracy: 0.9792\n", "Epoch 15/100\n", "1719/1719 [==============================] - 2s 921us/step - loss: 0.0075 - accuracy: 0.9973 - val_loss: 0.0828 - val_accuracy: 0.9840\n", "Epoch 16/100\n", "1719/1719 [==============================] - 2s 945us/step - loss: 0.0039 - accuracy: 0.9991 - val_loss: 0.0869 - val_accuracy: 0.9848\n", "Epoch 17/100\n", "1719/1719 [==============================] - 2s 962us/step - loss: 0.0064 - accuracy: 0.9982 - val_loss: 0.0997 - val_accuracy: 0.9816\n", "Epoch 18/100\n", "1719/1719 [==============================] - 2s 976us/step - loss: 0.0071 - accuracy: 0.9979 - val_loss: 0.1001 - val_accuracy: 0.9840\n", "Epoch 19/100\n", "1719/1719 [==============================] - 2s 1ms/step - loss: 0.0086 - accuracy: 0.9972 - val_loss: 0.1239 - val_accuracy: 0.9796\n", "Epoch 20/100\n", "1719/1719 [==============================] - 2s 1ms/step - loss: 0.0095 - accuracy: 0.9973 - val_loss: 0.1107 - val_accuracy: 0.9808\n", "Epoch 21/100\n", "1719/1719 [==============================] - 2s 1ms/step - loss: 0.0055 - accuracy: 0.9981 - val_loss: 0.0891 - val_accuracy: 0.9840\n", "Epoch 22/100\n", "1719/1719 [==============================] - 2s 967us/step - loss: 0.0041 - accuracy: 0.9988 - val_loss: 0.0893 - val_accuracy: 0.9844\n", "Epoch 23/100\n", "1719/1719 [==============================] - 2s 963us/step - loss: 6.1009e-04 - accuracy: 0.9999 - val_loss: 0.0899 - val_accuracy: 0.9848\n", "Epoch 24/100\n", "1719/1719 [==============================] - 2s 972us/step - loss: 8.4212e-05 - accuracy: 1.0000 - val_loss: 0.0894 - val_accuracy: 0.9862\n", "Epoch 25/100\n", "1719/1719 [==============================] - 2s 1ms/step - loss: 6.0306e-05 - accuracy: 1.0000 - val_loss: 0.0899 - val_accuracy: 0.9858\n", "Epoch 26/100\n", "1719/1719 [==============================] - 2s 1ms/step - loss: 4.9564e-05 - accuracy: 1.0000 - val_loss: 0.0903 - val_accuracy: 0.9860\n", "Epoch 27/100\n", "1719/1719 [==============================] - 2s 1ms/step - loss: 4.3609e-05 - accuracy: 1.0000 - val_loss: 0.0906 - val_accuracy: 0.9862\n", "Epoch 28/100\n", "1719/1719 [==============================] - 2s 973us/step - loss: 4.2216e-05 - accuracy: 1.0000 - val_loss: 0.0911 - val_accuracy: 0.9862\n" ] } ], "source": [ "early_stopping_cb = keras.callbacks.EarlyStopping(patience=20)\n", "checkpoint_cb = keras.callbacks.ModelCheckpoint(\"my_mnist_model.h5\", save_best_only=True)\n", "tensorboard_cb = keras.callbacks.TensorBoard(run_logdir)\n", "\n", "history = model.fit(X_train, y_train, epochs=100,\n", " validation_data=(X_valid, y_valid),\n", " callbacks=[checkpoint_cb, early_stopping_cb, tensorboard_cb])" ] }, { "cell_type": "code", "execution_count": 127, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "313/313 [==============================] - 0s 701us/step - loss: 0.0804 - accuracy: 0.9806\n" ] }, { "data": { "text/plain": [ "[0.08043695986270905, 0.9805999994277954]" ] }, "execution_count": 127, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model = keras.models.load_model(\"my_mnist_model.h5\") # rollback to best model\n", "model.evaluate(X_test, y_test)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Ta đã đạt được độ chính xác hơn 98%. Cuối cùng, hãy xem các đồ thị đường cong học bằng TensorBoard:" ] }, { "cell_type": "code", "execution_count": 128, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " \n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%tensorboard --logdir=./my_mnist_logs --port=6006" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.9.10" }, "nav_menu": { "height": "264px", "width": "369px" }, "toc": { "navigate_menu": true, "number_sections": true, "sideBar": true, "threshold": 6, "toc_cell": false, "toc_section_display": "block", "toc_window_display": false }, "vscode": { "interpreter": { "hash": "aee8b7b246df8f9039afb4144a1f6fd8d2ca17a180786b69acc140d282b71a49" } } }, "nbformat": 4, "nbformat_minor": 4 }