2017-11-06 89 views
6

Używam tf.estimator w TensorFlow 1.4 i tf.estimator.train_and_evaluate jest świetny, ale muszę wcześniej przestać. Jaki jest preferowany sposób dodania tego?Wcześniejsze zatrzymanie z tf.estimator, jak?

Zakładam, że jest tam gdzieś jakieś tf.train.SessionRunHook. Widziałem, że był stary pakiet contrib z ValidationMonitor, który wydawał się wcześniej zatrzymywać, ale nie wydaje się być już w 1.4. A może preferowaną metodą w przyszłości będzie poleganie na tf.keras (z którym wczesne zatrzymanie jest naprawdę łatwe) zamiast tf.estimator/tf.layers/tf.data?

Odpowiedz

2

Tak, jest tf.train.StopAtStepHook:

wnioski Ten hak albo zatrzymać po kilku krokach zostały wykonane lub ostatni etap został osiągnięty. Można podać tylko jedną z dwóch opcji.

Można również rozszerzyć i wdrożyć własną strategię zatrzymywania w oparciu o wyniki kroku.

class MyHook(session_run_hook.SessionRunHook): 
    ... 
    def after_run(self, run_context, run_values): 
    if condition: 
     run_context.request_stop() 
+0

tf.train.StopAtStepHook nie wydaje się wcześniej przestać? Ale tak, myślę, że mógłbym zrobić swój własny hak, który ocenia zestaw sprawdzania poprawności, po prostu spodziewałem się, że zostanie on wbudowany jak z TensorFlow 1.4. Dzięki! –

+0

@ CarlThomé Widzę, co masz na myśli. Masz rację, tensorflow zawiera teraz tylko trywialne haki sesji i zaleca wstawianie złożonych decyzji z własnymi hakami. – Maxim

+0

Jaką zmienną pomoże mi uchwycić utratę funkcji after_run w każdym kroku w celu zahamowania zatrzymania ealry? –

1

Inną opcją, która nie korzysta z haków jest stworzenie tf.contrib.learn.Experiment (co wydaje się, choć w contrib, aby również wspierać nowe tf.estimator.Estimator).

Następnie trenuj metodą (podobno eksperymentalną) continuous_train_and_eval z odpowiednio dostosowanym continuous_eval_predicate_fn.

Według doku tensorflow The continuous_eval_predicate_fn jest

Funkcja orzeczenie określające, czy kontynuować eval po każdej iteracji.

i wywołany z eval_results z ostatniego przebiegu oceny. W celu wczesnego zatrzymania użyj niestandardowej funkcji, która zachowuje stan jako najlepszy wynik bieżący i licznik i zwraca False po osiągnięciu warunku wcześniejszego zatrzymania.