2017년 12월 2일 토요일

ML 초보자를 위한 MNIST(MNIST For ML Beginners)(1)



출처 : https://www.tensorflow.org/get_started/mnist/beginners

이글은 영어 원본을 읽고 공부하면서 불필요한 내용 빼고 이해하기 쉽도록 적절히 내맘대로 작성해보았습니다. 이해가 잘못되어 원저자의 의도대로 번역이 안되어 있을 수도 있습니다. 이점 참고해서 읽어 주시면 고맙겠습니다


앞서 작성한 글



이 글은 앞서 작성한 글에 이어지는 글입니다.




프로그램을 배우는데는 HelloWorld 가 기본, 머신런닝에서 MNIST 가 기본이라고 합니다.
MNIST는 손글씨 숫자로 구성된 간단한 컴퓨터 비전 데이터 셋입니다.
대충 아래와 같습니다.

또 labels(라벨) 이 붙어있어서 어떤게 어떤 숫자인지 알 수 있게 되어있습니다. 위의 라벨은 5,0,4,1입니다.

예제에서는 이미지를 보고 어떤 숫자인지 예측하는 모델을 만들게 됩니다. 이것은 Softmax Regression 이라는 모델로 텐서플로의 기본이 되는것입니다. (Softmax는 최종 출력값들의 합계는 1이 되는 특징을 가지며 주로 분류하는 용도에서 많이 사용하게 됩니다.)
이 예제의 실제 코드는 매우 짧으며 중심 내용은 단 3줄에서 발생합니다. TensorFlow가 작동하는 방법과 핵심 기계 학습 개념의 두 가지 아이디어를 이해하는 것이 매우 중요합니다.

이 예제에 관해서


코드는 아래 링크에서 받을 수 있습니다.
https://github.com/tensorflow/tensorflow/blob/r1.4/tensorflow/examples/tutorials/mnist/mnist_softmax.py


이 튜토리얼에서 우리가 학습 할 것
- MNIST 데이터와 softmax 회귀에 대해 배웁니다.
- 이미지의 모든 픽셀을 보면서 숫자를 인식하는 모델 함수를 만듭니다.
- TensorFlow를 사용하여 숫자를 인식하도록 모델을 훈련합니다.
- 테스트 데이터로 모델의 정확성을 확인합니다.

MNIST 데이터

MNIST데이터는 Yann LeCun's website (http://yann.lecun.com/exdb/mnist/)에서 호스팅 됩니다. 이 예제 코드를 복사하여 붙여 넣는 경우 아래 두줄 코드에 의해서 데이터를 자동으로 다운로드하게 됩니다.
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
MNIST 데이터는 트레인 데이터 (mnist.train)의 55,000, 테스트 데이터 (mnist.test)의 10,000 및 검증 데이터 (mnist.validation)의 5,000 의 세 부분으로 나누어집니다. 이 분할은 매우 중요합니다. 기계 학습에서 필수적입니다. 우리가 배우지 않은 별도의 데이터를 가지고 있으므로 배운 내용이 실제로 일반화되었는지 확인할 수 있습니다

앞에서 언급했듯이, 모든 MNIST 데이터 포인트는 두 부분으로되어 있습니다 : 손으로 쓴 숫자의 이미지와 해당 라벨, 우리는 이미지 "x"와 라벨(앞에서 5,0,4,1 같은 숫자를 의미합니다.) "y"를 부를 것입니다. 트레이닝 세트와 테스트 세트는 모두 이미지와 해당 라벨을 포함합니다. 예를 들어 트레이닝 이미지는 mnist.train.images이고 트레이닝 라벨은 mnist.train.labels입니다. (y=f(x)라고 볼때, 이미지 x를 가지고 우리가 궁금해 하는(머신러닝을 통해서 결과를 분류(인식)해야하는 값은 y가 되어야 합니다.) 라벨이 y가 되어야 합니다.)
각각의 이미지는 28*28크기입니다. 이것은 숫자의 큰 배열로 이해할 수 있습니다.

