본문 바로가기

ML

[ML] 딥러닝 1 - 4강 MNIST

※ 본 글은 한경훈 교수님의 머신러닝 강의를 정리, 보충한 글입니다. ※

[딥러닝 I] 4강. MNIST - YouTube

 


MNIST 데이터셋 설명

0부터 9까지의 손글씨 이미지와 실제 숫자에 해당하는 데이터 세트가 총 7만 개 주어진다.

6만 개는 학습용 데이터, 1만 개는 테스트용 데이터이다.

여기서 학습용 데이터는 학습을 위한 교과서, 테스트용 데이터는 맞는지 확인하기 위한 시험문제라고 생각하면 된다.

각각의 이미지는 0~255 사이의 값을 가진 28x28 흑백 이미지이다.

따라서 28x28 행렬로 나타나며, 행렬의 원소는 밝기를 뜻하는 0~255 사이의 정수이다.

 

 

cf. 🤔 왜 이미지를 행렬 취급하지?
우리는 사진을 그 자체로 볼 수 있지만, 컴퓨터는 그럴 수 없으므로 이미지를 행렬로 인식한다.

우리가 보는 이미자와 컴퓨터가 보는 이미지

 


MNIST의 입력과 출력

입력

인공신경망에서 입력은 벡터로 이뤄져야 하므로, 행렬을 벡터로 만드는 과정이 필요하다.

세절기에 이미지를 넣고 한 줄로 길게 붙인 것과 닮았다고 하여, 이 과정을 (행렬 -> 벡터) flatten이라고도 한다.

ex. [[1,2][3,4]] 의 행렬이 flatten 되면 4차원 벡터 (1,2,3,4)로 바뀐다.

MNIST 이미지는 28x28 행렬이므로, 784차원 벡터로 바뀌어 입력된다.

 

출력

Affine → Activate(Relu)→ Affine →... → Softmax를 거쳐 확률 벡터를 출력한다.

출력되는 확률 벡터는 10차원 벡터로서 각각의 원소는 입력된 이미지가 0~9일 확률을 나타낸다.

 

입력된 이미지가 0-9일 확률벡터를 출력한다. 위 그림에서는 9일 확률이 가장 높다.

 


이미지와 텐서

컬러 이미지는 R 이미지, G 이미지, B 이미지가 쌓여서 만들어지는 3차원 텐서이다.

따라서 컬러 이미지'들'의 테이터는 (이미지 개수, 채널 수, 가로, 세로) 로서 4차원 텐서로 표현된다.

MNIST 데이터에 .shape 함수를 적용하면

x_train.shape : (60000, 28, 28) or (60000, 1, 28, 28)

라는 값이 나옴을 알 수 있는데 이로서 이미지 데이터들은 4차원 텐서임을 확인할 수 있다.

cf. 위 (60000, 1, 28, 28)는 채널이 1개이고 크기가 28*28 행렬 데이터가 60000개 임을 의미한다.

MNIST의 채널이 1개인 이유는 MNIST 데이터가 컬러가 아닌 흑백 데이터이기 때문이다.

 


Scalar, Vector, Matrix, Tensor의 관계

  • Scalar는 하나의 숫자를 의미한다.
  • Vector는 숫자(Scalar)의 배열이다.
  • Matrix는 2차원의 배열이다.
  • Tensor는 2차원 이상의 배열이다.

3차원 텐서를 시각적으로 이해하면, 2차원 행렬의 모임 즉, 3차원 공간이 된다.

4차원 텐서는 3차원 공간의 벡터, 5차원 텐서는 3차원 공간의 행렬로 이해할 수 있다.

이런 식으로 n차원 공간을 생각할 수도 있지만, 이미지를 처리하는 머신러닝에서 대부분 4차원 텐서까지만 다룬다.

컬러 이미지를 텐서로 나타내면 (이미지 개수, 채널 수, 가로, 세로) 이므로 4차원 텐서이기 때문이다.

cf. 동영상은 5차원 텐서로 나타내 진다.

 


DNN으로 MNIST 학습모델 만들기

링크 하나만 걸어둬서 중요성이 떨어진다고 느낄 순 있지만,.. 😓

DNN으로 직접 MNIST를 만드는 실습이므로, 위 이론 내용만큼이나 중요하다!!

 

코드 구현 링크

https://colab.research.google.com/drive/11klRopAyeitrjPVdYZuzYi_q1ukfYdxW#scrollTo=Nr4EE3qYLxA1&uniqifier=2

참고 강의 링크

https://www.youtube.com/watch?v=387eNz4iJI0&list=PLSbzPb--z_ywqGCxWO5cHBUz9g_jig7ss&index=12