我正在运行一个DNNClassifier,我正在训练时监控其准确性.来自contrib/learn的monitors.ValidationMonitor一直很好用,在我的实现中我定义它:
validation_monitor = skflow.monitors.ValidationMonitor(input_fn=lambda: input_fn(A_test, Cl2_test), eval_steps=1, every_n_steps=50)
然后使用来自的电话:
clf.fit(input_fn=lambda: input_fn(A, Cl2), steps=1000, monitors=[validation_monitor])
哪里:
clf = tensorflow.contrib.learn.DNNClassifier(...
这很好用.也就是说,验证监视器似乎已被弃用,并且类似的功能将被替换tf.train.SessionRunHook
.
我是TensorFlow的新手,对我而言,这样的替换实现看起来似乎并不重要.任何建议都非常感谢.同样,我需要在特定步骤后验证培训.首先十分感谢.
有一个未记录的实用程序monitors.replace_monitors_with_hooks()
,它将监视器转换为钩子.该方法接受(i)可以包含监视器和钩子的列表,以及(ii)将使用钩子的Estimator,然后通过在每个Monitor周围包装SessionRunHook来返回钩子列表.
from tensorflow.contrib.learn.python.learn import monitors as monitor_lib clf = tf.estimator.Estimator(...) list_of_monitors_and_hooks = [tf.contrib.learn.monitors.ValidationMonitor(...)] hooks = monitor_lib.replace_monitors_with_hooks(list_of_monitors_and_hooks, clf)
这是不是一个真正的真正解决方案的全面更换ValidationMonitor -我们只是一个非弃用功能包裹起来,而不是问题.但是,我可以说这对我来说是有用的,因为它保留了我需要的所有功能来自ValidationMonitor(即评估每n个步骤,使用度量标准提前停止等)
还有一件事 - 使用这个钩子你需要从一个tf.contrib.learn.Estimator
(只接受监视器)更新到更完整的官方tf.estimator.Estimator
(只接受钩子).因此,您应该将分类器实例化为a tf.estimator.DNNClassifier
,并使用其方法进行训练train()
(这只是重新命名fit()
):
clf = tf.estimator.Estimator(...) ... clf.train( input_fn=... ... hooks=hooks)