Home » Python » TensorFlow Error found in Tutorial

TensorFlow Error found in Tutorial

Posted by: admin April 4, 2018 Leave a comment

Questions:

Dare I even ask? This is such a new technology at this point that I can’t find a way to solve this seemingly simple error. The tutorial I’m going over can be found here- http://www.tensorflow.org/tutorials/mnist/pros/index.html#deep-mnist-for-experts

I literally copied and pasted all of the code into IPython Notebook and at the very last chunk of code I get an error.

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

After running this code, I receive this error.

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

I thought that I may need to install or reinstall TensorFlow via conda install https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.5.0-cp27-none-linux_x86_64.whl but conda doesn’t even know how to install it.

Does anyone have any idea of how to work around this error?

Answers:

I figured it out. As you see in the value error, it says No default session is registered. Use 'with DefaultSession(sess)' or pass an explicit session to eval(session=sess) so the answer I came up with is to pass an explicit session to eval, just like it says. Here is where I made the changes.

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

And

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

Now the code is working fine.

Questions:
Answers:

I encountered a similar error when I tried a simple tensorflow example.

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

My solution is to use sess.as_default(). For example, I changed my code to the following and it worked:

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

Another solution can be use InteractiveSession. The difference between InteractiveSession and Session is that an InteractiveSession makes itself the default session so you can run() or eval() without explicitly call the session.

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