갈루아의 반서재

 

MNIST는 머신러닝의 고전적인 문제로 손으로 쓴 숫자들의 그레이스케일 28x28 픽셀 이미지를 보고, 0부터 9까지의 모든 숫자들에 대해 이미지가 어떤 숫자를 나타내는지 판별하는 것으로, 엑셀을 이용하여 이를 구현해보자. 

 

이하 포스팅의 내용은 아래 동영상의 내용을 참조하여 직접 실행하면서 작성한 것이다. 아래 영상을 통해 완성된 형태를 짐작해볼 수 있다.

 

www.youtube.com/watch?v=kCL065_0zTY&list=WL&index=1&t=75s

 

MNIST training 및 testing 데이터 가져오기

이번 포스팅에서는 이후 이후 진행에 필요한 데이터를 가져오는 것부터 시작해보자. 먼저 새로운 엑셀 파일을 열고 다음와 같이 5개의 탭을 만든다.

 

 

실습에 필요한 데이터를 다운로드 받는다. MNIST in CSV에서 train_set 및 test_set CSV 파일을 다운로드 받을 수 있다.

먼저 mnist_train.csv 파일을 열어 살펴보면 다음과 같이 구성되어 있음을 확인할 수 있다.

60,000개의 행으로 구성되어 있으며, 각각의 행은 손글씨 이미지(28px*28px) 개별 픽셀의 그레이스케일 정보(0은 흰색, 255는 검정색을 나타냄)를 담고 있다. 

각 행은 총 785개의 열(A~ADE)로 구성된다. A열은 해당 행의 데이터가 나타내는 실제 숫자를, B~ADE 열은 28*28=784 개 픽셀의 그레이스케일값을 의미한다. 

예를 들어 1행의 값을 살펴보면 다음과 같다. 제일 앞에 나오는 5라는 값은 파랑색의 784개 픽셀값이 숫자 5 (actual number)를 나타낸다는 것이다.

 

5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 18 18 18 126 136 175 26 166 255 247 127 0 0 0 0 0 0 0 0 0 0 0 0 30 36 94 154 170 253 253 253 253 253 225 172 253 242 195 64 0 0 0 0 0 0 0 0 0 0 0 49 238 253 253 253 253 253 253 253 253 251 93 82 82 56 39 0 0 0 0 0 0 0 0 0 0 0 0 18 219 253 253 253 253 253 198 182 247 241 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 80 156 107 253 253 205 11 0 43 154 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 14 1 154 253 90 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 139 253 190 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 190 253 70 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 35 241 225 160 108 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 81 240 253 253 119 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 45 186 253 253 150 27 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16 93 252 253 187 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 249 253 249 64 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 46 130 183 253 253 207 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 39 148 229 253 253 253 250 182 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 24 114 221 253 253 253 253 201 78 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 23 66 213 253 253 253 253 198 81 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 18 171 219 253 253 253 253 195 80 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 55 172 226 253 253 253 253 244 133 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 136 253 253 253 212 135 132 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

 

 

위의 CSV 파일을 현재 우리가 만들고 있는 mnist_excel.xlsm 파일의 Training 탭으로 가져오자. 이를 위해서는 엑셀 메뉴 중 데이터 > 텍스트/CSV 를 클릭하여 데이터를 가져올 csv 파일을 선택 후 연다. 

 

구분기호 탭을 선택하고, 데이터 변환을 클릭한다.

 

 

변환된 데이터 확인 > 닫기 및 다음으로 로드 를 클릭한다.

 

 

다음과 같이 로드되었다. 디자인에서 머리글, 줄무늬행을 체크해제한다. 

마찬가지 방법으로 Testing 탭에도 mnist_test.csv 데이터를 가져와 로드한다. 이로써 데이터 준비는 끝났다.