0~9까지 의 숫자를 사람이 손필기한 데이터를 학습해서 실제손글씨로 쓴 숫자를 구별하는지 해보기
from tensorflow.keras.datasets import mnist
(X_train, Y_class_train), (X_test, Y_class_test) = mnist.load_data()
print('학습셋 이미지 수: %d 개'%(X_train.shape[0]))
print('테스트셋 이미지 수: %d 개'%(X_test.shape[0]))
import matplotlib.pyplot as plt
plt.imshow(X_train[0],cmap='Greys')
plt.show()
import sys
for x in X_train[0]:
for i in x:
# sys.stdout.write('%d\t'%i)
sys.stdout.write('%3d'%i)
sys.stdout.write('\n')
X_train = X_train.reshape(X_train.shape[0],784)
print(X_train.shape)
X_test=X_test.reshape(X_test.shape[0],784).astype('float64')/255
print('class : %d'%(Y_class_train[0]))
#class 5 를 [0,0,0,0,1,0,0,0,0,0]로 바꿔야함
import tensorflow as tf
Y_train=tf.keras.utils.to_categorical(Y_class_train,10)
Y_test=tf.keras.utils.to_categorical(Y_class_test,10)
from tensorflow.keras.datasets import mnist
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
import sys
import matplotlib.pyplot as plt
import numpy as np
import tensorflow as tf
#seed 값 설정
seed=0
np.random.seed(seed)
tf.random.set_seed(seed)
#mnist 데이터셋 불러오기
(X_train, Y_class_train), (X_test, Y_class_test) = mnist.load_data()
# print('학습셋 이미지 수: %d 개'%(X_train.shape[0]))
# print('테스트셋 이미지 수: %d 개'%(X_test.shape[0]))
# #그래프로 확인하기
# import matplotlib.pyplot as plt
# plt.imshow(X_train[0],cmap='Greys')
# plt.show()
# #코드로 확인
# for x in X_train[0]:
# for i in x:
# # sys.stdout.write('%d\t'%i)
# sys.stdout.write('%3d'%i)
# sys.stdout.write('\n')
#차원 변환 과정
X_train = X_train.reshape(X_train.shape[0],784).astype('float64')/255
X_test=X_test.reshape(X_test.shape[0],784).astype('float64')/255
#class 5 를 [0,0,0,0,1,0,0,0,0,0]로 바꿔야함 바이너리화 과정
import tensorflow as tf
Y_train=tf.keras.utils.to_categorical(Y_class_train,10)
Y_test=tf.keras.utils.to_categorical(Y_class_test,10)
model= Sequential()
model.add(Dense(512, input_dim=784,activation='relu'))
model.add(Dense(10,activation = 'softmax'))
model.compile(loss='categorical_crossentropy',optimizer='adam',metrics=['accuracy'])
import os
MODEL_DIR='./model/'
if not os.path.exists(MODEL_DIR):
os.mkdir(MODEL_DIR)
modelpath='./model/{epoch:02d}-{val_loss:.4f}.hdf5'
Checkpointer= ModelCheckpoint(filepath=modelpath, monitor='val_loss', verbose=0,save_best_only=True)
#자동 중단 설정
early_stopping_callback=EarlyStopping(monitor='val_loss',patience=10)
history=model.fit(X_train, Y_train , validation_data=(X_test,Y_test), epochs=30,
batch_size=200,verbose=0, callbacks=[early_stopping_callback,Checkpointer])
print('\n Test Accuracy : %.4f'%(model.evaluate(X_test, Y_test)[1]))
y_vloss=history.history['val_loss']
y_loss=history.history['loss']
#x값을 지정하고 정확도는 파랑 오차를 빨강 으로 표시
x_len=np.arange(len(y_loss))
plt.plot(x_len, y_vloss,marker='.',c='red',label='Testset_loss')
plt.plot(x_len,y_loss,'o',c='blue',label='Trainset_loss')
plt.legend()
plt.grid()
plt.xlabel('epoch')
plt.ylabel('loss')
plt.show()
#학습결과 확인하기
import tensorflow as tf
import sys
import os
from tensorflow.keras.models import load_model
import cv2
import matplotlib.pyplot as plt
import numpy as np
model= load_model('/content/drive/MyDrive/Colab Notebooks/15-0.0595.hdf5')
model.summary()
test_num1=cv2.imread('/content/drive/MyDrive/Colab Notebooks/dataset/0.jpg')
test_num2=cv2.imread('/content/drive/MyDrive/Colab Notebooks/dataset/2.jpg')
test_num3=cv2.imread('/content/drive/MyDrive/Colab Notebooks/dataset/3.jpg')
test_num4=cv2.imread('/content/drive/MyDrive/Colab Notebooks/dataset/6.jpg')
test_num1=cv2.cvtColor(test_num1, cv2.COLOR_BGR2GRAY)
test_num2=cv2.cvtColor(test_num2, cv2.COLOR_BGR2GRAY)
test_num3=cv2.cvtColor(test_num3, cv2.COLOR_BGR2GRAY)
test_num4=cv2.cvtColor(test_num4, cv2.COLOR_BGR2GRAY)
#위과정을 거치면 색상이 반전됨 -> 아래에서 가시 색상을 반전
test_num1= 255 - test_num1
test_num2= 255 - test_num2
test_num3= 255 - test_num3
test_num4= 255 - test_num4
plt.imshow(test_num1,cmap='Greys')
plt.show()
plt.imshow(test_num2,cmap='Greys')
plt.show()
plt.imshow(test_num3,cmap='Greys')
plt.show()
plt.imshow(test_num4,cmap='Greys')
plt.show()
#학습했을때랑 같은 데이터 타입으로 만들어줌
test_num1= test_num1.reshape(1,784).astype('float64')/255
test_num2= test_num2.reshape(1,784).astype('float64')/255
test_num3= test_num3.reshape(1,784).astype('float64')/255
test_num4= test_num4.reshape(1,784).astype('float64')/255
print('The Answer 0 is ' , model.predict_classes(test_num1))
print('The Answer 2 is ' , model.predict_classes(test_num2))
print('The Answer 3 is ' , model.predict_classes(test_num3))
print('The Answer 6 is ' , model.predict_classes(test_num4))
#반복문으로 처리
import tensorflow as tf
import sys
import os
from tensorflow.keras.models import load_model
import cv2
import matplotlib.pyplot as plt
import numpy as np
#모델을 로드했으면 꼭 summary로 확인해볼것
model= load_model('/content/drive/MyDrive/Colab Notebooks/15-0.0595.hdf5')
model.summary()
n=3 # 내가 가져올 데이터의 양
test_num=[[0]*n] for _ in range(n)
test_num[0]=cv2.imread('/content/drive/MyDrive/Colab Notebooks/dataset/0.jpg')
test_num[1]=cv2.imread('/content/drive/MyDrive/Colab Notebooks/dataset/2.jpg')
test_num[2]=cv2.imread('/content/drive/MyDrive/Colab Notebooks/dataset/3.jpg')
for i in range(n):
test_num[i]=cv2.cvtColor(test_num[i], cv2.COLOR_BGR2GRAY)
test_num[i]= 255 - test_num[i]
plt.imshow(test_num[i],cmap='Greys')
plt.show()
test_num[i]= test_num[i].reshape(1,784).astype('float64')/255
print('The Answer is ' , model.predict_classes(test_num[i]))
'First step > AI 기초반' 카테고리의 다른 글
[TIL]21.07.27 CNN 기초2 (0) | 2021.07.27 |
---|---|
[TIL]21.07.26 CNN (0) | 2021.07.26 |
[TIL]21.07.21openCV 기초 (0) | 2021.07.21 |
[TIL]21.07.20TCP/IP 기초 예외처리 (0) | 2021.07.20 |
[TIL] 21.07.19pandas로 웹크롤링 (0) | 2021.07.19 |