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)}。
如何将监视器用于我自己的估算器?
感谢。
答案 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。