{ "nbformat": 4, "nbformat_minor": 0, "metadata": { "kernelspec": { "display_name": "TensorFlow 2.3 on Python 3.6 (CUDA 10.1)", "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.6.9" }, "colab": { "name": "9-3.regression_in_keras.ipynb", "provenance": [] }, "accelerator": "GPU" }, "cells": [ { "cell_type": "markdown", "metadata": { "id": "UpXTEaeLzrnO" }, "source": [ "# 케라스로 만드는 회귀 예제\n", "\n", "매사추세츠 보스턴 지역의 주택 가격 예측하기" ] }, { "cell_type": "markdown", "metadata": { "id": "VN3WDCrAzrnW" }, "source": [ "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/rickiepark/dl-illustrated/blob/master/notebooks/9-3.regression_in_keras.ipynb)" ] }, { "cell_type": "markdown", "metadata": { "id": "uFI37QNkzrnW" }, "source": [ "#### 라이브러리를 적재합니다." ] }, { "cell_type": "code", "metadata": { "id": "qBzBQb-szrnW" }, "source": [ "import numpy as np\n", "from tensorflow.keras.datasets import boston_housing\n", "from tensorflow.keras.models import Sequential\n", "from tensorflow.keras.layers import Dense, Dropout \n", "from tensorflow.keras.layers import BatchNormalization " ], "execution_count": 1, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "5AZDseSwzrnX" }, "source": [ "#### 데이터를 적재합니다." ] }, { "cell_type": "code", "metadata": { "id": "DZZvCNg3zrnX", "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "d729ec9e-d563-4827-edc0-3b498dba5ceb" }, "source": [ "(X_train, y_train), (X_valid, y_valid) = boston_housing.load_data()" ], "execution_count": 2, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/boston_housing.npz\n", "57026/57026 [==============================] - 0s 0us/step\n" ] } ] }, { "cell_type": "code", "metadata": { "id": "tvr-XETbzrnX", "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "91e4654e-750f-4795-95e7-d9a10c661006" }, "source": [ "X_train.shape" ], "execution_count": 3, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "(404, 13)" ] }, "metadata": {}, "execution_count": 3 } ] }, { "cell_type": "code", "metadata": { "id": "snbtcHYozrnY", "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "941a8897-e994-4c96-a255-67e608fcd070" }, "source": [ "X_valid.shape" ], "execution_count": 4, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "(102, 13)" ] }, "metadata": {}, "execution_count": 4 } ] }, { "cell_type": "code", "metadata": { "id": "JwaxiBmlzrnY", "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "b5d549ec-e365-471c-e2c1-3e44fb9a2604" }, "source": [ "X_train[0]" ], "execution_count": 5, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "array([ 1.23247, 0. , 8.14 , 0. , 0.538 , 6.142 ,\n", " 91.7 , 3.9769 , 4. , 307. , 21. , 396.9 ,\n", " 18.72 ])" ] }, "metadata": {}, "execution_count": 5 } ] }, { "cell_type": "code", "metadata": { "id": "d95L3aOezrnZ", "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "8ffe19f0-3925-4d27-c440-08dede56adf0" }, "source": [ "y_train[0]" ], "execution_count": 6, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "15.2" ] }, "metadata": {}, "execution_count": 6 } ] }, { "cell_type": "markdown", "metadata": { "id": "e73SbGiKzrnZ" }, "source": [ "#### 신경망을 만듭니다." ] }, { "cell_type": "code", "metadata": { "id": "trObx-ftzrnZ" }, "source": [ "model = Sequential()\n", "\n", "model.add(Dense(32, input_dim=13, activation='relu'))\n", "model.add(BatchNormalization())\n", "\n", "model.add(Dense(16, activation='relu'))\n", "model.add(BatchNormalization())\n", "model.add(Dropout(0.2))\n", "\n", "model.add(Dense(1, activation='linear'))" ], "execution_count": 7, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "HabREuUkzrna", "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "0a2c817d-8dcc-4dcb-c40e-6bbe9d6517cc" }, "source": [ "model.summary()" ], "execution_count": 8, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Model: \"sequential\"\n", "_________________________________________________________________\n", " Layer (type) Output Shape Param # \n", "=================================================================\n", " dense (Dense) (None, 32) 448 \n", " \n", " batch_normalization (BatchN (None, 32) 128 \n", " ormalization) \n", " \n", " dense_1 (Dense) (None, 16) 528 \n", " \n", " batch_normalization_1 (Batc (None, 16) 64 \n", " hNormalization) \n", " \n", " dropout (Dropout) (None, 16) 0 \n", " \n", " dense_2 (Dense) (None, 1) 17 \n", " \n", "=================================================================\n", "Total params: 1,185\n", "Trainable params: 1,089\n", "Non-trainable params: 96\n", "_________________________________________________________________\n" ] } ] }, { "cell_type": "markdown", "metadata": { "id": "6FF2nyQ6zrna" }, "source": [ "#### 모델을 설정합니다." ] }, { "cell_type": "code", "metadata": { "id": "Tm5zaQifzrna" }, "source": [ "model.compile(loss='mean_squared_error', optimizer='adam')" ], "execution_count": 9, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "CCebUVgXzrna" }, "source": [ "#### 훈련!" ] }, { "cell_type": "code", "metadata": { "id": "LyjT4M-czrnb", "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "0dd81f1a-0f44-470b-93ff-f2b51acb598b" }, "source": [ "model.fit(X_train, y_train, \n", " batch_size=8, epochs=32, verbose=1, \n", " validation_data=(X_valid, y_valid))" ], "execution_count": 10, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Epoch 1/32\n", "51/51 [==============================] - 4s 12ms/step - loss: 579.8355 - val_loss: 443.8278\n", "Epoch 2/32\n", "51/51 [==============================] - 0s 8ms/step - loss: 560.0992 - val_loss: 483.1794\n", "Epoch 3/32\n", "51/51 [==============================] - 0s 8ms/step - loss: 543.0685 - val_loss: 469.9540\n", "Epoch 4/32\n", "51/51 [==============================] - 0s 7ms/step - loss: 521.0295 - val_loss: 465.4912\n", "Epoch 5/32\n", "51/51 [==============================] - 0s 8ms/step - loss: 501.8672 - val_loss: 455.2636\n", "Epoch 6/32\n", "51/51 [==============================] - 0s 8ms/step - loss: 473.1227 - val_loss: 435.2798\n", "Epoch 7/32\n", "51/51 [==============================] - 0s 9ms/step - loss: 446.5820 - val_loss: 424.8003\n", "Epoch 8/32\n", "51/51 [==============================] - 0s 8ms/step - loss: 413.9762 - val_loss: 409.0033\n", "Epoch 9/32\n", "51/51 [==============================] - 0s 8ms/step - loss: 379.3524 - val_loss: 358.2756\n", "Epoch 10/32\n", "51/51 [==============================] - 0s 7ms/step - loss: 339.5614 - val_loss: 315.7754\n", "Epoch 11/32\n", "51/51 [==============================] - 0s 7ms/step - loss: 293.6695 - val_loss: 254.9101\n", "Epoch 12/32\n", "51/51 [==============================] - 0s 7ms/step - loss: 258.0252 - val_loss: 261.8799\n", "Epoch 13/32\n", "51/51 [==============================] - 0s 5ms/step - loss: 209.6821 - val_loss: 217.7905\n", "Epoch 14/32\n", "51/51 [==============================] - 0s 4ms/step - loss: 179.9783 - val_loss: 179.9889\n", "Epoch 15/32\n", "51/51 [==============================] - 0s 8ms/step - loss: 149.2293 - val_loss: 143.5271\n", "Epoch 16/32\n", "51/51 [==============================] - 0s 5ms/step - loss: 123.8661 - val_loss: 248.8328\n", "Epoch 17/32\n", "51/51 [==============================] - 0s 4ms/step - loss: 93.4710 - val_loss: 162.2863\n", "Epoch 18/32\n", "51/51 [==============================] - 0s 4ms/step - loss: 79.5144 - val_loss: 154.6616\n", "Epoch 19/32\n", "51/51 [==============================] - 0s 4ms/step - loss: 63.8505 - val_loss: 90.0440\n", "Epoch 20/32\n", "51/51 [==============================] - 0s 5ms/step - loss: 58.4107 - val_loss: 84.3149\n", "Epoch 21/32\n", "51/51 [==============================] - 0s 5ms/step - loss: 59.3938 - val_loss: 91.1221\n", "Epoch 22/32\n", "51/51 [==============================] - 0s 5ms/step - loss: 49.0404 - val_loss: 31.6145\n", "Epoch 23/32\n", "51/51 [==============================] - 0s 5ms/step - loss: 46.7913 - val_loss: 42.7062\n", "Epoch 24/32\n", "51/51 [==============================] - 0s 4ms/step - loss: 45.1807 - val_loss: 39.2975\n", "Epoch 25/32\n", "51/51 [==============================] - 0s 5ms/step - loss: 41.6249 - val_loss: 46.8431\n", "Epoch 26/32\n", "51/51 [==============================] - 0s 4ms/step - loss: 49.3840 - val_loss: 31.6878\n", "Epoch 27/32\n", "51/51 [==============================] - 0s 4ms/step - loss: 43.3416 - val_loss: 46.2134\n", "Epoch 28/32\n", "51/51 [==============================] - 0s 4ms/step - loss: 41.7307 - val_loss: 27.0634\n", "Epoch 29/32\n", "51/51 [==============================] - 0s 5ms/step - loss: 43.3982 - val_loss: 35.7756\n", "Epoch 30/32\n", "51/51 [==============================] - 0s 4ms/step - loss: 41.0184 - val_loss: 26.2336\n", "Epoch 31/32\n", "51/51 [==============================] - 0s 5ms/step - loss: 38.7970 - val_loss: 54.1452\n", "Epoch 32/32\n", "51/51 [==============================] - 0s 4ms/step - loss: 42.0810 - val_loss: 27.2458\n" ] }, { "output_type": "execute_result", "data": { "text/plain": [ "" ] }, "metadata": {}, "execution_count": 10 } ] }, { "cell_type": "code", "metadata": { "id": "rJkI2p1Dzrnb", "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "d225c801-4ab2-418b-a6cb-2642094007d4" }, "source": [ "X_valid[42]" ], "execution_count": 11, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "array([ 9.32909, 0. , 18.1 , 0. , 0.713 , 6.185 ,\n", " 98.7 , 2.2616 , 24. , 666. , 20.2 , 396.9 ,\n", " 18.13 ])" ] }, "metadata": {}, "execution_count": 11 } ] }, { "cell_type": "code", "metadata": { "id": "DxL1_WQqzrnc", "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "abfbb88e-136b-4593-8812-cdef9547e627" }, "source": [ "y_valid[42]" ], "execution_count": 12, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "14.1" ] }, "metadata": {}, "execution_count": 12 } ] }, { "cell_type": "code", "metadata": { "id": "TCY9v_ejzrnc", "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "4d878489-07ac-46d5-b840-a62d8ac7c89d" }, "source": [ "model.predict(np.reshape(X_valid[42], [1, 13]))" ], "execution_count": 13, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "1/1 [==============================] - 0s 92ms/step\n" ] }, { "output_type": "execute_result", "data": { "text/plain": [ "array([[17.81344]], dtype=float32)" ] }, "metadata": {}, "execution_count": 13 } ] } ] }