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



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)

 

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



TensorBoard를 어떻게 작동시키는지 알아보려고 합니다.

아나콘다를 설치하고 tensorflow도 설치 했으니 이건 식은죽 먹기 입니다.

 

1. TensorBoard 실행


먼저 Anaconda Prompt를 실행 합니다.



Tensorflow를 설치한 가상환경으로 이동 합니다.

>activate tensorflow

 

tensorboard 실행 명령어를 입력 합니다.



명령어를 살펴 보겠습니다.

(tensorflow) C:\Users\will>tensorboard --logdir=./path/logs/

 

log의 위치가

C:\Users\will\path\logs\

여기이고 이곳의 파일을 사용하라는 뜻입니다.


각자 알아서 path를 생성해 줍니다.

엔터키를 눌러 명령을 실행 합니다.



tensorboard가 실행이 되었다는군요.

종료는 키보드 Ctrl + C 를 누르면 되고 기본 Port6006 이라네요.

 


2. TensorBoard 브라우저

 

텐서보드는 콘솔로 띄우고 화면을 보는것은 웹브라우저에서 봐야 합니다.

브라우저를 하나 열고 http://localhost:6006을 입력 합니다.



아직 아무 작업도 하지 않아서 그냥 텍스트 안내만 나오고 있습니다.

 


3. TensorBoard port 변경 하기


만약 기존에 다른 프로그램에서 port 6006을 사용하고 있다면

텐서보드 기동시 변경을 해주면 됩니다.

(tensorflow) C:\Users\will>tensorboard --logdir=./path/logs/ --port=9999




변경된 port로 잘 실행 됩니다.

 


4. Tensorboard 메뉴


어떤 메뉴들이 있는지 확인해 볼까요?



다양한 메뉴들이 존재 합니다.

조만간 하나씩 사용해 봐야 겠네요.

 

 

5. Tensorboard 테스트

 

간단한 프로그램으로 텐서보드를 사용해 보겠습니다.

먼저 프로그램 작성 전에 아무 곳이나 log 저장할 위치를 설정해야 합니다.


저는 F:\tensordata\log로 결정 했습니다.

jupyter notebook에 프로그램을 작성합니다.



그냥 더하기 입니다.

그래프 저장은 절대값으로 입력해 보았습니다.

tensorflow가 덧셈을 잘 하는군요.

그래프가 로그 디렉토리에 생성이 되었는지 한번 가봅니다.



생성이 되어있네요.

그럼 이미지로 보도록 하겠습니다.

 

텐서보드를 띄우고



브라우저를 열어서 확인해 봅니다.

 

http://localhost:9999

url이 자동으로 변경이 되었습니다.

http://localhost:9999/#graphs&run=.


tensorboard


단순한 이미지지만 처음 만들었으니 용서가 됩니다.

 

tensorflow 코딩만 할 수 있으면 tensorboard도 잘 사용할 수 있겠습니다.


- copy coding -


Tensorflow Lite 버전이 공개 되어 어느정도 크기 인지 성능은 어느정도 인지

안드로이드에서는 어떤지 궁금해서 다운받아 테스트 해보았습니다.

 

라이센스는

http://www.apache.org/licenses/LICENSE-2.0

입니다.


소스 GitHub 위치는

https://github.com/amitshekhariitbhu/Android-TensorFlow-Lite-Example

에 있습니다.

 

설명은 Git 설치, GitHub 회원가입, Android studioGit 설정이

완료되어 있는 상태에서 진행합니다.

안되어 있다면 아래 링크를 참고 하세요.

[GitHub] GitHub 회원 가입하기

 

[Git] Git 설치 하기 (Windows 용 - Git-2.20.1-64-bit)

 

[Git] Git 무설치 버전 windows 설치 하기

 

[안드로이드] Android studio에 github 환경 설정 하기

 


1. 안드로이드 스튜디오에 소스 받기

 

안드로이드 스튜디오를 실행합니다.



3번째 Check out project from Version Control에서

Git를 선택 합니다.

 

Git가 있는 URL과 다운받을 local Directory 위치를

입력하는 창이 나옵니다.



GitHub에 접속합니다.



[Clone or download]를 클릭하면 하단에 url이 나타납니다.

여기서 url 옆에 있는 아이콘을 클릭하여 클립보드에 저장합니다.

그냥 url을 드래그해서 복사해도 됩니다.



저장된 주소를 URL 입력란에 Ctrl + V로 붙여 넣기 합니다.

 

이제 주소가 맞는지 [Test] 버튼을 클릭합니다.



하단에 연결이 성공했다고 하니 안심하고

[Clone] 버튼을 누릅니다.

신규로 디렉토리를 생성할것인가 물어보는데



[Yes]를 선택해서 디렉토리를 생성하도록 합니다.

 

프로젝트 import 방법에 대한 창이 나옵니다.



여기서는 default가 상단 라디오버튼이 선택되어 있습니다.

기존에 소스가 있는 경우입니다.

당연히 처음 받는 소스이니 두번째 라디오 버튼

Import project from external model을 선택하고 [Finish] 버튼을 클릭 합니다.

 


열심히 다운로드가 진행 됩니다.

오류가 발생했습니다.

버전에 맞지 않나보네요.



우측 파란색 글씨를 눌러 android-27을 설치 합니다.



이번엔 26이 없다고 하네요



설치하라고 파란색 글씨를 또 눌러줍니다.



영차영차 열심히 설치를 알아서 계속 진행합니다.

이번엔 Gradle Plugin을 업데이트 해야 한답니다.



그래 여기까지 왔는데 이거 하나 못하겠냐

[Update]를 눌러 줍니다.

한참 sync를 맞추고 완료가 되었습니다.



우측 빨간글씨는

Configuration 'compile' is obsolete and has been replaced with 'implementation' and 'api'.

명칭이 변경 되었지요.

그냥 무시하고

 


2. 실행

 

실행을 해보겠습니다.

 

실행버튼을 누르고 카메라를 사용해야 하니 가상디바이스가 아닌

실제 핸드폰을 연결해서 테스트 합니다.




3. 결과

 

가까이 있는 키보드하고 종이컵을 찍어서 테스트 해보았습니다.

 

tesorflow light android


그런대로 결과가 나오는 군요.

책상이 좀 지져분 해서인지 인식률이 낮게 나옵니다.

 


4. APK


바이러스 업습니다.

심심하면 한번 다운받아서 한번 테스트 해보세요.


tensorflow_lite.apk


- copy coding -


123

+ Recent posts