【问题标题】:TensorFlow FullyConnected Tutorial: How are the trained weights used for Eval and Test?TensorFlow 全连接教程:训练后的权重如何用于 Eval 和 Test?
【发布时间】:2016-11-13 16:41:16
【问题描述】:

我一直在浏览 TensorFlow FullyConnected 教程。这也使用了帮助代码mnist.py

我理解代码,但是对于一个唠叨的部分。训练神经网络后,应使用训练获得的权重来评估模型在验证(和测试)数据上的精度。但是,我看不到任何地方都可以这样做。

事实上,这是我在 fully_connected_feed.py 中看到的唯一内容

    # Evaluate against the validation set.
    print('Validation Data Eval:')
    do_eval(sess,
            eval_correct,
            images_placeholder,
            labels_placeholder,
            data_sets.validation)

    # Evaluate against the test set.
    print('Test Data Eval:')
    do_eval(sess,
            eval_correct,
            images_placeholder,
            labels_placeholder,
            data_sets.test)

do_eval() 函数似乎传递了一个参数eval_correct,它似乎正在重新计算这个新数据的 logits。我一直在玩 TF 一段时间,但我对这段代码感到困惑。任何想法都会很棒。

【问题讨论】:

    标签: python neural-network tensorflow training-data


    【解决方案1】:

    TensorFlow 创建一个包含权重和偏差的图表。粗略地说,当你训练这个神经网络时,权重和偏差会发生变化,因此它会产生预期的输出。 fully_connected_feed.py (with tf.Graph().as_default():) 中的第 131 行用于告诉 TensorFlow 使用默认图。因此,训练循环中的每一行,包括do_eval() 函数的调用都使用默认图。由于从训练中获得的权重在评估之前没有被重置,因此它们被用于评估。

    eval_correct 是用来代替训练操作的操作,仅评估神经网络而不对其进行训练。这很重要,否则神经网络会被训练成它们,这会导致结果失真(太好)。

    【讨论】:

    • 这有帮助!非常感谢。你能再澄清一下吗?我正在查看 mnist.py 和 inference() 函数。查看第 57 行到第 64 行。您是说第 58 行(权重)和 62 行(偏差)不会执行,但第 64 行会执行吗?它必须执行,因为 relu 必须处理验证和测试数据。
    • 很高兴它有帮助 :) inference() 函数只是构建图并且只被调用一次。评估和训练之间的区别在于,在评估中运行 fully_connected_feed.py 中的 eval_correct 操作(第 148 行)而不是 training_op(第 145 行)。查看 mnist.py(第 103-150 行)以查看相应的函数。 training_op 使用优化器来改变权重和偏差,而 eval_correct 操作只计算神经网络做出的正确预测。
    • 我明白了。我正在努力解决的是eval_correct = mnist.evaluation(logits, labels_placeholder) 以logits 作为参数调用evaluation 函数。 logits 在第 137 行被分配为logits = mnist.inference(images_placeholder,FLAGS.hidden1,FLAGS.hidden2)。因此,即使在验证和测试的情况下也必须调用 inference 函数 - 没有它,将不会为验证和测试计算新的 logits。我认为这一切都错了吗?
    • 第 137 行创建了一系列数学运算的图形。这些操作需要变量,即权重和偏差。使用logits 作为参数并不意味着图形会再次构建,而是给出了计算猜测的方式。要计算任何东西,重要的是开始一个会话并使用第 185 行中的sess.run()as。feed_dict 对于将输入(图像)提供给图形很重要。您可以将evaluationtraining 函数视为对使用图表结果的图表添加的数学运算。
    • 感谢您对我的耐心等待!我在第 118 行看到了 true_count += sess.run(eval_correct, feed_dict=feed_dict),它将被调用用于验证和测试数据集。我想我现在明白 TF 只重新计算图的一部分(而不是整个图)。但是,必须为验证和测试数据集计算新的 logits,唯一重新计算 logits 的地方是第 82 行 minst.py 中的 inference 函数。所以..你是说权重和偏差不会得到重新初始化,但 logits 将被重新计算为 Valid \ Test 数据?
    猜你喜欢
    • 1970-01-01
    • 2018-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-23
    • 2018-03-26
    • 1970-01-01
    • 2020-12-07
    相关资源
    最近更新 更多