Подтвердить что ты не робот

Отключить отладочную информацию Tensorflow

Под отладочной информацией я имею в виду то, что TensorFlow показывает в моем терминале о загруженных библиотеках и найденных устройствах и т.д., А не об ошибках Python.

I tensorflow/stream_executor/dso_loader.cc:105] successfully opened CUDA library libcublas.so locally
I tensorflow/stream_executor/dso_loader.cc:105] successfully opened CUDA library libcudnn.so locally
I tensorflow/stream_executor/dso_loader.cc:105] successfully opened CUDA library libcufft.so locally
I tensorflow/stream_executor/dso_loader.cc:105] successfully opened CUDA library libcuda.so.1 locally
I tensorflow/stream_executor/dso_loader.cc:105] successfully opened CUDA library libcurand.so locally
I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:900] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
I tensorflow/core/common_runtime/gpu/gpu_init.cc:102] Found device 0 with properties: 
name: Graphics Device
major: 5 minor: 2 memoryClockRate (GHz) 1.0885
pciBusID 0000:04:00.0
Total memory: 12.00GiB
Free memory: 11.83GiB
I tensorflow/core/common_runtime/gpu/gpu_init.cc:126] DMA: 0 
I tensorflow/core/common_runtime/gpu/gpu_init.cc:136] 0:   Y 
I tensorflow/core/common_runtime/gpu/gpu_device.cc:717] Creating TensorFlow device (/gpu:0) -> (device: 0, name: Graphics Device, pci bus id: 0000:04:00.0)
I tensorflow/core/common_runtime/gpu/gpu_bfc_allocator.cc:51] Creating bin of max chunk size 1.0KiB
...
4b9b3361

Ответ 1

Вы можете отключить все журналы отладки, используя os.environ:

import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3' 
import tensorflow as tf

Проверено на tf 0,12 и 1,0

Подробно,

0 = all messages are logged (default behavior)
1 = INFO messages are not printed
2 = INFO and WARNING messages are not printed
3 = INFO, WARNING, and ERROR messages are not printed

Ответ 2

