신경망 구조를 손글씨 숫자 분류 문제를 해결하는데 적용해볼 것이다.
기계학습의 문제 풀이는 학습과 추론 단계를 거친다. 학습 단계에서는 모델을 학습하고, 추론 단계에서는 학습한 모델로 예측해야하는 데이터에 대해 추론을 수행하는 것이다.
신경망도 마찬가지로 두 단계를 거친다. 훈련 데이터를 사용하여 가중치 매개변수를 학습하고, 추론 단계에서는 학습한 매개변수를 사용하여 입력 데이터를 분류한다.
이번 포스팅에서는 학습 단계를 생략하고, 순전파(foward propagation)라고도 불리는 '추론 과정'을 구현해볼 것이다.
1. MNIST 데이터셋
MNIST dataset은 0~9까지 숫자 이미지 데이터이다. Training dataset은 60,000개이고 Test dataset은 10,000개이다. Training dataset으로 모델을 학습하고, Test dataset으로 학습한 모델이 얼마나 정확하게 분류하는지를 평가할 것이다.
github.com/WegraLee/deep-learning-from-scratch 이 링크에서 Download ZIP을 통해 파일들을 다운받는다.
작업할 파일을 ch01, ch02, ... , ch08 중 한 곳에 위치시킨다.
load_mnist는 (훈련 이미지, 훈련 레이블), (시험 이미지, 시험 레이블)형식으로 데이터를 반환한다.
인수는 normalize, flatten, one_hot_label 세 가지를 설정할 수 있고, 세 인수 모두 bool(True/False)값이다.
normalization | -이미지 픽셀값을 0.0~1.0 사이의 값으로 정규화할 것인지 결정 -False로 설정하면 입력 이미지 픽셀값인 0~255사이의 값 유지 |
flatten | -입력 이미지를 1차원 배열로 flat하게 만들 것인지 결정 -False로 설정하면 입력 이미지를 1x28x28인 3차원 배열로, True를 설정하면 784개의 원소로 이루어진 1차원 배열로 저장 |
one_hot_label | -레이블을 one-hot encoding 형태로 저장할 것인지 결정 -one-hot encoding이란, 정답을 뜻하는 원소만 1이고 나머지는 0인 배열로 숫자 2의 경우 [0,0,1,0,0,0,0,0,0,0]로 표현 -False로 설정하면 '2'와 같이 숫자 형태로 레이블을 저장 |
2. 신경망 추론
MNIST데이터셋을 이용하여 추론을 수행하는 신경망을 구현해볼 것이다.
신경망은 입력층 뉴런을 784(28x28)개, 출력층 뉴런을 10개로 구성한다. 첫 번째 은닉층 뉴런은 임의로 50개, 두 번째 은닉층 뉴런은 임의로 100개로 설정한다.
3. 배치 처리
784개의 원소로 구성된 1차원 배열이 입력되어 10개의 원소로 이루어진 1차원 배열이 출력된다. 이것은 이미지 1장을 입력했을 때의 흐름이다.
이미지 여러 장을 한번에 입력하는 경우는 다음과 같다. 이미지 100개를 묶어 predict() 함수에 적용하는 것이다. 즉, 100장 분량의 데이터를 하나의 입력 데이터로 표현하는 것이다.
이렇게 입력 데이터를 하나로 묶는 것을 배치(batch)라 한다. 배치 처리를 하는 이유는 컴퓨터에서는 큰 배열을 한 번에 계산하는 것이 작은 배열을 여러 번 계산 하는 것보다 효율적이므로 이미지 1장당 처리 시간을 대폭 줄여주기 때문이다. 배치 처리를 구현하면 다음과 같다.
axis=1은 첫번째 차원을 구성하는 요소 중 최댓값의 인덱스를 찾도록 하는 인수이다. 예를 들면 다음과 같다.
배치 단위로 분류한 결과를 실제 답과 비교하기 위해, ==연산자를 사용하여 넘파이 배열끼리 비교한다. True/ False로 구성된 bool배열을 만들고, 결과로 True의 개수를 센다.
출처: 사이토 고키, 『밑바닥부터 시작하는 딥러닝』, 한빛미디어(2017), p96-106.
https://www.hanbit.co.kr/store/books/look.php?p_code=B8475831198
'AI > 밑딥' 카테고리의 다른 글
딥러닝) 수치 미분 , 해석적 미분 , 편미분 (0) | 2021.02.25 |
---|---|
딥러닝) 신경망 학습 , 손실 함수 ( 오차 제곱합 , 교차 엔트로피 오차 ), 미니배치 (0) | 2021.02.21 |
딥러닝) 소프트맥스 함수로 출력층 설계 (0) | 2021.02.14 |
딥러닝) 다차원 배열, 신경망 구현 (0) | 2021.02.13 |
딥러닝) 활성화 함수 Activation Functions (0) | 2021.02.10 |
댓글