我想通過將我的驗證集作爲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.
任何幫助,歡迎! 謝謝, 大衛
你的數據是什麼樣的?當您使用'every_n_steps','steps'和'batch_size'時,您需要多加註意。 –
我現在編輯我的問題來提供一個例子。我無法用'batch_size'和'steps'作爲關鍵字參數調用ValidationMonitor。我爲提供的Ubuntu/Linux 64位,支持GPU的Python 2.7提供的二進制文件安裝了tensorflow。也許最近更改了顯示器的代碼? – dbikard
是的,它有很大的改變。請嘗試最新版本。 –