기본 콘텐츠로 건너뛰기

Mnist Hands-on (1/4) - Data 살펴보기

 
 안녕하세요 ?

 케라스(Keras)를 활용하여 Mnist 데이터셋을 다루어 보는 Mnist Hands-on 입니다.

 튜토리얼 형식으로 진행하겠습니다.

 이미지 분류 즉 Logistic regression(Classification)을 연습할 수 있습니다.

 CNN(Convolutional Neural Network) 기법의 Hello-world 라고 할 수 있을 것입니다.

 * CNN이란 ?

핸즈온은 깃허브와 구글의 코랩을 활용하여 다음과 같은 순서로 진행하겠습니다.

     1. Mnist data 살펴보기
     2. Mnist - DNN(Deep Neural Network)로 학습해보기
     3. Mnist - CNN으로 학습해서 정확도 높이기
     4. 직접쓴 숫자 넣어보기, 연구 적용 고민

구글 코랩은 클라우드 기반으로 아나콘다를 이용하여 python-tensorflow-keras 환경을 구성 하는 방법에 비해서 훨씬 간편합니다.

https://colab.research.google.com/

또한 구글에서 제공하는 GPU를 활용하여 노트북만 가지고도 언제 어디서나 빠르게 학습을 진행할 수 있습니다.

*깃허브(Github)란? *코랩(colab)이란?


 코랩에 접속하고 '파일->노트 열기->Github탭'에 아래의 url을 적습니다.

 https://github.com/swangkk/Mnist-hands-on

 Mnist hands-on.ipynb 를 열 수 있습니다.


 가장먼저 '런타임->런타임 유형 변경' 메뉴에서 하드웨어 가속기를 GPU로 바꿉니다.

 한번에 12시간동안 사용할 수 있고, None에 비해 엄청 빠릅니다.


 먼저 Mnist 데이터를 살펴보도록 하겠습니다.

 Mnist 데이터셋은 손으로 쓴 숫자 이미지로 60,000개의 train set(28x28픽셀)과 10,000개의 test set으로 구성되어 있습니다.




Colab에서 Shift+Enter 를 눌러서 셀마다 실행할 수 있습니다.

가장 먼저 해야할일은 필요한 라이브러리들을 import 해두는 것입니다.

편리하게도, 꼭 맨앞에서 해야할 필요는 없습니다. 일단은 보기좋게 제일 앞부분에 넣어두겠습니다.

Keras 에 포함되어있는  mnist 데이터셋, 그래프를 그리기위한 라이브러리, 0부터 9까지의 숫자로 이루어진 라벨을 one-hot vector로 변환시키기위한 라이브러리 그리고 배열을 다루는 numpy가 포함되어있습니다.

Mnist 데이터셋을 불러오고 잘 불러왔는지 shape를 확인해봅니다.

Mnist 데이터는 라이브러리형태로 제공이 되어서 손쉽게 불러올 수 있지만, 향후 원하는 데이터를 넣기 위해서는 좀 더 고민이 필요할 것입니다.

 60,000개의 train set과 10,000개의 test set 이 확인되었습니다.


28x28 픽셀의 grayscale 이미지를 배열로 나타내보았습니다.

배열만 보아도 2번 이미지는 숫자'4' 인 것 같습니다.


다음과 같이 이미지 자체를 확인 할 수도 있습니다.


다음은 label 데이터를 살펴볼 차례입니다.

2번 라벨을 보면, 2번 이미지의 정답인 '4'가 들어있습니다.

나중에 classification 에서 활용 할 수 있는 형태인 One hot vector 로도 변형시켜보았습니다.



다음에서 이어집니다.

     1. Mnist data 살펴보기
     2. Mnist - DNN(Deep Neural Network)로 학습해보기
     3. Mnist - CNN으로 학습해서 정확도 높이기
     4. 직접쓴 숫자 넣어보기, 연구 적용 고민



-----------------<CODE>-----------------------------
#주요 라이브러리 불러오기
from keras.datasets import mnist
import matplotlib.pyplot as plt
from keras.utils import np_utils
import matplotlib.ticker as tick
import numpy as np

# Mnist 데이터셋 불러오기
(X_train, Y_train), (X_test, Y_test) = mnist.load_data()

# Mnist 데이터 형태 나타내기
print("X_train Set :", X_train.shape)
print("Y_train label :", Y_train.shape)
print("X_test Set :", X_test.shape)
print("Y_test label :", Y_test.shape)

#X_train Set 중 1개 배열 나타내기
np.set_printoptions (linewidth = np.nan)
print(np.array(X_train[2]))

#X_train Set 중 1개 배열을 이미지로 나타내기
plt.figure(figsize=(5,5))
plt.imshow(X_train[2], cmap='Greys')
plt.show()

#Y_train label 중 1개 나타내기
print('Y_train = ', Y_train[2])

