Есть ли способ подавить сообщения TensorFlow?

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

I tensorflow/stream_executor/dso_loader.cc: 128] успешно открыт Библиотека CUDA libcublas.so.8.0 локально я tensorflow/stream_executor/dso_loader.cc: 119] Не удалось открыть CUDA библиотека libcudnn.so. LD_LIBRARY_PATH: я tensorflow/stream_executor/cuda/cuda_dnn.cc: 3459] Невозможно загрузить cuDNN DSO я tensorflow/stream_executor/dso_loader.cc: 128] успешно открыта библиотека CUDA libcufft.so.8.0 локально я tensorflow/stream_executor/dso_loader.cc: 128] успешно открыл CUDA библиотека libcuda.so.1 локально я tensorflow/stream_executor/dso_loader.cc: 128] успешно открыл CUDA библиотека libcurand.so.8.0 локально

Есть ли способ подавить те, которые просто говорят, что это было успешным?

Ответ 1

Вы можете установить уровни детализации ведения журнала TensorFlow, используя

tf.logging.set_verbosity(tf.logging.ERROR)

где ERROR может быть любым из DEBUG, INFO, WARN, ERROR или FATAL. Смотрите модуль регистрации.

Тем не менее, установка ERROR не всегда полностью блокирует все журналы INFO, по моему мнению, у вас есть два основных варианта.

  • Если вы используете Linux, вы можете просто grep все выходные строки, начиная с I tensorflow/.
  • В противном случае вы можете полностью перестроить TensorFlow с некоторыми измененными файлами. Смотрите этот ответ.

Ответ 2

В дополнение к ответу Wintro, вы также можете отключить/подавить журналы TensorFlow со стороны C (т.е. более уродливые, начинающиеся с одиночных символов: I, E и т.д.); открытая проблема, связанная с ведением журнала, была обновлена, и теперь вы можете контролировать ведение журнала с помощью переменной среды. Теперь вы можете изменить уровень, установив переменную среды с именем TF_CPP_MIN_LOG_LEVEL; по умолчанию он равен 0 (показаны все журналы), но его можно установить равным 1 для фильтрации журналов INFO, 2 для дополнительной фильтрации журналов WARNING и 3 для дополнительной фильтрации журналов ERROR. Похоже, что он сейчас в master и, вероятно, будет частью будущей версии (т.е. версий после r0.11). Смотрите эту страницу для получения дополнительной информации. Вот пример изменения многословия с использованием Python:

import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'  # or any {'0', '1', '2'}
import tensorflow as tf

Ответ 3

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

def tensorflow_shutup():
    """
    Make Tensorflow less verbose
    """
    try:
        # noinspection PyPackageRequirements
        import os
        from tensorflow import logging
        logging.set_verbosity(logging.ERROR)
        os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'

        # Monkey patching deprecation utils to shut it up! Maybe good idea to disable this once after upgrade
        # noinspection PyUnusedLocal
        def deprecated(date, instructions, warn_once=True):
            def deprecated_wrapper(func):
                return func
            return deprecated_wrapper

        from tensorflow.python.util import deprecation
        deprecation.deprecated = deprecated

    except ImportError:
        pass

Ответ 4

Учитывая предыдущие ответы, в Tensorflow 1.14 фактически возможно устранить все сообщения, сгенерированные библиотекой, включив в код следующие две строки:

os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'
tf.compat.v1.logging.set_verbosity(tf.compat.v1.logging.ERROR)

Этот метод использует как подход к переменной среды, так и модуль ведения журнала Tensorflow.

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