2015-11-18 14 views
22

Ho il coraggio di chiedere? Questa è una tecnologia così nuova a questo punto che non riesco a trovare un modo per risolvere questo errore apparentemente semplice. Il tutorial su cui sto andando può essere trovato qui- http://www.tensorflow.org/tutorials/mnist/pros/index.html#deep-mnist-for-expertsErrore TensorFlow trovato nell'esercitazione

Ho letteralmente copiato e incollato tutto il codice in IPython Notebook e all'ultimo frammento di codice ho ricevuto un errore.

# To train and evaluate it we will use code that is nearly identical to that for the simple one layer SoftMax network above. 
# The differences are that: we will replace the steepest gradient descent optimizer with the more sophisticated ADAM optimizer. 

cross_entropy = -tf.reduce_sum(y_*tf.log(y_conv)) 
train_step = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy) 
correct_prediction = tf.equal(tf.argmax(y_conv,1), tf.argmax(y_,1)) 
accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float")) 
sess.run(tf.initialize_all_variables()) 
for i in range(20000): 
    batch = mnist.train.next_batch(50) 
    if i%100 == 0: 
     train_accuracy = accuracy.eval(feed_dict={x:batch[0], y_: batch[1], keep_prob: 1.0}) 
    print "step %d, training accuracy %g"%(i, train_accuracy) 
    train_step.run(feed_dict={x: batch[0], y_: batch[1], keep_prob: 0.5}) 

print "test accuracy %g"%accuracy.eval(feed_dict={ 
    x: mnist.test.images, y_: mnist.test.labels, keep_prob: 1.0}) 

Dopo aver eseguito questo codice, si riceve questo errore.

--------------------------------------------------------------------------- 
ValueError        Traceback (most recent call last) 
<ipython-input-46-a5d1ab5c0ca8> in <module>() 
    15 
    16 print "test accuracy %g"%accuracy.eval(feed_dict={ 
---> 17  x: mnist.test.images, y_: mnist.test.labels, keep_prob: 1.0}) 

/root/anaconda/lib/python2.7/site-packages/tensorflow/python/framework/ops.pyc in eval(self, feed_dict, session) 
    403 
    404  """ 
--> 405  return _eval_using_default_session(self, feed_dict, self.graph, session) 
    406 
    407 

/root/anaconda/lib/python2.7/site-packages/tensorflow/python/framework/ops.pyc in _eval_using_default_session(tensors, feed_dict, graph, session) 
    2712  session = get_default_session() 
    2713  if session is None: 
-> 2714  raise ValueError("Cannot evaluate tensor using eval(): No default " 
    2715      "session is registered. Use 'with " 
    2716      "DefaultSession(sess)' or pass an explicit session to " 

ValueError: Cannot evaluate tensor using eval(): No default session is registered. Use 'with DefaultSession(sess)' or pass an explicit session to eval(session=sess) 

ho pensato che io possa essere necessario installare o reinstallare tensorflow via Conda installare https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.5.0-cp27-none-linux_x86_64.whl ma Conda non sa nemmeno come installarlo.

Qualcuno ha idea di come aggirare questo errore?

risposta

29

L'ho capito. Come si vede nel valore error, si dice No default session is registered. Use 'with DefaultSession(sess)' or pass an explicit session to eval(session=sess) quindi la risposta che ho trovato è quella di passare una sessione esplicita a eval, proprio come dice. Ecco dove ho apportato le modifiche.

if i%100 == 0: 
     train_accuracy = accuracy.eval(session=sess, feed_dict={x:batch[0], y_: batch[1], keep_prob: 1.0}) 

E

train_step.run(session=sess, feed_dict={x: batch[0], y_: batch[1], keep_prob: 0.5}) 

Ora il codice sta lavorando bene.

+12

o si può solo creare sessione, sess = tf.InteractiveSession, e poi cadere "session = sess" args, ci vorrà la sessione che hai creato per default –

+0

Grazie. Questo funziona. @YaroslavBulatov bello. :) – dksahuji

1

Ho riscontrato un errore simile quando ho provato un semplice esempio di tensorflow.

import tensorflow as tf 
v = tf.Variable(10, name="v") 
sess = tf.Session() 
sess.run(v.initializer) 
print(v.eval()) 

La mia soluzione è utilizzare sess.as_default(). Per esempio, ho cambiato il mio codice di seguito e ha funzionato:

import tensorflow as tf 
v = tf.Variable(10, name="v") 
with tf.Session().as_default() as sess: 
    sess.run(v.initializer)  
    print(v.eval()) 

Un'altra soluzione può essere l'uso InteractiveSession. La differenza tra InteractiveSession e Session è che una InteractiveSession si rende la sessione predefinita in modo che tu possa eseguire() o eval() senza chiamare esplicitamente la sessione.

v = tf.Variable(10, name="v") 
sess = tf.InteractiveSession() 
sess.run(v.initializer) 
print(v.eval()) 
Problemi correlati