diff --git "a/assignments/SolidCitadel/03-\354\240\204\355\230\204\354\244\200.ipynb" "b/assignments/SolidCitadel/03-\354\240\204\355\230\204\354\244\200.ipynb" new file mode 100644 index 0000000..c326450 --- /dev/null +++ "b/assignments/SolidCitadel/03-\354\240\204\355\230\204\354\244\200.ipynb" @@ -0,0 +1,281 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import pandas as pd\n", + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " Country name Regional indicator Ladder score \\\n", + "0 Finland Western Europe 7.842 \n", + "1 Denmark Western Europe 7.620 \n", + "2 Switzerland Western Europe 7.571 \n", + "3 Iceland Western Europe 7.554 \n", + "4 Netherlands Western Europe 7.464 \n", + ".. ... ... ... \n", + "144 Lesotho Sub-Saharan Africa 3.512 \n", + "145 Botswana Sub-Saharan Africa 3.467 \n", + "146 Rwanda Sub-Saharan Africa 3.415 \n", + "147 Zimbabwe Sub-Saharan Africa 3.145 \n", + "148 Afghanistan South Asia 2.523 \n", + "\n", + " Standard error of ladder score upperwhisker lowerwhisker \\\n", + "0 0.032 7.904 7.780 \n", + "1 0.035 7.687 7.552 \n", + "2 0.036 7.643 7.500 \n", + "3 0.059 7.670 7.438 \n", + "4 0.027 7.518 7.410 \n", + ".. ... ... ... \n", + "144 0.120 3.748 3.276 \n", + "145 0.074 3.611 3.322 \n", + "146 0.068 3.548 3.282 \n", + "147 0.058 3.259 3.030 \n", + "148 0.038 2.596 2.449 \n", + "\n", + " Logged GDP per capita Social support Healthy life expectancy \\\n", + "0 10.775 0.954 72.000 \n", + "1 10.933 0.954 72.700 \n", + "2 11.117 0.942 74.400 \n", + "3 10.878 0.983 73.000 \n", + "4 10.932 0.942 72.400 \n", + ".. ... ... ... \n", + "144 7.926 0.787 48.700 \n", + "145 9.782 0.784 59.269 \n", + "146 7.676 0.552 61.400 \n", + "147 7.943 0.750 56.201 \n", + "148 7.695 0.463 52.493 \n", + "\n", + " Freedom to make life choices Generosity Perceptions of corruption \\\n", + "0 0.949 -0.098 0.186 \n", + "1 0.946 0.030 0.179 \n", + "2 0.919 0.025 0.292 \n", + "3 0.955 0.160 0.673 \n", + "4 0.913 0.175 0.338 \n", + ".. ... ... ... \n", + "144 0.715 -0.131 0.915 \n", + "145 0.824 -0.246 0.801 \n", + "146 0.897 0.061 0.167 \n", + "147 0.677 -0.047 0.821 \n", + "148 0.382 -0.102 0.924 \n", + "\n", + " Ladder score in Dystopia Explained by: Log GDP per capita \\\n", + "0 2.43 1.446 \n", + "1 2.43 1.502 \n", + "2 2.43 1.566 \n", + "3 2.43 1.482 \n", + "4 2.43 1.501 \n", + ".. ... ... \n", + "144 2.43 0.451 \n", + "145 2.43 1.099 \n", + "146 2.43 0.364 \n", + "147 2.43 0.457 \n", + "148 2.43 0.370 \n", + "\n", + " Explained by: Social support Explained by: Healthy life expectancy \\\n", + "0 1.106 0.741 \n", + "1 1.108 0.763 \n", + "2 1.079 0.816 \n", + "3 1.172 0.772 \n", + "4 1.079 0.753 \n", + ".. ... ... \n", + "144 0.731 0.007 \n", + "145 0.724 0.340 \n", + "146 0.202 0.407 \n", + "147 0.649 0.243 \n", + "148 0.000 0.126 \n", + "\n", + " Explained by: Freedom to make life choices Explained by: Generosity \\\n", + "0 0.691 0.124 \n", + "1 0.686 0.208 \n", + "2 0.653 0.204 \n", + "3 0.698 0.293 \n", + "4 0.647 0.302 \n", + ".. ... ... \n", + "144 0.405 0.103 \n", + "145 0.539 0.027 \n", + "146 0.627 0.227 \n", + "147 0.359 0.157 \n", + "148 0.000 0.122 \n", + "\n", + " Explained by: Perceptions of corruption Dystopia + residual \n", + "0 0.481 3.253 \n", + "1 0.485 2.868 \n", + "2 0.413 2.839 \n", + "3 0.170 2.967 \n", + "4 0.384 2.798 \n", + ".. ... ... \n", + "144 0.015 1.800 \n", + "145 0.088 0.648 \n", + "146 0.493 1.095 \n", + "147 0.075 1.205 \n", + "148 0.010 1.895 \n", + "\n", + "[149 rows x 20 columns]" + ], + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Country nameRegional indicatorLadder scoreStandard error of ladder scoreupperwhiskerlowerwhiskerLogged GDP per capitaSocial supportHealthy life expectancyFreedom to make life choicesGenerosityPerceptions of corruptionLadder score in DystopiaExplained by: Log GDP per capitaExplained by: Social supportExplained by: Healthy life expectancyExplained by: Freedom to make life choicesExplained by: GenerosityExplained by: Perceptions of corruptionDystopia + residual
0FinlandWestern Europe7.8420.0327.9047.78010.7750.95472.0000.949-0.0980.1862.431.4461.1060.7410.6910.1240.4813.253
1DenmarkWestern Europe7.6200.0357.6877.55210.9330.95472.7000.9460.0300.1792.431.5021.1080.7630.6860.2080.4852.868
2SwitzerlandWestern Europe7.5710.0367.6437.50011.1170.94274.4000.9190.0250.2922.431.5661.0790.8160.6530.2040.4132.839
3IcelandWestern Europe7.5540.0597.6707.43810.8780.98373.0000.9550.1600.6732.431.4821.1720.7720.6980.2930.1702.967
4NetherlandsWestern Europe7.4640.0277.5187.41010.9320.94272.4000.9130.1750.3382.431.5011.0790.7530.6470.3020.3842.798
...............................................................
144LesothoSub-Saharan Africa3.5120.1203.7483.2767.9260.78748.7000.715-0.1310.9152.430.4510.7310.0070.4050.1030.0151.800
145BotswanaSub-Saharan Africa3.4670.0743.6113.3229.7820.78459.2690.824-0.2460.8012.431.0990.7240.3400.5390.0270.0880.648
146RwandaSub-Saharan Africa3.4150.0683.5483.2827.6760.55261.4000.8970.0610.1672.430.3640.2020.4070.6270.2270.4931.095
147ZimbabweSub-Saharan Africa3.1450.0583.2593.0307.9430.75056.2010.677-0.0470.8212.430.4570.6490.2430.3590.1570.0751.205
148AfghanistanSouth Asia2.5230.0382.5962.4497.6950.46352.4930.382-0.1020.9242.430.3700.0000.1260.0000.1220.0101.895
\n

149 rows × 20 columns

