Deshabilitar la información de depuración Tensorflow

Al depurar la información me refiero a lo que TensorFlow muestra en mi terminal acerca de las bibliotecas cargadas y los dispositivos encontrados, etc., no los errores de 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: YI 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 ... 

Puede deshabilitar todos los registros de depuración utilizando os.environ :

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

Probado en tf 0.12 y 1.0

En detalles,

 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 

1.0+ actualización (5/20/17):

En TensorFlow 0.12+, por este problema , ahora puede controlar el registro a través de la variable de entorno llamada TF_CPP_MIN_LOG_LEVEL ; el valor predeterminado es 0 (se muestran todos los registros), pero se puede establecer en 1 para filtrar los registros de INFO , 2 para filtrar adicionalmente los registros de WARNING y 3 para filtrar adicionalmente los registros de ERROR . Vea el siguiente ejemplo de SO genérico usando Python:

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

Para versiones anteriores de TensorFlow o TF-Learn Logging, consulte lo siguiente:

Vea la página a continuación para obtener información sobre el registro de TensorFlow; con la nueva actualización, puede establecer la verbosidad del registro en DEBUG , INFO , WARN , ERROR o FATAL . Por ejemplo:

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

La página también revisa monitores que pueden usarse con los modelos TF-Learn. Aquí está la página .

Sin embargo, esto no bloquea todo el registro (solo TF-Learn). Tengo dos soluciones; Una es una solución “técnicamente correcta” (Linux) y la otra implica la reconstrucción de TensorFlow.

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

Para el otro, vea esta respuesta que implica modificar la fuente y reconstruir TensorFlow.

También he tenido este problema (en tensorflow-0.10.0rc0 ), pero no pude solucionar el problema de registro excesivo de pruebas de la nariz a través de las respuestas sugeridas.

Logré resolver esto al sondear directamente en el registrador de tensorflow. No es la solución más correcta, pero funciona muy bien y solo contamina los archivos de prueba que directa o indirectamente importan tensorflow:

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

Como TF_CPP_MIN_LOG_LEVEL no me funcionó, puedes probar:

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

Trabajó para mí en tensorflow v1.6.0

El administrador de registro de python3 habitual me funciona con tensorflow == 1.11.0:

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

Para agregar algo de flexibilidad aquí, puede lograr un control más preciso sobre el nivel de registro al escribir una función que filtre los mensajes como desee:

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

donde my_filter_func acepta un objeto LogRecord como entrada [ LogRecord ] y devuelve cero si desea que el mensaje se LogRecord ; distinto a cero de lo contrario.

Aquí hay un filtro de ejemplo que solo mantiene cada nth mensajes de información (Python 3 debido al uso de nonlocal aquí):

 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)) 

Todo lo anterior ha asumido que TensorFlow ya ha configurado su estado de registro. Puede asegurar esto sin efectos secundarios llamando a tf.logging.get_verbosity() antes de agregar un filtro.

Puede sentirse tentado a usar tf.get_logger para la compatibilidad con Tensorflow 2.0

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

Pero no funcionó para mí.