TensorFlowの日本語まとめ

TensorFlowの公式サイトに書かれている英文を英語ど素人が翻訳(日本語訳/和訳)します。 間違いがありましたら、優しく教えていただけますと幸いです。 内容を理解したら、使ってみたい。

4.モデルのトレーニング

グラフが構築されると、反復訓練を受けfully_connected_feed.py内のユーザコードによって制御されたループ内で評価することができます

 

スポンサーリンク

 

 

グラフ

run_training()関数の上部に構築されたOPSのすべてがデフォルトのグローバルtf.Graphインスタンスに関連されることを示しコマンドでのpythonです

with tf.Graph().as_default():

tf.Graphは、グループとしてまとめて実行することができるOPSのコレクションです。

 

複数のグラフを持つより複雑な用途が可能ですが、この簡単なチュートリアルの範囲を超えました

 

セッション

一度構築の準備のすべてが完了し、生成された必要なOPSのすべてが tf.Sessionグラフを実行するために作成されます

sess = tf.Session()

代わりに、セッションは、スコープのためのブロックとに生成されることがあります。

with tf.Session() as sess:

セッションへの空のパラメータまだ作成されていない場合は作成する)このコードは、デフォルトのローカルセッションにくっつけることを示します。

 

セッションを作成した後すぐにtf.Variable のすべてのインスタンスは、初期OPsess.run()を呼び出すことによって初期化されます

init = tf.initialize_all_variables()
sess.run(init)

sess.run() メソッドは、パラメータとして渡されたOPS)に対応し、グラフの完全なサブセットを実行します。


この最初の呼び出しでは、初期化OPには、変数のための唯一の初期化子が含まれているtf.group です。グラフ残りの部分いずれも、ここでは実行されません。:それは、以下のトレーニングループで行われます。

 

トレーニングループ

セッションの変数初期化した後トレーニングを開始することができます

 

ユーザーコードは、ステップごとのトレーニング、便利なトレーニング操作を行うことができ、最も単純なループを制御します。

for step in xrange(max_steps):
    sess.run(train_op)

しかしこのチュートリアルはもう少しで複雑になります。それはまた、以前に生成されたプレースホルダを一致するように、各ステップのための入力データをスライスしなければなりません。

 

グラフのフィード

各ステップについては、コードはステップを訓練するために、その上にのセットが含まれているフィード辞書を生成し、それらが表すプレースホルダOPSに調子を合わせます。
 
fill_feed_dict()関数では与えられたDataSet、画像やラベル、および次の画像やラベルを含む充填されているプレースホルダと一致するテンソルその次のbatch_sizeセットのために照会されます。
 images_feed, labels_feed = data_set.next_batch(FLAGS.batch_size)

 Pythonの辞書オブジェクトは、キーとしてプレースホルダ値として代表的なフィードテンソルで生成されます。

feed_dict = {
    images_placeholder: images_feed,
    labels_placeholder: labels_feed,
}
これは訓練のこのステップの入力例提供するためにsess.run()関数のfeed_dictパラメータ渡されます。
 

ステータスの確認

コードは、その実行呼び出しで取得するために2つの値を指定しています。[train_op, loss]
 for step in xrange(FLAGS.max_steps):
    feed_dict = fill_feed_dict(data_sets.train,
                               images_placeholder,
                               labels_placeholder)
    _, loss_value = sess.run([train_op, loss],
                             feed_dict=feed_dict)

 フェッチするには、2つの値があるのでsess.run() は、2つの項目を持つタプルを返します値のリスト内の各テンソルは、トレーニングのこのステップ中にそのテンソルの値で埋め戻されたタプルでnumpyの配列に対応してフェッチします。train_opは出力値無しのOperationであるため、返されるタプルの対応する要素は、このように、廃棄され、Noneです。しかし、モデルがトレーニング中に発散する場合のlossテンソルの値はNaNになることも、私たちは、ロギングのためにこの値をキャプチャします。

 
訓練はNaNをせずに正常に動作すると仮定するとトレーニングループは、ユーザがトレーニング状態知らせるために、単純なステータステキストごとに100の手順をプリントします。
 if step % 100 == 0:
    print 'Step %d: loss = %.2f (%.3f sec)' % (step, loss_value, duration) 
 

ステータスを視覚化

TensorBoardで使用されるイベントファイルを放出するために、サマリのすべてを(この場合は、一つだけ)グラフ構築フェーズ中に、単一のオペに集めています。

summary_op = tf.merge_all_summaries()

それから、セッションが作成されて、グラフ自体と要約の値の両方が含まれたtf.train.SummaryWriter イベントファイルを書くため、インスタンス化します。

summary_writer = tf.train.SummaryWriter(FLAGS.train_dir,
                                        graph_def=sess.graph_def)

最後に、イベントファイルは、新しいサマリsummary_opが実行されるたびにwriteradd_summary()関数に渡された出力に含まれ更新されます

summary_str = sess.run(summary_op, feed_dict=feed_dict)
summary_writer.add_summary(summary_str, step)

イベントファイルが書き込まれるときTensorBoardサマリから値を表示するには、トレーニングフォルダに対して実行することができます

f:id:TensorFlow:20160103181404p:plain

 
 Tensorboardビルドして実行する方法の詳細情報については付属のチュートリアルを参照してください。Tensorboard: Visualizing Your Training

 

チェックポイントを保存する

後でさらにトレーニングや評価のためのモデルを復元するために使用することができるチェックポイントファイルを放出するために、 tf.train.Saverインスタンス化します。

saver = tf.train.Saver()

トレーニングループでは saver.save() メソッドは、定期的にすべての訓練可能な変数の現在の値を使用してトレーニングディレクトリにチェックポイントファイルを書き込むために呼び出されます

saver.save(sess, FLAGS.train_dir, global_step=step)

将来のある後の時点でトレーニングは、モデルパラメータを再ロードするsaver.restore()メソッドを使用して再開される可能性があります

saver.restore(sess, FLAGS.train_dir)

 

(原文サイト)

TensorFlow Mechanics 101