-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtrash2
More file actions
1 lines (1 loc) · 66.9 KB
/
trash2
File metadata and controls
1 lines (1 loc) · 66.9 KB
1
{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"provenance":[],"authorship_tag":"ABX9TyNRRWCCaBNVfK3+4YJtX07p"},"kernelspec":{"name":"python3","display_name":"Python 3"},"language_info":{"name":"python"}},"cells":[{"cell_type":"code","execution_count":1,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"mP2Sn-wSZsMX","executionInfo":{"status":"ok","timestamp":1759215384207,"user_tz":-540,"elapsed":2331,"user":{"displayName":"박종인/컴퓨터공학부(컴퓨터공학전공)","userId":"17751348742338739673"}},"outputId":"069c9062-6b8f-4a04-dd5d-dc84043f2cd2"},"outputs":[{"output_type":"stream","name":"stdout","text":["Cloning into 'AI-class'...\n","remote: Enumerating objects: 373, done.\u001b[K\n","remote: Counting objects: 100% (89/89), done.\u001b[K\n","remote: Compressing objects: 100% (66/66), done.\u001b[K\n","remote: Total 373 (delta 66), reused 23 (delta 23), pack-reused 284 (from 1)\u001b[K\n","Receiving objects: 100% (373/373), 33.01 MiB | 27.09 MiB/s, done.\n","Resolving deltas: 100% (176/176), done.\n"]}],"source":["!git clone https://github.com/MyungKyuYi/AI-class.git"]},{"cell_type":"code","source":["import numpy as np\n","import pandas as pd\n","db = pd.read_csv(\"/content/AI-class/diabetes.csv\")"],"metadata":{"id":"5hPWKhcWZ9iL","executionInfo":{"status":"ok","timestamp":1759215424340,"user_tz":-540,"elapsed":1097,"user":{"displayName":"박종인/컴퓨터공학부(컴퓨터공학전공)","userId":"17751348742338739673"}}},"execution_count":4,"outputs":[]},{"cell_type":"code","source":["db.columns"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"ZHwHTUUIaLzS","executionInfo":{"status":"ok","timestamp":1759215432136,"user_tz":-540,"elapsed":30,"user":{"displayName":"박종인/컴퓨터공학부(컴퓨터공학전공)","userId":"17751348742338739673"}},"outputId":"8d18d1b1-7936-416a-cc9a-11f93d1f20b6"},"execution_count":5,"outputs":[{"output_type":"execute_result","data":{"text/plain":["Index(['Pregnancies', 'Glucose', 'BloodPressure', 'SkinThickness', 'Insulin',\n"," 'BMI', 'DiabetesPedigreeFunction', 'Age', 'Outcome'],\n"," dtype='object')"]},"metadata":{},"execution_count":5}]},{"cell_type":"code","source":["cols=['Pregnancies', 'Glucose', 'BloodPressure', 'SkinThickness', 'Insulin','BMI', 'DiabetesPedigreeFunction', 'Age','Outcome']\n","db = pd.read_csv(\"/content/AI-class/diabetes.csv\", header=0, names=cols).dropna()\n","\n","\n","db.head()"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":206},"id":"3iGGQ82HaTCt","executionInfo":{"status":"ok","timestamp":1759215439641,"user_tz":-540,"elapsed":105,"user":{"displayName":"박종인/컴퓨터공학부(컴퓨터공학전공)","userId":"17751348742338739673"}},"outputId":"39fa60af-04dd-41a6-e42c-4c6f507533f9"},"execution_count":6,"outputs":[{"output_type":"execute_result","data":{"text/plain":[" Pregnancies Glucose BloodPressure SkinThickness Insulin BMI \\\n","0 6 148 72 35 0 33.6 \n","1 1 85 66 29 0 26.6 \n","2 8 183 64 0 0 23.3 \n","3 1 89 66 23 94 28.1 \n","4 0 137 40 35 168 43.1 \n","\n"," DiabetesPedigreeFunction Age Outcome \n","0 0.627 50 1 \n","1 0.351 31 0 \n","2 0.672 32 1 \n","3 0.167 21 0 \n","4 2.288 33 1 "],"text/html":["\n"," <div id=\"df-7d3998b2-5c94-4bb8-a7eb-59d3a266b93c\" class=\"colab-df-container\">\n"," <div>\n","<style scoped>\n"," .dataframe tbody tr th:only-of-type {\n"," vertical-align: middle;\n"," }\n","\n"," .dataframe tbody tr th {\n"," vertical-align: top;\n"," }\n","\n"," .dataframe thead th {\n"," text-align: right;\n"," }\n","</style>\n","<table border=\"1\" class=\"dataframe\">\n"," <thead>\n"," <tr style=\"text-align: right;\">\n"," <th></th>\n"," <th>Pregnancies</th>\n"," <th>Glucose</th>\n"," <th>BloodPressure</th>\n"," <th>SkinThickness</th>\n"," <th>Insulin</th>\n"," <th>BMI</th>\n"," <th>DiabetesPedigreeFunction</th>\n"," <th>Age</th>\n"," <th>Outcome</th>\n"," </tr>\n"," </thead>\n"," <tbody>\n"," <tr>\n"," <th>0</th>\n"," <td>6</td>\n"," <td>148</td>\n"," <td>72</td>\n"," <td>35</td>\n"," <td>0</td>\n"," <td>33.6</td>\n"," <td>0.627</td>\n"," <td>50</td>\n"," <td>1</td>\n"," </tr>\n"," <tr>\n"," <th>1</th>\n"," <td>1</td>\n"," <td>85</td>\n"," <td>66</td>\n"," <td>29</td>\n"," <td>0</td>\n"," <td>26.6</td>\n"," <td>0.351</td>\n"," <td>31</td>\n"," <td>0</td>\n"," </tr>\n"," <tr>\n"," <th>2</th>\n"," <td>8</td>\n"," <td>183</td>\n"," <td>64</td>\n"," <td>0</td>\n"," <td>0</td>\n"," <td>23.3</td>\n"," <td>0.672</td>\n"," <td>32</td>\n"," <td>1</td>\n"," </tr>\n"," <tr>\n"," <th>3</th>\n"," <td>1</td>\n"," <td>89</td>\n"," <td>66</td>\n"," <td>23</td>\n"," <td>94</td>\n"," <td>28.1</td>\n"," <td>0.167</td>\n"," <td>21</td>\n"," <td>0</td>\n"," </tr>\n"," <tr>\n"," <th>4</th>\n"," <td>0</td>\n"," <td>137</td>\n"," <td>40</td>\n"," <td>35</td>\n"," <td>168</td>\n"," <td>43.1</td>\n"," <td>2.288</td>\n"," <td>33</td>\n"," <td>1</td>\n"," </tr>\n"," </tbody>\n","</table>\n","</div>\n"," <div class=\"colab-df-buttons\">\n","\n"," <div class=\"colab-df-container\">\n"," <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-7d3998b2-5c94-4bb8-a7eb-59d3a266b93c')\"\n"," title=\"Convert this dataframe to an interactive table.\"\n"," style=\"display:none;\">\n","\n"," <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n"," <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n"," </svg>\n"," </button>\n","\n"," <style>\n"," .colab-df-container {\n"," display:flex;\n"," gap: 12px;\n"," }\n","\n"," .colab-df-convert {\n"," background-color: #E8F0FE;\n"," border: none;\n"," border-radius: 50%;\n"," cursor: pointer;\n"," display: none;\n"," fill: #1967D2;\n"," height: 32px;\n"," padding: 0 0 0 0;\n"," width: 32px;\n"," }\n","\n"," .colab-df-convert:hover {\n"," background-color: #E2EBFA;\n"," box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n"," fill: #174EA6;\n"," }\n","\n"," .colab-df-buttons div {\n"," margin-bottom: 4px;\n"," }\n","\n"," [theme=dark] .colab-df-convert {\n"," background-color: #3B4455;\n"," fill: #D2E3FC;\n"," }\n","\n"," [theme=dark] .colab-df-convert:hover {\n"," background-color: #434B5C;\n"," box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n"," filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n"," fill: #FFFFFF;\n"," }\n"," </style>\n","\n"," <script>\n"," const buttonEl =\n"," document.querySelector('#df-7d3998b2-5c94-4bb8-a7eb-59d3a266b93c button.colab-df-convert');\n"," buttonEl.style.display =\n"," google.colab.kernel.accessAllowed ? 'block' : 'none';\n","\n"," async function convertToInteractive(key) {\n"," const element = document.querySelector('#df-7d3998b2-5c94-4bb8-a7eb-59d3a266b93c');\n"," const dataTable =\n"," await google.colab.kernel.invokeFunction('convertToInteractive',\n"," [key], {});\n"," if (!dataTable) return;\n","\n"," const docLinkHtml = 'Like what you see? Visit the ' +\n"," '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n"," + ' to learn more about interactive tables.';\n"," element.innerHTML = '';\n"," dataTable['output_type'] = 'display_data';\n"," await google.colab.output.renderOutput(dataTable, element);\n"," const docLink = document.createElement('div');\n"," docLink.innerHTML = docLinkHtml;\n"," element.appendChild(docLink);\n"," }\n"," </script>\n"," </div>\n","\n","\n"," <div id=\"df-b951b7e8-67a1-42bc-9c72-2ba8b9410c38\">\n"," <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-b951b7e8-67a1-42bc-9c72-2ba8b9410c38')\"\n"," title=\"Suggest charts\"\n"," style=\"display:none;\">\n","\n","<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n"," width=\"24px\">\n"," <g>\n"," <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n"," </g>\n","</svg>\n"," </button>\n","\n","<style>\n"," .colab-df-quickchart {\n"," --bg-color: #E8F0FE;\n"," --fill-color: #1967D2;\n"," --hover-bg-color: #E2EBFA;\n"," --hover-fill-color: #174EA6;\n"," --disabled-fill-color: #AAA;\n"," --disabled-bg-color: #DDD;\n"," }\n","\n"," [theme=dark] .colab-df-quickchart {\n"," --bg-color: #3B4455;\n"," --fill-color: #D2E3FC;\n"," --hover-bg-color: #434B5C;\n"," --hover-fill-color: #FFFFFF;\n"," --disabled-bg-color: #3B4455;\n"," --disabled-fill-color: #666;\n"," }\n","\n"," .colab-df-quickchart {\n"," background-color: var(--bg-color);\n"," border: none;\n"," border-radius: 50%;\n"," cursor: pointer;\n"," display: none;\n"," fill: var(--fill-color);\n"," height: 32px;\n"," padding: 0;\n"," width: 32px;\n"," }\n","\n"," .colab-df-quickchart:hover {\n"," background-color: var(--hover-bg-color);\n"," box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n"," fill: var(--button-hover-fill-color);\n"," }\n","\n"," .colab-df-quickchart-complete:disabled,\n"," .colab-df-quickchart-complete:disabled:hover {\n"," background-color: var(--disabled-bg-color);\n"," fill: var(--disabled-fill-color);\n"," box-shadow: none;\n"," }\n","\n"," .colab-df-spinner {\n"," border: 2px solid var(--fill-color);\n"," border-color: transparent;\n"," border-bottom-color: var(--fill-color);\n"," animation:\n"," spin 1s steps(1) infinite;\n"," }\n","\n"," @keyframes spin {\n"," 0% {\n"," border-color: transparent;\n"," border-bottom-color: var(--fill-color);\n"," border-left-color: var(--fill-color);\n"," }\n"," 20% {\n"," border-color: transparent;\n"," border-left-color: var(--fill-color);\n"," border-top-color: var(--fill-color);\n"," }\n"," 30% {\n"," border-color: transparent;\n"," border-left-color: var(--fill-color);\n"," border-top-color: var(--fill-color);\n"," border-right-color: var(--fill-color);\n"," }\n"," 40% {\n"," border-color: transparent;\n"," border-right-color: var(--fill-color);\n"," border-top-color: var(--fill-color);\n"," }\n"," 60% {\n"," border-color: transparent;\n"," border-right-color: var(--fill-color);\n"," }\n"," 80% {\n"," border-color: transparent;\n"," border-right-color: var(--fill-color);\n"," border-bottom-color: var(--fill-color);\n"," }\n"," 90% {\n"," border-color: transparent;\n"," border-bottom-color: var(--fill-color);\n"," }\n"," }\n","</style>\n","\n"," <script>\n"," async function quickchart(key) {\n"," const quickchartButtonEl =\n"," document.querySelector('#' + key + ' button');\n"," quickchartButtonEl.disabled = true; // To prevent multiple clicks.\n"," quickchartButtonEl.classList.add('colab-df-spinner');\n"," try {\n"," const charts = await google.colab.kernel.invokeFunction(\n"," 'suggestCharts', [key], {});\n"," } catch (error) {\n"," console.error('Error during call to suggestCharts:', error);\n"," }\n"," quickchartButtonEl.classList.remove('colab-df-spinner');\n"," quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n"," }\n"," (() => {\n"," let quickchartButtonEl =\n"," document.querySelector('#df-b951b7e8-67a1-42bc-9c72-2ba8b9410c38 button');\n"," quickchartButtonEl.style.display =\n"," google.colab.kernel.accessAllowed ? 'block' : 'none';\n"," })();\n"," </script>\n"," </div>\n","\n"," </div>\n"," </div>\n"],"application/vnd.google.colaboratory.intrinsic+json":{"type":"dataframe","variable_name":"db","summary":"{\n \"name\": \"db\",\n \"rows\": 768,\n \"fields\": [\n {\n \"column\": \"Pregnancies\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 3,\n \"min\": 0,\n \"max\": 17,\n \"num_unique_values\": 17,\n \"samples\": [\n 6,\n 1,\n 3\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Glucose\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 31,\n \"min\": 0,\n \"max\": 199,\n \"num_unique_values\": 136,\n \"samples\": [\n 151,\n 101,\n 112\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"BloodPressure\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 19,\n \"min\": 0,\n \"max\": 122,\n \"num_unique_values\": 47,\n \"samples\": [\n 86,\n 46,\n 85\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"SkinThickness\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 15,\n \"min\": 0,\n \"max\": 99,\n \"num_unique_values\": 51,\n \"samples\": [\n 7,\n 12,\n 48\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Insulin\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 115,\n \"min\": 0,\n \"max\": 846,\n \"num_unique_values\": 186,\n \"samples\": [\n 52,\n 41,\n 183\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"BMI\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 7.8841603203754405,\n \"min\": 0.0,\n \"max\": 67.1,\n \"num_unique_values\": 248,\n \"samples\": [\n 19.9,\n 31.0,\n 38.1\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"DiabetesPedigreeFunction\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.33132859501277484,\n \"min\": 0.078,\n \"max\": 2.42,\n \"num_unique_values\": 517,\n \"samples\": [\n 1.731,\n 0.426,\n 0.138\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Age\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 11,\n \"min\": 21,\n \"max\": 81,\n \"num_unique_values\": 52,\n \"samples\": [\n 60,\n 47,\n 72\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Outcome\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0,\n \"min\": 0,\n \"max\": 1,\n \"num_unique_values\": 2,\n \"samples\": [\n 0,\n 1\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}"}},"metadata":{},"execution_count":6}]},{"cell_type":"code","source":["X = db.drop(columns=[\"BMI\",\"Outcome\"])\n","\n","y = db[\"BMI\"]\n"],"metadata":{"id":"EIfuiJm2aU2s","executionInfo":{"status":"ok","timestamp":1759216654590,"user_tz":-540,"elapsed":7,"user":{"displayName":"박종인/컴퓨터공학부(컴퓨터공학전공)","userId":"17751348742338739673"}}},"execution_count":65,"outputs":[]},{"cell_type":"code","source":["from sklearn.model_selection import train_test_split\n","\n","X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, stratify=None, random_state=42)"],"metadata":{"id":"tlvMAhAhaYEb","executionInfo":{"status":"ok","timestamp":1759216681747,"user_tz":-540,"elapsed":4,"user":{"displayName":"박종인/컴퓨터공학부(컴퓨터공학전공)","userId":"17751348742338739673"}}},"execution_count":66,"outputs":[]},{"cell_type":"code","source":[" from tensorflow.keras import layers, models"],"metadata":{"id":"ow7W1RtwbUir","executionInfo":{"status":"ok","timestamp":1759216682565,"user_tz":-540,"elapsed":5,"user":{"displayName":"박종인/컴퓨터공학부(컴퓨터공학전공)","userId":"17751348742338739673"}}},"execution_count":67,"outputs":[]},{"cell_type":"code","source":["#x.shape[1]은 특징의 수 이다. -> 직접 특징의 수를 세어서 적어도 됨\n","#y.shape는 최종 분류할 때 클래스의 개수이다. -> 직접 분류할 클래스의 개수를 세어서 적어도 됨\n","from tensorflow.keras.optimizers import Adam # Adam 옵티마이저를 직접 import\n","model = models.Sequential([\n"," layers.Dense(64, activation=\"relu\", input_shape=(X.shape[1],)),\n"," #layers.Dropout(0.3),\n"," layers.Dense(64, activation=\"relu\"),\n"," layers.Dense(1) # 클래스 수 맞춤\n","])\n","\n","model.compile(\n"," optimizer= \"adam\",\n"," loss=\"mse\", #회귀 문제이므로 mse 사용\n"," metrics=[\"mse\"]\n",")"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"o40cZ_J_aZvB","executionInfo":{"status":"ok","timestamp":1759216684038,"user_tz":-540,"elapsed":38,"user":{"displayName":"박종인/컴퓨터공학부(컴퓨터공학전공)","userId":"17751348742338739673"}},"outputId":"f87af5eb-ab3d-4660-b0c0-2f1168d71f1a"},"execution_count":68,"outputs":[{"output_type":"stream","name":"stderr","text":["/usr/local/lib/python3.12/dist-packages/keras/src/layers/core/dense.py:93: UserWarning: Do not pass an `input_shape`/`input_dim` argument to a layer. When using Sequential models, prefer using an `Input(shape)` object as the first layer in the model instead.\n"," super().__init__(activity_regularizer=activity_regularizer, **kwargs)\n"]}]},{"cell_type":"code","source":["print(X.shape, y.shape)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"ocIExBP7bGzj","executionInfo":{"status":"ok","timestamp":1759216684864,"user_tz":-540,"elapsed":26,"user":{"displayName":"박종인/컴퓨터공학부(컴퓨터공학전공)","userId":"17751348742338739673"}},"outputId":"afc44434-f869-49ad-9c62-412ae49404a6"},"execution_count":69,"outputs":[{"output_type":"stream","name":"stdout","text":["(768, 7) (768,)\n"]}]},{"cell_type":"code","source":["#검증 세트를 편리하게 만듬\n","history = model.fit(\n"," X_train, y_train,\n"," validation_split=0.2,\n"," epochs=50,\n"," batch_size=16,\n"," verbose=1\n",")"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"45ZdMLLgb7GL","executionInfo":{"status":"ok","timestamp":1759216699552,"user_tz":-540,"elapsed":13155,"user":{"displayName":"박종인/컴퓨터공학부(컴퓨터공학전공)","userId":"17751348742338739673"}},"outputId":"cd095765-9624-4a6b-ec8b-e05e81f5aafc"},"execution_count":70,"outputs":[{"output_type":"stream","name":"stdout","text":["Epoch 1/50\n","\u001b[1m31/31\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 10ms/step - loss: 1279.8656 - mse: 1279.8656 - val_loss: 108.4360 - val_mse: 108.4360\n","Epoch 2/50\n","\u001b[1m31/31\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 103.9387 - mse: 103.9387 - val_loss: 58.5732 - val_mse: 58.5732\n","Epoch 3/50\n","\u001b[1m31/31\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 54.7607 - mse: 54.7607 - val_loss: 50.8028 - val_mse: 50.8028\n","Epoch 4/50\n","\u001b[1m31/31\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 57.9785 - mse: 57.9785 - val_loss: 49.2515 - val_mse: 49.2515\n","Epoch 5/50\n","\u001b[1m31/31\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - loss: 47.3602 - mse: 47.3602 - val_loss: 47.4509 - val_mse: 47.4509\n","Epoch 6/50\n","\u001b[1m31/31\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 59.0583 - mse: 59.0583 - val_loss: 46.3521 - val_mse: 46.3521\n","Epoch 7/50\n","\u001b[1m31/31\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 48.4437 - mse: 48.4437 - val_loss: 48.0327 - val_mse: 48.0327\n","Epoch 8/50\n","\u001b[1m31/31\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 40.6829 - mse: 40.6829 - val_loss: 46.6168 - val_mse: 46.6168\n","Epoch 9/50\n","\u001b[1m31/31\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 42.0127 - mse: 42.0127 - val_loss: 46.9799 - val_mse: 46.9799\n","Epoch 10/50\n","\u001b[1m31/31\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 53.8234 - mse: 53.8234 - val_loss: 50.3334 - val_mse: 50.3334\n","Epoch 11/50\n","\u001b[1m31/31\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 46.3685 - mse: 46.3685 - val_loss: 43.4591 - val_mse: 43.4591\n","Epoch 12/50\n","\u001b[1m31/31\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 41.5121 - mse: 41.5121 - val_loss: 49.8373 - val_mse: 49.8373\n","Epoch 13/50\n","\u001b[1m31/31\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 38.4108 - mse: 38.4108 - val_loss: 43.4729 - val_mse: 43.4729\n","Epoch 14/50\n","\u001b[1m31/31\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 40.6320 - mse: 40.6320 - val_loss: 48.3150 - val_mse: 48.3150\n","Epoch 15/50\n","\u001b[1m31/31\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 47.1390 - mse: 47.1390 - val_loss: 46.0608 - val_mse: 46.0608\n","Epoch 16/50\n","\u001b[1m31/31\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 46.9990 - mse: 46.9990 - val_loss: 48.1569 - val_mse: 48.1569\n","Epoch 17/50\n","\u001b[1m31/31\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 45.1491 - mse: 45.1491 - val_loss: 45.5744 - val_mse: 45.5744\n","Epoch 18/50\n","\u001b[1m31/31\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 49.4136 - mse: 49.4136 - val_loss: 43.4731 - val_mse: 43.4731\n","Epoch 19/50\n","\u001b[1m31/31\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 39.8253 - mse: 39.8253 - val_loss: 44.7467 - val_mse: 44.7467\n","Epoch 20/50\n","\u001b[1m31/31\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 38.7800 - mse: 38.7800 - val_loss: 47.4460 - val_mse: 47.4460\n","Epoch 21/50\n","\u001b[1m31/31\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 43.7761 - mse: 43.7761 - val_loss: 50.4283 - val_mse: 50.4283\n","Epoch 22/50\n","\u001b[1m31/31\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 45.7463 - mse: 45.7463 - val_loss: 43.6439 - val_mse: 43.6439\n","Epoch 23/50\n","\u001b[1m31/31\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 45.3835 - mse: 45.3835 - val_loss: 44.2540 - val_mse: 44.2540\n","Epoch 24/50\n","\u001b[1m31/31\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 38.5019 - mse: 38.5019 - val_loss: 42.6688 - val_mse: 42.6688\n","Epoch 25/50\n","\u001b[1m31/31\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 40.3415 - mse: 40.3415 - val_loss: 46.5030 - val_mse: 46.5030\n","Epoch 26/50\n","\u001b[1m31/31\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 38.0651 - mse: 38.0651 - val_loss: 50.4153 - val_mse: 50.4153\n","Epoch 27/50\n","\u001b[1m31/31\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 44.6752 - mse: 44.6752 - val_loss: 42.9457 - val_mse: 42.9457\n","Epoch 28/50\n","\u001b[1m31/31\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 40.3917 - mse: 40.3917 - val_loss: 43.3057 - val_mse: 43.3057\n","Epoch 29/50\n","\u001b[1m31/31\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 43.3750 - mse: 43.3750 - val_loss: 44.4572 - val_mse: 44.4572\n","Epoch 30/50\n","\u001b[1m31/31\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 51.5403 - mse: 51.5403 - val_loss: 49.5556 - val_mse: 49.5556\n","Epoch 31/50\n","\u001b[1m31/31\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 37.6588 - mse: 37.6588 - val_loss: 46.2730 - val_mse: 46.2730\n","Epoch 32/50\n","\u001b[1m31/31\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 50.2453 - mse: 50.2453 - val_loss: 42.5915 - val_mse: 42.5915\n","Epoch 33/50\n","\u001b[1m31/31\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 42.6326 - mse: 42.6326 - val_loss: 44.0814 - val_mse: 44.0814\n","Epoch 34/50\n","\u001b[1m31/31\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 34.3523 - mse: 34.3523 - val_loss: 45.8481 - val_mse: 45.8481\n","Epoch 35/50\n","\u001b[1m31/31\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 42.1672 - mse: 42.1672 - val_loss: 53.6319 - val_mse: 53.6319\n","Epoch 36/50\n","\u001b[1m31/31\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 7ms/step - loss: 49.5166 - mse: 49.5166 - val_loss: 47.9578 - val_mse: 47.9578\n","Epoch 37/50\n","\u001b[1m31/31\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 7ms/step - loss: 34.1012 - mse: 34.1012 - val_loss: 43.2312 - val_mse: 43.2312\n","Epoch 38/50\n","\u001b[1m31/31\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 10ms/step - loss: 36.7209 - mse: 36.7209 - val_loss: 43.9435 - val_mse: 43.9435\n","Epoch 39/50\n","\u001b[1m31/31\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 7ms/step - loss: 36.1819 - mse: 36.1819 - val_loss: 44.3855 - val_mse: 44.3855\n","Epoch 40/50\n","\u001b[1m31/31\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 11ms/step - loss: 35.8952 - mse: 35.8952 - val_loss: 45.0794 - val_mse: 45.0794\n","Epoch 41/50\n","\u001b[1m31/31\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 13ms/step - loss: 39.0752 - mse: 39.0752 - val_loss: 44.4891 - val_mse: 44.4891\n","Epoch 42/50\n","\u001b[1m31/31\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 9ms/step - loss: 38.7185 - mse: 38.7185 - val_loss: 45.2434 - val_mse: 45.2434\n","Epoch 43/50\n","\u001b[1m31/31\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 10ms/step - loss: 39.3731 - mse: 39.3731 - val_loss: 44.7163 - val_mse: 44.7163\n","Epoch 44/50\n","\u001b[1m31/31\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 32.0724 - mse: 32.0724 - val_loss: 43.6631 - val_mse: 43.6631\n","Epoch 45/50\n","\u001b[1m31/31\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 11ms/step - loss: 33.2907 - mse: 33.2907 - val_loss: 45.6442 - val_mse: 45.6442\n","Epoch 46/50\n","\u001b[1m31/31\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 35.5199 - mse: 35.5199 - val_loss: 43.9186 - val_mse: 43.9186\n","Epoch 47/50\n","\u001b[1m31/31\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 39.9075 - mse: 39.9075 - val_loss: 45.7474 - val_mse: 45.7474\n","Epoch 48/50\n","\u001b[1m31/31\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - loss: 41.3813 - mse: 41.3813 - val_loss: 41.6740 - val_mse: 41.6740\n","Epoch 49/50\n","\u001b[1m31/31\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - loss: 47.0457 - mse: 47.0457 - val_loss: 42.8612 - val_mse: 42.8612\n","Epoch 50/50\n","\u001b[1m31/31\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 15ms/step - loss: 41.3370 - mse: 41.3370 - val_loss: 43.0156 - val_mse: 43.0156\n"]}]},{"cell_type":"code","source":["import numpy as np\n","y_pred = model.predict(X_test)\n","\n","y_test_class = y_test\n","y_pred_class = np.argmax(y_pred, axis=1)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"ZQHB4t70cDjy","executionInfo":{"status":"ok","timestamp":1759216701275,"user_tz":-540,"elapsed":218,"user":{"displayName":"박종인/컴퓨터공학부(컴퓨터공학전공)","userId":"17751348742338739673"}},"outputId":"80ec81d4-4ea8-4fc9-f457-b27152970123"},"execution_count":71,"outputs":[{"output_type":"stream","name":"stdout","text":["\r\u001b[1m1/5\u001b[0m \u001b[32m━━━━\u001b[0m\u001b[37m━━━━━━━━━━━━━━━━\u001b[0m \u001b[1m0s\u001b[0m 61ms/step"]},{"output_type":"stream","name":"stderr","text":["WARNING:tensorflow:5 out of the last 16 calls to <function TensorFlowTrainer.make_predict_function.<locals>.one_step_on_data_distributed at 0x794e0016dda0> triggered tf.function retracing. Tracing is expensive and the excessive number of tracings could be due to (1) creating @tf.function repeatedly in a loop, (2) passing tensors with different shapes, (3) passing Python objects instead of tensors. For (1), please define your @tf.function outside of the loop. For (2), @tf.function has reduce_retracing=True option that can avoid unnecessary retracing. For (3), please refer to https://www.tensorflow.org/guide/function#controlling_retracing and https://www.tensorflow.org/api_docs/python/tf/function for more details.\n"]},{"output_type":"stream","name":"stdout","text":["\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r\u001b[1m5/5\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 15ms/step\n"]}]},{"cell_type":"code","source":["# 학습 곡선\n","loss = history.history['loss']\n","val_loss = history.history['val_loss']\n","mse = history.history['mse']\n","val_mse = history.history['val_mse']"],"metadata":{"id":"4kJzs1xccHCu","executionInfo":{"status":"ok","timestamp":1759216799691,"user_tz":-540,"elapsed":26,"user":{"displayName":"박종인/컴퓨터공학부(컴퓨터공학전공)","userId":"17751348742338739673"}}},"execution_count":75,"outputs":[]},{"cell_type":"code","source":["import matplotlib.pyplot as plt\n","import seaborn as sns\n","\n","loss = history.history['loss']\n","val_loss = history.history['val_loss']\n","epochs = range(1, len(loss) + 1)\n","plt.plot(epochs, loss, 'y', label='Training loss')\n","plt.plot(epochs, val_loss, 'r', label='Validation loss')\n","plt.title('Training and validation loss')\n","plt.xlabel('Epochs')\n","plt.ylabel('Loss')\n","plt.legend()\n","plt.show()"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":472},"id":"xa74UO1McnM-","executionInfo":{"status":"ok","timestamp":1759216800646,"user_tz":-540,"elapsed":342,"user":{"displayName":"박종인/컴퓨터공학부(컴퓨터공학전공)","userId":"17751348742338739673"}},"outputId":"bbb4b31f-1a56-4cc3-80e0-cf7c589f20eb"},"execution_count":76,"outputs":[{"output_type":"display_data","data":{"text/plain":["<Figure size 640x480 with 1 Axes>"],"image/png":"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8GGjQYMGRv369Q232+13LM2bNzdKSkp8677wwgsGYKxbt67Cvo43depUvzLl5OQYNpvNuPLKK337MAzDeOmllwzA+O9//2sYhmGsWbPGAIzp06efctvPPfecARj79u37zTKInAk1Y4lUE7vdzu23315hfkREhO/+4cOH2b9/P126dKGwsJCffvrptNvt27cvcXFxvsddunQBvM0Wp9OtWzcaNWrke9y6dWscDofvuW63m4ULF9K7d29SU1N96zVu3JgePXqcdvvgf3xHjhxh//79XHzxxRiGwZo1ayqsf+edd/o97tKli9+xfPrpp4SGhvpqegBCQkIYNmxYpcrTt29fysrK+Oijj3zz5s+fT25uLn379j1pucvKyjhw4ACNGzcmNjaW7777rlL7OpMyH7/f4uJi9u/fz0UXXQRQ5f0ev/8LL7yQzp07++ZFR0czePBgtm7dyoYNG/zWv/3227HZbL7HVXlNHW/hwoWUlpYyfPhwvw7Td9xxBw6Hw9eM5nQ6AW9TYmFh4Um3Vd4J++OPPw5452/581HYEakm55xzjt8HSLn169dz3XXX4XQ6cTgcJCYm+jo3H99f4VTq1avn97g8+Bw6dKjKzy1/fvlzc3JyKCoqonHjxhXWO9m8k9m+fTsDBw4kPj7e1w/n0ksvBSoeX3h4eIWmmOPLA96+NCkpKURHR/ut17Rp00qVp02bNjRr1oz33nvPN++9996jVq1aXH755b55RUVFjBkzhrp162K326lVqxaJiYnk5uZW6u9yvKqU+eDBg9xzzz0kJSURERFBYmIiDRo0ACr3ejjV/k+2r/IrBLdt2+Y3//e8pk7cL1Q8TpvNRsOGDX3LGzRowIgRI/jPf/5DrVq1yMjI4OWXX/Y73r59+9KpUyf+9re/kZSURL9+/Xj//fcVfKRaqM+OSDU5/ht7udzcXC699FIcDgfjxo2jUaNGhIeH89133zFq1KhKvZGHhIScdL5hGAF9bmW43W6uuOIKDh48yKhRo2jWrBlRUVHs2rWLgQMHVji+U5WnuvXt25fHH3+c/fv3ExMTw6xZs7j55pv9rlgbNmwYU6dOZfjw4aSnp+N0OrFYLPTr1y+gH7A33XQTy5Yt4/777+f8888nOjoaj8dD9+7dg/bBHujXxck888wzDBw4kI8//pj58+dz9913M378eFasWEGdOnWIiIjgyy+/ZPHixXzyySfMmzeP9957j8svv5z58+cH7bUjNZPCjkgAffHFFxw4cICPPvqISy65xDd/y5YtJpbqmNq1axMeHn7SK3Eqc3XOunXr+Pnnn3n99de57bbbfPMXLFhwxmVKS0tj0aJFFBQU+NWUZGVlVXobffv25dFHH+XDDz8kKSmJ/Px8+vXr57fOBx98wIABA3jmmWd884qLi89oEL/KlvnQoUMsWrSIRx99lDFjxvjmb9q0qcI2qzIidlpa2knPT3kzaVpaWqW3VRXl283KyqJhw4a++aWlpWzZsoVu3br5rd+qVStatWrFQw89xLJly+jUqROTJ0/mn//8JwBWq5WuXbvStWtXnn32WZ544gkefPBBFi9eXGFbIlWhZiyRACr/Nnr8N+bS0lJeeeUVs4rkJyQkhG7dujFz5kx2797tm79582bmzp1bqeeD//EZhsELL7xwxmW66qqrcLlcTJo0yTfP7Xbz4osvVnobzZs3p1WrVrz33nu89957pKSk+IXN8rKfWJPx4osvVrgMvjrLfLLzBfD8889X2GZUVBRApcLXVVddxTfffMPy5ct9844cOcKUKVOoX78+LVq0qOyhVEm3bt2w2WxMnDjR75hee+018vLy6NmzJwD5+fm4XC6/57Zq1Qqr1UpJSQngbd470fnnnw/gW0fkTKlmRySALr74YuLi4hgwYAB33303FouFN954I6DNBVU1duxY5s+fT6dOnRgyZAhut5uXXnqJ8847j7Vr1/7mc5s1a0ajRo0YOXIku3btwuFw8OGHH1a578fxevXqRadOnXjggQfYunUrLVq04KOPPqpyf5a+ffsyZswYwsPDGTRoUIURh6+++mreeOMNnE4nLVq0YPny5SxcuNB3SX4gyuxwOLjkkkuYMGECZWVlnHPOOcyfP/+kNX3t2rUD4MEHH6Rfv36EhYXRq1cvXwg63gMPPMA777xDjx49uPvuu4mPj+f1119ny5YtfPjhhwEbbTkxMZHRo0fz6KOP0r17d6655hqysrJ45ZVX6NChg69v2ueff87QoUO58cYbOffcc3G5XLzxxhuEhITQp08fAMaNG8eXX35Jz549SUtLIycnh1deeYU6der4dbwWORMKOyIBlJCQwJw5c7jvvvt46KGHiIuL45ZbbqFr166+8V7M1q5dO+bOncvIkSN5+OGHqVu3LuPG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/vz5jBkzhrFjx7Jq1aqz7vJ21ewEkJqxROTPzGKxEBISZcoUyFGcly5dysCBA7nuuuto1aoVycnJbN26NWD7Oxmn00lSUhKrVq3yzXO73Xz3XdUuiGnevDlLly71m7d06VJatGjhexwREUGvXr2YOHEiX3zxBcuXL2fdunUAhIaG0q1bNyZMmMAPP/zA1q1b+fzzz3/HkQWGanYCqLxmxzDUjCUiUlM0adKEjz76iF69emGxWHj44Yd/s4YmUIYNG8b48eNp3LgxzZo148UXX+TQoUNVCnr3338/N910E23btqVbt27Mnj2bjz76yHd12bRp03C73XTs2JHIyEjefPNNIiIiSEtLY86cOfz6669ccsklxMXF8emnn+LxeGjatGmgDvmMKewEkGp2RERqnmeffZa//vWvXHzxxdSqVYtRo0aRn58f9HKMGjWK7OxsbrvtNkJCQhg8eDAZGRlV+mXw3r1788ILL/D0009zzz330KBBA6ZOncpll10GQGxsLE8++SQjRozA7XbTqlUrZs+eTUJCArGxsXz00UeMHTuW4uJimjRpwjvvvEPLli0DdMRnzmIEuwHwLJSfn4/T6SQvLw+Hw1Ft2/3pp9vJzp5Gw4b/ol69f1TbdkVEzkbFxcVs2bKFBg0aEB6ugVSDzePx0Lx5c2666SYee+wxs4tTbX7rdVXZz2/V7ASQxaIOyiIiEhjbtm1j/vz5XHrppZSUlPDSSy+xZcsW/u///s/sop111EE5gNSMJSIigWK1Wpk2bRodOnSgU6dOrFu3joULF9K8eXOzi3bWUc1OAGkEZRERCZS6detWuJJKTk41OwGkmh0RERHzKewEkEZQFhERMZ/CTgBpBGURERHzKewEkJqxREREzKewE0AaQVlERMR8CjsBpJodERER8ynsBJA6KIuI/DlcdtllDB8+3Pe4fv36PP/887/5HIvFwsyZM3/3vqtrO79l7NixnH/++QHdRyAp7ASQRlAWETm79erVi+7du5902VdffYXFYuGHH36o8nZXrVrF4MGDf2/x/JwqcOzZs4cePXpU675qGoWdAFIzlojI2W3QoEEsWLCAnTt3Vlg2depU2rdvT+vWrau83cTERCIjI6ujiKeVnJyM3W4Pyr7+qBR2AkgjKIuInN2uvvpqEhMTmTZtmt/8goICpk+fzqBBgzhw4AA333wz55xzDpGRkbRq1Yp33nnnN7d7YjPWpk2buOSSSwgPD6dFixYsWLCgwnNGjRrFueeeS2RkJA0bNuThhx+mrKwMgGnTpvHoo4/y/fffY7FYsFgsvjKf2Iy1bt06Lr/8ciIiIkhISGDw4MEUFBT4lg8cOJDevXvz9NNPk5KSQkJCApmZmb59VYbH42HcuHHUqVMHu93O+eefz7x583zLS0tLGTp0KCkpKYSHh5OWlsb48eMBMAyDsWPHUq9ePex2O6mpqdx9992V3veZ0M9FBJBqdkTkT80woLDQnH1HRoLFctrVQkNDue2225g2bRoPPvgglqPPmT59Om63m5tvvpmCggLatWvHqFGjcDgcfPLJJ9x66600atSICy+88LT78Hg8XH/99SQlJbFy5Ury8vL8+veUi4mJYdq0aaSmprJu3TruuOMOYmJi+Mc//kHfvn358ccfmTdvHgsXLgTA6XRW2MaRI0fIyMggPT2dVatWkZOTw9/+9jeGDh3qF+gWL15MSkoKixcvZvPmzfTt25fzzz+fO+6447THA/DCCy/wzDPP8Oqrr9K2bVv++9//cs0117B+/XqaNGnCxIkTmTVrFu+//z716tVjx44d7NixA4APP/yQ5557jnfffZeWLVuSnZ3N999/X6n9njFDjLy8PAMw8vLyqnW7hw//YCxejPH110nVul0RkbNRUVGRsWHDBqOoqMg7o6DAMLyRJ/hTQUGly71x40YDMBYvXuyb16VLF+OWW2455XN69uxp3Hfffb7Hl156qXHPPff4HqelpRnPPfecYRiG8dlnnxmhoaHGrl27fMvnzp1rAMaMGTNOuY+nnnrKaNeune/xI488YrRp06bCesdvZ8qUKUZcXJxRcNzxf/LJJ4bVajWys7MNwzCMAQMGGGlpaYbL5fKtc+ONNxp9+/Y9ZVlO3Hdqaqrx+OOP+63ToUMH46677jIMwzCGDRtmXH755YbH46mwrWeeecY499xzjdLS0lPu73gVXlfHqeznt5qxAkgjKIuInP2aNWvGxRdfzH//+18ANm/ezFdffcWgQYMAcLvdPPbYY7Rq1Yr4+Hiio6P57LPP2L59e6W2v3HjRurWrUtqaqpvXnp6eoX13nvvPTp16kRycjLR0dE89NBDld7H8ftq06YNUVFRvnmdOnXC4/GQlZXlm9eyZUtCQkJ8j1NSUsjJyanUPvLz89m9ezedOnXym9+pUyc2btwIeJvK1q5dS9OmTbn77ruZP3++b70bb7yRoqIiGjZsyB133MGMGTNwuVxVOs6qUtgJIDVjicifWmQkFBSYM1Wxc/CgQYP48MMPOXz4MFOnTqVRo0ZceumlADz11FO88MILjBo1isWLF7N27VoyMjIoLS2ttlO1fPly+vfvz1VXXcWcOXNYs2YNDz74YLXu43hhYWF+jy0WCx6Pp9q2f8EFF7BlyxYee+wxioqKuOmmm7jhhhsA76+1Z2Vl8corrxAREcFdd93FJZdcUqU+Q1WlPjsBdPwIyoZh+NqCRUT+FCwWOK6G4Wx20003cc899/D222/zv//9jyFDhvjes5cuXcq1117LLbfcAnj74Pz888+0aNGiUttu3rw5O3bsYM+ePaSkpACwYsUKv3WWLVtGWloaDz74oG/etm3b/Nax2Wy43e7T7mvatGkcOXLEV7uzdOlSrFYrTZs2rVR5T8fhcJCamsrSpUt9gbB8P8f3YXI4HPTt25e+fftyww030L17dw4ePEh8fDwRERH06tWLXr16kZmZSbNmzVi3bh0XXHBBtZTxRKbX7OzatYtbbrmFhIQEIiIiaNWqFd9++61vuWEYjBkzhpSUFCIiIujWrRubNm3y28bBgwfp378/DoeD2NhYBg0a5Nfz3CzlNTsAhhGYdC4iIr9fdHQ0ffv2ZfTo0ezZs4eBAwf6ljVp0oQFCxawbNkyNm7cyN///nf27t1b6W1369aNc889lwEDBvD999/z1Vdf+YWa8n1s376dd999l19++YWJEycyY8YMv3Xq16/Pli1bWLt2Lfv376ekpOKVvv379yc8PJwBAwbw448/snjxYoYNG8att95KUlJS1U7Kb7j//vv517/+xXvvvUdWVhYPPPAAa9eu5Z577gHg2Wef5Z133uGnn37i559/Zvr06SQnJxMbG8u0adN47bXX+PHHH/n111958803iYiIIC0trdrKdyJTw86hQ4fo1KkTYWFhzJ07lw0bNvDMM88QFxfnW2fChAlMnDiRyZMns3LlSqKiosjIyKC4+FjTUP/+/Vm/fj0LFixgzpw5fPnll9U+mNOZOD7s6PJzEZGz26BBgzh06BAZGRl+/WseeughLrjgAjIyMrjssstITk6md+/eld6u1WplxowZFBUVceGFF/K3v/2Nxx9/3G+d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f/9+rrvuOiIjI2nSpAmzZs3yLTt06BD9+/cnMTGRiIgImjRpUiGcicjZSWFHRP4QHn74Yfr06cP3339P//796devHxs3bgTgyJEjZGRkEBcXx6pVq5g+fToLFy70CzOTJk0iMzOTwYMHs27dOmbNmkXjxo399vHoo49y00038cMPP3DVVVfRv39/Dh486Nv/hg0bmDt3Lhs3bmTSpEnUqlUreCdARM5c0H5yVETkFAYMGGCEhIQYUVFRftPjjz9uGIb3F9rvvPNOv+d07NjRGDJkiGEYhjFlyhQjLi7OKCgo8C3/5JNPDKvVamRnZxuGYRipqanGgw8+eMoyAMZDDz3ke1xQUGAAxty5cw3DMIxevXoZt99+e/UcsIgElfrsiMhZ4S9/+QuTJk3ymxcfH++7n56e7rcsPT2dtWvXArBx40batGlDVFSUb3mnTp3weDxkZWVhsVjYvXs3Xbt2/c0ytG7d2nc/KioKh8NBTk4OAEOGDKFPnz589913XHnllfTu3ZuLL774jI5VRIJLYUdEzgpRUVEVmpWqS0RERKXWCwsL83tssVjweDwA9OjRg23btvHpp5+yYMECunbtSmZmJk8//XS1l1dEqpf67IjIH8KKFSsqPG7evDkAzZs35/vvv+fIkSO+5UuXLsVqtdK0aVNiYmKoX78+ixYt+l1lSExMZMCAAbz55ps8//zzTJky5XdtT0SCQzU7InJWKCkpITs7229eaGiorxPw9OnTad++PZ07d+att97im2++4bXXXgOgf//+PPLIIwwYMICxY8eyb98+hg0bxq233kpSUhIAY8eO5c4776R27dr06NGDw4cPs3TpUoYNG1ap8o0ZM4Z27drRsmVLSkpKmDNnji9sicjZTWFHRM4K8+bNIyUlxW9e06ZN+emnnwDvlVLvvvsud911FykpKbzzzju0aNECgMjISD777DPuueceOnToQGRkJH369OHZZ5/1bWvAgAEUFxfz3HPPMXLkSGrVqsUNN9xQ6fLZbDZGjx7N1q1biYiIoEuXLrz77rvVcOQiEmgWwzAMswshIvJbLBYLM2bMoHfv3mYXRUT+gNRnR0RERGo0hR0RERGp0dRnR0TOemptF5HfQzU7IiIiUqMp7IiIiEiNprAjIiIiNZrCjoiIiNRoCjsiIiJSoynsiIiISI2msCMiIiI1msKOiIiI1GgKOyIiIlKj/X/L9G+eyHDfRAAAAABJRU5ErkJggg==\n"},"metadata":{}}]},{"cell_type":"code","source":[],"metadata":{"id":"SFp5rHH6ctYw","executionInfo":{"status":"ok","timestamp":1759217096610,"user_tz":-540,"elapsed":15,"user":{"displayName":"박종인/컴퓨터공학부(컴퓨터공학전공)","userId":"17751348742338739673"}}},"execution_count":78,"outputs":[]},{"cell_type":"code","source":[],"metadata":{"id":"-iqLFYfZc5h9"},"execution_count":null,"outputs":[]}]}