2016-10-21 5 views
6

Ich versuche ein Skript zu schreiben, das es mir erlaubt, ein Bild einer Ziffer zu zeichnen und dann zu bestimmen, welche Ziffer es bei einem auf MNIST trainierten Modell ist.Tensorflow - Testen eines neuronalen Netzes mit meinen eigenen Bildern

Hier ist mein Code:

import random 
import image 
from tensorflow.examples.tutorials.mnist import input_data 
import tensorflow as tf 
import numpy as np 
import scipy.ndimage 

mnist = input_data.read_data_sets("MNIST_data/", one_hot=True) 


x = tf.placeholder(tf.float32, [None, 784]) 
W = tf.Variable(tf.zeros([784, 10])) 
b = tf.Variable(tf.zeros([10])) 

y = tf.nn.softmax(tf.matmul(x, W) + b) 
y_ = tf.placeholder(tf.float32, [None, 10]) 

cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y), reduction_indices=[1])) 

train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy) 

init = tf.initialize_all_variables() 

sess = tf.Session() 
sess.run(init) 

for i in range(1000): 
    batch_xs, batch_ys = mnist.train.next_batch(1000) 
    sess.run(train_step, feed_dict= {x: batch_xs, y_: batch_ys}) 

print ("done with training") 


data = np.ndarray.flatten(scipy.ndimage.imread("im_01.jpg", flatten=True)) 

result = sess.run(tf.argmax(y,1), feed_dict={x: [data]}) 

print (' '.join(map(str, result))) 

Aus irgendeinem Grunde die Ergebnisse immer falsch sind, aber hat eine 92% ige Genauigkeit, wenn ich die Standard-Testmethode verwenden.

ich glaube, das Problem könnte sein, wie ich das Bild codiert:

data = np.ndarray.flatten(scipy.ndimage.imread("im_01.jpg", flatten=True)) 

Ich habe versucht, in der tensorflow Code für the next_batch() function schauen, um zu sehen, wie sie es getan hat, aber ich habe keine Ahnung, wie ich vergleichen kann gegen meine Ansatz.

Das Problem könnte auch woanders sein.

Jede Hilfe, um die Genauigkeit 80 +% zu machen, würde sehr geschätzt werden.

+1

Verwenden Sie für Bildcodierung .png. Von meinen Tests ist .jpg Format schlecht, solange es Artefakte (graue Pixel) auf dem Bild zurücklässt. – Link

Antwort

6

fand ich meinen Fehler: es umgekehrt codiert, bei 255 statt 0 Schwarzen

data = np.vectorize(lambda x: 255 - x)(np.ndarray.flatten(scipy.ndimage.imread("im_01.jpg", flatten=True))) 

Fest es

waren.

+0

Danke, das war hilfreich. –

+0

Können Sie bitte die Abmessungen des verwendeten Bildes angeben? – Pre

+1

@Pre Hier ist [eines der Bilder, die ich getestet habe] (https://github.com/cloutier/tf/blob/master/im_01.jpg) –

Verwandte Themen