如何在张量流学习验证监视器中输入数据?
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
调用。
这会在需要时(即每次触发监视器之前)保存检查点,而不是每秒保存一次。
我试图通过将我的验证集作为 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
调用。
这会在需要时(即每次触发监视器之前)保存检查点,而不是每秒保存一次。