반응형
import matplotlib.pyplot as plt
import numpy as np
from keras.layers import *
from keras.utils import *
from keras.models import *
from collections import Counter
%matplotlib inline
우선 필요한 라이브러리들을 선언합니다. 만약 설치되어 있지 않다면 설치를 진행해주세요.
x = np.random.uniform(-np.pi, np.pi, 500)
y = np.random.uniform(-1, 1, 500)
X = np.asarray([[x[i], y[i]] for i in range(500)])
sine = np.sin(x)
Y = sine < X[:, 1]
plt.scatter(x, sine)
plt.scatter(X[:,0][Y == 0], X[:,1][Y == 0])
plt.scatter(X[:,0][Y == 1], X[:,1][Y == 1])
임의의 값들을 생성하였습니다. 그다음 대표적인 사인함수로 이 해당 값들을 라벨링해줍니다. 사인함수보다 크다면 True을 붙여주고, 사인함수보다 작다면 False을 붙여주었습니다. 해당 값을 그래프로 표현하면 다음과 같이 출력됩니다.
Y = to_categorical(Y)
print(Y)
"""
[[[0. 1.]
[1. 0.]]
[[0. 1.]
[1. 0.]]
[[0. 1.]
[1. 0.]]
...
[[1. 0.]
[0. 1.]]
[[0. 1.]
[1. 0.]]
[[1. 0.]
[0. 1.]]]
"""
그 다음, 해당 값들을 가지고 훈련을 하기 위해, to_categorical 함수를 활용하였습니다. 해당 값은 각 true, false를 위와 같이 분류하여 줍니다.
model = Sequential()
model.add(Dense(10, activation='relu', input_shape=(2,)))
model.add(Dense(10, activation='relu'))
model.add(Dense(10, activation='relu'))
model.add(Dense(10, activation='relu'))
model.add(Dense(2, activation='softmax'))
model.summary()
model.compile(loss='categorical_crossentropy', optimizer='sgd')
model.fit(X,Y, epochs=200)
"""
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
dense_26 (Dense) (None, 10) 30
_________________________________________________________________
dense_27 (Dense) (None, 10) 110
_________________________________________________________________
dense_28 (Dense) (None, 10) 110
_________________________________________________________________
dense_29 (Dense) (None, 10) 110
_________________________________________________________________
dense_30 (Dense) (None, 2) 22
=================================================================
Total params: 382
Trainable params: 382
Non-trainable params: 0
_________________________________________________________________
Epoch 1/200
500/500 [==============================] - 0s 863us/step - loss: 0.7499
Epoch 2/200
500/500 [==============================] - 0s 230us/step - loss: 0.6648
Epoch 3/200
500/500 [==============================] - 0s 194us/step - loss: 0.6341
"""
이제 Dense 레이어를 사용하여 모델을 생성하고, 훈련을 진행해봅니다. activation 함수는 relu로 사용하고, 마지막은 분류를 하기 위해, softmax 함수를 사용하였습니다. 그리고 로스함수는 크로스엔트로피, 최적화함수는 sgd를 사용하였습니다.
score = model.evaluate(X, Y)
print(score)
"""
500/500 [==============================] - 0s 200us/step
0.0665539783835411
"""
이제 훈련이 잘 진행되었는지 evaluate 함수를 사용하여보았습니다. 값을 보니 잘 훈련된 것을 확인할 수 있었습니다.
a = [-2, 0] # 초록색
b = [2, 0] # 주황색
pred_x = np.vstack((a,b))
pred = model.predict(pred_x)
print(pred)
"""
[[4.5925056e-04 9.9954081e-01]
[9.9599540e-01 4.0045627e-03]]
"""
이제 직접 임의의 데이터를 만들어 실제 예측을 해보도록 하겠습니다. x의 좌표에 따라서 99.9퍼센트로 확신을 하고 있는 모델의 모습을 확인하실 수 있습니다.
머신러닝, 딥러닝이 가장 잘하는 것 중 하나인 분류 예제에 대해 알아보았습니다. 이처럼, 다양한 데이터를 일괄적으로 만들어 라벨링을 한다면, 기본적인 ai를 만들 수 있다는 것을 알게 되었습니다. 이제 실제 이미지 데이터를 활용해, 좀 더 심화된 학습을 한다면 더욱 재미있을 것 같습니다.
반응형
'SW > 인공지능' 카테고리의 다른 글
인공지능 : 영상 의학과 딥러닝과의 관계 (0) | 2019.10.28 |
---|---|
인공지능 : 약과 딥러닝의 관계 (0) | 2019.10.27 |
Hyper Parameters : 개념, 종류, 팁 (0) | 2019.10.23 |
확률적 경사 하강 : Stochastic Gradient Descent (SGD) : 개념, 원리 (0) | 2019.10.21 |
인공지능 : Software Agent : 개념, 개요, 분석 (0) | 2019.08.24 |