TensorFlow 에서 회귀(regression)의 문제 모델링하기
import tensorflow as tf
from tensorflow import keras
from keras.models import Sequential
from keras.layers import Dense
위 코드는 TensorFlow 에서 모델링할 때 필요한 라이브러리들이다.
데이터 전처리 (Data Preprocessing) 과정이 끝난 데이터는
이제 학습을 위해 모델링을 해주어야한다.
ANN(Artificial Neural Network, 인공신경망) 에서의 모델링이란?
input layer, hidden layer, output layer 등 각각의 노드들이 이루고 있는 계층들의 구조를 말한다.
이를 Sequential 이라 한다.
당연하게도
분류(classifier)에서의 모델링과
회귀(regression)에서의 모델링과는 약간의 차이가 있으므로 그 차이점에 대해 알아보자.
이번 포스팅엔 회귀(regression)에서의 모델링을 알아보자.
def build_model():
model = Sequential()
model.add(Dense(units=5, activation='relu', input_shape= (5, )))
model.add(Dense(units=25, activation='relu'))
model.add(Dense(units=10, activation='relu'))
# 결과로 숫자가 나오면 되니 regression에서는 'linear'로 한다.
model.add(Dense(units=1, activation='linear'))
model.compile(optimizer='adam', loss= 'mse')
return model
모델링(신경망 구성) 하는 것을 하나의 함수로 만들어준 것이다.
순서는 다음과 같다.
1. 맨 처음 신경망의 큰 틀인 Sequential 을 만들어준다.
2. 첫 hidden layer를 만든다.
units 는 노드(신경망의 뉴런)의 개수이며,
Activation 은 노드에서 값이 출력될 때 연산하는 activation Function을 뜻한다.
제일 먼저 만드는 layer 에는 input_shape라는 파라미터 값을 통해 입력받는 데이터의 개수를 설정해준다.
데이터의 개수는 X_train 등 학습용 데이터의 컬럼 개수를 보면 알 수 있다.
3. 중간 hidden layer들을 만든다.
이는 유저의 개인 재량으로 결정하며 인공지능의 상황에 따라 변경하게 될수도 있다.
4. 회귀의 문제에서 아주 중요한 부분이다.
activation Function으로 linear 를 사용한다.
5. 다음으로 compile 과정을 거쳐야 한다.
오차를 줄이는 방법은 'adam' 등 다른 것을 사용해도 되지만
0과 1로 결과가 나오는 문제에서
오차를 계산할 때에는 loss 파라미터에 'mse' ( mean squared error) 를 입력해준다.
위 코드들을 실행했을 때 나오는 Sequential 의 구조이다.
이제 이 신경망을 가지고
model.fit(X_train, y_train, epochs = 20, batch_size= 10)
fit 함수로 학습을 진행하면 된다.
선형 회귀 문제 특성상 정확도를 직접 받아보기는 힘든데.
그 땐 차트를 그려보거나 MSE를 구해서 정확도를 파악할 수 있다.
history의 loss 컬럼을 통해 오차가 적어지는 것도 확인할 수 있다.