도순씨의 코딩일지
딥러닝 :: 모델 설계하기, 교차 엔트로피, 모델 실행하기 본문
@ 아래 링크에 있는 코드를 사용합니다.
https://dosundosun.tistory.com/10
모델 설계하기
딥러닝의 모델을 설정하고 구동하는 부분은 모두 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_absolute_error |
평균 절대 오차 (실제 값과 예측 값 차이의 절댓값 평균) |
|
mean_absolute_percentage_error |
평균 절대 백분율 오차(절댓값 오차를 절댓값으로 나눈 후 평균) |
|
mean_squared_logarithmic_error |
평균 제곱 로그 오차(실제 값과 예측 값에 로그를 적용한 값의 차이를 제곱한 값의 평균) |
|
교차 엔트로피 계열 |
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), 길벗
'𝐂𝐎𝐌𝐏𝐔𝐓𝐄𝐑 𝐒𝐂𝐈𝐄𝐍𝐂𝐄 > 𝐃𝐄𝐄𝐏 𝐋𝐄𝐀𝐑𝐍𝐈𝐍𝐆' 카테고리의 다른 글
딥러닝 :: 다중 분류 문제, 상관도 그래프, 원핫코딩 (0) | 2020.08.10 |
---|---|
딥러닝 :: 데이터 가공하기, 그래프로 표현하기 (0) | 2020.08.10 |
딥러닝 :: 오차 역전파, 활성화 함수, 고급 경사 하강법 (0) | 2020.08.06 |
딥러닝 :: [논문분석] 김정미 외 1인, Word2vec을 활용한 RNN기반의 문서 분류에 관한 연구 (0) | 2020.08.06 |
딥러닝 :: 로지스틱 회귀, 퍼셉트론, 다층 퍼셉트론 (0) | 2020.08.06 |