수강 대상

  • 인공지능, 머신러닝, 딥러닝에 대한 이해가 전혀 없으나 배워보고 싶으신 분
  • 데이터 분석에 대한 이해가 전혀 없으신 분
  • Python에 대한 이해가 없으신 분
  • 빠른 시간 내 훑어보시길 원하시는 분
  • 해당 강의자료는 생활코딩의 머신러닝 야학의 후속편으로 보시면 좋습니다.

결론

  • Python은 무진장 좋다!
    • 난이도
    • 커뮤니티
    • 확장성
  • 딥러닝도 무진장 좋다!
    • 심층 학습(Deep learning) > 표현 학습 > 기계 학습 > 인공 지능
    • 학습이란 "한 컴퓨터 프로그램이 어떤 과제류 T에 속하는 과제들을 수행하며 그 수행의 성과를 측정한 측도가 P라고 할 때. 만일 어떤 경험 E 때문에 T의 어떤 과제에 대한 성과 측도 P가 개선되었다면, 그 컴퓨터 프로그램은 경험 E로부터 학습한다고 말할 수 있다" - mitchell, 1997
  • 만능은 아니다!
    • 개리 마르커스 교수의 에세이(https://arxiv.org/ftp/arxiv/papers/1801/1801.00631.pdf)에서 몇 가지 발췌
      1. 많은 데이터 필요(데이터는 신뢰할 수 있는 데이터인가?)
      2. 재활용 힘듬
      3. 충분히 투명하지 않음
      4. 인과관계와 상관관계의 구분이 어려움
      5. 신뢰성있는 엔지니어링의 어려움

영상강의 공부 방법

  • Python을 조금 해보신 분이라면 따라서 타이핑을 쳐보세요.
  • Python을 해보시지 않으신 분은 자료를 다운로드 받아 colab에서 Ctrl + Enter만 해보세요.
  • 자료 링크 : www.paullab.co.kr/deep_learning.zip
  • 영상은 제주코딩베이스캠프 유튜브 채널에 올려두겠습니다.

image.png

image.png

그래프의 한글 폰트

!sudo apt install -y fonts-nanum*
!sudo fc-cache -fv
!rm ~/.cache/matplotlib -rf
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Note, selecting 'fonts-nanum-eco' for glob 'fonts-nanum*'
Note, selecting 'fonts-nanum' for glob 'fonts-nanum*'
Note, selecting 'fonts-nanum-gothic-light' for glob 'fonts-nanum*'
Note, selecting 'fonts-nanum-coding' for glob 'fonts-nanum*'
Note, selecting 'fonts-nanum-extra' for glob 'fonts-nanum*'
The following NEW packages will be installed:
  fonts-nanum fonts-nanum-coding fonts-nanum-eco fonts-nanum-extra
0 upgraded, 4 newly installed, 0 to remove and 37 not upgraded.
Need to get 37.0 MB of archives.
After this operation, 145 MB of additional disk space will be used.
Get:1 http://archive.ubuntu.com/ubuntu bionic/universe amd64 fonts-nanum all 20170925-1 [9,604 kB]
Get:2 http://archive.ubuntu.com/ubuntu bionic/universe amd64 fonts-nanum-eco all 1.000-6 [14.0 MB]
Get:3 http://archive.ubuntu.com/ubuntu bionic/universe amd64 fonts-nanum-extra all 20170925-1 [12.2 MB]
Get:4 http://archive.ubuntu.com/ubuntu bionic/universe amd64 fonts-nanum-coding all 2.5-1 [1,083 kB]
Fetched 37.0 MB in 3s (11.7 MB/s)
debconf: unable to initialize frontend: Dialog
debconf: (No usable dialog-like program is installed, so the dialog based frontend cannot be used. at /usr/share/perl5/Debconf/FrontEnd/Dialog.pm line 76, <> line 4.)
debconf: falling back to frontend: Readline
debconf: unable to initialize frontend: Readline
debconf: (This frontend requires a controlling tty.)
debconf: falling back to frontend: Teletype
dpkg-preconfigure: unable to re-open stdin: 
Selecting previously unselected package fonts-nanum.
(Reading database ... 155013 files and directories currently installed.)
Preparing to unpack .../fonts-nanum_20170925-1_all.deb ...
Unpacking fonts-nanum (20170925-1) ...
Selecting previously unselected package fonts-nanum-eco.
Preparing to unpack .../fonts-nanum-eco_1.000-6_all.deb ...
Unpacking fonts-nanum-eco (1.000-6) ...
Selecting previously unselected package fonts-nanum-extra.
Preparing to unpack .../fonts-nanum-extra_20170925-1_all.deb ...
Unpacking fonts-nanum-extra (20170925-1) ...
Selecting previously unselected package fonts-nanum-coding.
Preparing to unpack .../fonts-nanum-coding_2.5-1_all.deb ...
Unpacking fonts-nanum-coding (2.5-1) ...
Setting up fonts-nanum-extra (20170925-1) ...
Setting up fonts-nanum (20170925-1) ...
Setting up fonts-nanum-coding (2.5-1) ...
Setting up fonts-nanum-eco (1.000-6) ...
Processing triggers for fontconfig (2.12.6-0ubuntu2) ...
/usr/share/fonts: caching, new cache contents: 0 fonts, 1 dirs
/usr/share/fonts/truetype: caching, new cache contents: 0 fonts, 3 dirs
/usr/share/fonts/truetype/humor-sans: caching, new cache contents: 1 fonts, 0 dirs
/usr/share/fonts/truetype/liberation: caching, new cache contents: 16 fonts, 0 dirs
/usr/share/fonts/truetype/nanum: caching, new cache contents: 31 fonts, 0 dirs
/usr/local/share/fonts: caching, new cache contents: 0 fonts, 0 dirs
/root/.local/share/fonts: skipping, no such directory
/root/.fonts: skipping, no such directory
/var/cache/fontconfig: cleaning cache directory
/root/.cache/fontconfig: not cleaning non-existent cache directory
/root/.fontconfig: not cleaning non-existent cache directory
fc-cache: succeeded
import matplotlib.pyplot as plt

plt.rc('font', family='NanumBarunGothic')

데이터 생성

import pandas as pd # 데이터 분석을 위한 모듈
import numpy as np # 대규모 다차원 배열 연산을 위한 모듈
주가 = [ np.random.randint(10, 50) + i*2 for i in range(100) ]
import matplotlib.pyplot as plt # 시각화 모듈

plt.plot(np.arange(1, 101), 주가)
plt.show()
findfont: Font family ['NanumBarunGothic'] not found. Falling back to DejaVu Sans.

딥러닝

image.png

독립 = pd.DataFrame(np.arange(1, 101))
종속 = pd.DataFrame(주가)
독립.shape, 종속.shape
((100, 1), (100, 1))
import tensorflow as tf # 구글이 2015년 오픈소스로 공개한 딥러닝 라이브러리
X = tf.keras.layers.Input(shape=[1]) # 독립변수의 col
Y = tf.keras.layers.Dense(1)(X) # 종속변수의 col(뉴런의 개수)
model = tf.keras.models.Model(X, Y)
model.compile(loss='mse') # MSE(Mean squared error)
model.fit(독립, 종속, epochs=10000, verbose=0)
model.fit(독립, 종속, epochs=10)
Epoch 1/10
4/4 [==============================] - 0s 4ms/step - loss: 119.1895
Epoch 2/10
4/4 [==============================] - 0s 3ms/step - loss: 119.1703
Epoch 3/10
4/4 [==============================] - 0s 5ms/step - loss: 119.1476
Epoch 4/10
4/4 [==============================] - 0s 4ms/step - loss: 119.1375
Epoch 5/10
4/4 [==============================] - 0s 3ms/step - loss: 119.0755
Epoch 6/10
4/4 [==============================] - 0s 4ms/step - loss: 119.0557
Epoch 7/10
4/4 [==============================] - 0s 4ms/step - loss: 119.0058
Epoch 8/10
4/4 [==============================] - 0s 4ms/step - loss: 119.0227
Epoch 9/10
4/4 [==============================] - 0s 3ms/step - loss: 118.9778
Epoch 10/10
4/4 [==============================] - 0s 3ms/step - loss: 119.1360
<keras.callbacks.History at 0x7f132efb9390>
model.predict([50])
model.predict([40])
array([[104.36363]], dtype=float32)
model.predict(독립)
array([[ 22.904667],
       [ 24.993359],
       [ 27.082048],
       [ 29.17074 ],
       [ 31.259432],
       [ 33.34812 ],
       [ 35.436813],
       [ 37.525505],
       [ 39.614197],
       [ 41.70289 ],
       [ 43.79158 ],
       [ 45.880272],
       [ 47.968964],
       [ 50.05765 ],
       [ 52.146343],
       [ 54.235035],
       [ 56.323727],
       [ 58.41242 ],
       [ 60.50111 ],
       [ 62.5898  ],
       [ 64.67849 ],
       [ 66.76718 ],
       [ 68.85587 ],
       [ 70.944565],
       [ 73.03326 ],
       [ 75.12195 ],
       [ 77.21064 ],
       [ 79.29933 ],
       [ 81.388016],
       [ 83.476715],
       [ 85.5654  ],
       [ 87.6541  ],
       [ 89.74278 ],
       [ 91.83148 ],
       [ 93.920166],
       [ 96.008865],
       [ 98.09755 ],
       [100.18625 ],
       [102.27493 ],
       [104.36363 ],
       [106.45232 ],
       [108.541   ],
       [110.6297  ],
       [112.71838 ],
       [114.80708 ],
       [116.89577 ],
       [118.98447 ],
       [121.07315 ],
       [123.16185 ],
       [125.250534],
       [127.33923 ],
       [129.42792 ],
       [131.51662 ],
       [133.6053  ],
       [135.694   ],
       [137.78268 ],
       [139.87137 ],
       [141.96007 ],
       [144.04875 ],
       [146.13745 ],
       [148.22614 ],
       [150.31483 ],
       [152.40353 ],
       [154.49222 ],
       [156.5809  ],
       [158.6696  ],
       [160.75829 ],
       [162.84698 ],
       [164.93567 ],
       [167.02437 ],
       [169.11305 ],
       [171.20175 ],
       [173.29044 ],
       [175.37914 ],
       [177.46782 ],
       [179.55652 ],
       [181.6452  ],
       [183.7339  ],
       [185.82259 ],
       [187.91129 ],
       [189.99997 ],
       [192.08865 ],
       [194.17735 ],
       [196.26604 ],
       [198.35474 ],
       [200.44342 ],
       [202.53212 ],
       [204.6208  ],
       [206.7095  ],
       [208.79819 ],
       [210.88689 ],
       [212.97557 ],
       [215.06427 ],
       [217.15295 ],
       [219.24165 ],
       [221.33034 ],
       [223.41902 ],
       [225.50772 ],
       [227.5964  ],
       [229.6851  ]], dtype=float32)
model.get_weights()
[array([[2.0886912]], dtype=float32), array([20.815975], dtype=float32)]
2.072317 * 50 + 22.033388
125.649238
model.predict([50])
array([[125.250534]], dtype=float32)
plt.plot(np.arange(1, 101), 주가)
plt.plot(np.arange(1, 101), 2.07 * np.arange(1, 101) + 22.03)

plt.show()
오차값 = 종속 - model.predict(독립)
오차값
0
0 -6.904667
1 -8.993359
2 7.917952
3 9.829260
4 -7.259432
... ...
95 -10.330338
96 -8.419022
97 -2.507721
98 -20.596405
99 12.314896

100 rows × 1 columns

오차값의제곱 = 오차값 ** 2
오차값의제곱
0
0 47.674425
1 80.880499
2 62.693957
3 96.614350
4 52.699351
... ...
95 106.715873
96 70.879925
97 6.288664
98 424.211900
99 151.656654

100 rows × 1 columns

(오차값의제곱.sum())/100 ## MSE
0    119.005107
dtype: float64

최소 제곱법

  • y = ax + b
  • 참고자료 : https://ko.wikipedia.org/wiki/%EC%B5%9C%EC%86%8C%EC%A0%9C%EA%B3%B1%EB%B2%95
  • 구하고자 하는 방정식은 y = ax + b이다. 상수 a, b값을 안다면, a, b는 다음으로 계산할 수 있다.
  • a : $${\displaystyle a={\frac {n\Sigma XY-\Sigma X\Sigma Y}{n\Sigma X^{2}-\Sigma X\Sigma X}}}$$

  • b : $${\displaystyle b={\frac {\Sigma X^{2}\Sigma Y-\Sigma X\Sigma XY}{n\Sigma X^{2}-\Sigma X\Sigma X}}}$$

두수의곱 = 독립*종속
int(100 * 두수의곱.sum())
81342700
int(독립.sum() * 종속.sum())
64135000
int(100 * (독립 ** 2).sum())
33835000
int(독립.sum() * 독립.sum())
25502500
분자 = int(100 * 두수의곱.sum()) - int(독립.sum() * 종속.sum())
분모 = int(100 * (독립 ** 2).sum()) - int(독립.sum() * 독립.sum())
분자 / 분모
2.0651305130513053
model.get_weights()
[array([[2.0886912]], dtype=float32), array([20.815975], dtype=float32)]

${\displaystyle b={\frac {\Sigma X^{2}\Sigma Y-\Sigma X\Sigma XY}{n\Sigma X^{2}-\Sigma X\Sigma X}}}$

분자 = ((독립**2).sum() * 종속.sum()) - (독립.sum() * (독립*종속).sum())
분모 = (100 * (독립**2).sum()) - (독립.sum() * 독립.sum())
분자 / 분모
0    22.710909
dtype: float64

단순데이터의 히든레이어

image.png

매출액 = [2, 5, 10, 20, 40, 80]
광고액 = [1, 2, 4, 6, 8, 10]
순익 = [1, 1.5, 3, 10, 20, 60]
plt.plot(np.arange(1, 7), 매출액, label='매출액')
plt.plot(np.arange(1, 7), 광고액, label='광고액')
plt.plot(np.arange(1, 7), 순익, label='순익')

plt.legend()
plt.show()
/usr/local/lib/python3.7/dist-packages/matplotlib/backends/backend_agg.py:214: RuntimeWarning: Glyph 47588 missing from current font.
  font.set_text(s, 0.0, flags=flags)
/usr/local/lib/python3.7/dist-packages/matplotlib/backends/backend_agg.py:214: RuntimeWarning: Glyph 52636 missing from current font.
  font.set_text(s, 0.0, flags=flags)
/usr/local/lib/python3.7/dist-packages/matplotlib/backends/backend_agg.py:214: RuntimeWarning: Glyph 50529 missing from current font.
  font.set_text(s, 0.0, flags=flags)
/usr/local/lib/python3.7/dist-packages/matplotlib/backends/backend_agg.py:214: RuntimeWarning: Glyph 44305 missing from current font.
  font.set_text(s, 0.0, flags=flags)
/usr/local/lib/python3.7/dist-packages/matplotlib/backends/backend_agg.py:214: RuntimeWarning: Glyph 44256 missing from current font.
  font.set_text(s, 0.0, flags=flags)
/usr/local/lib/python3.7/dist-packages/matplotlib/backends/backend_agg.py:214: RuntimeWarning: Glyph 49692 missing from current font.
  font.set_text(s, 0.0, flags=flags)
/usr/local/lib/python3.7/dist-packages/matplotlib/backends/backend_agg.py:214: RuntimeWarning: Glyph 51061 missing from current font.
  font.set_text(s, 0.0, flags=flags)
/usr/local/lib/python3.7/dist-packages/matplotlib/backends/backend_agg.py:183: RuntimeWarning: Glyph 47588 missing from current font.
  font.set_text(s, 0, flags=flags)
/usr/local/lib/python3.7/dist-packages/matplotlib/backends/backend_agg.py:183: RuntimeWarning: Glyph 52636 missing from current font.
  font.set_text(s, 0, flags=flags)
/usr/local/lib/python3.7/dist-packages/matplotlib/backends/backend_agg.py:183: RuntimeWarning: Glyph 50529 missing from current font.
  font.set_text(s, 0, flags=flags)
/usr/local/lib/python3.7/dist-packages/matplotlib/backends/backend_agg.py:183: RuntimeWarning: Glyph 44305 missing from current font.
  font.set_text(s, 0, flags=flags)
/usr/local/lib/python3.7/dist-packages/matplotlib/backends/backend_agg.py:183: RuntimeWarning: Glyph 44256 missing from current font.
  font.set_text(s, 0, flags=flags)
/usr/local/lib/python3.7/dist-packages/matplotlib/backends/backend_agg.py:183: RuntimeWarning: Glyph 49692 missing from current font.
  font.set_text(s, 0, flags=flags)
/usr/local/lib/python3.7/dist-packages/matplotlib/backends/backend_agg.py:183: RuntimeWarning: Glyph 51061 missing from current font.
  font.set_text(s, 0, flags=flags)
독립 = pd.DataFrame({
    '매출액' : 매출액,
    '광고액' : 광고액
})
종속 = pd.DataFrame({
    '순익' : 순익
})
독립.shape, 종속.shape
((6, 2), (6, 1))
독립
매출액 광고액
0 2 1
1 5 2
2 10 4
3 20 6
4 40 8
5 80 10
X = tf.keras.layers.Input(shape=[2]) # 독립변수의 col
## 1. 히든 레이어의 노드(뉴런) 수는 2개부터 5개까지 점차 늘려보고 그래프를 확인해보세요.
H = tf.keras.layers.Dense(2, activation='swish')(X) 
# activation은 뉴런 출력에 적용할 함수(대표적으로 swish, sigmoid, softmax)
## 2. 히든 레이어의 수를 2개, 3개로 점차 늘려보고 그래프를 확인해보세요.
# H = tf.keras.layers.Dense(2, activation='swish')(H)
Y = tf.keras.layers.Dense(1)(H) # 종속변수의 col
model = tf.keras.models.Model(X, Y)
model.compile(loss='mse') # MSE(Mean squared error)
model.fit(독립, 종속, epochs=10000, verbose=0)
model.fit(독립, 종속, epochs=10)
Epoch 1/10
1/1 [==============================] - 0s 5ms/step - loss: 0.0982
Epoch 2/10
1/1 [==============================] - 0s 9ms/step - loss: 0.0981
Epoch 3/10
1/1 [==============================] - 0s 6ms/step - loss: 0.0982
Epoch 4/10
1/1 [==============================] - 0s 5ms/step - loss: 0.0981
Epoch 5/10
1/1 [==============================] - 0s 6ms/step - loss: 0.0981
Epoch 6/10
1/1 [==============================] - 0s 6ms/step - loss: 0.0981
Epoch 7/10
1/1 [==============================] - 0s 12ms/step - loss: 0.0981
Epoch 8/10
1/1 [==============================] - 0s 6ms/step - loss: 0.0981
Epoch 9/10
1/1 [==============================] - 0s 6ms/step - loss: 0.0981
Epoch 10/10
1/1 [==============================] - 0s 9ms/step - loss: 0.0980
<keras.callbacks.History at 0x7f133061b210>
model.get_weights()
[array([[-0.40000844,  0.7816885 ],
        [ 1.5398669 , -1.2308433 ]], dtype=float32),
 array([ 3.6804793, -2.7696192], dtype=float32),
 array([[1.5450304],
        [1.3788965]], dtype=float32),
 array([-5.561009], dtype=float32)]
model.predict([[10, 4]])
array([[3.5262856]], dtype=float32)
model.predict(독립)
array([[ 0.9172058],
       [ 1.3474641],
       [ 3.5262856],
       [ 9.508385 ],
       [20.156319 ],
       [59.87727  ]], dtype=float32)
종속
순익
0 1.0
1 1.5
2 3.0
3 10.0
4 20.0
5 60.0
plt.plot(np.arange(1, 7), model.predict(독립), label='예측값')
plt.plot(np.arange(1, 7), 종속, label='실제값')

plt.legend()
plt.show()
/usr/local/lib/python3.7/dist-packages/matplotlib/backends/backend_agg.py:214: RuntimeWarning: Glyph 50696 missing from current font.
  font.set_text(s, 0.0, flags=flags)
/usr/local/lib/python3.7/dist-packages/matplotlib/backends/backend_agg.py:214: RuntimeWarning: Glyph 52769 missing from current font.
  font.set_text(s, 0.0, flags=flags)
/usr/local/lib/python3.7/dist-packages/matplotlib/backends/backend_agg.py:214: RuntimeWarning: Glyph 44050 missing from current font.
  font.set_text(s, 0.0, flags=flags)
/usr/local/lib/python3.7/dist-packages/matplotlib/backends/backend_agg.py:214: RuntimeWarning: Glyph 49892 missing from current font.
  font.set_text(s, 0.0, flags=flags)
/usr/local/lib/python3.7/dist-packages/matplotlib/backends/backend_agg.py:214: RuntimeWarning: Glyph 51228 missing from current font.
  font.set_text(s, 0.0, flags=flags)
/usr/local/lib/python3.7/dist-packages/matplotlib/backends/backend_agg.py:183: RuntimeWarning: Glyph 50696 missing from current font.
  font.set_text(s, 0, flags=flags)
/usr/local/lib/python3.7/dist-packages/matplotlib/backends/backend_agg.py:183: RuntimeWarning: Glyph 52769 missing from current font.
  font.set_text(s, 0, flags=flags)
/usr/local/lib/python3.7/dist-packages/matplotlib/backends/backend_agg.py:183: RuntimeWarning: Glyph 44050 missing from current font.
  font.set_text(s, 0, flags=flags)
/usr/local/lib/python3.7/dist-packages/matplotlib/backends/backend_agg.py:183: RuntimeWarning: Glyph 49892 missing from current font.
  font.set_text(s, 0, flags=flags)
/usr/local/lib/python3.7/dist-packages/matplotlib/backends/backend_agg.py:183: RuntimeWarning: Glyph 51228 missing from current font.
  font.set_text(s, 0, flags=flags)

복잡 데이터의 히든레이어

  • 그럼 주가는 잘 맞출까? (곡선 형태)
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

광고액 = [ np.random.randint(10, 50) + np.log(i*5) * 50 for i in range(1, 101) ]
계절성 = [ np.sin(i/3)*100 + i*3 + j*2 for i, j in zip(np.arange(1, 101), 광고액) ]
매출액 = [i**(np.log(np.log(i))) + j for i, j in zip(np.arange(1, 101), 계절성) ]

plt.plot(np.arange(1, 101), 광고액, label='a')
plt.plot(np.arange(1, 101), 계절성, label='b')
plt.plot(np.arange(1, 101), 매출액, label='c')

plt.legend()
plt.show()
/usr/local/lib/python3.7/dist-packages/ipykernel_launcher.py:7: RuntimeWarning: divide by zero encountered in log
  import sys
독립 = pd.DataFrame({
    '계절성' : 계절성,
    '광고액' : 광고액
})
종속 = pd.DataFrame({
    '매출액' : 매출액
})
독립.shape, 종속.shape
((100, 2), (100, 1))
import tensorflow as tf

#모델 준비
X = tf.keras.layers.Input(shape=[2]) # 독립변수의 col
H = tf.keras.layers.Dense(200, activation='swish')(X) # 노드의 수는 천천히 늘려감! (2 ~ 200)
# H = tf.keras.layers.Dense(5, activation='swish')(H) # 처음에는 주석처리!
Y = tf.keras.layers.Dense(1)(H) # 종속변수의 col
model = tf.keras.models.Model(X, Y)
model.compile(loss='mse') # MSE(Mean squared error)
model.fit(독립, 종속, epochs=10000, verbose=0)
model.fit(독립, 종속, epochs=10)
Epoch 1/10
4/4 [==============================] - 0s 3ms/step - loss: 34673.1094
Epoch 2/10
4/4 [==============================] - 0s 3ms/step - loss: 34818.7422
Epoch 3/10
4/4 [==============================] - 0s 3ms/step - loss: 37403.0078
Epoch 4/10
4/4 [==============================] - 0s 2ms/step - loss: 58460.4766
Epoch 5/10
4/4 [==============================] - 0s 3ms/step - loss: 35651.8125
Epoch 6/10
4/4 [==============================] - 0s 4ms/step - loss: 38424.7188
Epoch 7/10
4/4 [==============================] - 0s 3ms/step - loss: 37497.7656
Epoch 8/10
4/4 [==============================] - 0s 54ms/step - loss: 38993.0820
Epoch 9/10
4/4 [==============================] - 0s 3ms/step - loss: 39837.9961
Epoch 10/10
4/4 [==============================] - 0s 4ms/step - loss: 43657.0000
<keras.callbacks.History at 0x7f13321834d0>
plt.plot(np.arange(1, 101), model.predict(독립), label='예측값')
plt.plot(np.arange(1, 101), 종속, label='실제값')

plt.legend()
plt.show()
/usr/local/lib/python3.7/dist-packages/matplotlib/backends/backend_agg.py:214: RuntimeWarning: Glyph 50696 missing from current font.
  font.set_text(s, 0.0, flags=flags)
/usr/local/lib/python3.7/dist-packages/matplotlib/backends/backend_agg.py:214: RuntimeWarning: Glyph 52769 missing from current font.
  font.set_text(s, 0.0, flags=flags)
/usr/local/lib/python3.7/dist-packages/matplotlib/backends/backend_agg.py:214: RuntimeWarning: Glyph 44050 missing from current font.
  font.set_text(s, 0.0, flags=flags)
/usr/local/lib/python3.7/dist-packages/matplotlib/backends/backend_agg.py:214: RuntimeWarning: Glyph 49892 missing from current font.
  font.set_text(s, 0.0, flags=flags)
/usr/local/lib/python3.7/dist-packages/matplotlib/backends/backend_agg.py:214: RuntimeWarning: Glyph 51228 missing from current font.
  font.set_text(s, 0.0, flags=flags)
/usr/local/lib/python3.7/dist-packages/matplotlib/backends/backend_agg.py:183: RuntimeWarning: Glyph 50696 missing from current font.
  font.set_text(s, 0, flags=flags)
/usr/local/lib/python3.7/dist-packages/matplotlib/backends/backend_agg.py:183: RuntimeWarning: Glyph 52769 missing from current font.
  font.set_text(s, 0, flags=flags)
/usr/local/lib/python3.7/dist-packages/matplotlib/backends/backend_agg.py:183: RuntimeWarning: Glyph 44050 missing from current font.
  font.set_text(s, 0, flags=flags)
/usr/local/lib/python3.7/dist-packages/matplotlib/backends/backend_agg.py:183: RuntimeWarning: Glyph 49892 missing from current font.
  font.set_text(s, 0, flags=flags)
/usr/local/lib/python3.7/dist-packages/matplotlib/backends/backend_agg.py:183: RuntimeWarning: Glyph 51228 missing from current font.
  font.set_text(s, 0, flags=flags)
plt.plot(np.arange(1, 101), model.predict(독립), label='예측값')
plt.plot(np.arange(1, 101), 종속, label='실제값')

plt.legend()
plt.show()
/usr/local/lib/python3.7/dist-packages/matplotlib/backends/backend_agg.py:214: RuntimeWarning: Glyph 50696 missing from current font.
  font.set_text(s, 0.0, flags=flags)
/usr/local/lib/python3.7/dist-packages/matplotlib/backends/backend_agg.py:214: RuntimeWarning: Glyph 52769 missing from current font.
  font.set_text(s, 0.0, flags=flags)
/usr/local/lib/python3.7/dist-packages/matplotlib/backends/backend_agg.py:214: RuntimeWarning: Glyph 44050 missing from current font.
  font.set_text(s, 0.0, flags=flags)
/usr/local/lib/python3.7/dist-packages/matplotlib/backends/backend_agg.py:214: RuntimeWarning: Glyph 49892 missing from current font.
  font.set_text(s, 0.0, flags=flags)
/usr/local/lib/python3.7/dist-packages/matplotlib/backends/backend_agg.py:214: RuntimeWarning: Glyph 51228 missing from current font.
  font.set_text(s, 0.0, flags=flags)
/usr/local/lib/python3.7/dist-packages/matplotlib/backends/backend_agg.py:183: RuntimeWarning: Glyph 50696 missing from current font.
  font.set_text(s, 0, flags=flags)
/usr/local/lib/python3.7/dist-packages/matplotlib/backends/backend_agg.py:183: RuntimeWarning: Glyph 52769 missing from current font.
  font.set_text(s, 0, flags=flags)
/usr/local/lib/python3.7/dist-packages/matplotlib/backends/backend_agg.py:183: RuntimeWarning: Glyph 44050 missing from current font.
  font.set_text(s, 0, flags=flags)
/usr/local/lib/python3.7/dist-packages/matplotlib/backends/backend_agg.py:183: RuntimeWarning: Glyph 49892 missing from current font.
  font.set_text(s, 0, flags=flags)
/usr/local/lib/python3.7/dist-packages/matplotlib/backends/backend_agg.py:183: RuntimeWarning: Glyph 51228 missing from current font.
  font.set_text(s, 0, flags=flags)
import tensorflow as tf

#모델 준비
X = tf.keras.layers.Input(shape=[2]) # 독립변수의 col
H = tf.keras.layers.Dense(5, activation='swish')(X) # 노드의 수는 천천히 늘려감! (2 ~ 5)
H = tf.keras.layers.Dense(5, activation='swish')(H) # 천천히 늘려감! (2 ~ 5)
H = tf.keras.layers.Dense(5, activation='swish')(H) # 천천히 늘려감! (2 ~ 5)
H = tf.keras.layers.Dense(5, activation='swish')(H) # 천천히 늘려감! (2 ~ 5)
H = tf.keras.layers.Dense(5, activation='swish')(H) # 천천히 늘려감! (2 ~ 5)
Y = tf.keras.layers.Dense(1)(H) # 종속변수의 col
model = tf.keras.models.Model(X, Y)
model.compile(loss='mse') # MSE(Mean squared error)
model.fit(독립, 종속, epochs=10000, verbose=0)
model.fit(독립, 종속, epochs=10)
Epoch 1/10
4/4 [==============================] - 0s 3ms/step - loss: 33637.1914
Epoch 2/10
4/4 [==============================] - 0s 4ms/step - loss: 32272.7559
Epoch 3/10
4/4 [==============================] - 0s 4ms/step - loss: 35613.3984
Epoch 4/10
4/4 [==============================] - 0s 4ms/step - loss: 36397.0469
Epoch 5/10
4/4 [==============================] - 0s 3ms/step - loss: 33294.0039
Epoch 6/10
4/4 [==============================] - 0s 4ms/step - loss: 31867.3379
Epoch 7/10
4/4 [==============================] - 0s 4ms/step - loss: 32319.9434
Epoch 8/10
4/4 [==============================] - 0s 3ms/step - loss: 33304.1719
Epoch 9/10
4/4 [==============================] - 0s 5ms/step - loss: 37012.2227
Epoch 10/10
4/4 [==============================] - 0s 3ms/step - loss: 31852.8457
<keras.callbacks.History at 0x7f1331efc990>
plt.plot(np.arange(1, 101), model.predict(독립), label='예측값')
plt.plot(np.arange(1, 101), 종속, label='실제값')

plt.legend()
plt.show()
/usr/local/lib/python3.7/dist-packages/matplotlib/backends/backend_agg.py:214: RuntimeWarning: Glyph 50696 missing from current font.
  font.set_text(s, 0.0, flags=flags)
/usr/local/lib/python3.7/dist-packages/matplotlib/backends/backend_agg.py:214: RuntimeWarning: Glyph 52769 missing from current font.
  font.set_text(s, 0.0, flags=flags)
/usr/local/lib/python3.7/dist-packages/matplotlib/backends/backend_agg.py:214: RuntimeWarning: Glyph 44050 missing from current font.
  font.set_text(s, 0.0, flags=flags)
/usr/local/lib/python3.7/dist-packages/matplotlib/backends/backend_agg.py:214: RuntimeWarning: Glyph 49892 missing from current font.
  font.set_text(s, 0.0, flags=flags)
/usr/local/lib/python3.7/dist-packages/matplotlib/backends/backend_agg.py:214: RuntimeWarning: Glyph 51228 missing from current font.
  font.set_text(s, 0.0, flags=flags)
/usr/local/lib/python3.7/dist-packages/matplotlib/backends/backend_agg.py:183: RuntimeWarning: Glyph 50696 missing from current font.
  font.set_text(s, 0, flags=flags)
/usr/local/lib/python3.7/dist-packages/matplotlib/backends/backend_agg.py:183: RuntimeWarning: Glyph 52769 missing from current font.
  font.set_text(s, 0, flags=flags)
/usr/local/lib/python3.7/dist-packages/matplotlib/backends/backend_agg.py:183: RuntimeWarning: Glyph 44050 missing from current font.
  font.set_text(s, 0, flags=flags)
/usr/local/lib/python3.7/dist-packages/matplotlib/backends/backend_agg.py:183: RuntimeWarning: Glyph 49892 missing from current font.
  font.set_text(s, 0, flags=flags)
/usr/local/lib/python3.7/dist-packages/matplotlib/backends/backend_agg.py:183: RuntimeWarning: Glyph 51228 missing from current font.
  font.set_text(s, 0, flags=flags)
import tensorflow as tf

#모델 준비
X = tf.keras.layers.Input(shape=[2]) # 독립변수의 col
H = tf.keras.layers.Dense(5, activation='swish')(X) # 노드의 수는 천천히 늘려감! (2 ~ 5)
for _ in range(10):
    H = tf.keras.layers.Dense(5, activation='swish')(H) # 천천히 늘려감! (2 ~ 5)
Y = tf.keras.layers.Dense(1)(H) # 종속변수의 col
model = tf.keras.models.Model(X, Y)
model.compile(loss='mse') # MSE(Mean squared error)
model.fit(독립, 종속, epochs=10000, verbose=0)
model.fit(독립, 종속, epochs=10)
Epoch 1/10
4/4 [==============================] - 0s 3ms/step - loss: 29421.2344
Epoch 2/10
4/4 [==============================] - 0s 3ms/step - loss: 25886.2969
Epoch 3/10
4/4 [==============================] - 0s 5ms/step - loss: 25001.6250
Epoch 4/10
4/4 [==============================] - 0s 4ms/step - loss: 22642.9609
Epoch 5/10
4/4 [==============================] - 0s 4ms/step - loss: 24440.7344
Epoch 6/10
4/4 [==============================] - 0s 4ms/step - loss: 26648.9941
Epoch 7/10
4/4 [==============================] - 0s 4ms/step - loss: 22765.5352
Epoch 8/10
4/4 [==============================] - 0s 3ms/step - loss: 23219.0391
Epoch 9/10
4/4 [==============================] - 0s 4ms/step - loss: 37749.2188
Epoch 10/10
4/4 [==============================] - 0s 4ms/step - loss: 25314.1348
<keras.callbacks.History at 0x7f1331a28890>
plt.plot(np.arange(1, 101), model.predict(독립), label='예측값')
plt.plot(np.arange(1, 101), 종속, label='실제값')

plt.legend()
plt.show()
/usr/local/lib/python3.7/dist-packages/matplotlib/backends/backend_agg.py:214: RuntimeWarning: Glyph 50696 missing from current font.
  font.set_text(s, 0.0, flags=flags)
/usr/local/lib/python3.7/dist-packages/matplotlib/backends/backend_agg.py:214: RuntimeWarning: Glyph 52769 missing from current font.
  font.set_text(s, 0.0, flags=flags)
/usr/local/lib/python3.7/dist-packages/matplotlib/backends/backend_agg.py:214: RuntimeWarning: Glyph 44050 missing from current font.
  font.set_text(s, 0.0, flags=flags)
/usr/local/lib/python3.7/dist-packages/matplotlib/backends/backend_agg.py:214: RuntimeWarning: Glyph 49892 missing from current font.
  font.set_text(s, 0.0, flags=flags)
/usr/local/lib/python3.7/dist-packages/matplotlib/backends/backend_agg.py:214: RuntimeWarning: Glyph 51228 missing from current font.
  font.set_text(s, 0.0, flags=flags)
/usr/local/lib/python3.7/dist-packages/matplotlib/backends/backend_agg.py:183: RuntimeWarning: Glyph 50696 missing from current font.
  font.set_text(s, 0, flags=flags)
/usr/local/lib/python3.7/dist-packages/matplotlib/backends/backend_agg.py:183: RuntimeWarning: Glyph 52769 missing from current font.
  font.set_text(s, 0, flags=flags)
/usr/local/lib/python3.7/dist-packages/matplotlib/backends/backend_agg.py:183: RuntimeWarning: Glyph 44050 missing from current font.
  font.set_text(s, 0, flags=flags)
/usr/local/lib/python3.7/dist-packages/matplotlib/backends/backend_agg.py:183: RuntimeWarning: Glyph 49892 missing from current font.
  font.set_text(s, 0, flags=flags)
/usr/local/lib/python3.7/dist-packages/matplotlib/backends/backend_agg.py:183: RuntimeWarning: Glyph 51228 missing from current font.
  font.set_text(s, 0, flags=flags)
  • 히든레이어는 1개 ~ 4개를 쌓아보고 정확도 측정하는 것이 보통.
  • 노드는 100개 ~ 200개를 쌓아보고 정확도 측정.
  • 은닉 단위의 설계는 실무 지침이 될만한 결정적인 이론이 나오지 않음(심층학습, 제이펍, 211page)
  • CNN이나 RNN 으로 넘어가기 전 좀 더 단순한 데이터로 신경망에 대해 학습할 것을 권함.

image.png

image.png