{
  "cells": [
    {
      "cell_type": "code",
      "execution_count": 1,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 132,
          "resources": {
            "http://localhost:8080/nbextensions/google.colab/files.js": {
              "data": "Ly8gQ29weXJpZ2h0IDIwMTcgR29vZ2xlIExMQwovLwovLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgovLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLy8KLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLy8KLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQovLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAovLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAovLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCi8qKgogKiBAZmlsZW92ZXJ2aWV3IEhlbHBlcnMgZm9yIGdvb2dsZS5jb2xhYiBQeXRob24gbW9kdWxlLgogKi8KKGZ1bmN0aW9uKHNjb3BlKSB7CmZ1bmN0aW9uIHNwYW4odGV4dCwgc3R5bGVBdHRyaWJ1dGVzID0ge30pIHsKICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOwogIGVsZW1lbnQudGV4dENvbnRlbnQgPSB0ZXh0OwogIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHN0eWxlQXR0cmlidXRlcykpIHsKICAgIGVsZW1lbnQuc3R5bGVba2V5XSA9IHN0eWxlQXR0cmlidXRlc1trZXldOwogIH0KICByZXR1cm4gZWxlbWVudDsKfQoKLy8gTWF4IG51bWJlciBvZiBieXRlcyB3aGljaCB3aWxsIGJlIHVwbG9hZGVkIGF0IGEgdGltZS4KY29uc3QgTUFYX1BBWUxPQURfU0laRSA9IDEwMCAqIDEwMjQ7CgpmdW5jdGlvbiBfdXBsb2FkRmlsZXMoaW5wdXRJZCwgb3V0cHV0SWQpIHsKICBjb25zdCBzdGVwcyA9IHVwbG9hZEZpbGVzU3RlcChpbnB1dElkLCBvdXRwdXRJZCk7CiAgY29uc3Qgb3V0cHV0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG91dHB1dElkKTsKICAvLyBDYWNoZSBzdGVwcyBvbiB0aGUgb3V0cHV0RWxlbWVudCB0byBtYWtlIGl0IGF2YWlsYWJsZSBmb3IgdGhlIG5leHQgY2FsbAogIC8vIHRvIHVwbG9hZEZpbGVzQ29udGludWUgZnJvbSBQeXRob24uCiAgb3V0cHV0RWxlbWVudC5zdGVwcyA9IHN0ZXBzOwoKICByZXR1cm4gX3VwbG9hZEZpbGVzQ29udGludWUob3V0cHV0SWQpOwp9CgovLyBUaGlzIGlzIHJvdWdobHkgYW4gYXN5bmMgZ2VuZXJhdG9yIChub3Qgc3VwcG9ydGVkIGluIHRoZSBicm93c2VyIHlldCksCi8vIHdoZXJlIHRoZXJlIGFyZSBtdWx0aXBsZSBhc3luY2hyb25vdXMgc3RlcHMgYW5kIHRoZSBQeXRob24gc2lkZSBpcyBnb2luZwovLyB0byBwb2xsIGZvciBjb21wbGV0aW9uIG9mIGVhY2ggc3RlcC4KLy8gVGhpcyB1c2VzIGEgUHJvbWlzZSB0byBibG9jayB0aGUgcHl0aG9uIHNpZGUgb24gY29tcGxldGlvbiBvZiBlYWNoIHN0ZXAsCi8vIHRoZW4gcGFzc2VzIHRoZSByZXN1bHQgb2YgdGhlIHByZXZpb3VzIHN0ZXAgYXMgdGhlIGlucHV0IHRvIHRoZSBuZXh0IHN0ZXAuCmZ1bmN0aW9uIF91cGxvYWRGaWxlc0NvbnRpbnVlKG91dHB1dElkKSB7CiAgY29uc3Qgb3V0cHV0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG91dHB1dElkKTsKICBjb25zdCBzdGVwcyA9IG91dHB1dEVsZW1lbnQuc3RlcHM7CgogIGNvbnN0IG5leHQgPSBzdGVwcy5uZXh0KG91dHB1dEVsZW1lbnQubGFzdFByb21pc2VWYWx1ZSk7CiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXh0LnZhbHVlLnByb21pc2UpLnRoZW4oKHZhbHVlKSA9PiB7CiAgICAvLyBDYWNoZSB0aGUgbGFzdCBwcm9taXNlIHZhbHVlIHRvIG1ha2UgaXQgYXZhaWxhYmxlIHRvIHRoZSBuZXh0CiAgICAvLyBzdGVwIG9mIHRoZSBnZW5lcmF0b3IuCiAgICBvdXRwdXRFbGVtZW50Lmxhc3RQcm9taXNlVmFsdWUgPSB2YWx1ZTsKICAgIHJldHVybiBuZXh0LnZhbHVlLnJlc3BvbnNlOwogIH0pOwp9CgovKioKICogR2VuZXJhdG9yIGZ1bmN0aW9uIHdoaWNoIGlzIGNhbGxlZCBiZXR3ZWVuIGVhY2ggYXN5bmMgc3RlcCBvZiB0aGUgdXBsb2FkCiAqIHByb2Nlc3MuCiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dElkIEVsZW1lbnQgSUQgb2YgdGhlIGlucHV0IGZpbGUgcGlja2VyIGVsZW1lbnQuCiAqIEBwYXJhbSB7c3RyaW5nfSBvdXRwdXRJZCBFbGVtZW50IElEIG9mIHRoZSBvdXRwdXQgZGlzcGxheS4KICogQHJldHVybiB7IUl0ZXJhYmxlPCFPYmplY3Q+fSBJdGVyYWJsZSBvZiBuZXh0IHN0ZXBzLgogKi8KZnVuY3Rpb24qIHVwbG9hZEZpbGVzU3RlcChpbnB1dElkLCBvdXRwdXRJZCkgewogIGNvbnN0IGlucHV0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlucHV0SWQpOwogIGlucHV0RWxlbWVudC5kaXNhYmxlZCA9IGZhbHNlOwoKICBjb25zdCBvdXRwdXRFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQob3V0cHV0SWQpOwogIG91dHB1dEVsZW1lbnQuaW5uZXJIVE1MID0gJyc7CgogIGNvbnN0IHBpY2tlZFByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gewogICAgaW5wdXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIChlKSA9PiB7CiAgICAgIHJlc29sdmUoZS50YXJnZXQuZmlsZXMpOwogICAgfSk7CiAgfSk7CgogIGNvbnN0IGNhbmNlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOwogIGlucHV0RWxlbWVudC5wYXJlbnRFbGVtZW50LmFwcGVuZENoaWxkKGNhbmNlbCk7CiAgY2FuY2VsLnRleHRDb250ZW50ID0gJ0NhbmNlbCB1cGxvYWQnOwogIGNvbnN0IGNhbmNlbFByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gewogICAgY2FuY2VsLm9uY2xpY2sgPSAoKSA9PiB7CiAgICAgIHJlc29sdmUobnVsbCk7CiAgICB9OwogIH0pOwoKICAvLyBXYWl0IGZvciB0aGUgdXNlciB0byBwaWNrIHRoZSBmaWxlcy4KICBjb25zdCBmaWxlcyA9IHlpZWxkIHsKICAgIHByb21pc2U6IFByb21pc2UucmFjZShbcGlja2VkUHJvbWlzZSwgY2FuY2VsUHJvbWlzZV0pLAogICAgcmVzcG9uc2U6IHsKICAgICAgYWN0aW9uOiAnc3RhcnRpbmcnLAogICAgfQogIH07CgogIGNhbmNlbC5yZW1vdmUoKTsKCiAgLy8gRGlzYWJsZSB0aGUgaW5wdXQgZWxlbWVudCBzaW5jZSBmdXJ0aGVyIHBpY2tzIGFyZSBub3QgYWxsb3dlZC4KICBpbnB1dEVsZW1lbnQuZGlzYWJsZWQgPSB0cnVlOwoKICBpZiAoIWZpbGVzKSB7CiAgICByZXR1cm4gewogICAgICByZXNwb25zZTogewogICAgICAgIGFjdGlvbjogJ2NvbXBsZXRlJywKICAgICAgfQogICAgfTsKICB9CgogIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykgewogICAgY29uc3QgbGkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaScpOwogICAgbGkuYXBwZW5kKHNwYW4oZmlsZS5uYW1lLCB7Zm9udFdlaWdodDogJ2JvbGQnfSkpOwogICAgbGkuYXBwZW5kKHNwYW4oCiAgICAgICAgYCgke2ZpbGUudHlwZSB8fCAnbi9hJ30pIC0gJHtmaWxlLnNpemV9IGJ5dGVzLCBgICsKICAgICAgICBgbGFzdCBtb2RpZmllZDogJHsKICAgICAgICAgICAgZmlsZS5sYXN0TW9kaWZpZWREYXRlID8gZmlsZS5sYXN0TW9kaWZpZWREYXRlLnRvTG9jYWxlRGF0ZVN0cmluZygpIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ24vYSd9IC0gYCkpOwogICAgY29uc3QgcGVyY2VudCA9IHNwYW4oJzAlIGRvbmUnKTsKICAgIGxpLmFwcGVuZENoaWxkKHBlcmNlbnQpOwoKICAgIG91dHB1dEVsZW1lbnQuYXBwZW5kQ2hpbGQobGkpOwoKICAgIGNvbnN0IGZpbGVEYXRhUHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CiAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7CiAgICAgIHJlYWRlci5vbmxvYWQgPSAoZSkgPT4gewogICAgICAgIHJlc29sdmUoZS50YXJnZXQucmVzdWx0KTsKICAgICAgfTsKICAgICAgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKGZpbGUpOwogICAgfSk7CiAgICAvLyBXYWl0IGZvciB0aGUgZGF0YSB0byBiZSByZWFkeS4KICAgIGxldCBmaWxlRGF0YSA9IHlpZWxkIHsKICAgICAgcHJvbWlzZTogZmlsZURhdGFQcm9taXNlLAogICAgICByZXNwb25zZTogewogICAgICAgIGFjdGlvbjogJ2NvbnRpbnVlJywKICAgICAgfQogICAgfTsKCiAgICAvLyBVc2UgYSBjaHVua2VkIHNlbmRpbmcgdG8gYXZvaWQgbWVzc2FnZSBzaXplIGxpbWl0cy4gU2VlIGIvNjIxMTU2NjAuCiAgICBsZXQgcG9zaXRpb24gPSAwOwogICAgZG8gewogICAgICBjb25zdCBsZW5ndGggPSBNYXRoLm1pbihmaWxlRGF0YS5ieXRlTGVuZ3RoIC0gcG9zaXRpb24sIE1BWF9QQVlMT0FEX1NJWkUpOwogICAgICBjb25zdCBjaHVuayA9IG5ldyBVaW50OEFycmF5KGZpbGVEYXRhLCBwb3NpdGlvbiwgbGVuZ3RoKTsKICAgICAgcG9zaXRpb24gKz0gbGVuZ3RoOwoKICAgICAgY29uc3QgYmFzZTY0ID0gYnRvYShTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIGNodW5rKSk7CiAgICAgIHlpZWxkIHsKICAgICAgICByZXNwb25zZTogewogICAgICAgICAgYWN0aW9uOiAnYXBwZW5kJywKICAgICAgICAgIGZpbGU6IGZpbGUubmFtZSwKICAgICAgICAgIGRhdGE6IGJhc2U2NCwKICAgICAgICB9LAogICAgICB9OwoKICAgICAgbGV0IHBlcmNlbnREb25lID0gZmlsZURhdGEuYnl0ZUxlbmd0aCA9PT0gMCA/CiAgICAgICAgICAxMDAgOgogICAgICAgICAgTWF0aC5yb3VuZCgocG9zaXRpb24gLyBmaWxlRGF0YS5ieXRlTGVuZ3RoKSAqIDEwMCk7CiAgICAgIHBlcmNlbnQudGV4dENvbnRlbnQgPSBgJHtwZXJjZW50RG9uZX0lIGRvbmVgOwoKICAgIH0gd2hpbGUgKHBvc2l0aW9uIDwgZmlsZURhdGEuYnl0ZUxlbmd0aCk7CiAgfQoKICAvLyBBbGwgZG9uZS4KICB5aWVsZCB7CiAgICByZXNwb25zZTogewogICAgICBhY3Rpb246ICdjb21wbGV0ZScsCiAgICB9CiAgfTsKfQoKc2NvcGUuZ29vZ2xlID0gc2NvcGUuZ29vZ2xlIHx8IHt9OwpzY29wZS5nb29nbGUuY29sYWIgPSBzY29wZS5nb29nbGUuY29sYWIgfHwge307CnNjb3BlLmdvb2dsZS5jb2xhYi5fZmlsZXMgPSB7CiAgX3VwbG9hZEZpbGVzLAogIF91cGxvYWRGaWxlc0NvbnRpbnVlLAp9Owp9KShzZWxmKTsK",
              "headers": [
                [
                  "content-type",
                  "application/javascript"
                ]
              ],
              "ok": true,
              "status": 200,
              "status_text": ""
            }
          }
        },
        "id": "viMfLI5CI8Uc",
        "outputId": "f16af994-92a1-429d-9e59-544aaaf4593c"
      },
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ],
            "text/html": [
              "\n",
              "     <input type=\"file\" id=\"files-f2d6aa5a-dc28-4f1e-a3bd-8c83bd4cd611\" name=\"files[]\" multiple disabled\n",
              "        style=\"border:none\" />\n",
              "     <output id=\"result-f2d6aa5a-dc28-4f1e-a3bd-8c83bd4cd611\">\n",
              "      Upload widget is only available when the cell has been executed in the\n",
              "      current browser session. Please rerun this cell to enable.\n",
              "      </output>\n",
              "      <script src=\"/nbextensions/google.colab/files.js\"></script> "
            ]
          },
          "metadata": {}
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Saving house.txt to house.txt\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ],
            "text/html": [
              "\n",
              "     <input type=\"file\" id=\"files-302b423c-334b-4b1f-bc4d-3650ef0a6efb\" name=\"files[]\" multiple disabled\n",
              "        style=\"border:none\" />\n",
              "     <output id=\"result-302b423c-334b-4b1f-bc4d-3650ef0a6efb\">\n",
              "      Upload widget is only available when the cell has been executed in the\n",
              "      current browser session. Please rerun this cell to enable.\n",
              "      </output>\n",
              "      <script src=\"/nbextensions/google.colab/files.js\"></script> "
            ]
          },
          "metadata": {}
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Saving keras_lite_convertor.py to keras_lite_convertor.py\n"
          ]
        }
      ],
      "source": [
        "# 匯入「房屋txt檔」和 「第三方函式庫」到 Colab\n",
        "from google.colab import files\n",
        "\n",
        "uploaded = files.upload()\t# 匯入房屋 (.txt 檔)\n",
        "uploaded = files.upload()\t# 匯入 keras_lite_convertor 第三方函式庫"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 2,
      "metadata": {
        "id": "29c2zv-hJ5G5"
      },
      "outputs": [],
      "source": [
        "# 讀取 house.txt 檔案, 並得出特徵和標籤\n",
        "import keras_lite_convertor as kc\n",
        "\n",
        "path_name = 'house.txt'\t\t\t\t\t\t\t\t# 檔案路徑\n",
        "Data_reader = kc.Data_reader(path_name, mode = 'regression')\t# 指定讀檔模式 (regression 適用於迴歸預測)\n",
        "data, label = Data_reader.read(random_seed = 12)\t\t\t# 將檔案讀到的 5 種資料分為「特徵」和「標籤」，並設定亂數種子為 12"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 3,
      "metadata": {
        "id": "2d-hmaW7Nfcb"
      },
      "outputs": [],
      "source": [
        "# 資料預處理\n",
        "\n",
        "# 取資料中的 90% 當作訓練集\n",
        "split_num = int(len(data) * 0.9) \n",
        "train_data = data[:split_num]\t\t# 訓練用資料 (689 * 0.9 = 620 筆)\n",
        "train_label = label[:split_num]\t# 訓練用標籤 (689 * 0.9 = 620 筆)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 4,
      "metadata": {
        "id": "5jKA_lrCNr-h"
      },
      "outputs": [],
      "source": [
        "# 正規化\n",
        "mean = train_data.mean()           \t# 訓練資料的平均數\n",
        "data -= mean                       # data 減掉平均值\n",
        "std = train_data.std()             \t# 訓練資料的標準差\n",
        "data /= std                        \t# data 除以平均值\n",
        "\n",
        "new_label = label/max(label)       \t# 將 label 範圍落在 0 ~ 1 (label 正規化)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 5,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "Ih7B_tMlQBWy",
        "outputId": "f228cd89-fcdb-4b71-a308-5a0715fa5599"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "(620, 4)\n",
            "(39, 4)\n",
            "(30, 4)\n"
          ]
        }
      ],
      "source": [
        "# 訓練集、驗證集、測試集的資料形狀\n",
        "\n",
        "# 訓練集\n",
        "train_data = data[:split_num]\t\t\t\t# 訓練用資料\n",
        "print(train_data.shape)    \n",
        "train_label = new_label[:split_num]\t\t\t# 訓練用標籤\n",
        "\n",
        "# 驗證集\n",
        "validation_data = data[split_num:-30]\t\t# 驗證用資料\n",
        "print(validation_data.shape)\n",
        "validation_label = new_label[split_num:-30]\t# 驗證用標籤\n",
        "\n",
        "# 測試集\n",
        "test_data = data[-30:]\t\t\t\t\t# 測試用資料，30筆\n",
        "print(test_data.shape)\n",
        "test_label = new_label[-30:]\t\t\t\t# 測試用標籤"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 6,
      "metadata": {
        "id": "PXdaIRr8WuzM"
      },
      "outputs": [],
      "source": [
        "# 建立神經網路架構\n",
        "from tensorflow.keras.models import Sequential\n",
        "from tensorflow.keras.layers import Dense\n",
        "\n",
        "model = Sequential()\t\t\t\t\t\t\t\t# 建構網路模型                            \n",
        "model.add(Dense(20, activation = 'relu', input_shape = (4,)))\t# 增加一層神經層，使用 ReLU 激活函數，輸入層有4個輸入特徵\n",
        "model.add(Dense(20, activation = 'relu'))\t\t\t\t\t# 增加一層神經層，使用 ReLU 激活函數\n",
        "model.add(Dense(1))\t\t\t\t\t\t\t\t# 增加輸出為 1 的輸出層"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 7,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "L0qDUnjlWzXa",
        "outputId": "0d5c12dd-3d7b-4499-ff01-9dc01c678638"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Epoch 1/200\n",
            "20/20 [==============================] - 1s 10ms/step - loss: 0.5913 - mae: 0.7186 - val_loss: 0.2998 - val_mae: 0.5127\n",
            "Epoch 2/200\n",
            "20/20 [==============================] - 0s 2ms/step - loss: 0.1448 - mae: 0.3368 - val_loss: 0.0633 - val_mae: 0.2105\n",
            "Epoch 3/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0235 - mae: 0.1151 - val_loss: 0.0140 - val_mae: 0.0905\n",
            "Epoch 4/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0099 - mae: 0.0770 - val_loss: 0.0081 - val_mae: 0.0716\n",
            "Epoch 5/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0074 - mae: 0.0662 - val_loss: 0.0068 - val_mae: 0.0621\n",
            "Epoch 6/200\n",
            "20/20 [==============================] - 0s 2ms/step - loss: 0.0067 - mae: 0.0630 - val_loss: 0.0062 - val_mae: 0.0579\n",
            "Epoch 7/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0064 - mae: 0.0618 - val_loss: 0.0057 - val_mae: 0.0550\n",
            "Epoch 8/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0062 - mae: 0.0605 - val_loss: 0.0055 - val_mae: 0.0533\n",
            "Epoch 9/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0061 - mae: 0.0595 - val_loss: 0.0052 - val_mae: 0.0523\n",
            "Epoch 10/200\n",
            "20/20 [==============================] - 0s 2ms/step - loss: 0.0060 - mae: 0.0588 - val_loss: 0.0051 - val_mae: 0.0517\n",
            "Epoch 11/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0060 - mae: 0.0588 - val_loss: 0.0049 - val_mae: 0.0508\n",
            "Epoch 12/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0058 - mae: 0.0577 - val_loss: 0.0048 - val_mae: 0.0500\n",
            "Epoch 13/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0056 - mae: 0.0568 - val_loss: 0.0045 - val_mae: 0.0476\n",
            "Epoch 14/200\n",
            "20/20 [==============================] - 0s 2ms/step - loss: 0.0055 - mae: 0.0555 - val_loss: 0.0043 - val_mae: 0.0471\n",
            "Epoch 15/200\n",
            "20/20 [==============================] - 0s 2ms/step - loss: 0.0053 - mae: 0.0546 - val_loss: 0.0042 - val_mae: 0.0465\n",
            "Epoch 16/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0053 - mae: 0.0543 - val_loss: 0.0041 - val_mae: 0.0458\n",
            "Epoch 17/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0052 - mae: 0.0537 - val_loss: 0.0040 - val_mae: 0.0462\n",
            "Epoch 18/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0051 - mae: 0.0533 - val_loss: 0.0040 - val_mae: 0.0458\n",
            "Epoch 19/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0051 - mae: 0.0527 - val_loss: 0.0039 - val_mae: 0.0451\n",
            "Epoch 20/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0050 - mae: 0.0523 - val_loss: 0.0038 - val_mae: 0.0452\n",
            "Epoch 21/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0049 - mae: 0.0515 - val_loss: 0.0038 - val_mae: 0.0446\n",
            "Epoch 22/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0049 - mae: 0.0513 - val_loss: 0.0037 - val_mae: 0.0448\n",
            "Epoch 23/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0048 - mae: 0.0508 - val_loss: 0.0037 - val_mae: 0.0440\n",
            "Epoch 24/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0048 - mae: 0.0506 - val_loss: 0.0036 - val_mae: 0.0439\n",
            "Epoch 25/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0047 - mae: 0.0501 - val_loss: 0.0035 - val_mae: 0.0436\n",
            "Epoch 26/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0047 - mae: 0.0500 - val_loss: 0.0034 - val_mae: 0.0429\n",
            "Epoch 27/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0046 - mae: 0.0498 - val_loss: 0.0035 - val_mae: 0.0429\n",
            "Epoch 28/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0046 - mae: 0.0496 - val_loss: 0.0033 - val_mae: 0.0427\n",
            "Epoch 29/200\n",
            "20/20 [==============================] - 0s 2ms/step - loss: 0.0045 - mae: 0.0490 - val_loss: 0.0033 - val_mae: 0.0416\n",
            "Epoch 30/200\n",
            "20/20 [==============================] - 0s 2ms/step - loss: 0.0045 - mae: 0.0485 - val_loss: 0.0032 - val_mae: 0.0416\n",
            "Epoch 31/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0045 - mae: 0.0487 - val_loss: 0.0032 - val_mae: 0.0412\n",
            "Epoch 32/200\n",
            "20/20 [==============================] - 0s 2ms/step - loss: 0.0044 - mae: 0.0478 - val_loss: 0.0032 - val_mae: 0.0426\n",
            "Epoch 33/200\n",
            "20/20 [==============================] - 0s 2ms/step - loss: 0.0044 - mae: 0.0480 - val_loss: 0.0031 - val_mae: 0.0403\n",
            "Epoch 34/200\n",
            "20/20 [==============================] - 0s 2ms/step - loss: 0.0044 - mae: 0.0480 - val_loss: 0.0032 - val_mae: 0.0410\n",
            "Epoch 35/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0044 - mae: 0.0478 - val_loss: 0.0030 - val_mae: 0.0403\n",
            "Epoch 36/200\n",
            "20/20 [==============================] - 0s 2ms/step - loss: 0.0043 - mae: 0.0475 - val_loss: 0.0031 - val_mae: 0.0422\n",
            "Epoch 37/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0043 - mae: 0.0473 - val_loss: 0.0031 - val_mae: 0.0398\n",
            "Epoch 38/200\n",
            "20/20 [==============================] - 0s 2ms/step - loss: 0.0042 - mae: 0.0468 - val_loss: 0.0030 - val_mae: 0.0418\n",
            "Epoch 39/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0042 - mae: 0.0467 - val_loss: 0.0029 - val_mae: 0.0396\n",
            "Epoch 40/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0041 - mae: 0.0460 - val_loss: 0.0029 - val_mae: 0.0397\n",
            "Epoch 41/200\n",
            "20/20 [==============================] - 0s 2ms/step - loss: 0.0041 - mae: 0.0461 - val_loss: 0.0028 - val_mae: 0.0394\n",
            "Epoch 42/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0041 - mae: 0.0458 - val_loss: 0.0028 - val_mae: 0.0391\n",
            "Epoch 43/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0040 - mae: 0.0453 - val_loss: 0.0027 - val_mae: 0.0383\n",
            "Epoch 44/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0040 - mae: 0.0452 - val_loss: 0.0027 - val_mae: 0.0393\n",
            "Epoch 45/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0040 - mae: 0.0453 - val_loss: 0.0027 - val_mae: 0.0396\n",
            "Epoch 46/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0039 - mae: 0.0454 - val_loss: 0.0027 - val_mae: 0.0376\n",
            "Epoch 47/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0039 - mae: 0.0447 - val_loss: 0.0027 - val_mae: 0.0398\n",
            "Epoch 48/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0039 - mae: 0.0446 - val_loss: 0.0026 - val_mae: 0.0377\n",
            "Epoch 49/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0039 - mae: 0.0455 - val_loss: 0.0028 - val_mae: 0.0373\n",
            "Epoch 50/200\n",
            "20/20 [==============================] - 0s 2ms/step - loss: 0.0040 - mae: 0.0447 - val_loss: 0.0026 - val_mae: 0.0399\n",
            "Epoch 51/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0039 - mae: 0.0449 - val_loss: 0.0026 - val_mae: 0.0373\n",
            "Epoch 52/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0039 - mae: 0.0444 - val_loss: 0.0025 - val_mae: 0.0371\n",
            "Epoch 53/200\n",
            "20/20 [==============================] - 0s 2ms/step - loss: 0.0039 - mae: 0.0448 - val_loss: 0.0026 - val_mae: 0.0373\n",
            "Epoch 54/200\n",
            "20/20 [==============================] - 0s 2ms/step - loss: 0.0038 - mae: 0.0446 - val_loss: 0.0026 - val_mae: 0.0367\n",
            "Epoch 55/200\n",
            "20/20 [==============================] - 0s 2ms/step - loss: 0.0038 - mae: 0.0448 - val_loss: 0.0026 - val_mae: 0.0371\n",
            "Epoch 56/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0038 - mae: 0.0442 - val_loss: 0.0026 - val_mae: 0.0396\n",
            "Epoch 57/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0038 - mae: 0.0444 - val_loss: 0.0025 - val_mae: 0.0372\n",
            "Epoch 58/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0038 - mae: 0.0442 - val_loss: 0.0025 - val_mae: 0.0382\n",
            "Epoch 59/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0038 - mae: 0.0443 - val_loss: 0.0025 - val_mae: 0.0371\n",
            "Epoch 60/200\n",
            "20/20 [==============================] - 0s 2ms/step - loss: 0.0037 - mae: 0.0441 - val_loss: 0.0026 - val_mae: 0.0370\n",
            "Epoch 61/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0037 - mae: 0.0436 - val_loss: 0.0025 - val_mae: 0.0383\n",
            "Epoch 62/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0037 - mae: 0.0439 - val_loss: 0.0025 - val_mae: 0.0369\n",
            "Epoch 63/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0037 - mae: 0.0439 - val_loss: 0.0024 - val_mae: 0.0368\n",
            "Epoch 64/200\n",
            "20/20 [==============================] - 0s 2ms/step - loss: 0.0037 - mae: 0.0442 - val_loss: 0.0024 - val_mae: 0.0371\n",
            "Epoch 65/200\n",
            "20/20 [==============================] - 0s 2ms/step - loss: 0.0037 - mae: 0.0436 - val_loss: 0.0025 - val_mae: 0.0380\n",
            "Epoch 66/200\n",
            "20/20 [==============================] - 0s 4ms/step - loss: 0.0037 - mae: 0.0440 - val_loss: 0.0025 - val_mae: 0.0362\n",
            "Epoch 67/200\n",
            "20/20 [==============================] - 0s 4ms/step - loss: 0.0037 - mae: 0.0435 - val_loss: 0.0024 - val_mae: 0.0370\n",
            "Epoch 68/200\n",
            "20/20 [==============================] - 0s 5ms/step - loss: 0.0037 - mae: 0.0440 - val_loss: 0.0026 - val_mae: 0.0373\n",
            "Epoch 69/200\n",
            "20/20 [==============================] - 0s 7ms/step - loss: 0.0037 - mae: 0.0439 - val_loss: 0.0025 - val_mae: 0.0362\n",
            "Epoch 70/200\n",
            "20/20 [==============================] - 0s 5ms/step - loss: 0.0037 - mae: 0.0439 - val_loss: 0.0025 - val_mae: 0.0373\n",
            "Epoch 71/200\n",
            "20/20 [==============================] - 0s 5ms/step - loss: 0.0037 - mae: 0.0439 - val_loss: 0.0025 - val_mae: 0.0369\n",
            "Epoch 72/200\n",
            "20/20 [==============================] - 0s 6ms/step - loss: 0.0037 - mae: 0.0436 - val_loss: 0.0024 - val_mae: 0.0380\n",
            "Epoch 73/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0037 - mae: 0.0439 - val_loss: 0.0024 - val_mae: 0.0366\n",
            "Epoch 74/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0036 - mae: 0.0435 - val_loss: 0.0025 - val_mae: 0.0365\n",
            "Epoch 75/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0037 - mae: 0.0439 - val_loss: 0.0025 - val_mae: 0.0380\n",
            "Epoch 76/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0036 - mae: 0.0431 - val_loss: 0.0025 - val_mae: 0.0359\n",
            "Epoch 77/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0036 - mae: 0.0433 - val_loss: 0.0025 - val_mae: 0.0368\n",
            "Epoch 78/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0036 - mae: 0.0430 - val_loss: 0.0025 - val_mae: 0.0375\n",
            "Epoch 79/200\n",
            "20/20 [==============================] - 0s 2ms/step - loss: 0.0037 - mae: 0.0440 - val_loss: 0.0025 - val_mae: 0.0359\n",
            "Epoch 80/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0036 - mae: 0.0430 - val_loss: 0.0024 - val_mae: 0.0378\n",
            "Epoch 81/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0036 - mae: 0.0437 - val_loss: 0.0025 - val_mae: 0.0365\n",
            "Epoch 82/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0036 - mae: 0.0431 - val_loss: 0.0025 - val_mae: 0.0372\n",
            "Epoch 83/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0036 - mae: 0.0432 - val_loss: 0.0025 - val_mae: 0.0373\n",
            "Epoch 84/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0036 - mae: 0.0436 - val_loss: 0.0025 - val_mae: 0.0368\n",
            "Epoch 85/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0036 - mae: 0.0430 - val_loss: 0.0025 - val_mae: 0.0377\n",
            "Epoch 86/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0036 - mae: 0.0431 - val_loss: 0.0024 - val_mae: 0.0356\n",
            "Epoch 87/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0036 - mae: 0.0433 - val_loss: 0.0026 - val_mae: 0.0371\n",
            "Epoch 88/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0036 - mae: 0.0434 - val_loss: 0.0029 - val_mae: 0.0384\n",
            "Epoch 89/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0036 - mae: 0.0435 - val_loss: 0.0026 - val_mae: 0.0381\n",
            "Epoch 90/200\n",
            "20/20 [==============================] - 0s 2ms/step - loss: 0.0036 - mae: 0.0430 - val_loss: 0.0027 - val_mae: 0.0407\n",
            "Epoch 91/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0039 - mae: 0.0462 - val_loss: 0.0025 - val_mae: 0.0362\n",
            "Epoch 92/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0036 - mae: 0.0438 - val_loss: 0.0028 - val_mae: 0.0373\n",
            "Epoch 93/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0036 - mae: 0.0434 - val_loss: 0.0025 - val_mae: 0.0376\n",
            "Epoch 94/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0036 - mae: 0.0426 - val_loss: 0.0025 - val_mae: 0.0374\n",
            "Epoch 95/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0036 - mae: 0.0427 - val_loss: 0.0025 - val_mae: 0.0369\n",
            "Epoch 96/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0036 - mae: 0.0430 - val_loss: 0.0026 - val_mae: 0.0394\n",
            "Epoch 97/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0036 - mae: 0.0433 - val_loss: 0.0026 - val_mae: 0.0374\n",
            "Epoch 98/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0035 - mae: 0.0431 - val_loss: 0.0027 - val_mae: 0.0370\n",
            "Epoch 99/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0036 - mae: 0.0431 - val_loss: 0.0026 - val_mae: 0.0378\n",
            "Epoch 100/200\n",
            "20/20 [==============================] - 0s 2ms/step - loss: 0.0035 - mae: 0.0431 - val_loss: 0.0025 - val_mae: 0.0366\n",
            "Epoch 101/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0035 - mae: 0.0426 - val_loss: 0.0025 - val_mae: 0.0374\n",
            "Epoch 102/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0035 - mae: 0.0430 - val_loss: 0.0026 - val_mae: 0.0375\n",
            "Epoch 103/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0035 - mae: 0.0425 - val_loss: 0.0026 - val_mae: 0.0371\n",
            "Epoch 104/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0035 - mae: 0.0427 - val_loss: 0.0026 - val_mae: 0.0367\n",
            "Epoch 105/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0035 - mae: 0.0426 - val_loss: 0.0026 - val_mae: 0.0373\n",
            "Epoch 106/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0035 - mae: 0.0423 - val_loss: 0.0026 - val_mae: 0.0393\n",
            "Epoch 107/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0037 - mae: 0.0448 - val_loss: 0.0025 - val_mae: 0.0375\n",
            "Epoch 108/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0035 - mae: 0.0428 - val_loss: 0.0026 - val_mae: 0.0383\n",
            "Epoch 109/200\n",
            "20/20 [==============================] - 0s 2ms/step - loss: 0.0036 - mae: 0.0441 - val_loss: 0.0026 - val_mae: 0.0375\n",
            "Epoch 110/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0036 - mae: 0.0432 - val_loss: 0.0026 - val_mae: 0.0366\n",
            "Epoch 111/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0036 - mae: 0.0434 - val_loss: 0.0026 - val_mae: 0.0390\n",
            "Epoch 112/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0037 - mae: 0.0437 - val_loss: 0.0026 - val_mae: 0.0395\n",
            "Epoch 113/200\n",
            "20/20 [==============================] - 0s 2ms/step - loss: 0.0036 - mae: 0.0432 - val_loss: 0.0027 - val_mae: 0.0398\n",
            "Epoch 114/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0035 - mae: 0.0426 - val_loss: 0.0027 - val_mae: 0.0370\n",
            "Epoch 115/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0036 - mae: 0.0433 - val_loss: 0.0027 - val_mae: 0.0372\n",
            "Epoch 116/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0035 - mae: 0.0429 - val_loss: 0.0027 - val_mae: 0.0372\n",
            "Epoch 117/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0035 - mae: 0.0427 - val_loss: 0.0025 - val_mae: 0.0369\n",
            "Epoch 118/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0035 - mae: 0.0424 - val_loss: 0.0026 - val_mae: 0.0373\n",
            "Epoch 119/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0035 - mae: 0.0428 - val_loss: 0.0026 - val_mae: 0.0364\n",
            "Epoch 120/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0035 - mae: 0.0424 - val_loss: 0.0027 - val_mae: 0.0380\n",
            "Epoch 121/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0035 - mae: 0.0425 - val_loss: 0.0026 - val_mae: 0.0378\n",
            "Epoch 122/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0035 - mae: 0.0423 - val_loss: 0.0026 - val_mae: 0.0375\n",
            "Epoch 123/200\n",
            "20/20 [==============================] - 0s 2ms/step - loss: 0.0035 - mae: 0.0428 - val_loss: 0.0026 - val_mae: 0.0380\n",
            "Epoch 124/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0035 - mae: 0.0428 - val_loss: 0.0027 - val_mae: 0.0401\n",
            "Epoch 125/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0035 - mae: 0.0427 - val_loss: 0.0027 - val_mae: 0.0369\n",
            "Epoch 126/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0035 - mae: 0.0423 - val_loss: 0.0027 - val_mae: 0.0386\n",
            "Epoch 127/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0034 - mae: 0.0424 - val_loss: 0.0026 - val_mae: 0.0369\n",
            "Epoch 128/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0034 - mae: 0.0420 - val_loss: 0.0026 - val_mae: 0.0375\n",
            "Epoch 129/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0036 - mae: 0.0431 - val_loss: 0.0026 - val_mae: 0.0385\n",
            "Epoch 130/200\n",
            "20/20 [==============================] - 0s 2ms/step - loss: 0.0036 - mae: 0.0427 - val_loss: 0.0027 - val_mae: 0.0375\n",
            "Epoch 131/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0035 - mae: 0.0434 - val_loss: 0.0028 - val_mae: 0.0377\n",
            "Epoch 132/200\n",
            "20/20 [==============================] - 0s 2ms/step - loss: 0.0035 - mae: 0.0428 - val_loss: 0.0026 - val_mae: 0.0376\n",
            "Epoch 133/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0035 - mae: 0.0422 - val_loss: 0.0026 - val_mae: 0.0367\n",
            "Epoch 134/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0035 - mae: 0.0433 - val_loss: 0.0031 - val_mae: 0.0385\n",
            "Epoch 135/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0035 - mae: 0.0431 - val_loss: 0.0029 - val_mae: 0.0385\n",
            "Epoch 136/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0035 - mae: 0.0427 - val_loss: 0.0027 - val_mae: 0.0376\n",
            "Epoch 137/200\n",
            "20/20 [==============================] - 0s 2ms/step - loss: 0.0035 - mae: 0.0429 - val_loss: 0.0026 - val_mae: 0.0371\n",
            "Epoch 138/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0034 - mae: 0.0419 - val_loss: 0.0027 - val_mae: 0.0369\n",
            "Epoch 139/200\n",
            "20/20 [==============================] - 0s 2ms/step - loss: 0.0034 - mae: 0.0419 - val_loss: 0.0027 - val_mae: 0.0384\n",
            "Epoch 140/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0035 - mae: 0.0427 - val_loss: 0.0028 - val_mae: 0.0391\n",
            "Epoch 141/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0034 - mae: 0.0421 - val_loss: 0.0026 - val_mae: 0.0364\n",
            "Epoch 142/200\n",
            "20/20 [==============================] - 0s 2ms/step - loss: 0.0034 - mae: 0.0424 - val_loss: 0.0028 - val_mae: 0.0380\n",
            "Epoch 143/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0035 - mae: 0.0427 - val_loss: 0.0026 - val_mae: 0.0384\n",
            "Epoch 144/200\n",
            "20/20 [==============================] - 0s 2ms/step - loss: 0.0034 - mae: 0.0428 - val_loss: 0.0028 - val_mae: 0.0384\n",
            "Epoch 145/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0034 - mae: 0.0420 - val_loss: 0.0026 - val_mae: 0.0374\n",
            "Epoch 146/200\n",
            "20/20 [==============================] - 0s 5ms/step - loss: 0.0034 - mae: 0.0421 - val_loss: 0.0027 - val_mae: 0.0363\n",
            "Epoch 147/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0034 - mae: 0.0420 - val_loss: 0.0026 - val_mae: 0.0375\n",
            "Epoch 148/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0035 - mae: 0.0430 - val_loss: 0.0026 - val_mae: 0.0392\n",
            "Epoch 149/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0035 - mae: 0.0427 - val_loss: 0.0026 - val_mae: 0.0364\n",
            "Epoch 150/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0034 - mae: 0.0420 - val_loss: 0.0025 - val_mae: 0.0362\n",
            "Epoch 151/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0034 - mae: 0.0422 - val_loss: 0.0026 - val_mae: 0.0367\n",
            "Epoch 152/200\n",
            "20/20 [==============================] - 0s 2ms/step - loss: 0.0035 - mae: 0.0427 - val_loss: 0.0027 - val_mae: 0.0405\n",
            "Epoch 153/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0034 - mae: 0.0422 - val_loss: 0.0026 - val_mae: 0.0378\n",
            "Epoch 154/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0034 - mae: 0.0428 - val_loss: 0.0026 - val_mae: 0.0380\n",
            "Epoch 155/200\n",
            "20/20 [==============================] - 0s 2ms/step - loss: 0.0035 - mae: 0.0437 - val_loss: 0.0024 - val_mae: 0.0357\n",
            "Epoch 156/200\n",
            "20/20 [==============================] - 0s 2ms/step - loss: 0.0034 - mae: 0.0422 - val_loss: 0.0025 - val_mae: 0.0381\n",
            "Epoch 157/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0036 - mae: 0.0434 - val_loss: 0.0026 - val_mae: 0.0374\n",
            "Epoch 158/200\n",
            "20/20 [==============================] - 0s 2ms/step - loss: 0.0034 - mae: 0.0421 - val_loss: 0.0026 - val_mae: 0.0375\n",
            "Epoch 159/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0034 - mae: 0.0418 - val_loss: 0.0026 - val_mae: 0.0359\n",
            "Epoch 160/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0034 - mae: 0.0417 - val_loss: 0.0026 - val_mae: 0.0389\n",
            "Epoch 161/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0034 - mae: 0.0422 - val_loss: 0.0028 - val_mae: 0.0412\n",
            "Epoch 162/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0034 - mae: 0.0423 - val_loss: 0.0025 - val_mae: 0.0375\n",
            "Epoch 163/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0034 - mae: 0.0424 - val_loss: 0.0027 - val_mae: 0.0393\n",
            "Epoch 164/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0034 - mae: 0.0422 - val_loss: 0.0026 - val_mae: 0.0372\n",
            "Epoch 165/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0034 - mae: 0.0420 - val_loss: 0.0026 - val_mae: 0.0396\n",
            "Epoch 166/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0034 - mae: 0.0427 - val_loss: 0.0026 - val_mae: 0.0385\n",
            "Epoch 167/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0034 - mae: 0.0417 - val_loss: 0.0025 - val_mae: 0.0387\n",
            "Epoch 168/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0034 - mae: 0.0424 - val_loss: 0.0026 - val_mae: 0.0378\n",
            "Epoch 169/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0034 - mae: 0.0424 - val_loss: 0.0026 - val_mae: 0.0362\n",
            "Epoch 170/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0033 - mae: 0.0412 - val_loss: 0.0026 - val_mae: 0.0378\n",
            "Epoch 171/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0033 - mae: 0.0417 - val_loss: 0.0026 - val_mae: 0.0367\n",
            "Epoch 172/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0033 - mae: 0.0423 - val_loss: 0.0026 - val_mae: 0.0376\n",
            "Epoch 173/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0034 - mae: 0.0421 - val_loss: 0.0028 - val_mae: 0.0388\n",
            "Epoch 174/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0033 - mae: 0.0420 - val_loss: 0.0025 - val_mae: 0.0397\n",
            "Epoch 175/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0034 - mae: 0.0422 - val_loss: 0.0026 - val_mae: 0.0388\n",
            "Epoch 176/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0034 - mae: 0.0431 - val_loss: 0.0026 - val_mae: 0.0378\n",
            "Epoch 177/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0034 - mae: 0.0424 - val_loss: 0.0027 - val_mae: 0.0373\n",
            "Epoch 178/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0033 - mae: 0.0418 - val_loss: 0.0026 - val_mae: 0.0360\n",
            "Epoch 179/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0033 - mae: 0.0418 - val_loss: 0.0024 - val_mae: 0.0354\n",
            "Epoch 180/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0033 - mae: 0.0418 - val_loss: 0.0027 - val_mae: 0.0374\n",
            "Epoch 181/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0034 - mae: 0.0423 - val_loss: 0.0028 - val_mae: 0.0373\n",
            "Epoch 182/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0033 - mae: 0.0415 - val_loss: 0.0027 - val_mae: 0.0370\n",
            "Epoch 183/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0033 - mae: 0.0414 - val_loss: 0.0025 - val_mae: 0.0369\n",
            "Epoch 184/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0034 - mae: 0.0424 - val_loss: 0.0026 - val_mae: 0.0360\n",
            "Epoch 185/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0034 - mae: 0.0421 - val_loss: 0.0027 - val_mae: 0.0367\n",
            "Epoch 186/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0033 - mae: 0.0415 - val_loss: 0.0028 - val_mae: 0.0375\n",
            "Epoch 187/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0033 - mae: 0.0414 - val_loss: 0.0027 - val_mae: 0.0375\n",
            "Epoch 188/200\n",
            "20/20 [==============================] - 0s 4ms/step - loss: 0.0034 - mae: 0.0427 - val_loss: 0.0026 - val_mae: 0.0373\n",
            "Epoch 189/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0034 - mae: 0.0427 - val_loss: 0.0025 - val_mae: 0.0362\n",
            "Epoch 190/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0033 - mae: 0.0412 - val_loss: 0.0027 - val_mae: 0.0372\n",
            "Epoch 191/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0033 - mae: 0.0414 - val_loss: 0.0025 - val_mae: 0.0363\n",
            "Epoch 192/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0032 - mae: 0.0411 - val_loss: 0.0025 - val_mae: 0.0371\n",
            "Epoch 193/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0033 - mae: 0.0416 - val_loss: 0.0025 - val_mae: 0.0364\n",
            "Epoch 194/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0034 - mae: 0.0424 - val_loss: 0.0027 - val_mae: 0.0378\n",
            "Epoch 195/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0033 - mae: 0.0414 - val_loss: 0.0026 - val_mae: 0.0363\n",
            "Epoch 196/200\n",
            "20/20 [==============================] - 0s 2ms/step - loss: 0.0034 - mae: 0.0419 - val_loss: 0.0026 - val_mae: 0.0362\n",
            "Epoch 197/200\n",
            "20/20 [==============================] - 0s 2ms/step - loss: 0.0033 - mae: 0.0416 - val_loss: 0.0026 - val_mae: 0.0360\n",
            "Epoch 198/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0033 - mae: 0.0415 - val_loss: 0.0025 - val_mae: 0.0373\n",
            "Epoch 199/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0033 - mae: 0.0417 - val_loss: 0.0026 - val_mae: 0.0390\n",
            "Epoch 200/200\n",
            "20/20 [==============================] - 0s 3ms/step - loss: 0.0033 - mae: 0.0413 - val_loss: 0.0026 - val_mae: 0.0368\n"
          ]
        }
      ],
      "source": [
        "# 編譯及訓練模型\n",
        "\n",
        "# 編譯模型\n",
        "model.compile(optimizer = 'adam', loss = 'mse', metrics = ['mae'])              \n",
        "history = model.fit(train_data, train_label,\t\t\t\t\t\t# 訓練集\n",
        "                  validation_data = (validation_data, validation_label),\t# 驗證集\n",
        "                  epochs = 200)\t\t\t\t\t\t\t\t# 訓練週期"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 8,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 265
        },
        "id": "H5oUgTD2XvSC",
        "outputId": "87cd05f0-828a-484c-8ab7-d2a732e53352"
      },
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ],
            "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAD4CAYAAAD8Zh1EAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAbJElEQVR4nO3de5Bc5Xnn8e/Tl9HoRsBikFS6MMKRY8vIFsqgUNkgx3dhxxIswZLKW1g4tsq1yGuKhF3ZbCiKZcsGvHayG9UShWBDCiLJLCyzZdkizrIrswWORoq4CAWjyBBmQGIkG5A0Gs1097N/9JnW6dtMS+rpnrf5faq6+lzePueZ0z2/eec93afN3RERkfAlml2AiIjUhwJdRKRFKNBFRFqEAl1EpEUo0EVEWkSqWTu+8MILvbOzs1m7FxEJ0u7du4+4e0eldU0L9M7OTnp6epq1exGRIJnZq9XWachFRKRFKNBFRFpETYFuZivM7CUzO2BmG6u0+byZvWhm+8zs4fqWKSIiYxlzDN3MksAm4JNAL7DLzLrd/cVYm4XAN4B/5e6/NrOLxqtgEWkNw8PD9Pb2Mjg42OxSJqT29nbmzp1LOp2u+TG1nBRdBhxw94MAZrYFWAW8GGvzFWCTu/8awN3frLkCEXlX6u3tZfr06XR2dmJmzS5nQnF3jh49Sm9vLwsWLKj5cbUMucwBXovN90bL4t4HvM/M/p+ZPWNmKyptyMzWm1mPmfX09/fXXKSItJ7BwUFmzJihMK/AzJgxY8YZ//dSr5OiKWAh8PvAWuCvzOz80kbuvtndu9y9q6Oj4tsoReRdRGFe3dkcm1oCvQ+YF5ufGy2L6wW63X3Y3X8J/IJ8wNffU0/Bn/4pDA+Py+ZFREJVS6DvAhaa2QIzawPWAN0lbf4n+d45ZnYh+SGYg3Ws87Snn4Y774ShoXHZvIi8e0ybNq3ZJdTVmIHu7hlgA7AD2A9sc/d9ZnaHma2Mmu0AjprZi8CTwC3ufnR8Ko5KzmbHZfMiIqGqaQzd3be7+/vc/b3u/p+jZbe5e3c07e5+s7svcvfF7r5l3CpOJvP3CnQRqRN355ZbbuHSSy9l8eLFbN26FYA33niD5cuXs2TJEi699FJ+9rOfkc1mWbduXaHt9773vSZXf1rTruVy1kYCPZdrbh0iUj833QR799Z3m0uWwJ/9WU1NH330Ufbu3cuzzz7LkSNHuPzyy1m+fDkPP/wwn/70p7n11lvJZrMMDAywd+9e+vr6eOGFFwB466236lv3OQjvo/8achGROnvqqadYu3YtyWSSmTNn8pGPfIRdu3Zx+eWX8/3vf5/bb7+d559/nunTp3PJJZdw8OBBvva1r/GTn/yE8847r9nlF4TbQ1egi7SOGnvSjbZ8+XJ27tzJj370I9atW8fNN9/M9ddfz7PPPsuOHTu499572bZtG/fff3+zSwVC7qFryEVE6uTKK69k69atZLNZ+vv72blzJ8uWLePVV19l5syZfOUrX+HLX/4ye/bs4ciRI+RyOa699lruvPNO9uzZ0+zyC9RDF5F3vWuuuYann36aD3/4w5gZd999N7NmzeKBBx7gnnvuIZ1OM23aNB588EH6+vq44YYbyEWdym9961tNrv40c/em7Lirq8vP6gsufvADuOEG+OUvQd94JBKs/fv384EPfKDZZUxolY6Rme12965K7cMdclEPXUSkSHiBriEXEZGKwg10nRQVESkSXqBryEVEpKLwAl09dBGRisILdPXQRUQqCi/QdVJURJqg2qV2J9IleMMNdA25iIgUCS/QNeQiIudo48aNbNq0qTB/++23853vfIfjx4/z8Y9/nKVLl7J48WIef/zxmrc5ES7Bq4/+i0jTNfrquatXr+amm27ixhtvBGDbtm3s2LGD9vZ2HnvsMc477zyOHDnCFVdcwcqVK2v6fs+JcAne8AJdF+cSkXN02WWX8eabb/L666/T39/PBRdcwLx58xgeHuab3/wmO3fuJJFI0NfXx+HDh5k1a9aY2xztErxf+tKXGB4e5uqrr2bJkiVFl+D97Gc/y6c+9am6/FzhBbp66CItpxlXz73uuut45JFHOHToEKtXrwbgoYceor+/n927d5NOp+ns7GRwcPCc9tPIS/CGN4auk6IiUgerV69my5YtPPLII1x33XUAvP3221x00UWk02mefPJJXn311Zq3NxEuwRteD10nRUWkDj74wQ9y7Ngx5syZw+zZswH4whe+wOc+9zkWL15MV1cX73//+2ve3kS4BG94l899+mn43d+FH/8YVqyof2Ei0hC6fO7YWv/yuRpyERGpKLxA15CLiEhF4QW6eugiLaNZQ74hOJtjE16gq4cu0hLa29s5evSoQr0Cd+fo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\n"
          },
          "metadata": {
            "needs_background": "light"
          }
        }
      ],
      "source": [
        "# 查看損失值\n",
        "import matplotlib.pyplot as plt\n",
        "\n",
        "plt.plot(history.history['loss'], \"r\", label = 'loss')\t\t\t\t# 訓練資料的損失值\n",
        "plt.plot(history.history['val_loss'], \"b\", label = 'val loss')\t\t\t# 驗證資料的損失值  \n",
        "plt.legend()\t\t# 顯示標籤\n",
        "plt.show()\t\t\t# 顯示圖片"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 9,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 497
        },
        "id": "ZhX7Wz3xYIdl",
        "outputId": "562c1109-a15c-4eb5-8ce6-18a2df832c14"
      },
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 720x576 with 2 Axes>"
            ],
            "image/png": "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\n"
          },
          "metadata": {
            "needs_background": "light"
          }
        }
      ],
      "source": [
        "# 資料比較圖\n",
        "import numpy as np\n",
        "\n",
        "plt.figure(figsize = (10,8))\t\t\t# 定義一個視窗 (10, 8 為視窗大小)\n",
        "plt.subplots_adjust(hspace = 0.3)\t\t# 調整兩張圖的間距\n",
        "\n",
        "error = test_label.reshape(30, 1) * max(label) - model.predict(test_data) * max(label)\t\t# 實際值 - 預測值 ( * max(label) 表示恢復原始值)\n",
        "step = (max(error) - min(error)) / 15\t\t\t\t\t\t\t\t\t\t# 把誤差分成 15 等份, 求出每一等份的長度\n",
        "interval = [i for i in range(int(min(error)), int(max(error)) + int(step), int(step))]\t\t# 寫出每一等份的值\n",
        "\n",
        "# 實際預測比較圖\n",
        "width = 0.3\n",
        "plt.subplot(2, 1, 1)\t\t\t# 第一張圖位於視窗裡的位置 (2 列 1 行的第二個位置 - 上)\n",
        "plt.xlabel(\"test data\")\t\t\t# x 軸名稱\n",
        "plt.ylabel(\"money\")\t\t\t# y 軸名稱\n",
        "plt.bar(np.linspace(1, 30, 30) - width/2, (test_label * max(label)).reshape(30), width = width, label = 'actual')\t\t\t# 實際值                            \n",
        "plt.bar(np.linspace(1, 30, 30) + width/2, (model.predict(test_data) * max(label)).reshape(30), width = width, label = 'predict')\t# 預測值\n",
        "plt.legend()\n",
        "\n",
        "# 誤差分布圖\n",
        "plt.subplot(2, 1, 2)\t\t\t# 第二張圖位於視窗裡的位置 (2列1行的第二個位置 - 下)\n",
        "plt.xlabel(\"error\")\t\t\t# x 軸名稱\n",
        "plt.ylabel(\"quantity\")\t\t\t# y 軸名稱\n",
        "plt.hist(error, interval, linewidth = 1, edgecolor = 'black')\t# 顯示\n",
        "plt.show()\t\t\t\t\t# 將圖片顯示出來"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 10,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "2wNy-nI6ZK6Q",
        "outputId": "fc85a304-6ad4-44f5-8973-ac9a9e0acbee"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "[[18389.81437683]\n",
            " [18426.64146423]\n",
            " [19989.12811279]\n",
            " [11530.3850174 ]]\n"
          ]
        }
      ],
      "source": [
        "# 建立欲預測的資料\n",
        "data = np.array([[10, 6, 1, 0], \n",
        "          [10, 7, 1, 0], \n",
        "          [12, 5, 1, 1],\n",
        "          [7, -1, 0, 1]])\n",
        "\n",
        "# 資料正規化與預測資料\n",
        "data = data - mean\t\t# data 減掉平均數\n",
        "data = data/std\t\t\t# data 除以標準差\n",
        "tem = model.predict(data)\t# 得出預測值\n",
        "tem = tem * max(label)\t\t# 還原標籤資料\n",
        "print(tem)\t\t\t\t# 顯示標籤資料"
      ]
    }
  ],
  "metadata": {
    "colab": {
      "name": "Untitled40.ipynb",
      "provenance": []
    },
    "kernelspec": {
      "display_name": "Python 3",
      "name": "python3"
    },
    "language_info": {
      "name": "python"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 0
}