如何在Tensorflow培训期间获得错误的价值?

时间:2016-06-24 08:02:54

标签: machine-learning tensorflow

在TensorFlow MNIST初学者教程中,代码摘录如下:

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)
sess = tf.Session()
sess.run(init)

#-----training loop starts here-----
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})

是否可以在循环内访问/检索cross_entropy错误,权重和偏差的值?我想绘制错误,可能还有权重的直方图。

谢谢!

2 个答案:

答案 0 :(得分:4)

正如有人所说,TensorBoard就是那个目的。

我可以在这里给你如何。

首先,让我们为张量定义一个记录min,max,mean和std-dev的函数。

def variable_summaries(var, name):

  with tf.name_scope("summaries"):
    mean = tf.reduce_mean(var)
    tf.scalar_summary('mean/' + name, mean)

    with tf.name_scope('stddev'):
      stddev = tf.sqrt(tf.reduce_sum(tf.square(var - mean)))

    tf.scalar_summary('stddev/' + name, stddev)
    tf.scalar_summary('max/' + name, tf.reduce_max(var))
    tf.scalar_summary('min/' + name, tf.reduce_min(var))
    tf.histogram_summary(name, var)

然后,在构建如下图形后创建一个汇总操作。 此代码在“mnist_tf_log”目录中使用交叉熵保存第一层的权重和偏差。

variable_summaries(W_fc1, "W_fc1")
variable_summaries(b_fc1, "b_fc1")
tf.scalar_summary("cross_entropy:", cross_entropy)

summary_op = tf.merge_all_summaries()
summary_writer = tf.train.SummaryWriter("mnist_tf_log", graph_def=sess.graph)

现在你已经准备好了。 您可以通过返回summary_op来记录这些数据,并将其传递给summary_writer。

以下是每10个培训步骤记录的示例。

for i in range(1000):
    batch_xs, batch_ys = mnist.train.next_batch(100)
    if i % 10 == 0:
        _, summary_str = sess.run( [train_step, summary_op], feed_dict={x: batch_xs, y_: batch_ys})
        summary_writer.add_summary(summary_str, i)
        summary_writer.flush()
    else:
        sess.run( train_step, feed_dict={x: batch_xs, y_: batch_ys})

运行代码后执行TensorBoard。

python /path/to/tensorboard/tensorboard.py --logdir=mnist_tf_log

然后,您可以使用网络浏览器打开http://localhost:6006来查看结果。

enter image description here

答案 1 :(得分:0)