如何在张量流学习验证监视器中输入数据?

How to input data in a tensorflow learn validation monitor?

我试图通过将我的验证集作为 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)

代码运行但只有第一个验证步骤正确完成,然后验证总是 returns 相同的值,即使训练实际上进行得很好,这可以通过 运行 评估来检查测试集在最后。每个验证步骤也会显示以下消息。

INFO:tensorflow:Input iterator is exhausted. 

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

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

改进 dbikard 的解决方案:

改为将 config=tf.contrib.learn.RunConfig(save_checkpoints_steps=val_monitor._every_n_steps) 添加到 DNN Regressor 调用。

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