Nonaktifkan informasi debug Tensorflow

191

Dengan men-debug informasi, maksud saya apa yang TensorFlow tunjukkan di terminal saya tentang pustaka yang dimuat dan perangkat yang ditemukan, dll. Bukan kesalahan 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
...
Ghilas BELHADJ
sumber
5
masalah pelacakan: github.com/tensorflow/tensorflow/issues/1258
Yaroslav Bulatov
Tensorflow masih merupakan kode alfa awal dan mereka masih mengerjakan bug untuk kompatibilitas dasar dengan numpy dan panda. Jadi untuk melumpuhkan peringatan ini dalam satu pukulan, lakukan import warningskemudian warnings.filterwarnings('ignore'), kemudian jalankan impor tensorflow dan dan kode yang bergantung pada kode alpha-tensorflow yang rusak, kemudian hidupkan peringatan kembali pada melalui warnings.resetwarnings(). Tensorflow tidak boleh mengiklankan nama versi lebih dari 0,05 pada saat ini.
Eric Leschinski

Jawaban:

214

Anda dapat menonaktifkan semua log debugging menggunakan os.environ:

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

Diuji pada tf 0,12 dan 1,0

Secara rinci,

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
mwweb
sumber
Ini berfungsi, tetapi menghilangkan stempel waktu di depan log - bagaimana ini bisa dinyalakan kembali?
DreamFlasher
Apa level-level ini (0, 1, 2, 3) artinya?
diralik
2
tidak bekerja untuk 1.13 dan python3, bahkan sebelum mengimpor tensorflow
Li haonan
146

