我想在MNIST數據集上運行分類器。我知道我需要初始化會話才能正確執行此操作。爲什麼使用不同類型的會話會影響變量是否在張量流中初始化?
但是,我想要做的另一件事是當我在神經網絡上運行訓練迭代時打印出值。
因此,我嘗試打印出行print(sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys}))
以打印出這些變量的值。下面的代碼是可運行的,如果你有安裝tensorflow
:
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
import argparse
import sys
from tensorflow.examples.tutorials.mnist import input_data
import tensorflow as tf
data_dir='/tmp/tensorflow/mnist/input_data'
mnist = input_data.read_data_sets(data_dir, one_hot=True)
# Create the model
x = tf.placeholder(tf.float32, [None, 784])
W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))
y = tf.matmul(x, W) + b
# Define loss and optimizer
y_ = tf.placeholder(tf.float32, [None, 10])
cross_entropy = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits=y))
train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)
# sess = tf.InteractiveSession()
sess = tf.Session()
tf.global_variables_initializer().run()
# Train
for k in range(1000):
# print loss function at each iteration
if k%100 == 0 and k!=0:
print(sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys}))
batch_xs, batch_ys = mnist.train.next_batch(100)
sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})
我對此有兩個相關的問題。問題是,當我嘗試使用sess = tf.Session()
初始化我會話運行此我得到一個FailedPredictionError
:
FailedPreconditionError (see above for traceback): Attempting to use uninitialized value Variable_14
[[Node: Variable_14/read = Identity[T=DT_FLOAT, _class=["loc:@Variable_14"], _device="/job:localhost/replica:0/task:0/cpu:0"](Variable_14)]]
然後,我嘗試做到這一點使用的Session()
,而不是我用sess = tf.InteractiveSession()
(你可以看到的是上面的行它)。當我這樣做時,它可以正常工作,但它正在打印None
而不是損失函數的實際值。
我的兩個問題是:
- 爲什麼的
Session
我使用的影響變量是否被初始化的類型? - 爲什麼印刷線
print(sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})
打印None
而不是該訓練步驟中損失函數的實際值?我想觀察迭代中的損失函數的變化。
我的聲望不會讓我投票,但謝謝。 – nundo
@nundo你可以接受我的回答。 – Sraw
我想我做過?對不起...我是新來的 – nundo