NN의 MNIST 98% 이상 올리기 강좌를 정리한다.
일반 Softmax MNIST 예
softmax에 대한 개념 정리를 참조하면 Softmax는 결과 Label을 모두 합치면 1되도록 0과 1사이의 값으로 나오게 한다. 확률(Probability) 의미
일반 Softmax를 NN으로 구성하기
정확도: 0.9455
Neural Network Layer를 3단 정도 구성해 준다. 이때 ReLU를 사용한다.
Xavier사용한 초기화 잘 하기
정확도: 0.9783
샤비어(Xavier)를 적용한다. 구글 검색 "Xavier Initialization Tensorflow" . Xavier를 쓰면 처음부터 Cost값이 상당히 낮다. 이것은 초기값을 잘 썼음을 나타낸다.
모델은 바꾸지 않고 초기값만 바꾸었을 때의 비교
깊고 넓게 적용할 때 Dropout 사용하기
정확도: 0.9804
깊게 사용시 중간의 값을 더 많이 쓴다. Overfitting이 발생할 수 있으므로 Dropout으로 이를 예방한다. 한 Layer에 대해 Dropout을 한다.
dropout하지 않고 깊고 넓게 했을 때, 정확도가 0.9783보다 낮게 나온다. 네트워크가 깊어지면 학습된 것을 모두 기억해서 나중에 overfitting을 일을킬 수 있다. 이경우는 정확도가 낮아져서 Overfitting된 것이다.
dropout시 몇 %를 Keep (학습 내용을 기억)할 것인지 - keep probability - 은 0.5~0.7 을 사용한다. 단, 테스트할 때는 1을 사용한다.
Adam Optimizer 사용하기
기존은 GradientDescentOptimizer를 사용하였다. 여러 종류의 Optimizer가 있다.
ADAM이 Cost를 빠르게 감소시켜준다.
공식
결론
최근은 입력값을 Normalization을 잘 하는 것도 사용한다.
CNN을 사용하게 되면 Accuracy가 99%까지 올라간다.
참조
'Deep Learning > NN by Sung Kim' 카테고리의 다른 글
[CNN] Tensorflow CNN 기본 (0) | 2018.07.11 |
---|---|
[CNN] Convolution Neural Network (0) | 2018.07.10 |
[Neural Network] 종류 (0) | 2018.07.09 |
[Deep Learning] Dropout 과 앙상블 (0) | 2018.07.09 |
[Deep Learning] Weight 초기화 잘하기 (0) | 2018.07.09 |