GitHubじゃ!Pythonじゃ!

GitHubからPython関係の優良リポジトリを探したかったのじゃー、でも英語は出来ないから日本語で読むのじゃー、英語社会世知辛いのじゃー

tensorflow

tensorboard – TensorFlowのビジュアライゼーションツールキット

投稿日:

TensorFlowのビジュアライゼーションツールキット

TensorBoard

TensorBoardは、TensorFlowの実行とグラフを検査して理解するためのWebアプリケーションスイートです。

このREADMEには、TensorBoardの主要概念の概要と、TensorBoardが提供する視覚化の解釈方法が記載されています。 TensorBoardを使用する詳細な例については、 TensorBoard:Visualizing Learningのチュートリアルを参照してください。 グラフビジュアライザの詳細については、このチュートリアル: TensorBoard:グラフビジュアライゼーションを参照してください。

また、TensorBoardの設定と使用方法を説明したこのビデオチュートリアルもご覧ください。 TensorFlowのトレーニングとTensorBoardの使用に関するエンドツーエンドの例を含む関連するチュートリアルがあります。

使用法

TensorBoardを実行する前に、サマリーライターを作成してログディレクトリにサマリーデータを生成していることを確認してください。

# sess.graph contains the graph definition; that enables the Graph Visualizer.

file_writer = tf.summary.FileWriter('/path/to/logs', sess.graph)

詳細については、TensorBoardチュートリアルを参照してください イベントファイルを取得したら、TensorBoardを実行してログディレクトリを指定します。 プリコンパイルされたTensorFlowパッケージを使用している場合(pip経由でインストールした場合など)は、次のコマンドを実行します。

tensorboard --logdir path/to/logs

または、ソースからビルドする場合:

bazel build tensorboard:tensorboard
./bazel-bin/tensorboard/tensorboard --logdir path/to/logs

# or even more succinctly
bazel run tensorboard -- --logdir path/to/logs

これにより、TensorBoardが起動したことが表示されます。 次に、 http:// localhost:6006に接続します

TensorBoardにはログを読み込むためにlogdirが必要です。 TensorBoardの設定については、 tensorboard --help実行してtensorboard --help

TensorBoardはGoogle ChromeまたはFirefoxで使用できます。 他のブラウザも動作するかもしれませんが、バグやパフォーマンスの問題があるかもしれません。

主なコンセプト

Summary Ops:TensorBoardがTensorFlowからデータを取得する方法

TensorBoardを使用する最初のステップは、TensorFlowの実行からデータを取得することです。 このためには、 要約操作が必要です。 Summary opsはtf.matmultf.nn.reluようなtf.matmulで、テンソルを取り、テンソルを生成し、TensorFlowグラフから評価されます。 しかし、サマリーには紆余曲折があります。彼らが作り出すTensorsには、ディスクに書き込まれてTensorBoardに送られるシリアル化されたprotobufsが含まれています。 TensorBoardでサマリーデータを視覚化するには、summary.FileWriterを使用してサマリーopを評価し、結果を取り出してその結果をディスクに書き込む必要があります。 このチュートリアルでは、例と完全な説明があります。

サポートされている概要操作には次のものがあります。

  • tf.summary.scalar
  • tf.summary.image
  • tf.summary.audio
  • tf.summary.text
  • tf.summary.histogram

タグ:データに名前を付ける

要約を作成すると、 tagtagます。 タグは、基本的に、そのオペレーションによって記録されたデータの名前であり、フロントエンドのデータを整理するために使用されます。 スカラーとヒストグラムのダッシュボードは、タグごとにデータを整理し、ディレクトリ/類似/階層に従ってタグをフォルダにグループ化します。 たくさんのタグがある場合は、タグをスラッシュでグループ化することをおすすめします。

イベントファイルとLogDirs:TensorBoardがデータを読み込む方法

summary.FileWritersは、TensorFlowから要約データを取得し、logdirと呼ばれる指定されたディレクトリに書き込みます。 具体的には、データはファイル名に “tfevents”を持つ追記専用レコードダンプに書き込まれます。 TensorBoardは、完全なディレクトリからデータを読み取り、単一のTensorFlow実行の履歴に編成します。

個々のファイルではなくディレクトリ全体を読み取るのはなぜですか? supervisor.pyを使用してモデルを実行している可能性があります。その場合、TensorFlowがクラッシュした場合、スーパーバイザはチェックポイントから再起動します。 再起動すると、新しいイベントファイルへの書き込みが開始され、TensorBoardはさまざまなイベントファイルを一緒にステッチして、何が起こったかの一貫した履歴を作成します。