#One hot vector로 변환해서 보기
One_hot = np_utils.to_categorical(Y_train)
print(One_hot[2])

댓글

이 블로그의 인기 게시물

텐서플로와 머신러닝 놀이터(Tensorflow playground and Machine learning playground)

  안녕하세요?   딥러닝을 공부하다보면, Learning rate, Activation, input feature, hidden layers 등 많은 것을 결정하게 됩니다.  보통은 자세하게 알지 못하고, 사실 잘 몰라도 딥러닝 방법을 적용하고 원하는 결과를 얻는데에는 아무런 문제가 없었습니다.   '우리들이 이것저것 해봤더니, Activation은 그냥 ReLU를 사용하면 되더라' 정도의 결론을 내고 넘어가더라고요.   아니면, 너무 앞부분에 대한 설명이어서 gradient decent가 이러저러하고, back propagation이 이러쿵 저러쿵 하는데 여전히 마음속 깊숙히 딥러닝 과정이 그려지지는 않는 듯 합니다.   그래서 텐서플로는 놀이터를 만들어 주었는데요. 코드를 배우느라 머릿속에서 빙글빙글 거리는 개념들을 시각화 해서 다뤄볼 수 있습니다. https://playground.tensorflow.org/   우선 익숙한 단어들이 보이네요 아무 생각 없이 이것 저것 눌러보면서 해볼 수 있어요.  그래서 분류(Classification) 문제 중에 가지고 가장 복잡한 데이터셋을 골라보았습니다.  회오리 모양으로 되어 있는데 과연 이렇게 Non-linearity가 극대화(?)된 데이터셋도 분류가 될까 싶어서 이거저것 눌러보았습니다.  어떤 feature가 회오리 무늬를 만들어낼 수 있을지, 몇겹의 hidden layer가 적당할지 고민해볼 수도 있었고, Epoch가 증가함에 따라 모델이 어떻게 발전해나가는지도 확인 할 수 있었습니다.  결국에는 잘 분류 할 수 있는 모델이 만들어 졌습니다.   비슷한 놀이터가 하나 더 있었습니다. https://ml-playground.com/  머신러닝들을 가지고 해볼 수 있는 곳입니다.  분류 문제만 다룰 수 ...

회로도 그려보기 (Fritzing)

 회로도를 그릴일이 생겼습니다. 간단하게 설명할 수 있는 정도의 회로도면 충분한 상황인데요, 구글에 검색하다보면 브래드보드와 함께 나오는 예쁜 회로들은 어떻게 그린 것일까요 ?   검색결과, "Fritzing" 이라는 소프트웨어 였습니다.    https://fritzing.org/home/  공식사이트에서는 무료라고 하면서도 다운을 받으려면 돈을 내라고 하는데요.  낮은 버전을 찾아서 테스트 해보았습니다.  기본제공 부품도 있지만, 구글에 ~~ fritzing part라고 검색을 하면  .fzpz 확장자의 파일을 다운로드 받을 수 있고 import 하여 사용할 수 있습니다.

Mnist Hands-on (2/4) - DNN(Deep Neural Network)로 학습해보기

앞에서 이어집니다. Mnist hands-on 두번째 입니다.      1. Mnist data 살펴보기      2. Mnist - DNN(Deep Neural Network)로 학습해보기      3. Mnist - CNN으로 학습해서 정확도 높이기      4. 직접쓴 숫자 넣어보기, 연구 적용 고민 앞서 다뤄보았던 Mnist 데이터를 이용해서 간단한 딥러닝을 수행해보려고 합니다. DNN 부분은 Markdown 부분에 코드를 적어놓아서, 아래에 코딩을 직접 따라서 해 볼 수도 있고, 복사/붙여넣기로 진행해볼 수도 있습니다. 주요 라이브러리를 불러오고 Mnist 데이터셋을 불러옵니다. Neural network에 넣기 위해서는 배열의 형태, demension을 맞춰주어야 합니다. 28x28 형태로 되어있던 것을 784 로 만들어 주는 것은 2D 형태였던 데이터를 1열(1D)로 만드는 것을 뜻합니다. 모든 값을 255로 나누는 것은 값을 0-1 사이에 위치시켜(scaling) 학습을 원활하게 합니다.  앞서 설명했던대로, label 값은 one hot vector 형식으로 변경해줍니다. 모델은 64개의 뉴런으로 구성된 Dense 층을 Input 으로 하고, 10개의 뉴런(label 이 10가지) 의 output 층을 갖습니다. Hidden layer은 64개의 뉴런층이 두층 추가되어있습니다. 여기서도 Input 부분의 dimension과 output 부분뉴런 개수가 X_train 값, Y_train 값의 형태와 잘 맞아야 합니다. 최근에 activation은 그냥 relu를 사용하는 경향이 있고, 마지막 output 층에서만 softmax(classification의 경우만) 를 사용하였습니다. *Activation 이란?  loss 를 계산 하는 방법 (Cost...