Tensorflowデバッグ情報を無効にする


191

デバッグ情報とは、Pythonエラーではなく、読み込まれたライブラリや検出されたデバイスなどについて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はまだ初期のアルファコードであり、numpyおよびpandasとの基本的な互換性のためにバグを解決しています。したがって、これらの警告を一撃で打ち消すにimport warningswarnings.filterwarnings('ignore')、を実行してから、テンソルフローのインポートと、壊れたalpha-tensorflowコードに依存するコードを実行してから、を介して警告をオンに戻しwarnings.resetwarnings()ます。Tensorflowは、現時点で0.05を超えるバージョン名をアドバタイズしてはなりません。
Eric Leschinski

回答:


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

これは機能しますが、ログの前のタイムスタンプが削除されます-これを再びオンにするにはどうすればよいですか?
DreamFlasher 2018

これらのレベル(0、1、2、3)はどういう意味ですか?
diralik

2
tensorflowをインポートする前でも、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      

Pythonを使用した次の一般的なOSの例を参照してください。

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

完全にするために、Python tf_loggingモジュールのレベルの設定も呼び出します。これは、たとえば、サマリー演算、テンソルボード、さまざまな推定器などで使用されます。

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

1.14の場合、次のようにv1 APIを使用するように変更しないと警告が表示されます。

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


TensorFlowまたはTF-Learn Loggingの以前のバージョン(v0.11.x以下)の場合:

TensorFlowロギングの詳細については、以下のページをご覧ください。新しいアップデートで、あなたはどちらかへのロギングの冗長性を設定することができるしているDEBUGINFOWARNERROR、またはFATAL。例えば:

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

このページはさらに、TF-Learnモデルで使用できるモニターについても説明しています。こちらのページですです。

ただし、これすべてのロギングをブロックするわけではありません(TF-Learnのみ)。私には2つの解決策があります。1つは「技術的に正しい」ソリューション(Linux)で、もう1つはTensorFlowの再構築を含みます。

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

その他については、ソースの変更とTensorFlowの再構築を含むこの回答を参照しください。


「I tensorflow」メッセージは煩わしい場合があります。tfは、再構築の代わりにapiを使用してメッセージを沈黙させる方法を提供する必要があります
物理学者

2
これは、コマンドラインから行うことができますexport TF_CPP_MIN_LOG_LEVEL="3" && python your_code.py
アンドリューHundtを

次のように実行することもできますTF_CPP_MIN_LOG_LEVEL="3" python your_code.py
craymichael

tensorflow警告/エラーをエラーに変換する方法はありますか?
CMCDragonkai 2018

1
tf.logging.set_verbosity(tf.logging.ERROR)#または{DEBUG、INFO、WARN、ERROR、FATAL}が機能しました
Amir Md Amiruzzaman

16

この問題も(でtensorflow-0.10.0rc0)発生しましたが、提案された回答では、過度のノーズテストのロギングの問題を修正できませんでした。

私はなんとかして、tensorflowロガーを直接調査することでこれを解決しました。最も正確な修正ではありませんが、うまく機能し、直接または間接的にテンソルフローをインポートするテストファイルのみを汚染します。

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

1
私にとってはうまくいきましたが、TF_CPP_MIN_LOG_LEVELソリューションはうまくいきませんでした。いい考え!
フォールトトレラントな

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

tensorflow v1.6.0で私のために働いた


6

通常のpython3ログマネージャーはtensorflow == 1.11.0で動作します:

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


2

ここである程度の柔軟性を追加するために、メッセージをフィルターで除外する関数を好きなように記述することで、ロギングのレベルをよりきめ細かく制御できます。

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

where my_filter_funcLogRecordオブジェクトを入力として受け入れ[ LogRecorddocs ]、メッセージを破棄する場合はゼロを返します。それ以外の場合はゼロ以外。

n番目ごとの情報メッセージのみを保持するフィルターの例を次に示します(nonlocalここでの使用によりPython 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-betaを使用しており、デフォルトのロギングを有効/無効にしたいと考えています。tf1.Xの環境変数とメソッドはもう存在していないようです。

私はPDBを歩き回り、これが機能することを発見しました:

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

次に、独自のロガーAPI(この場合はファイルベース)を追加します

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の場合、次のコードは正常に動作します。

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

2

画面上の警告出力だけを取り除く必要がある場合は、コンソールクリアすることをお勧めしますこの簡単なコマンドを使用してテンソルフローをインポートした直後に画面(私の経験ではすべてのデバッグログを無効にするよりも効果的です)。

Windowsの場合:

import os
os.system('cls')

LinuxまたはMacの場合:

import os
os.system('clear')

0

私はから次のスニペットコード怒鳴る使用して上記の解決策のいずれも、Jupyterノートに私の問題を解決することができなかったCicoriaをし、問題が解決しました。

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') 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.