import matplotlib.pyplot as plt
import numpy as np
from keras.layers import *
from keras.models import *
from keras.utils import *
from collections import Counter
이번 포스팅에서는 딥러닝에 가장 기본적인 모델인 퍼셉트론 예제를 구현해보겠습니다. 우선 필요한 라이브러리들을 임포트합니다.
x = np.linspace(1, 10, 1000)
y = 2 * x + 1
그리고 x는 1부터 10까지 사이의 1000개의 수를 담습니다. y는 x에 2를 곱해주고 1을 더해주는 1차 방정식을 활용해서 전체 값을 담아줍니다.
print(x)
print(y)
# x 출력값
# [ 1. 1.00900901 1.01801802 1.02702703 1.03603604 1.04504505
# 1.05405405 1.06306306 1.07207207 1.08108108 1.09009009 1.0990991
# 1.10810811 1.11711712 1.12612613 1.13513514 1.14414414 1.15315315
#
# y 출력값
# [ 3. 3.01801802 3.03603604 3.05405405 3.07207207 3.09009009
# 3.10810811 3.12612613 3.14414414 3.16216216 3.18018018 3.1981982
# 3.21621622 3.23423423 3.25225225 3.27027027 3.28828829 3.30630631
그렇다면 위와 같이 값이 잘 담기는 것을 확인할 수 있습니다. 총 1000개의 데이터가 1부터 10사이에 잘 담겨있고, y도 마찬가지로 해당 수식에 맞게 값이 잘 담겨 있는 것을 확인할 수 있습니다.
model = Sequential()
model.add(Dense(1, activation='linear', input_shape=(1,)))
model.summary()
model.compile(loss='mse', optimizer='sgd')
# _________________________________________________________________
# Layer (type) Output Shape Param #
# =================================================================
# dense_11 (Dense) (None, 1) 2
# =================================================================
# Total params: 2
# Trainable params: 2
# Non-trainable params: 0
# _________________________________________________________________
간단한 모델링을 구현합니다. 출력과 인풋은 1개로 동일하기 떄문에 다음과 같이 모델링 합니다. 그리고 활성화함수는 linear를 활용하고 손실 함수와 최적화 함수는 mse, sgd를 활용합니다.
model.fit(x,y, epochs=20)
# Epoch 1/20
# 1000/1000 [==============================] - 0s 270us/step - loss: 4.9176
# Epoch 2/20
# 1000/1000 [==============================] - 0s 76us/step - loss: 0.0666
# Epoch 3/20
# 1000/1000 [==============================] - 0s 70us/step - loss: 0.0532
# Epoch 4/20
# 1000/1000 [==============================] - 0s 74us/step - loss: 0.0422
# Epoch 5/20
# 1000/1000 [==============================] - 0s 67us/step - loss: 0.0333
# Epoch 6/20
# 1000/1000 [==============================] - 0s 65us/step - loss: 0.0266
# Epoch 7/20
# 1000/1000 [==============================] - 0s 65us/step - loss: 0.0211
# Epoch 8/20
# 1000/1000 [==============================] - 0s 65us/step - loss: 0.0168
# Epoch 9/20
# 1000/1000 [==============================] - 0s 70us/step - loss: 0.0132
# Epoch 10/20
# 1000/1000 [==============================] - 0s 62us/step - loss: 0.0106
# Epoch 11/20
# 1000/1000 [==============================] - 0s 67us/step - loss: 0.0085
# Epoch 12/20
# 1000/1000 [==============================] - 0s 66us/step - loss: 0.0067
# Epoch 13/20
# 1000/1000 [==============================] - 0s 65us/step - loss: 0.0054
# Epoch 14/20
# 1000/1000 [==============================] - 0s 66us/step - loss: 0.0042
# Epoch 15/20
# 1000/1000 [==============================] - 0s 65us/step - loss: 0.0034
# Epoch 16/20
# 1000/1000 [==============================] - 0s 71us/step - loss: 0.0027
# Epoch 17/20
# 1000/1000 [==============================] - 0s 68us/step - loss: 0.0021
# Epoch 18/20
# 1000/1000 [==============================] - 0s 70us/step - loss: 0.0017
# Epoch 19/20
# 1000/1000 [==============================] - 0s 67us/step - loss: 0.0014
# Epoch 20/20
# 1000/1000 [==============================] - 0s 68us/step - loss: 0.0011
x와 y의 값을 넣어주고 20번을 훈련시켜줍니다. 훈련은 다음과 같이 잘 진행되는 것을 확인할 수 있습니다.
pred_x = []
pred_x = np.append(pred_x, 12)
pred_x = np.append(pred_x, 14)
pred_y = model.predict(pred_x)
훈련은 마무리 되어 있고, 값이 잘 나오는지 확인해 보겠습니다. 우선 pred_x 변수에 12, 14의 값을 담아줍니다. 그다음 model에 해당 값에 따른 예측값을 pred_y에 담아봅니다.
plt.scatter(pred_x, pred_y)
plt.plot(x, y)
plt.show()
model.get_weights()
그래프에 해당 값들을 표현해 보겠습니다. 우선 예측값 12, 14를 점으로 찍어봅니다. 그리고 이전에 담은 x, y의 값들도 그래프에 표현하였습니다. 그래프를 보시면, 주어진 값에 따라 예측을 잘 하고 있다는 것을 확인할 수 있습니다. 비선형적인 문제 역시도 이러한 방식을 중첩하여 활용하는 것이 바로 딥러닝의 기초라고 할 수 있습니다. 앞으로 다양한 예제들을 활용해 보도록 하겠습니다.
'SW > Python' 카테고리의 다른 글
Python : 네이버 실시간 검색어 엑셀로 저장하기 (0) | 2019.10.14 |
---|---|
Python : 가장 빠른 JSON 라이브러리 선택 방법 (0) | 2019.10.06 |
파이썬 : 자연어 처리, 데이터 마이닝 통계 플랫폼 추천, 종류 (0) | 2019.09.15 |
머신 러닝 : 파이썬 플랫폼 종류 및 소개 (0) | 2019.09.14 |
데이터 과학을 위한 파이썬 핵심 라이브러리 : 종류, 추천, 기능 (0) | 2019.09.13 |