Подтвердить что ты не робот

Ошибка TensorFlow в учебнике

Разве я даже спрашиваю? Это такая новая технология на данный момент, что я не могу найти способ решить эту, казалось бы, простую ошибку. Учебник, который я собираюсь найти, можно найти здесь http://www.tensorflow.org/tutorials/mnist/pros/index.html#deep-mnist-for-experts

Я буквально скопировал и вставил весь код в IPython Notebook, а в самом последнем фрагменте кода получаю сообщение об ошибке.

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

После запуска этого кода я получаю эту ошибку.

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

Я подумал, что мне может понадобиться установить или переустановить TensorFlow через conda install https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.5.0-cp27-none-linux_x86_64.whl, но conda даже не знает, как его установить.

Кто-нибудь знает, как обойти эту ошибку?

4b9b3361

Ответ 1

Я понял это. Как вы видите в ошибке значения, он говорит No default session is registered. Use 'with DefaultSession(sess)' or pass an explicit session to eval(session=sess), поэтому ответ, который я придумал, состоит в том, чтобы передать явный сеанс eval, точно так же, как он говорит. Здесь я сделал изменения.

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

и

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

Теперь код работает нормально.

Ответ 2

Я столкнулся с аналогичной ошибкой, когда я попробовал простой пример тензорного потока.

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

Мое решение - использовать sess.as_default(). Например, я изменил свой код на следующий, и он сработал:

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

Другим решением может быть использование InteractiveSession. Разница между InteractiveSession и Session заключается в том, что InteractiveSession делает сеанс по умолчанию, поэтому вы можете запускать() или eval() без явного вызова сеанса.

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