서론

잠깐 뒤로 빠져서, 살짝 머신러닝 프레임워크와 관련 없는 일을 해보자.

MNIST 이미지를 받아서 numpy array로 만드는 것이다.

시간이 남는다면 Conv layer도 만들자. 이전에 Layer 클래스를 만들어뒀으니 오래 걸리진 않을 것이다.

MNIST란?

생각해보니까 한번도 설명을 안했다. 뭐… 굳이 설명이 필요할까 싶기는 하지만, 잠깐 짚고 넘어가자.

MNIST는 단순한 손글씨 데이터셋으로, 상당히 많은 (Training에 6만, Test에 1만) 28x28 이미지로 구성되어 있다.

각각의 이미지는 흑백이고, 각 픽셀은 0~255의 밝기 값을 가진다.

0에서 9까지 총 10가지의 손글씨가 들어 있다.

머신 러닝의 Hello World라고 불리기도 하는, 가장 단순한 데이터셋 중 하나이다. (Iris같은 더 간단한 것도 있지만)

특히 이미지 처리 머신 러닝의 가장 단순한 예로, 너무 단순하다 보니까 난이도를 더 올린 Fashion MNIST같은 파생 데이터셋도 있다.

흑백, 28x28 사이즈, 0~255의 밝기값, 10개의 카테고리라는 점이 똑같아 그 자리에 그대로 넣을 수 있다는 특징이 있다.

다운로드

일단 MNIST 데이터베이스를 받아주자.

얀 르쿤의 페이지에서 받을 수 있다.

정확히는 이 곳이다.

파일이- 뭔가 사진 파일이 잔뜩 들어있을 줄 알았는데 통짜 파일 하나씩이다. 살짝 당황스럽긴 하다.

파일 구조

해당 페이지에 파일 구조에 대해 적혀있다.

파일 구조는 간단하다. 매직 넘버 + 헤더 + 내용들로 구성되어 있다.

단순한 반복문으로 numpy 배열을 만들 수 있을 것이다.

크기가 그닥 크지 않기 때문에…? (수십 MB정도?) 다른거 무시하고 그냥 통째로 메모리에 올려도 될 것 같다.

처리

MNIST를 처리하기 위한 파이썬 파일을 새로 만들어주자. mnist_test.py 정도면 충분할꺼다.

img

이런 식으로 깔끔하게 나온다.

일단 파일을 열어서 두 개의 ndarray로 표현하는 부분은 됐다.

Conv 레이어 만들기

대충 파일 여는 것도 다 했으니까 이제 앞서 말했던 것처럼 Convolution 레이어를 만들어보자.

굉장히 단순화를 많이 했기 때문에 (stride도 없고 padding도 없고…)

일단 간단하게 만들어줬다. 제대로 되는지 체크는 다음 시간에!

다음 시간

mnist 데이터셋을 numpy array로 바꿔주는 것도 했고, (잘 돌아갈지는 모르겠지만) Convolution 레이어도 만들어줬다.

다음 시간에 이 둘을 잘 합쳐보자.