2016-06-29 3 views
1

Я следую за этот учебник:Как проверить модель в тензорном потоке?

https://www.tensorflow.org/versions/r0.9/tutorials/mnist/beginners/index.html#mnist-for-ml-beginners

То, что я хочу быть в состоянии сделать, это пройти в тестовом изображении х - как Numpy массива, и увидеть полученную SoftMax значение классификации - возможно, другой numpy array. Все, что я могу найти в Интернете о тестировании моделей тензорного потока, работает, передавая тестовые значения и тестовые метки и выводя точность. В моем случае я хочу вывести метки модели только на основе тестовых значений.

Это то, что я пробую: импорт tensorflow в ТФ импорта NumPy как нп из skimage цвета импорта, И.О.

from tensorflow.examples.tutorials.mnist import input_data 
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(100) 
    sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys}) 

#so now its trained successfully, and W and b should be the stored "model" 

#now to load in a test image 

greyscale_test = color.rgb2gray(io.imread('4.jpeg')) 
greyscale_expanded = np.expand_dims(greyscale_test,axis=0) #now shape (1,28,28) 
x = np.reshape(greyscale_expanded,(1,784))  #now same dimensions as mnist.train.images 

#initialize the variable 
init_op = tf.initialize_all_variables() 

#run the graph 
with tf.Session() as sess: 
    sess.run(init_op) #execute init_op 
    print (sess.run(feed_dict={x:x})) #this is pretty much just a shot in the dark. What would go here? 

Сейчас это приводит к следующим образом:

TypeError         Traceback (most recent call last) 
<ipython-input-116-f232a17507fb> in <module>() 
    36  sess.run(init_op) #execute init_op 
---> 37  print (sess.run(feed_dict={x:x})) #this is pretty much just a shot in the dark. What would go here? 

TypeError: unhashable type: 'numpy.ndarray' 

Итак, когда обучение, sess.run передается train_step и feed_dict. Когда я пытаюсь оценить тензор x, будет ли это идти в фиде? Могу ли я использовать sess.run?(/seems, котор я должен), но что будет train_step? Есть ли «test_step» или «evaluation_step»?

ответ

0

ваш tf.Session.run оп нужен выбирает tf.Session.run (Fetches, feed_dict = None, опции = None, run_metadata = None)

https://www.tensorflow.org/versions/r0.9/api_docs/python/client.html#session-management

печати (sess.run (train_step, feed_dict = {х: х})), но он также нуждается в feed_dict для y_

, что вы имеете в виду с:

печати случайные значения, которые мы продегустировать

+0

Убрать эту инструкцию печати, потому что ее, вероятно, сбивает с толку. Можете ли вы поместить свой ответ в виде кода? Я не совсем уверен, что вы имеете в виду. – BigBoy1337

+0

print (sess.run (train_step, feed_dict = {x: x y_: some-value})) –

+0

Что будет в этом случае некоторой величиной? Это то, что я пытаюсь предсказать. – BigBoy1337

3

Вы получаете TypeError, потому что вы используете (изменяемый) numpy.ndarray в качестве ключа для своего словаря, но ключ должен быть tf.placeholder и значением a numpy.

следующие исправления регулировки эта проблема:

x_placeholder = tf.placeholder(tf.float32, [None, 784]) 
# ... 
x = np.reshape(greyscale_expanded,(1,784)) 
# ... 
print(sess.run([inference_step], feed_dict={x_placeholder:x})) 

Если вы просто хотите, чтобы выполнить вывод на вашей модели, это будет печатать numpy массив с предсказаниями.

Если вы хотите, чтобы оценить вашу модель (например, вычислить точность), вы также должны кормить в соответствующей наземной истине этикетки y как в:

accuracy = sess.run([accuracy_op], feed_dict={x_placeholder:x, y_placeholder:y} 

В вашем случае accuracy_op может быть определена как следующим образом:

correct_predictions = tf.equal(tf.argmax(predictions, 1), tf.cast(labels, tf.int64)) 
accuracy_op = tf.reduce_mean(tf.cast(correct_predictions, tf.float32)) 

Здесь predictions является выходным тензором модели.

Смежные вопросы