Estimator.train выдает ValueError: model_fn должен возвращать EstimatorSpec

Вот код, который я использую ...

У меня установлена ​​точка останова в строке 304 ...

Estimator.train (input_fn = train_input_fn, max_steps = num_train_steps)

Кто-нибудь это видел? Я уверен, что у меня установлены правильные версии TensorFlow и BERT.

Полная трассировка стека выглядит следующим образом:

    Exception has occurred: ValueError
    model_fn should return an EstimatorSpec.
    File "C:\Program Files\Python36\Lib\site-packages\tensorflow_estimator\python\estimator\estimator.py", line 1153, in _call_model_fn
 raise ValueError('model_fn should return an EstimatorSpec.')
    File "C:\Program Files\Python36\Lib\site-packages\tensorflow_estimator\python\estimator\estimator.py", line 1191, in _train_model_default
features, labels, ModeKeys.TRAIN, self.config)
    File "C:\Program Files\Python36\Lib\site-packages\tensorflow_estimator\python\estimator\estimator.py", line 1161, in _train_model
return self._train_model_default(input_fn, hooks, saving_listeners)
    File "C:\Program Files\Python36\Lib\site-packages\tensorflow_estimator\python\estimator\estimator.py", line 370, in train
loss = self._train_model(input_fn, hooks, saving_listeners)
    File "C:\Users\brownru\eclipse-workspace\tiaaNLPPython\org\tiaa\ai\penelope\bertNLP\sentiment\sentiment.py", line 304, in <module>
estimator.train(input_fn=train_input_fn, max_steps=num_train_steps)
    File "C:\Program Files\Python36\Lib\runpy.py", line 85, in _run_code
exec(code, run_globals)
    File "C:\Program Files\Python36\Lib\runpy.py", line 96, in _run_module_code
mod_name, mod_spec, pkg_name, script_name)
    File "C:\Program Files\Python36\Lib\runpy.py", line 263, in run_path
pkg_name=pkg_name, script_name=fname)
    ValueError: model_fn should return an EstimatorSpec.

Этот код - моя попытка запустить код Google colab отсюда -


person Russasaurous    schedule 02.01.2020    source источник


Ответы (1)


Ужасно, но ответ на эту проблему заключался в отступах. В приведенном выше примере Google Colab есть функция, называемая def model_fn. Похоже, это функция-оболочка для другой функции, которая фактически создает модель для передачи оценщику TensorFlow. Пока я отлаживал это в коде VS, я поставил точку останова в функции, чтобы попытаться разобраться в том, что происходит, и он продолжал пропускать средний бит, где он проверял «false pos, false_neg и т. Д.

Очевидно, я как-то сломал отступ при редактировании в VS Code, и функции были вложены так, что pylint не выявлял никаких синтаксических проблем - он просто пропускал функцию.

Исправление заключалось в том, чтобы просто скопировать всю функцию def model_fn из записной книжки colab, и вуаля все заработало.

person Russasaurous    schedule 07.01.2020