2016-10-21 24 views
6

Tôi đang cố gắng viết một tập lệnh cho phép tôi vẽ hình chữ số và sau đó xác định chữ số đó là gì với mô hình được đào tạo về MNIST.Tensorflow - Thử nghiệm một mạng neural mnist với hình ảnh của riêng tôi

Đây là mã của tôi:

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

Đối với một số lý do kết quả là luôn luôn sai nhưng có độ chính xác 92% khi tôi sử dụng phương pháp thử nghiệm tiêu chuẩn.

Tôi nghĩ rằng vấn đề có thể là làm thế nào tôi mã hóa hình ảnh:

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

Tôi đã cố gắng tìm kiếm trong các mã tensorflow cho the next_batch() function để xem cách họ đã làm điều đó, nhưng tôi không có ý tưởng làm thế nào tôi có thể so sánh với tôi tiếp cận.

Sự cố cũng có thể ở một nơi khác.

Bất kỳ trợ giúp nào để thực hiện độ chính xác 80 +% sẽ được đánh giá cao.

+1

Đối với mã hóa hình ảnh, hãy thử sử dụng .png. Từ các thử nghiệm của tôi, định dạng .jpg là xấu miễn là nó để lại hiện vật (pixel màu xám) trên hình ảnh. – Link

Trả lời

6

tôi thấy sai lầm của tôi: nó được mã hóa ngược lại, người da đen đang ở 255 thay vì 0.

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

cố định nó.

+0

Cảm ơn bạn, điều đó rất hữu ích. –

+0

Bạn có thể đề cập đến kích thước của hình ảnh được sử dụng không? – Pre

+1

@Pre Đây là [một trong những hình ảnh tôi đã thử nghiệm] (https://github.com/cloutier/tf/blob/master/im_01.jpg) –

Các vấn đề liên quan