実行:モデルの異なる実行の比較

モデルの複数回の実行を視覚的に比較することができます。 たとえば、ハイパーパラメータを変更し、それがより速く収束しているかどうかを確認したいとします。 TensorBoardは、これをさまざまな “実行”によって可能にします。 TensorBoardが起動時にlogdirを渡すと、tfeventsデータを含むサブディレクトリを探してlogdirをルートとするディレクトリツリーを再帰的に参照します。 そのようなサブディレクトリに出会うたびに、それは新しいrunとしてロードされ、フロントエンドはそれに応じてデータを整理します。

たとえば、「run1」と「run2」の2つの実行を含む、組織的なTensorBoardログディレクトリがあります。

/some/path/mnist_experiments/
/some/path/mnist_experiments/run1/
/some/path/mnist_experiments/run1/events.out.tfevents.1456525581.name
/some/path/mnist_experiments/run1/events.out.tfevents.1456525585.name
/some/path/mnist_experiments/run2/
/some/path/mnist_experiments/run2/events.out.tfevents.1456525385.name
/tensorboard --logdir /some/path/mnist_experiments

カンマで区切られたログディレクトリのリストを渡すこともできます.TensorBoardは各ディレクトリを監視します。 名前とパスの間にコロンを挿入することで、個々のログディレクトリに名前を割り当てることもできます。

tensorboard --logdir name1:/path/to/logs/1,name2:/path/to/logs/2

視覚化

スカラダッシュボード

TensorBoardのScalar Dashboardは、時間とともに変化するスカラー統計を視覚化します。 たとえば、モデルの損失率や学習率を追跡することができます。 主要コンセプトで説明したように、複数のランを比較することができ、データはタグで整理されます。 折れ線グラフには、次のような対話があります。

  • 各グラフの左下隅にある小さな青色のアイコンをクリックすると、グラフが展開されます

  • グラフ上の長方形の領域をドラッグすると、ズームインします

  • グラフをダブルクリックするとズームアウトします

  • グラフ上にマウスを置くと、左にランセレクターにデータ値が記録された十字線が表示されます。

さらに、ダッシュボードの左上のボックスに正規表現を書き込むことで、タグを整理するための新しいフォルダを作成することができます。

ヒストグラムダッシュボード

ヒストグラムダッシュボードには、テンソルの統計分布が時間とともにどのように変化したかが表示されます。 tf.summary.histogramを介して記録されたデータを視覚化します。 各グラフは、データの一時的な「スライス」を示し、各スライスは、所定のステップにおけるテンソルのヒストグラムである。 これは、背中の中で最も古いタイムステップと、最も新しいタイムステップを前にして編成されています。 ヒストグラムモードを「オフセット」から「オーバーレイ」に変更すると、パースペクティブが回転し、すべてのヒストグラムスライスが線としてレンダリングされ、互いにオーバーレイされます。

配布ダッシュボード

Distribution Dashboardは、 tf.summary.histogramからヒストグラムデータを視覚化する別の方法です。 これは、ディストリビューションに関するいくつかの高度な統計を示しています。 グラフの各行は、データに対する分布の百分位数を表します。たとえば、最下行は時間の経過とともに最小値がどのように変化したかを示し、中央の線は中央値がどのように変化したかを示しています。 上から下に読むと、 [maximum, 93%, 84%, 69%, 50%, 31%, 16%, 7%, minimum]

これらのパーセンタイルは[maximum, μ+1.5σ, μ+σ, μ+0.5σ, μ, μ-0.5σ, μ-σ, μ-1.5σ, minimum]標準偏差の境界として見ることもでき[maximum, μ+1.5σ, μ+σ, μ+0.5σ, μ, μ-0.5σ, μ-σ, μ-1.5σ, minimum]内側から外側に向かって読み取られる着色領域は、それぞれ幅[σ, 2σ, 3σ]有する。

画像ダッシュボード

イメージダッシュボードには、 tf.summary.imageを介して保存されたpngが表示されます。 ダッシュボードは、各行が異なるタグに対応するように設定され、各列は実行に対応します。 イメージダッシュボードは任意のpngをサポートしているので、これを使用してカスタムの視覚化(matplotlib散布図など)をTensorBoardに埋め込むことができます。 このダッシュボードには、常に各タグの最新の画像が表示されます。

