Tensorflow डिबगिंग जानकारी अक्षम करें


191

डिबगिंग जानकारी से मेरा मतलब है कि लोड किए गए पुस्तकालयों और पाए गए उपकरणों आदि के बारे में मेरे टर्मिनल में TensorFlow दिखाता है न कि पायथन त्रुटियों।

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


Tensorflow अभी भी शुरुआती अल्फा कोड है और वे अभी भी सुन्न और पांडा के साथ बुनियादी अनुकूलता के लिए बग्स का काम कर रहे हैं। तो एक ही झटके में इन चेतावनियों को खत्म करने के लिए, import warningsफिर warnings.filterwarnings('ignore'), अपने टेंसरफ़्लो आयात और कोड को चलाएं जो टूटे हुए अल्फा-टेंसोफ़्लो कोड पर निर्भर करता है, फिर चेतावनी को वापस चालू करें warnings.resetwarnings()। Tensorflow को इस समय 0.05 से अधिक संस्करण नाम का विज्ञापन नहीं करना चाहिए।
एरिक लेसचिंस्की

जवाबों:


214

आप सभी डीबगिंग लॉग को अक्षम कर सकते हैं 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

यह काम करता है, लेकिन यह लॉग के सामने टाइमस्टैम्प को हटा देता है - इसे फिर से कैसे चालू किया जा सकता है?
ड्रीमफ्लैशर

ये स्तर (0, 1, 2, 3) क्या हैं?
diralik

2
1.13 और python3 के लिए काम नहीं कर रहा है, यहां तक ​​कि आयात तन्यता से पहले
Li haonan

146

2.0 अपडेट (10/8/19) सेटिंग TF_CPP_MIN_LOG_LEVELअभी भी काम करना चाहिए (नीचे देखें v0.12 + अपडेट में), लेकिन वर्तमान में एक मुद्दा खुला है (देखें मुद्दा # 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 + अपडेट (5/20/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      

पायथन का उपयोग करके निम्न जेनेरिक OS उदाहरण देखें:

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

पूरी तरह से होने के लिए, आप पायथन tf_loggingमॉड्यूल के लिए स्तर भी सेट करते हैं , जिसका उपयोग उदाहरण सारांश ऑप्स, टेंसबोर्ड, विभिन्न अनुमानक, आदि में किया जाता है।

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

1.14 के लिए आपको चेतावनी मिलेगी यदि आप 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-Log Logging (v0.11.x या उससे कम) के पूर्व संस्करणों के लिए:

TensorFlow लॉगिंग के बारे में जानकारी के लिए नीचे दिया गया पृष्ठ देखें; नया अद्यतन के साथ, या तो आप के लिए लॉगिंग शब्दाडंबर निर्धारित कर सकते हैं DEBUG, INFO, WARN,ERROR , या FATAL। उदाहरण के लिए:

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

पृष्ठ अतिरिक्त रूप से मॉनिटर पर चला जाता है जिसका उपयोग TF-Learn मॉडल के साथ किया जा सकता है। यहाँ पृष्ठ है

यह नहीं है सभी लॉगिंग को ब्लॉक , हालाँकि (केवल TF-Learn)। मेरे पास दो उपाय हैं; एक 'तकनीकी रूप से सही' समाधान (लिनक्स) है और दूसरे में TensorFlow का पुनर्निर्माण शामिल है।

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

अन्य के लिए, कृपया यह उत्तर देखें जिसमें संशोधन स्रोत और TensorFlow का पुनर्निर्माण शामिल है।


"आई टेनसफ़्लो" संदेश कष्टप्रद हो सकते हैं, tf को पुनर्निर्माण के बजाय एफ़आई का उपयोग करके उन्हें चुप कराने का कुछ तरीका प्रदान करना चाहिए
भौतिक विज्ञानी

2
यह कमांड लाइन से भी किया जा सकता है:export TF_CPP_MIN_LOG_LEVEL="3" && python your_code.py
एंड्रयू हुंड

यह भी रूप में चलाया जा सकता हैTF_CPP_MIN_LOG_LEVEL="3" python your_code.py
craymichael

क्या टेंसरफ़्लो चेतावनी / त्रुटियों को त्रुटियों में बदलने का एक तरीका है?
CMCDragonkai

1
tf.log.set_verbosity (tf.log.ERROR) # या कोई {DEBUG, INFO, WARN, ERROR, FATAL} ने मेरे लिए काम किया
अमीर Md अमीरुजमान

16

मुझे भी यह समस्या हुई है tensorflow-0.10.0rc0 ) , लेकिन सुझाए गए उत्तरों के माध्यम से नाक की अत्यधिक जांच से होने वाली समस्या को ठीक नहीं कर सका।

