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



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 -


Keras를 이용하여 모델을 만들어 저장하고 다시 불러오는 코드에서 오류가 발생하였습니다아무래도 설치가 잘못 되었거나 환경 설정에 문제가 있는것 같은데 찾기가 쉽지는 않을것 같아 응급처리를 해서 작업을 하였습니다.

 


1. 오류 내용


오류는 여기에서 발생 했습니다.

loaded_model = model_from_json(loaded_model_json)


GlorotUniform_keras


ValueError : Unknown initializer: GlorotUniform 오류 발생


GlorotUniform_keras

 

좀 다른 형태로 불러와 보았습니다.

model = model_from_json(f.read())

 

역시 이렇게 해도 동일한 부분에 동일한 오류가 발생 합니다.

 


2. 해결 방법


오류 내용을 좀더 읽어 보니 모듈을 저장하는 부분에서 문제가 있는 듯 합니다.

keras가 아닌 tensorflow에 포함된 keras를 사용하는것 같습니다.

 

함수 model_from_json()의 전체 pathtensorflow로 잡아봤습니다.

loaded_model = tf.keras.models.model_from_json(loaded_model_json)

 

오류 없이 잘 작동이 됩니다.



1

+ Recent posts