본문 바로가기

머신러닝공부

MNIST를 활용한 이미지 데이터 딥러닝 개발 프로세스

728x90
반응형

MNIST

MNIST 데이터는 28 x 28 크기의 숫자 이미지와 0~9까지의 정답으로 이루어져 있으며, 총 60000개의 학습데이터와 10000개의 테스트 데이터로 구성되어 있다.

MNIST는 딥러닝을 배울 때 처음 배우는 'Hello, World'같은 존재임

 

Architecture

입력층 :

입력층에는 28x28 크기를 가지는 2차원 이미지 데이터를 1차원 벡터로 변환해야 함, Flatten() 함수를 이용해서 28x28 크기의 2차원 이미지를 784개(28x28)의 길이를 갖는 1차원 벡터로 변환해서 은닉층으로 전달함

은닉층 : 

딥 러닝 아키텍처는 일반적으로 1개 이상의 은닉층으로 이루어져 있으며 각각의 은닉층은 내부에 많은 노드(node)로 구성됨. 이러한 은닉층 개수와 노드 개수는 전형적인 하이퍼 파라미터로서 학습 데이터와 주어진 환경 그리고 성능 등을 고려하여 개발자 스스로가 최적의 값을 찾아야 함

출력층 :

출력 층 노드개수는 정답(label)의 범주와 같은 10개로 설정함

 

이미지 데이터 딥러닝 개발 프로세스

데이터 정의 -> 데이터 전처리 -> 모델 구충 -> 모델 컴파일 -> 학습 -> 모델 평가



데이터 정의

TensorFlow 2.x에서는 MNIST, Fashion-MNIST, Cifat10과 같은 학습 데이터 셋은 load_data(), cifat10.load_data() 사용하여 데이터 셋을 불러올 수 있음

 

데이터 전처리

학습 데이터가 이미지인 경우에는, 학습데이터에 대한 정규화(Normalization)와 원핫 인코딩(one-hot encoding)과 같은 데이터 전처리가 (preprocessing) 필요함. 일반적으로 이런 정규화는 MinMax 또는 표준화 알고리즘을 사용하며 원핫인코딩은 TensorFlow 2.x에서는 to_categorical() API를 이용하여 수행됨

 

1. 정규화: 입력데이터의 상대적 크기에 대한 영향을 줄이기 위해서, MinMax 공식을 이용하여 모든 데이터 범위를 0~1사이의 값으로 변형

2. 표준화: 더 높은 precision을 갖도록 평균과 표준편차를 이용하여 특정 범위를 벗어난 데이터를 outlier로 간주 후 제거

3. 원핫 인코딩: 단어 집합의 크기를 벡터 차원으로 하고, 표현하고 싶은 단어의 인덱스에 1의 값을 부여하고, 다른 인덱스에는 0을 부여하는 단어의 벡터 포현 방식이다. -> 리스트에서 가장 큰 값을 가지는 인덱스를 정답으로 인식

 

모델 구축

모델을 생성하고 model.add() 함수를 통해서 입력층, 은닉층, 출력층 등을 구축함. 이때 은닉층 부분은 일반적인 ANN에서는 Dense()를 사용하지만, CNN에서는 Conv2D(), MaxPool2D(), Flatten()등으로 은닉층 부분을 구성함

 

모델 컴파일

model.compile() API를 이용하여 optimizer, loss function 등을 지정함. 이때, 학습 데이터의 정답을 원핫인코딩 방식으로 설정했다면 loss function을 나타내느 부분을 loss = 'categorical_crossentorypy'형식으로 나타내며, 원핫인코딩 방식이 아니라면 loss = 'sparse_categorical_crossentropy' 형식으로 지정함

 

학습

model.fit() API를 이용하여 이미지 데이터에 대한 학습을 진행함

 

모델 평가

model.evaluate() API를 이용해서 테스트 데이터에 대한 정확도를 측정하며, 혼동 행렬(confusion matrix)을 사용하면 우리가 구축한 모델(model)의 강점과 약점, 즉 어떤 데이터에 대해서 우리 모델이 혼란스러워 하는지 등을 파악할 수 있음

 

반응형