Есть ли способ подавить сообщения 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.
Примечание: версия совместимости необходима, чтобы избежать дальнейших предупреждений, выдаваемых библиотекой, поскольку стандартная версия устарела.