Как начать отладку TensorFlow

kak nachat otladku tensorflow?v=1656579973

Даниэль Дойч

FLP9aH4jfMjKGA9yTXEAstV-Yj6Gs2FWg-8q
Фото Мэтью Кейна на Unsplash — https://unsplash.com/photos/5brvJbR1Pn8

Содержание

О чем идет речь

Отладка вдвое сложнее, чем написание кода в первую очередь. Поэтому, если вы пишете код как можно разумнее, вы, по определению, недостаточно умны, чтобы наладить его. — БРАЙАН В. КЕРНИГЕН

Отладка в целом может быть изнурительной и сложной задачей. Тем не менее, вам должно быть комфортно просматривать написанный код и выявлять проблемы. Обычно существует много пособий, и процесс отладки часто хорошо документирован для многих языков и фреймворков.

Однако когда дело доходит до TensorFlow, из-за того, как он работает, возникают некоторые новые проблемы.

Как отмечено в официальной документации:

Программа TensorFlow Core состоит из двух дискретных разделов:

  1. Построение вычислительного графика (a tf.graph).
  2. Запуск вычислительного графика (с использованием tf.Session).
5pJQsrMBjTL0bpKAOpec0kfI0MklVYYH7TIa
Источник и кредит https://www.tensorflow.org/guide/graphs

Фактический расчет производится с помощью session.run()что означает, что нам нужно найти способ проверить значение внутри этой функции.

База справочного кода

Как справку, я предоставлю свой репозиторий Github с соответствующим кодом здесь.

Мы будем использовать базовую нейронную сеть, чтобы классифицировать рукописные цифры из набора данных MNIST, используя:

  • tf.nn.softmax_cross_entropy_with_logits_v2 как операция классификации TF для определения убытков
  • tf.train.GradientDescentOptimizer для минимизации потерь

Запуск этой маленькой нейронной сети показывает, что она может достигнуть точности ~92%:

Процесс отладки

Теперь для отладки существует 5 (прагматических) способов добиться этого.

Примечание: часто бывает полезно утверждать формы, чтобы убедиться, что все работает вместе, как задумано.

1. Получить и распечатать значение в Session.run

Это, пожалуй, самый быстрый и простой способ получить нужную информацию.

  • легко и быстро
  • любую оценку можно получить отовсюду
  • необходимо содержать ссылку на тензор, что плохо в сложных моделях

По сути, вы запускаете сеанс в операторе print и передаете его словарю, например: print( f"The bias parameter is: {sess.run(b, feed_dict={x: mnist.test.images, y_: mnist.test.labels})}" )

Если код становится более сложным, можно использовать сеанс partial_run. Но поскольку это экспериментальная функция, я не буду ее реализовывать для демонстрации.

Кроме того, не забывайте о .eval() метод для конкретной оценки тензоров

Полный код смотрите здесь на Github.

2. Используйте операцию tf.Print

Метод tf.Print пригодится при оценке при выполнении, когда мы не хотим явно получить код с помощью session.run(). Это операция идентификации, которая печатает данные при оценке.

  • это позволяет увидеть развитие ценностей при оценке
  • он имеет ограниченную конфигурацию и поэтому может легко засорить терминал

Yufeng G создал фантастическое видео и статью о том, как использовать оператор tf.Print. И, как он отмечает, очень важно структурировать узел печати так, как он используется далее. Как он говорит:

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

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

С оценкой времени выполнения появляется возможность подтверждения во время выполнения tf.Assert .

Полный код смотрите здесь.

3. Используйте визуализацию Tensorboard для мониторинга

Прежде чем погрузиться в этот метод отладки, знайте, что существует отладчик Tensorboard и Tensorboard!

Веб-сайт TF предлагает отличное руководство по внедрению и использованию доски.

Ключом к использованию является сериализация данных. TensorFlow предоставляет итоговые операции, позволяющие экспортировать сокращенную информацию о модели. Они похожи на якоря, которые указывают на доске визуализации, что нужно построить.

а) Очистите график с помощью имен и областей имен

Сначала нам нужно организовать все переменные и операции с scope методы, предоставляемые TF.

with tf.name_scope("variables_scope"):    x = tf.placeholder(tf.float32, shape=[None, 784], name="x_placeholder")    y_ = tf.placeholder(tf.float32, shape=[None, 10], name="y_placeholder")

б) Добавьте tf.summaries

Например:

