딥러닝 모델 설계 실습은 모두의 딥러닝에서 사용하고 있는 '폐암 수술 환자의 생존율 예측하기'를 이용하여 진행합니다.
예제 코드
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
import numpy as np
import os
# 깃허브에서 데이터 가져오기
print os.system("git clone https://github.com/taehojo/data.git")
Data_set = np.loadtxt("./data/ThoraricSurgery3.csv", delimiter=",")
X = Data_set[:,0:16] # 환자의 진찰 기록
y = Data_set[:,16] # 수술 1년 후 사망/생존 여부
# 딥러닝 모델의 구조 결정
model = Sequential()
model.add(Dense(30, input_dim=16, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
# 딥러닝 모델을 실행
model.compile(loss='binary_crossentropy', optimizer='adam',
metrics=['accuracy'])
history = model.fit(X, y, epochs=5, batch_size=16)
우선 딥러닝 모델을 설계하기 위해 먼저 tensorflow 라이브러리 안에 있는 keras API에 있는 함수를 사용합니다.
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
다음과 같이 keras API의 함수들을 이용하여 딥러닝 모델의 구조와 층 등을 설정합니다.
model = Sequential()
: keras를 이용하여 모델을 선언하는 부분
model.add(Dense())
: 모델에 층을 추가하는 부분
model.compile()
: 모델을 컴퓨터 언어로 컴파일하는 부분
model.fit()
: 학습을 실행하는 부분
입력층, 은닉층, 출력층을 만들어나가는 부분은 다음과 같습니다.
model = Sequential()
model.add(Dense(30, input_dim=16, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
Sequential()
는 keras에서 쉽게 층 구조를 구현할 수 있도록 도와주는 함수입니다.model.add()
는 층을 추가하는 함수입니다.add()
를 이용하여 추가하는 층은 Dense()
함수에 의해 구체적인 구조가 결정됩니다.
Dense(30, input_dim=16, activation='relu')
input_dim=16
은 가져올 입력 데이터의 속성 수를 의미합니다.activation='relu'
는 활성화 함수를 지정하는 부분입니다. 여기서는 ReLU 함수를 활성화 함수로 사용합니다. Dense(1, activation='sigmoid')
아래 코드는 지정한 모델이 효과적으로 구현될 수 있도록 여러 설정을 하여 컴파일하는 부분입니다.
model.compile(loss='binary_crossentropy', optimizer='adam',
metrics=['accuracy'])
loss='binary_crossentropy'
이 부분은 손실 함수를 정하는 부분입니다. 예제에서는 사망과 생존 둘 중 하나의 결과만 있으므로 앞서 다뤘던 교차 엔트로피 오차 함수를 선택하였습니다.
대표적인 손실함수
loss | 이름 | 내용 |
---|---|---|
mean_squared_error | 평균 제곱 오차 | 실제 값과 예측 값 차이를 제곱한 값의 평균 |
mean_absolute_error | 평균 절대 오차 | 실제 값과 예측 값 차이의 절댓값의 평균 |
mean_absolute_percentage_error | 평균 절대 백분율 오차 | 절댓값 오차를 절댓값으로 나눈 후 평균 |
mean_squared_logarithmic_error | 평균 제곱 로그 오차 | 실제 값과 예측 값에 로그를 적용한 값의 차이를 제곱한 값의 평균 |
categorical_crossentropy | 범주형 교차 엔트로피 | 예측 결과 범주의 수가 여러 개일 때 |
binary_crossentropy | 이항 교차 엔트로피 | 예측 결과 범주의 수가 두 개일 때 |
optimizer='adam'
metrics=['accuracy']
metrics()
함수는 모델이 컴파일 될 때 모델 수행의 결과를 나타내게끔 설정하는 부분입니다. accuracy는 학습셋에 대한 정확도에 기반해 결과를 출력하라는 의미입니다.
실질적으로 모델을 실행하는 부분은 다음 코드 부분입니다.
history = model.fit(X, y, epochs=5, batch_size=16)
Reference
- 해당 글은 "모두의 딥러닝" 10장을 기반으로 작성되었습니다.