ubunt GPU 설정 후 Keras 버전 테스트 MNIST

   ubunt GPU RTX3080 설정 후  Keras가 실행 되는지 확인 해봐야 한다.   RTX3080을  설치가 다 끝났는데,  케라스가 설치되어 있지 않아,  계속 재 설치 하였기 때문이다.  

그렇다고 무언가 대단한 것을 테스트 할 필요는 없다.   되는지 만 확인 해야 하기 때문이다.  

아래의 소스코드는 "케라스 창시자에게 배우는 딥러닝" 책에서 인용한 것이다. 

인공지능 처음 시작할때,  파이썬 라이브러리를 사용하여 손글씨를 분류하는 것은 거의  "Hello Python" 급이다.   어떠한 알고리즘으로 되어 있는지는,  나중에 차근히 하면서 볼 수 있다.


1) MNIST의 내용은 아래와 같다. 

 

MNIST

2)  소스코드는 아래와 같이 실행 한다. 


# 버전 확인이 매우 중요하다. 

>>>import tensorflow as tf

>>>tf.__version__

'2.4.0'

>>>import keras

>>>keras.__version__

'2.4.3'


 2.1)  MNIST 데이터는 이미 케라스에 포함되어 있다. 

>>> from keras.datasets import mnist

>>> triain_images, train_labels), (test_images, test_labels) = mnist.load_data()

이미지는 train_images, test images 로 되어있고 train_labels, test_labels는 분류(0,1,2.....9) 까지 되어 있는 라벨 데이터 셋이다. 


 2.2) 신경망의 구조 구현

   - 층(Layer) : 신경망의 핵심구성요소로서 일종의 필터이다. 

   - Dense : 조밀하게 연결된 신경망의 층이다. 

>>> 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'))

>>> network.summary()

Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
dense (Dense)                (None, 512)               401920    
_________________________________________________________________
dense_1 (Dense)              (None, 10)                5130      
=================================================================
Total params: 407,050
Trainable params: 407,050
Non-trainable params: 0
_________________________________________________________________


 2.3) 손실함수와 옵티마이저 

     - 손실함수 (loss function) :  훈련 데이터에서 신경망의 성능을 측정하는 방법으로 네트워크가 옳은 방향으로 학습 될 수 있도록 한다.

    - 옵티마이저(optimizer) : 입력된 데이터와 손실 함수를 기반으로 네트워크를 업데이트 하는 것이다. 

   - 훈련과 테스트 과정을 모티터링 할 지표 


>>> # 데이터 컴파일 단계

>>> network.compile(optimizer='rmsprop',

                loss = 'categorical_crossentropy',

                metrics =['accuracy'])


 2.4) 이미지 데이터를 준비 

  이미지 데이터를 준비 할때는 0~1까지의 데이터로 scale 해야 하므로 255는 나눈다. 


>>> # 이미지 데이터 준비

>>> 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 


2.5 ) 레이블을 범주형으로 인코딩

    데이터 학습에 있어서,  범주형으로 변환 하지 않으면 분류 할 수 없다. 

# 레이블을 범주형으로 해야 한다. 

>>> from keras.utils import to_categorical


>>> train_labels = to_categorical(train_labels)

>>> test_labels = to_categorical(test_labels)


2.6) 네트워크 학습 

    데이터가 준비 되어 있어,  훈련 데이터의 모델을 학습 시킨다. 

>>> # 모델을 학습한다. 

>>> network.fit(train_images, train_labels, epochs=5, batch_size = 128)

Epoch 1/5
469/469 [==============================] - 1s 2ms/step - loss: 0.4287 - accuracy: 0.8735
Epoch 2/5
469/469 [==============================] - 1s 2ms/step - loss: 0.1145 - accuracy: 0.9667
Epoch 3/5
469/469 [==============================] - 1s 2ms/step - loss: 0.0668 - accuracy: 0.9804
Epoch 4/5
469/469 [==============================] - 1s 2ms/step - loss: 0.0453 - accuracy: 0.9862
Epoch 5/5
469/469 [==============================] - 1s 2ms/step - loss: 0.0353 - accuracy: 0.9896
Out[10]:
<tensorflow.python.keras.callbacks.History at 0x7f93c54da310>

네트워크 훈련 하는 동안 2개의 정보가 출력된다.  첫번째는 손실값,  두번째는 정확도 이다. 


2.7)  모델평가 

>>> test_loss, test_acc = network.evaluate(test_images, test_labels)

313/313 [==============================] - 0s 428us/step - loss: 0.0723 - accuracy: 0.9780

테스트 세트의 정확도는 97.8% 나왔다.  훈련 세트 보다 정확도가 낮다. 

훈련 세트 보다 정확도나 낮은 상황은 과대적합(overfitting) 때문이다.  

어찌보면,  이 소스 코드 하나만으로, 딥러닝에 대한 설명이 끝난것 같다. 

  

댓글 없음:

댓글 쓰기

css cheat sheet 클래스 선택자, margin(마진), display , center 조정 간단한 구성 요소

 앞에서는 html의 간단한 sheet를 소개 하였습니다.   html은  주로 골격을 나타나는 것이라, 디자인을 하는데는 css로 하여야 합니다.  아래 코드와 같이 css 관련 하여 매우 간단하게 코딩 하겠습니다.  body 부분의 css 코딩  ...