본문 바로가기

AI시작

3-4. MNIST 분석

MNIST

간단한 컴퓨터 비전 데이터 세트로, 아래와 같이 손으로 쓰여진 이미지들로 구성되어 있습니다.

이 데이터는 각 데이터의 숫자가 무엇인가에 대한 라벨이 함께 붙어 있습니다.

예를 들어 위의 이미지에는 각각 5, 0, 4, 1 이라는 라벨이 붙어 있습니다.

 

MNIST 데이터

MNIST 데이터는 Yann LeCun의 웹사이트에서 제공합니다.

다운로드한 데이터는 55000개의 학습 데이터 (mnist.train), 10000개의 테스트 데이터 (mnist.test) 5000개의 검증 데이터 (mnist.validation) 세 부분으로 나누어져 있습니다.

 

다운로드한 데이터는 55000개의 학습 데이터 (mnist.train), 10000개의 테스트 데이터 (mnist.test) 5000개의 검증 데이터 (mnist.validation) 세 부분으로 나누어져 있습니다.

이렇게 나눠진 것은 굉장히 중요합니다. 학습하지 않은 별도의 데이터를 이용해서 학습한 결과가 실제로 일반적으로 적용되는지 검증하는 것이 기계 학습의 핵심입니다!

 

모든 MNIST 데이터 포인트들은 두 부분으로 되어 있습니다. 손으로 쓴 숫자와 그에 해당하는 라벨입니다. 학습 세트의 이미지는 mnist.train.images 이며, 학습 세트의 라벨은 mnist.train.labels 입니다.

 

각 이미지는 가로, 세로가 각 28픽셀입니다. 우리는 이걸 숫자로 구성된 큰 행렬로 취급할 수 있습니다:

 

mnist.train.images  [55000,784] 형태의 텐서 (n차원 행렬) 얻었습니다.

첫번째 차원 인덱스는 이미지에, 두번째 차원 인덱스는 이미지의 픽셀에 대응됩니다.

MNIST 안에서 대응되는 라벨들은 주어진 이미지가 어떤 숫자를 나타내는가를 의미하는 0에서 9 사이의 숫자입니다. 연습의 목적으로, 우리는 우리 라벨들을 "one-hot 벡터" 사용할겁니다. one-hot 벡터는 하나의 차원만 1이고 나머지 모든 차원들은 0으로 채워진 벡터입니다.

경우n번째 숫자는 n번째 차원이 1 벡터로 표시될 것입니다.

예를 들어, 3 [0,0,0,1,0,0,0,0,0,0] 표현됩니다.

 

 

소스 코드를 구경해보자. 

 

1. tensorflow 와 ramdom 패키지를 import 하고 mist 튜토리얼 사이트로부터 데이터셋을 가지고 온다.

가지고 오는 위치는 원하는데로 정하면 된다.

그리고 러닝레이트를 0.001 로 하고 에포크는 15, 배치 사이즈는 100 으로 잡았다.

2. input 을 위한 placeholder 를 만들고 28 x 28 x 1 로 디멘젼을 정한다. 

결과는 사이즈 10의 스코어 벡터를 위해 placeholder 를 준비한다.

가중치 W1 (커널) 은 3 x 3 x 1 이 32개 이고 stride 는 1 이고 패딩은 1 이다. 

relu 활성화 후 max pool 하도록 준비한다.

가중치 W2 (커널) 은 3 x 3 x 32 이 64개 이고 stride 는 1 이고 패딩은 1 이다. 

relu 활성화 후 max pool 까지는 동일하지만

그 다음에 있을 Fully-connected 계층을 위해 결과를 reshape (flatten) 한다.

W3은 xavier 초기화를 시킨다. bias 도 준비한다.

그리고 flatten 된 L2_flat 을 W3 과 행렬 곱 연산을 한다.

그 결과를 sofmax cross entropy 로 Loss (Cost) 를 연산하여 이를 ADAM 옵티마이져를 이용하여 그래디언트 디슨트 최적화를 하도록 정의한다.

드디어 실제로 연산을 시작한다. 미니 배치를 이용한 Stochetic Gradient 를 하며 진행한다.

실제 소스는 여기에 있다.

 

https://github.com/katebrighteyes/PythonDL_Collection/blob/master/mnist/mnist_cnn.py

 

katebrighteyes/PythonDL_Collection

It is just for collection. I am not ready fot teaching python yet. - katebrighteyes/PythonDL_Collection

github.com

파이썬 텐서프로우는 자주 접하며 적응을 하는 것이 심신에 이로운것 같다.

'AI시작' 카테고리의 다른 글

4-1 고급 Optimization  (0) 2019.09.03
2-2 Loss Function  (0) 2019.09.02
1. 딥러닝 영상분석 3총사를 구분하시나요  (0) 2019.09.01
3-3 활성화 함수  (0) 2019.08.19
내가 보려고 정리한 AI 용어와 개념 설명  (0) 2019.08.19