[DL] 손글씨 숫자 인식

JINJU·2021년 11월 28일
0
post-thumbnail

이번에는 이미 학습된 매개변수를 사용하여 학습 과정을 생략하고, 추론 과정만 구현
이 추론 과정을 신경망의 순전파(forward propagation)이라고도 한다.

MINIST dataset

MINIST 데이터셋은 손글씨 숫자 이미지 집합으로, 기계학습 분야세어 유명한 데이터셋이다.
0부터 9까지의 숫자이미지로 구성되어있다. 훈련 이미지(train set)가 60000장, 시험 이미지(test set)은 10000장 준비되어 있다. 일반적으로 이 훈련 이미지들을 사용하여 모델을 학습하고, 학습한 모델로 시험 이미지들을 얼마나 정확하게 분류하는지를 평가한다.

코드

import sys, os
sys.path.append("/Users/yujinju/Desktop/deeplearning_from_scratch-master")
from dataset.mnist import load_mnist

(x_train, t_train), (x_test, t_test) = \
    load_mnist(flatten=True, normalize=False)

print(x_train.shape)
print(t_train.shape)
print(x_test.shape)
print(t_test.shape)

사실 여기서 os.pardir 부모 디렉토리를 못찾아서 나는 dataset이 들어있는 부모 경로의 절대경로를 넣어줬다. 그랬더니 너무 잘됨 해결방법 여기에도 적어두었으니 참고하시길

여기서 load_mnist함수는 읽은 MNIST 데이터를 "(훈련 이미지, 훈련 레이블), (시험 이미지, 시험 레이블)" 형식으로 반환한다. 인수로는 normalize, flatten, one_hot_label 세 가지를 설정할 수 있다. 세 인수는 모두 bool 값!

  • normalize: 입력 이미지의 픽셀값을 0.0~1.0 사이의 값으로 정규화할지를 정함
    false로 설정하면 입력 이미지의 픽셀은 원래 값 그대로 0~255 사이의 값을 유지한다.
  • flatten: 입력 이미지를 평탄하게, 즉 1차원 배열로 만들지를 정한다.
    false로 설정하면 입력 이미지를 1x28x28의 3차원의 배열로, true로 설정하면 784개를 1차원배열로 저장
  • one_hot_label: 원-핫 인코딩(one-hot encoding) 형태로 저장할지를 정한다.
    원-핫 인코딩이란, [0,0,1,0,0,0,0,0,0]처럼 정답을 뜻하는 원소만 1이고(hot) 나머지는 모두 0인 배열을 의미한다.
    false면 7이나 2와 같은 숫자 형태의 레이블을 저장하고, true일 때는 레이블을 원-핫 인코딩하여 저장한다.


파이썬에는 pickle 이라는 편리한 기능이 있다. 이는 프로그램 실행 중에 특정 객체를 파일로 저장하는 기능이다. 저장해둔 pickle파일을 로드하면 해당 당시의 객체를 즉시 복원할 수 있다. MNIST 데이터셋을 읽는 load_mnist()함수에서도 (2번째 이후의 읽기 시) pickle 이용한다. pickle 덕분에 MNIST 데이터를 순식간에 준비할 수 있다.

0개의 댓글