[모두의 딥러닝] lab 10. NN, ReLu, Xavier, Dropout, and Adam
Softmax classifier for MNIST
- 이전에 했던 Softmax를 이용한 MNIST
- 784개의 입력 vector, 10개의 출력
- cross_entropy 개념
- epoch 개념
> 세줄밖에 안되는 model로 굉장한 정확도를 낸다. (나머지는 lab 07-1 참조): 90.4% 정확도
위를 개선하기 위한 여러가지 팁
NN for MNIST
- 이전에는 한 단밖에 없었음
- 좀 더 깊게 들어가는 것 > Neural Network
- 추가할 때는 주의할 것이 Weight의 크기를 구하는 것!
- 제일 마지막의 결과는 10개로 확정, 안의 단은 우리가 알아서 디자인하면 됨.
- 각 단의 입력을 layer에 맞게 설정해주면 됨.
- ReLu activation function을 사용한 예시
- 94% 정확도
초기화를 잘 하려면? > Xavier 초기화 방법
- 구글링으로 "xavier initialization tensorflow" 검색해보기!
- 약 98% 정확도
- xavier로 했을 경우, 처음부터 cost가 굉장히 낮음.
> 초기값이 잘 initialize되었다는 것을 보여준다!
Deep NN for MNIST
- 깊고 넓게 해보기
- 5단까지 늘리고, 단을 나누는 것을 2배로 늘리자(256 -> 512).
> 넓고 깊게!
- 결과는 이전보다 정확도가 떨어짐.
이유?) 제각각의 요인이 있겠지만, 이 예시에서는 Overfitting 되었을 것임
> NN이 깊어지면 잘 발생하는 문제. 학습으로 주어진 값들을 너무 잘 기억해버려서 새 테스트 데이터셋
이 들어왔을 때는 잘 예측하지 못함
Overfitting 해결방법: Dropout for MNIST
- TensorFlow에서는 dropout 단을 하나 넣어줌으로써 구현함.
- Dropout이라는 layer가 있다고 가정적으로 생각.
- 몇 %를 keep할 것인가 > keep_prob: 전체 중 몇%를 keep할 것인가를 정해줌
train: 0.5 ~ 0.7
testing: 1.0 무조건!
> keep_prob을 placeholder로 정하고, 학습할 때와 테스트할 때 feed_dict로 값을 각각 넘겨주기
Optimizers
- 이전에 사용했던 Gradient Descent Optimizer뿐만 아니라 여러 optimizer들이 있음
ADAM: a method for stochastic optimization
: 아담 optimizer가 상당히 좋은 결과를 만들어낸다.
- Gradient Descent Optimizer을 사용했던 방식과 똑같이 쓰면 된다. (이름만 바꿔 사용)
요약
1. Softmax(1단) VS Neural Nets(여러 단) for MNIST : 90 to 94.5%
2. Xavier initialization: 97.8%
3. Deep Neural Nets with Dropout: 98%
4. Adam and other optimizers
> 연습문제: Batch Normalization(입력값 normalize시키기)
'인공지능' 카테고리의 다른 글
Violence Detection 실습 (0) | 2019.08.05 |
---|---|
Tensorflow Object Detection API with custom training data (0) | 2019.07.05 |
[모두의 딥러닝] lec 10-4. 레고처럼 넷트웍 모듈을 마음껏 쌓아보기 (0) | 2019.05.27 |
[모두의 딥러닝] lec 10-3. NN dropout and model ensemble (0) | 2019.05.27 |
[모두의 딥러닝] lec 10-2. Initialize weights 잘 해보자 (0) | 2019.05.13 |
댓글