2017-07-05 22 views
1

我的數據是按時間順序列出的一組匹配和結果。通常情況下,「離線」驗證的目的,我會跑這樣的事情來測試我的算法如何工作的:使用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一樣加速在線驗證?

+0

@ user1735003它們不可互換。第一種方法僅訓練訓練數據,第二種方法在評估測試數據集中的每個數據點是否預測正確後重新訓練自己,這更能反映真實情況。 – michaelsnowden

+0

@ user1735003驗證步驟不計算相同的事情。版本1中的驗證準確性比版本2更低且更不現實,因爲版本2在每個數據點之後都改進了它的參數 - 注意會話在版本2中的驗證步驟期間也運行優化器,而版本1中未發生 – michaelsnowden

回答

0

有一個快速瀏覽一下報紙後,這裏就是我的想法:

  • 他們更新自己的幾個(數量不詳)的樣品模型,而不是一個 - 可以說,他們採取了足夠的樣本填寫一個小批次。
  • 然後他們再驗證一次。

它相對於您的實現意味着什麼:

  • 你並不需要在整個摺疊在線重新訓練,只是在minibatch
  • 您不必計算驗證準確的一個樣本,採取任何一種方法都更快(minibatches,或甚至整個數據集,如在你的代碼,如果你能負擔得起)。

以上兩點都會顯着加快速度。

最後,不要使用測試代替驗證,特別是在涉及培訓時。

+0

每次比賽結束後,我都必須更新模型參數,所以這不起作用。他們在他們的論文中做了同樣的事情:「算法首先在訓練集上訓練(這是第III-C節中描述的」離線訓練「階段),然後在不相交的測試數據集 上評估其性能, *每次測試結果後更新參數** (「在線更新」階段)「 – michaelsnowden

+0

是的,我也看到」*我們從數據庫中恢復了參與比賽的所有球員的最後幾場比賽的組成結束,要恢復的匹配數量需要驗證*(..)「。在我看來,他們並沒有使用單一樣本。 – user1735003

+0

無論我使用的是最新比賽還是最新比賽中所有參與者的最後一場比賽,這個回答都無助於加速在線驗證步驟,因爲模型參數在每次新比賽後仍然需要更新在線更新階段進行匹配。 – michaelsnowden