도순씨의 코딩일지

딥러닝 :: 모델 설계하기, 교차 엔트로피, 모델 실행하기 본문

𝐂𝐎𝐌𝐏𝐔𝐓𝐄𝐑 𝐒𝐂𝐈𝐄𝐍𝐂𝐄/𝐃𝐄𝐄𝐏 𝐋𝐄𝐀𝐑𝐍𝐈𝐍𝐆

딥러닝 :: 모델 설계하기, 교차 엔트로피, 모델 실행하기

도순씨 2020. 8. 6. 16:20

@ 아래 링크에 있는 코드를 사용합니다.

https://dosundosun.tistory.com/10

 

딥러닝 :: 폐암 수술 환자의 생존률 예측하기

폐암 수술 환자의 생존율을 예측하는 모델을 간단하게 실행해보도록 하자. @ 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 # 필요한 keras 함수 impo..

dosundosun.tistory.com

 

모델 설계하기


딥러닝의 모델을 설정하고 구동하는 부분은 모두 model이라는 함수를 선언하며 시작된다.

 

1
model = Sequential()
cs

이 부분은 딥러닝이 구조를 짜고 층을 설정하는 부분이다.

 

model.compile() 부분은 위에서 만든 모델을 컴파일 하는 부분이며 model.fit()으로 시작하는 부분은 모델을 수행한다. model.fit()으로 시작하는 부분은 모델을 실제로 수행하는 부분이다.

 

1
2
3
model = Sequential()
model.add(Dense(30, input_dim = 17, activation = 'relu'))
model.add(Dense(1, activation = 'sigmoid'))
cs

먼저 딥러닝의 구조를 짜고 층을 설정하는 부분을 살펴보면 다음과 같다.

Sequential()은 퍼셉트론 층을 차곡차곡 추가하는 형태이다. model.add()라는 라인이 추가하면 새로운 층이 만들어진다. 맨 마지막에 적혀진 층은 '출력층'의 역할을 하고 나머지는 모두 '은닉층'의 역할을 한다. 따라서 두 번째 라인은 은닉층의 역할을 하고 세 번째 라인은 출력층의 역할을 한다.

두 번째 라인을 더 자세하게 살펴보자. Dense는 해당 층에 몇개의 노드를 만들 것인지를 숫자로 작성해준다. input_dim은 입력 데이터로부터 몇 개의 값이 들어올지를 정한다.

keras는 입력층을 따로 만들지 않는다. 첫 번째 층에 input_dim을 작성해줌으로써 첫 번째 Dense가 입력층 + 은닉충의 역할을 겸한다. 위의 코드에 의하면 폐암 수술 환자의 생존 여부 데이터에는 17개의 값이 있고, 이 값을 은닉층의 30개 노드로 보낸다는 것을 알 수 있다. activation에는 활성화 함수를 적어주면 된다.

세 번째 라인은 마지막층이므로 출력층이다. 하나의 값을 도출해내야 하므로 출력층의 노드 수는 1개이다. 그리고 출력층에서도 활성화 함수가 필요하다.

 

다음으로 모델 컴파일 부분을 살펴보자.

1
model.compile(loss = 'mean_squared_error', optimizer = 'adam', metrics = ['accuracy']
cs

model.compile 부분은 앞서 지정한 모델이 효과적으로 구현될 수 있도록 여러가지 환경설정을 한다.여기서 mean_squared_error는 평균 제곱 오차 함수이다. 경우에 따라서는 오차 함수를 바뀔 때 더 좋은 성능을 나타내는 경우가 있다. 오차 함수에는 평균 제곱 오차 계열의 함수 외에도 교차 엔트로피 계열의 함수가 있다. 평균 제곱 오차는 수렴하기까지 속도가 많이 걸린다는 단점이 있다. 교차 엔트로피는 출력 값에 로그를 취해서 오차가 커지면 수렴 속도가 빨라지고 오차가 작아지면 속도가 감소하게끔 만든다.

 

 

교차 엔트로피


교차 엔트로피는 분류 문제에 많이 사용된다. 특별히 예측 값이 참과 거짓 둘 중 하나인 형식일 때는 binary_crossentropy(이항 교차 엔트로피)를 사용한다. 이항 교차 엔트로피를 사용하기 위해서는 loss 부분에 'binary_crossentropy'를 입력하면 된다. 대표적인 오차 함수는 다음과 같다.

 

* 실제 값을 yt, 예측 값을 yo라고 가정할 때

평균 제곱 계열

mean_squared_error

평균 제곱 오차
mean(square(yt-yo))

mean_absolute_error

평균 절대 오차 (실제 값과 예측 값 차이의 절댓값 평균)
mean(abs(yt-yo))

mean_absolute_percentage_error

평균 절대 백분율 오차(절댓값 오차를 절댓값으로 나눈 후 평균)
mean(abs(yt-yo) / abs(yt))

mean_squared_logarithmic_error

평균 제곱 로그 오차(실제 값과 예측 값에 로그를 적용한 값의 차이를 제곱한 값의 평균)
mean(square((log(yo)+1) - (log(yt) + 1)))

교차 엔트로피 계열

categorical_crossentropy

범주형 교차 엔트로피(일반적인 분류)

binary_crossentropy

이항 교차 엔트로피(두 개의 클래스 중에서 예측할 때)

 

 

 

모델 실행하기


정해진 환경을 주어진 데이터를 불러 실행시킬 때 사용하는 함수가 model.fit()이다.

1
model.fit(X, Y, epochs = 30, batch_size = 10)
cs

epoch = 30은 각 샘플이 처음부터 끝까지 30번 재사용될 때 까지 실행을 반복하는 것이다.

batch_size는 샘플을 한 번에 몇 개씩 처리할지를 정하는 부분이다. batch_size가 너무 크면 학습 속도가 느려지고, 너무 작으면 각 실행 값에 편차가 생겨서 전체 결괏값이 불안정해질 수 있다. 

 

* 출처

조태호, 모두의 딥러닝(2017), 길벗

Comments