1. 모델의 정의
ex) 폐암 수술 환자의 생존율 예측하기
Code)
# 딥러닝을 구동하는 데 필요한 케라스 함수를 불러옵니다.
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
# 필요한 라이브러리를 불러옵니다.
import numpy as np
import tensorflow as tf
# 실행할 때마다 같은 결과를 출력하기 위해 설정하는 부분입니다.
np.random.seed(3)
tf.random.set_seed(3)
# 준비된 수술 환자 데이터를 불러들입니다.
Data_set = np.loadtxt("../dataset/ThoraricSurgery.csv", delimiter=",")
# 환자의 기록과 수술 결과를 X와 Y로 구분하여 저장합니다.
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='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(X, Y, epochs=100, batch_size=10)
- 딥러닝의 모델을 설정하고 구동하는 부분은 model이라는 함수를 선언하며 시작
- Sequential()
- 딥러닝의 구조를 짜고 층을 설정하는 부분
- compile()
- 위에서 정해진 모델을 컴퓨터가 알아들을 수 있게끔 컴파일 하는 부분
- fit()
- 모델을 실제로 수행하는 부분
2. 입력층, 은닉층, 출력층
딥러닝의 구조를 짜고 층을 설정하는 부분
# 딥러닝 구조를 결정합니다(모델을 설정하고 실행하는 부분입니다).
model = Sequential()
model.add(Dense(30, input_dim=17, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
- Sequential() 함수를 model로 선언해 놓고 add()하면 새로운 층이 생성
- 예제에서는 2개의 층을 생성
- 맨 마지막 층은 결과를 출력하는 출력층이 되고, 나머지는 모두 은닉층
- add()를 통해 새 층을 만들고 Dense()를 통해 구체적으로 구조 결정

model.add(Dense(30, input_dim=17, activation='relu'))
- 노드 30개 생성
- input_dim
- 은닉층 + 입력층의 역할을 겸함
- 즉 데이터에서 17개의 값을 받아 은닉층의 30개 노드로 전달
- activation
- 은닉층의 각 노드는 17개 입력 값에서 임의의 가중치를 가지고 각 노드로 전송되어 활성화 함수를 만남
- 우리가 원하는 활성화 함수를 적어줌
- 예제에서는 relu함수를 활성화 함수로 사용
- 활성화 함수를 거친 결과값이 출력층으로 전달
model.add(Dense(1, activation='sigmoid'))
- 출력값을 하나로 정해야 하므로 출력층의 노드의 수는 1
- activation
- 노드에서 입력받은 값이 활성화 함수를 거쳐 최종 출력
- 예제에서는 sigmoid함수 사용
3. 모델 컴파일
model.compile(loss='binary_crossentropy', optimizer='adam', metrics= ['accuracy'])
- loss
- 어떤 오차 함수를 사용할 지 결정
- 예제에서는 이항 교차 엔트로피 사용
- optimizer
- 최적화를 위한 방법 결정
- 예제에서는 Adam사용
- matrices
- 모델이 컴파일될 때 모델 수행 결과를 나타내게끔 설정
- 과적합(overfitting) 문제를 방지하는 기능
4. 교차 엔트로피
- 예측 값이 참과 거짓 둘 중 하나인 형식일 때, binary_crossentropy(이항 교차 엔트로피) 사용
- 주로 분류 문제에서 많이 사용
평균 제곱 계열 | mean_squared_error | 평균 제곱 오차 계산: mean(square(yt - yo)) |
mean_absolute_error | 평균 절대 오차(실제 값과 예측 값 차이의 절댓값 평균) 계산: mean(abs(yt - yo)) |
|
mean_absolute_percentage_error | 평균 절대 백분율 오차(절댓값 오차를 절댓값으로 나눈 후 평균) 계산: mean(abs(yt - yo)/abs(yt)) (단, 분모 ≠ 0) |
|
mean_squared_logarithmic_error | 평균 제곱 로그 오차(실제 값과 예측 값에 로그를 적용한 값의 차이를 제곱한 값의 평균) 계산: mean(square((log(yo) + 1) - (log(yt) + 1))) |
|
교차 엔트로피 계열 (다항 분류, 이항 분류) |
categorical_crossentropy | 범주형 교차 엔트로피(다항 분류, 여럿 중 하나를 예측할 때) |
binary_crossentropy | 이항 교차 엔트로피(이항 분류, 둘 중 하나를 예측할 때) |
5. 모델 실행하기
model.fit(X, Y, epochs=100, batch_size=10)
- fit()
- 컴파일 단계에서 정해진 환경을 주어진 데이터를 불러 실행시킬 때 사용되는 함수
- epoch(에포크)
- 반복 횟수
- 예제에서는 100번 반복하라는 의미
- batch_size
- 샘플을 한 번에 몇 개씩 처리할지를 정하는 부분
- 예제에서는 10개씩 끊어서 처리하라는 의미
- bath_size 값이 너무 크면 학습 속도가 느려지고, 너무 작으면 각 실행 값의 편차가 생겨 전체 결과값이 불안정해질 수 있음
→ 메모리가 감당할 만큼의 batch_size로 설정하는 것이 중요
'ML > 모두의 딥러닝' 카테고리의 다른 글
12장) 다중 분류 문제 해결하기 (0) | 2023.07.11 |
---|---|
11장) 데이터 다루기 (0) | 2023.07.11 |
9장) 신경망에서 딥러닝으로 (0) | 2023.07.10 |
8장) 오차 역전파 (0) | 2023.07.10 |
7장) 다층 퍼셉트론 (0) | 2023.07.10 |