オーディオダッシュボード

オーディオダッシュボードには、 tf.summary.audio保存されたオーディオ用の再生可能なオーディオウィジェットが埋め込まれていtf.summary.audio ダッシュボードは、各行が異なるタグに対応するように設定され、各列は実行に対応します。 このダッシュボードには、常に各タグの最新のオーディオが埋め込まれています。

グラフエクスプローラ

Graph Explorerは、TensorBlowグラフを視覚化し、TensorFlowモデルの検査を可能にします。 グラフビジュアライザーを最大限に活用するには、ネームスコープを使用してグラフ内のopsを階層的にグループ化する必要があります。そうしないと、グラフが解読しにくくなる可能性があります。 例を含む詳細については、グラフビジュアライザーのチュートリアルを参照してください

エンベディングプロジェクタ

エンベディングプロジェクタでは、高次元のデータを視覚化することができます。 たとえば、モデルによって高次元空間に埋め込まれた入力データを表示することができます。 埋め込みプロジェクタは、モデルチェックポイントファイルからデータを読み取り、ボキャブラリファイルやスプライトイメージなどの追加のメタデータを使用して構成できます。 詳細については、埋め込みプロジェクタのチュートリアルを参照してください

テキストダッシュボード

テキストダッシュボードには、 tf.summary.textを介して保存されたテキストスニペットが表示されます。 ハイパーリンク、リスト、テーブルなどのMarkdown機能がすべてサポートされています。

よくある質問

私のTensorBoardはデータを表示していません! どうしましたか?

まず、TensorBoardが正しいディレクトリからデータを適切にロードしていることを確認します。 tensorboard --logdir DIRECTORY_PATH --debug起動tensorboard --logdir DIRECTORY_PATH --debugとフォームの出力を探す

INFO:tensorflow:TensorBoard path_to_run is: {'DIRECTORY_PATH': None}

DIRECTORY_PATH TensorBoardが見ていることを確認します。 (注:TensorBoard 〜〜で始まるパスを処理しないという既知の問題があります )。

適切なパスからロードする場合は、イベントファイルが存在することを確認してください。 TensorBoardはlogdirを再帰的に実行しますが、データがサブディレクトリの下にネストされていれば問題ありません。 次のコマンドを実行してみてください。

find DIRECTORY_PATH | grep tfevents

少なくとも1つの結果がある場合、TensorBoardはデータをロードできなければなりません。

最後に、イベントファイルに実際にデータがあることを確認しましょう。 インスペクタモードでテンソルボードを実行して、イベントファイルの内容を検査します。

tensorboard --inspect --logdir DIRECTORY_PATH

この手順を実行した後でもまだ動作していない場合は、 GitHubで問題を提出してください。 動作していないイベントファイルを提供すると、デバッグするのがずっと簡単になります。

TensorBoardが自分のデータの一部しか表示していないか、正しく更新されていません。

この問題は通常、 tfeventsファイルをどのように反復するかによって発生します。タイムファイル順にイベントファイルを処理し、 tfevents 1つのファイルのみを読み込みます。 タイムスタンプabを持つファイルがあるとしましょう。a a<bです。 TensorBoardがaですべてのイベントを読み込むと、新しいイベントが最新のファイルに書き込まれているとみなされるa 、TensorBoardがaですべてのイベントを読み込んだ後a 、それは決してそのイベントに戻りません。 たとえば、2つのFileWriters同時に同じディレクトリに書き込んでいる場合に、この問題が発生する可能性があります。 サマリーライターが複数いる場合は、それぞれ別のディレクトリに書き込む必要があります。

TensorBoardは複数の要約作家や分散した要約作家をサポートしていますか?

TensorBoardは、一度に1つのイベントファイルしか書き込まれないと予想しています。複数のサマリーライターは、複数のイベントファイルを意味します。 分散TensorFlowインスタンスを実行している場合は、すべてのサマリー処理を担当する「チーフ」として1人のワーカーを指定することをお勧めします。 例については、 supervisor.pyを参照してください。

私はデータ自体が重なっているのを見ている! 何がありますか?

