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.
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