IT shoveler

(Part 4) Keras 설치 & MNIST 예제 실행

작성일 작성자 최혁두
우분투(Ubuntu) 설치에서 파이썬(Python) Deep Learning 까지!
  1. 우분투(Ubuntu) 14.04 64bit 설치 및 기본 설정
  2. CUDA 설치
  3. 가상환경에 Theano 설치
  4. Keras 설치 & MNIST 예제 실행
  5. Python OpenCV로 예제 결과 확인


1. Keras란?

Keras에 대한 설명은 http://keras.io/ 에서 찾아본다.

theano나 tensor flow를 이용한 예제를 보면 코드에는 확실히 보이는 인스턴스가 없는데 백그라운드에서 뭔가가 만들어지고 있다는 생각이 든다.

다른 언어를 쓰던 사람들은 어떨지 모르겠지만 C++을 주로 사용해오던 나로서는 이해가 안 되는 코드가 많다.

Keras는 그러한 '흑마술'을 없애고 눈에 확실히 보이는 코드로 theano나 tensor flow를 wrapping 한 패키지다.

그래서 코드가 간단하고 이해하기도 쉽다.

자세한 응용이 될지는 모르겠지만 나는 개발이 잘된 deep learning으로 어플리케이션을 만들고 싶은지라 상관없을 듯 하다.


2. Dependency 설치

앞선 글들에서 설치한 것들 말고 여기를 보니 추가로 Keras를 위해 설치해야 할 것들이 있다.

여기서부터 쓰는 모든 커맨드는 이전 글에서 만든 가상 환경을 활성화시키고 실행해야 한다.

(sudo ~ 명령어는 가상 환경을 무시한다. 가상 환경이 활성화되건 말건 상관없다.)

sudo apt-get install libhdf5-dev

# 가상 환경 활성화

cd path/to/virtualenv

source env/bin/activate

pip install pyyaml h5py


3. Keras 설치

Keras 설치는 theano 설치와 비슷하다. 설치하기 전 가상 환경을 활성화 시켜주는 것을 잊지 말자.

pip를 이용한 간단한 설치도 있다.

pip install keras

혹은 최신 소스를 받아서 설치할 수도 있다.

어차피 예제를 받으려면 코드를 받아야 하니 아래와 같이 설치하자.

git clone https://github.com/fchollet/keras

cd keras
python setup.py install


4. 예제 실행

이제 드디어 deep learning 예제를 실행해볼 수 있다!!

MNIST 데이터 셋으로 CNN을 학습시키고 필기 숫자를 인식하는 examples/mnist_cnn.py를 돌려볼 것이다.

돌려보기 전에 코드를 훑어보자.

# blur blur...

# 관련 패키지 (라이브러리) 로딩

from __future__ import print_function
import numpy as np
np.random.seed(1337)  # for reproducibility

from keras.datasets import mnist
from keras.models import Sequential
from keras.layers.core import Dense, Dropout, Activation, Flatten
from keras.layers.convolutional import Convolution2D, MaxPooling2D
from keras.utils import np_utils


# CNN 구조 변수
batch_size = 128
nb_classes = 10
nb_epoch = 12

# input image dimensions
img_rows, img_cols = 28, 28
# number of convolutional filters to use
nb_filters = 32
# size of pooling area for max pooling
nb_pool = 2
# convolution kernel size
nb_conv = 3


# MNIST 데이터 불러와서 CNN input 규격에 맞게 변형
# the data, shuffled and split between tran and test sets
(X_train, y_train), (X_test, y_test) = mnist.load_data()

X_train = X_train.reshape(X_train.shape[0], 1, img_rows, img_cols)
X_test = X_test.reshape(X_test.shape[0], 1, img_rows, img_cols)
X_train = X_train.astype('float32')
X_test = X_test.astype('float32')
X_train /= 255
X_test /= 255
print('X_train shape:', X_train.shape)
print(X_train.shape[0], 'train samples')
print(X_test.shape[0], 'test samples')

# convert class vectors to binary class matrices
Y_train = np_utils.to_categorical(y_train, nb_classes)
Y_test = np_utils.to_categorical(y_test, nb_classes)


# 드디어 CNN 모델링 (layer 추가)
model = Sequential()
model.add(Convolution2D(nb_filters, nb_conv, nb_conv,
                        border_mode='valid',
                        input_shape=(1, img_rows, img_cols)))
model.add(Activation('relu'))
model.add(Convolution2D(nb_filters, nb_conv, nb_conv))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(nb_pool, nb_pool)))
model.add(Dropout(0.25))

model.add(Flatten())
model.add(Dense(128))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(nb_classes))
model.add(Activation('softmax'))

model.compile(loss='categorical_crossentropy', optimizer='adadelta')


# 실제 training
model.fit(X_train, Y_train, batch_size=batch_size, nb_epoch=nb_epoch,
          show_accuracy=True, verbose=1, validation_data=(X_test, Y_test))


# 테스트 결과 출력

score = model.evaluate(X_test, Y_test, show_accuracy=True, verbose=0)
print('Test score:', score[0])
print('Test accuracy:', score[1])


이제 돌려보자!

# 다운받은 keras내 example 폴더로 이동

cd examples

python mnist_cnn.py

이렇게 하면 자동으로 MNIST 데이터셋을 다운로드 받고 학습시켜서 테스트 결과까지 보여줄 것이다.

내가 본 결과는 다음과 같다.



이렇게 간단한 코드로 99%라는 성능이 나오다니 좋은 세상이다.

(CNMeM is disabled, CuDNN not available 등의 알림이 뜨긴 하는데 그런 거 없어도 일단은 잘 돌아간다.)

그런데 이렇게 보니 정말 잘 하고 있는 것인지 느낌이 오지 않는다.

직접 입력 이미지와 인식 결과로 나온 숫자를 비교해보고 싶다.

파이썬에서 이미지를 띄우는 것은 image 패키지를 이용하면 편하지만

그걸로 영상을 띄우면 기본 영상뷰어로 뜨기 때문에 새로운 영상을 볼때마다 창이 하나씩 늘어난다. (상당히 귀찮다)

그래서 C++로 할 때 처럼 OpenCV 창을 하나 띄워 거기서 계속 연속 이미지를 보려고 한다.

OpenCV는 현재 Python, Java, Matlab까지 바인딩을 제공하고 있다. (모든 것을 흡수하는 컴퓨터 비전계의 포식자다.)

그러려면 일단 OpenCV 부터 설치를 해야하는데...

그건 다음 글에 설명하도록 하겠다.




맨위로
통합 검색어 입력폼