일렬로 풀어서 나열하면 28*28=784개의 숫자 벡터의 배열이 됩니다.  1차원적으로 표현하면 2D 이미지의 성분이 사라지게 됩니다. 여기에서는 softmax회귀를 해당 방법으로 사용하지만, 가장 최고의 방법은 2D데이터 그대로 사용하는것이 좋은 방법인데 그건 나중에 학습할 예정입니다.
mnist.train.images는 [55000, 784]형태를 가진 텐서입니다. 첫번째 차원은 이미지 리스트 인덱스이고 두번째 차원은 각 이미지에서 픽셀에 대한 인덱스 입니다.  텐서의 각 엔트리는 특정 이미지의 특정 픽셀에 대해 0과 1 사이의 픽셀 강도입니다.
위 그림 설명이 이미지가 2D표시되어 모호할 수 있어서 1D로 변환되는 부분을 나타내었습니다.

MNIST의 각 이미지에는 이미지에 그려지는 숫자를 나타내는 0에서 9 사이의 숫자가 해당 레이블을 가지고 있습니다.

이 튜토리얼의 목적을 위해 우리는 레이블을 "원 핫 벡터 (one-hot vectors)"로 원할 것입니다. (분류의 머신 러닝에서는 대부분 출력단(y)이 one-hot vectors로 사용합니다.)원 핫 벡터는 대부분 차원에서 0이고 단일 차원에서 1인 벡터입니다. 이 경우 n 번째 숫자는 n 차원에서 1 인 벡터로 표시됩니다.
예를 들어, 각각 아래와 같이 표시 됩니다.
0은 [1,0,0,0,0,0,0,0,0,0]
1은 [0,1,0,0,0,0,0,0,0,0]
2은 [0,0,1,0,0,0,0,0,0,0]
3은 [0,0,0,1,0,0,0,0,0,0]
따라서 mnist.train.labels는 [55000, 10] 배열입니다.

위 내용의 입출력 관계를 정리해보면 아래와 같습니다.


직접 데이터를 읽어서 처리하는 경우는 없겠지만 MNIST 파일의 구조는 아래와 같습니다.
TRAINING SET LABEL FILE (train-labels-idx1-ubyte):

[offset] [type]          [value]          [description] 
0000     32 bit integer  0x00000801(2049) magic number (MSB first) 
0004     32 bit integer  60000            number of items 
0008     unsigned byte   ??               label 
0009     unsigned byte   ??               label 
........ 
xxxx     unsigned byte   ??               label
The labels values are 0 to 9.

TRAINING SET IMAGE FILE (train-images-idx3-ubyte):

[offset] [type]          [value]          [description] 
0000     32 bit integer  0x00000803(2051) magic number 
0004     32 bit integer  60000            number of images 
0008     32 bit integer  28               number of rows 
0012     32 bit integer  28               number of columns 
0016     unsigned byte   ??               pixel 
0017     unsigned byte   ??               pixel 
........ 
xxxx     unsigned byte   ??               pixel
Pixels are organized row-wise. Pixel values are 0 to 255. 0 means background (white), 255 means foreground (black).

TEST SET LABEL FILE (t10k-labels-idx1-ubyte):

[offset] [type]          [value]          [description] 
0000     32 bit integer  0x00000801(2049) magic number (MSB first) 
0004     32 bit integer  10000            number of items 
0008     unsigned byte   ??               label 
0009     unsigned byte   ??               label 
........ 
xxxx     unsigned byte   ??               label
The labels values are 0 to 9.

TEST SET IMAGE FILE (t10k-images-idx3-ubyte):

[offset] [type]          [value]          [description] 
0000     32 bit integer  0x00000803(2051) magic number 
0004     32 bit integer  10000            number of images 
0008     32 bit integer  28               number of rows 
0012     32 bit integer  28               number of columns 
0016     unsigned byte   ??               pixel 
0017     unsigned byte   ??               pixel 
........ 
xxxx     unsigned byte   ??               pixel
Pixels are organized row-wise. Pixel values are 0 to 255. 0 means background (white), 255 means foreground (black).

이제 우리 모델을 실제로 만들 준비가되었습니다!










댓글 없음:

댓글 쓰기