즐거운프로그래밍

[딥러닝] 딥러닝 활용하기(손글씨 숫자 데이터 인식)

수수께끼 고양이 2023. 10. 30. 16:57
728x90
반응형

 

MNIST라고 하는 손글씨 숫자 데이터를 입력받아 학습시켜봅니다.

import tensorflow as tf

mnist=tf.keras.datasets.mnist

(X,YT),(x,yt)=mnist.load_data() #60000개의 학습데이터, 10000개의 검증데이터

X,x=X/255, x/255 # 60000x28x28, 10000x28x28
X,x=X.reshape((60000,784)), x.reshape((10000,784))

model = tf.keras.Sequential([
    tf.keras.Input(shape=(784)),
    tf.keras.layers.Dense(128,activation='relu'),
    tf.keras.layers.Dense(10,activation='softmax')
]) # 신경망 모양 결정(W, B 내부적 준비)

model.compile(optimizer='adam',
                  loss='sparse_categorical_crossentropy',
                  metrics=['accuracy'])

model.fit(X,YT,epochs=5)

model.evaluate(x,yt)

 

 

 


데이터 모양 살펴보기

import tensorflow as tf
mnist = tf.keras.datasets.mnist

(X,YT),(x,yt)=mnist.load_data() #60000개의 학습데이터, 10000개의 검증데이터
print(X.shape, YT.shape, x.shape, yt.shape)

 

 

 


학습 데이터 그림 그려보기

import tensorflow as tf
mnist = tf.keras.datasets.mnist

(X,YT),(x,yt)=mnist.load_data() #60000개의 학습데이터, 10000개의 검증데이터

import matplotlib.pyplot as plt

plt.imshow(X[0])
plt.show()

print(YT[0])
print(tf.one_hot(YT[0],10))

 

 

 


그림 픽셀 값 출력해보기

import tensorflow as tf

mnist=tf.keras.datasets.mnist

(X,YT),(x,yt)=mnist.load_data() #60000개의 학습데이터, 10000개의 검증데이터

for row in range(28):
    for col in range(28):
        print('%4s'%X[0][row][col], end='')
    print()

 

 

 


학습 데이터 그림 그려보기(그림 25개를 화면에 출력)

import tensorflow as tf

mnist=tf.keras.datasets.mnist

(X,YT),(x,yt)=mnist.load_data() #60000개의 학습데이터, 10000개의 검증데이터

import matplotlib.pyplot as plt

plt.figure(figsize=(10,10))
for i in range(25):
    plt.subplot(5,5,i+1)
    plt.xticks([]) # 눈금
    plt.yticks([]) 
    plt.imshow(X[i],cmap=plt.cm.binary)
    plt.xlabel(YT[i])
plt.show()

 

 

 


인공 신경망 학습 시키고 저장하기

import tensorflow as tf

mnist = tf.keras.datasets.mnist

(X, YT), (x, yt) = mnist.load_data() #60000개의 학습데이터, 10000개의 검증데이터

X, x = X/255, x/255 # 60000x28x28, 10000x28x28
X, x = X.reshape((60000,784)), x.reshape((10000,784))

model = tf.keras.Sequential([
    tf.keras.Input(shape=(784,)),
    tf.keras.layers.Dense(128, activation='relu'),
    tf.keras.layers.Dense(10, activation='softmax')
]) # 신경망 모양 결정(W, B 내부적 준비)

model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

model.fit(X,YT,epochs=5)
 
model.evaluate(x,yt)
 
model.save('model.h5')

 

 

 


학습된 인공신경망 시험하기

import tensorflow as tf
import numpy as np

np.set_printoptions(suppress=True)

mnist=tf.keras.datasets.mnist

_, (x,yt)=mnist.load_data() #60000개의 학습데이터, 10000개의 검증데이터

x=x/255 #10000x28x28
x=x.reshape((10000,784))

model=tf.keras.models.load_model('model.h5')

y=model.predict(x)
print(y[0])

 

 


시험 데이터 그림 그려보기

import tensorflow as tf
import numpy as np

np.set_printoptions(suppress=True)

mnist=tf.keras.datasets.mnist

_, (x,yt)=mnist.load_data() # 60000개의 학습데이터, 10000개의 검증데이터

x=x/255 #10000x28x28
x=x.reshape((10000,784))

model=tf.keras.models.load_model("model.h5")

y=model.predict(x)
print(y[0])

print(np.argmax(y[0]),yt[0])

import matplotlib.pyplot as plt

x=x.reshape(10000,28,28)

plt.figure(figsize=(10,10))
for i in range(25):
    plt.subplot(5,5,i+1)
    plt.xticks([])
    plt.yticks([])
    plt.imshow(x[i], cmap=plt.cm.binary)
    plt.xlabel(np.argmax(y[i]))
plt.show()

 

 

 


잘못된 예측 살펴보기

import tensorflow as tf

mnist=tf.keras.datasets.mnist

_, (x,yt)=mnist.load_data() # 60000개의 학습데이터, 10000개의 검증데이터

x=x/255 #10000x28x28
x=x.reshape((10000,784))

model=tf.keras.models.load_model("model.h5")

y=model.predict(x)

import numpy as np
import matplotlib.pyplot as plt

x=x.reshape(10000,28,28)

cnt_wrong=0
y_wrong=[]
for i in range(10000):
    if np.argmax(y[i]) != yt[i]:
        y_wrong.append(i)
        cnt_wrong += 1
print(cnt_wrong)
print(y_wrong[:10])

 

 

 

 

 

 

 

728x90
반응형