안녕하세요 ?
케라스(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])
댓글
댓글 쓰기