python - tensorflow español
Deshabilitar la información de depuración de Tensorflow (9)
Como
TF_CPP_MIN_LOG_LEVEL
no funcionó para mí, puedes probar:
tf.logging.set_verbosity(tf.logging.WARN)
Me funcionó en tensorflow v1.6.0
Al depurar información me refiero a lo que muestra TensorFlow en mi terminal sobre bibliotecas cargadas y dispositivos encontrados, etc., no 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: 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
...
El administrador de registro habitual de python3 funciona para mí con tensorflow == 1.11.0:
import logging
logging.getLogger(''tensorflow'').setLevel(logging.INFO)
Para
compatibilidad con Tensorflow 2.0
, puede usar
tf.get_logger
import logging
tf.get_logger().setLevel(logging.ERROR)
Para agregar algo de flexibilidad aquí, puede lograr un control más detallado sobre el nivel de registro escribiendo 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
docs
] y devuelve cero si desea que se
LogRecord
el mensaje;
distinto de cero
Aquí hay un filtro de ejemplo que solo guarda cada enésimo mensaje 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 deshabilitar todos los registros de depuración utilizando
os.environ
:
import os
os.environ[''TF_CPP_MIN_LOG_LEVEL''] = ''3''
import tensorflow as tf
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
Sí, estoy usando tf 2.0-beta y quiero habilitar / deshabilitar el registro predeterminado. La variable de entorno y los métodos en tf1.X ya no parecen existir.
Di un paso en PDB y encontré que esto funcionaba:
# close the TF2 logger
tf2logger = tf.get_logger()
tf2logger.error(''Close TF2 logger handlers'')
tf2logger.root.removeHandler(tf2logger.root.handlers[0])
Luego agrego mi propia API de registrador (en este caso basada en archivos)
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)
También tuve este problema (en
tensorflow-0.10.0rc0
), pero no pude solucionar el problema de registro excesivo de las pruebas de nariz a través de las respuestas sugeridas.
Logré resolver esto probando directamente en el registrador de flujo de tensor. No es la solución más correcta, pero funciona muy bien y solo contamina los archivos de prueba que importan directa o indirectamente tensorflow:
# Place this before directly or indirectly importing tensorflow
import logging
logging.getLogger("tensorflow").setLevel(logging.WARNING)
Resolví con esta publicación No se pueden eliminar todas las advertencias # 27045 , y la solución fue:
import logging
logging.getLogger(''tensorflow'').disabled = True
v0.12 + Actualización (20/05/17), Trabajando a través de TF 2.0 alfa:
En TensorFlow 0.12+, según este
github.com/tensorflow/tensorflow/issues/1258
, ahora puede controlar el registro a través de la variable ambiental llamada
TF_CPP_MIN_LOG_LEVEL
;
el valor predeterminado es 0 (se muestran todos los registros) pero se puede establecer en uno de los siguientes valores en la columna
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
Consulte el siguiente ejemplo de sistema operativo genérico con Python:
import os
os.environ[''TF_CPP_MIN_LOG_LEVEL''] = ''3'' # or any {''0'', ''1'', ''2''}
import tensorflow as tf
Para ser exhaustivo, también debe establecer el nivel para el módulo Python
tf_logging
, que se utiliza, por ejemplo, en operaciones de resumen, tablero de tensor, varios estimadores, etc.
# append to lines above
tf.logging.set_verbosity(tf.logging.ERROR) # or any {DEBUG, INFO, WARN, ERROR, FATAL}
Para versiones anteriores de TensorFlow o TF-Learn Logging (v0.11.xo inferior):
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 incluye monitores que se pueden usar 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.