{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "name": "student.ipynb",
      "provenance": [],
      "collapsed_sections": []
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    },
    "language_info": {
      "name": "python"
    },
    "accelerator": "GPU"
  },
  "cells": [
    {
      "cell_type": "code",
      "execution_count": 20,
      "metadata": {
        "colab": {
          "resources": {
            "http://localhost:8080/nbextensions/google.colab/files.js": {
              "data": "Ly8gQ29weXJpZ2h0IDIwMTcgR29vZ2xlIExMQwovLwovLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgovLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLy8KLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLy8KLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQovLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAovLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAovLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCi8qKgogKiBAZmlsZW92ZXJ2aWV3IEhlbHBlcnMgZm9yIGdvb2dsZS5jb2xhYiBQeXRob24gbW9kdWxlLgogKi8KKGZ1bmN0aW9uKHNjb3BlKSB7CmZ1bmN0aW9uIHNwYW4odGV4dCwgc3R5bGVBdHRyaWJ1dGVzID0ge30pIHsKICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOwogIGVsZW1lbnQudGV4dENvbnRlbnQgPSB0ZXh0OwogIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHN0eWxlQXR0cmlidXRlcykpIHsKICAgIGVsZW1lbnQuc3R5bGVba2V5XSA9IHN0eWxlQXR0cmlidXRlc1trZXldOwogIH0KICByZXR1cm4gZWxlbWVudDsKfQoKLy8gTWF4IG51bWJlciBvZiBieXRlcyB3aGljaCB3aWxsIGJlIHVwbG9hZGVkIGF0IGEgdGltZS4KY29uc3QgTUFYX1BBWUxPQURfU0laRSA9IDEwMCAqIDEwMjQ7CgpmdW5jdGlvbiBfdXBsb2FkRmlsZXMoaW5wdXRJZCwgb3V0cHV0SWQpIHsKICBjb25zdCBzdGVwcyA9IHVwbG9hZEZpbGVzU3RlcChpbnB1dElkLCBvdXRwdXRJZCk7CiAgY29uc3Qgb3V0cHV0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG91dHB1dElkKTsKICAvLyBDYWNoZSBzdGVwcyBvbiB0aGUgb3V0cHV0RWxlbWVudCB0byBtYWtlIGl0IGF2YWlsYWJsZSBmb3IgdGhlIG5leHQgY2FsbAogIC8vIHRvIHVwbG9hZEZpbGVzQ29udGludWUgZnJvbSBQeXRob24uCiAgb3V0cHV0RWxlbWVudC5zdGVwcyA9IHN0ZXBzOwoKICByZXR1cm4gX3VwbG9hZEZpbGVzQ29udGludWUob3V0cHV0SWQpOwp9CgovLyBUaGlzIGlzIHJvdWdobHkgYW4gYXN5bmMgZ2VuZXJhdG9yIChub3Qgc3VwcG9ydGVkIGluIHRoZSBicm93c2VyIHlldCksCi8vIHdoZXJlIHRoZXJlIGFyZSBtdWx0aXBsZSBhc3luY2hyb25vdXMgc3RlcHMgYW5kIHRoZSBQeXRob24gc2lkZSBpcyBnb2luZwovLyB0byBwb2xsIGZvciBjb21wbGV0aW9uIG9mIGVhY2ggc3RlcC4KLy8gVGhpcyB1c2VzIGEgUHJvbWlzZSB0byBibG9jayB0aGUgcHl0aG9uIHNpZGUgb24gY29tcGxldGlvbiBvZiBlYWNoIHN0ZXAsCi8vIHRoZW4gcGFzc2VzIHRoZSByZXN1bHQgb2YgdGhlIHByZXZpb3VzIHN0ZXAgYXMgdGhlIGlucHV0IHRvIHRoZSBuZXh0IHN0ZXAuCmZ1bmN0aW9uIF91cGxvYWRGaWxlc0NvbnRpbnVlKG91dHB1dElkKSB7CiAgY29uc3Qgb3V0cHV0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG91dHB1dElkKTsKICBjb25zdCBzdGVwcyA9IG91dHB1dEVsZW1lbnQuc3RlcHM7CgogIGNvbnN0IG5leHQgPSBzdGVwcy5uZXh0KG91dHB1dEVsZW1lbnQubGFzdFByb21pc2VWYWx1ZSk7CiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXh0LnZhbHVlLnByb21pc2UpLnRoZW4oKHZhbHVlKSA9PiB7CiAgICAvLyBDYWNoZSB0aGUgbGFzdCBwcm9taXNlIHZhbHVlIHRvIG1ha2UgaXQgYXZhaWxhYmxlIHRvIHRoZSBuZXh0CiAgICAvLyBzdGVwIG9mIHRoZSBnZW5lcmF0b3IuCiAgICBvdXRwdXRFbGVtZW50Lmxhc3RQcm9taXNlVmFsdWUgPSB2YWx1ZTsKICAgIHJldHVybiBuZXh0LnZhbHVlLnJlc3BvbnNlOwogIH0pOwp9CgovKioKICogR2VuZXJhdG9yIGZ1bmN0aW9uIHdoaWNoIGlzIGNhbGxlZCBiZXR3ZWVuIGVhY2ggYXN5bmMgc3RlcCBvZiB0aGUgdXBsb2FkCiAqIHByb2Nlc3MuCiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dElkIEVsZW1lbnQgSUQgb2YgdGhlIGlucHV0IGZpbGUgcGlja2VyIGVsZW1lbnQuCiAqIEBwYXJhbSB7c3RyaW5nfSBvdXRwdXRJZCBFbGVtZW50IElEIG9mIHRoZSBvdXRwdXQgZGlzcGxheS4KICogQHJldHVybiB7IUl0ZXJhYmxlPCFPYmplY3Q+fSBJdGVyYWJsZSBvZiBuZXh0IHN0ZXBzLgogKi8KZnVuY3Rpb24qIHVwbG9hZEZpbGVzU3RlcChpbnB1dElkLCBvdXRwdXRJZCkgewogIGNvbnN0IGlucHV0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlucHV0SWQpOwogIGlucHV0RWxlbWVudC5kaXNhYmxlZCA9IGZhbHNlOwoKICBjb25zdCBvdXRwdXRFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQob3V0cHV0SWQpOwogIG91dHB1dEVsZW1lbnQuaW5uZXJIVE1MID0gJyc7CgogIGNvbnN0IHBpY2tlZFByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gewogICAgaW5wdXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIChlKSA9PiB7CiAgICAgIHJlc29sdmUoZS50YXJnZXQuZmlsZXMpOwogICAgfSk7CiAgfSk7CgogIGNvbnN0IGNhbmNlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOwogIGlucHV0RWxlbWVudC5wYXJlbnRFbGVtZW50LmFwcGVuZENoaWxkKGNhbmNlbCk7CiAgY2FuY2VsLnRleHRDb250ZW50ID0gJ0NhbmNlbCB1cGxvYWQnOwogIGNvbnN0IGNhbmNlbFByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gewogICAgY2FuY2VsLm9uY2xpY2sgPSAoKSA9PiB7CiAgICAgIHJlc29sdmUobnVsbCk7CiAgICB9OwogIH0pOwoKICAvLyBXYWl0IGZvciB0aGUgdXNlciB0byBwaWNrIHRoZSBmaWxlcy4KICBjb25zdCBmaWxlcyA9IHlpZWxkIHsKICAgIHByb21pc2U6IFByb21pc2UucmFjZShbcGlja2VkUHJvbWlzZSwgY2FuY2VsUHJvbWlzZV0pLAogICAgcmVzcG9uc2U6IHsKICAgICAgYWN0aW9uOiAnc3RhcnRpbmcnLAogICAgfQogIH07CgogIGNhbmNlbC5yZW1vdmUoKTsKCiAgLy8gRGlzYWJsZSB0aGUgaW5wdXQgZWxlbWVudCBzaW5jZSBmdXJ0aGVyIHBpY2tzIGFyZSBub3QgYWxsb3dlZC4KICBpbnB1dEVsZW1lbnQuZGlzYWJsZWQgPSB0cnVlOwoKICBpZiAoIWZpbGVzKSB7CiAgICByZXR1cm4gewogICAgICByZXNwb25zZTogewogICAgICAgIGFjdGlvbjogJ2NvbXBsZXRlJywKICAgICAgfQogICAgfTsKICB9CgogIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykgewogICAgY29uc3QgbGkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaScpOwogICAgbGkuYXBwZW5kKHNwYW4oZmlsZS5uYW1lLCB7Zm9udFdlaWdodDogJ2JvbGQnfSkpOwogICAgbGkuYXBwZW5kKHNwYW4oCiAgICAgICAgYCgke2ZpbGUudHlwZSB8fCAnbi9hJ30pIC0gJHtmaWxlLnNpemV9IGJ5dGVzLCBgICsKICAgICAgICBgbGFzdCBtb2RpZmllZDogJHsKICAgICAgICAgICAgZmlsZS5sYXN0TW9kaWZpZWREYXRlID8gZmlsZS5sYXN0TW9kaWZpZWREYXRlLnRvTG9jYWxlRGF0ZVN0cmluZygpIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ24vYSd9IC0gYCkpOwogICAgY29uc3QgcGVyY2VudCA9IHNwYW4oJzAlIGRvbmUnKTsKICAgIGxpLmFwcGVuZENoaWxkKHBlcmNlbnQpOwoKICAgIG91dHB1dEVsZW1lbnQuYXBwZW5kQ2hpbGQobGkpOwoKICAgIGNvbnN0IGZpbGVEYXRhUHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CiAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7CiAgICAgIHJlYWRlci5vbmxvYWQgPSAoZSkgPT4gewogICAgICAgIHJlc29sdmUoZS50YXJnZXQucmVzdWx0KTsKICAgICAgfTsKICAgICAgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKGZpbGUpOwogICAgfSk7CiAgICAvLyBXYWl0IGZvciB0aGUgZGF0YSB0byBiZSByZWFkeS4KICAgIGxldCBmaWxlRGF0YSA9IHlpZWxkIHsKICAgICAgcHJvbWlzZTogZmlsZURhdGFQcm9taXNlLAogICAgICByZXNwb25zZTogewogICAgICAgIGFjdGlvbjogJ2NvbnRpbnVlJywKICAgICAgfQogICAgfTsKCiAgICAvLyBVc2UgYSBjaHVua2VkIHNlbmRpbmcgdG8gYXZvaWQgbWVzc2FnZSBzaXplIGxpbWl0cy4gU2VlIGIvNjIxMTU2NjAuCiAgICBsZXQgcG9zaXRpb24gPSAwOwogICAgZG8gewogICAgICBjb25zdCBsZW5ndGggPSBNYXRoLm1pbihmaWxlRGF0YS5ieXRlTGVuZ3RoIC0gcG9zaXRpb24sIE1BWF9QQVlMT0FEX1NJWkUpOwogICAgICBjb25zdCBjaHVuayA9IG5ldyBVaW50OEFycmF5KGZpbGVEYXRhLCBwb3NpdGlvbiwgbGVuZ3RoKTsKICAgICAgcG9zaXRpb24gKz0gbGVuZ3RoOwoKICAgICAgY29uc3QgYmFzZTY0ID0gYnRvYShTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIGNodW5rKSk7CiAgICAgIHlpZWxkIHsKICAgICAgICByZXNwb25zZTogewogICAgICAgICAgYWN0aW9uOiAnYXBwZW5kJywKICAgICAgICAgIGZpbGU6IGZpbGUubmFtZSwKICAgICAgICAgIGRhdGE6IGJhc2U2NCwKICAgICAgICB9LAogICAgICB9OwoKICAgICAgbGV0IHBlcmNlbnREb25lID0gZmlsZURhdGEuYnl0ZUxlbmd0aCA9PT0gMCA/CiAgICAgICAgICAxMDAgOgogICAgICAgICAgTWF0aC5yb3VuZCgocG9zaXRpb24gLyBmaWxlRGF0YS5ieXRlTGVuZ3RoKSAqIDEwMCk7CiAgICAgIHBlcmNlbnQudGV4dENvbnRlbnQgPSBgJHtwZXJjZW50RG9uZX0lIGRvbmVgOwoKICAgIH0gd2hpbGUgKHBvc2l0aW9uIDwgZmlsZURhdGEuYnl0ZUxlbmd0aCk7CiAgfQoKICAvLyBBbGwgZG9uZS4KICB5aWVsZCB7CiAgICByZXNwb25zZTogewogICAgICBhY3Rpb246ICdjb21wbGV0ZScsCiAgICB9CiAgfTsKfQoKc2NvcGUuZ29vZ2xlID0gc2NvcGUuZ29vZ2xlIHx8IHt9OwpzY29wZS5nb29nbGUuY29sYWIgPSBzY29wZS5nb29nbGUuY29sYWIgfHwge307CnNjb3BlLmdvb2dsZS5jb2xhYi5fZmlsZXMgPSB7CiAgX3VwbG9hZEZpbGVzLAogIF91cGxvYWRGaWxlc0NvbnRpbnVlLAp9Owp9KShzZWxmKTsK",
              "ok": true,
              "headers": [
                [
                  "content-type",
                  "application/javascript"
                ]
              ],
              "status": 200,
              "status_text": ""
            }
          },
          "base_uri": "https://localhost:8080/",
          "height": 132
        },
        "id": "fk0dAlLF1IGY",
        "outputId": "435477c2-0ed2-41da-b2f6-9e666b716c4c"
      },
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ],
            "text/html": [
              "\n",
              "     <input type=\"file\" id=\"files-2e5b3946-b82f-4814-80a0-cab91a4b4d69\" name=\"files[]\" multiple disabled\n",
              "        style=\"border:none\" />\n",
              "     <output id=\"result-2e5b3946-b82f-4814-80a0-cab91a4b4d69\">\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 student.txt to student (2).txt\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ],
            "text/html": [
              "\n",
              "     <input type=\"file\" id=\"files-1e803faa-171f-4d41-b329-be8ed5862793\" name=\"files[]\" multiple disabled\n",
              "        style=\"border:none\" />\n",
              "     <output id=\"result-1e803faa-171f-4d41-b329-be8ed5862793\">\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 (2).py\n"
          ]
        }
      ],
      "source": [
        "# 匯入「student.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",
      "source": [
        "# 讀取 house.txt 檔案, 並得出特徵和標籤\n",
        "import keras_lite_convertor as kc\n",
        "\n",
        "path_name = 'student.txt'\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# 將檔案讀到的 5 種資料分為「特徵」和「標籤」，並設定亂數種子為 12"
      ],
      "metadata": {
        "id": "WScDF7Xs1QHb"
      },
      "execution_count": 21,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "# 資料預處理\n",
        "\n",
        "# 取資料中的 70% 當作訓練集\n",
        "split_num = int(len(data) * 0.7) \n",
        "train_tem_data = data[:split_num]\t\t# 訓練用資料 (12 * 0.7 = 8 筆)\n",
        "train_tem_label = label[:split_num]\t\t# 訓練用標籤 (12 * 0.7 = 8 筆)\n",
        "\n",
        "# 正規化\n",
        "new_data = data/max(train_tem_data)\n",
        "new_label = label/max(label)       \t# 將 label 範圍落在 0 ~ 1 (label 正規化)"
      ],
      "metadata": {
        "id": "d6Hf5TON1WE6"
      },
      "execution_count": 22,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "# 訓練集、驗證集、測試集的資料形狀\n",
        "\n",
        "# 訓練集\n",
        "train_data = new_data[:split_num]\t\t\t# 訓練用資料\n",
        "print(train_data.shape)    \n",
        "train_label = new_label[:split_num]\t\t# 訓練用標籤\n",
        "\n",
        "# 驗證集\n",
        "validation_data = new_data[split_num:-1]\t\t# 驗證用資料\n",
        "print(validation_data.shape)\n",
        "validation_label = new_label[split_num:-1]\t# 驗證用標籤\n",
        "\n",
        "# 測試集\n",
        "test_data = new_data[-1:]\t\t\t\t# 測試用資料，30筆\n",
        "print(test_data.shape)\n",
        "test_label = new_label[-1:]\t\t\t# 測試用標籤"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "UYC2WxZM2Thk",
        "outputId": "caf45c24-67b1-4114-c6c0-f212c4a0d80d"
      },
      "execution_count": 23,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "(8, 1)\n",
            "(3, 1)\n",
            "(1, 1)\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "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# 建構網路模型                            \n",
        "model.add(Dense(20, activation = 'relu', input_shape = (1,)))\t  \t# 增加一層神經層，使用 ReLU 激活函數，輸入層有4個輸入特徵\n",
        "model.add(Dense(10, activation = 'relu'))\t\t\t\t# 增加一層神經層，使用 ReLU 激活函數\n",
        "model.add(Dense(1))\t\t\t\t\t\t\t# 增加輸出為 1 的輸出層"
      ],
      "metadata": {
        "id": "KvutrBoG2byT"
      },
      "execution_count": 24,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "# 編譯及訓練模型\n",
        "\n",
        "# 編譯模型\n",
        "model.compile(optimizer = 'adam', loss = 'mse', metrics = ['accuracy'])              \n",
        "history = model.fit(train_data, train_label,\t\t\t\t\t# 訓練集\n",
        "                  validation_data = (validation_data, validation_label),\t# 驗證集\n",
        "                  epochs = 100)\t\t\t\t\t\t\t# 訓練週期"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "GOFV4gTe2fdz",
        "outputId": "d0e6bf4b-867c-4d9b-e38f-9d22ae16318d"
      },
      "execution_count": 25,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Epoch 1/100\n",
            "1/1 [==============================] - 1s 589ms/step - loss: 0.5231 - accuracy: 0.0000e+00 - val_loss: 0.3899 - val_accuracy: 0.0000e+00\n",
            "Epoch 2/100\n",
            "1/1 [==============================] - 0s 37ms/step - loss: 0.5119 - accuracy: 0.0000e+00 - val_loss: 0.3804 - val_accuracy: 0.0000e+00\n",
            "Epoch 3/100\n",
            "1/1 [==============================] - 0s 37ms/step - loss: 0.5007 - accuracy: 0.0000e+00 - val_loss: 0.3709 - val_accuracy: 0.0000e+00\n",
            "Epoch 4/100\n",
            "1/1 [==============================] - 0s 33ms/step - loss: 0.4895 - accuracy: 0.0000e+00 - val_loss: 0.3615 - val_accuracy: 0.0000e+00\n",
            "Epoch 5/100\n",
            "1/1 [==============================] - 0s 32ms/step - loss: 0.4784 - accuracy: 0.0000e+00 - val_loss: 0.3522 - val_accuracy: 0.0000e+00\n",
            "Epoch 6/100\n",
            "1/1 [==============================] - 0s 42ms/step - loss: 0.4674 - accuracy: 0.0000e+00 - val_loss: 0.3429 - val_accuracy: 0.0000e+00\n",
            "Epoch 7/100\n",
            "1/1 [==============================] - 0s 38ms/step - loss: 0.4564 - accuracy: 0.0000e+00 - val_loss: 0.3336 - val_accuracy: 0.0000e+00\n",
            "Epoch 8/100\n",
            "1/1 [==============================] - 0s 34ms/step - loss: 0.4455 - accuracy: 0.0000e+00 - val_loss: 0.3245 - val_accuracy: 0.0000e+00\n",
            "Epoch 9/100\n",
            "1/1 [==============================] - 0s 36ms/step - loss: 0.4346 - accuracy: 0.0000e+00 - val_loss: 0.3154 - val_accuracy: 0.0000e+00\n",
            "Epoch 10/100\n",
            "1/1 [==============================] - 0s 32ms/step - loss: 0.4238 - accuracy: 0.0000e+00 - val_loss: 0.3064 - val_accuracy: 0.0000e+00\n",
            "Epoch 11/100\n",
            "1/1 [==============================] - 0s 34ms/step - loss: 0.4131 - accuracy: 0.0000e+00 - val_loss: 0.2974 - val_accuracy: 0.0000e+00\n",
            "Epoch 12/100\n",
            "1/1 [==============================] - 0s 47ms/step - loss: 0.4024 - accuracy: 0.0000e+00 - val_loss: 0.2885 - val_accuracy: 0.0000e+00\n",
            "Epoch 13/100\n",
            "1/1 [==============================] - 0s 33ms/step - loss: 0.3918 - accuracy: 0.0000e+00 - val_loss: 0.2798 - val_accuracy: 0.0000e+00\n",
            "Epoch 14/100\n",
            "1/1 [==============================] - 0s 38ms/step - loss: 0.3813 - accuracy: 0.0000e+00 - val_loss: 0.2710 - val_accuracy: 0.0000e+00\n",
            "Epoch 15/100\n",
            "1/1 [==============================] - 0s 47ms/step - loss: 0.3709 - accuracy: 0.0000e+00 - val_loss: 0.2624 - val_accuracy: 0.0000e+00\n",
            "Epoch 16/100\n",
            "1/1 [==============================] - 0s 36ms/step - loss: 0.3606 - accuracy: 0.0000e+00 - val_loss: 0.2539 - val_accuracy: 0.0000e+00\n",
            "Epoch 17/100\n",
            "1/1 [==============================] - 0s 37ms/step - loss: 0.3503 - accuracy: 0.0000e+00 - val_loss: 0.2455 - val_accuracy: 0.0000e+00\n",
            "Epoch 18/100\n",
            "1/1 [==============================] - 0s 34ms/step - loss: 0.3401 - accuracy: 0.0000e+00 - val_loss: 0.2371 - val_accuracy: 0.0000e+00\n",
            "Epoch 19/100\n",
            "1/1 [==============================] - 0s 36ms/step - loss: 0.3301 - accuracy: 0.0000e+00 - val_loss: 0.2289 - val_accuracy: 0.0000e+00\n",
            "Epoch 20/100\n",
            "1/1 [==============================] - 0s 34ms/step - loss: 0.3201 - accuracy: 0.0000e+00 - val_loss: 0.2207 - val_accuracy: 0.0000e+00\n",
            "Epoch 21/100\n",
            "1/1 [==============================] - 0s 35ms/step - loss: 0.3102 - accuracy: 0.0000e+00 - val_loss: 0.2127 - val_accuracy: 0.0000e+00\n",
            "Epoch 22/100\n",
            "1/1 [==============================] - 0s 32ms/step - loss: 0.3004 - accuracy: 0.0000e+00 - val_loss: 0.2047 - val_accuracy: 0.0000e+00\n",
            "Epoch 23/100\n",
            "1/1 [==============================] - 0s 35ms/step - loss: 0.2907 - accuracy: 0.0000e+00 - val_loss: 0.1969 - val_accuracy: 0.0000e+00\n",
            "Epoch 24/100\n",
            "1/1 [==============================] - 0s 33ms/step - loss: 0.2812 - accuracy: 0.0000e+00 - val_loss: 0.1892 - val_accuracy: 0.0000e+00\n",
            "Epoch 25/100\n",
            "1/1 [==============================] - 0s 32ms/step - loss: 0.2717 - accuracy: 0.0000e+00 - val_loss: 0.1816 - val_accuracy: 0.0000e+00\n",
            "Epoch 26/100\n",
            "1/1 [==============================] - 0s 33ms/step - loss: 0.2623 - accuracy: 0.0000e+00 - val_loss: 0.1741 - val_accuracy: 0.0000e+00\n",
            "Epoch 27/100\n",
            "1/1 [==============================] - 0s 35ms/step - loss: 0.2531 - accuracy: 0.0000e+00 - val_loss: 0.1667 - val_accuracy: 0.0000e+00\n",
            "Epoch 28/100\n",
            "1/1 [==============================] - 0s 33ms/step - loss: 0.2440 - accuracy: 0.0000e+00 - val_loss: 0.1595 - val_accuracy: 0.0000e+00\n",
            "Epoch 29/100\n",
            "1/1 [==============================] - 0s 41ms/step - loss: 0.2350 - accuracy: 0.0000e+00 - val_loss: 0.1524 - val_accuracy: 0.0000e+00\n",
            "Epoch 30/100\n",
            "1/1 [==============================] - 0s 33ms/step - loss: 0.2262 - accuracy: 0.0000e+00 - val_loss: 0.1454 - val_accuracy: 0.0000e+00\n",
            "Epoch 31/100\n",
            "1/1 [==============================] - 0s 35ms/step - loss: 0.2174 - accuracy: 0.0000e+00 - val_loss: 0.1385 - val_accuracy: 0.0000e+00\n",
            "Epoch 32/100\n",
            "1/1 [==============================] - 0s 33ms/step - loss: 0.2089 - accuracy: 0.0000e+00 - val_loss: 0.1318 - val_accuracy: 0.0000e+00\n",
            "Epoch 33/100\n",
            "1/1 [==============================] - 0s 60ms/step - loss: 0.2004 - accuracy: 0.0000e+00 - val_loss: 0.1252 - val_accuracy: 0.0000e+00\n",
            "Epoch 34/100\n",
            "1/1 [==============================] - 0s 36ms/step - loss: 0.1921 - accuracy: 0.0000e+00 - val_loss: 0.1188 - val_accuracy: 0.0000e+00\n",
            "Epoch 35/100\n",
            "1/1 [==============================] - 0s 39ms/step - loss: 0.1840 - accuracy: 0.0000e+00 - val_loss: 0.1126 - val_accuracy: 0.0000e+00\n",
            "Epoch 36/100\n",
            "1/1 [==============================] - 0s 38ms/step - loss: 0.1760 - accuracy: 0.0000e+00 - val_loss: 0.1064 - val_accuracy: 0.0000e+00\n",
            "Epoch 37/100\n",
            "1/1 [==============================] - 0s 34ms/step - loss: 0.1681 - accuracy: 0.0000e+00 - val_loss: 0.1005 - val_accuracy: 0.0000e+00\n",
            "Epoch 38/100\n",
            "1/1 [==============================] - 0s 40ms/step - loss: 0.1604 - accuracy: 0.0000e+00 - val_loss: 0.0947 - val_accuracy: 0.0000e+00\n",
            "Epoch 39/100\n",
            "1/1 [==============================] - 0s 33ms/step - loss: 0.1529 - accuracy: 0.0000e+00 - val_loss: 0.0891 - val_accuracy: 0.0000e+00\n",
            "Epoch 40/100\n",
            "1/1 [==============================] - 0s 37ms/step - loss: 0.1456 - accuracy: 0.0000e+00 - val_loss: 0.0836 - val_accuracy: 0.0000e+00\n",
            "Epoch 41/100\n",
            "1/1 [==============================] - 0s 34ms/step - loss: 0.1384 - accuracy: 0.0000e+00 - val_loss: 0.0783 - val_accuracy: 0.0000e+00\n",
            "Epoch 42/100\n",
            "1/1 [==============================] - 0s 32ms/step - loss: 0.1314 - accuracy: 0.0000e+00 - val_loss: 0.0732 - val_accuracy: 0.0000e+00\n",
            "Epoch 43/100\n",
            "1/1 [==============================] - 0s 33ms/step - loss: 0.1246 - accuracy: 0.0000e+00 - val_loss: 0.0683 - val_accuracy: 0.0000e+00\n",
            "Epoch 44/100\n",
            "1/1 [==============================] - 0s 35ms/step - loss: 0.1180 - accuracy: 0.0000e+00 - val_loss: 0.0635 - val_accuracy: 0.0000e+00\n",
            "Epoch 45/100\n",
            "1/1 [==============================] - 0s 38ms/step - loss: 0.1116 - accuracy: 0.0000e+00 - val_loss: 0.0590 - val_accuracy: 0.0000e+00\n",
            "Epoch 46/100\n",
            "1/1 [==============================] - 0s 33ms/step - loss: 0.1054 - accuracy: 0.0000e+00 - val_loss: 0.0546 - val_accuracy: 0.0000e+00\n",
            "Epoch 47/100\n",
            "1/1 [==============================] - 0s 33ms/step - loss: 0.0993 - accuracy: 0.0000e+00 - val_loss: 0.0504 - val_accuracy: 0.0000e+00\n",
            "Epoch 48/100\n",
            "1/1 [==============================] - 0s 33ms/step - loss: 0.0935 - accuracy: 0.0000e+00 - val_loss: 0.0459 - val_accuracy: 0.0000e+00\n",
            "Epoch 49/100\n",
            "1/1 [==============================] - 0s 41ms/step - loss: 0.0876 - accuracy: 0.0000e+00 - val_loss: 0.0415 - val_accuracy: 0.0000e+00\n",
            "Epoch 50/100\n",
            "1/1 [==============================] - 0s 34ms/step - loss: 0.0814 - accuracy: 0.0000e+00 - val_loss: 0.0371 - val_accuracy: 0.0000e+00\n",
            "Epoch 51/100\n",
            "1/1 [==============================] - 0s 33ms/step - loss: 0.0751 - accuracy: 0.0000e+00 - val_loss: 0.0329 - val_accuracy: 0.0000e+00\n",
            "Epoch 52/100\n",
            "1/1 [==============================] - 0s 33ms/step - loss: 0.0689 - accuracy: 0.0000e+00 - val_loss: 0.0290 - val_accuracy: 0.0000e+00\n",
            "Epoch 53/100\n",
            "1/1 [==============================] - 0s 33ms/step - loss: 0.0629 - accuracy: 0.0000e+00 - val_loss: 0.0253 - val_accuracy: 0.0000e+00\n",
            "Epoch 54/100\n",
            "1/1 [==============================] - 0s 36ms/step - loss: 0.0572 - accuracy: 0.0000e+00 - val_loss: 0.0219 - val_accuracy: 0.0000e+00\n",
            "Epoch 55/100\n",
            "1/1 [==============================] - 0s 34ms/step - loss: 0.0518 - accuracy: 0.0000e+00 - val_loss: 0.0187 - val_accuracy: 0.0000e+00\n",
            "Epoch 56/100\n",
            "1/1 [==============================] - 0s 35ms/step - loss: 0.0466 - accuracy: 0.0000e+00 - val_loss: 0.0159 - val_accuracy: 0.0000e+00\n",
            "Epoch 57/100\n",
            "1/1 [==============================] - 0s 47ms/step - loss: 0.0418 - accuracy: 0.0000e+00 - val_loss: 0.0134 - val_accuracy: 0.0000e+00\n",
            "Epoch 58/100\n",
            "1/1 [==============================] - 0s 33ms/step - loss: 0.0373 - accuracy: 0.0000e+00 - val_loss: 0.0112 - val_accuracy: 0.0000e+00\n",
            "Epoch 59/100\n",
            "1/1 [==============================] - 0s 36ms/step - loss: 0.0332 - accuracy: 0.0000e+00 - val_loss: 0.0093 - val_accuracy: 0.0000e+00\n",
            "Epoch 60/100\n",
            "1/1 [==============================] - 0s 33ms/step - loss: 0.0295 - accuracy: 0.0000e+00 - val_loss: 0.0078 - val_accuracy: 0.0000e+00\n",
            "Epoch 61/100\n",
            "1/1 [==============================] - 0s 36ms/step - loss: 0.0261 - accuracy: 0.0000e+00 - val_loss: 0.0065 - val_accuracy: 0.0000e+00\n",
            "Epoch 62/100\n",
            "1/1 [==============================] - 0s 35ms/step - loss: 0.0230 - accuracy: 0.0000e+00 - val_loss: 0.0056 - val_accuracy: 0.0000e+00\n",
            "Epoch 63/100\n",
            "1/1 [==============================] - 0s 36ms/step - loss: 0.0203 - accuracy: 0.0000e+00 - val_loss: 0.0049 - val_accuracy: 0.0000e+00\n",
            "Epoch 64/100\n",
            "1/1 [==============================] - 0s 32ms/step - loss: 0.0179 - accuracy: 0.0000e+00 - val_loss: 0.0045 - val_accuracy: 0.0000e+00\n",
            "Epoch 65/100\n",
            "1/1 [==============================] - 0s 35ms/step - loss: 0.0159 - accuracy: 0.0000e+00 - val_loss: 0.0043 - val_accuracy: 0.0000e+00\n",
            "Epoch 66/100\n",
            "1/1 [==============================] - 0s 35ms/step - loss: 0.0141 - accuracy: 0.0000e+00 - val_loss: 0.0043 - val_accuracy: 0.0000e+00\n",
            "Epoch 67/100\n",
            "1/1 [==============================] - 0s 37ms/step - loss: 0.0127 - accuracy: 0.0000e+00 - val_loss: 0.0045 - val_accuracy: 0.0000e+00\n",
            "Epoch 68/100\n",
            "1/1 [==============================] - 0s 35ms/step - loss: 0.0115 - accuracy: 0.0000e+00 - val_loss: 0.0049 - val_accuracy: 0.0000e+00\n",
            "Epoch 69/100\n",
            "1/1 [==============================] - 0s 32ms/step - loss: 0.0105 - accuracy: 0.0000e+00 - val_loss: 0.0054 - val_accuracy: 0.0000e+00\n",
            "Epoch 70/100\n",
            "1/1 [==============================] - 0s 37ms/step - loss: 0.0098 - accuracy: 0.0000e+00 - val_loss: 0.0061 - val_accuracy: 0.0000e+00\n",
            "Epoch 71/100\n",
            "1/1 [==============================] - 0s 45ms/step - loss: 0.0092 - accuracy: 0.0000e+00 - val_loss: 0.0068 - val_accuracy: 0.0000e+00\n",
            "Epoch 72/100\n",
            "1/1 [==============================] - 0s 34ms/step - loss: 0.0088 - accuracy: 0.0000e+00 - val_loss: 0.0076 - val_accuracy: 0.0000e+00\n",
            "Epoch 73/100\n",
            "1/1 [==============================] - 0s 33ms/step - loss: 0.0086 - accuracy: 0.0000e+00 - val_loss: 0.0084 - val_accuracy: 0.0000e+00\n",
            "Epoch 74/100\n",
            "1/1 [==============================] - 0s 35ms/step - loss: 0.0085 - accuracy: 0.0000e+00 - val_loss: 0.0093 - val_accuracy: 0.0000e+00\n",
            "Epoch 75/100\n",
            "1/1 [==============================] - 0s 36ms/step - loss: 0.0084 - accuracy: 0.0000e+00 - val_loss: 0.0101 - val_accuracy: 0.0000e+00\n",
            "Epoch 76/100\n",
            "1/1 [==============================] - 0s 35ms/step - loss: 0.0085 - accuracy: 0.0000e+00 - val_loss: 0.0109 - val_accuracy: 0.0000e+00\n",
            "Epoch 77/100\n",
            "1/1 [==============================] - 0s 39ms/step - loss: 0.0086 - accuracy: 0.0000e+00 - val_loss: 0.0116 - val_accuracy: 0.0000e+00\n",
            "Epoch 78/100\n",
            "1/1 [==============================] - 0s 34ms/step - loss: 0.0087 - accuracy: 0.0000e+00 - val_loss: 0.0123 - val_accuracy: 0.0000e+00\n",
            "Epoch 79/100\n",
            "1/1 [==============================] - 0s 34ms/step - loss: 0.0089 - accuracy: 0.0000e+00 - val_loss: 0.0129 - val_accuracy: 0.0000e+00\n",
            "Epoch 80/100\n",
            "1/1 [==============================] - 0s 44ms/step - loss: 0.0090 - accuracy: 0.0000e+00 - val_loss: 0.0135 - val_accuracy: 0.0000e+00\n",
            "Epoch 81/100\n",
            "1/1 [==============================] - 0s 50ms/step - loss: 0.0092 - accuracy: 0.0000e+00 - val_loss: 0.0139 - val_accuracy: 0.0000e+00\n",
            "Epoch 82/100\n",
            "1/1 [==============================] - 0s 34ms/step - loss: 0.0093 - accuracy: 0.0000e+00 - val_loss: 0.0143 - val_accuracy: 0.0000e+00\n",
            "Epoch 83/100\n",
            "1/1 [==============================] - 0s 33ms/step - loss: 0.0094 - accuracy: 0.0000e+00 - val_loss: 0.0145 - val_accuracy: 0.0000e+00\n",
            "Epoch 84/100\n",
            "1/1 [==============================] - 0s 32ms/step - loss: 0.0095 - accuracy: 0.0000e+00 - val_loss: 0.0147 - val_accuracy: 0.0000e+00\n",
            "Epoch 85/100\n",
            "1/1 [==============================] - 0s 42ms/step - loss: 0.0096 - accuracy: 0.0000e+00 - val_loss: 0.0148 - val_accuracy: 0.0000e+00\n",
            "Epoch 86/100\n",
            "1/1 [==============================] - 0s 33ms/step - loss: 0.0096 - accuracy: 0.0000e+00 - val_loss: 0.0148 - val_accuracy: 0.0000e+00\n",
            "Epoch 87/100\n",
            "1/1 [==============================] - 0s 37ms/step - loss: 0.0096 - accuracy: 0.0000e+00 - val_loss: 0.0148 - val_accuracy: 0.0000e+00\n",
            "Epoch 88/100\n",
            "1/1 [==============================] - 0s 35ms/step - loss: 0.0096 - accuracy: 0.0000e+00 - val_loss: 0.0147 - val_accuracy: 0.0000e+00\n",
            "Epoch 89/100\n",
            "1/1 [==============================] - 0s 34ms/step - loss: 0.0095 - accuracy: 0.0000e+00 - val_loss: 0.0145 - val_accuracy: 0.0000e+00\n",
            "Epoch 90/100\n",
            "1/1 [==============================] - 0s 33ms/step - loss: 0.0095 - accuracy: 0.0000e+00 - val_loss: 0.0143 - val_accuracy: 0.0000e+00\n",
            "Epoch 91/100\n",
            "1/1 [==============================] - 0s 43ms/step - loss: 0.0094 - accuracy: 0.0000e+00 - val_loss: 0.0140 - val_accuracy: 0.0000e+00\n",
            "Epoch 92/100\n",
            "1/1 [==============================] - 0s 34ms/step - loss: 0.0093 - accuracy: 0.0000e+00 - val_loss: 0.0137 - val_accuracy: 0.0000e+00\n",
            "Epoch 93/100\n",
            "1/1 [==============================] - 0s 35ms/step - loss: 0.0092 - accuracy: 0.0000e+00 - val_loss: 0.0134 - val_accuracy: 0.0000e+00\n",
            "Epoch 94/100\n",
            "1/1 [==============================] - 0s 38ms/step - loss: 0.0091 - accuracy: 0.0000e+00 - val_loss: 0.0131 - val_accuracy: 0.0000e+00\n",
            "Epoch 95/100\n",
            "1/1 [==============================] - 0s 38ms/step - loss: 0.0090 - accuracy: 0.0000e+00 - val_loss: 0.0128 - val_accuracy: 0.0000e+00\n",
            "Epoch 96/100\n",
            "1/1 [==============================] - 0s 38ms/step - loss: 0.0090 - accuracy: 0.0000e+00 - val_loss: 0.0124 - val_accuracy: 0.0000e+00\n",
            "Epoch 97/100\n",
            "1/1 [==============================] - 0s 33ms/step - loss: 0.0089 - accuracy: 0.0000e+00 - val_loss: 0.0121 - val_accuracy: 0.0000e+00\n",
            "Epoch 98/100\n",
            "1/1 [==============================] - 0s 38ms/step - loss: 0.0088 - accuracy: 0.0000e+00 - val_loss: 0.0117 - val_accuracy: 0.0000e+00\n",
            "Epoch 99/100\n",
            "1/1 [==============================] - 0s 40ms/step - loss: 0.0087 - accuracy: 0.0000e+00 - val_loss: 0.0114 - val_accuracy: 0.0000e+00\n",
            "Epoch 100/100\n",
            "1/1 [==============================] - 0s 46ms/step - loss: 0.0086 - accuracy: 0.0000e+00 - val_loss: 0.0111 - val_accuracy: 0.0000e+00\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "#評估準確率\n",
        "scores = model.evaluate(test_data, test_label)\n",
        "print(scores)\n",
        "print('\\n準確率=',scores[1])"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "cyl2Vu6FiBm2",
        "outputId": "3c7af94f-59ce-4416-e8c4-65bb975f269b"
      },
      "execution_count": 26,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "1/1 [==============================] - 0s 24ms/step - loss: 0.0201 - accuracy: 1.0000\n",
            "[0.020111292600631714, 1.0]\n",
            "\n",
            "準確率= 1.0\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "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# 顯示圖片"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 265
        },
        "id": "I2MkPN192qfs",
        "outputId": "d752519e-421a-4f13-c51b-2c2d45501146"
      },
      "execution_count": 27,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ],
            "image/png": "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\n"
          },
          "metadata": {
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "import numpy as np\n",
        "\n",
        "# 建立欲預測的資料\n",
        "data_predict = np.array([[160], [170.8]])\n",
        "\n",
        "# 資料正規化與預測資料\n",
        "data_predict = data_predict/max(train_tem_data)\n",
        "tem = model.predict(data_predict)\t# 得出預測值\n",
        "tem = tem * max(label)\t\t# 還原標籤資料\n",
        "print(tem)\t\t\t# 顯示標籤資料"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "U3ujIXJD2s0D",
        "outputId": "7d4815d2-6f9c-4d27-aa73-3b2efaac2316"
      },
      "execution_count": 28,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "[[56.88677359]\n",
            " [59.00469732]]\n"
          ]
        }
      ]
    }
  ]
}