Обновление 2.0 (08.10.19) Настройка TF_CPP_MIN_LOG_LEVEL должна все еще работать (см. ниже в обновлении v0. 12+), но в настоящее время существует открытая проблема (см. Issue # 31870). Если настройка TF_CPP_MIN_LOG_LEVEL не работает для вас (опять же, см. ниже), попробуйте сделать следующее, чтобы установить уровень журнала:

import tensorflow as tf
tf.get_logger().setLevel('INFO')

Кроме того, см. документацию по tf.autograph.set_verbosity, в которой задается подробность сообщений журнала автографов, например:

# Can also be set using the AUTOGRAPH_VERBOSITY environment variable
tf.autograph.set_verbosity(1)

v0. 12+ Обновление (20.05.17), работа через TF 2. 0+:

В TensorFlow 0. 12+, для этой проблемы, теперь вы можете управлять регистрацией через переменную окружения, называемую TF_CPP_MIN_LOG_LEVEL; по умолчанию оно равно 0 (показаны все журналы), но может быть установлено одно из следующих значений в столбце Level.

  Level | Level for Humans | Level Description                  
 -------|------------------|------------------------------------ 
  0     | DEBUG            | [Default] Print all messages       
  1     | INFO             | Filter out INFO messages           
  2     | WARNING          | Filter out INFO & WARNING messages 
  3     | ERROR            | Filter out all messages      

Смотрите следующий общий пример ОС с использованием Python:

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

Чтобы быть точным, вы также можете установить уровень для модуля Python tf_logging, который используется, например, в. сводные операции, тензорная доска, различные оценки и т.д.

# append to lines above
tf.logging.set_verbosity(tf.logging.ERROR)  # or any {DEBUG, INFO, WARN, ERROR, FATAL}

Для версии 1.14 вы будете получать предупреждения, если не переключитесь на использование API v1 следующим образом:

# append to lines above
tf.compat.v1.logging.set_verbosity(tf.compat.v1.logging.ERROR)  # or any {DEBUG, INFO, WARN, ERROR, FATAL}


Для предыдущих версий TensorFlow или TF-Learn Logging (v0.11.x или ниже):

Посмотрите страницу ниже для получения информации о ведении журнала TensorFlow; с новым обновлением вы можете установить подробность ведения журнала на DEBUG, INFO, WARN, ERROR или FATAL. Например:

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

На странице дополнительно отображаются мониторы, которые можно использовать с моделями TF-Learn. Вот страница.

Это не блокирует все журналы (только TF-Learn). У меня есть два решения; одно - "технически правильное" решение (Linux), а другое - перестройка TensorFlow.

script -c 'python [FILENAME].py' | grep -v 'I tensorflow/'

Для прочтения см. этот ответ, который включает изменение исходного кода и перестройку TensorFlow.

Ответ 3

У меня тоже была эта проблема (на tensorflow-0.10.0rc0), но я не мог исправить проблему регистрации журналов чрезмерного носа с помощью предлагаемых ответов.

Мне удалось решить это, прощупывая непосредственно в регистратор тензорного потока. Не самый правильный из исправлений, но отлично работает и только загрязняет тестовые файлы, которые прямо или косвенно импортируют shadoworflow:

# Place this before directly or indirectly importing tensorflow
import logging
logging.getLogger("tensorflow").setLevel(logging.WARNING)

Ответ 4

Для совместимости с Tensorflow 2.0 вы можете использовать tf.get_logger

import logging
tf.get_logger().setLevel(logging.ERROR)

Ответ 5

Поскольку TF_CPP_MIN_LOG_LEVEL не работает для меня, вы можете попробовать:

tf.logging.set_verbosity(tf.logging.WARN)

У меня работало в tenorflow v1.6.0

Ответ 6

Обычный менеджер журналов python3 у меня работает с tenorflow == 1.11.0:

import logging
logging.getLogger('tensorflow').setLevel(logging.INFO)

Ответ 7

Чтобы добавить здесь некоторую гибкость, вы можете добиться более детального контроля над уровнем ведения журнала, написав функцию, которая отфильтровывает сообщения так, как вам нравится:

logging.getLogger('tensorflow').addFilter(my_filter_func)

где my_filter_func принимает объект LogRecord качестве входных данных [ LogRecord docs ] и возвращает ноль, если вы хотите, чтобы сообщение было выброшено; ненулевое в противном случае.

Вот пример фильтра, который хранит только каждое n-е информационное сообщение (Python 3 из-за использования здесь nonlocal):

def keep_every_nth_info(n):
    i = -1
    def filter_record(record):
        nonlocal i
        i += 1
        return int(record.levelname != 'INFO' or i % n == 0)
    return filter_record

# Example usage for TensorFlow:
logging.getLogger('tensorflow').addFilter(keep_every_nth_info(5))

Все вышеперечисленное предполагает, что TensorFlow уже настроил свое состояние регистрации. Вы можете убедиться в этом без побочных эффектов, вызвав tf.logging.get_verbosity() перед добавлением фильтра.

Ответ 8

Да, я использую tf 2.0-beta и хочу включить/отключить ведение журнала по умолчанию. Переменная окружения и методы в tf1.X, похоже, больше не существуют.

Я обошел PDB и обнаружил, что это работает:

# close the TF2 logger
tf2logger = tf.get_logger()
tf2logger.error('Close TF2 logger handlers')
tf2logger.root.removeHandler(tf2logger.root.handlers[0])

Затем я добавляю свой собственный API логгера (в данном случае на основе файлов)

logtf = logging.getLogger('DST')
logtf.setLevel(logging.DEBUG)

# file handler
logfile='/tmp/tf_s.log'
fh = logging.FileHandler(logfile)
fh.setFormatter( logging.Formatter('fh %(asctime)s %(name)s %(filename)s:%(lineno)d :%(message)s') )
logtf.addHandler(fh)
logtf.info('writing to %s', logfile)