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
파이썬 텐서프로우는 자주 접하며 적응을 하는 것이 심신에 이로운것 같다.
'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 |