with tf.name_scope("weights_scope"):    W = tf.Variable(tf.zeros([784, 10]), name="weights_variable")    tf.summary.histogram("weight_histogram", W)

c) Добавьте tf.summary.FileWriter для создания файлов журнала

Совет: не забудьте создать папки для каждого журнала, чтобы избежать накопления графиков.

d) Запустите сервер tensorboard со своего терминала

Например: tensorboard --logdir=./tfb_logs/ --port=8090 --host=127.0.0.1

Переход на сервер tensorboard (в этом случае http://127.0.0.1:8090) показывает следующее:

offiWwNnxs5aZ7J8i3J7hOn1fUVxsXQ3291B
Вкладка распределений tensorboard

Теперь становится понятно полная мощность и использование tensorboard. Это позволяет легко обнаружить ошибки в вашей модели машинного обучения. Мой пример кода очень прост. Представьте модель с несколькими слоями и большим количеством переменных и операций!

Полный код смотрите здесь на Github.

4. Используйте отладчик Tensorboard

Как сказано в репозитории Tensorboard Github:

Эта информационная панель находится в альфа-версии. Некоторые функции еще не полностью функциональны.

Однако его все еще можно использовать и предоставляет отличные функции отладки. Пожалуйста, посмотрите репозиторий Github, чтобы получить надлежащий обзор. Также посмотрите их видео, чтобы глубже понять. Они проделали большую работу.

Чтобы добиться этого, к предыдущему примеру нужно добавить 3 вещи:

  1. Импорт from tensorflow.python import debug as tf_debug
  2. Добавьте свой сеанс с помощью tf_debug.TensorBoardDebugWrapsperSession
  3. Добавьте на свой сервер tensorboard файл debugger_port

Теперь у вас есть возможность наладить всю визуализированную модель, как и любой другой отладчик, но с красивой картой. Вы можете выбрать определенные узлы и проверить их, контролировать выполнение с помощью кнопок «шаг» и «продолжить», а также визуализировать тензоры и их значение.

TfHCodSEr9yVNORtks9rB8mbJccZWEb8vueQ
Функция отладки тензорной платы в действии

Есть еще о многом поговорить относительно этой уникальной функции Tensorflow, но я, пожалуй, посвящена этому еще одну статью.

Смотрите мой полный код здесь на Github.

5. Используйте отладчик TensorFlow

Последним методом, но также очень мощным, является отладчик CLI TensorFlow.

Этот отладчик сосредоточен на интерфейсе командной строки (CLI) tfdbg, в отличие от графического пользовательского интерфейса (GUI) tfdbg, то есть плагина TensorBoard Debugger.

Вы просто завершаете сеанс tf_debug.LocalCLIDebugWrapperSession(sess) а затем вы начинаете отладку с выполнения файла (возможно, нужно добавить файл --debug флаг).

По сути это позволяет вам выполнять и шагать по выполнению вашей модели, предоставляя при этом показатели оценки.

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

Итак, ключевые функции здесь — это команды. invoke_stepper а затем нажать s для прохождения каждой операции. Это основная функция отладчика, а на CLI. Это выглядит так:

iU14oHmUGXh3dF35HToJ6MFFpB-fOTUq7ZIS
Показатели оценки при настройке с помощью CLI

Полный код смотрите здесь на Github.

Вывод

Как показано, существует много способов отладки программы TensorFlow. Каждый метод имеет свои сильные и слабые стороны. Я не упомянул о отладчике Python, потому что он не специфичен для TensorFlow, но имейте в виду, что простой отладчик Python уже дает хорошие идеи!

Есть отличная презентация Вукаина, который также рассказывает об этих концепциях, но также рассматривает некоторые общие советы по отладке. Это совет:

  • правильно называть тензоры
  • проверить и продезинфицировать ввод
  • лесозаготовка
  • утверждение
  • правильное использование исключений
  • быстрый сбой -> немедленно прервать, если что-то не так
  • не повторяйся
  • организуйте свои модули и код

Я очень в восторге от всех функций, которые TensorFlow может предложить людям, создающим системы машинного обучения. Они делают отличную работу! Ждем дальнейшего развития событий! 🙂

Спасибо, что прочли мою статью! Не стесняйтесь оставлять любой отзыв!

Даниэль имеет степень магистра права студентка бизнес-права, работает инженером-программистом и организатором технических мероприятий в Вене. Его текущие личные усилия сосредоточены на машинном обучении.

Подключиться на:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *