15
DEEP LEARNING with PYTHON CHAPTER 2

Deep Learning with Python 2-1

Embed Size (px)

Citation preview

Page 1: Deep Learning with Python 2-1

DEEP LEARNING with PYTHON

CHAPTER 2

Page 2: Deep Learning with Python 2-1

딥러닝을�이해하기�위해서는�여러�간단한�수학개념을�알고�

있어야�한다.�이�장에서는�지나치게�기술적이지�않으면서�

이러한�개념에�대한�직관을�구축하려고�한다.

Page 3: Deep Learning with Python 2-1

손글씨�숫자를�분류하는�방법을�배우기�위해�Python�라이브러리�

Keras를�사용하는�신경망의�구체적인�예를�살펴�보겠습니다.�

지금�살펴보는�예는�손으로�쓴�숫자의�그레이�스케일�이미지(28�×�

28�픽셀)를�10가지�범주�(0-9)로�분류하는�것입니다.�

여기에는�MNIST�데이터�세트를�사용합니다.

Page 4: Deep Learning with Python 2-1

from keras.datasets import mnist(train_images, train_labels), (test_images, test_labels) = mnist.load_data()

train_images와�train_labels�형태의�학습�세트로�모델에서�학습할�

데이터를�구성합니다.�그런�다음�모델은�test_images와�test_labels

의�테스트�세트에서�테스트됩니다.�

이미지는�Numpy�배열로�인코딩되어있고,�레이블은�0에서�9까지의�

숫자�배열입니다.�이미지와�레이블은�일대일로�대응합니다.

LISTING 2.1 KERAS에 있는 MNIST 데이터셋 로드하기

Page 5: Deep Learning with Python 2-1

학습�데이터�확인

>>> train_images.shape (60000, 28, 28) >>> len(train_labels) 60000 >>> train_labels array([5, 0, 4, ..., 5, 6, 8], dtype=uint8)

Page 6: Deep Learning with Python 2-1

테스트�데이터�확인

>>> test_images.shape (10000, 28, 28) >>> len(test_labels) 10000 >>> test_labels array([7, 2, 1, ..., 4, 5, 6], dtype=uint8)

Page 7: Deep Learning with Python 2-1

신경망의�핵심�빌딩블록은�데이터�필터라고�생각할�수�있는�데이터�

처리�모듈인�레이어입니다.�레이어는�입력받은�데이터에서�표현을�추

출합니다.�딥러닝의�대부분은�점진적인�데이터�증류의�형태를�구현할�

간단한�레이어들을�연결하는�것으로�구성됩니다.�딥러닝�모델은�마치�

점차�복잡해지는�필터로�구성된�체와�같습니다.

LISTING 2.2 네트워크 구조

Page 8: Deep Learning with Python 2-1

from keras import models from keras import layers network = models.Sequential() network.add(layers.Dense(512, activation='relu', input_shape=(28 * 28,))) network.add(layers.Dense(10, activation='softmax'))

여기에서�우리의�네트워크는�순차적인�두�개의�Dense�레이어로�구성

됩니다.�마지막�레이어는�10-way�softmax�레이어이며,�이는�10�개

의�확률�점수�배열을�반환한다는�것을�의미합니다�(합산하면�1).�각�점

수는�해당�숫자�이미지가�10가지의�숫자�중�하나에�속할�확률입니다.

LISTING 2.2 네트워크 구조

Page 9: Deep Learning with Python 2-1

학습용�네트워크를�만드려면,�컴파일�단계로�세�가지를�선택해야합니다.�

• a�loss�function(손실�함수)�-�네트워크가�훈련�데이터의�성능을�측정�할�수있

는�방법과�어떻게�올바른�방향으로�움직일�수�있는지를�판단하는�함수.�

• an�optimizer(옵티�마이저)�-�네트워크가�데이터와�손실함수�기반으로�네트워

크를�최적화�하는�메커니즘입니다.�

• 훈련�및�테스트�중�모니터링�할�측정기준�-�정확하게�분류�된�이미지의�비율

LISTING 2.3 컴파일 단계

network.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy'])

Page 10: Deep Learning with Python 2-1

학습�전에�데이터를�네트워크에서�예상하는�모양으로�재구성하고�크기

를�조정하여�모든�값이�[0,�1]�간격이되도록�데이터를�사전�처리합니다.�

이전의�훈련�이미지는�[0,�255]�간격의�값을�가진�uint8�타입의�

(60000,�28,�28)배열에�저장되어�있습니다.�이것을�0에서�1�사이의�값

을�가진�float32타입의�(60000,�28�*�28)배열로�변환합니다.

LISTING 2.4 이미지 데이터 준비하기

uint8�:�부호�없는(unsigned)�8비트�정수

train_images = train_images.reshape((60000, 28 * 28)) train_images = train_images.astype('float32') / 255 test_images = test_images.reshape((10000, 28 * 28)) test_images = test_images.astype('float32') / 255

Page 11: Deep Learning with Python 2-1

레이블을�categorically�encode해야합니다.

LISTING 2.5 레이블 준비하기

keras.utils.to_categorical(y,�num_classes=None)�:�클래스�벡터(정수)를�이진�클래스�행렬로�변환

from keras.utils import to_categorical train_labels = to_categorical(train_labels) test_labels = to_categorical(test_labels)

Page 12: Deep Learning with Python 2-1

모델을�학습데이터에�맞추기

>>> network.fit(train_images, train_labels, epochs=5, batch_size=128)Epoch 1/5 60000/60000 [==============================] - 9s - loss: 0.2524 - acc: 0.9273 Epoch 2/5 51328/60000 [========================>.....] - ETA: 1s - loss: 0.1035 - acc: 0.9692

학습�중에는�학습�데이터에�대한�네트워크의�손실과�학습�데이터에�대한�

네트워크의�정확성이라는�두�가지�수량이�표시됩니다.�

학습�데이터에서�빠르게�0.989�(98.9�%)의�정확도에�도달했습니다.

Page 13: Deep Learning with Python 2-1

>>> test_loss, test_acc = network.evaluate(test_images, test_labels) >>> print('test_acc:', test_acc) test_acc: 0.9785

테스트�세트�정확도는�학습�세트�정확도보다�상당히�낮은�97.8�%로�나

타났습니다.�이러한�학습�정확도와�테스트�정확도�간의�차이는�과적합�

(overfitting)의�한�예입니다.�기계�학습�모델은�교육�데이터보다�새�데

이터에서�성능이�떨어지는�경향이�있습니다.

Page 14: Deep Learning with Python 2-1

다음�장에서는�방금�살펴본�부분에�대해�자세히�설명하고�장면�뒤에서�

일어나는�일을�명확히�설명합니다.�그리고�네트워크에서�사용하는�데이

터�저장�객체�인�tensors에�대해�배웁니다.

Page 15: Deep Learning with Python 2-1

THANK YOUPartPrime. Kim YoungJun. [email protected]

Deep�learning�with�python(François�Chollet)의�내용을�참고하였습니다.