텐서플로우 튜터리얼 첫페이지에 나오는 소스를 이용해서 숫자 이미지를 불러와 맞추는 테스트를 해보았습니다.



1. MNIST 소스 코드

 

먼저 tensorflow tutorial 페이지를 방문해 봅니다.


https://www.tensorflow.org/tutorials


tensorflow_mnist_keras


이런식으로 우측에 소스가 보입니다.

 

소스를 긁어다가 실행을 해 봅니다.


tensorflow_mnist_keras


tensorflow_mnist_keras


98%의 정확도를 가지고 있습니다.


tensorflow_mnist_keras


작업관리자를 확인해 보니 CPU가 매일 탱자탱자 노는 모습에 울화가 치밀었는데 드디어 오늘 일하는 모습을 보게 되어 기쁩니다.



2. 숫자 이미지

 

이제 숫자 이미지를 준비해야 하는데 따로 준비하기가 귀찮아 MNIST 데이터에 있는 숫자 이미지를 하나 복사해서 사용하기로 했습니다.


tensorflow_mnist_keras



3. 테스트 결과

 

우선 결과 화면을 보면 다음과 같습니다.


tensorflow_mnist_keras


잘 맞추었습니다.



4. 소스 설명

 

4.1 작업 관련 library import


import tensorflow as tf

import matplotlib.pyplot as plt

from PIL import Image


4.2 MNIST 데이터


MNIST 데이터를 불러와서 traintest용으로 분류 합니다.


mnist = tf.keras.datasets.mnist

(x_train, y_train),(x_test, y_test) = mnist.load_data()

x_train, x_test = x_train / 255.0, x_test / 255.0


4.3 tk.keras model


모델을 정의하고 어떤식으로 학습을 진행 할지 컴파일 환경을 설정 합니다.


model = tf.keras.models.Sequential([

  tf.keras.layers.Flatten(),

  tf.keras.layers.Dense(512, activation=tf.nn.relu),

  tf.keras.layers.Dropout(0.2),

  tf.keras.layers.Dense(10, activation=tf.nn.softmax)

])

model.compile(optimizer='adam',

              loss='sparse_categorical_crossentropy',

              metrics=['accuracy']) 


4.4 훈련과 평가


model.fit(x_train, y_train, epochs=5)

score = model.evaluate(x_test, y_test) 


4.5 이미지 로딩


테스트를 진행할 이미지 한개를 불러와 규격에 맞춥니다.

여기서는 이미 규격화된 이미지라 사이즈 조정이 필요 없습니다.


test_num = plt.imread('F:/tensordata/number/58.png')

plt.imshow(test_num, cmap='Greys', interpolation='nearest');

test_num = test_num.reshape((1, 28, 28, 1)) 


4.6 예측

 

이미지를 이용하여 값을 예측하고 출력 합니다.


print('The Answer is ', model.predict_classes(test_num))

plt.show() 



5. 전체 소스


import tensorflow as tf

import matplotlib.pyplot as plt

from PIL import Image

 

mnist = tf.keras.datasets.mnist

(x_train, y_train),(x_test, y_test) = mnist.load_data()

x_train, x_test = x_train / 255.0, x_test / 255.0

 

model = tf.keras.models.Sequential([

  tf.keras.layers.Flatten(),

  tf.keras.layers.Dense(512, activation=tf.nn.relu),

  tf.keras.layers.Dropout(0.2),

  tf.keras.layers.Dense(10, activation=tf.nn.softmax)

])

model.compile(optimizer='adam',

              loss='sparse_categorical_crossentropy',

              metrics=['accuracy'])

 

model.fit(x_train, y_train, epochs=5)

score = model.evaluate(x_test, y_test)

 

############ 추가 소스 ##################

img = Image.open("F:/tensordata/number/58.png")

plt.imshow(img)

plt.show()

 

test_num = plt.imread('F:/tensordata/number/58.png')

 

plt.imshow(test_num, cmap='Greys', interpolation='nearest');

 

test_num = test_num.reshape((1, 28, 28, 1))

 

print('The Answer is ', model.predict_classes(test_num))

plt.show() 


- copy coding -


+ Recent posts