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'
>>> 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)
네트워크 훈련 하는 동안 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% 나왔다. 훈련 세트 보다 정확도가 낮다.
댓글 없음:
댓글 쓰기