\n
" + }, + "metadata": {}, + "execution_count": 10 + } + ], + "source": [ + "df = pd.read_csv('./world-happiness-report-2021.csv')\n", + "df" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Assignment 1\n", + "행복 지수를 1점 간격으로 두고 다음과 같은 **Histogram**을 작성 해 주세요.\n", + "행복 지수의 키 값은 \"Ladder score\" 입니다." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\r\n\r\n\r\n \r\n \r\n \r\n \r\n 2021-07-12T03:20:50.267144\r\n image/svg+xml\r\n \r\n \r\n Matplotlib v3.4.2, https://matplotlib.org/\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX4AAAEWCAYAAABhffzLAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAAAsTAAALEwEAmpwYAAAVQ0lEQVR4nO3de9RddX3n8fcHgnIRCkhgwkXTadHKaItOpCrWtgKWihjqFC+rdILS4nSsxU5nnNRZs9Y4rra4qi47LJ1ZFMVUrBVFCxVHzcRia1EgXBQQLF4iKJEEELlolct3/ti/6CHJEx5C9nOeJ7/3a62zzr6dvb/7Wcnn/M7v7P07qSokSf3YZdoFSJLmlsEvSZ0x+CWpMwa/JHXG4Jekzhj8ktQZg19dSvKkJPcm2XXatUhzzeDX1CRZl+TYzZadmuRzYx+7qm6uqidU1YNjH2s2kpyW5MYk9yS5LcnFSfaedl3aOS2adgFS75L8MvCnwPFVdXWS/YETd/AxFlXVAztyn1q4bPFrXkuyMsnXWkv4y0l+Y2LdqUn+KclZSb7XWszHTKy/JMmfJbm8rb+whSpJliapJIsmtn1L2989ST6d5ICJfT0nyaVJ7kryxSS/slkdX2+v+0aS32rLfzbJZ9uxb0/yoRlO89nA56vqaoCqurOqVlXVPW0/eyR5e5Jvtn19Lskebd1Lk1zf6rokydMm6lqX5L8m+RJwX5JF2zoPdaSqfPiYygNYBxy72bJTgc9NzJ8MHMzQSHkFcB+wZGLbB4A/BHZr678H7N/WXwJ8G3g6sBdwAXBeW7cUKGDRxLZfA54C7NHmz2zrDgHuAF7c6jiuzS9u+70beGrbdgnwb9r0B4H/1l6zO/D8Gf4OvwT8AHgzcDTw+M3Wv6vVcwiwK/A84PGt1vtaPbsBbwS+Cjxu4u97DXBYO6cZz2Pa/xZ8zO3DFr+m7W9b6/OuJHcB755cWVUfrqpbq+qhqvoQcBNw1MQmG4B3VtX9bf1XgBMm1r+/qq6rqvuA/w68fBtf6J5bVf9cVT8AzgeObMtPAT5RVZ9odawG1jIEKMBDwNOT7FFV66vq+rb8fuDJwMFV9S9VtdXvLqrqH4GXAc8CLgbuSPKOJLsm2QV4DXBGVX27qh6sqkur6ocMb3QXV9XqqrofeBtDwD9vYvf/q6puaef0SOehThj8mraTqmrfTQ/gP06uTPLvk1wz8cbwdOCAiU2+XVWTIw1+k+ETwia3bLZut81eP+k7E9PfB57Qpp8MnLzZG9TzGT553McQwP8BWN++lP259ro3AgEub90xr5npj1BV/7eqTgT2B5YzfJr5nVbr7gyfRjZ3cDunTft4qJ3vITOc/4znMVNd2jkZ/Jq3kjwZ+Evg94EntjeG6xjCdJNDkkzOPwm4dWL+sM3W3Q/c/ihLuYXhk8O+E4+9qupMgKr6VFUdxxCgN7aaqarvVNXvVtXBwGuBdyf52W0dqLXE1wCfYXiTux34F+BntrL5rQxhDkD7OxzG0L31413O9jzUD4Nf89leDMG1ESDJqxnCcNKBwB8k2S3JycDTgE9MrD8lyRFJ9gT+J/CRevSXcJ4HnJjk11r3y+5JfiXJoUkOal+w7gX8ELgXeLDVe3KSQ9s+vtvOZYtjJ1me5JVJ9svgKOCXgS+0Vvx7gXckObgd/7lJHs/QHXVCkmOS7Ab8Uavh0kd7Ho/y76EFzuDXvFVVXwbeDnweuA14BvBPm212GXA4Q8v4T4DfrKo7Jta/H3gfQzfO7sAfbEcdtzB0v7yJ4U3oFuC/MPz/2YUhcG8F7mQI7E3dVc8GLktyL3ARQz/9N7ZyiO8Cv8vw/cXdDAH951X1gbb+PwPXAle0Y7wV2KWqvsLQb39WO/8TgROr6kfbcR7qSB7ePSotHElOBX6nqp4/w/pLGK7iOWcu65LmO9/pJakzBr8kdcauHknqjC1+SerMghik7YADDqilS5dOuwxJWlCuvPLK26tq8ebLF0TwL126lLVr1067DElaUJJ8c2vL7eqRpM6M2uJPsg64h+FuxQeqalkbFvdDDKMjrgNeXlXfHbMOSdJPzEWL/1er6siqWtbmVwJrqupwYE2blyTNkWl09SwHVrXpVcBJU6hBkro1dvAX8OkkVyY5vS07qKrWA7TnA7f2wiSnJ1mbZO3GjRtHLlOS+jH2VT1HV9WtSQ4EVie5cbYvrKqzgbMBli1b5l1mkrSDjNrir6pb2/MG4GMMv5x0W5IlAO15w5g1SJIebrTgT7JXkr03TQMvYvgRjYuAFW2zFcCFY9UgSdrSmF09BwEfaz+OtAj466r6ZJIrgPOTnAbczPBj2pKkOTJa8FfV14Ff2MryO4BjxjquNJOlKy+edgmztu7MEx55I2k7eeeuJHXG4Jekzhj8ktQZg1+SOmPwS1JnDH5J6ozBL0mdMfglqTMGvyR1xuCXpM4Y/JLUGYNfkjpj8EtSZwx+SeqMwS9JnTH4JakzBr8kdcbgl6TOGPyS1BmDX5I6Y/BLUmcMfknqjMEvSZ0x+CWpMwa/JHXG4Jekzhj8ktQZg1+SOmPwS1JnDH5J6ozBL0mdMfglqTMGvyR1xuCXpM6MHvxJdk1ydZKPt/n9k6xOclN73m/sGiRJPzEXLf4zgBsm5lcCa6rqcGBNm5ckzZFRgz/JocAJwDkTi5cDq9r0KuCkMWuQJD3c2C3+dwJvBB6aWHZQVa0HaM8Hbu2FSU5PsjbJ2o0bN45cpiT1Y7TgT/ISYENVXbk9r6+qs6tqWVUtW7x48Q6uTpL6tWjEfR8NvDTJi4HdgX2SnAfclmRJVa1PsgTYMGINkqTNjNbir6o/rqpDq2op8ErgM1V1CnARsKJttgK4cKwaJElbmsZ1/GcCxyW5CTiuzUuS5siYXT0/VlWXAJe06TuAY+biuJKkLXnnriR1xuCXpM4Y/JLUGYNfkjpj8EtSZwx+SeqMwS9JnTH4JakzBr8kdcbgl6TOGPyS1Jk5GatHO6elKy+edgmStoMtfknqjMEvSZ0x+CWpM/bxS/PQQvv+ZN2ZJ0y7BD0KtvglqTMGvyR1xuCXpM4Y/JLUGYNfkjpj8EtSZwx+SeqMwS9JnTH4JakzBr8kdcbgl6TOGPyS1BmDX5I6Y/BLUmcMfknqjMEvSZ0x+CWpM6MFf5Ldk1ye5ItJrk/y5rZ8/ySrk9zUnvcbqwZJ0pbGbPH/EHhhVf0CcCRwfJLnACuBNVV1OLCmzUuS5showV+De9vsbu1RwHJgVVu+CjhprBokSVsatY8/ya5JrgE2AKur6jLgoKpaD9CeD5zhtacnWZtk7caNG8csU5K6MmrwV9WDVXUkcChwVJKnP4rXnl1Vy6pq2eLFi0erUZJ6MydX9VTVXcAlwPHAbUmWALTnDXNRgyRpMOZVPYuT7Num9wCOBW4ELgJWtM1WABeOVYMkaUuLRtz3EmBVkl0Z3mDOr6qPJ/k8cH6S04CbgZNHrEGStJnRgr+qvgQ8cyvL7wCOGeu4kqRt885dSerMrII/yZrZLJMkzX/b7OpJsjuwJ3BAG1ohbdU+wMEj1yZJGsEj9fG/FngDQ8hfyU+C/27gXeOVJUkayzaDv6r+AviLJK+vqrPmqCZJ0ohmdVVPVZ2V5HnA0snXVNVfjVSXJGkkswr+JO8Hfga4BniwLS7A4JekBWa21/EvA46oqhqzGEnS+GZ7Hf91wL8asxBJ0tyYbYv/AODLSS5n+IEVAKrqpaNUJUkazWyD/3+MWYQkae7M9qqez45diCRpbsz2qp57GK7iAXgcw88o3ldV+4xVmCRpHLNt8e89OZ/kJOCoMQqSJI1ru0bnrKq/BV64Y0uRJM2F2Xb1vGxidheG6/q9pl+SFqDZXtVz4sT0A8A6YPkOr0aSNLrZ9vG/euxCJElzY7Y/xHJoko8l2ZDktiQXJDl07OIkSTvebL/cPRe4iGFc/kOAv2vLJEkLzGyDf3FVnVtVD7TH+4DFI9YlSRrJbIP/9iSnJNm1PU4B7hizMEnSOGYb/K8BXg58B1gP/CbgF76StADN9nLOtwArquq7AEn2B97G8IYgSVpAZtvi//lNoQ9QVXcCzxynJEnSmGYb/Lsk2W/TTGvxz/bTgiRpHplteL8duDTJRxiGang58CejVSVJGs1s79z9qyRrGQZmC/CyqvryqJVJkkYx6+6aFvSGvSQtcNs1LLMkaeEy+CWpMwa/JHXG4JekzowW/EkOS/L3SW5Icn2SM9ry/ZOsTnJTe97vkfYlSdpxxmzxPwD8UVU9DXgO8LokRwArgTVVdTiwps1LkubIaMFfVeur6qo2fQ9wA8NY/suBVW2zVcBJY9UgSdrSnPTxJ1nKMLbPZcBBVbUehjcH4MAZXnN6krVJ1m7cuHEuypSkLowe/EmeAFwAvKGq7p7t66rq7KpaVlXLFi/2N18kaUcZNfiT7MYQ+h+oqo+2xbclWdLWLwE2jFmDJOnhxryqJ8B7gBuq6h0Tqy4CVrTpFcCFY9UgSdrSmEMrHw38NnBtkmvasjcBZwLnJzkNuBk4ecQaJEmbGS34q+pzDCN5bs0xYx1XkrRt3rkrSZ0x+CWpMwa/JHXG4Jekzhj8ktQZg1+SOmPwS1JnxryBS1Inlq68eNolzNq6M0+YdglTZ4tfkjpj8EtSZwx+SeqMwS9JnTH4JakzBr8kdcbgl6TOGPyS1BmDX5I6Y/BLUmcMfknqjMEvSZ0x+CWpMwa/JHXG4Jekzhj8ktQZg1+SOmPwS1JnDH5J6ozBL0mdMfglqTMGvyR1xuCXpM4Y/JLUmUXTLkAPt3TlxdMuQdJObrQWf5L3JtmQ5LqJZfsnWZ3kpva831jHlyRt3ZhdPe8Djt9s2UpgTVUdDqxp85KkOTRa8FfVPwB3brZ4ObCqTa8CThrr+JKkrZvrL3cPqqr1AO35wDk+viR1b95e1ZPk9CRrk6zduHHjtMuRpJ3GXAf/bUmWALTnDTNtWFVnV9Wyqlq2ePHiOStQknZ2cx38FwEr2vQK4MI5Pr4kdW/Myzk/CHweeGqSbyU5DTgTOC7JTcBxbV6SNIdGu4Grql41w6pjxjqmJOmRzdsvdyVJ4zD4JakzBr8kdcbgl6TOGPyS1BmDX5I6Y/BLUmcMfknqjMEvSZ0x+CWpMwa/JHXG4Jekzhj8ktQZg1+SOmPwS1JnDH5J6ozBL0mdMfglqTMGvyR1xuCXpM4Y/JLUGYNfkjpj8EtSZwx+SeqMwS9JnTH4JakzBr8kdcbgl6TOGPyS1BmDX5I6Y/BLUmcMfknqjMEvSZ1ZNO0CxrZ05cXTLkGS5pWptPiTHJ/kK0m+mmTlNGqQpF7NefAn2RV4F/DrwBHAq5IcMdd1SFKvptHiPwr4alV9vap+BPwNsHwKdUhSl6bRx38IcMvE/LeAX9x8oySnA6e32XuTfGU7j3cAcPt2vnYaFlK9C6lWWFj1LqRaYQHVm7cunFqbx1Lvk7e2cBrBn60sqy0WVJ0NnP2YD5asraplj3U/c2Uh1buQaoWFVe9CqhUWVr0LqVYYp95pdPV8CzhsYv5Q4NYp1CFJXZpG8F8BHJ7kp5M8DnglcNEU6pCkLs15V09VPZDk94FPAbsC762q60c85GPuLppjC6nehVQrLKx6F1KtsLDqXUi1wgj1pmqL7nVJ0k7MIRskqTMGvyR1ZqcN/iSHJfn7JDckuT7JGdOuaSZJdk9yeZIvtlrfPO2aHkmSXZNcneTj067lkSRZl+TaJNckWTvteh5Jkn2TfCTJje3f73OnXdPWJHlq+5tuetyd5A3TrmsmSf6w/f+6LskHk+w+7Zq2JckZrdbrd/Tfdaft40+yBFhSVVcl2Ru4Ejipqr485dK2kCTAXlV1b5LdgM8BZ1TVF6Zc2oyS/CdgGbBPVb1k2vVsS5J1wLKqWhA37SRZBfxjVZ3Trnzbs6rumnJZ29SGYvk28ItV9c1p17O5JIcw/L86oqp+kOR84BNV9b7pVrZ1SZ7OMKrBUcCPgE8Cv1dVN+2I/e+0Lf6qWl9VV7Xpe4AbGO4anndqcG+b3a095u07cpJDgROAc6Zdy84myT7AC4D3AFTVj+Z76DfHAF+bj6E/YRGwR5JFwJ7M7/uHngZ8oaq+X1UPAJ8FfmNH7XynDf5JSZYCzwQum3IpM2pdJ9cAG4DVVTVvawXeCbwReGjKdcxWAZ9OcmUbCmQ++9fARuDc1pV2TpK9pl3ULLwS+OC0i5hJVX0beBtwM7Ae+F5VfXq6VW3TdcALkjwxyZ7Ai3n4ja+PyU4f/EmeAFwAvKGq7p52PTOpqger6kiGO5mPah/15p0kLwE2VNWV067lUTi6qp7FMCLs65K8YNoFbcMi4FnA/66qZwL3AfN66PLWHfVS4MPTrmUmSfZjGAzyp4GDgb2SnDLdqmZWVTcAbwVWM3TzfBF4YEftf6cO/tZffgHwgar66LTrmY32sf4S4PjpVjKjo4GXtn7zvwFemOS86Za0bVV1a3veAHyMod90vvoW8K2JT3wfYXgjmM9+Hbiqqm6bdiHbcCzwjaraWFX3Ax8Fnjflmrapqt5TVc+qqhcAdwI7pH8fduLgb1+Yvge4oareMe16tiXJ4iT7tuk9GP6R3jjVomZQVX9cVYdW1VKGj/efqap523JKslf7cp/WZfIiho/R81JVfQe4JclT26JjgHl3QcJmXsU87uZpbgaek2TPlg3HMHzvN28lObA9Pwl4GTvwb7wz//Ti0cBvA9e2vnOAN1XVJ6ZX0oyWAKvalRG7AOdX1by/THKBOAj42PB/nUXAX1fVJ6db0iN6PfCB1oXydeDVU65nRq3/+TjgtdOuZVuq6rIkHwGuYugyuZr5P3TDBUmeCNwPvK6qvrujdrzTXs4pSdq6nbarR5K0dQa/JHXG4Jekzhj8ktQZg1+SOmPwS1JnDH5pJG0wMGneMfilCe1O34vbbyNcl+QVSZ6d5NK27PIke7ffUDi3jfN/dZJfba8/NcmHk/wdw8BweyV5b5Ir2nbLp3yK0k595660PY4Hbq2qEwCS/BTDXZ6vqKor2rDJPwDOAKiqZyT5OYaQf0rbx3OBn6+qO5P8KcOwFq9pw3JcnuT/VdV9c3xe0o/Z4pce7lrg2CRvTfJLwJOA9VV1BUBV3d3GR38+8P627Ebgm8Cm4F9dVXe26RcBK9uwIZcAu7d9SlNji1+aUFX/nOTfMox//mfAp9n6j+JkG7uZbM0H+HdV9ZUdV6X02NjilyYkORj4flWdx/DDHc8BDk7y7LZ+7/al7T8Av9WWPYWhFb+1cP8U8Po2IiRJnjn+WUjbZotferhnAH+e5CGGURF/j6HVflYbMvsHDMNmvxv4P0muZRjt8dSq+mHL90lvYfjFsi+18F8HzOvfKNbOz9E5JakzdvVIUmcMfknqjMEvSZ0x+CWpMwa/JHXG4Jekzhj8ktSZ/w/7HJiff+6ymAAAAABJRU5ErkJggg==\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "plt.hist(df['Ladder score'], range(2,10))\n", + "plt.xlabel(\"score\")\n", + "plt.ylabel(\"count\")\n", + "plt.title(\"Happiness Score\")\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Assignment 2\n", + "행복 지수를 y축으로, GDP를 x축으로 하여, scatter 한 값을 한 번 입력 해 보세요." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\r\n\r\n\r\n \r\n \r\n \r\n \r\n 2021-07-12T03:21:36.054238\r\n image/svg+xml\r\n \r\n \r\n Matplotlib v3.4.2, https://matplotlib.org/\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "plt.scatter(df[\"Logged GDP per capita\"], df[\"Ladder score\"])\n", + "plt.xlabel(\"GDP\")\n", + "plt.ylabel(\"score\")\n", + "plt.title(\"Happiness Score per GDP\")\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Assignment 3\n", + "행복지수 상위 10개, 하위 10개를 선택 후, 각각의 Social support, Logged GDP per capita, Freedom to make life choices 의 평균을 구해서 꺾은 선 그래프로 나타내세요." + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\r\n\r\n\r\n \r\n \r\n \r\n \r\n 2021-07-12T03:57:24.903073\r\n image/svg+xml\r\n \r\n \r\n Matplotlib v3.4.2, https://matplotlib.org/\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "df2 = df.sort_values(by=\"Ladder score\")\n", + "df2 = df2.loc[:, [\"Social support\", \"Logged GDP per capita\", \"Freedom to make life choices\"]]\n", + "for key in [\"Social support\", \"Freedom to make life choices\"]:\n", + " df2[key] = df2[key]*10\n", + "unhappy = df2.head(10).mean()\n", + "happy = df2.tail(10).mean()\n", + "\n", + "x = [\"Social\", \"GDP Attribute\", \"Freedom\"]\n", + "x_axis = np.arange(len(x))\n", + "plt.xticks(x_axis, x)\n", + "\n", + "plt.bar(x_axis - 0.2, happy, width=0.3, color='green', label='Happy')\n", + "plt.bar(x_axis + 0.2, unhappy, width=0.3, color='blue', label='Unhappy')\n", + "plt.legend()\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "name": "python3", + "display_name": "Python 3.8.10 64-bit ('data-science': conda)" + }, + "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.8.10" + }, + "interpreter": { + "hash": "528731a284dfdafbfaba4aab7b6964109e6d359f3c285788ee3f5a57e85b5dc7" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} \ No newline at end of file diff --git "a/assignments/SolidCitadel/04~09-\354\240\204\355\230\204\354\244\200.ipynb" "b/assignments/SolidCitadel/04~09-\354\240\204\355\230\204\354\244\200.ipynb" new file mode 100644 index 0000000..48c610f --- /dev/null +++ "b/assignments/SolidCitadel/04~09-\354\240\204\355\230\204\354\244\200.ipynb" @@ -0,0 +1,2475 @@ +{ + "nbformat": 4, + "nbformat_minor": 5, + "metadata": { + "kernelspec": { + "name": "python3", + "display_name": "Python 3.8.8 64-bit ('base': conda)" + }, + "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.8.8" + }, + "interpreter": { + "hash": "9335205e8ad8ed562baed80b9c891e71ad822cb3d940a6baaf9eca34007f6ee8" + }, + "colab": { + "name": "04~09-전현준.ipynb", + "provenance": [], + "collapsed_sections": [] + }, + "widgets": { + "application/vnd.jupyter.widget-state+json": { + "82c2a62983a34f5890d585093bcccfb1": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "state": { + "_view_name": "HBoxView", + "_dom_classes": [], + "_model_name": "HBoxModel", + "_view_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_view_count": null, + "_view_module_version": "1.5.0", + "box_style": "", + "layout": "IPY_MODEL_27aa52c2a5014a3fa948a11439ee2cf5", + "_model_module": "@jupyter-widgets/controls", + "children": [ + "IPY_MODEL_3561086e62724c81a1d186b75db3e2c7", + "IPY_MODEL_6d1d7b2fa3284771b9468d8e037227e9" + ] + } + }, + "27aa52c2a5014a3fa948a11439ee2cf5": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "state": { + "_view_name": "LayoutView", + "grid_template_rows": null, + "right": null, + "justify_content": null, + "_view_module": "@jupyter-widgets/base", + "overflow": null, + "_model_module_version": "1.2.0", + "_view_count": null, + "flex_flow": null, + "width": null, + "min_width": null, + "border": null, + "align_items": null, + "bottom": null, + "_model_module": "@jupyter-widgets/base", + "top": null, + "grid_column": null, + "overflow_y": null, + "overflow_x": null, + "grid_auto_flow": null, + "grid_area": null, + "grid_template_columns": null, + "flex": null, + "_model_name": "LayoutModel", + "justify_items": null, + "grid_row": null, + "max_height": null, + "align_content": null, + "visibility": null, + "align_self": null, + "height": null, + "min_height": null, + "padding": null, + "grid_auto_rows": null, + "grid_gap": null, + "max_width": null, + "order": null, + "_view_module_version": "1.2.0", + "grid_template_areas": null, + "object_position": null, + "object_fit": null, + "grid_auto_columns": null, + "margin": null, + "display": null, + "left": null + } + }, + "3561086e62724c81a1d186b75db3e2c7": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "state": { + "_view_name": "ProgressView", + "style": "IPY_MODEL_225d5577065444e4b76465125938f4fb", + "_dom_classes": [], + "description": "", + "_model_name": "FloatProgressModel", + "bar_style": "success", + "max": 9912422, + "_view_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "value": 9912422, + "_view_count": null, + "_view_module_version": "1.5.0", + "orientation": "horizontal", + "min": 0, + "description_tooltip": null, + "_model_module": "@jupyter-widgets/controls", + "layout": "IPY_MODEL_c9d53194717c4c40a10f8d303b64beaa" + } + }, + "6d1d7b2fa3284771b9468d8e037227e9": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "state": { + "_view_name": "HTMLView", + "style": "IPY_MODEL_0771546331c649ea8bdd43d3573dd2de", + "_dom_classes": [], + "description": "", + "_model_name": "HTMLModel", + "placeholder": "​", + "_view_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "value": " 9913344/? [00:02<00:00, 3808747.84it/s]", + "_view_count": null, + "_view_module_version": "1.5.0", + "description_tooltip": null, + "_model_module": "@jupyter-widgets/controls", + "layout": "IPY_MODEL_31173383ea4944f9a455654227408bef" + } + }, + "225d5577065444e4b76465125938f4fb": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "state": { + "_view_name": "StyleView", + "_model_name": "ProgressStyleModel", + "description_width": "initial", + "_view_module": "@jupyter-widgets/base", + "_model_module_version": "1.5.0", + "_view_count": null, + "_view_module_version": "1.2.0", + "bar_color": null, + "_model_module": "@jupyter-widgets/controls" + } + }, + "c9d53194717c4c40a10f8d303b64beaa": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "state": { + "_view_name": "LayoutView", + "grid_template_rows": null, + "right": null, + "justify_content": null, + "_view_module": "@jupyter-widgets/base", + "overflow": null, + "_model_module_version": "1.2.0", + "_view_count": null, + "flex_flow": null, + "width": null, + "min_width": null, + "border": null, + "align_items": null, + "bottom": null, + "_model_module": "@jupyter-widgets/base", + "top": null, + "grid_column": null, + "overflow_y": null, + "overflow_x": null, + "grid_auto_flow": null, + "grid_area": null, + "grid_template_columns": null, + "flex": null, + "_model_name": "LayoutModel", + "justify_items": null, + "grid_row": null, + "max_height": null, + "align_content": null, + "visibility": null, + "align_self": null, + "height": null, + "min_height": null, + "padding": null, + "grid_auto_rows": null, + "grid_gap": null, + "max_width": null, + "order": null, + "_view_module_version": "1.2.0", + "grid_template_areas": null, + "object_position": null, + "object_fit": null, + "grid_auto_columns": null, + "margin": null, + "display": null, + "left": null + } + }, + "0771546331c649ea8bdd43d3573dd2de": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "state": { + "_view_name": "StyleView", + "_model_name": "DescriptionStyleModel", + "description_width": "", + "_view_module": "@jupyter-widgets/base", + "_model_module_version": "1.5.0", + "_view_count": null, + "_view_module_version": "1.2.0", + "_model_module": "@jupyter-widgets/controls" + } + }, + "31173383ea4944f9a455654227408bef": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "state": { + "_view_name": "LayoutView", + "grid_template_rows": null, + "right": null, + "justify_content": null, + "_view_module": "@jupyter-widgets/base", + "overflow": null, + "_model_module_version": "1.2.0", + "_view_count": null, + "flex_flow": null, + "width": null, + "min_width": null, + "border": null, + "align_items": null, + "bottom": null, + "_model_module": "@jupyter-widgets/base", + "top": null, + "grid_column": null, + "overflow_y": null, + "overflow_x": null, + "grid_auto_flow": null, + "grid_area": null, + "grid_template_columns": null, + "flex": null, + "_model_name": "LayoutModel", + "justify_items": null, + "grid_row": null, + "max_height": null, + "align_content": null, + "visibility": null, + "align_self": null, + "height": null, + "min_height": null, + "padding": null, + "grid_auto_rows": null, + "grid_gap": null, + "max_width": null, + "order": null, + "_view_module_version": "1.2.0", + "grid_template_areas": null, + "object_position": null, + "object_fit": null, + "grid_auto_columns": null, + "margin": null, + "display": null, + "left": null + } + }, + "1b7e8fe4d54a4bf78bb133ea6f434512": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "state": { + "_view_name": "HBoxView", + "_dom_classes": [], + "_model_name": "HBoxModel", + "_view_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_view_count": null, + "_view_module_version": "1.5.0", + "box_style": "", + "layout": "IPY_MODEL_60786948ed4c48e582f3f6715fe25678", + "_model_module": "@jupyter-widgets/controls", + "children": [ + "IPY_MODEL_70f0677fb6264d50847c1fdf8e91954a", + "IPY_MODEL_3e6a6a4b6bb34995b4098d7594bd091d" + ] + } + }, + "60786948ed4c48e582f3f6715fe25678": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "state": { + "_view_name": "LayoutView", + "grid_template_rows": null, + "right": null, + "justify_content": null, + "_view_module": "@jupyter-widgets/base", + "overflow": null, + "_model_module_version": "1.2.0", + "_view_count": null, + "flex_flow": null, + "width": null, + "min_width": null, + "border": null, + "align_items": null, + "bottom": null, + "_model_module": "@jupyter-widgets/base", + "top": null, + "grid_column": null, + "overflow_y": null, + "overflow_x": null, + "grid_auto_flow": null, + "grid_area": null, + "grid_template_columns": null, + "flex": null, + "_model_name": "LayoutModel", + "justify_items": null, + "grid_row": null, + "max_height": null, + "align_content": null, + "visibility": null, + "align_self": null, + "height": null, + "min_height": null, + "padding": null, + "grid_auto_rows": null, + "grid_gap": null, + "max_width": null, + "order": null, + "_view_module_version": "1.2.0", + "grid_template_areas": null, + "object_position": null, + "object_fit": null, + "grid_auto_columns": null, + "margin": null, + "display": null, + "left": null + } + }, + "70f0677fb6264d50847c1fdf8e91954a": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "state": { + "_view_name": "ProgressView", + "style": "IPY_MODEL_193b9d22f4554f4bb8fb5ed4ada6ecd0", + "_dom_classes": [], + "description": "", + "_model_name": "FloatProgressModel", + "bar_style": "success", + "max": 28881, + "_view_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "value": 28881, + "_view_count": null, + "_view_module_version": "1.5.0", + "orientation": "horizontal", + "min": 0, + "description_tooltip": null, + "_model_module": "@jupyter-widgets/controls", + "layout": "IPY_MODEL_0ad048739f7945af9db334d72920dd4f" + } + }, + "3e6a6a4b6bb34995b4098d7594bd091d": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "state": { + "_view_name": "HTMLView", + "style": "IPY_MODEL_3c21db84ce2e46d8ad14b74fd584f897", + "_dom_classes": [], + "description": "", + "_model_name": "HTMLModel", + "placeholder": "​", + "_view_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "value": " 29696/? [00:01<00:00, 26848.87it/s]", + "_view_count": null, + "_view_module_version": "1.5.0", + "description_tooltip": null, + "_model_module": "@jupyter-widgets/controls", + "layout": "IPY_MODEL_2394078240ad423bb5ea29121c69b506" + } + }, + "193b9d22f4554f4bb8fb5ed4ada6ecd0": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "state": { + "_view_name": "StyleView", + "_model_name": "ProgressStyleModel", + "description_width": "initial", + "_view_module": "@jupyter-widgets/base", + "_model_module_version": "1.5.0", + "_view_count": null, + "_view_module_version": "1.2.0", + "bar_color": null, + "_model_module": "@jupyter-widgets/controls" + } + }, + "0ad048739f7945af9db334d72920dd4f": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "state": { + "_view_name": "LayoutView", + "grid_template_rows": null, + "right": null, + "justify_content": null, + "_view_module": "@jupyter-widgets/base", + "overflow": null, + "_model_module_version": "1.2.0", + "_view_count": null, + "flex_flow": null, + "width": null, + "min_width": null, + "border": null, + "align_items": null, + "bottom": null, + "_model_module": "@jupyter-widgets/base", + "top": null, + "grid_column": null, + "overflow_y": null, + "overflow_x": null, + "grid_auto_flow": null, + "grid_area": null, + "grid_template_columns": null, + "flex": null, + "_model_name": "LayoutModel", + "justify_items": null, + "grid_row": null, + "max_height": null, + "align_content": null, + "visibility": null, + "align_self": null, + "height": null, + "min_height": null, + "padding": null, + "grid_auto_rows": null, + "grid_gap": null, + "max_width": null, + "order": null, + "_view_module_version": "1.2.0", + "grid_template_areas": null, + "object_position": null, + "object_fit": null, + "grid_auto_columns": null, + "margin": null, + "display": null, + "left": null + } + }, + "3c21db84ce2e46d8ad14b74fd584f897": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "state": { + "_view_name": "StyleView", + "_model_name": "DescriptionStyleModel", + "description_width": "", + "_view_module": "@jupyter-widgets/base", + "_model_module_version": "1.5.0", + "_view_count": null, + "_view_module_version": "1.2.0", + "_model_module": "@jupyter-widgets/controls" + } + }, + "2394078240ad423bb5ea29121c69b506": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "state": { + "_view_name": "LayoutView", + "grid_template_rows": null, + "right": null, + "justify_content": null, + "_view_module": "@jupyter-widgets/base", + "overflow": null, + "_model_module_version": "1.2.0", + "_view_count": null, + "flex_flow": null, + "width": null, + "min_width": null, + "border": null, + "align_items": null, + "bottom": null, + "_model_module": "@jupyter-widgets/base", + "top": null, + "grid_column": null, + "overflow_y": null, + "overflow_x": null, + "grid_auto_flow": null, + "grid_area": null, + "grid_template_columns": null, + "flex": null, + "_model_name": "LayoutModel", + "justify_items": null, + "grid_row": null, + "max_height": null, + "align_content": null, + "visibility": null, + "align_self": null, + "height": null, + "min_height": null, + "padding": null, + "grid_auto_rows": null, + "grid_gap": null, + "max_width": null, + "order": null, + "_view_module_version": "1.2.0", + "grid_template_areas": null, + "object_position": null, + "object_fit": null, + "grid_auto_columns": null, + "margin": null, + "display": null, + "left": null + } + }, + "57726179f0d34867b470244bcfa0b21b": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "state": { + "_view_name": "HBoxView", + "_dom_classes": [], + "_model_name": "HBoxModel", + "_view_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_view_count": null, + "_view_module_version": "1.5.0", + "box_style": "", + "layout": "IPY_MODEL_576ffabedd234e8c893a08cf25e251b5", + "_model_module": "@jupyter-widgets/controls", + "children": [ + "IPY_MODEL_80efea76569f4b109f3cc0826a366987", + "IPY_MODEL_ff6787bbb7b54bd6b964489e77af4e30" + ] + } + }, + "576ffabedd234e8c893a08cf25e251b5": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "state": { + "_view_name": "LayoutView", + "grid_template_rows": null, + "right": null, + "justify_content": null, + "_view_module": "@jupyter-widgets/base", + "overflow": null, + "_model_module_version": "1.2.0", + "_view_count": null, + "flex_flow": null, + "width": null, + "min_width": null, + "border": null, + "align_items": null, + "bottom": null, + "_model_module": "@jupyter-widgets/base", + "top": null, + "grid_column": null, + "overflow_y": null, + "overflow_x": null, + "grid_auto_flow": null, + "grid_area": null, + "grid_template_columns": null, + "flex": null, + "_model_name": "LayoutModel", + "justify_items": null, + "grid_row": null, + "max_height": null, + "align_content": null, + "visibility": null, + "align_self": null, + "height": null, + "min_height": null, + "padding": null, + "grid_auto_rows": null, + "grid_gap": null, + "max_width": null, + "order": null, + "_view_module_version": "1.2.0", + "grid_template_areas": null, + "object_position": null, + "object_fit": null, + "grid_auto_columns": null, + "margin": null, + "display": null, + "left": null + } + }, + "80efea76569f4b109f3cc0826a366987": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "state": { + "_view_name": "ProgressView", + "style": "IPY_MODEL_c5f35d95fe7f4b6a8d6b9ed2d0fe0b45", + "_dom_classes": [], + "description": "", + "_model_name": "FloatProgressModel", + "bar_style": "success", + "max": 1648877, + "_view_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "value": 1648877, + "_view_count": null, + "_view_module_version": "1.5.0", + "orientation": "horizontal", + "min": 0, + "description_tooltip": null, + "_model_module": "@jupyter-widgets/controls", + "layout": "IPY_MODEL_5bc2f3217e1948e4a6f87fbbbf186cce" + } + }, + "ff6787bbb7b54bd6b964489e77af4e30": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "state": { + "_view_name": "HTMLView", + "style": "IPY_MODEL_6ad5371922b744378b2ce54a9e8792b6", + "_dom_classes": [], + "description": "", + "_model_name": "HTMLModel", + "placeholder": "​", + "_view_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "value": " 1649664/? [00:00<00:00, 2953529.54it/s]", + "_view_count": null, + "_view_module_version": "1.5.0", + "description_tooltip": null, + "_model_module": "@jupyter-widgets/controls", + "layout": "IPY_MODEL_f46239f2712b4f4e97215a60c1776d99" + } + }, + "c5f35d95fe7f4b6a8d6b9ed2d0fe0b45": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "state": { + "_view_name": "StyleView", + "_model_name": "ProgressStyleModel", + "description_width": "initial", + "_view_module": "@jupyter-widgets/base", + "_model_module_version": "1.5.0", + "_view_count": null, + "_view_module_version": "1.2.0", + "bar_color": null, + "_model_module": "@jupyter-widgets/controls" + } + }, + "5bc2f3217e1948e4a6f87fbbbf186cce": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "state": { + "_view_name": "LayoutView", + "grid_template_rows": null, + "right": null, + "justify_content": null, + "_view_module": "@jupyter-widgets/base", + "overflow": null, + "_model_module_version": "1.2.0", + "_view_count": null, + "flex_flow": null, + "width": null, + "min_width": null, + "border": null, + "align_items": null, + "bottom": null, + "_model_module": "@jupyter-widgets/base", + "top": null, + "grid_column": null, + "overflow_y": null, + "overflow_x": null, + "grid_auto_flow": null, + "grid_area": null, + "grid_template_columns": null, + "flex": null, + "_model_name": "LayoutModel", + "justify_items": null, + "grid_row": null, + "max_height": null, + "align_content": null, + "visibility": null, + "align_self": null, + "height": null, + "min_height": null, + "padding": null, + "grid_auto_rows": null, + "grid_gap": null, + "max_width": null, + "order": null, + "_view_module_version": "1.2.0", + "grid_template_areas": null, + "object_position": null, + "object_fit": null, + "grid_auto_columns": null, + "margin": null, + "display": null, + "left": null + } + }, + "6ad5371922b744378b2ce54a9e8792b6": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "state": { + "_view_name": "StyleView", + "_model_name": "DescriptionStyleModel", + "description_width": "", + "_view_module": "@jupyter-widgets/base", + "_model_module_version": "1.5.0", + "_view_count": null, + "_view_module_version": "1.2.0", + "_model_module": "@jupyter-widgets/controls" + } + }, + "f46239f2712b4f4e97215a60c1776d99": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "state": { + "_view_name": "LayoutView", + "grid_template_rows": null, + "right": null, + "justify_content": null, + "_view_module": "@jupyter-widgets/base", + "overflow": null, + "_model_module_version": "1.2.0", + "_view_count": null, + "flex_flow": null, + "width": null, + "min_width": null, + "border": null, + "align_items": null, + "bottom": null, + "_model_module": "@jupyter-widgets/base", + "top": null, + "grid_column": null, + "overflow_y": null, + "overflow_x": null, + "grid_auto_flow": null, + "grid_area": null, + "grid_template_columns": null, + "flex": null, + "_model_name": "LayoutModel", + "justify_items": null, + "grid_row": null, + "max_height": null, + "align_content": null, + "visibility": null, + "align_self": null, + "height": null, + "min_height": null, + "padding": null, + "grid_auto_rows": null, + "grid_gap": null, + "max_width": null, + "order": null, + "_view_module_version": "1.2.0", + "grid_template_areas": null, + "object_position": null, + "object_fit": null, + "grid_auto_columns": null, + "margin": null, + "display": null, + "left": null + } + }, + "600d5290e34b4ccd989083c0d4546b30": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "state": { + "_view_name": "HBoxView", + "_dom_classes": [], + "_model_name": "HBoxModel", + "_view_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_view_count": null, + "_view_module_version": "1.5.0", + "box_style": "", + "layout": "IPY_MODEL_fef4ff27999f411f881a1a6ac43c16b8", + "_model_module": "@jupyter-widgets/controls", + "children": [ + "IPY_MODEL_58fd5f18cd42486ab211af2497ff7466", + "IPY_MODEL_d3bfacc5a0e9485c96a7eedae919b84f" + ] + } + }, + "fef4ff27999f411f881a1a6ac43c16b8": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "state": { + "_view_name": "LayoutView", + "grid_template_rows": null, + "right": null, + "justify_content": null, + "_view_module": "@jupyter-widgets/base", + "overflow": null, + "_model_module_version": "1.2.0", + "_view_count": null, + "flex_flow": null, + "width": null, + "min_width": null, + "border": null, + "align_items": null, + "bottom": null, + "_model_module": "@jupyter-widgets/base", + "top": null, + "grid_column": null, + "overflow_y": null, + "overflow_x": null, + "grid_auto_flow": null, + "grid_area": null, + "grid_template_columns": null, + "flex": null, + "_model_name": "LayoutModel", + "justify_items": null, + "grid_row": null, + "max_height": null, + "align_content": null, + "visibility": null, + "align_self": null, + "height": null, + "min_height": null, + "padding": null, + "grid_auto_rows": null, + "grid_gap": null, + "max_width": null, + "order": null, + "_view_module_version": "1.2.0", + "grid_template_areas": null, + "object_position": null, + "object_fit": null, + "grid_auto_columns": null, + "margin": null, + "display": null, + "left": null + } + }, + "58fd5f18cd42486ab211af2497ff7466": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "state": { + "_view_name": "ProgressView", + "style": "IPY_MODEL_8cf4d85041614aa686ba2add2839887e", + "_dom_classes": [], + "description": "", + "_model_name": "FloatProgressModel", + "bar_style": "success", + "max": 4542, + "_view_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "value": 4542, + "_view_count": null, + "_view_module_version": "1.5.0", + "orientation": "horizontal", + "min": 0, + "description_tooltip": null, + "_model_module": "@jupyter-widgets/controls", + "layout": "IPY_MODEL_f7122e56569c4468a31caeef65f67d6e" + } + }, + "d3bfacc5a0e9485c96a7eedae919b84f": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "state": { + "_view_name": "HTMLView", + "style": "IPY_MODEL_4b9e91023bc342578cb8a93cf92cd0b4", + "_dom_classes": [], + "description": "", + "_model_name": "HTMLModel", + "placeholder": "​", + "_view_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "value": " 5120/? [00:00<00:00, 15504.10it/s]", + "_view_count": null, + "_view_module_version": "1.5.0", + "description_tooltip": null, + "_model_module": "@jupyter-widgets/controls", + "layout": "IPY_MODEL_75d6b660c7bb447eb750191355198875" + } + }, + "8cf4d85041614aa686ba2add2839887e": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "state": { + "_view_name": "StyleView", + "_model_name": "ProgressStyleModel", + "description_width": "initial", + "_view_module": "@jupyter-widgets/base", + "_model_module_version": "1.5.0", + "_view_count": null, + "_view_module_version": "1.2.0", + "bar_color": null, + "_model_module": "@jupyter-widgets/controls" + } + }, + "f7122e56569c4468a31caeef65f67d6e": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "state": { + "_view_name": "LayoutView", + "grid_template_rows": null, + "right": null, + "justify_content": null, + "_view_module": "@jupyter-widgets/base", + "overflow": null, + "_model_module_version": "1.2.0", + "_view_count": null, + "flex_flow": null, + "width": null, + "min_width": null, + "border": null, + "align_items": null, + "bottom": null, + "_model_module": "@jupyter-widgets/base", + "top": null, + "grid_column": null, + "overflow_y": null, + "overflow_x": null, + "grid_auto_flow": null, + "grid_area": null, + "grid_template_columns": null, + "flex": null, + "_model_name": "LayoutModel", + "justify_items": null, + "grid_row": null, + "max_height": null, + "align_content": null, + "visibility": null, + "align_self": null, + "height": null, + "min_height": null, + "padding": null, + "grid_auto_rows": null, + "grid_gap": null, + "max_width": null, + "order": null, + "_view_module_version": "1.2.0", + "grid_template_areas": null, + "object_position": null, + "object_fit": null, + "grid_auto_columns": null, + "margin": null, + "display": null, + "left": null + } + }, + "4b9e91023bc342578cb8a93cf92cd0b4": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "state": { + "_view_name": "StyleView", + "_model_name": "DescriptionStyleModel", + "description_width": "", + "_view_module": "@jupyter-widgets/base", + "_model_module_version": "1.5.0", + "_view_count": null, + "_view_module_version": "1.2.0", + "_model_module": "@jupyter-widgets/controls" + } + }, + "75d6b660c7bb447eb750191355198875": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "state": { + "_view_name": "LayoutView", + "grid_template_rows": null, + "right": null, + "justify_content": null, + "_view_module": "@jupyter-widgets/base", + "overflow": null, + "_model_module_version": "1.2.0", + "_view_count": null, + "flex_flow": null, + "width": null, + "min_width": null, + "border": null, + "align_items": null, + "bottom": null, + "_model_module": "@jupyter-widgets/base", + "top": null, + "grid_column": null, + "overflow_y": null, + "overflow_x": null, + "grid_auto_flow": null, + "grid_area": null, + "grid_template_columns": null, + "flex": null, + "_model_name": "LayoutModel", + "justify_items": null, + "grid_row": null, + "max_height": null, + "align_content": null, + "visibility": null, + "align_self": null, + "height": null, + "min_height": null, + "padding": null, + "grid_auto_rows": null, + "grid_gap": null, + "max_width": null, + "order": null, + "_view_module_version": "1.2.0", + "grid_template_areas": null, + "object_position": null, + "object_fit": null, + "grid_auto_columns": null, + "margin": null, + "display": null, + "left": null + } + } + } + } + }, + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "S2ILrY9Rp-lR" + }, + "source": [ + "## Module Import" + ], + "id": "S2ILrY9Rp-lR" + }, + { + "cell_type": "code", + "metadata": { + "id": "ngpKnV_1p-lW" + }, + "source": [ + "import numpy as np\n", + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "import sklearn" + ], + "id": "ngpKnV_1p-lW", + "execution_count": 1, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "OfASLMlTp-lX" + }, + "source": [ + "## Assignment 1.\n", + "우리는 붓꽃의 **꽃받침의 길이, 꽃받침의 너비, 꽃잎의 길이, 꽃잎의 너비**를 통해서, **꽃의 종류**를 구분 해 볼 것입니다. **Input**으로 주어 지는 데이터는 다음과 같습니다.\n", + "\n", + "- Sepal Length: 꽃받침의 길이 정보이다.\n", + "- Sepal Width: 꽃받침의 너비 정보이다.\n", + "- Petal Length: 꽃잎의 길이 정보이다.\n", + "- Petal Width: 꽃잎의 너비 정보이다.\n", + "- Species: 꽃의 종류 정보이다. **setosa / versicolor / virginica** 의 3종류로 구분된다." + ], + "id": "OfASLMlTp-lX" + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "gXkmroFKp-lY", + "outputId": "d2d155ce-6d8e-4d74-ed89-e8bdddc74161" + }, + "source": [ + "from sklearn.datasets import load_iris\n", + "from sklearn.model_selection import train_test_split\n", + "\n", + "data = load_iris()\n", + "X_train, X_test, y_train, y_test = train_test_split(data.data, data.target, test_size=0.33, random_state=42, shuffle=True)\n", + "\n", + "print(\"X_train의 shape:\", X_train.shape)\n", + "print(\"X_test의 shape:\", X_test.shape)\n", + "print(\"y_train의 shape:\", y_train.shape)\n", + "print(\"y_test의 shape:\", y_test.shape)" + ], + "id": "gXkmroFKp-lY", + "execution_count": 2, + "outputs": [ + { + "output_type": "stream", + "text": [ + "X_train의 shape: (100, 4)\n", + "X_test의 shape: (50, 4)\n", + "y_train의 shape: (100,)\n", + "y_test의 shape: (50,)\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "6MBAHI4np-lZ" + }, + "source": [ + "### 1-1. Data Normalization\n", + "첫 번째로, 데이터를 정규화 하는 것이 중요 할 것 같습니다. 데이터를 정규화 해 보세요.\n", + "\n", + "(Min - Max 정규화를 이용하면 될 것 같죠? hint: ndarray.min(), ndarray.max())" + ], + "id": "6MBAHI4np-lZ" + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "TO9jJoskp-la", + "outputId": "0feaf218-d9ca-4ee4-f7dd-e3e9b087aefe" + }, + "source": [ + "X_train = (X_train - X_train.min()) / (X_train.max() - X_train.min())\n", + "X_test = (X_test - X_test.min()) / (X_test.max() - X_test.min())\n", + "print(X_train[:10])" + ], + "id": "TO9jJoskp-la", + "execution_count": 3, + "outputs": [ + { + "output_type": "stream", + "text": [ + "[[0.73684211 0.36842105 0.53947368 0.15789474]\n", + " [0.98684211 0.38157895 0.85526316 0.26315789]\n", + " [0.72368421 0.38157895 0.57894737 0.18421053]\n", + " [0.65789474 0.44736842 0.17105263 0.01315789]\n", + " [1. 0.35526316 0.86842105 0.25 ]\n", + " [0.75 0.34210526 0.52631579 0.11842105]\n", + " [0.67105263 0.43421053 0.17105263 0.01315789]\n", + " [0.64473684 0.44736842 0.15789474 0.02631579]\n", + " [0.65789474 0.48684211 0.23684211 0.03947368]\n", + " [0.64473684 0.25 0.44736842 0.11842105]]\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "VKTNEbGzp-la" + }, + "source": [ + "## 1-2. Data Training\n", + "그 다음으로는 이제 데이터를 학습 시킬 시간입니다! SVM 모듈을 import 한 후, 학습을 시켜 보도록 하겠습니다." + ], + "id": "VKTNEbGzp-la" + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "EZilGBN9p-lb", + "outputId": "99412cd8-1051-476c-a3ad-a9efee581eba" + }, + "source": [ + "from sklearn.svm import SVC\n", + "\n", + "svm = SVC(C=2)\n", + "svm.fit(X_train,y_train)\n", + "\n", + "accuracy = (sum(svm.predict(X_test) == y_test) / 50) * 100\n", + "print(f'정확도 (accuracy): {accuracy}%')" + ], + "id": "EZilGBN9p-lb", + "execution_count": 4, + "outputs": [ + { + "output_type": "stream", + "text": [ + "정확도 (accuracy): 100.0%\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "hg9Hdouip-lb" + }, + "source": [ + "## Assignment 2.\n", + "다음은 **MNIST 데이터**에 대해 분류를 해보는 연습을 해 보겠습니다. **MNIST**는 손글씨 데이터로, **Input Data**는 [28 x 28]의 데이터로 이루어져 있습니다. 일단, 우리가 이를 학습 시키기 전에 한번 데이터를 확인 해 볼까요?\n", + "\n", + "이 예제는 DNN을 이용하기 때문에, **Pytorch**로 진행 하겠습니다. 실습은 **Hyperparameter**만 고치면 됩니다.\n", + "\n", + "**학습률 95%에 도전 해 보세요!**" + ], + "id": "hg9Hdouip-lb" + }, + { + "cell_type": "code", + "metadata": { + "id": "krPyAtgyp-lc" + }, + "source": [ + "import time\n", + "import random\n", + "import torch\n", + "import torch.nn as nn\n", + "from torchvision.datasets import MNIST\n", + "from torchvision import transforms\n", + "from torch.utils.data import DataLoader\n", + "import torch.nn.functional as F" + ], + "id": "krPyAtgyp-lc", + "execution_count": 5, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "CDKMst1tp-ld", + "outputId": "05a6025b-d33c-4908-c384-78d6f100c1ba" + }, + "source": [ + "# 이 부분은 절대 변경하지 마세요.\n", + "\n", + "RANDOM_SEED = 123\n", + "DEVICE = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')\n", + "\n", + "random.seed(RANDOM_SEED)\n", + "torch.manual_seed(RANDOM_SEED)" + ], + "id": "CDKMst1tp-ld", + "execution_count": 6, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 6 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "mRzPfZxJp-ld" + }, + "source": [ + "## 2-0. Data Load\n", + "데이터를 불러와 보겠습니다. `transforms.Compose`를 이용하여, 데이터를 pytorch에서 사용하는 **Tensor**형으로 바꾸고, 이를 **Gaussian Distribution**으로 정규화합니다." + ], + "id": "mRzPfZxJp-ld" + }, + { + "cell_type": "code", + "metadata": { + "id": "L_4obvg5p-ld" + }, + "source": [ + "# 수정 가능한 셀입니다.\n", + "BATCH_SIZE = 64 # 60000을 사용하면, Full-Batch 학습을 진행 합니다." + ], + "id": "L_4obvg5p-ld", + "execution_count": 7, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "dm50u7NBp-le" + }, + "source": [ + "# Don't Touch!\n", + "custom_train_transform = transforms.Compose([ \n", + " transforms.ToTensor(),\n", + " transforms.Normalize(mean=(0.5,), std=(0.5,))\n", + "])\n", + "\n", + "custom_test_transform = transforms.Compose([\n", + " transforms.ToTensor(),\n", + " transforms.Normalize(mean=(0.5,), std=(0.5,))\n", + "])" + ], + "id": "dm50u7NBp-le", + "execution_count": 8, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "hQgF-D2lp-le" + }, + "source": [ + "`MNIST`를 이용하여 **MNIST** 데이터를 불러 오고, 이를 transform 해 줍니다. 또한, `DataLoader`를 이용하여, 셔플을 해준 후, 미니 배치를 생성 합니다." + ], + "id": "hQgF-D2lp-le" + }, + { + "cell_type": "code", + "metadata": { + "id": "1yG-2V8Up-lf", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 813, + "referenced_widgets": [ + "82c2a62983a34f5890d585093bcccfb1", + "27aa52c2a5014a3fa948a11439ee2cf5", + "3561086e62724c81a1d186b75db3e2c7", + "6d1d7b2fa3284771b9468d8e037227e9", + "225d5577065444e4b76465125938f4fb", + "c9d53194717c4c40a10f8d303b64beaa", + "0771546331c649ea8bdd43d3573dd2de", + "31173383ea4944f9a455654227408bef", + "1b7e8fe4d54a4bf78bb133ea6f434512", + "60786948ed4c48e582f3f6715fe25678", + "70f0677fb6264d50847c1fdf8e91954a", + "3e6a6a4b6bb34995b4098d7594bd091d", + "193b9d22f4554f4bb8fb5ed4ada6ecd0", + "0ad048739f7945af9db334d72920dd4f", + "3c21db84ce2e46d8ad14b74fd584f897", + "2394078240ad423bb5ea29121c69b506", + "57726179f0d34867b470244bcfa0b21b", + "576ffabedd234e8c893a08cf25e251b5", + "80efea76569f4b109f3cc0826a366987", + "ff6787bbb7b54bd6b964489e77af4e30", + "c5f35d95fe7f4b6a8d6b9ed2d0fe0b45", + "5bc2f3217e1948e4a6f87fbbbf186cce", + "6ad5371922b744378b2ce54a9e8792b6", + "f46239f2712b4f4e97215a60c1776d99", + "600d5290e34b4ccd989083c0d4546b30", + "fef4ff27999f411f881a1a6ac43c16b8", + "58fd5f18cd42486ab211af2497ff7466", + "d3bfacc5a0e9485c96a7eedae919b84f", + "8cf4d85041614aa686ba2add2839887e", + "f7122e56569c4468a31caeef65f67d6e", + "4b9e91023bc342578cb8a93cf92cd0b4", + "75d6b660c7bb447eb750191355198875" + ] + }, + "outputId": "8b774ca3-661f-4f73-cc0d-2be402d0fae9" + }, + "source": [ + "train_dataset = MNIST(\".\", train=True, download=True, transform=custom_train_transform)\n", + "\n", + "train_loader = DataLoader(dataset=train_dataset,\n", + " batch_size=BATCH_SIZE,\n", + " shuffle=True,\n", + " drop_last=True,\n", + " num_workers=2)\n", + "\n", + "\n", + "test_dataset = MNIST(\".\", train=False, download=True, transform=custom_test_transform)\n", + "\n", + "test_loader = DataLoader(dataset=test_dataset,\n", + " batch_size=BATCH_SIZE,\n", + " shuffle=False,\n", + " num_workers=2)" + ], + "id": "1yG-2V8Up-lf", + "execution_count": 9, + "outputs": [ + { + "output_type": "stream", + "text": [ + "Downloading http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz\n", + "Downloading http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz to ./MNIST/raw/train-images-idx3-ubyte.gz\n", + "Failed to download (trying next):\n", + "HTTP Error 503: Service Unavailable\n", + "\n", + "Downloading https://ossci-datasets.s3.amazonaws.com/mnist/train-images-idx3-ubyte.gz\n", + "Downloading https://ossci-datasets.s3.amazonaws.com/mnist/train-images-idx3-ubyte.gz to ./MNIST/raw/train-images-idx3-ubyte.gz\n" + ], + "name": "stdout" + }, + { + "output_type": "display_data", + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "82c2a62983a34f5890d585093bcccfb1", + "version_minor": 0, + "version_major": 2 + }, + "text/plain": [ + "HBox(children=(FloatProgress(value=0.0, max=9912422.0), HTML(value='')))" + ] + }, + "metadata": { + "tags": [] + } + }, + { + "output_type": "stream", + "text": [ + "\n", + "Extracting ./MNIST/raw/train-images-idx3-ubyte.gz to ./MNIST/raw\n", + "\n", + "Downloading http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz\n", + "Downloading http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz to ./MNIST/raw/train-labels-idx1-ubyte.gz\n" + ], + "name": "stdout" + }, + { + "output_type": "display_data", + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "1b7e8fe4d54a4bf78bb133ea6f434512", + "version_minor": 0, + "version_major": 2 + }, + "text/plain": [ + "HBox(children=(FloatProgress(value=0.0, max=28881.0), HTML(value='')))" + ] + }, + "metadata": { + "tags": [] + } + }, + { + "output_type": "stream", + "text": [ + "\n", + "Extracting ./MNIST/raw/train-labels-idx1-ubyte.gz to ./MNIST/raw\n", + "\n", + "Downloading http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz\n", + "Downloading http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz to ./MNIST/raw/t10k-images-idx3-ubyte.gz\n", + "Failed to download (trying next):\n", + "HTTP Error 503: Service Unavailable\n", + "\n", + "Downloading https://ossci-datasets.s3.amazonaws.com/mnist/t10k-images-idx3-ubyte.gz\n", + "Downloading https://ossci-datasets.s3.amazonaws.com/mnist/t10k-images-idx3-ubyte.gz to ./MNIST/raw/t10k-images-idx3-ubyte.gz\n" + ], + "name": "stdout" + }, + { + "output_type": "display_data", + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "57726179f0d34867b470244bcfa0b21b", + "version_minor": 0, + "version_major": 2 + }, + "text/plain": [ + "HBox(children=(FloatProgress(value=0.0, max=1648877.0), HTML(value='')))" + ] + }, + "metadata": { + "tags": [] + } + }, + { + "output_type": "stream", + "text": [ + "\n", + "Extracting ./MNIST/raw/t10k-images-idx3-ubyte.gz to ./MNIST/raw\n", + "\n", + "Downloading http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz\n", + "Failed to download (trying next):\n", + "HTTP Error 503: Service Unavailable\n", + "\n", + "Downloading https://ossci-datasets.s3.amazonaws.com/mnist/t10k-labels-idx1-ubyte.gz\n", + "Downloading https://ossci-datasets.s3.amazonaws.com/mnist/t10k-labels-idx1-ubyte.gz to ./MNIST/raw/t10k-labels-idx1-ubyte.gz\n" + ], + "name": "stdout" + }, + { + "output_type": "display_data", + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "600d5290e34b4ccd989083c0d4546b30", + "version_minor": 0, + "version_major": 2 + }, + "text/plain": [ + "HBox(children=(FloatProgress(value=0.0, max=4542.0), HTML(value='')))" + ] + }, + "metadata": { + "tags": [] + } + }, + { + "output_type": "stream", + "text": [ + "\n", + "Extracting ./MNIST/raw/t10k-labels-idx1-ubyte.gz to ./MNIST/raw\n", + "\n" + ], + "name": "stdout" + }, + { + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.7/dist-packages/torchvision/datasets/mnist.py:498: UserWarning: The given NumPy array is not writeable, and PyTorch does not support non-writeable tensors. This means you can write to the underlying (supposedly non-writeable) NumPy array using the tensor. You may want to copy the array to protect its data or make it writeable before converting it to a tensor. This type of warning will be suppressed for the rest of this program. (Triggered internally at /pytorch/torch/csrc/utils/tensor_numpy.cpp:180.)\n", + " return torch.from_numpy(parsed.astype(m[2], copy=False)).view(*s)\n" + ], + "name": "stderr" + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Bn2MS_V4p-lf" + }, + "source": [ + "데이터가 잘 들어 왔는지 확인 합니다." + ], + "id": "Bn2MS_V4p-lf" + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 335 + }, + "id": "7lUZidi5p-lf", + "outputId": "fdc26d2c-0875-45e9-d435-48d722383b3a" + }, + "source": [ + "for batch_idx, (x, y) in enumerate(train_loader):\n", + " print(' | Batch index:', batch_idx, end='')\n", + " print(' | Batch size:', y.size()[0])\n", + "\n", + " x = x.to(DEVICE)\n", + " y = y.to(DEVICE)\n", + "\n", + " x_numpy = x.numpy()\n", + " y_numpy = y.numpy()\n", + " print('input batch의 모양:', x_numpy.shape)\n", + " plt.imshow(x_numpy[0].reshape(28, 28))\n", + " plt.title(f'Label {y_numpy[0]}')\n", + " plt.show()\n", + "\n", + " print('break minibatch for-loop')\n", + " break" + ], + "id": "7lUZidi5p-lf", + "execution_count": 10, + "outputs": [ + { + "output_type": "stream", + "text": [ + " | Batch index: 0 | Batch size: 64\n", + "input batch의 모양: (64, 1, 28, 28)\n" + ], + "name": "stdout" + }, + { + "output_type": "display_data", + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [], + "needs_background": "light" + } + }, + { + "output_type": "stream", + "text": [ + "break minibatch for-loop\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "wGMKGsvnp-lg" + }, + "source": [ + "## 2-1. Deep Neural Network\n", + "아래 셀은 Deep Neural Network를 정의 합니다." + ], + "id": "wGMKGsvnp-lg" + }, + { + "cell_type": "code", + "metadata": { + "id": "IImGpGLdp-lg" + }, + "source": [ + "# 변경 가능 합니다.\n", + "class DNN(nn.Module):\n", + " def __init__(self, num_features, num_hidden_1, num_hidden_2, num_hidden_3, num_classes):\n", + " \"\"\"\n", + " num_features: input feature 갯수\n", + " num_hidden_1: 첫 번째 레이어의 노드 갯수\n", + " num_hidden_2: 두 번째 레이어의 노드 갯수\n", + " num_hidden_3: 세 번째 레이어의 노드 갯수\n", + " num_classes: 분류하고자 하는 class 갯수\n", + " \"\"\"\n", + " super(DNN, self).__init__()\n", + " \n", + " self.num_classes = num_classes\n", + " \n", + " # 수정 가능!: 레이어를 쌓는 법을 아신다면, 여기서 레이어를 쌓으셔도, 혹은 지우셔도 무방 합니다. (단, nn.Linear만)\n", + " self.linear_1 = nn.Linear(num_features, num_hidden_1)\n", + " self.linear_2 = nn.Linear(num_hidden_1, num_hidden_2)\n", + " self.linear_3 = nn.Linear(num_hidden_2, num_hidden_3)\n", + " self.linear_out = nn.Linear(num_hidden_3, num_classes)\n", + " \n", + " def forward(self, x):\n", + " out = self.linear_1(x)\n", + " out = torch.relu(out)\n", + " out = self.linear_2(out)\n", + " out = torch.relu(out)\n", + " out = self.linear_3(out)\n", + " out = torch.relu(out)\n", + " logits = self.linear_out(out)\n", + " probas = torch.sigmoid(logits)\n", + " return logits, probas\n", + "\n", + "# 수정 가능!\n", + "model = DNN(num_features=28*28,\n", + " num_hidden_1=100,\n", + " num_hidden_2=50,\n", + " num_hidden_3=20,\n", + " num_classes=10)\n", + "\n", + "model = model.to(DEVICE)" + ], + "id": "IImGpGLdp-lg", + "execution_count": 11, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "f4gY5pvJp-lh" + }, + "source": [ + "## 2-2. Training\n", + "여기서는 **Optimizer**와, **Epoch**를 설정 합니다. " + ], + "id": "f4gY5pvJp-lh" + }, + { + "cell_type": "code", + "metadata": { + "id": "KSrjPFEGp-lh" + }, + "source": [ + "# 수정 가능!\n", + "LEARNING_LATE = 0.065\n", + "NUM_EPOCHS = 20" + ], + "id": "KSrjPFEGp-lh", + "execution_count": 12, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "US-EDI7mp-li" + }, + "source": [ + "optimizer = torch.optim.SGD(model.parameters(), lr=LEARNING_LATE)" + ], + "id": "US-EDI7mp-li", + "execution_count": 13, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "4f2YYSeBp-li", + "outputId": "06eaa130-51b6-4ada-8908-6efe705e30f6" + }, + "source": [ + "def compute_accuracy_and_loss(model, data_loader, device):\n", + " correct_pred, num_examples = 0, 0\n", + " cross_entropy = 0.\n", + " for i, (features, targets) in enumerate(data_loader):\n", + " \n", + " features = features.view(-1, 28*28).to(device)\n", + " targets = targets.to(device)\n", + "\n", + " logits, probas = model(features)\n", + " cross_entropy += F.cross_entropy(logits, targets).item()\n", + " _, predicted_labels = torch.max(probas, 1)\n", + " num_examples += targets.size(0)\n", + " correct_pred += (predicted_labels == targets).sum()\n", + " return correct_pred.float()/num_examples * 100, cross_entropy/num_examples\n", + " \n", + "\n", + "start_time = time.time()\n", + "train_acc_lst, test_acc_lst = [], []\n", + "train_loss_lst, test_loss_lst = [], []\n", + "\n", + "for epoch in range(NUM_EPOCHS):\n", + " \n", + " model.train()\n", + " \n", + " for batch_idx, (features, targets) in enumerate(train_loader):\n", + " \n", + " ### PREPARE MINIBATCH\n", + " features = features.view(-1, 28*28).to(DEVICE)\n", + " targets = targets.to(DEVICE)\n", + " \n", + " ### FORWARD AND BACK PROP\n", + " logits, probas = model(features) # 모델 계산\n", + " cost = F.cross_entropy(logits, targets) # 크로스 엔트로피 계산\n", + " optimizer.zero_grad() # 기울기 초기화\n", + " \n", + " cost.backward() # 역전파\n", + " \n", + " ### UPDATE MODEL PARAMETERS\n", + " optimizer.step() # step 적용\n", + " \n", + " ### LOGGING\n", + " if not batch_idx % 40:\n", + " print (f'Epoch: {epoch+1:03d}/{NUM_EPOCHS:03d} | '\n", + " f'Batch {batch_idx:03d}/{len(train_loader):03d} |' \n", + " f' Cost: {cost:.4f}')\n", + "\n", + " # 매 Epoch마다 evaluation을 진행합니다. \n", + " # Epoch마다 Loss를 기록하여 학습과정을 살펴보고 Underfitting, Overfitting 여부를 확인합니다.\n", + " model.eval()\n", + " with torch.set_grad_enabled(False): # Gradient 계산이 안되도록\n", + " train_acc, train_loss = compute_accuracy_and_loss(model, train_loader, device=DEVICE) # train acc, loss 계산\n", + " test_acc, test_loss = compute_accuracy_and_loss(model, test_loader, device=DEVICE) # test acc, loss 계산\n", + " \n", + " # list에 train, test의 acc, loss 추가\n", + " train_acc_lst.append(train_acc)\n", + " test_acc_lst.append(test_acc)\n", + " train_loss_lst.append(train_loss)\n", + " test_loss_lst.append(test_loss)\n", + " \n", + " # 로깅\n", + " print(f'Epoch: {epoch+1:03d}/{NUM_EPOCHS:03d} Train Acc.: {train_acc:.2f}%'\n", + " f' | Test Acc.: {test_acc:.2f}%')\n", + " \n", + " # 1 epoch 학습 소요시간\n", + " elapsed = (time.time() - start_time)/60\n", + " print(f'Time elapsed: {elapsed:.2f} min')\n", + "\n", + "# 총 학습 소요시간\n", + "elapsed = (time.time() - start_time)/60\n", + "print(f'Total Training Time: {elapsed:.2f} min')" + ], + "id": "4f2YYSeBp-li", + "execution_count": 14, + "outputs": [ + { + "output_type": "stream", + "text": [ + "Epoch: 001/020 | Batch 000/937 | Cost: 2.2828\n", + "Epoch: 001/020 | Batch 040/937 | Cost: 2.0539\n", + "Epoch: 001/020 | Batch 080/937 | Cost: 1.3756\n", + "Epoch: 001/020 | Batch 120/937 | Cost: 1.1131\n", + "Epoch: 001/020 | Batch 160/937 | Cost: 0.9344\n", + "Epoch: 001/020 | Batch 200/937 | Cost: 0.7961\n", + "Epoch: 001/020 | Batch 240/937 | Cost: 0.6156\n", + "Epoch: 001/020 | Batch 280/937 | Cost: 0.5147\n", + "Epoch: 001/020 | Batch 320/937 | Cost: 0.5702\n", + "Epoch: 001/020 | Batch 360/937 | Cost: 0.3087\n", + "Epoch: 001/020 | Batch 400/937 | Cost: 0.2383\n", + "Epoch: 001/020 | Batch 440/937 | Cost: 0.5061\n", + "Epoch: 001/020 | Batch 480/937 | Cost: 0.3288\n", + "Epoch: 001/020 | Batch 520/937 | Cost: 0.3442\n", + "Epoch: 001/020 | Batch 560/937 | Cost: 0.4368\n", + "Epoch: 001/020 | Batch 600/937 | Cost: 0.3477\n", + "Epoch: 001/020 | Batch 640/937 | Cost: 0.3224\n", + "Epoch: 001/020 | Batch 680/937 | Cost: 0.2561\n", + "Epoch: 001/020 | Batch 720/937 | Cost: 0.4069\n", + "Epoch: 001/020 | Batch 760/937 | Cost: 0.2755\n", + "Epoch: 001/020 | Batch 800/937 | Cost: 0.0814\n", + "Epoch: 001/020 | Batch 840/937 | Cost: 0.2119\n", + "Epoch: 001/020 | Batch 880/937 | Cost: 0.2781\n", + "Epoch: 001/020 | Batch 920/937 | Cost: 0.3444\n", + "Epoch: 001/020 Train Acc.: 92.59% | Test Acc.: 92.68%\n", + "Time elapsed: 0.43 min\n", + "Epoch: 002/020 | Batch 000/937 | Cost: 0.2831\n", + "Epoch: 002/020 | Batch 040/937 | Cost: 0.1821\n", + "Epoch: 002/020 | Batch 080/937 | Cost: 0.3078\n", + "Epoch: 002/020 | Batch 120/937 | Cost: 0.1967\n", + "Epoch: 002/020 | Batch 160/937 | Cost: 0.3915\n", + "Epoch: 002/020 | Batch 200/937 | Cost: 0.2059\n", + "Epoch: 002/020 | Batch 240/937 | Cost: 0.2498\n", + "Epoch: 002/020 | Batch 280/937 | Cost: 0.2319\n", + "Epoch: 002/020 | Batch 320/937 | Cost: 0.1452\n", + "Epoch: 002/020 | Batch 360/937 | Cost: 0.1679\n", + "Epoch: 002/020 | Batch 400/937 | Cost: 0.1852\n", + "Epoch: 002/020 | Batch 440/937 | Cost: 0.2278\n", + "Epoch: 002/020 | Batch 480/937 | Cost: 0.2408\n", + "Epoch: 002/020 | Batch 520/937 | Cost: 0.1225\n", + "Epoch: 002/020 | Batch 560/937 | Cost: 0.3228\n", + "Epoch: 002/020 | Batch 600/937 | Cost: 0.3511\n", + "Epoch: 002/020 | Batch 640/937 | Cost: 0.2601\n", + "Epoch: 002/020 | Batch 680/937 | Cost: 0.3265\n", + "Epoch: 002/020 | Batch 720/937 | Cost: 0.0971\n", + "Epoch: 002/020 | Batch 760/937 | Cost: 0.1791\n", + "Epoch: 002/020 | Batch 800/937 | Cost: 0.0927\n", + "Epoch: 002/020 | Batch 840/937 | Cost: 0.1133\n", + "Epoch: 002/020 | Batch 880/937 | Cost: 0.2259\n", + "Epoch: 002/020 | Batch 920/937 | Cost: 0.2652\n", + "Epoch: 002/020 Train Acc.: 94.65% | Test Acc.: 94.39%\n", + "Time elapsed: 0.86 min\n", + "Epoch: 003/020 | Batch 000/937 | Cost: 0.1862\n", + "Epoch: 003/020 | Batch 040/937 | Cost: 0.3247\n", + "Epoch: 003/020 | Batch 080/937 | Cost: 0.0822\n", + "Epoch: 003/020 | Batch 120/937 | Cost: 0.1481\n", + "Epoch: 003/020 | Batch 160/937 | Cost: 0.0541\n", + "Epoch: 003/020 | Batch 200/937 | Cost: 0.1627\n", + "Epoch: 003/020 | Batch 240/937 | Cost: 0.1681\n", + "Epoch: 003/020 | Batch 280/937 | Cost: 0.1668\n", + "Epoch: 003/020 | Batch 320/937 | Cost: 0.1449\n", + "Epoch: 003/020 | Batch 360/937 | Cost: 0.0914\n", + "Epoch: 003/020 | Batch 400/937 | Cost: 0.0900\n", + "Epoch: 003/020 | Batch 440/937 | Cost: 0.1771\n", + "Epoch: 003/020 | Batch 480/937 | Cost: 0.1710\n", + "Epoch: 003/020 | Batch 520/937 | Cost: 0.1484\n", + "Epoch: 003/020 | Batch 560/937 | Cost: 0.2362\n", + "Epoch: 003/020 | Batch 600/937 | Cost: 0.2143\n", + "Epoch: 003/020 | Batch 640/937 | Cost: 0.1112\n", + "Epoch: 003/020 | Batch 680/937 | Cost: 0.1385\n", + "Epoch: 003/020 | Batch 720/937 | Cost: 0.0554\n", + "Epoch: 003/020 | Batch 760/937 | Cost: 0.1882\n", + "Epoch: 003/020 | Batch 800/937 | Cost: 0.1665\n", + "Epoch: 003/020 | Batch 840/937 | Cost: 0.2032\n", + "Epoch: 003/020 | Batch 880/937 | Cost: 0.1674\n", + "Epoch: 003/020 | Batch 920/937 | Cost: 0.1155\n", + "Epoch: 003/020 Train Acc.: 92.71% | Test Acc.: 92.50%\n", + "Time elapsed: 1.29 min\n", + "Epoch: 004/020 | Batch 000/937 | Cost: 0.2263\n", + "Epoch: 004/020 | Batch 040/937 | Cost: 0.0739\n", + "Epoch: 004/020 | Batch 080/937 | Cost: 0.0581\n", + "Epoch: 004/020 | Batch 120/937 | Cost: 0.0357\n", + "Epoch: 004/020 | Batch 160/937 | Cost: 0.1028\n", + "Epoch: 004/020 | Batch 200/937 | Cost: 0.1846\n", + "Epoch: 004/020 | Batch 240/937 | Cost: 0.1010\n", + "Epoch: 004/020 | Batch 280/937 | Cost: 0.2741\n", + "Epoch: 004/020 | Batch 320/937 | Cost: 0.0576\n", + "Epoch: 004/020 | Batch 360/937 | Cost: 0.2315\n", + "Epoch: 004/020 | Batch 400/937 | Cost: 0.0321\n", + "Epoch: 004/020 | Batch 440/937 | Cost: 0.0157\n", + "Epoch: 004/020 | Batch 480/937 | Cost: 0.1436\n", + "Epoch: 004/020 | Batch 520/937 | Cost: 0.2095\n", + "Epoch: 004/020 | Batch 560/937 | Cost: 0.0320\n", + "Epoch: 004/020 | Batch 600/937 | Cost: 0.0738\n", + "Epoch: 004/020 | Batch 640/937 | Cost: 0.1181\n", + "Epoch: 004/020 | Batch 680/937 | Cost: 0.1402\n", + "Epoch: 004/020 | Batch 720/937 | Cost: 0.1005\n", + "Epoch: 004/020 | Batch 760/937 | Cost: 0.1058\n", + "Epoch: 004/020 | Batch 800/937 | Cost: 0.0576\n", + "Epoch: 004/020 | Batch 840/937 | Cost: 0.0279\n", + "Epoch: 004/020 | Batch 880/937 | Cost: 0.0803\n", + "Epoch: 004/020 | Batch 920/937 | Cost: 0.0795\n", + "Epoch: 004/020 Train Acc.: 95.97% | Test Acc.: 95.59%\n", + "Time elapsed: 1.70 min\n", + "Epoch: 005/020 | Batch 000/937 | Cost: 0.2020\n", + "Epoch: 005/020 | Batch 040/937 | Cost: 0.1251\n", + "Epoch: 005/020 | Batch 080/937 | Cost: 0.0618\n", + "Epoch: 005/020 | Batch 120/937 | Cost: 0.0466\n", + "Epoch: 005/020 | Batch 160/937 | Cost: 0.2012\n", + "Epoch: 005/020 | Batch 200/937 | Cost: 0.1599\n", + "Epoch: 005/020 | Batch 240/937 | Cost: 0.0452\n", + "Epoch: 005/020 | Batch 280/937 | Cost: 0.0736\n", + "Epoch: 005/020 | Batch 320/937 | Cost: 0.0345\n", + "Epoch: 005/020 | Batch 360/937 | Cost: 0.1739\n", + "Epoch: 005/020 | Batch 400/937 | Cost: 0.0440\n", + "Epoch: 005/020 | Batch 440/937 | Cost: 0.0883\n", + "Epoch: 005/020 | Batch 480/937 | Cost: 0.1208\n", + "Epoch: 005/020 | Batch 520/937 | Cost: 0.1272\n", + "Epoch: 005/020 | Batch 560/937 | Cost: 0.1527\n", + "Epoch: 005/020 | Batch 600/937 | Cost: 0.1100\n", + "Epoch: 005/020 | Batch 640/937 | Cost: 0.0388\n", + "Epoch: 005/020 | Batch 680/937 | Cost: 0.0126\n", + "Epoch: 005/020 | Batch 720/937 | Cost: 0.1102\n", + "Epoch: 005/020 | Batch 760/937 | Cost: 0.1069\n", + "Epoch: 005/020 | Batch 800/937 | Cost: 0.1330\n", + "Epoch: 005/020 | Batch 840/937 | Cost: 0.0856\n", + "Epoch: 005/020 | Batch 880/937 | Cost: 0.1339\n", + "Epoch: 005/020 | Batch 920/937 | Cost: 0.0852\n", + "Epoch: 005/020 Train Acc.: 97.22% | Test Acc.: 96.68%\n", + "Time elapsed: 2.12 min\n", + "Epoch: 006/020 | Batch 000/937 | Cost: 0.1917\n", + "Epoch: 006/020 | Batch 040/937 | Cost: 0.1505\n", + "Epoch: 006/020 | Batch 080/937 | Cost: 0.1299\n", + "Epoch: 006/020 | Batch 120/937 | Cost: 0.0470\n", + "Epoch: 006/020 | Batch 160/937 | Cost: 0.0766\n", + "Epoch: 006/020 | Batch 200/937 | Cost: 0.0967\n", + "Epoch: 006/020 | Batch 240/937 | Cost: 0.1065\n", + "Epoch: 006/020 | Batch 280/937 | Cost: 0.0666\n", + "Epoch: 006/020 | Batch 320/937 | Cost: 0.0657\n", + "Epoch: 006/020 | Batch 360/937 | Cost: 0.1493\n", + "Epoch: 006/020 | Batch 400/937 | Cost: 0.0715\n", + "Epoch: 006/020 | Batch 440/937 | Cost: 0.0803\n", + "Epoch: 006/020 | Batch 480/937 | Cost: 0.0352\n", + "Epoch: 006/020 | Batch 520/937 | Cost: 0.0925\n", + "Epoch: 006/020 | Batch 560/937 | Cost: 0.0881\n", + "Epoch: 006/020 | Batch 600/937 | Cost: 0.1306\n", + "Epoch: 006/020 | Batch 640/937 | Cost: 0.1278\n", + "Epoch: 006/020 | Batch 680/937 | Cost: 0.0492\n", + "Epoch: 006/020 | Batch 720/937 | Cost: 0.0257\n", + "Epoch: 006/020 | Batch 760/937 | Cost: 0.0168\n", + "Epoch: 006/020 | Batch 800/937 | Cost: 0.1357\n", + "Epoch: 006/020 | Batch 840/937 | Cost: 0.2923\n", + "Epoch: 006/020 | Batch 880/937 | Cost: 0.0333\n", + "Epoch: 006/020 | Batch 920/937 | Cost: 0.1328\n", + "Epoch: 006/020 Train Acc.: 97.83% | Test Acc.: 97.00%\n", + "Time elapsed: 2.55 min\n", + "Epoch: 007/020 | Batch 000/937 | Cost: 0.0956\n", + "Epoch: 007/020 | Batch 040/937 | Cost: 0.1117\n", + "Epoch: 007/020 | Batch 080/937 | Cost: 0.0688\n", + "Epoch: 007/020 | Batch 120/937 | Cost: 0.0571\n", + "Epoch: 007/020 | Batch 160/937 | Cost: 0.0429\n", + "Epoch: 007/020 | Batch 200/937 | Cost: 0.0402\n", + "Epoch: 007/020 | Batch 240/937 | Cost: 0.0111\n", + "Epoch: 007/020 | Batch 280/937 | Cost: 0.1191\n", + "Epoch: 007/020 | Batch 320/937 | Cost: 0.0083\n", + "Epoch: 007/020 | Batch 360/937 | Cost: 0.0718\n", + "Epoch: 007/020 | Batch 400/937 | Cost: 0.0579\n", + "Epoch: 007/020 | Batch 440/937 | Cost: 0.1512\n", + "Epoch: 007/020 | Batch 480/937 | Cost: 0.0379\n", + "Epoch: 007/020 | Batch 520/937 | Cost: 0.0567\n", + "Epoch: 007/020 | Batch 560/937 | Cost: 0.0290\n", + "Epoch: 007/020 | Batch 600/937 | Cost: 0.0086\n", + "Epoch: 007/020 | Batch 640/937 | Cost: 0.0304\n", + "Epoch: 007/020 | Batch 680/937 | Cost: 0.0567\n", + "Epoch: 007/020 | Batch 720/937 | Cost: 0.0554\n", + "Epoch: 007/020 | Batch 760/937 | Cost: 0.0255\n", + "Epoch: 007/020 | Batch 800/937 | Cost: 0.0854\n", + "Epoch: 007/020 | Batch 840/937 | Cost: 0.0694\n", + "Epoch: 007/020 | Batch 880/937 | Cost: 0.0936\n", + "Epoch: 007/020 | Batch 920/937 | Cost: 0.0690\n", + "Epoch: 007/020 Train Acc.: 98.08% | Test Acc.: 97.37%\n", + "Time elapsed: 2.98 min\n", + "Epoch: 008/020 | Batch 000/937 | Cost: 0.0385\n", + "Epoch: 008/020 | Batch 040/937 | Cost: 0.2053\n", + "Epoch: 008/020 | Batch 080/937 | Cost: 0.0655\n", + "Epoch: 008/020 | Batch 120/937 | Cost: 0.1519\n", + "Epoch: 008/020 | Batch 160/937 | Cost: 0.0564\n", + "Epoch: 008/020 | Batch 200/937 | Cost: 0.0049\n", + "Epoch: 008/020 | Batch 240/937 | Cost: 0.0267\n", + "Epoch: 008/020 | Batch 280/937 | Cost: 0.0387\n", + "Epoch: 008/020 | Batch 320/937 | Cost: 0.0211\n", + "Epoch: 008/020 | Batch 360/937 | Cost: 0.0912\n", + "Epoch: 008/020 | Batch 400/937 | Cost: 0.0117\n", + "Epoch: 008/020 | Batch 440/937 | Cost: 0.1562\n", + "Epoch: 008/020 | Batch 480/937 | Cost: 0.0228\n", + "Epoch: 008/020 | Batch 520/937 | Cost: 0.1191\n", + "Epoch: 008/020 | Batch 560/937 | Cost: 0.0165\n", + "Epoch: 008/020 | Batch 600/937 | Cost: 0.1030\n", + "Epoch: 008/020 | Batch 640/937 | Cost: 0.0923\n", + "Epoch: 008/020 | Batch 680/937 | Cost: 0.0328\n", + "Epoch: 008/020 | Batch 720/937 | Cost: 0.0104\n", + "Epoch: 008/020 | Batch 760/937 | Cost: 0.0397\n", + "Epoch: 008/020 | Batch 800/937 | Cost: 0.1171\n", + "Epoch: 008/020 | Batch 840/937 | Cost: 0.2187\n", + "Epoch: 008/020 | Batch 880/937 | Cost: 0.1398\n", + "Epoch: 008/020 | Batch 920/937 | Cost: 0.0288\n", + "Epoch: 008/020 Train Acc.: 98.26% | Test Acc.: 97.31%\n", + "Time elapsed: 3.41 min\n", + "Epoch: 009/020 | Batch 000/937 | Cost: 0.0123\n", + "Epoch: 009/020 | Batch 040/937 | Cost: 0.0706\n", + "Epoch: 009/020 | Batch 080/937 | Cost: 0.0831\n", + "Epoch: 009/020 | Batch 120/937 | Cost: 0.0695\n", + "Epoch: 009/020 | Batch 160/937 | Cost: 0.1283\n", + "Epoch: 009/020 | Batch 200/937 | Cost: 0.0105\n", + "Epoch: 009/020 | Batch 240/937 | Cost: 0.0944\n", + "Epoch: 009/020 | Batch 280/937 | Cost: 0.0716\n", + "Epoch: 009/020 | Batch 320/937 | Cost: 0.0125\n", + "Epoch: 009/020 | Batch 360/937 | Cost: 0.0043\n", + "Epoch: 009/020 | Batch 400/937 | Cost: 0.1814\n", + "Epoch: 009/020 | Batch 440/937 | Cost: 0.0365\n", + "Epoch: 009/020 | Batch 480/937 | Cost: 0.1022\n", + "Epoch: 009/020 | Batch 520/937 | Cost: 0.1343\n", + "Epoch: 009/020 | Batch 560/937 | Cost: 0.0334\n", + "Epoch: 009/020 | Batch 600/937 | Cost: 0.0165\n", + "Epoch: 009/020 | Batch 640/937 | Cost: 0.1117\n", + "Epoch: 009/020 | Batch 680/937 | Cost: 0.0489\n", + "Epoch: 009/020 | Batch 720/937 | Cost: 0.0738\n", + "Epoch: 009/020 | Batch 760/937 | Cost: 0.0790\n", + "Epoch: 009/020 | Batch 800/937 | Cost: 0.0329\n", + "Epoch: 009/020 | Batch 840/937 | Cost: 0.0319\n", + "Epoch: 009/020 | Batch 880/937 | Cost: 0.0289\n", + "Epoch: 009/020 | Batch 920/937 | Cost: 0.0844\n", + "Epoch: 009/020 Train Acc.: 98.33% | Test Acc.: 97.36%\n", + "Time elapsed: 3.83 min\n", + "Epoch: 010/020 | Batch 000/937 | Cost: 0.0150\n", + "Epoch: 010/020 | Batch 040/937 | Cost: 0.3134\n", + "Epoch: 010/020 | Batch 080/937 | Cost: 0.0623\n", + "Epoch: 010/020 | Batch 120/937 | Cost: 0.0261\n", + "Epoch: 010/020 | Batch 160/937 | Cost: 0.0254\n", + "Epoch: 010/020 | Batch 200/937 | Cost: 0.0585\n", + "Epoch: 010/020 | Batch 240/937 | Cost: 0.0095\n", + "Epoch: 010/020 | Batch 280/937 | Cost: 0.0980\n", + "Epoch: 010/020 | Batch 320/937 | Cost: 0.0195\n", + "Epoch: 010/020 | Batch 360/937 | Cost: 0.0177\n", + "Epoch: 010/020 | Batch 400/937 | Cost: 0.0641\n", + "Epoch: 010/020 | Batch 440/937 | Cost: 0.0282\n", + "Epoch: 010/020 | Batch 480/937 | Cost: 0.0521\n", + "Epoch: 010/020 | Batch 520/937 | Cost: 0.2554\n", + "Epoch: 010/020 | Batch 560/937 | Cost: 0.0538\n", + "Epoch: 010/020 | Batch 600/937 | Cost: 0.0256\n", + "Epoch: 010/020 | Batch 640/937 | Cost: 0.0106\n", + "Epoch: 010/020 | Batch 680/937 | Cost: 0.0074\n", + "Epoch: 010/020 | Batch 720/937 | Cost: 0.0603\n", + "Epoch: 010/020 | Batch 760/937 | Cost: 0.0670\n", + "Epoch: 010/020 | Batch 800/937 | Cost: 0.0497\n", + "Epoch: 010/020 | Batch 840/937 | Cost: 0.0072\n", + "Epoch: 010/020 | Batch 880/937 | Cost: 0.0941\n", + "Epoch: 010/020 | Batch 920/937 | Cost: 0.0547\n", + "Epoch: 010/020 Train Acc.: 98.35% | Test Acc.: 97.17%\n", + "Time elapsed: 4.26 min\n", + "Epoch: 011/020 | Batch 000/937 | Cost: 0.0554\n", + "Epoch: 011/020 | Batch 040/937 | Cost: 0.0166\n", + "Epoch: 011/020 | Batch 080/937 | Cost: 0.0254\n", + "Epoch: 011/020 | Batch 120/937 | Cost: 0.0088\n", + "Epoch: 011/020 | Batch 160/937 | Cost: 0.0206\n", + "Epoch: 011/020 | Batch 200/937 | Cost: 0.0102\n", + "Epoch: 011/020 | Batch 240/937 | Cost: 0.0352\n", + "Epoch: 011/020 | Batch 280/937 | Cost: 0.0460\n", + "Epoch: 011/020 | Batch 320/937 | Cost: 0.1013\n", + "Epoch: 011/020 | Batch 360/937 | Cost: 0.0159\n", + "Epoch: 011/020 | Batch 400/937 | Cost: 0.0612\n", + "Epoch: 011/020 | Batch 440/937 | Cost: 0.0256\n", + "Epoch: 011/020 | Batch 480/937 | Cost: 0.0135\n", + "Epoch: 011/020 | Batch 520/937 | Cost: 0.0359\n", + "Epoch: 011/020 | Batch 560/937 | Cost: 0.0082\n", + "Epoch: 011/020 | Batch 600/937 | Cost: 0.0026\n", + "Epoch: 011/020 | Batch 640/937 | Cost: 0.0154\n", + "Epoch: 011/020 | Batch 680/937 | Cost: 0.0198\n", + "Epoch: 011/020 | Batch 720/937 | Cost: 0.0591\n", + "Epoch: 011/020 | Batch 760/937 | Cost: 0.0811\n", + "Epoch: 011/020 | Batch 800/937 | Cost: 0.1465\n", + "Epoch: 011/020 | Batch 840/937 | Cost: 0.0319\n", + "Epoch: 011/020 | Batch 880/937 | Cost: 0.0258\n", + "Epoch: 011/020 | Batch 920/937 | Cost: 0.0633\n", + "Epoch: 011/020 Train Acc.: 98.65% | Test Acc.: 97.43%\n", + "Time elapsed: 4.69 min\n", + "Epoch: 012/020 | Batch 000/937 | Cost: 0.0080\n", + "Epoch: 012/020 | Batch 040/937 | Cost: 0.0135\n", + "Epoch: 012/020 | Batch 080/937 | Cost: 0.0249\n", + "Epoch: 012/020 | Batch 120/937 | Cost: 0.0143\n", + "Epoch: 012/020 | Batch 160/937 | Cost: 0.0128\n", + "Epoch: 012/020 | Batch 200/937 | Cost: 0.1125\n", + "Epoch: 012/020 | Batch 240/937 | Cost: 0.0502\n", + "Epoch: 012/020 | Batch 280/937 | Cost: 0.0158\n", + "Epoch: 012/020 | Batch 320/937 | Cost: 0.0177\n", + "Epoch: 012/020 | Batch 360/937 | Cost: 0.0827\n", + "Epoch: 012/020 | Batch 400/937 | Cost: 0.0080\n", + "Epoch: 012/020 | Batch 440/937 | Cost: 0.0057\n", + "Epoch: 012/020 | Batch 480/937 | Cost: 0.0447\n", + "Epoch: 012/020 | Batch 520/937 | Cost: 0.1996\n", + "Epoch: 012/020 | Batch 560/937 | Cost: 0.0172\n", + "Epoch: 012/020 | Batch 600/937 | Cost: 0.0079\n", + "Epoch: 012/020 | Batch 640/937 | Cost: 0.0686\n", + "Epoch: 012/020 | Batch 680/937 | Cost: 0.0462\n", + "Epoch: 012/020 | Batch 720/937 | Cost: 0.0352\n", + "Epoch: 012/020 | Batch 760/937 | Cost: 0.0261\n", + "Epoch: 012/020 | Batch 800/937 | Cost: 0.1725\n", + "Epoch: 012/020 | Batch 840/937 | Cost: 0.0092\n", + "Epoch: 012/020 | Batch 880/937 | Cost: 0.0133\n", + "Epoch: 012/020 | Batch 920/937 | Cost: 0.0237\n", + "Epoch: 012/020 Train Acc.: 98.24% | Test Acc.: 97.10%\n", + "Time elapsed: 5.12 min\n", + "Epoch: 013/020 | Batch 000/937 | Cost: 0.0771\n", + "Epoch: 013/020 | Batch 040/937 | Cost: 0.0177\n", + "Epoch: 013/020 | Batch 080/937 | Cost: 0.0208\n", + "Epoch: 013/020 | Batch 120/937 | Cost: 0.0104\n", + "Epoch: 013/020 | Batch 160/937 | Cost: 0.0337\n", + "Epoch: 013/020 | Batch 200/937 | Cost: 0.0187\n", + "Epoch: 013/020 | Batch 240/937 | Cost: 0.0261\n", + "Epoch: 013/020 | Batch 280/937 | Cost: 0.0193\n", + "Epoch: 013/020 | Batch 320/937 | Cost: 0.0052\n", + "Epoch: 013/020 | Batch 360/937 | Cost: 0.0169\n", + "Epoch: 013/020 | Batch 400/937 | Cost: 0.0093\n", + "Epoch: 013/020 | Batch 440/937 | Cost: 0.0287\n", + "Epoch: 013/020 | Batch 480/937 | Cost: 0.0875\n", + "Epoch: 013/020 | Batch 520/937 | Cost: 0.0403\n", + "Epoch: 013/020 | Batch 560/937 | Cost: 0.0764\n", + "Epoch: 013/020 | Batch 600/937 | Cost: 0.0329\n", + "Epoch: 013/020 | Batch 640/937 | Cost: 0.0939\n", + "Epoch: 013/020 | Batch 680/937 | Cost: 0.0410\n", + "Epoch: 013/020 | Batch 720/937 | Cost: 0.0405\n", + "Epoch: 013/020 | Batch 760/937 | Cost: 0.0135\n", + "Epoch: 013/020 | Batch 800/937 | Cost: 0.0216\n", + "Epoch: 013/020 | Batch 840/937 | Cost: 0.0161\n", + "Epoch: 013/020 | Batch 880/937 | Cost: 0.0129\n", + "Epoch: 013/020 | Batch 920/937 | Cost: 0.0979\n", + "Epoch: 013/020 Train Acc.: 98.41% | Test Acc.: 97.12%\n", + "Time elapsed: 5.55 min\n", + "Epoch: 014/020 | Batch 000/937 | Cost: 0.0852\n", + "Epoch: 014/020 | Batch 040/937 | Cost: 0.0072\n", + "Epoch: 014/020 | Batch 080/937 | Cost: 0.0139\n", + "Epoch: 014/020 | Batch 120/937 | Cost: 0.0694\n", + "Epoch: 014/020 | Batch 160/937 | Cost: 0.0399\n", + "Epoch: 014/020 | Batch 200/937 | Cost: 0.0033\n", + "Epoch: 014/020 | Batch 240/937 | Cost: 0.0067\n", + "Epoch: 014/020 | Batch 280/937 | Cost: 0.0056\n", + "Epoch: 014/020 | Batch 320/937 | Cost: 0.0555\n", + "Epoch: 014/020 | Batch 360/937 | Cost: 0.0690\n", + "Epoch: 014/020 | Batch 400/937 | Cost: 0.0454\n", + "Epoch: 014/020 | Batch 440/937 | Cost: 0.0621\n", + "Epoch: 014/020 | Batch 480/937 | Cost: 0.0175\n", + "Epoch: 014/020 | Batch 520/937 | Cost: 0.1041\n", + "Epoch: 014/020 | Batch 560/937 | Cost: 0.0500\n", + "Epoch: 014/020 | Batch 600/937 | Cost: 0.0179\n", + "Epoch: 014/020 | Batch 640/937 | Cost: 0.0598\n", + "Epoch: 014/020 | Batch 680/937 | Cost: 0.0505\n", + "Epoch: 014/020 | Batch 720/937 | Cost: 0.0387\n", + "Epoch: 014/020 | Batch 760/937 | Cost: 0.0510\n", + "Epoch: 014/020 | Batch 800/937 | Cost: 0.0197\n", + "Epoch: 014/020 | Batch 840/937 | Cost: 0.0337\n", + "Epoch: 014/020 | Batch 880/937 | Cost: 0.0238\n", + "Epoch: 014/020 | Batch 920/937 | Cost: 0.0194\n", + "Epoch: 014/020 Train Acc.: 98.79% | Test Acc.: 97.61%\n", + "Time elapsed: 5.98 min\n", + "Epoch: 015/020 | Batch 000/937 | Cost: 0.0057\n", + "Epoch: 015/020 | Batch 040/937 | Cost: 0.0176\n", + "Epoch: 015/020 | Batch 080/937 | Cost: 0.0053\n", + "Epoch: 015/020 | Batch 120/937 | Cost: 0.0708\n", + "Epoch: 015/020 | Batch 160/937 | Cost: 0.0288\n", + "Epoch: 015/020 | Batch 200/937 | Cost: 0.0185\n", + "Epoch: 015/020 | Batch 240/937 | Cost: 0.0618\n", + "Epoch: 015/020 | Batch 280/937 | Cost: 0.0230\n", + "Epoch: 015/020 | Batch 320/937 | Cost: 0.1888\n", + "Epoch: 015/020 | Batch 360/937 | Cost: 0.0099\n", + "Epoch: 015/020 | Batch 400/937 | Cost: 0.0070\n", + "Epoch: 015/020 | Batch 440/937 | Cost: 0.0360\n", + "Epoch: 015/020 | Batch 480/937 | Cost: 0.0056\n", + "Epoch: 015/020 | Batch 520/937 | Cost: 0.1384\n", + "Epoch: 015/020 | Batch 560/937 | Cost: 0.0063\n", + "Epoch: 015/020 | Batch 600/937 | Cost: 0.0876\n", + "Epoch: 015/020 | Batch 640/937 | Cost: 0.0206\n", + "Epoch: 015/020 | Batch 680/937 | Cost: 0.0192\n", + "Epoch: 015/020 | Batch 720/937 | Cost: 0.0189\n", + "Epoch: 015/020 | Batch 760/937 | Cost: 0.0086\n", + "Epoch: 015/020 | Batch 800/937 | Cost: 0.0349\n", + "Epoch: 015/020 | Batch 840/937 | Cost: 0.0571\n", + "Epoch: 015/020 | Batch 880/937 | Cost: 0.1305\n", + "Epoch: 015/020 | Batch 920/937 | Cost: 0.0825\n", + "Epoch: 015/020 Train Acc.: 98.99% | Test Acc.: 97.49%\n", + "Time elapsed: 6.41 min\n", + "Epoch: 016/020 | Batch 000/937 | Cost: 0.0173\n", + "Epoch: 016/020 | Batch 040/937 | Cost: 0.0313\n", + "Epoch: 016/020 | Batch 080/937 | Cost: 0.0294\n", + "Epoch: 016/020 | Batch 120/937 | Cost: 0.0048\n", + "Epoch: 016/020 | Batch 160/937 | Cost: 0.0151\n", + "Epoch: 016/020 | Batch 200/937 | Cost: 0.0254\n", + "Epoch: 016/020 | Batch 240/937 | Cost: 0.0367\n", + "Epoch: 016/020 | Batch 280/937 | Cost: 0.0049\n", + "Epoch: 016/020 | Batch 320/937 | Cost: 0.0407\n", + "Epoch: 016/020 | Batch 360/937 | Cost: 0.0055\n", + "Epoch: 016/020 | Batch 400/937 | Cost: 0.0756\n", + "Epoch: 016/020 | Batch 440/937 | Cost: 0.0942\n", + "Epoch: 016/020 | Batch 480/937 | Cost: 0.0349\n", + "Epoch: 016/020 | Batch 520/937 | Cost: 0.1675\n", + "Epoch: 016/020 | Batch 560/937 | Cost: 0.0131\n", + "Epoch: 016/020 | Batch 600/937 | Cost: 0.0014\n", + "Epoch: 016/020 | Batch 640/937 | Cost: 0.0722\n", + "Epoch: 016/020 | Batch 680/937 | Cost: 0.0080\n", + "Epoch: 016/020 | Batch 720/937 | Cost: 0.0409\n", + "Epoch: 016/020 | Batch 760/937 | Cost: 0.0187\n", + "Epoch: 016/020 | Batch 800/937 | Cost: 0.0464\n", + "Epoch: 016/020 | Batch 840/937 | Cost: 0.0017\n", + "Epoch: 016/020 | Batch 880/937 | Cost: 0.0556\n", + "Epoch: 016/020 | Batch 920/937 | Cost: 0.0103\n", + "Epoch: 016/020 Train Acc.: 98.56% | Test Acc.: 97.30%\n", + "Time elapsed: 6.85 min\n", + "Epoch: 017/020 | Batch 000/937 | Cost: 0.0522\n", + "Epoch: 017/020 | Batch 040/937 | Cost: 0.0032\n", + "Epoch: 017/020 | Batch 080/937 | Cost: 0.0113\n", + "Epoch: 017/020 | Batch 120/937 | Cost: 0.0022\n", + "Epoch: 017/020 | Batch 160/937 | Cost: 0.0056\n", + "Epoch: 017/020 | Batch 200/937 | Cost: 0.0260\n", + "Epoch: 017/020 | Batch 240/937 | Cost: 0.0039\n", + "Epoch: 017/020 | Batch 280/937 | Cost: 0.0039\n", + "Epoch: 017/020 | Batch 320/937 | Cost: 0.0074\n", + "Epoch: 017/020 | Batch 360/937 | Cost: 0.0066\n", + "Epoch: 017/020 | Batch 400/937 | Cost: 0.0085\n", + "Epoch: 017/020 | Batch 440/937 | Cost: 0.0994\n", + "Epoch: 017/020 | Batch 480/937 | Cost: 0.0145\n", + "Epoch: 017/020 | Batch 520/937 | Cost: 0.0550\n", + "Epoch: 017/020 | Batch 560/937 | Cost: 0.0242\n", + "Epoch: 017/020 | Batch 600/937 | Cost: 0.0007\n", + "Epoch: 017/020 | Batch 640/937 | Cost: 0.0028\n", + "Epoch: 017/020 | Batch 680/937 | Cost: 0.0159\n", + "Epoch: 017/020 | Batch 720/937 | Cost: 0.0160\n", + "Epoch: 017/020 | Batch 760/937 | Cost: 0.0047\n", + "Epoch: 017/020 | Batch 800/937 | Cost: 0.0157\n", + "Epoch: 017/020 | Batch 840/937 | Cost: 0.0446\n", + "Epoch: 017/020 | Batch 880/937 | Cost: 0.0077\n", + "Epoch: 017/020 | Batch 920/937 | Cost: 0.0076\n", + "Epoch: 017/020 Train Acc.: 98.89% | Test Acc.: 97.43%\n", + "Time elapsed: 7.28 min\n", + "Epoch: 018/020 | Batch 000/937 | Cost: 0.0124\n", + "Epoch: 018/020 | Batch 040/937 | Cost: 0.0237\n", + "Epoch: 018/020 | Batch 080/937 | Cost: 0.0046\n", + "Epoch: 018/020 | Batch 120/937 | Cost: 0.0431\n", + "Epoch: 018/020 | Batch 160/937 | Cost: 0.0009\n", + "Epoch: 018/020 | Batch 200/937 | Cost: 0.0372\n", + "Epoch: 018/020 | Batch 240/937 | Cost: 0.0032\n", + "Epoch: 018/020 | Batch 280/937 | Cost: 0.0076\n", + "Epoch: 018/020 | Batch 320/937 | Cost: 0.0056\n", + "Epoch: 018/020 | Batch 360/937 | Cost: 0.0626\n", + "Epoch: 018/020 | Batch 400/937 | Cost: 0.0400\n", + "Epoch: 018/020 | Batch 440/937 | Cost: 0.0282\n", + "Epoch: 018/020 | Batch 480/937 | Cost: 0.0018\n", + "Epoch: 018/020 | Batch 520/937 | Cost: 0.0359\n", + "Epoch: 018/020 | Batch 560/937 | Cost: 0.1188\n", + "Epoch: 018/020 | Batch 600/937 | Cost: 0.0356\n", + "Epoch: 018/020 | Batch 640/937 | Cost: 0.0163\n", + "Epoch: 018/020 | Batch 680/937 | Cost: 0.0652\n", + "Epoch: 018/020 | Batch 720/937 | Cost: 0.0016\n", + "Epoch: 018/020 | Batch 760/937 | Cost: 0.0131\n", + "Epoch: 018/020 | Batch 800/937 | Cost: 0.0572\n", + "Epoch: 018/020 | Batch 840/937 | Cost: 0.0342\n", + "Epoch: 018/020 | Batch 880/937 | Cost: 0.0029\n", + "Epoch: 018/020 | Batch 920/937 | Cost: 0.0205\n", + "Epoch: 018/020 Train Acc.: 98.73% | Test Acc.: 97.44%\n", + "Time elapsed: 7.71 min\n", + "Epoch: 019/020 | Batch 000/937 | Cost: 0.0116\n", + "Epoch: 019/020 | Batch 040/937 | Cost: 0.0113\n", + "Epoch: 019/020 | Batch 080/937 | Cost: 0.0710\n", + "Epoch: 019/020 | Batch 120/937 | Cost: 0.0154\n", + "Epoch: 019/020 | Batch 160/937 | Cost: 0.0225\n", + "Epoch: 019/020 | Batch 200/937 | Cost: 0.0155\n", + "Epoch: 019/020 | Batch 240/937 | Cost: 0.0145\n", + "Epoch: 019/020 | Batch 280/937 | Cost: 0.1072\n", + "Epoch: 019/020 | Batch 320/937 | Cost: 0.0058\n", + "Epoch: 019/020 | Batch 360/937 | Cost: 0.0058\n", + "Epoch: 019/020 | Batch 400/937 | Cost: 0.0042\n", + "Epoch: 019/020 | Batch 440/937 | Cost: 0.0202\n", + "Epoch: 019/020 | Batch 480/937 | Cost: 0.0043\n", + "Epoch: 019/020 | Batch 520/937 | Cost: 0.1195\n", + "Epoch: 019/020 | Batch 560/937 | Cost: 0.0243\n", + "Epoch: 019/020 | Batch 600/937 | Cost: 0.0224\n", + "Epoch: 019/020 | Batch 640/937 | Cost: 0.0062\n", + "Epoch: 019/020 | Batch 680/937 | Cost: 0.0232\n", + "Epoch: 019/020 | Batch 720/937 | Cost: 0.0018\n", + "Epoch: 019/020 | Batch 760/937 | Cost: 0.0017\n", + "Epoch: 019/020 | Batch 800/937 | Cost: 0.0224\n", + "Epoch: 019/020 | Batch 840/937 | Cost: 0.0746\n", + "Epoch: 019/020 | Batch 880/937 | Cost: 0.0042\n", + "Epoch: 019/020 | Batch 920/937 | Cost: 0.0050\n", + "Epoch: 019/020 Train Acc.: 98.95% | Test Acc.: 97.36%\n", + "Time elapsed: 8.14 min\n", + "Epoch: 020/020 | Batch 000/937 | Cost: 0.0255\n", + "Epoch: 020/020 | Batch 040/937 | Cost: 0.0020\n", + "Epoch: 020/020 | Batch 080/937 | Cost: 0.0137\n", + "Epoch: 020/020 | Batch 120/937 | Cost: 0.0067\n", + "Epoch: 020/020 | Batch 160/937 | Cost: 0.0059\n", + "Epoch: 020/020 | Batch 200/937 | Cost: 0.0827\n", + "Epoch: 020/020 | Batch 240/937 | Cost: 0.0244\n", + "Epoch: 020/020 | Batch 280/937 | Cost: 0.0172\n", + "Epoch: 020/020 | Batch 320/937 | Cost: 0.0081\n", + "Epoch: 020/020 | Batch 360/937 | Cost: 0.0329\n", + "Epoch: 020/020 | Batch 400/937 | Cost: 0.0056\n", + "Epoch: 020/020 | Batch 440/937 | Cost: 0.0054\n", + "Epoch: 020/020 | Batch 480/937 | Cost: 0.0058\n", + "Epoch: 020/020 | Batch 520/937 | Cost: 0.0433\n", + "Epoch: 020/020 | Batch 560/937 | Cost: 0.0054\n", + "Epoch: 020/020 | Batch 600/937 | Cost: 0.0051\n", + "Epoch: 020/020 | Batch 640/937 | Cost: 0.1247\n", + "Epoch: 020/020 | Batch 680/937 | Cost: 0.0127\n", + "Epoch: 020/020 | Batch 720/937 | Cost: 0.0088\n", + "Epoch: 020/020 | Batch 760/937 | Cost: 0.0028\n", + "Epoch: 020/020 | Batch 800/937 | Cost: 0.0067\n", + "Epoch: 020/020 | Batch 840/937 | Cost: 0.0394\n", + "Epoch: 020/020 | Batch 880/937 | Cost: 0.0028\n", + "Epoch: 020/020 | Batch 920/937 | Cost: 0.0124\n", + "Epoch: 020/020 Train Acc.: 99.19% | Test Acc.: 97.68%\n", + "Time elapsed: 8.57 min\n", + "Total Training Time: 8.57 min\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "J8BpUxU6p-lj" + }, + "source": [ + "## 2-3. Evaluation\n", + "테스트 데이터와 학습 데이터의 Loss 변화를 확인 합니다." + ], + "id": "J8BpUxU6p-lj" + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 279 + }, + "id": "9W2INQzzp-lj", + "outputId": "a14d8949-9901-4bec-c3ea-43511bf19635" + }, + "source": [ + "plt.plot(range(1, NUM_EPOCHS+1), train_loss_lst, label='Training loss')\n", + "plt.plot(range(1, NUM_EPOCHS+1), test_loss_lst, label='Test loss')\n", + "plt.legend(loc='upper right')\n", + "plt.ylabel('Cross entropy')\n", + "plt.xlabel('Epoch')\n", + "plt.show()" + ], + "id": "9W2INQzzp-lj", + "execution_count": 15, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZQAAAEGCAYAAABCa2PoAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOzdeXhV1dX48e/KzJAwZCAhAQIkkEAgicwEFcEBnECrFWer1dJqnTqo9dfW+pZW+/rWDmod6lSHqlUZFJSqgAooEDAiYQwQJBCmBJIAme/6/XEOGGMSLiQ3N4T1eZ775N599zln3aB3ZQ9nb1FVjDHGmOYK8HcAxhhj2gdLKMYYY1qEJRRjjDEtwhKKMcaYFmEJxRhjTIsI8ncA/hQVFaWJiYn+DsMYY04qK1eu3Keq0fXLT+mEkpiYSHZ2tr/DMMaYk4qIbGuo3Lq8jDHGtAhLKMYYY1qEJRRjjDEt4pQeQzHGtF3V1dUUFBRQUVHh71BOWWFhYSQkJBAcHOxVfUsoxpg2qaCggPDwcBITExERf4dzylFVioqKKCgooG/fvl4dY11expg2qaKigsjISEsmfiIiREZGHlcL0RKKMabNsmTiX8f7+7eEcgIWbdjDPxZt9ncYxhjTplhCOQF7smdT9dEfKa+q9XcoxhgfKSoqIiMjg4yMDGJjY4mPjz/6uqqqqsljs7Ozuf322495jbFjx7ZIrIsWLeLCCy9skXM1hw3Kn4DRQRuJC3ib5Rt/RVZaP3+HY4zxgcjISHJycgB44IEH6Ny5Mz//+c+Pvl9TU0NQUMNfocOHD2f48OHHvMbSpUtbJtg2wlooJyBm2MUESy17cub5OxRjTCu64YYbmD59OqNGjeKXv/wly5cvZ8yYMWRmZjJ27Fg2bNgAfLvF8MADD3DjjTcyfvx4+vXrx9/+9rej5+vcufPR+uPHj+eyyy4jJSWFq6++miO76c6bN4+UlBSGDRvG7bfffsyWSHFxMVOnTmXo0KGMHj2a1atXA/Dxxx8fbWFlZmZSVlZGYWEhZ5xxBhkZGaSlpfHpp5826/djLZQTENZ3DAelM+FfLwBu83c4xrR7v3snl7U7S1v0nIN6RvDbiwYf93EFBQUsXbqUwMBASktL+fTTTwkKCuLDDz/kV7/6FW+99dZ3jlm/fj0LFy6krKyMgQMH8uMf//g793Z88cUX5Obm0rNnT7KysliyZAnDhw/nRz/6EZ988gl9+/blyiuvPGZ8v/3tb8nMzGTWrFksWLCA6667jpycHB555BEef/xxsrKyOHjwIGFhYTz99NOcd9553H///dTW1nL48OHj/n3UZQnlRAQGsSNqHBl7llJcVk738A7+jsgY00ouv/xyAgMDASgpKeH6669n06ZNiAjV1dUNHnPBBRcQGhpKaGgoMTEx7N69m4SEhG/VGTly5NGyjIwM8vPz6dy5M/369Tt6H8iVV17J008/3WR8ixcvPprUJkyYQFFREaWlpWRlZXH33Xdz9dVXc+mll5KQkMCIESO48cYbqa6uZurUqWRkZDTrd2MJ5QSFDppM1N73WbxyIePGn+/vcIxp106kJeErnTp1Ovr817/+NWeddRYzZ84kPz+f8ePHN3hMaGjo0eeBgYHU1NScUJ3muPfee7nggguYN28eWVlZzJ8/nzPOOINPPvmEuXPncsMNN3D33Xdz3XXXnfA1bAzlBCWMuIgaAqha+56/QzHG+ElJSQnx8fEAvPDCCy1+/oEDB7Jlyxby8/MBeP311495zOmnn84rr7wCOGMzUVFRREREsHnzZoYMGcI999zDiBEjWL9+Pdu2baNHjx7cfPPN/PCHP2TVqlXNitcSygkK6hzJlrDB9Nr7Setf/IuX4aVLwR20M8b4xy9/+Uvuu+8+MjMzW7xFAdChQweeeOIJJk2axLBhwwgPD6dLly5NHvPAAw+wcuVKhg4dyr333suLL74IwF/+8hfS0tIYOnQowcHBTJ48mUWLFpGenk5mZiavv/46d9xxR7PiFT2Fv5SGDx+uzdlga+Wrv2XYxr+w44Zs4hOTWzCyY3hiLOzJhbvXQUTP1ruuMa1o3bp1pKam+jsMvzt48CCdO3dGVbn11ltJTk7mrrvuarXrN/TvICIrVfU786KthdIM0cOmALBjxezWu+jeDU4yAdiZ03rXNcb4xTPPPENGRgaDBw+mpKSEH/3oR/4OqVE2KN8MvZIz2EEPOuR/CPz8mPVbRO4sQEAECnMgxSYEGNOe3XXXXa3aImkOa6E0gwQEsKX7OJIPZeOpPNQ6F819G/qMhaiBUPhl61zTGGO84NOEIiKTRGSDiOSJyL0NvB8qIq+77y8TkcQ6793nlm8QkfPcsjARWS4iX4pIroj8rk79F0Rkq4jkuI/mTaj2UsDASYRRzder5vv+YnvWwd71MPgSiEu3Li9jTJvis4QiIoHA48BkYBBwpYgMqlftJmC/qiYBjwIPu8cOAqYBg4FJwBPu+SqBCaqaDmQAk0RkdJ3z/UJVM9xHq3zbJo88j0MayqGv5vr+YmveBgmA1IuhZwYc3AVlu3x/XWOM8YIvWygjgTxV3aKqVcBrwJR6daYAL7rP3wQmirMA/xTgNVWtVNWtQB4wUh0H3frB7sOv09RiunUhJziT2N2LfDuNVxVyZ0KfLA6GRFLQYYBTbt1expg2wpcJJR7YXud1gVvWYB1VrQFKgMimjhWRQBHJAfYAH6jqsjr1ZojIahF5VERCaYCI3CIi2SKSvXfv3hP/dHUUxZ9FZO0+Knd81SLna9DuXCjaBIMv4ffvruWStw+iiHV7GeMjzVm+HpybChtbTfiFF17gttva3zqAJ92gvKrWqmoGkACMFJE09637gBRgBNAduKeR459W1eGqOjw6OrpFYuqecQEAu7Jntcj5GpTrdHdVJF/I3NWF7K0Morprf2emlzGmxR1Zvj4nJ4fp06dz1113HX0dEhJyzOObSijtlS8Tyg6gV53XCW5Zg3VEJAjoAhR5c6yqHgAW4oyxoKqFbpdYJfA8Tpdbq8gYlMpqTz+C8v7rmwsc6e7qewYLt3soq3TuyN0TnmotFGNa0cqVKznzzDMZNmwY5513HoWFhQD87W9/Y9CgQQwdOpRp06aRn5/Pk08+yaOPPkpGRkaTy8Ln5+czYcIEhg4dysSJE/n6668B+M9//kNaWhrp6emcccYZAOTm5jJy5EgyMjIYOnQomzZt8v2HPg6+vA9lBZAsIn1xksE04Kp6deYA1wOfAZcBC1RVRWQO8KqI/BnoCSQDy0UkGqhW1QMi0gE4h28G8uNUtdAdg5kKrPHhZ/uWzqFBrIsYy+UHX4FD+6BTVMteYNdqKN4CWXcyK2cHUZ1DOXC4io0B/UkoewcO7oHOMS17TWPakvfuhV0t3KUcOwQmP+R1dVXlpz/9KbNnzyY6OprXX3+d+++/n+eee46HHnqIrVu3EhoayoEDB+jatSvTp0//zqZcDfnpT3/K9ddfz/XXX89zzz3H7bffzqxZs3jwwQeZP38+8fHxHDhwAIAnn3ySO+64g6uvvpqqqipqa9vWrrE+a6G4YyK3AfOBdcAbqporIg+KyMVutWeBSBHJA+4G7nWPzQXeANYC7wO3qmotEAcsFJHVOAnrA1V91z3XKyLyFfAVEAX83lefrSG1SecSgHI49/2WP/mat0ECKU2cxML1e7k4vSdJMZ1ZXuEuf20D88b4XGVlJWvWrOGcc84hIyOD3//+9xQUFAAwdOhQrr76al5++eVGd3FszGeffcZVVzl/a1977bUsXrwYgKysLG644QaeeeaZo4ljzJgx/OEPf+Dhhx9m27ZtdOjQtrbO8Omd8qo6D5hXr+w3dZ5XAJc3cuwMYEa9stVAZiP1JzQ33uYYkJ7F7i+64ln9Dh1HXtNyJz7S3dVvPPM2V1JV62FKRk/2H67ig82xTgbemQPJ57TcNY1pa46jJeErqsrgwYP57LPPvvPe3Llz+eSTT3jnnXeYMWMGX33V/NbUk08+ybJly5g7dy7Dhg1j5cqVXHXVVYwaNYq5c+dy/vnn89RTTzFhgl+/+r7lpBuUb6vSe3fnUzLptvNTqG14k50TsnMVHNgGaZcyK2cHfaM6MTShCymx4WwuDaC2mw3MG9MaQkND2bt379GEUl1dTW5uLh6Ph+3bt3PWWWfx8MMPU1JSwsGDBwkPD6esrOyY5x07diyvvfYaAK+88gqnn346AJs3b2bUqFE8+OCDREdHs337drZs2UK/fv24/fbbmTJlytHtfdsKSygtJDgwgF0x4wnzHIKvv/sXzAnLnQkBwezqOZFlW4uZktETESElLgKA/V0GWZeXMa0gICCAN998k3vuuYf09HQyMjJYunQptbW1XHPNNQwZMoTMzExuv/12unbtykUXXcTMmTOPOSj/97//neeff56hQ4fy0ksv8de//hWAX/ziFwwZMoS0tDTGjh1Leno6b7zxBmlpaWRkZLBmzZpmbYblC7Z8fTOWr6/vX4tyuWLhGVSddhPhU/7U/BOqwl+GQEwqTyU8xB/fW8+in48nMaoTe8oqGDnjI/4zZAUjNj0Kv9gCnSKbf01j2ghbvr5tsOXr/WR0am8+9wxCN7bQul4F2VCyHQZfyqycnaT36kpilLP9aHTnUCI7hbCquo9Tt/CLlrmmMcacIEsoLSg5pjPLgkcQcSgf9uU1/4S5MyEwhLzuZ7CusJSpGd9spiUipMZFsLDULbP7UYwxfmYJpQWJCJV9ndlWno3NnD7s8cDaWZB0NjPXlREYIFw49Nu7M6bEhvPFHg/avZ+No5h26VTukm8Ljvf3bwmlhaUOGsJGTzzla+Ydu3JTCpZD6Q500FRm5+wkKymK6PBvL0+WEhdBZY2Hg90G20wv0+6EhYVRVFRkScVPVJWioiLCwsK8PsZ2bGxhWUmRzPacxi2F70FFKYRFnNiJcmdCYChfdBhNwf413H3OgO9USY0LB6CgwwBSD7wDh4uhY/fmhG9Mm5GQkEBBQQEttYirOX5hYWEkJCR4Xd8SSguL69KB9eFjCCh/BzYvgMFTj/8knlpnq9/kc3h7bSlhwQGcOzj2O9WSYjoTGCCs9vQlFZxur/5nNfszGNMWBAcH07dvX3+HYY6DdXn5QLeBWRzQTtRuOMFxlK8/h4O7qEmdytzVhZyd2oPOod/N/aFBgfSP7sSSMndsxbq9jDF+ZAnFB8Ykx7LIk45n43+d1sbxyp0JQR1YLMPYf7iaqRn1t5H5RmpcBCv3CnTtYzO9jDF+ZQnFB0b3j2Sh5zSCK4pgx6rjO9hTC2tnw4BzeSu3hK4dgzljQOP7tqTERrDjQDnVPdKthWKM8StLKD4QERZMcdzp1BIAxzt9eNsSOLSH8gFT+GDtLi4YEkdIUOP/TEcG5gs7DoT9+VC+vxmRG2PMibOE4iMZA/qy0jOA2g3Hedf8mrchuCP/rRpKRbWHqZmNd3eB0+UFsF7cwcvCtrVYnDHm1GEJxUeykqL4qDaTwD1fQUn9jSobUVsD6+bAgEm8vWY/8V07MKx3tyYPiQkPpVvHYD4v7+0UWLeXMcZPLKH4SGbvriwJcNdO2+RlKyX/UzhcRGnSRSzO28eUjJ4EBEiThxxZgmXlvgDo0tsG5o0xfmMJxUdCgwKJTBxCofQAbxeLzH0bQjozuyyVWo8es7vriJTYCDbsKkXjhtoSLMYYv7GE4kPjkqN5vzoD3bwIqg43Xbm2Gta9AwMn89ZXxaTEhjOgR7hX10mNC6ei2uPsjVK8GSpKmh+8McYcJ0soPpSVFMUCTyZSW+F0ZzVl68dQvp/dvc8nZ/sBr1sn8M3AfF5gslNgA/PGGD+whOJDKbHhbApLp1I6HLvba81MCI3gP/sHIAIXp/dsun4dR5Zgya7q5RTYwLwxxg98mlBEZJKIbBCRPBG5t4H3Q0Xkdff9ZSKSWOe9+9zyDSJynlsWJiLLReRLEckVkd/Vqd/XPUeee84QX342bwQECCOS4/iMIc6mW42tmlpTBevfQQdO5u3V+xiZ2J2eXTt4fZ2w4ED6RXViVVEwRMTbOIoxxi98llBEJBB4HJgMDAKuFJFB9ardBOxX1STgUeBh99hBwDRgMDAJeMI9XyUwQVXTgQxgkoiMds/1MPCoe6797rn9blxSJPOq0pHSAtid23ClLQuhooT82PPYsu/QcXV3HZESF8G6wlKIy7CZXsYYv/BlC2UkkKeqW1S1CngNmFKvzhTgRff5m8BEERG3/DVVrVTVrUAeMFIdB936we5D3WMmuOfAPecJLPPb8sb2j2JhbYbzorG75nNnQlgXXtmbREhgAOenxR33dVLjwtlxoJyKmCFQlAeVZc2I2hhjjp8vE0o8sL3O6wK3rME6qloDlACRTR0rIoEikgPsAT5Q1WXuMQfcczR2LdzjbxGRbBHJbo19Fnp170jHyHi2hgxoeBylphLWz8WTciGz1+xl/MBounQMPu7rpMY6A/PbQpIBtYF5Y0yrO+kG5VW1VlUzgARgpIikHefxT6vqcFUdHh3d+KKLLSkrKYp5lelowQo4tO/bb+Z9BJWlrO02kb1llSfU3QWQ4q7p9WVtolNg4yjGmFbmy4SyA+hV53WCW9ZgHREJAroARd4cq6oHgIU4YyxFQFf3HI1dy2/GJUXxXlU6gkLeh99+M3cmdOjGv3YnEh4axISUmBO6RmxEGF07BvNFcSiEx9lML2NMq/NlQlkBJLuzr0JwBtnn1KszB7jefX4ZsECdDaTnANPcWWB9gWRguYhEi0hXABHpAJwDrHePWeieA/ecs3342Y7LmH6RrCWRgyFR3x5HqS6HDfOoGXgh83L3cV5aLGHBgSd0DREhJTbcBuaNMX7js4TijmfcBswH1gFvqGquiDwoIhe71Z4FIkUkD7gbuNc9Nhd4A1gLvA/cqqq1QBywUERW4ySsD1T1Xfdc9wB3u+eKdM/dJnTrFMLgnt1YFjjM6eKqrXbeyPsQqg6ystN4DlbWNLmRljdS4yLYsKsMjR0K+zZC1aEWiN4YY7zj0z3lVXUeMK9e2W/qPK8ALm/k2BnAjHplq4HMRupvwZlZ1iZlJUXxn8WDmRg8H77+DPqe4XR3dYzkuZ29iAkvY0z/yGZdIzU2gvLqWnaHpxKLwq6voPfoYx9ojDEt4KQblD9ZjUuK4pPaNDwBwc5sr6rDsOF9KpMvZMHGIi5K70ngMVYWPpYjA/Nr1d0bxbq9jDGtyBJKKxme2I2aoI5s6XyaM46y6b9QfYjFoadTXavN7u4CGNAjnACBnAMdoFOMDcwbY1qVJZRWEhYcyIjEbsyvznBuPFz8KHSK5umv4+gX3Ym0+IgWuUbfqE6s21UGPTNs6rAxplVZQmlFWUlR/PtAqvOiMIdD/S9gWX4JUzPicW72b77UuAjW73Jneu1df+xl840xpoVYQmlF45KiKNAYSsOTAPgwMAuAKRneryx8LKlxEWwvLqc8Kg3UA7vXtNi5jTGmKZZQWtHgnl3o0iGYTzueDTGDeWpLNJm9u9InslOLXSMl1hmY3xjY3ymwgXljTCuxhNKKAgOEsf0jmXHgXDZcOp+1uw8z5Tj2PfHGkc22Vpd2ho5RNo5ijGk1llBaWVZSFDtLKnj0g40EBggXtnBCiesSRkRYUJ2BeWuhGGNahyWUVjYuKQqA93N3MS4piqjOoS16fhFxBuYLSyEuHfasc5Z4McYYH7OE0sr6RHYk3t2NcWpmy7ZOjnBmepXhiU0HrW18Yy9jjGlBllBamYhw5sBoOoUEcu6gWJ9cIyU2nMNVtezsmOIUWLeXMaYV+HQtL9Oweyen8MNxfekU6ptf/5GB+TUHI0jo0N1mehljWoW1UPwgIiyYftGdfXb+I0uwrNtV5oyjWAvFGNMKLKG0Qx1CAkmM6uTcMd8zwxmYr6n0d1jGmHbOEko7lRobwbrCMmcJFk+NDcwbY3zOEko7lRIbztfFhzkUmeYUWLeXMcbHjplQROQiEbHEc5I5MjC/vqI7hHW1gXljjM95kyiuADaJyJ9EJMXXAZmWcWSzrW8G5m0JFmOMbx0zoajqNTjb7m4GXhCRz0TkFhEJ93l05oTFd+1AeFhQnYH5tVBT5e+wjDHtmFddWapaCrwJvAbEAZcAq0Tkpz6MzTSDiNQZmE+H2ionqRhjjI94M4ZysYjMBBYBwcBIVZ0MpAM/O8axk0Rkg4jkici9DbwfKiKvu+8vE5HEOu/d55ZvEJHz3LJeIrJQRNaKSK6I3FGn/gMiskNEctzH+d79CtqvlLhwNuwqwxOb4RTYwLwxxoe8uVX7e8CjqvpJ3UJVPSwiNzV2kIgEAo8D5wAFwAoRmaOqdf9MvgnYr6pJIjINeBi4QkQGAdOAwUBP4EMRGQDUAD9T1VVul9tKEfmgzjkfVdVHvPngp4LUuAgOVm5jh8TSK7SLjaMYY3zKmzGU64GNbkvlIhGJrfPeR00cOhLIU9UtqlqF0102pV6dKcCL7vM3gYni7IU7BXhNVStVdSuQh9MyKlTVVe61y4B1QLxXn/QUdGSzrbW7yiBuqM30Msb4lDddXjcBy4FLgcuAz0XkRi/OHQ9sr/O6gO9++R+to6o1QAkQ6c2xbvdYJrCsTvFtIrJaRJ4TkW6NfJ5bRCRbRLL37t3rxcc4eQ2MDUcE1h8ZR9mdC7XV/g7LGNNOeTMo/0sgU1VvcFsrw4B7fBtW00SkM/AWcKc7YQDgH0B/IAMoBP6voWNV9WlVHa6qw6Ojo1slXn/pGBJEYuSRJVgyobbSWYbFGGN8wJuEUgSU1Xld5pYdyw6gV53XCW5Zg3VEJAjo4p670WNFJBgnmbyiqm8fqaCqu1W1VlU9wDM4XW6nvJTYcNYVljpLsICNoxhjfMabhJIHLHNnUf0W+BxnTOVuEbm7ieNWAMki0ldEQnAG2efUqzMHuN59fhmwQFXVLZ/mzgLrCyQDy93xlWeBdar657onEpG4Oi8vAdZ48dnavdS4CLYVH+ZQ594QEm4zvYwxPuPNLK/N7uOI2e7PJm9sVNUaEbkNmA8EAs+paq6IPAhkq+ocnOTwkojkAcU4SQe33hvAWpyZXbeqaq2IjAOuBb4SkSPfjL9S1XnAn0QkA1AgH/iRF5+t3UuJDUcVNuw5xGk2MG+M8aFjJhRV/R0cHbdAVQ96e3L3i35evbLf1HleAVzeyLEzgBn1yhYD0kj9a72N61RydE2vwjJOi8uA7GehtgYCbW81Y0zL8maWV5qIfAHkArkislJEBvs+NNMSErp1oHOouwRLXDrUVMC+Df4OyxjTDnkzhvI0cLeq9lHVPjh3xz/j27BMSxGRbwbme7oD89btZYzxAW8SSidVXXjkhaouAjr5LCLT4lLjIlhfWIZ27w/BnWxg3hjjE94klC0i8msRSXQf/w/Y4uvATMtJiQunrLKGgpIq5455mzpsjPEBbxLKjUA08DbO/R9Rbpk5SRwdmD+yN8qur8BT6+eojDHtTZNTfdwFHt9W1bNaKR7jAwN7ODO81xeWck5cBlQ/Cfs2QkyqnyMzxrQnTbZQVLUW8IhIl1aKx/hAp9Ag+kR2ZN0uG5g3xviONzcjHMS5kfAD4NCRQlW93WdRmRaXGusMzBOZDkEdnHGUjCv9HZYxph3xJqG87T7qUh/EYnwoJS6c+Wt3cbgWOsYOsZlexpgW501C6aqqf61bUHenRHNySI2LQBU27j5IRs9M+OIlKD8AHbr6OzRjTDvhzSyv6xsou6GF4zA+lhp7ZAmWUsi8BqoPw9K/+TkqY0x70mgLRUSuBK4C+opI3VWCw3EWcjQnkYRuHegUEujcMT9yKKR9Dz7/B4yaDp1j/B2eMaYdaKrLaynORlVRfHuzqjJgtS+DMi0vIEBIiYtg3S53a5uz7ofcWfDJI3D+n/wbnDGmXWg0oajqNmAbMKb1wjG+lBIbzpwvd6KqSGR/p+sr+zkYext07e3v8IwxJzlvVhu+VEQ2iUiJiJSKSJmIlB7rONP2pMRFUFZRw86SCqfgzHtAAmDRQ/4NzBjTLngzKP8n4GJV7aKqEaoarqoRvg7MtLxBcd/cMQ9Al3gYeTN8+W/Ys96PkRlj2gNvEspuVV3n80iMzw10Z3qtK6zTwBx3NwR3hIUzGjnKGGO84819KNki8jowC6g8Uqiq9W92NG1c59Agenfv+M3APECnSBhzG3z8EOxYBfGn+S9AY8xJzZsWSgRwGDgXuMh9XOjLoIzvHN1sq64xt0KH7rDgf/wTlDGmXThmQlHVHzTw8Gr5ehGZJCIbRCRPRO5t4P1QEXndfX+ZiCTWee8+t3yDiJznlvUSkYUislZEcuvesS8i3UXkA3cCwQci0s2bGE81KXER5O87RHlVneXrwyLg9J/B5gWw9VP/BWeMOal5M8trgIh8JCJr3NdD3U22jnVcIPA4MBkYBFwpIoPqVbsJ2K+qScCjwMPusYOAacBgYBLwhHu+GuBnqjoIGA3cWuec9wIfqWoy8JH72tQzKC4cj8KmPWXffmPETRDeEz76Hagt1WaMOX7edHk9A9wHVAOo6mqcL/tjGQnkqeoWVa0CXgOm1KszBXjRff4mMFFExC1/TVUrVXUrkAeMVNVCVV3lxlEGrAPiGzjXi8BUL2I85aQ0NDAPENwBxt8DBStg4/t+iMwYc7LzJqF0VNXl9cpqvDguHthe53UB33z5f6eOqtYAJUCkN8e63WOZwDK3qIeqFrrPdwE9GgpKRG4RkWwRyd67d68XH6N96d29Ix1DAllXWPbdNzOuhu794aP/AY+n9YMzxpzUvEko+0SkP+6S9SJyGc6SLH4jIp1xtiO+U1W/c5OlqiqNLLGvqk+r6nBVHR4dHe3jSNuegABhYEMD8wCBwXDWr2BPLqx5q/WDM8ac1LxJKLcCTwEpIrIDuBOY7sVxO4BedV4nuGUN1hGRIKALUNTUsSISjJNMXqk3dXm3iMS5deKAPV7EeEpKiY1gbWEplTUN7Cs/+FLoMcS5L6W2uvWDM8actLyZ5bVFVc8GooEUVR3nrvN1LCuAZBHpKyIhOOMuc+rVmcM3y+NfBixwWxdzgGnuLLC+QDKw3B1feRZYp6p/buJc1wOzvYjxlArAdw8AACAASURBVDQ5LZayihreXFnw3TcDAmDir2H/Vlj1r9YPzhhz0vKmhQKAqh5yB8K9rV8D3AbMxxk8f0NVc0XkQRG52K32LBApInnA3bgzs1Q1F3gDWAu8D9zq7m+fBVwLTBCRHPdxvnuuh4BzRGQTcLb72jTg9OQoMnt35YmFm6mqaWCsJPlc6DUaPv4TVJe3foDGmJOS6Ck8RXT48OGanZ3t7zD84uONe7n+ueX84ZIhXDWqgZWGty2F5yfDOQ9Clm3QaYz5hoisVNXh9cu9bqGY9uWM5CgyenXl8YV5DbdS+oyFpLNh8aNQUdL6ARpjTjre3Nh4uYiEu8//n4i8LSK24NNJTkS48+xkdhwob3gsBWDib6B8Pyx9rHWDM8aclLxpofxaVctEZBzO2MSzwD98G5ZpDWcOiG66lRKXDoMvgc8eh4On3j07xpjj401COTK39ALgaVWdC4T4LiTTWkSEO9xWylurGmmlnHU/1FTA4vqT6owx5tu8SSg7ROQp4ApgnoiEenmcOQmMHxBNelOtlKhkyLgKVvwTDmz/7vvGGOPyJjF8H2fq73mqegDoDvzCp1GZViMi3DkxmYL95bzdWCvlzHucnx8/3HqBGWNOOt4klDhgrqpuEpHxwOVA/bW9zEls/MBo0hO68NjCPKprG2ildO0FI34IOa/Avk2tH6Ax5qTgTUJ5C6gVkSTgaZwlUV71aVSmVTkzvgY03Uo5/WfOVsELft+6wRljThreJBSPe9f7pcDfVfUXOK0W046MHxjN0IQu/H1BI62UTlEw+iewdhbszGn9AI0xbZ43CaVaRK4ErgPedcuCfReS8Ycj96UU7C9n5qr6a3i6xt4GHbrZVsHGmAZ5k1B+AIwBZqjqVnexxpd8G5bxh7MGxjitlIWbGm6lhHWBcXdD3oeQv6T1AzTGtGnerDa8Fvg58JWIpAEFqmrTfdohEeGOiclsLy5n5heNtFJG3gzhcfDBr6HS67VCjTGnAG+WXhkPbMLZH/4JYKOInOHjuIyfTEiJYUh8Fx5rbCwluAOc+3vY+QU8eToUrGz9II0xbZI3XV7/B5yrqmeq6hnAecCjvg3L+MuRVsrXxYcbb6UMuQxumAeeGnjuXPj0z+BpYLMu03adwquMG9/xJqEEq+qGIy9UdSM2KN+uTUyNIS0+gscX5lHTUCsFoM8YmL4YUi+Cj34H/5oCJY0kINN2qMKn/wd/TIA5t8Oe9f6OyLQj3iSUlSLyTxEZ7z6eAU7NTUROEU4rZQDbippopQB06AqXPQ9TnoAdq+DJLFj3TusFao6PKnz4W/joQYgaAKtfhydGwUuXOhMtrNVimsmbhDIdZ+fE293HWuDHvgzK+N/ZqTEM7hnBY021UgBEIPNqmP4pdEuE16+Bd+6EqsOtFqvxgscDc++GJX+F4TfBDz+Cu9bCWf8Pdq+Bl78HT4yGlS/YLp3mhDW5Y6OIBAK5qprSeiG1nlN5x0ZvfLB2Nzf/K5tHLk/nsmEJxz6gpgoWznC+tKKS4XvPQtxQ3wdqmlZbA7N/4rRIsu6Esx9w/hA4oqYS1rwNnz8Ou76CjpEw/EYYcTOE9/BX1KYNO6EdG9193DeISAN7xJr27mgrZcGmplspRwSFwDm/g+tmOVOK/znR2UvF48WxxjdqKuE/1zvJZOJvnH+fuskEICgUMq6EH30K178LvUbBJ4/Ao4Nh5nQoXO2f2M1Jx5sur25Aroh8JCJzjjx8HZjxvyMzvvKLDjM7Z6f3B/YbD9OXQNI5MP9X8MplULbbV2GaxlQdglevgPXvwuT/ddZja4oI9D0drvw3/HQlDP8BrJ0DT50OL1wIG96zPw5Mk5rs8gIQkTMbKlfVj495cpFJwF+BQOCfqvpQvfdDgX8Bw4Ai4ApVzXffuw+4CWeDr9tVdb5b/hxwIbBHVdPqnOsB4GbgyNaCv1LVeU3FZ11ex6aqXPC3xRyuquHDu88kKPA4tsJRheznnKQS0hmm/gMGnOu7YM03yg/Aq9+HghUw5XFnT5sTOs9+WPUvWPY0lBZA9/4w+seQfiWEdm7ZmM1J47i7vEQkSUSyVPXjug+cL/hGlqT91vGBODdDTgYGAVeKyKB61W4C9qtqEs69LQ+7xw4CpgGDgUnAE+75AF5wyxryqKpmuI8mk4nxzpFdHfOLDjPny+NopTgHw4ib4JaPITwWXr0c3rsHqit8E6xxHNoHL17ozLy7/IUTTybgrN2WdQfckQOXPee8nvdz+Eua02Ixpo6m/tz8C1DaQHmJ+96xjATyVHWLqlYBrwFT6tWZArzoPn8TmCgi4pa/pqqVqroVyHPPh6p+AhR7cX3TQs4d1INBcRH8fcExZnw1JibFmVU0+iew7El4ZgLsWdfygRrnXqDnJ8O+PLjyNRhU/3+5ExQYDGnfg5s/gps+gK694d/T4KP/ObVuaq2thu3LIedVOFTkvxgKstvkH2ZBTbzXQ1W/ql+oql+JSKIX544H6u4ZWwCMaqyOqtaISAkQ6ZZ/Xu/YeC+ueZuIXIdzn8zPVHV//QoicgtwC0Dv3jbXwBsiwu0Tk5n+8kreWb2TSzK9mPFVX3AYTPoj9J8As34MT46DQVNhzK0Qf1rLB91WHS6GZU/B9s8h+TwYcjl0jm6ZcxdvcW4wPbwfrn0b+oxtmfPW12sk3Phfp6Xy6SOwY6Uzo69TpG+u50/VFbAjG7YthfzFThditTslPrgjnHYdjLnN2YTO1yrLYOWL8PkTULoDOnR3Wp/DfgBRSb6/vhcaHUMRkU2qmtzIe3luN1XjJxa5DJikqj90X18LjFLV2+rUWePWKXBfb8ZJOg8An6vqy275s8B7qvqm+zoReLfeGEoPYB+gwP8Acap6Y1Mx2hiK9zwe5YK/L6ayupYP7j6TwAA59kGNObjHmVq88kWoKoPeY5zEMvB8CAg89vEno9KdsPQx9z6PQ9C9n5MAAoKcyQvp02DgZGfG1YnYsw7+NRVqq+Cat1ovSa98Eeb9AjrHwPdfhPhhrXNdX6k65LRAti1xkkhBNtRWAgI90iAxy0nUEQmQ/awzew6cPwyy7oCY1JaPqWyX07Jf8RxUlkCfcZB+hXMz6vq5zhJIfc9wpnoPvMCZbeljjY2hNNVCyRaRm1X1mXon+iHgzYqAO3B2dzwiwS1rqE6BiAQBXXAG57059ltU9eg0Ivdu/nebqG6OU0CAcMfEJKa/vIp3vtzJ1ExvGoyN6BwD581w9qr/4mVY9g/nhshuiTDqx86NkqHhLRa7X+3LgyV/gS9fA/U466Bl3Qk9BjlJ4Mt/w+o3YON7ENYV0i6F9KsgYfh3p/c2ZucXzt3ugSHwg3m++VJrzLDrIXYIvHE9PDcJJv8Jht3gfez+VlEKX3/uJpAlzu/SUwMSAHHpzurafbKcpYY6dPv2sQnDYPx9Toth5QvOv+WAyTDuLuhdvzPmBOzdCEv/5iQtT42zzNHYO5zrgtM6KtsNX7zkJPb/3ACdoiHzWuffpVti82M4Tk21UHoAM4Eqvkkgw4EQ4BJV3dXkiZ0EsRGYiJMMVgBXqWpunTq3AkNUdbqITAMuVdXvi8hgnG2GRwI9gY+AZPe+mMZaKHGqWug+vwunNTStqRithXJ8PB7l/L99SlWNp/mtlLpqa5yprZ8/AduXQWgXGHYdjPxR63Ql+ELhl86imWtnO1/0p10LY3/a8P/knlrYssj5Qlr3LtSUQ2SS02oZOq3p38G2pfDK96FjN7huttPy8YfDxfDWD2HzR5BxDVzwiLMydVvh8UBZodMqLN4Ce9c7v7tdq51EHxAEPU9zWyDjnG69sAjvz3+4GJY/7bQkyvdD77FOYkk+5/iT69efOy34DfMgKAwyrnZa8JH9m/h8tbB5gTOrcuP7zgzLpIlOd9iASRDYVNvh+DXWQvFm2vBZwJEv7lxVXXAcFz0fZwA/EHhOVWeIyINAtqrOEZEwnM26MnEG2qep6hb32PuBG4Ea4E5Vfc8t/zcwHogCdgO/VdVnReQlIAOnyysf+NGRBNMYSyjH7/01hUx/eRV/uSKjea2UxhRkOzdDrp3tvB40xemjTjgJulJUnS+pT//P+WINjXBmuY3+idMq80ZFqfPZv/y38xczAonjnL7y1Iu/PVV304dOy65rL7h2FnTxwb/H8fDUwqKH4JM/QexQuOKl1v0r2VMLJQXfJI3iLVC81fm5fyvU1BnEDgyFhBFO91ViFiSMhJCOzY+h6pAzzXrpY8406x5pTot08CVNf6l7PE4CWfJXKFjujI+MvBlG3uJsv308Sgpg1UtOHGU7nf2LTrvOeXQ5gfHPBpxwQmnPLKEcvyOtlMoaD7NvyyIizEcLTx/YDsufcprylaXO3dtjboWUC9veOIsqbJwPi//stLA6RsGYn8CIHzq7XJ6o4q1Od9iX/3a+EIM7Okkl40rnr+C3bnZm0F0zs+UG9lvChvdh5i2AwKXPtPy9R1WHnL/iizZ/O3nszwdP9Tf1gsKgW1+n1db9yE/30SXBt/8d1VTBmjedBLF3vTMrbuztkHnNt1tu1RWw+jVY+ncoyoOufZw/oDKvhpBOzYuhtgY2zYfs553xFhFnIsjwG53WSzM+vyWUBlhCOTFL8vZx/XPLSe/VlX/dOJJOoS3bnP6WyjL44hWnO+zANud/zFE/dv7HPJ4uCV+orYHcmbD4UdiTC116Q1YDXxrNpeokqpxXnetVurP5e42Cq95wVn1ua4q3wOvXOQtPnnmP8wg4jpti6zuw3enK2fg+bP3UHSjHSbLfShj9v0ka4XHNu2ZL8HicmBf/2Zkh1jEKRk93BvG/etOZ8XdoD8RlOP/tpE5p8e4pAPZvg1UvOi2XQ3ugSy/nRuO+p5/Q6SyhNMASyol776tCbvv3F4xI7MbzN4ykQ4iPWw2eWqdL4LPH4evPnLKAYOcLJbiDMy35yPOgDm5ZncfRso5O3aAwZ+A1IBAksN5PaaAs0PlykgDn+b4Nzl+V+/MhOsXpL0/7nnO/hi9Vlzu/h925zlIqzf0r1peqDsPcn8GXr0LS2U5rpWN37471eJzpyBvfc1p/u9c45d37OQPfyWdDzCDo3OPkmABwpDt08aOQ98E35UlnOy2Xvme0zueoqXL++1n5PFz0N+jW54ROYwmlAZZQmmd2zg7ufD2HcUlRPHPdcMKCW6krasdKyFvgTL+trnDuC6gudwazq+s/Djt950eee2paLo74Yc6X+oDJ/v9LuK1Sdb685v0SIuLg+y9Bz4yG61aWweaFzl/0m/4Lh/Y6ybv3GBhwnjOtOqrBOxlOLru+cj7jgMkQm3bs+m2QJZQGWEJpvv9kb+cXb65mQkoMT14zjJCgNv7FWlvtJp8KZ3aPpxa01v3paaDMLfd4vl0WGuFMKz0Z/jpuCwqy4Y3rnGVhLvyz0y0ITlfMxvlOSyR/sXMfTVgX596cgZOdG2G9bdWYVmMJpQGWUFrGK8u2cf/MNZw3uAePXXUawcezgKQ5dRzaB2/eCFs/dqayHvga9qx13otM/qYV0muU77sOTbOcyI2Nxnjl6lF9qKrx8Lt31nLX6zn8dVpmy92jYtqPTlFw7UxY8Hvnno2emXDuDCeJNHWPhTlpWEIxLeIHWX2pqvHwx/fWExIUwCOXpRNgScXUFxAIZ//W2ezLugvbHUsopsX86Mz+VNZ4+PMHGwkNCmDG1CGWVEzDLJm0S5ZQTIu6fWIyVTUeHluYR0hgAA9cPBixLw9jTgmWUEyL+9m5A6isqeWZT7cSEhTAr85PtaRizCnAEoppcSLCr85PparGwzOfbiU0KJCfnzfQ32EZY3zMEorxCRHhtxcNpqrW6f4KDQrgpxPbwU1pxphGWUIxPhMQIMyYOoTKag//98FGQoIC+NGZNj3UmPbKEorxqYAA4U+XDaWq9pspxT/I6uvvsIwxPmAJxfhcUGAAj16RQXWtc/NjSFAAV486sUXpjDFtl62RYVpFcGAAf7/yNCakxHD/zDW8vuJrTuVlf4xpjyyhmFYTEhTAE1efxunJUdzz1ldc/uRnLNqwxxKLMe2EJRTTqsKCA/nn9cN5cMpgdh4o54bnV3DxY0uYn7sLj8cSizEnM1tt2FYb9puqGg8zvyjgiUWb2VZ0mAE9OnPrWUlcOLSnLS5pTBtmy9c3wBJK21BT6+Hd1YU8vjCPTXsO0jeqEz8e359LMuNtKXxj2qDGEopP/28VkUkiskFE8kTk3gbeDxWR1933l4lIYp337nPLN4jIeXXKnxORPSKypt65uovIByKyyf3ZzZefzbScoMAApmbGM//OM3jymtPoGBLIL99czfj/XcRLn+VTUV3r7xCNMV7wWUIRkUDgcWAyMAi4UkQG1at2E7BfVZOAR4GH3WMHAdOAwcAk4An3fAAvuGX13Qt8pKrJwEfua3MSCQgQJqXF8e5Px/H8DSPoERHKr2fncvqfFvLMJ1s4VNmC2/caY1qcL1soI4E8Vd2iqlXAa8CUenWmAC+6z98EJoqziuAU4DVVrVTVrUCeez5U9ROguIHr1T3Xi8DUlvwwpvWICGelxPDWj8fy6s2jSI7pzIx56xj38AIeW7CJ0opqf4dojGmAL29sjAe213ldAIxqrI6q1ohICRDpln9e79j4Y1yvh6oWus93AT0aqiQitwC3APTu3fvYn8L4jYgwtn8UY/tHsXJbMY8tyOOR/27kqU+2cM3oPlw2LIH+0Z39HaYxxtUu75RXVRWRBmcbqOrTwNPgDMq3amDmhA3r053nfzCSNTtKeGxBHk9+vJl/LNrM0IQuTMmI56L0OGLCw/wdpjGnNF8mlB1ArzqvE9yyhuoUiEgQ0AUo8vLY+naLSJyqFopIHLCnOcGbtiktvgtPXjuMXSUVvPPlTmbl7OB/3l3LjLlryUqKYmpGPOelxdI5tF3+rWRMm+azacNugtgITMRJBiuAq1Q1t06dW4EhqjpdRKYBl6rq90VkMPAqzrhJT5xB9mRVrXWPSwTeVdW0Ouf6X6BIVR9yZ5R1V9VfNhWjTRtuH/L2lDHrCye5FOwvJyw4gLNTezA1I54zBkQTEmRTj41pSX65D0VEzgf+AgQCz6nqDBF5EMhW1TkiEga8BGTiDLRPU9Ut7rH3AzcCNcCdqvqeW/5vYDwQBewGfquqz4pIJPAG0BvYBnxfVRsavD/KEkr7oqqs3LafWTk7mLu6kP2Hq+nWMZgLhsYxNSOeYX262c6RxrQAu7GxAZZQ2q+qGg+fbtrLrJydfLB2FxXVHhK6dWBKRk+mZsST3CPc3yEac9KyhNIASyinhoOVNcxfs4tZOTtYkrcPj0JKbDgTUmIYPzCGzN5d7Y58Y46DJZQGWEI59ewpq+DdLwt5f80uVn69n1qPEh4WxLikKM4cEM2ZA6OJ69LB32Ea06ZZQmmAJZRTW2lFNUs27ePjjXtZtGEvu0orABjYI5zxA6M5c0A0wxO726C+MfVYQmmAJRRzhKqycfdBFm3Yw8cb97Iiv5jqWqVTSCBj+kcdTTC9unc85rkqa2rZU1rJnrJK9pRWsLu0gt1llW6Z81oQ7jw7mUlpsTZRwJx0LKE0wBKKaczByho+21zEog17WLRhLzsOlAPQP7oTZw6IIb1XF0rKq51kUVrJ7tIK9pY5P/cf/u7SMMGBQkx4GNHhofSICGVb0WHW7yrjrIHRPDglzatEZUxbYQmlAZZQjDdUlc17D7ldY3tYtrWYqhoPAIEBQkx4qPOICKNHRCg9wsPoERFG9NHnoXTrGEJAnT1eamo9vPjZNv783w3UqvLTCcncfHo/n3evVVTX8p/s7SzJK2JCSgznD42zm0DNcbOE0gBLKOZElFfVkl90iKjOoXTvFNKszcAKS8p58J21vLdmF0kxnZkxNY1R/SJbMFrHocoaXlm2jWc+3creskq6dwqh+FAVHUMCuWBIHN8f0Yvhdp+O8ZIllAZYQjFtxcL1e/j17DUU7C/nsmEJ3Dc5hcjOoc0+b0l5NS8uzee5JVs5cLiacUlR3DYhiVF9u7Pq6wO8sWI7767eyaGqWvpFdeLy4b343mnxxETYumimcZZQGmAJxbQl5VW1PLZwE09/soWOIUHcNzmF7w/v9a2uMm8VHazk2cVbeemzbZRV1nB2agy3npVEZu/v7jt3qLKGeV8V8p/sApbnFxMYIIwfEM3lw3sxISXGZrmZ77CE0gBLKKYt2rS7jPtnrWH51mKG9enGjEvSSImN8OrYXSUVPP3JFl5dvo3KGg/nD4nj1vFJDOrp3fFb9h7kzZUFvLmygD1llUR2CuHS0+K5fHgvBtjqAsZlCaUBllBMW6WqvLVqB3+Yt46S8mp+OK4vd5ydTMeQhgfQtxcf5h8fb+bN7AJqVZmaEc+Px/cnKebE9oupqfXwyaa9vLGigA/X7abGo2T06sr3h/fiwvQ4IsKCm/PxzEnOEkoDLKGYtm7/oSoefn89r63YTnzXDjxw8WDOGfTN3nF5ew7yxKI8ZufsJFCEy4cnMP3M/i06DbnoYCUzv9jBG9nb2bj7IGHBAVwwpCd3np1s051PUZZQGmAJxZwssvOLuX/mGjbsLuPs1B5cP7YPry3fzrw1hYQFBXLVqN7cfHo/Yrv4bjBdVfmyoIQ3srczc9UOalWZfkY/fjw+iQ4hgT67rml7LKE0wBKKOZlU13p4bvFW/vLhJsqrawkPDeK6sX24Matvi8wIOx6FJeX8cd565ny5k55dwvjVBalcMCTOph2fIiyhNMASijkZFew/zPKtxUxM7UGXDv4dy1i+tZjfzsllXWEpo/p254GLB5Ma590EAHPysoTSAEsoxjRfrUf59/KveeS/Gygtr+aa0X24+5wBdO0Y4u/QjI80llBsgrkxplkCA4RrRvdh0c/Hc83oPrz8+TbGP7KIlz7fRq3n1P2D9VRkCcUY0yK6dgzhwSlpzL39dFJiw/n1rDVc+PfFLNtS5O/QvqXoYCXvrylk38FKf4fS7liXl3V5GdPiVJV5X+1ixty17Cyp4KL0ntw3OYWeXf23edm6wlKeX7KVWTk7qarxEBggjEuKYmpmT84dFEsnWyTTa34ZQxGRScBfgUDgn6r6UL33Q4F/AcOAIuAKVc1337sPuAmoBW5X1flNnVNEXgDOBErc09+gqjlNxWcJxRjfKq+q5R8fb+apjzcTIMKtZ/Xnh6f3Iyy4daYZ13qUD9bu5vklW1m2tZiw4AAuPS2B89PiWLJ5H3NydrLjQDkdggM5Z1APpmb25PTkaNsS+hhaPaGISCCwETgHKABWAFeq6to6dX4CDFXV6SIyDbhEVa8QkUHAv4GRQE/gQ2CAe1iD53QTyruq+qa3MVpCMaZ1bC8+zB/mreO9Nbvo1b0D901OZUJKjM8SS0l5NW+s2M6Ln+VTsL+cnl3CuG5sItNG9PrWZAGPR8netp9ZOTuYu7qQkvJquncK4YIhcUzN7MlpvW0F5ob4I6GMAR5Q1fPc1/cBqOof69SZ79b5TESCgF1ANHBv3bpH6rmHNXhOSyjGtH1L8vbxwJxcNu05SEhgAEMSujAisTsjErsxvE93unRs3jTozXsP8sKSfN5aVcDhqlpGJnbnhqxEzh3Ug6BjtDqqajx8vHEvs3J28OHa3VTWeOjVvQNT0uOZmtmTpBhby+yIxhKKLzsN44HtdV4XAKMaq6OqNSJSAkS65Z/XOzbefd7UOWeIyG+Aj4B7VdVG3YxpQ7KSoph3x+l8snEvy7cWsyK/mGcXb+HJjxURGNgjnOGJ3dwk092rMRePR/lk016eX5LPxxv3EhIYwEXpPflBViJp8V28ji0kKIBzBvXgnEE9KKuoZn7ubmbn7OCJRXk8tjCPwT0jmJoRz0XpPX26IsHJrD2NQt2H08IJAZ4G7gEerF9JRG4BbgHo3bt3a8ZnjAGCAwOYmNqDianOmmTlVbV8WXCAFVuLWZ5fzMxVO3j5868BiO/agRGJ3RjRtzsjE7vTP7rz0eX8D1XW8PaqAl5Yms/mvYeIDg/lrrMHcNWo3kSHN2/lgPCwYC4blsBlwxLYU1rBO6sLmZ2zgxnz1vGH99Yxqm93xg+MYWz/SAb37NKsTdbaE18mlB1ArzqvE9yyhuoUuF1eXXAG55s6tsFyVS10yypF5Hng5w0FpapP4yQchg8ffupOcTOmjegQEsjofpGMdneqrKn1sH5XGSvynRbM4rwiZuXsBKBrx2CG9+lOj4hQ5ny5k7KKGoYmdOHRK9K5YEhPn+zdEhMRxk3j+nLTuL5s2XuQ2Tk7mfdVIQ+9tx6AiLAgRveLJCspirH9I0mK6XzKjrv4cgwlCGcAfSLOl/4K4CpVza1T51ZgSJ1B+UtV9fsiMhh4lW8G5T8CkgFp7JwiEqeqheL8Sz4KVKjqvU3FaGMoxrR9qsq2osMszy8mO7+YFfn72V58mPPSYrkxK9FvA+d7Siv4bEsRS/OKWLJ5HwX7ywGIDg9lbP9I9xHVYisyqyol5dUUllRQWl5NRu+uhAb5Z1FOf00bPh/4C84U3+dUdYaIPAhkq+ocEQkDXgIygWJgmqpucY+9H7gRqAHuVNX3GjunW74AZ0BfgBxguqoebCo+SyjGnJxqPdrmupm2Fx9mSd4+lm4uYunmoqM3Tvbq3oGx/aIYmxTJmP6RxIR/d/zF41H2HapkV0kFhSUV7C51fjqvy9ld+v/bu/cYqcozjuPfn1yEAi4Li7sorKhgG0lbRIqWKDHUUiWN9mIQMalVk0ZTW03TC4mJ8Y/+o00vwZo22mpt44U2rdY02krBXlILYi03C5RLKLjCLmhdJAWU5ekf58WO48yyds+cs4HfJ5nMmfe8Z+aZd949z553zrznELu6D3DwrSNvbzNmxFCuOn8C18xs58yWEYW9T/BcXjU5oZhZI0QEm7v289yWvfxl66us2PYqbxw8DMA5rSM5b2Iz+988zO6UNDr3HeRwUNzHfAAAB4ZJREFU1TQ1QwaJU0cNY3zTMNqasvvWU4Yxvmk4g04ST/y9g6UbOuk5Esw6eywLL2hn7rlthVyy2QmlBicUMytCz5FgfUd3OnrZy7qObprfN5S2U/6XMNqahqXHw2lrGsbYEUPfPgGhnq59B/n5Czt59PmddLx+gJaRQ7nq/IksnNlO+9jGXfzMCaUGJxQzOx70pFOnH1m5g+Ubu+g5Elw8pYWFM9u59NzW3H/574RSgxOKmR1vdncfZMmqnSxZtYNXug8ybtTJzJ8xgQUfac/tBAEnlBqcUMzseNVzJPjDpi4eWbmDZzd1EcDsKeO49oJ25nzg1GPOHNAbJ5QanFDM7ETwyusHeCwdtXTuO0TrKSfz3fnTmDW55f96vjKmXjEzswHgtNHD+crHz+HLcyazfGMXjz6/gzMacKqxE4qZ2Qli8KCTmDu1jblT2xry/J7038zMcuGEYmZmuXBCMTOzXDihmJlZLpxQzMwsF04oZmaWCycUMzPLhROKmZnl4oSeekXSHuBfZcdRRwuwt+wgeuH4+sfx9Y/j67/+xHhGRIyrLjyhE8pAJumFWnPlDBSOr38cX/84vv5rRIwe8jIzs1w4oZiZWS6cUAau+8oO4BgcX/84vv5xfP2Xe4z+DsXMzHLhIxQzM8uFE4qZmeXCCaVEkiZKelbSPyS9JOnWGnUukdQtaXW63VFwjNslrUuv/a7rJSuzWNIWSWslTS8wtvdXtMtqSfsk3VZVp9D2k/SApC5J6yvKxkhaKmlzum+us+11qc5mSdcVGN+3JG1Mn9/jkkbX2bbXvtDA+O6U1FHxGc6rs+1lkjalvriowPiWVMS2XdLqOtsW0X419ymF9cGI8K2kGzAemJ6WRwH/BM6tqnMJ8JsSY9wOtPSyfh7wNCDgQmBlSXEOAnaT/eCqtPYDZgPTgfUVZXcDi9LyIuCuGtuNAbal++a03FxQfHOBwWn5rlrx9aUvNDC+O4Gv9uHz3wqcBQwF1lT/LTUqvqr13wbuKLH9au5TiuqDPkIpUUTsiogX0/IbwAbg9HKjes+uBH4amRXAaEnjS4jjY8DWiCh15oOI+BPwWlXxlcBDafkh4FM1Nv0EsDQiXouIfwNLgcuKiC8inomIw+nhCmBC3q/bV3Xary9mAlsiYltEvAk8RtbuueotPkkC5gOP5v26fdXLPqWQPuiEMkBImgScB6yssfqjktZIelrS1EIDgwCekfQ3SV+osf50YGfF45cpJykuoP4fcpntB9AaEbvS8m6gtUadgdKON5AdcdZyrL7QSLekIbkH6gzXDIT2uxjojIjNddYX2n5V+5RC+qATygAgaSTwS+C2iNhXtfpFsmGcDwP3AE8UHN5FETEduBz4oqTZBb/+MUkaClwB/KLG6rLb7x0iG1sYkOfqS7odOAw8XKdKWX3hB8DZwDRgF9mw0kB0Db0fnRTWfr3tUxrZB51QSiZpCNkH/3BE/Kp6fUTsi4j9afkpYIiklqLii4iOdN8FPE42tFCpA5hY8XhCKivS5cCLEdFZvaLs9ks6jw4DpvuuGnVKbUdJnwc+CVybdjjv0oe+0BAR0RkRPRFxBLi/zuuW3X6Dgc8AS+rVKar96uxTCumDTiglSmOuPwY2RMR36tRpS/WQNJPsM3u1oPhGSBp1dJnsy9v1VdWeBD6Xzva6EOiuOLQuSt3/DMtsvwpPAkfPmLkO+HWNOr8D5kpqTkM6c1NZw0m6DPg6cEVE/KdOnb70hUbFV/md3KfrvO4qYIqkM9MR6wKydi/KpcDGiHi51sqi2q+XfUoxfbCRZxz4dswzMi4iO/RcC6xOt3nATcBNqc4twEtkZ62sAGYVGN9Z6XXXpBhuT+WV8Qm4l+wMm3XAjILbcARZgmiqKCut/cgS2y7gLbIx6BuBscAyYDPwe2BMqjsD+FHFtjcAW9Lt+gLj20I2dn60D/4w1T0NeKq3vlBQfD9LfWst2Y5xfHV86fE8srOathYZXyr/ydE+V1G3jPart08ppA966hUzM8uFh7zMzCwXTihmZpYLJxQzM8uFE4qZmeXCCcXMzHLhhGLWQJJ69M4ZkXObBVfSpMpZb83KNrjsAMyOcwciYlrZQZgVwUcoZiVI18a4O10f43lJk1P5JEnL00SIyyS1p/JWZdcqWZNus9JTDZJ0f7r2xTOShpf2puyE54Ri1ljDq4a8rq5Y1x0RHwS+D3wvld0DPBQRHyKbpHFxKl8M/DGySS6nk/3aGmAKcG9ETAVeBz7b4PdjVpd/KW/WQJL2R8TIGuXbgTkRsS1N5rc7IsZK2ks2tchbqXxXRLRI2gNMiIhDFc8xiez6FVPS428AQyLim41/Z2bv5iMUs/JEneX34lDFcg/+XtRK5IRiVp6rK+7/mpafI5spF+Ba4M9peRlwM4CkQZKaigrSrK/834xZYw2XtLri8W8j4uipw82S1pIdZVyTyr4EPCjpa8Ae4PpUfitwn6QbyY5Ebiab9dZswPB3KGYlSN+hzIiIvWXHYpYXD3mZmVkufIRiZma58BGKmZnlwgnFzMxy4YRiZma5cEIxM7NcOKGYmVku/gv5BreVDL/CEwAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [], + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 279 + }, + "id": "cb5Rx6oep-lk", + "outputId": "19cbe638-240b-4dcb-98c5-40308caa015d" + }, + "source": [ + "plt.plot(range(1, NUM_EPOCHS+1), train_acc_lst, label='Training accuracy')\n", + "plt.plot(range(1, NUM_EPOCHS+1), test_acc_lst, label='Test accuracy')\n", + "plt.legend(loc='upper left')\n", + "plt.ylabel('Cross entropy')\n", + "plt.xlabel('Epoch')\n", + "plt.show()" + ], + "id": "cb5Rx6oep-lk", + "execution_count": 16, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [], + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "IIvXhvIRp-lk", + "outputId": "cb811174-d44c-4254-a6f2-6c2584bc07d1" + }, + "source": [ + "model.eval()\n", + "with torch.set_grad_enabled(False): # save memory during inference\n", + " test_acc, test_loss = compute_accuracy_and_loss(model, test_loader, DEVICE)\n", + " print(f'Test accuracy: {test_acc:.2f}%')" + ], + "id": "IIvXhvIRp-lk", + "execution_count": 17, + "outputs": [ + { + "output_type": "stream", + "text": [ + "Test accuracy: 97.68%\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "code", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 122 + }, + "id": "2yq-qsdap-ll", + "outputId": "f0743cb8-216d-40a9-9057-57b01737fbec" + }, + "source": [ + "for batch_idx, (x, y) in enumerate(test_loader):\n", + " x = x.to(DEVICE)\n", + " y = y.to(DEVICE)\n", + "\n", + " x_numpy = x.numpy()\n", + " \n", + " fig, axes = plt.subplots(1, 5)\n", + " \n", + " for ax in axes:\n", + " index = random.randint(0, 64)\n", + " logits, probas = model(x[index].view(-1, 28*28))\n", + " _, predicted_labels = torch.max(probas, 1)\n", + " ax.imshow(x_numpy[index].reshape(28, 28))\n", + " ax.set_title(f'Label {predicted_labels[0]}')\n", + " \n", + " plt.show()\n", + " break" + ], + "id": "2yq-qsdap-ll", + "execution_count": 18, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [], + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "-amyuiWkp-ll" + }, + "source": [ + "## 2-4. Discussion\n", + "1. Train Data에 대한 정확도와, Test Data에 대한 정확도가 왜 다를까요?\n", + "- Train Data는 Test Data와 달리 일반적이지 않으므로, 일반화 성능에 따라 정확도가 달라질 수 있다.\n", + "\n", + "2. 다른 사람들은 정확도가 99퍼가 넘는 모델도 만들던데, DNN의 한계가 있다면 어떤 점이 있을까요? (Hint: 우리는 28x28의 이미지를 768x1로 쫙 펴서 넣어 줬습니다.)\n", + "- 각 픽셀의 2차원 좌표값이 상실되므로 인접 관계, 국소적 형태 등을 고려할 수 없다. " + ], + "id": "-amyuiWkp-ll" + }, + { + "cell_type": "code", + "metadata": { + "id": "0bzJ_d1s0JSj" + }, + "source": [ + "" + ], + "id": "0bzJ_d1s0JSj", + "execution_count": 18, + "outputs": [] + } + ] +} \ No newline at end of file