AI

Keras 숫자 인식 샘플 (딥러닝 라이브러리 )

Trillion Binary 2023. 2. 3. 09:24
SMALL

2019. 12. 17. 11:32에 작성했던 글입니다. 

코랩(colab) 이란?
코랩은 구글에서 교육과 과학 연구를 목적으로 개발한 도구이며, 무료로 공개하였습니다. 코랩에서 파이썬 코드를 작성 및 실행 할 수 있습니다.
(파이참, 비주얼스튜디오 등 설치 없이 가능)

https://colab.research.google.com/

 

Google Colaboratory

 

colab.research.google.com

코랩 실행하기
왼쪽 상단 파일 >> 새 Python3노트..... 에디터 실행후 예제 코드 삽입 하고 실행 버튼을 누른다.

 

예제코드
############### 0. 사용할 패키지 불러오기 ###############
from keras.utils import np_utils
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense, Activation
############### 1. 데이터셋 생성하기 ###############
# 아마존에서 자동으로 mnist 파일 다운로드
(x_train, y_train), (x_test, y_test) = mnist.load_data()
# 784 byte 크기의 7만개의 샘플 사용.
# 6만개는 학습(train) 사용 1만개는 테스트 사용
# 255으로 나누어 정규화를 진행.(이미지 픽셀값 범위 0~255)
# 0 ~ 1 사이 수치로 변환. (학습 효과를 높이기 위해)
x_train = x_train.reshape(60000, 784).astype('float32') / 255.0
x_test = x_test.reshape(10000, 784).astype('float32') / 255.0
# np_utils.to_categorical 함수는 원핫인코딩(One-hot encoding) 한다.
y_train = np_utils.to_categorical(y_train)
y_test = np_utils.to_categorical(y_test)
################ 2. 모델 구성하기 ###############
model = Sequential()
model.add(Dense(units=64, input_dim=28*28, activation='relu'))
# activation='softmax' -> 시그모이드(Sigmoid) 합이 1이된다.
model.add(Dense(units=10, activation='softmax'))  
################ 3. 모델 학습과정 설정하기 ###############
model.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])
################ 4. 모델 학습시키기 ###############
# batch_size=32: 32문항 풀고 업데이트
# epoch =5: 5번 반복하여 수행.
hist = model.fit(x_train, y_train, epochs=5, batch_size=32)
################ 5. 학습과정 살펴보기 ###############
print('## training loss and acc ##')
print(hist.history['loss'])
print(hist.history['acc'])
################ 6. 모델 평가하기 ###############
loss_and_metrics = model.evaluate(x_test, y_test, batch_size=32)
print('## evaluation loss and_metrics ##')
print(loss_and_metrics)
###### 7. 모델 사용하기 정확도 테스트 ###############
xhat = x_test[0:1]
yhat = model.predict(xhat)
print('## yhat ##')
print(yhat)
실행 로그
epoch=5 설정 되어 있어 5번 실행
loss= 손실값, acc=정확도 ... 반복 할수록 정확도는 상승
 
60000/60000 [=====================] - 4s 64us/step - loss: 0.6683 - acc: 0.8298
Epoch 2/5
60000/60000 [=====================] - 3s 50us/step - loss: 0.3495 - acc: 0.9025
Epoch 3/5
60000/60000 [=====================] - 3s 50us/step - loss: 0.3008 - acc: 0.9145
Epoch 4/5
60000/60000 [=====================] - 3s 51us/step - loss: 0.2703 - acc: 0.9232
Epoch 5/5
60000/60000 [=====================] - 3s 50us/step - loss: 0.2481 - acc: 0.9292
 
테스트 결과
테스트 샘플(x_test[0:1]) 값이 7 이라고 예측 하고 있다.
## yhat ##
[[4.0804855e-05 4.7461089e-08 7.8313460e-04 1.4411036e-03 3.7688147e-07
2.7031547e-05 1.3679331e-08 9.9757677e-01 8.6176069e-06 1.2211356e-04]]
 
주요 키워드
overfit
학습데이터를 과하게 학습하는 것
예) 시험시작 전까지 책을 보는 행위.(김태영님 강좌에서)
 
one-hot encoding
하나의 값만 True이고 나머지는 모두 False인 인코딩을 말한다.
즉, 1개만 Hot(True)이고 나머지는 Cold(False)이다.
예) [0, 0, 0, 0, 1] = 4
 
Dense 클래스
입출력을 모두 연결해주는 Dense 레이어
Dense(units=64, input_dim=28*28, activation='relu')​​
  • 첫번째 인자 : 출력 뉴런의 수를 설정.
  • input_dim : 입력 뉴런의 수를 설정.
  • init : 가중치 초기화 방법 설정.
    ‘uniform’ : 균일 분포
    ‘normal’ : 가우시안 분포
  • ​activation : 활성화 함수 설정.
    ‘linear’ : 디폴트 값, 입력뉴런과 가중치로 계산된 결과값이 그대로 출력.
    ‘relu’ : rectifier 함수, 은익층에 주로 사용.
    ‘sigmoid’ : 시그모이드 함수, 이진 분류 문제에서 출력층에 주로 사용.
    ‘softmax’ : 소프트맥스 함수, 다중 클래스 분류 문제에서 출력층에 사용.
* 동영상 강의 정리 노트

https://youtu.be/IPR2bYFa6Rw

 

BIG