合理主義的グルメブログ

学生起業家の日常をツラツラと書いています。主に食事情報です。

tf-debuggerのことはじめ

Deep Learningを動かしていると,時々naninfなどの計算不能な値が生まれてしまう.
そんなときに,便利なのが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コマンドラインインターフェースが起動し,
こんな画面が現れます.

f:id:GoKIDS:20181104082550p:plain

使い方は,この動画を見ればだいたいわかります.

youtu.be

上のタブをクリックできるのが,便利ですね.

とりあえず,runさせてみましょう.

tfdbg> run

f:id:GoKIDS:20181104084406p:plain

矢印の部分をクリックすると,こんな画面に切り替わって, learning_rateの状態を確認することが出来ます. f:id:GoKIDS:20181104084531p:plain

上のタブでそれぞれの情報も確認できるので,便利ですね.

これから,積極的に使っていこうと思います.

デバッガーのCLI内のスクロールは,PgUpPgDwを使うけど,もっと便利なキーバインドはないのかなぁ...

参考リンク