2.0 Pembaruan (10/8/19) Pengaturan TF_CPP_MIN_LOG_LEVELmasih harus bekerja (lihat di bawah di v0.12 + pembaruan), tetapi saat ini ada masalah terbuka (lihat masalah # 31870 ). Jika pengaturan TF_CPP_MIN_LOG_LEVELtidak bekerja untuk Anda (lagi, lihat di bawah), coba lakukan hal berikut untuk mengatur level log:

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

Selain itu, silakan lihat dokumentasi tf.autograph.set_verbosityyang mengatur verbositas pesan log tanda tangan - misalnya:

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

v0.12 + Pembaruan (5/20/17), Bekerja melalui TF 2.0+:

Di TensorFlow 0.12+, per masalah ini , Anda sekarang dapat mengontrol pencatatan melalui variabel lingkungan yang disebut TF_CPP_MIN_LOG_LEVEL; defaultnya adalah 0 (semua log ditampilkan) tetapi dapat diatur ke salah satu dari nilai berikut di bawah Levelkolom.

  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      

Lihat contoh OS umum berikut menggunakan Python:

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

Agar teliti, Anda menelepon juga mengatur level untuk tf_loggingmodul Python , yang digunakan dalam misalnya op ringkasan, papan tensor, berbagai estimator, dll.

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

Untuk 1.14 Anda akan menerima peringatan jika Anda tidak mengubah untuk menggunakan API v1 sebagai berikut:

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


Untuk Versi Sebelumnya dari TensorFlow atau TF-Learn Logging (v0.11.x atau lebih rendah):

Lihat halaman di bawah untuk informasi tentang logging TensorFlow; dengan update baru, Anda dapat mengatur bertele-tele logging baik DEBUG, INFO, WARN, ERROR, atau FATAL. Sebagai contoh:

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

Halaman ini juga membahas monitor yang dapat digunakan dengan model TF-Learn. Ini halamannya .

Ini tidak memblokir semua logging, meskipun (hanya TF-Learn). Saya punya dua solusi; satu adalah solusi yang 'benar secara teknis' (Linux) dan yang lainnya melibatkan pembangunan kembali TensorFlow.

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

Untuk yang lain, silakan lihat jawaban ini yang melibatkan memodifikasi sumber dan membangun kembali TensorFlow.

Craymichael
sumber
pesan "I tensorflow" dapat mengganggu, jika harus memberikan cara untuk membungkamnya menggunakan api alih-alih membangun kembali
fisikawan
2
Ini juga dapat dilakukan dari baris perintah:export TF_CPP_MIN_LOG_LEVEL="3" && python your_code.py
Andrew Hundt
Ini juga dapat dijalankan sebagaiTF_CPP_MIN_LOG_LEVEL="3" python your_code.py
craymichael
Apakah ada cara untuk mengubah peringatan / kesalahan tensorflow menjadi kesalahan?
CMCDragonkai
1
tf.logging.set_verbosity (tf.logging.ERROR) # atau {DEBUG, INFO, WARN, ERROR, FATAL} bekerja untuk saya
Amir Md Amiruzzaman
16

Saya punya masalah ini juga (pada tensorflow-0.10.0rc0 ), tetapi tidak dapat memperbaiki tes hidung yang berlebihan masuk masalah melalui jawaban yang disarankan.

Saya berhasil memecahkan ini dengan menyelidik langsung ke dalam logger tensorflow. Bukan perbaikan yang paling benar, tetapi berfungsi dengan baik dan hanya mencemari file uji yang secara langsung atau tidak langsung mengimpor tensorflow:

# Place this before directly or indirectly importing tensorflow
import logging
logging.getLogger("tensorflow").setLevel(logging.WARNING)
Pedro Lopes
sumber
1
Bekerja untuk saya, sedangkan solusi TF_CPP_MIN_LOG_LEVEL tidak. Pemikiran yang bagus!
toleran terhadap kesalahan
Hanya solusi yang bekerja untuk saya dengan tensorflow 1.12.
BiBi
Menggunakan tensorflow-gpu 1.14.0. Menerima keluaran ini ketika dipanggil fungsi di atas 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. Menyenangkan bahwa tidak ada peringatan setelah pesan ini
A.Ametov
15

Untuk kompatibilitas dengan Tensorflow 2.0 , Anda dapat menggunakantf.get_logger

import logging
tf.get_logger().setLevel(logging.ERROR)
serv-inc
sumber
3
Bekerja untuk saya dengan tensorflow 1.13.1
Abramodj
1
Bekerja untuk saya dengan 1.13.1. Kode contoh .
user1857492
10

Karena TF_CPP_MIN_LOG_LEVELtidak bekerja untuk saya, Anda dapat mencoba:

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

Bekerja untuk saya di tensorflow v1.6.0

Wikunia
sumber
6

Manajer log python3 biasa bekerja untuk saya dengan tensorflow == 1.11.0:

import logging
logging.getLogger('tensorflow').setLevel(logging.INFO)
estevo
sumber
4

Saya diselesaikan dengan posting ini Tidak dapat menghapus semua peringatan # 27045 , dan solusinya adalah:

import logging
logging.getLogger('tensorflow').disabled = True
Mandy007
sumber
3
tidak bekerja untuk FutureWarnings selama impor, tf = 1.13.1 py3
ffeast
2
Hanya ini yang bekerja untuk saya! Konfigurasi saya: Keras '2.2.4' (yang menggunakan tf 1.15.0) dan Python 3.7.4
Mohamad Kouhi Moghadam
2

Untuk menambahkan fleksibilitas di sini, Anda dapat mencapai kontrol yang lebih baik atas tingkat logging dengan menulis fungsi yang menyaring pesan sesuka Anda:

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

di mana my_filter_funcmenerima LogRecordobjek sebagai input [ LogRecorddok ] dan mengembalikan nol jika Anda ingin pesan itu dibuang; bukan nol sebaliknya.

Berikut contoh filter yang hanya menyimpan setiap pesan info ke-3 (Python 3 karena penggunaan di nonlocalsini):

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

Semua hal di atas telah mengasumsikan bahwa TensorFlow telah mengatur keadaan logging-nya. Anda dapat memastikan ini tanpa efek samping dengan menelepon tf.logging.get_verbosity()sebelum menambahkan filter.

Tyler
sumber
2

Ya, saya menggunakan tf 2.0-beta dan ingin mengaktifkan / menonaktifkan logging standar. Variabel lingkungan dan metode di tf1.X tampaknya tidak ada lagi.

Saya melangkah dalam PDB dan menemukan ini berfungsi:

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

Saya kemudian menambahkan API logger saya sendiri (dalam hal ini berbasis file)

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)
dturvene
sumber
2

untuk tensorflow 2.1.0, kode berikut berfungsi dengan baik.

import tensorflow as tf
tf.compat.v1.logging.set_verbosity(tf.compat.v1.logging.ERROR)
Onur Demiray
sumber
2

Jika Anda hanya perlu menyingkirkan keluaran peringatan di layar , Anda mungkin ingin menghapus konsol layar segera setelah mengimpor tensorflow dengan menggunakan perintah sederhana ini (Ini lebih efektif daripada menonaktifkan semua log debugging dalam pengalaman saya):

Di windows:

import os
os.system('cls')

Di Linux atau Mac:

import os
os.system('clear')
Masoud Masoumi Moghadam
sumber
0

Tidak ada solusi di atas yang bisa menyelesaikan masalah saya di Jupyter Notebook, jadi saya menggunakan kode cuplikan berikut di bawah dari Cicoria , dan masalah terpecahkan.

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') 
Erman
sumber