मैं सीधे टेंसोफ़्लो लकड़हारे में जांच करके इसे हल करने में कामयाब रहा। फिक्स का सबसे सही नहीं है, लेकिन महान काम करता है और केवल परीक्षण फ़ाइलों को प्रदूषित करता है जो प्रत्यक्ष या अप्रत्यक्ष रूप से टेंसरफ़्लो को आयात करते हैं:

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

1
मेरे लिए काम किया, जबकि TF_CPP_MIN_LOG_LEVEL समाधान नहीं किया। अच्छी सोच!
दोष-सहिष्णु

केवल समाधान जो मेरे लिए टेंसरफ़्लो 1.12 के साथ काम करता था।
BiBi

का उपयोग कर tensorflow-gpu 1.14.0। इस आउटपुट को तब प्राप्त किया गया जब फ़ंक्शन को ऊपर The name tf.logging.set_verbosity is deprecated. Please use tf.compat.v1.logging.set_verbosity instead. WARNING:tensorflow:From C:/.../NN.py:297: The name tf.logging.ERROR is deprecated. Please use tf.compat.v1.logging.ERROR instead. मनभावन कहा जाता था कि इन संदेशों के बाद कोई चेतावनी नहीं
ए। अमातोव


10

जैसा TF_CPP_MIN_LOG_LEVELकि मेरे लिए काम नहीं किया आप कोशिश कर सकते हैं:

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

मेरे लिए तनख्वाह v1.6.0 में काम किया


6

सामान्य python3 लॉग मैनेजर मेरे लिए तन्यता के साथ काम करता है == 1.11.0:

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

4

मैंने इस पोस्ट के साथ हल किया है # 27045 सभी चेतावनियों को हटा नहीं सकता , और समाधान था:

import logging
logging.getLogger('tensorflow').disabled = True

3
tf आयात के दौरान FutureWarnings के लिए काम नहीं कर रहा है, tf = 1.13.1 py3
ffeast

2
केवल यह मेरे लिए काम करता है! मेरा विन्यास: केरेस '2.2.4' (जो tf 1.15.0 का उपयोग करता है) और अजगर 3.7.4
मोहम्मद कोही मोघदैम

2

यहां कुछ लचीलापन जोड़ने के लिए, आप एक फ़ंक्शन लिखकर लॉगिंग के स्तर पर अधिक बारीक नियंत्रण प्राप्त कर सकते हैं जो आपके लिए संदेशों को फ़िल्टर करता है:

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

जहां my_filter_funcएक LogRecordवस्तु को इनपुट [ LogRecordडॉक्स ] के रूप में स्वीकार किया जाता है और यदि आप संदेश को फेंकना चाहते हैं तो शून्य वापस कर देता है; नॉनवेज अन्यथा।

यहाँ एक उदाहरण फ़िल्टर है जो केवल प्रत्येक nth जानकारी संदेश रखता है ( nonlocalयहाँ उपयोग के कारण पायथन 3 ):

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()फ़िल्टर जोड़ने से पहले कॉल करके साइड इफेक्ट्स के बिना यह सुनिश्चित कर सकते हैं ।


2

हाँ, मैं tf 2.0-बीटा का उपयोग कर रहा हूं और डिफ़ॉल्ट लॉगिंग को सक्षम / अक्षम करना चाहता हूं। पर्यावरण चर और तरीके tf1.X में मौजूद नहीं हैं।

मैंने पीडीबी में कदम रखा और यह काम किया:

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

मैं तब अपना खुद का लकड़हारा एपीआई जोड़ता हूं (इस मामले में फाइल आधारित)

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)

2

टेंसरफ़्लो 2.1.0 के लिए, निम्नलिखित कोड ठीक काम करता है।

import tensorflow as tf
tf.compat.v1.logging.set_verbosity(tf.compat.v1.logging.ERROR)

2

यदि आपको केवल स्क्रीन पर चेतावनी आउटपुट से छुटकारा पाने की आवश्यकता है , तो आप कंसोल को खाली करना चाह सकते हैं इस सरल कमांड का उपयोग करके टेंसरफ़्लो को आयात करने के बाद स्क्रीन को ठीक (यह मेरे अनुभव में सभी डीबगिंग लॉग को अक्षम करने से अधिक प्रभावी है):

खिड़कियों में:

import os
os.system('cls')

लिनक्स या मैक में:

import os
os.system('clear')

0

ऊपर दिए गए समाधानों में से कोई भी मेरी समस्या को ज्यूपिटर नोटबुक में हल नहीं कर सकता है, इसलिए मैं सिसोरिया से निम्नलिखित स्निपेट कोड बलो का उपयोग करता हूं , और हल किए गए मुद्दे।

import warnings  
with warnings.catch_warnings():  
    warnings.filterwarnings("ignore",category=FutureWarning)
    import tensorflow as tf
    from tensorflow import keras
    from tensorflow.keras.preprocessing.text import Tokenizer

print('Done') 
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.