如何在TensorFlow 1.0中为Estimator使用ValidationMonitor?

时间:2017-03-13 13:49:40

标签: machine-learning tensorflow

TensorFlow提供了将ValidationMonitors与几个预定义估算器(如 tf.contrib.learn.DNNClassifier )组合在一起的可能性。 但我想使用ValidationMonitor作为我自己的估算器,我根据1创建了它。

对于我自己的估算工具,我首先初始化一个ValidationMonitor:

validation_monitor = tf.contrib.learn.monitors.ValidationMonitor(testX,testY,every_n_steps=50)

estimator = tf.contrib.learn.Estimator(model_fn=model,model_dir=direc,config=tf.contrib.learn.RunConfig(save_checkpoints_secs=1))

input_fn = tf.contrib.learn.io.numpy_input_fn({"x": x}, y, 4, num_epochs=1000)

在此我按照2所示传递监视器,以获取tf.contrib.learn.DNNClassifier:

estimator.fit(input_fn=input_fn, steps=1000,monitors=[validation_monitor])

此操作失败并打印出以下错误:

  

ValueError:功能与给定信息不兼容。给定的特征:Tensor(“input:0”,shape =(?,1),dtype = float64),必需的签名:{'x':TensorSignature(dtype = tf.float64,shape = TensorShape([Dimension(None)] ),is_sparse = False)}。


如何将监视器用于我自己的估算器?
感谢。

2 个答案:

答案 0 :(得分:1)

将包含 testX testY input_fn 传递给 ValidationMonitor 而不是传递张量时,问题就解决了> testX testY

答案 1 :(得分:0)

对于记录,您的错误是由于ValidationMonitor期望x是{ 'feature_name_as_a_string' : feature_tensor }之类的字典,input_fn中的字典是通过调用tf.contrib.learn.io.numpy_input_fn(...)在内部完成的。

有关如何构建功能词典的更多信息,请参阅Building Input Functions with tf.contrib.learn article of the documentation