tf.train.MonitoredTrainingSession
を使用してチェックポイントファイルを書き込むと、何らかの方法で複数のメタデータが書き込まれます。私は間違って何をしていますか?MonitoredTrainingSessionは、実行ごとに複数のメタデータイベントを書き込みます
$ tensorboard --logdir ../train/test1/ --port=6006
WARNING::tensorflow:tensorboard警告によって証明されるように、
import tensorflow as tf global_step = tf.Variable(0, dtype=tf.int32, trainable=False, name="global_step") train = tf.assign(global_step, global_step + 1) saver = tf.train.Saver() hooks = [(tf.train.CheckpointSaverHook(checkpoint_dir=output_path + "test1/ckpt/", save_steps = 10, saver = saver))] with tf.train.MonitoredTrainingSession(master = '', is_chief = True, checkpoint_dir = None, hooks = hooks, save_checkpoint_secs = None, save_summaries_steps = None, save_summaries_secs = None) as mon_sess: for i in range(30): if mon_sess.should_stop(): break try: gs, _ = mon_sess.run([global_step, train]) print(gs) except (tf.errors.OutOfRangeError,tf.errors.CancelledError) as e: break finally: pass
重複metagraphsを与えるこれを実行する:より多くを発見
私は、次のコードにそれを剥奪しました1つの実行につき1つのグラフイベント、またはそこに はgraph_defと1つ以上のグラフ イベントを含むメタデータでした。グラフを最新のイベントで上書きします。地元で TensorBoard 54の開始:6006(私はアップグレードすることはできません)1.2.0 tensorflow に
これはあるが(Ctrlキーを押しながらCは終了します)。 6006(Ctrlキーを押しながら:地元でTensorBoard 54を起動する
$ tensorboard --logdir ../traitest2/ --port=6006
:なしtensorboardエラーで
global_step = tf.Variable(0, dtype=tf.int32, trainable=False, name="global_step") train = tf.assign(global_step, global_step + 1) saver = tf.train.Saver() init_op = tf.global_variables_initializer() with tf.Session() as sess: sess.run(init_op) for i in range(30): gs, _ = sess.run([global_step, train]) print(gs) if i%10==0: saver.save(sess, output_path+'/test2/my-model', global_step=gs) print("Saved ckpt")
結果:監視対象セッションせずに同じことを実行している
は、右のチェックポイントの出力を提供します+ Cを終了する)
私はこれを私が疑うように修正したい何か基本的なものがありません。このエラーは分散モードで他の問題と関連しているかもしれません。データを更新したいときはいつでもテンソルボードを再起動する必要があります。さらに、TensorBoardは、これらの警告の多くを出すと、時間の経過とともに実際には遅くなるようです。
関連する質問があります。tensorflow Found more than one graph event per run この場合、エラーは複数の実行(パラメータが異なる)が同じ出力ディレクトリに書き込まれたためです。ここでの例は、きれいな出力ディレクトリへの1回の実行についてです。
MonitoredTrainingSessionバージョンを分散モードで実行すると、同じエラーが発生します。
更新10月 - 12
@Nikhilコタリは次のように、代わりに大きなtf.train.MonitoredTrainSession
ラッパーのtf.train.MonitoredSession
を使用することが提案:
import tensorflow as tf
global_step = tf.Variable(0, dtype=tf.int32, trainable=False, name="global_step")
train = tf.assign(global_step, global_step + 1)
saver = tf.train.Saver()
hooks[(tf.train.CheckpointSaverHook(checkpoint_dir=output_path + "test3/ckpt/",
save_steps=10,
saver=saver))]
chiefsession = tf.train.ChiefSessionCreator(scaffold=None,
master='',
config=None,
checkpoint_dir=None,
checkpoint_filename_with_path=None)
with tf.train.MonitoredSession(session_creator=chiefsession,
hooks=hooks,
stop_grace_period_secs=120) as mon_sess:
for i in range(30):
if mon_sess.should_stop():
break
try:
gs, _ = mon_sess.run([global_step, train])
print(gs)
except (tf.errors.OutOfRangeError,tf.errors.CancelledError) as e:
break
finally:
pass
は、残念ながら、これはまだ同じtensorboardエラーを与える:
$ tensorboard --logdir ../train/test3/ --port=6006
警告:テンソルフロー:実行ごとに複数のグラフイベントが見つかりました。または、 はgraph_defと1つ以上のグラフ イベントを含むメタデータでした。グラフを最新のイベントで上書きします。地元で TensorBoard 54の開始:6006
ところで、各コードブロックは=コピー、スタンドアロンJupyterのノートブックに貼り付けると、あなたは、問題を再現しますです(Ctrlキーを押しながらCは終了します)。
これはわかっていますが、ちょうどいい場合... 'MonitoredTrainingSession'を作成するときに' checkpoint_dir = your_path'を指定するとうまくいきます。 – npf
提案をお寄せいただきありがとうございます。私は今、MonitoredSessionとフックの両方にcheckpoint_dirを追加しようとしました。しかし違いはありません。それは "うまく動作する"、ちょっと罰金、..まだ複数のグラフイベントの問題があります。 – Bastiaan