2021년 여름방학 무료특강 손에 잡히는 딥러닝
2021년 여름방학 무료특강 손에 잡히는 딥러닝
!sudo apt install -y fonts-nanum*
!sudo fc-cache -fv
!rm ~/.cache/matplotlib -rf
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()
독립 = pd.DataFrame(np.arange(1, 101))
종속 = pd.DataFrame(주가)
독립.shape, 종속.shape
import tensorflow as tf
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)
model.predict([50])
model.predict([40])
model.predict(독립)
model.get_weights()
2.072317 * 50 + 22.033388
model.predict([50])
plt.plot(np.arange(1, 101), 주가)
plt.plot(np.arange(1, 101), 2.07 * np.arange(1, 101) + 22.03)
plt.show()
오차값 = 종속 - model.predict(독립)
오차값
오차값의제곱 = 오차값 ** 2
오차값의제곱
(오차값의제곱.sum())/100 ## MSE
- 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())
int(독립.sum() * 종속.sum())
int(100 * (독립 ** 2).sum())
int(독립.sum() * 독립.sum())
분자 = int(100 * 두수의곱.sum()) - int(독립.sum() * 종속.sum())
분모 = int(100 * (독립 ** 2).sum()) - int(독립.sum() * 독립.sum())
분자 / 분모
model.get_weights()
${\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())
분자 / 분모
매출액 = [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()
독립 = pd.DataFrame({
'매출액' : 매출액,
'광고액' : 광고액
})
종속 = pd.DataFrame({
'순익' : 순익
})
독립.shape, 종속.shape
독립
X = tf.keras.layers.Input(shape=[2]) # 독립변수의 col
## 1. 히든 레이어의 노드(뉴런) 수는 2개부터 5개까지 점차 늘려보고 그래프를 확인해보세요.
H = tf.keras.layers.Dense(2, activation='swish')(X)
## 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)
model.get_weights()
model.predict([[10, 4]])
model.predict(독립)
종속
plt.plot(np.arange(1, 7), model.predict(독립), label='예측값')
plt.plot(np.arange(1, 7), 종속, label='실제값')
plt.legend()
plt.show()
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()
독립 = pd.DataFrame({
'계절성' : 계절성,
'광고액' : 광고액
})
종속 = pd.DataFrame({
'매출액' : 매출액
})
독립.shape, 종속.shape
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)
plt.plot(np.arange(1, 101), model.predict(독립), label='예측값')
plt.plot(np.arange(1, 101), 종속, label='실제값')
plt.legend()
plt.show()
plt.plot(np.arange(1, 101), model.predict(독립), label='예측값')
plt.plot(np.arange(1, 101), 종속, label='실제값')
plt.legend()
plt.show()
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)
plt.plot(np.arange(1, 101), model.predict(독립), label='예측값')
plt.plot(np.arange(1, 101), 종속, label='실제값')
plt.legend()
plt.show()
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)
plt.plot(np.arange(1, 101), model.predict(독립), label='예측값')
plt.plot(np.arange(1, 101), 종속, label='실제값')
plt.legend()
plt.show()
- 히든레이어는 1개 ~ 4개를 쌓아보고 정확도 측정하는 것이 보통.
- 노드는 100개 ~ 200개를 쌓아보고 정확도 측정.
- CNN이나 RNN 으로 넘어가기 전 좀 더 단순한 데이터로 신경망에 대해 학습할 것을 권함.