【问题标题】:TensorFlow - validate accuracy with batch dataTensorFlow - 使用批处理数据验证准确性
【发布时间】:2018-05-01 21:31:56
【问题描述】:

正如教程所说,在每个特定步骤之后,我现在需要使用'validation'数据集来验证模型的准确性,最后使用'test'数据集来测试准确性。

示例代码:

correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))

validate_acc = sess.run(accuracy, feed_dict=validate_feed)

但我认为它对我的设备来说太大了,可能会发生 OOM。

如何用一批 validate_feed 输入方法'accuracy' 并得到总的'validate_acc'?

(如果我从数据集中创建一个迭代器,我如何将 next_batch 输入到 'accuracy' 方法中?)

谢谢大家的帮助!

【问题讨论】:

    标签: python tensorflow tensorflow-datasets


    【解决方案1】:

    通常,您使用类似于以下内容的方法来测量准确性:

    correct_prediction = tf.equal(tf.argmax(logits, 1), tf.argmax(y_, 1))
    accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
    

    logits 是您通常传递给 softmax - 交叉熵层的最后一个特征。上面计算了给定批次的准确度,但不是整个数据集的准确度。您可以改为执行以下操作:

    correct_prediction = tf.equal(tf.argmax(logits, 1), tf.argmax(y_, 1))
    total_correct = tf.reduce_sum(tf.cast(correct_prediction, tf.float32))
    

    对测试集中的每个批次执行“total_correct”并累积它们:

      correct_sum = 0
      for batch in data_set:
           batch_correct_count = sess.run(total_correct, feed_dict=validate_feed)
           correct_sum += batch_correct_count
    
      total_accuracy = correct_sum / data_set.size()
    

    使用上面的公式,您可以通过批量处理数据来正确计算整体准确度。当然,这是假设 for 循环在数据集中互斥的批次上运行的假设。您应该避免禁用 iid 采样或从数据集中替换采样,这通常用于随机训练。

    【讨论】:

    • 那么使用 for 循环并计算平均准确率是可以接受的解决方案吗?
    • 不,您没有计算准确度的平均值。您正在累积整个数据集的正确预测计数,而不是准确性。
    【解决方案2】:

    使用tf.metrics.acccuracy。它对准确度进行流式计算,这意味着它会为您积累所有必要的信息,并在需要时返回准确度的当前估计值。

    有关如何使用它的示例,请参阅this answer

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-15
      • 1970-01-01
      • 2018-06-10
      • 2019-03-24
      • 2019-12-04
      • 2015-04-21
      • 2017-01-22
      • 1970-01-01
      相关资源
      最近更新 更多