서론

몇 번이고 해본 것이긴 하지만 PyTorch로는 해본 적이 있는지 모르겠다.

머신 러닝의 Hello World격인 MNIST 데이터셋을 가지고 이것 저것 해보자.

MNIST에 대한 설명은 예전에 한 적이 있으니까 가볍게 짚고 넘어가자면

0에서 9까지의 숫자를 분류하는 모델이다.

노트북을 이용해서 해보자. 노트북 파일의 확장자는 ipynb이다.

밑준비

먼저 mnist 데이터셋은 scikit-learn을 이용해서 받아주자.

pandas의 DataFrame 형식의 (70000, 784) 사이즈의 x 데이터와 (70000,) 사이즈의 y 데이터를 받을 수 있다.

항상 그렇듯 pyplot으로 이미지를 띄워보고 시작하자… 생각보다 import가 오래 걸린다. 2분 35초 걸렸다.

해당 x는 0부터 255까지의 값으로 되어있는 모양이다. 255로 나눠서 0~1 사이로 끼워맞춰주자.

Train/Test 분리

scikit-learn을 이용하면 하나의 큰 데이터셋을 train용 데이터셋과 test용 데이터셋으로 나눌 수 있다.

약 10%의 데이터를 test용으로 떼어주자.

각각 x_train, x_test, y_train, y_test로 나눠줬다. (sklearn.model_selection.train_test_split을 이용한다.)

y_train과 y_test의 타입이 수상하다. float 혹은 int 타입으로 (int로 하겠다.) 제대로 바꿔주자.

간단한 CNN

데이터의 준비가 끝났으므로, 처음으로는 간단한 CNN을 만들어주자.

이하는 다음 파이토치 튜토리얼을 참조한다.

np 배열보다 torch.tensor를 많이 사용하기 때문에, map 함수를 이용해서 전부 torch.tensor로 바꿔준다.

그 후, nn.Sequential을 사용해서 간단하게 모델을 만들어주자.

모델의 생김새는 튜토리얼에 나오는 것을 따른다.

다음 시간

미니 배치 구현부터 한번 해보자. 노트북의 작달막한 메모리로는 아무래도 버티지를 못하는 모양이다.