Tensorflow: граф не мог быть отсортирован в топологическом порядке только при работе в терминале

Я столкнулся с некоторой проблемой при запуске скрипта python в экземпляре облачных вычислений Google с python 3.6, tensorflow 1.13.1. Я вижу, что несколько человек сталкиваются с похожими проблемами циклов в вычислительном графе в stackoverflow. Но никто из них на самом деле не находит виновного в этом. И я наблюдаю что-то интересное, так что, может быть, кто-то из опытных сможет это понять.

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

2019-05-28 22:28:57.747339: E tensorflow/core/grappler/optimizers/dependency_optimizer.cc:704] Iteration = 0, topological sort failed with message: The graph couldn't be sorted in topological order.
2019-05-28 22:28:57.754195: E tensorflow/core/grappler/optimizers/dependency_optimizer.cc:704] Iteration = 1, topological sort failed with message: The graph couldn't be sorted in topological order.

Мой скрипт для train.py будет выглядеть так:

import A,B,C

...


def main():
    ....


if __name__ == '__main__':
    main()

Итак, я покажу два способа запуска этого скрипта:

ВЕРСИЯ 1:

В терминале

python3 train.py

Это дает мне ошибку, как я указал выше. Когда я использую только процессор, я замечаю, что он выдает что-то вроде failed call to cuInit: CUDA_ERROR_NO_DEVICE: no CUDA-capable device is detected. Поэтому я добавляю GPU в свой экземпляр, но петля в вычислительном графе все еще существует.

ВЕРСИЯ 2 (Здесь происходят странные вещи):

Я просто копирую, ничего не меняя, код из main в блокнот jupyter и запускаю там. Затем внезапно ошибка больше не возникает.

Я действительно не знаю, что происходит под капотом. Я просто заметил, что сообщение в начале выполнения не совпадает между двумя разными способами запуска кода.

Если вы столкнулись с той же проблемой, копирование в блокнот Jupyter может помочь напрямую. Я бы очень хотел поделиться дополнительной информацией, если у кого-то есть идеи, что может быть причиной этого. Спасибо!

Udacity Nanodegree Capstone Project: Классификатор пород собак
Udacity Nanodegree Capstone Project: Классификатор пород собак
Вы можете ознакомиться со скриптами проекта и данными на github .
1
0
1 404
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ну получается, несмотря ни на что, я выбрал неправильный способ построения графика в начале, который не даст loop с моей точки зрения. loop error подсказывает, что я делаю что-то не так. Но на интересный вопрос, о котором я упоминал выше, до сих пор нет ответа! Тем не менее, я хотел бы поделиться своей ошибкой, чтобы любой, кто увидит loop error, подумал, делаете ли вы то же самое, что и я.

В input_fn я использую tensor.eval(), чтобы получить соответствующий numpy.array в середине для взаимодействия с данными вне этой функции. Я предпочитаю не использовать tf.data.Dataset, потому что весь процесс сложен, и я не могу напрямую сжать все это в Dataset. Но оказывается, что этот подход саботирует дизайн статического вычислительного графа Tensorflow. Таким образом, во время обучения он снова и снова тренируется на одной и той же партии. Итак, мой двухцентовый совет: если вы хотите добиться чего-то сверхсложного в своем input_fn. Скорее всего, вам будет лучше или даже лучше, если вы будете использовать старомодный способ моделирования — tf.placeholder.

Другие вопросы по теме