# 딥러닝에 필요한 케라스 함수 호출
from keras.utils import np_utils
from keras.models import Sequential
from keras.layers import Dense, Conv2D
import cv2
# 필요 라이브러리 호출
import numpy
import tensorflow as tf
# 데이터 셋 호출
from keras.datasets import mnist
# 실행 시마다 같은 결과값 도출을 위한 시드 설정
numpy.random.seed(0)
tf.random.set_seed(0)
# 데이터를 불러와서 각 변수에 저장
(X_train, Y_train), (X_test, Y_test) = mnist.load_data()
# 학습에 적합한 형태로 데이터 가공
X_train = X_train.reshape(X_train.shape[0], 784).astype('float32') / 255
X_test = X_test.reshape(X_test.shape[0], 784).astype('float32') / 255
# 클래스를 학습에 이용하기 위해 데이터 가공
Y_train = np_utils.to_categorical(Y_train, 10)
Y_test = np_utils.to_categorical(Y_test, 10)
# 딥러닝 모델 구조 설정(2개층, 512개의 뉴런 연결, 10개 클래스 출력 뉴런, 784개 픽셀 input 값, relu와 softmax 활성화 함수 이용)
'''
model = Sequential()
model.add(Dense(512, input_dim=784, activation='relu'))
model.add(Dense(10, activation='softmax'))
'''
model = tf.keras.Sequential()
model.add(Dense(512, input_dim=784, activation='relu'))
model.add(tf.keras.layers.Dense(units = 320, activation = 'sigmoid'))
model.add(tf.keras.layers.Dense(units = 160, activation = 'sigmoid'))
model.add(tf.keras.layers.Dense(units = 80, activation = 'sigmoid'))
model.add(tf.keras.layers.Dense(units = 40, activation = 'sigmoid'))
model.add(tf.keras.layers.Dense(units = 20, activation = 'sigmoid'))
model.add(tf.keras.layers.Dense(units = 10, activation = 'softmax'))
model.summary()
# 딥러닝 구조 설정(loss 옵션을 다중 클래스에 적합한 categorical_crossentropy, 옵티마이저는 adam 설정)
model.compile(loss='categorical_crossentropy', optimizer='adam',
metrics=['accuracy'])
# 모델 실행(X_test, Y_test로 검증, 200개씩 30번 학습)
model.fit(X_train, Y_train, validation_data=(X_test, Y_test), epochs=30, batch_size=100, verbose=2)
# 학습 정확도, 검증 정확도 출력
print('\nAccuracy: {:.4f}'.format(model.evaluate(X_train, Y_train)[1]))
print('\nVal_Accuracy: {:.4f}'.format(model.evaluate(X_test, Y_test)[1]))
# 모델 저장
model.save('Predict_Model.h5')
# 딥러닝에 필요한 케라스 함수 호출
from keras.models import load_model
from keras.utils import np_utils
# 필요 라이브러리 호출(PIL은 이미지파일 처리위함)
from PIL import Image
import numpy as np
import random
# test.png는 그림판에서 붓으로 숫자 8을 그린 이미지 파일
# test.png 파일 열어서 L(256단계 흑백이미지)로 변환
#i = random.randrange(0,20)
img = []
sum=0
b =0
answer = [2, 7, 8, 2, 3, 1, 9, 4, 1, 3, 4, 5, 5, 6, 6, 7, 8, 9, 0, 0]
anssuc = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
ansfal = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
success = 0
fail = 0
while(1):
i = random.randrange(0, 20)
#print(i,end = "***********\n")
img = cv2.imread('./numbers/'+str(i)+'.png', cv2.IMREAD_GRAYSCALE)
# 이미지를 784개 흑백 픽셀로 사이즈 변환
img = np.resize(img, (1, 784))
# 데이터를 모델에 적용할 수 있도록 가공
test_data = []
test_data.append(((np.array(img) / 255) - 1) * -1)
# 모델 불러오기
model = load_model('Predict_Model.h5')
# 클래스 예측 함수에 가공된 테스트 데이터 넣어 결과 도출
res = model.predict(test_data,verbose = 0)
res0 = res.argmax(axis=-1)
# 2021/10/02 수정 - 오류시 아래 명령어로 대체 가능합니다.
# res =(model.predict(test_data) > 0.5).astype("int32")
k = res0.max()
ans = answer[i]
#print(k, i)
if k == ans:
success += 1
anssuc[i] += 1
else:
fail += 1
ansfal[i] += 1
b+=1
a = res0.max()
sum = sum+a
if b%10==0:
print('>', end='')
if b>10:
print(sum)
print(success, fail)
print(success/(success+fail), fail/(success+fail))
print(anssuc)
print(ansfal)
break
list0 = []
list0.append(res0.max())
top of page
기능을 테스트하려면 라이브 사이트로 이동하세요.
220104
220104
댓글 0개
좋아요
댓글(0)
bottom of page