0

我试图通过将我的验证集作为 numpy 数组传递来在 skflow 中使用验证监视器。

这是一些重现问题的简单代码(我从提供的 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. 

欢迎任何帮助!谢谢,大卫

4

2 回答 2

0

我可以通过 config=tf.contrib.learn.RunConfig(save_checkpoints_secs=1)DNNRegressor通话中添加:来解决这个问题。

于 2016-07-26T12:27:38.620 回答
0

改进 dbikard 的解决方案:

改为添加config=tf.contrib.learn.RunConfig(save_checkpoints_steps=val_monitor._every_n_steps)DNN Regressor通话中。

这会在需要检查点时(即每次触发监视器之前)而不是每秒一次保存检查点。

于 2017-07-22T13:27:57.793 回答