상세 컨텐츠

본문 제목

[Deep Learning - 딥러닝]MNIST Classification - 손글씨 분류기

Artificial Intelligence

by [성운] 2019. 9. 13. 16:11

본문

보편적으로 딥러닝을 배울 때는 손 글씨 숫자 이미지를 인식하는 문제로 시작합니다. 이번 포스팅은 텐서플로에서 어떻게 단일 계층 신경망을 만들고 손글씨 숫자를 인식하는지 살펴보겠습니다.

MNIST

MNISTModified National Institute of Standards and Technology database 손으로 숫자들로 이루어진 대형 데이터베이스이며 지도학습입니다. 즉 이미지 데이터에는 그 이미지가 어떤 숫자인지를 나타내는 레이블(label) 정보가 함께 들어 있습니다. 출력 점수와 기대 점수의 차이를 측정하는 오차함수를 계산할 것 입니다. 학습 모델은 오차를 줄이기 위해 가중치(weight) 매개변수를 조정하게 됩니다.

MNIST 데이터 셋 다운로드 및 이미지 분석

MNIST 데이터는 http://yann.lecun.com/exdb/mnist/에서 다운로드 받을 수 있습니다.

참고로 이미지를 다룰 경우에 데이터 전처리나 포매팅이 중요하지만, 이는 시간이 오래 걸리는 부분입니다. 위 데이터는 전처리 및 포매팅 작업이 완료된 데이터로 바로 학습이 가능합니다.

이 흑백 이미지는 가로세로 비율은 유지하고 20*20픽셀로 정규화(normalization) 되어있습니다.

파일 목적
train-images-idx3-ubyte.gz 학습  이미지 - 55000개의 트레이닝 이미지, 5000개의 검증 이미지
train-labels-idx1-ubyte.gz 이미지와 매칭되는 학습  레이블
t10k-images-idx3-ubyte.gz 테스트  이미지 - 10000개의 이미지
t10k-labels-idx1-ubyte.gz 이미지와 매칭되는 테스트  레이블

이미지의 첫 번째 차원은 각 이미지에 대한 인덱스이며 두 번째 차원은 이미지 안의 픽셀 수를 나타냅니다. 이 이미지는 28*28 픽셀로 구성되어 있으므로 수치 행렬로 나타낼 수도 있습니다. 예를 들면 숫자 1의 한 이미지는 다음과 같이 행렬로 나타낼 수 있습니다.

Traning data

행렬에서 각 원소는 01사이의 값으로서 텐서의 모든 원소는 픽셀의 밝기정보를 나타냅니다. 0에 가까울수록 흰색 1에 가까울수록 검은색인 픽셀입니다. 이 행렬은 28*28=784개의 숫자 배열로 볼 수도 있습니다. 실제로 이미지는 784차원의 벡터 공간에 있는 일련의 점들을 변환한 결과입니다.

또한 각 이미지가 어떤 글자인지 알 수 있도록 0에서 9까지의 숫자로 구성된 레이블 데이터가 있습니다. 이 예제에서는 레이블을 10개의 원소로 구성된 벡터로 표현합니다. 이 벡터는 one-hot encoding 방식으로 레이블 숫자에 대응되는 위치에 1의 값을 가지고 그 외에는 0값을 가집니다. 예를 들어 2이미지의 벡터는[0, 1, 0, …., 0]입니다.

 

클래스 분류 방법

이미지가 어떤 클래스/레이블에 속하는지 근거를 측정할 때 보통 사용하는 방법은 픽셀의 진한 정도에 대한 가중치 합을 계산하는 것입니다. 주어진 클래스에는 없는 진한 픽셀이 이미지에 있다면 가중치는 음의 값이 되고, 클래스의 진한 픽셀이 이미지와 자주 겹친다면 가중치는 양의 값이 됩니다.

아래 그림은 MNIST 데이터 셋을 통해 학습한 10개의 레이블/클래스입니다. 붉은색은 음의 가중치를 나타내고 푸른색은 양의 가중치를 나타냅니다.

Model

 

클래스 소속 확률

수학적으로 쓰면 입력 입력 벡터 x가 주어졌을 때 클래스 i에 대한 근거는 다음과 같은 수식으로 나타낼 수 있습니다.

Softmax formula

소프트맥스 함수를 사용하여 근거들의 합을 예측 확률 y로 산출할 것입니다. 여기서 i는 클래스(이 예제에서는 0~9까지 숫자)를 나타내며 j는 입력 이미지의 픽셀들의(784개 원소(28*28) 합계를 내기 위한 인덱스를 나타냅니다. Wi 는 가중치를 나타냅니다. 일반적으로 모델은 약간의 불확실성을 더해주는 편향 매개변수를 추가로 가집니다.

Softmax함수 정의는 https://ynebula.tistory.com/42 참고 바랍니다.

 

글이 도움되셨다면 공감 부탁 드립니다.

감사합니다.

 

[Reference]

텐서플로 첫걸음

https://docs.ncloud.com/ko/tensorflow/tensorflow-1-3.html

http://yann.lecun.com/exdb/mnist/

관련글 더보기

댓글 영역