逆方向に移動して重複しているようなデータが表示されている場合は、いくつかの説明があります。

  • TensorFlowを複数実行して、すべて同じログディレクトリに書き込むことができます。 各TensorFlowに独自のlogdirへの書き込みを実行させてください。

  • global_step変数( FileWriter.add_summary )が正しく管理されていないコードにバグがある可能性があります。

  • TensorFlowジョブがクラッシュし、以前のチェックポイントから再開された可能性があります。 下記の「TensorFlowの再起動を処理する方法」を参照してください。

この問題を回避するには、TensorBoardのx軸の表示をstepsからwall_time変更してみてください。 これは頻繁に問題を解決します。

TensorFlowの再起動はどのように処理する必要がありますか?

TensorFlowは、ジョブがクラッシュしたり、強制終了されたりすると、優雅な復旧の仕組みで設計されています.TensorFlowは定期的にモデルチェックポイントファイルを書き込むことができ、トレーニングの進行状況をすべて失うことなくTensorFlowを再起動できます。

しかし、これはTensorBoardのものを複雑にする可能性があります。 TensorFlowがステップaでチェックポイントを書き込んだ後、ステップbまで実行を継続した後、タイムスタンプaでクラッシュして再起動しaます。 ab間で書かれたすべてのイベントは、再起動イベントによって「孤立していた」ため、削除する必要があります。

これを容易にするために、 SessionStatus.STARTをイベントとして記録できるSessionLogメッセージがtensorflow/core/util/event.protoあります。 すべてのイベントと同様に、それに関連するstepがあるかもしれません。 TensorBoardがステップaSessionStatus.STARTイベントを検出すると、aより大きいステップを持つすべてのイベントが孤立しているとみなされ、それらのイベントは破棄されます。 この動作はフラグ--purge_orphaned_data false (0.7以降のバージョン)で無効にすることができます。

TensorBoardからデータをどのようにエクスポートできますか?

スカラーダッシュボードはデータのエクスポートをサポートしています。 左のバーの[ダウンロードリンクを有効にする]オプションをクリックします。 次に、各プロットに含まれるデータのダウンロードリンクが表示されます。

完全なデータセットにアクセスする必要がある場合は、TensorBoardが消費するイベントファイルをsummary_iteratorメソッドを使用して読み取ることができます。

プロットに表示する線をカスタマイズすることはできますか?

カスタムスカラープラグインを使用すると、 カスタムランタグペアの行を含むスカラープロットを作成できます。 ただし、元のスカラーダッシュボードでは、各スカラープロットは特定のタグのデータに対応し、そのタグを含む各実行の行を含みます。

ラインの上下のマージンを視覚化することはできますか?

カスタムスカラープラグインを使用して、マージンプロット(下限と上限を視覚化する)を作成できます オリジナルのスカラプラグインは、マージンの視覚化をサポートしていません。

散布図(または他のカスタムプロット)を作成できますか?

これはまだできません。 この問題を回避するには、独自のコード(matplotlibなど)で独自のプロットを作成し、それをSummaryProtocore/framework/summary.proto )に書き込んでFileWriter追加することができます。 カスタムプロットがTensorBoard画像タブに表示されます。

私のデータはダウンサンプリングされていますか? 私は本当にすべてのデータを見ていますか?

TensorBoardはリザーバサンプリングを使用してデータをダウンサンプリングし、RAMにロードすることができます。 tensorboard / backend / application.pyにタグごとに保持する要素の数を変更できます 詳細については、このStackOverflowの質問を参照してください。

MacでTensorBoardを実行するたびにネットワークセキュリティのポップアップが表示されます。

これは、デフォルトでは、TensorBoardは0.0.0.0ホストで公開されているためです。 起動時に--host localhostを指定すると、ポップアップを停止できます。

TensorBoardの開発にどのように貢献できますか?

DEVELOPMENT.mdを参照してください。

私はここで扱われなかった別の問題があります!

まず、 GitHubの問題スタックオーバーフローを調べてみましょう。 他の誰かがすでに同じ問題や質問をしている可能性があります。

バグがある場合は、GitHubの問題提出してください。 バグが特定のデータに関連している場合(イベントが適切にロードされていないなど)、デバッグと修正を簡単に行うために、次の両方を行ってください。

  • インスペクタモードでテンソルボードを実行し、デバッグ出力をコピーして貼り付けます。
  • 問題を再現するイベントファイルをアップロードしてください。

機能リクエストがある場合は、GitHubの問題提出してください。

一般的な使用上の質問は、 スタックオーバーフローに行く必要があります。







-tensorflow

執筆者: