본문 바로가기

인공지능(AI)

MNIST 머신 러닝

반응형

개요

 MNIST는 우리가 새로운 프로그래밍 언어를 배울 때 'Hello World'를 출력하는 것처럼, 딥러닝을 처음 배울 때 반드시 처음 거쳐야 하는 과정이다. 이는 28 x 28 크기의 숫자 이미지와 0~9까지의 정답으로 이루어져 있다.

 

MNIST 데이터베이스

 MNIST 데이터베이스 (Modified National Institute of Standards and Technolgy database)는 숫자0부터 9까지의 손글씨로 이루어진 대형 데이터베이스로, 다양한 화상 처리 시스템을 트레이닝하기 위해서 일반적으로 사용된다. MNIST 데이터베이스는 6만 개의 트레이닝 이미지와 만개의 테스트 이미지를 포함하고 있다.

 

딥러닝 아키텍처

  딥러닝의 기본 아키텍처는 입력층, 은닉층, 출력층으로 나뉜다. 우선 입력층에서는 28 x 28 크기를 가진 2차원 이미지 데이터를 1차원 벡터로 변환한다. 즉 입력층에서는 Flatten() 함수를 이용해서 28 x28 크기의 2차원 이미지를 784개의 길이를 갖는 1차원 벡터로 변환해서 은닉 층으로 전달한다. 은닉층은 일반적으로 1개 이상으로 이루어져 있으며, 각각의 은닉층은 내부에 많은 노드(node)로 구성된다. 이러한 은닉층 개수와 노드 개수는 전형적인 하이퍼 파라미터로서 학습 데이터와 주어진 환경 그리고 성능 등을 고려하여 개발자 스스로가 최적의 값을 찾아야 한다. 출력층의 노드 개수는 label의 범주와 같은 10개로 설정한다. 즉 학습 데이터의 정답은 0~9까지, 총 10개 가운데 하나의 숫자로 반드시 표현되기 때문에 출력층 노드 개수 또한 동일하다는 것을 기억해야 한다.

 

딥러닝 개발 프로세스

 딥러닝 개발 프로세스는 데이터 정의, 데이터 전처리, 모델 구축, 모델 컴파일, 학습, 모델 평가 순으로 진행된다. 우선 데이터 정의에 대한 내용을 살펴보면, TensorFlow에서는 MNIST, Fashion-MNIST와 같은 학습 데이터 셋을 load_data()를 이용하여 불러올 수 있다. MNIST를 예시로 들면 해당 데이터 셋을 import 한 이후에  mnist.load.data()를 사용하면 MNIST 데이터 셋을 불러올 수 있다. 학습 데이터가 이미지인 경우, 학습 데이터에 대한 정규화(normalization)와 원핫 인코딩(one-hot encoding)과 같은 데이터 전처리가 필요하다. 일반적으로 정규화는 MinMax 또는 표준화 알고리즘을 사용하며, 원핫 인코딩은 to_categorical() API를 이용하여 수행된다. 모델 구축 과정에서 모델을 생성하고, model.add()를 통해서 입력층, 은닉층, 출력층을 구축한다. 이때 은닉층 부분은 ANN에서는 Dense()를 사용하지만, CNN에서는 Conv2D(), MaxPool2D(), Flatten() 등으로 은닉층 부분을 구성한다. 모델 컴파일은 model.compile() API를 이용하여 optimizer, loss function 등을 지정하고, 학습 데이터의 정답을 원핫 인코딩 방식으로 설정했다면 loss function을 나타내는 부분은 loss= 'categorical_crossentroy' 형식으로 나타내며, 원핫 인코딩 방식이 아니라면 loss='sparse_categorical_crossentropy' 형식으로 지정한다. 이후 model.fit() API를 이용하여 이미지 데이터에 대한 학습을 진행하고, model.evaluate() API를 이용하여 테스트 데이터에 대한 정확도를 측정하며, 구축한 모델의 강점과 약점을 파악한다.

반응형

'인공지능(AI)' 카테고리의 다른 글

딥러닝의 작동과 모델  (0) 2023.01.16
튜링 테스트(Turing Test) 2편  (0) 2023.01.13
튜링 테스트(Turing Test) 1편  (0) 2023.01.13
AI 구축 방법  (0) 2023.01.12
인공지능과 AI운용 및 응용  (0) 2023.01.11