Tensorflow hata ayıklama bilgilerini devre dışı bırak


191

Bilgilerin hata ayıklamasıyla, TensorFlow'un yüklü kütüphaneler ve bulunan aygıtlar vb.İçin terminalimde Python hataları hakkında ne ifade ettiğini kastediyorum.

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 hala erken alfa kodu ve hala numpy ve pandalarla temel uyumluluk için hataları çalışıyorlar. Bu uyarıları tek bir vuruşta atmak için, o import warningszaman yapın warnings.filterwarnings('ignore'), ardından tensorflow ithalatınızı ve kırık alfa-tensorflow koduna dayanan kodu çalıştırın, ardından uyarıları tekrar açın warnings.resetwarnings(). Tensorflow, şu anda 0.05'in üzerinde bir sürüm adını tanıtmamalıdır.
Eric Leschinski

Yanıtlar:


214

Tüm hata ayıklama günlüklerini aşağıdakileri kullanarak devre dışı bırakabilirsiniz os.environ:

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

Tf 0.12 ve 1.0'da test edilmiştir

Detaylarda,

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

Bu çalışır, ancak günlüklerin önündeki zaman damgasını kaldırır - bu nasıl tekrar açılabilir?
DreamFlasher

Bu seviyeler (0, 1, 2, 3) ne anlama geliyor?
diralik

2
ithalat tensorflow önce bile 1.13 ve python3 için çalışmıyor
Li haonan

146

2.0 Güncelleme (10/8/19) Ayarın TF_CPP_MIN_LOG_LEVELhala çalışması gerekir (v0.12 + güncellemesinde aşağıya bakın), ancak şu anda açık bir sorun var ( 31870 numaralı konuya bakın ). Ayar TF_CPP_MIN_LOG_LEVELişe yaramazsa (tekrar aşağıya bakın), günlük düzeyini ayarlamak için aşağıdakileri yapmayı deneyin:

import tensorflow as tf
tf.get_logger().setLevel('INFO')

Ayrıca, lütfen tf.autograph.set_verbosityimza günlük iletilerinin ayrıntı düzeyini belirleyen belgelere bakın - örneğin:

# Can also be set using the AUTOGRAPH_VERBOSITY environment variable
tf.autograph.set_verbosity(1)

v0.12 + Güncelleme (5/20/17), TF 2.0+ ile çalışma:

TensorFlow 0.12+ sürümünde, bu sorun başına , artık günlüğe kaydetme TF_CPP_MIN_LOG_LEVEL; varsayılan olarak 0'dır (tüm günlükler gösterilir), ancak Levelsütun altında aşağıdaki değerlerden birine ayarlanabilir .

  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      

Python kullanarak aşağıdaki genel işletim sistemi örneğine bakın:

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

Kapsamlı olmak için, Python tf_loggingmodülünün seviyesini de çağırırsınız, örneğin özet ops, tensorboard, çeşitli tahminciler vb.

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

V1 API'sını aşağıdaki gibi kullanmazsanız, 1.14 için uyarılar alırsınız:

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


TensorFlow veya TF-Learn Günlüğünün Önceki Sürümleri için (v0.11.x veya daha düşük):

TensorFlow günlüğü hakkında bilgi için aşağıdaki sayfayı görüntüleyin; Yeni güncelleme ile, ya hiç günlüğü ayrıntı getirebiliyoruz DEBUG, INFO, WARN, ERROR, veya FATAL. Örneğin:

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

Sayfa ayrıca TF-Learn modellerinde kullanılabilen monitörlerin üzerinden geçer. İşte sayfa .

Bu , tüm günlük kaydını engellemez (yalnızca TF-Learn). İki çözümüm var; biri 'teknik olarak doğru' bir çözüm (Linux), diğeri ise TensorFlow'un yeniden oluşturulmasını içeriyor.

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

Diğeri için, lütfen kaynağı değiştirmeyi ve TensorFlow'u yeniden oluşturmayı içeren bu cevaba bakınız .


