"在线"使用TensorFlow进行验证

时间:2017-07-05 00:08:55

标签: python validation optimization tensorflow

我的数据是按时间顺序列出的一组匹配和结果。通常,出于"离线"验证,我运行这样的东西来测试我的算法的工作情况:

# train
for matches_batch, outcomes_bach in train_data:
    sess.run(optimizer, feed_dict={matches: matches_batch, outcomes: outcomes_batch})

# offline validation (just compute accuracy on test set)
test_accuracy = sess.run(accuracy, feed_dict={matches: test_matches, outcomes: test_outcomes})
print 'test accuracy = {:.2%}'.format(test_accuracy)

然而,在现实世界中。事情将会完成"在线",我在离线训练一堆火柴,然后每当我预测新的匹配时,我也会通过使用结果运行优化器来更新我的模型参数,如下所示:

# train
for matches_batch, outcomes_bach in train_data:
    sess.run(optimizer, feed_dict={matches: matches_batch, outcomes: outcomes_batch})

# online validation (update accuracy and model with each new data point)
test_accuracy = 0.0
for match, outcome in zip(test_matches, test_outcomes):
    _, acc = sess.run([optimizer, accuracy], feed_dict={matches: [match], outcomes: [outcome])
    test_accuracy += acc / len(test_matches)
print 'test accuracy = {:.2%}'.format(test_accuracy)

问题在于上述在线测试的实现(它是验证方案here的一部分)很慢。

有没有办法通过tensorflow加速这样的在线验证?

1 个答案:

答案 0 :(得分:0)

快速浏览一下这篇论文后,我想到了这一点:

  • 他们使用一些(数量未知)样本更新他们的模型,而不是一个 - 可以说他们需要足够的样本来填充小批量。
  • 然后他们一次验证。

对于您的实施意味着什么:

  • 您不需要在整个折叠处进行在线培训,只需在一个小型巴士上进行重新培训
  • 您不必一次计算一个样本的验证准确度,采用哪种方法更快(如果您能负担得起的话,可以使用代码中的整个数据集)。

上述两点都应该显着加快速度。

最后,不要使用测试来代替验证,特别是当它涉及到培训时。