Ответ 1
Там есть недокументированная утилита monitors.replace_monitors_with_hooks()
, которая преобразует мониторы в крючки. Метод принимает (i) список, который может содержать как мониторы, так и крючки, и (ii) Оценщик, для которого будут использоваться крючки, а затем возвращает список крючков, обертывая 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
(который принимает только крючки). Итак, вы должны создать экземпляр своего классификатора как tf.estimator.DNNClassifier
, а затем использовать его метод train()
(это просто переименование fit()
):
clf = tf.estimator.Estimator(...)
...
clf.train(
input_fn=...
...
hooks=hooks)