"I tensorflow" mesajları sinir bozucu olabilir, tf yeniden inşa etmek yerine api kullanarak onları susturmanın bir yolunu sağlamalıdır
fizikçi

2
Bu, komut satırından da yapılabilir:export TF_CPP_MIN_LOG_LEVEL="3" && python your_code.py
Andrew Hundt

Ayrıca çalıştırılabilirTF_CPP_MIN_LOG_LEVEL="3" python your_code.py
craymichael

Tensorflow uyarılarını / hatalarını hatalara dönüştürmenin bir yolu var mı?
CMCDragonkai

1
tf.logging.set_verbosity (tf.logging.ERROR) # veya herhangi bir {DEBUG, INFO, WARN, ERROR, FATAL} benim için çalıştı
Amir Md Amiruzzaman

16

Ben de bu sorunu yaşadım (açık tensorflow-0.10.0rc0), ancak önerilen cevaplar aracılığıyla aşırı burun testleri günlük sorunu düzeltemedi.

Bunu doğrudan tensorflow logger'a bakarak çözmeyi başardım. En doğru düzeltmeler değil, harika çalışıyor ve sadece doğrudan veya dolaylı olarak tensorflow'u ithal eden test dosyalarını kirletiyor:

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

1
TF_CPP_MIN_LOG_LEVEL çözümü işe yaramazken benim için çalıştı. İyi düşünmek!
hataya dayanıklı

Sadece benim için çalışan tensorflow 1.12 ile çözüm.
BiBi

Kullanma tensorflow-gpu 1.14.0. Yukarıdaki işlev olarak adlandırıldığında bu çıktıyı 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.
aldım


10

As TF_CPP_MIN_LOG_LEVELDeneyebilirsin benim için işe yaramadı:

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

Benim için çalıştı tensorflow v1.6.0


6

Her zamanki python3 günlük yöneticisi tensorflow == 1.11.0 ile benim için çalışıyor:

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


2

Buraya biraz esneklik eklemek için, iletileri istediğiniz gibi filtreleyen bir işlev yazarak günlük kaydı düzeyi üzerinde daha hassas bir denetim elde edebilirsiniz:

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

burada my_filter_funcbir LogRecordnesneyi input [ LogRecorddocs ] olarak kabul eder ve iletinin atılmasını istiyorsanız sıfır döndürür; aksi halde sıfır.

Aşağıda, yalnızca her n'inci bilgi iletisini tutan bir örnek filtre bulunmaktadır (Python 3, nonlocalburada kullanılması nedeniyle ):

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

Yukarıdakilerin tümü, TensorFlow'un günlük durumunu zaten ayarladığını varsaymıştır. tf.logging.get_verbosity()Bir filtre eklemeden önce arayarak bunu yan etki olmadan sağlayabilirsiniz .


2

Evet, tf 2.0-beta kullanıyorum ve varsayılan günlüğü etkinleştirmek / devre dışı bırakmak istiyorum. Tf1.X içindeki ortam değişkeni ve yöntemleri artık mevcut görünmüyor.

PDB adım attı ve işe yaradı buldum:

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

Daha sonra kendi logger API'mı ekliyorum (bu durumda dosya tabanlı)

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

tensorflow 2.1.0 için, aşağıdaki kod iyi çalışır.

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

2

Sadece ekrandaki uyarı çıkışlarından kurtulmanız gerekiyorsa, bu basit komutu kullanarak tensorflow'u içe aktardıktan hemen sonra konsol ekranını temizlemek isteyebilirsiniz (Deneyimimdeki tüm hata ayıklama günlüklerini devre dışı bırakmaktan daha etkilidir):

Pencerelerde:

import os
os.system('cls')

Linux veya Mac'te:

import os
os.system('clear')

0

Yukarıdaki çözümlerin hiçbiri Jupyter Notebook'daki sorunumu çözemedi, bu yüzden Cicoria'nın altındaki aşağıdaki snippet kodunu kullanıyorum ve sorunlar çözüldü.

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') 
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.