David의 개발 이야기!

모델의 예측값과 test_data의 라벨값 비교해 정확도 출력하는 프로그램 만들기 feat. MNIST data 본문

밑바닥부터 시작하는 딥러닝

모델의 예측값과 test_data의 라벨값 비교해 정확도 출력하는 프로그램 만들기 feat. MNIST data

david.kim2028 2022. 5. 15. 16:48
반응형

1. MNIST 데이터셋

MNIST 는 기계학습 분야에서 아주 유명한 데이터셋으로 0-9까지 숫자 이미지로 구성된다. 훈련이미지가 6만장, 시험이미지가 1만장 준비되어 있다. 이러한 데이터를 통해 모델을 학습하고, 학습한 모델로 시험 이미지들을 얼마나 정확하게 분류하는지를 평가한다. 

 

load_mnist 함수는 읽은 MNIST 데이터를 (훈련이미지, 훈련레이블), (시험이미지, 시험레이블) 형식으로 반환한다.

 

인수로는 3가지를 설정할 수 있는데, 

normalize 는 입력 이미지의 픽셀 값을 0.0 ~ 1.0 사이의 값으로 정규화할지를 정한다.

flatten 는 입력이미지를 평탄하게, 즉 1차원 이미지로 만들지를 결정한다.  FALSE 설정하면 1*28*28의 3차원의 배열로, True로 하면 784개의 원소로 이뤄진 1차원 배열로 저장한다. 

세번째 인수는 one_hot_label로, 원핫 인토딩 형태로 저장할지를 결정한다. 

-> 원 핫 인코딩은, [0,0,0,0,1,0,0,0,] 처럼 정답을 뜻하는 원소만 1이고 나머지는 0인 배열이다.

 

 

1. 가장 먼저 MNIST 데이터셋을 얻고 네트워크를 생성

2. 이어서 for 문을 돌며 x에 저장된 이미지 데이터를 1장씩 꺼내 predict 함수로 분류 

3. predict 함수는 각레이블의 확률을 넘파이 배열로 반환 [0.1, 0.3, 0.2, ...., 0.04] 같은 배열이 반환되며, 이는 이미지가 숫자 0일 확률이 0.1, 1일 확률이 0.3 식으로 해석함. 

4. 그런 다음, np.argmax() 함수로 이 배열에서 값이 가장 큰 원소의 인덱스를 구한다. <- 이게 예측 결과

5. 마지막으로 신경망이 예측한 답변과 정답레이블을 비교하여 맞힌 숫자를 세고, 이를 전체 이미지 숫자를 나눠 정확도를 구한다. 

 

6. Accuracy : 0.9352 뜻은 올바르게 분류한 비율이 93.52%이라는 뜻이다!

반응형
Comments