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



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)

 

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



matplotlib에서 사용하는 color 정보 입니다.

matplotlib 사이트에 있는 프로그램 소스를 가져와 color 명칭을 복사해서 사용하기 위해 몇 줄 추가를 했습니다.

 

https://matplotlib.org/examples/color/named_colors.html

이곳에 가시면 좀더 깔끔한 원본을 볼 수 있습니다.

여기는 개인적으로 컬러 값 복사용으로 사용하려고 만들어 봤습니다.

 

1. Color Table


matplotlib Color name


2. Color Name


black(#000000) k(0,0,0) dimgray(#696969) dimgrey(#696969)
gray(#808080) grey(#808080) darkgray(#A9A9A9) darkgrey(#A9A9A9)
silver(#C0C0C0) lightgray(#D3D3D3) lightgrey(#D3D3D3) gainsboro(#DCDCDC)
whitesmoke(#F5F5F5) w(1,1,1) white(#FFFFFF) snow(#FFFAFA)
rosybrown(#BC8F8F) lightcoral(#F08080) indianred(#CD5C5C) brown(#A52A2A)
firebrick(#B22222) maroon(#800000) darkred(#8B0000) r(1,0,0)
red(#FF0000) mistyrose(#FFE4E1) salmon(#FA8072) tomato(#FF6347)
darksalmon(#E9967A) coral(#FF7F50) orangered(#FF4500) lightsalmon(#FFA07A)
sienna(#A0522D) seashell(#FFF5EE) chocolate(#D2691E) saddlebrown(#8B4513)
sandybrown(#F4A460) peachpuff(#FFDAB9) peru(#CD853F) linen(#FAF0E6)
bisque(#FFE4C4) darkorange(#FF8C00) burlywood(#DEB887) antiquewhite(#FAEBD7)
tan(#D2B48C) navajowhite(#FFDEAD) blanchedalmond(#FFEBCD) papayawhip(#FFEFD5)
moccasin(#FFE4B5) orange(#FFA500) wheat(#F5DEB3) oldlace(#FDF5E6)
floralwhite(#FFFAF0) darkgoldenrod(#B8860B) goldenrod(#DAA520) cornsilk(#FFF8DC)
gold(#FFD700) lemonchiffon(#FFFACD) khaki(#F0E68C) palegoldenrod(#EEE8AA)
darkkhaki(#BDB76B) ivory(#FFFFF0) beige(#F5F5DC) lightyellow(#FFFFE0)
lightgoldenrodyellow(#FAFAD2) olive(#808000) y(0.75,0.75,0) yellow(#FFFF00)
olivedrab(#6B8E23) yellowgreen(#9ACD32) darkolivegreen(#556B2F) greenyellow(#ADFF2F)
chartreuse(#7FFF00) lawngreen(#7CFC00) honeydew(#F0FFF0) darkseagreen(#8FBC8F)
palegreen(#98FB98) lightgreen(#90EE90) forestgreen(#228B22) limegreen(#32CD32)
darkgreen(#006400) g(0,0.5,0) green(#008000) lime(#00FF00)
seagreen(#2E8B57) mediumseagreen(#3CB371) springgreen(#00FF7F) mintcream(#F5FFFA)
mediumspringgreen(#00FA9A) mediumaquamarine(#66CDAA) aquamarine(#7FFFD4) turquoise(#40E0D0)
lightseagreen(#20B2AA) mediumturquoise(#48D1CC) azure(#F0FFFF) lightcyan(#E0FFFF)
paleturquoise(#AFEEEE) darkslategray(#2F4F4F) darkslategrey(#2F4F4F) teal(#008080)
darkcyan(#008B8B) c(0,0.75,0.75) aqua(#00FFFF) cyan(#00FFFF)
darkturquoise(#00CED1) cadetblue(#5F9EA0) powderblue(#B0E0E6) lightblue(#ADD8E6)
deepskyblue(#00BFFF) skyblue(#87CEEB) lightskyblue(#87CEFA) steelblue(#4682B4)
aliceblue(#F0F8FF) dodgerblue(#1E90FF) lightslategray(#778899) lightslategrey(#778899)
slategray(#708090) slategrey(#708090) lightsteelblue(#B0C4DE) cornflowerblue(#6495ED)
royalblue(#4169E1) ghostwhite(#F8F8FF) lavender(#E6E6FA) midnightblue(#191970)
navy(#000080) darkblue(#00008B) mediumblue(#0000CD) b(0,0,1)
blue(#0000FF) slateblue(#6A5ACD) darkslateblue(#483D8B) mediumslateblue(#7B68EE)
mediumpurple(#9370DB) rebeccapurple(#663399) blueviolet(#8A2BE2) indigo(#4B0082)
darkorchid(#9932CC) darkviolet(#9400D3) mediumorchid(#BA55D3) thistle(#D8BFD8)
plum(#DDA0DD) violet(#EE82EE) purple(#800080) darkmagenta(#8B008B)
m(0.75,0,0.75) fuchsia(#FF00FF) magenta(#FF00FF) orchid(#DA70D6)
mediumvioletred(#C71585) deeppink(#FF1493) hotpink(#FF69B4) lavenderblush(#FFF0F5)
palevioletred(#DB7093) crimson(#DC143C) pink(#FFC0CB) lightpink(#FFB6C1)


3. Source Code

"""
========================
Visualizing named colors
========================

Simple plot example with the named colors and its visual representation.
"""
from __future__ import division

import matplotlib.pyplot as plt
from matplotlib import colors as mcolors


colors = dict(mcolors.BASE_COLORS, **mcolors.CSS4_COLORS)

# Sort colors by hue, saturation, value and name.
by_hsv = sorted((tuple(mcolors.rgb_to_hsv(mcolors.to_rgba(color)[:3])), name)
                for name, color in colors.items())
sorted_names = [name for hsv, name in by_hsv]

n = len(sorted_names)
ncols = 4
nrows = n // ncols + 1

fig, ax = plt.subplots(figsize=(8, 5))

# Get height and width
X, Y = fig.get_dpi() * fig.get_size_inches()
h = Y / (nrows + 1)
w = X / ncols

for i, name in enumerate(sorted_names):
    col = i % ncols
    row = i // ncols
    y = Y - (row * h) - h

    xi_line = w * (col + 0.05)
    xf_line = w * (col + 0.25)
    xi_text = w * (col + 0.3)

    color_name = name + '(' + str(colors[name]) +')'
    if col == 3:
        print("{:35}".format( color_name ), end='\n')
    else:
        print("{:35}".format( color_name ), end = "")
    ax.text(xi_text, y, name, fontsize=(h * 0.8), horizontalalignment='left',verticalalignment='center')
    ax.hlines(y + h * 0.1, xi_line, xf_line, color=colors[name], linewidth=(h * 0.6))
   
ax.set_xlim(0, X)
ax.set_ylim(0, Y)
ax.set_axis_off()

fig.subplots_adjust(left=0, right=1, top=1, bottom=0,hspace=0, wspace=0)
plt.show()

- copy coding -


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 -


1···6789101112

+ Recent posts