2016-07-21 41 views
0

我想通過將我的驗證集作爲numpy數組傳遞來在skflow中使用驗證監視器。如何在tensorflow中輸入數據學習驗證監視器?

下面是一些簡單的代碼來重現問題(我安裝的Ubuntu/Linux 64位所提供的二進制tensorflow,啓用GPU,的Python 2.7):

import numpy as np 
from sklearn.cross_validation import train_test_split 
from tensorflow.contrib import learn 
import tensorflow as tf 
import logging 
logging.getLogger().setLevel(logging.INFO) 

#Some fake data 
N=200 
X=np.array(range(N),dtype=np.float32)/(N/10) 
X=X[:,np.newaxis] 
Y=np.sin(X.squeeze())+np.random.normal(0, 0.5, N) 

X_train, X_test, Y_train, Y_test = train_test_split(X, Y, 
                train_size=0.8, 
                test_size=0.2) 

val_monitor = learn.monitors.ValidationMonitor(X_test, Y_test,early_stopping_rounds=200) 
reg=learn.DNNRegressor(hidden_units=[10,10],activation_fn=tf.tanh,model_dir="tmp/") 
reg.fit(X_train,Y_train,steps=5000,monitors=[val_monitor]) 
print "train error:", reg.evaluate(X_train, Y_train) 
print "test error:", reg.evaluate(X_test, Y_test) 

的代碼運行,但只在第一驗證步驟是正確完成的,然後驗證總是返回相同的值,即使訓練實際上很好,可以通過在最後對測試集進行評估來檢查。每個驗證步驟也會出現以下消息。

INFO:tensorflow:Input iterator is exhausted. 

任何幫助,歡迎! 謝謝, 大衛

+0

你的數據是什麼樣的?當您使用'every_n_steps','steps'和'batch_size'時,您需要多加註意。 –

+0

我現在編輯我的問題來提供一個例子。我無法用'batch_size'和'steps'作爲關鍵字參數調用ValidationMonitor。我爲提供的Ubuntu/Linux 64位,支持GPU的Python 2.7提供的二進制文件安裝了tensorflow。也許最近更改了顯示器的代碼? – dbikard

+0

是的,它有很大的改變。請嘗試最新版本。 –

回答

0

我能夠加入到解決這個問題: config=tf.contrib.learn.RunConfig(save_checkpoints_secs=1)DNNRegressor通話。

0

提高對dbikard的解決方案:

添加config=tf.contrib.learn.RunConfig(save_checkpoints_steps=val_monitor._every_n_steps)DNN Regressor呼叫來代替。

這樣可以在需要時(即每次觸發監視器之前)而不是每秒一次保存檢查點。