본문 바로가기
데이터 과학 관련 스터디/모두의 딥러닝

[모두의 딥러닝] 10장 모델 설계하기

by inhovation97 2020. 7. 10.

드디어 이론은 끝났습니다!

10장부터는 데이터를 직접 다뤄보고 여러가지 딥러닝 알고리즘을 설계하는 단계가 시작됩니다!

 

10장은 그 중에서도 아주 기본적으로 케라스에서 제공하는 함수를 이용해 딥러닝을 구현합니다.

코드도 너무 쉬워서 10장까지 따라오면 큰 문제없이 따라하실 수 있습니다.

 

<모델 설계하기>

# 필요한 모듈 import
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
import numpy as np
import tensorflow as tf
import pandas as pd

# 실행할 때마다 같은 결과를 출력하기 위해 설정하는 부분
np.random.seed(3)
tf.random.set_seed(3)

# 준비된 수술 환자 데이터를 불러옴
Data_set = np.loadtxt("../deeplearning/dataset/ThoraricSurgery.csv", delimiter=',')

# 환자의 기록과 수술 결과를 따로 저장
X = Data_set[:,0:17]
Y = Data_set[:,17]

# 딥러닝 구조를 결정(모델을 설정하고 실행하는 부분)
model = Sequential()
model.add(Dense(30, input_dim = 17, activation='relu'))
model.add(Dense(1, activation='sigmoid'))

# 딥러닝 실행

model.compile(loss='mean_squared_error', optimizer='adam',metrics=['accuracy'])    
model.fit(X,Y,epochs=100, batch_size=10) # 100번 돌리는데 1번 돌릴때 샘플을 10개씪 끊어서 집어 넣는다

우선 모델을 만들기 위해서는 학습을 위한 train데이터와 그 train데이터의 목적함수를 기반으로 경사하강법을 통해 오차를 줄여야하므로 레이블 데이터인 Y를 따로 저장해둡니다.

 

모델 구현Sequential 함수를 통해 구현하고, 설계를 시작합니다.

 

은닉층 설계를 먼저 합니다. add를 통해 은닉층은 30개를 두고 입력 변수(이용할 column의 수) 17개를 입력, 활성화 함수는 앞서 배웠던 렐루 함수를 지정해줍니다. (여기에는 입력층도 포합됩니다.)

출력층 설계는 1개의 층으로 시그모이드 함수로 지정해주면 됩니다.

 

모델 컴파일 부분은 앞서 설계한 모델을 효과적으로 구현될 수 있도록 여러가지 환경을 설정해주는 부분입니다.

loss는 오차 함수의 종류, optimizer는 앞서 배운 경사 하강법의 진행 방법, metrics는 정확도를 위한 지표를 설정해줍니다. 컴파일 부분은 상황에 맞게 사용할수록 모델의 정확도의 차이가 많이 날 수 있습니다.

특히 오차 함수가 영향력이 좀 클 수 있습니다.

모델이 수치 예측 모델인가 분류 모델인가 이항 분류인가, 다항 분류인가 등등의 관점에서 Accuracy가 변할 수 있습니다.

이제 모델 실행의 단계입니다. fit 함수에 train데이터와 레이블 데이터를 넣습니다.

여기서 epochs는 학습을 할때, 모든 데이터 샘플을 100번 돌려서 실행하라는 의미입니다.

batch_size는 데이터 샘플을 1번 돌릴때, 10개의 샘플씩 끊어서 돌리라는 의미입니다. 너무 큰 수 를 넣으면 학습 속도가 느려지지만, 또 너무 작은 수를 넣으면 각 실행값의 편차가 생겨서 전체 결괏값이 불안정해질 수 있습니다.

 

10장은 정말 간단한 데이터로 간단한 인공신경망 모델을 구현해봤습니다.

위 데이터가 이항 분류 문제이기 때문에 오차 함수도 binary_crossentropy로 바꾸고, 여러 옵션들을 바꿔서 돌려봤는데  Accuracy는큰 차이가 없었습니다.

보통 딥러닝은 Sequence가 긴 시계열 데이터에서 높은 성능을 발휘하기 때문에 데이터가 너무 단순한 탓인것 같습니다.

아! 그리고 epochs를 늘리면 늘릴수록 Accuracy는 계속해서 상승합니다. 이는 예측력이 좋아지는 것이 아니라 오히려 떨어지는 overfitting이라는 명칭의 문제인데 이는 13장에서 다루니 알아두시기 바랍니다.

 

이번 10장 포스팅은 여기서 마칩니다.

댓글