Отладка обратного вызова в TensorFlow с pdb в активном режиме - PullRequest
1 голос
/ 13 июля 2020

Как правильно отлаживать обратный вызов в TensoFlow с pdb в режиме активного выполнения? Следующий сценарий показывает ошибку. Обратный вызов - это функция metri c этой формы:

def my_custom_metric_in_top_k(k):
    def metric_in_top_k(labels,predictions,features):
        import pdb
        pdb.set_trace()
        ...
    return metric_in_top_k

Находясь внутри консоли pdb, я создаю сеанс с sess=tf.compat.v1.InteractiveSession(), затем я могу получить значения тензора метки через labels.eval(). Однако, когда я запускаю predictions.eval(), я получаю следующую ошибку:

*** tensorflow. python .framework.errors_impl.FailedPreconditionError: Ошибка при чтении переменной ресурса group_score / density_2 / bias из контейнера: localhost. Это могло означать, что переменная не инициализирована. Не найдено: ресурс localhost / group_score / batch_normalization_2 / gamma / N10tensorflow3VarE не существует.

Что вызывает ошибку и как заставить predictions.eval() работать? Кроме того, какие-либо советы по отладке обратных вызовов в Tensorflow?

Изменить: я подозреваю, что проблема в том, что существует два разных сеанса: интерактивный и сеанс, который использовался для чтения модели. Однако я читал модели, предоставляя каталог с контрольными точками обучения при создании экземпляра Estimator и вызывая evaluate в оценщике. Мне кажется, что сессия была создана где-то внутри оценщика.

1 Ответ

0 голосов
/ 14 июля 2020

В случае, если у кого-то есть похожая проблема, проблема заключалась в том, что TF отключал режим активного выполнения. Чтобы проверить это, позвоните tf.execusing_eagerly().

...