2부 — 그래서 어떻게 쓰면되지?
.
앞선 스터디에서 CNN 은 NN에 Convolution 작업을 선행한 것이라고 했습니다.
.
Convolution 이란 필터링을 하는 것으로 우리는 원하는 특징을 얻기 위해서 필터의 종류를 직접 정해줍니다.
.
(아래 그림의 [(4, 0, 0), (0, 0, 0), (0, 0, -4)]는 사람이 정해준 것입니다.)
Convolution Kernel or mask는 사람이 정해주는 것이었습니다.
.
그런데 놀랍게도 CNN은 이것 마저도 학습합니다.
.
보통 데이터에서 원하는 특징을 뽑아내기 위해서는 사람이 직접 처리를 해줘야했으나
.
데이터를 넣고 머신러닝으로 학습시키면 그 특징 마저도 학습하는 것입니다.
.
그러면 우리가 해줘야할 것은 무엇일까요?
.
1.우리는 Neural Network의 hidden layer의 크기를 정하듯이 마찬가지로 convolution layer의 크기를 정해줘야 합니다.
.
2.이미지의 특성상 매우 많은 픽셀이 존재하고 feature 또한 많으므로 원활한 학습을 위하여 feature를 줄이는 subsampling을 해야 합니다.
.
이 부분에 대한 내용은 매우 방대하고 수학,영상처리의 영역이므로 영상 링크로 대신하겠습니다.(매우 좋은 한글 강의입니다.)
https://www.youtube.com/watch?v=Em63mknbtWo&index=31&list=PLlMkM4tgfjnLSOjrEJN31gZATbcj_MpUm
Sung Kim 님의 명강의
.
그리고 오늘의 예제는 역시 MNIST를 CNN으로 분류할 것입니다.
만능 MNIST
.
예제 코드는 한줄 한줄 한글 주석을 달았기에 읽으시면서 이해하시면 편할 겁니다.(흐름을 이해해주세요!!)
.
( MNIST_CNN.py > setting: python 3.5, tensorflow, numpy)
proauto/ML_Practice ML_Practice -Python(with Tensorflow)github.com
(참고로 CPU로 돌린다면 매우 오래 걸릴것입니다…)
.
2개의 convolution layer를 쓰고 2개의 pooling layer를 사용하여
98.44%의 정확도를 보였습니다.
200개 중에 1개 틀리는 확률
.
여기서 Overfitting을 막기 위한 Drop Out을 추가하고 대략 20000번 정도 학습을 시키면 정확도가 99.2%가 나온다고 합니다!!
Deep MNIST for Experts TensorFlow is a powerful library for doing large-scale numerical computation. One of the tasks at which it excels is…www.tensorflow.org
.
이 정도면 정확도가 매우 높다고 말할 수 있겠지요??
.
매우 복잡한 이미지 처리도 컴퓨팅 성능이 허락한다면 이런 고성능을 낼 수 있기에 영상 분석은딥러닝에 의해 비약적으로 성장한 분야입니다.
.
이렇게 CNN에 대한 이야기를 끝내고 다음에는 순차적인 정보를 처리하여 자연어 처리 분야(NLP)에서 큰 성과를 내고있는 RNN(Recurrent Neural Network)으로 돌아오겠습니다.
.
cf) 오탈자 혹은 잘못된 개념에 대한 피드백은 항상 환영합니다.