web-dev-qa-db-fra.com

Désactiver les informations de débogage Tensorflow

Par débogage des informations, je veux dire ce que TensorFlow montre dans mon terminal à propos des bibliothèques chargées, des périphériques trouvés, etc., pas des erreurs 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
...
114
Ghilas BELHADJ

Vous pouvez désactiver tous les journaux de débogage en utilisant os.environ:

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

Testé sur tf 0.12 et 1.0

En détails,

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
145
mwweb

J'ai également eu ce problème (sur tensorflow-0.10.0rc0), mais je n'ai pas pu résoudre le problème d'enregistrement excessif des tests de détection du nez via les réponses suggérées.

J'ai réussi à résoudre ce problème en sondant directement dans l'enregistreur tensorflow. Pas le correct correct, mais fonctionne très bien et ne pollue que les fichiers de test qui importent directement ou indirectement tensorflow:

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

Comme TF_CPP_MIN_LOG_LEVEL n'a pas fonctionné pour moi, vous pouvez essayer:

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

Travaillé pour moi dans tensorflow v1.6.0

9
Wikunia

Pour une compatibilité avec Tensorflow 2.0 , vous pouvez utiliser tf.get_logger

_import logging
tf.get_logger().setLevel(logging.ERROR)
_
7
serv-inc

Le gestionnaire de journaux python3 habituel fonctionne pour moi avec tensorflow == 1.11.0:

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

Pour ajouter une certaine flexibilité, vous pouvez obtenir un contrôle plus fin du niveau de journalisation en écrivant une fonction qui filtre les messages comme vous le souhaitez:

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

my_filter_func accepte un objet LogRecord comme entrée [ LogRecord docs ] et renvoie zéro si vous souhaitez que le message soit rejeté. non nul sinon.

Voici un exemple de filtre qui ne conserve que chaque énième message d'information (Python 3 en raison de l'utilisation de nonlocal ici):

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

Tout ce qui précède a supposé que TensorFlow avait déjà configuré son état de journalisation. Vous pouvez vous en assurer sans effets secondaires en appelant tf.logging.get_verbosity() avant d'ajouter un filtre.

2
Tyler

Oui, j'utilise tf 2.0-beta et je veux activer/désactiver la journalisation par défaut. La variable d'environnement et les méthodes de tf1.X ne semblent plus exister.

Je me suis promené dans PDB et j'ai constaté que cela fonctionnait:

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

J'ajoute ensuite ma propre API de journalisation (dans ce cas, basée sur un fichier)

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

J'ai résolu avec ce post impossible de supprimer tous les avertissements # 27045 , et la solution était:

import logging
logging.getLogger('tensorflow').disabled = True
1
Armando Diaz Matos