tf-debuggerのことはじめ
Deep Learningを動かしていると,時々nan
やinf
などの計算不能な値が生まれてしまう.
そんなときに,便利なのがtf-debuggerだよって聞いて使ってみたいと思った.
前提として,名前の通り,tensorflowで動作します.
個人的に便利だと思ったのは説明にあったこれですね.
TensorFlow の ML モデルの開発中によく起きる問題は、オーバーフローやゼロによる除算、ゼロの対数などによって不適切な数値(無限大や NaN)が発生することです。巨大な TensorFlow グラフでは、そのようなノードの発生元を見つけるのは非効率で時間もかかります。tfdbg CLI と条件付きブレークポイントを使うと、すばやく問題のノードを特定できます。
やっぱり,みんな詰まるポイントは同じなんですね.
とりあえず,以下の動作テスト用のプログラムを用意します.
デバッガーの導入は,既存のsess
を,tf_debug.LocalCLIDebugWrapperSession
でラッピングするだけですね.
import numpy as np import tensorflow as tf from tensorflow.python import debug as tf_debug xs = np.linspace(-0.5, 0.49, 100) x = tf.placeholder(tf.float32, shape=[None], name="x") y = tf.placeholder(tf.float32, shape=[None], name="y") k = tf.Variable([0.0], name="k") y_hat = tf.multiply(k, x, name="y_hat") sse = tf.reduce_sum((y - y_hat) * (y - y_hat), name="sse") train_op = tf.train.GradientDescentOptimizer(learning_rate=0.02).minimize(sse) sess = tf.Session() sess.run(tf.global_variables_initializer()) sess = tf_debug.LocalCLIDebugWrapperSession(sess) for _ in range(10): sess.run(train_op, feed_dict={x: xs, y: 42 * xs})
実行し,sess.run()
メソッドが呼び出されると,
tfdbg
のコマンドラインインターフェースが起動し,
こんな画面が現れます.
使い方は,この動画を見ればだいたいわかります.
上のタブをクリックできるのが,便利ですね.
とりあえず,runさせてみましょう.
tfdbg> run
矢印の部分をクリックすると,こんな画面に切り替わって,
learning_rate
の状態を確認することが出来ます.
上のタブでそれぞれの情報も確認できるので,便利ですね.
これから,積極的に使っていこうと思います.
デバッガーのCLI内のスクロールは,PgUp
とPgDw
を使うけど,もっと便利なキーバインドはないのかなぁ...