TensorBoard は、TensorFlow の実行とグラフを検査して理解するための Web アプリケーションのスイートです。
この README では、TensorBoard の主要な概念の概要と、TensorBoard が提供する視覚化の解釈方法について説明します。 TensorBoard の使用の詳細な例については、チュートリアル「TensorBoard: Getting Started」を参照してください。 TensorBoard を使用して画像、グラフ、ハイパー パラメーターなどを操作する方法に関するドキュメントは、Colab のチュートリアルのウォークスルーとともにそこからリンクされています。
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 は Google Chrome または Firefox で使用できます。他のブラウザも動作する可能性がありますが、バグやパフォーマンスの問題が発生する可能性があります。
TensorBoard を使用する最初のステップは、TensorFlow の実行からデータを取得することです。このためには、要約操作が必要です。概要 op は、 tf.matmul
やtf.nn.relu
と同様の op であり、テンソルを取り込み、テンソルを生成し、TensorFlow グラフ内から評価されることを意味します。ただし、サマリー操作には工夫があります。サマリー操作が生成する Tensor には、ディスクに書き込まれて TensorBoard に送信されるシリアル化された protobuf が含まれています。 TensorBoard で要約データを視覚化するには、要約演算を評価し、結果を取得し、次に summary.FileWriter を使用してその結果をディスクに書き込む必要があります。例を含む完全な説明はチュートリアルにあります。
サポートされている要約操作には次のものがあります。
tf.summary.scalar
tf.summary.image
tf.summary.audio
tf.summary.text
tf.summary.histogram
概要操作を作成するときは、 tag
も付けます。タグは基本的に、そのオペレーションによって記録されたデータの名前であり、フロントエンドでデータを整理するために使用されます。スカラー ダッシュボードとヒストグラム ダッシュボードはタグごとにデータを整理し、ディレクトリ/類似/階層に従ってタグをフォルダーにグループ化します。タグがたくさんある場合は、スラッシュでグループ化することをお勧めします。
summary.FileWriters
TensorFlow から概要データを取得し、それをlogdir
として知られる指定されたディレクトリに書き込みます。具体的には、データは、ファイル名に「tfevents」が含まれる追加専用のレコード ダンプに書き込まれます。 TensorBoard は完全なディレクトリからデータを読み取り、それを単一の TensorFlow 実行の履歴に編成します。
個別のファイルではなくディレクトリ全体を読み取るのはなぜですか? supervisor.py を使用してモデルを実行している可能性があります。その場合、TensorFlow がクラッシュすると、スーパーバイザはチェックポイントからモデルを再起動します。再起動すると、新しいイベント ファイルへの書き込みが開始され、TensorBoard はさまざまなイベント ファイルを結合して、何が起こったかについての一貫した履歴を生成します。
モデルの複数の実行を視覚的に比較したい場合があります。たとえば、ハイパーパラメータを変更して、収束が速くなったかどうかを確認したいとします。 TensorBoard は、さまざまな「実行」を通じてこれを可能にします。 TensorBoard に起動時にlogdir
が渡されると、 logdir
をルートとするディレクトリ ツリーを再帰的にたどり、tfevents データを含むサブディレクトリを探します。このようなサブディレクトリに遭遇するたびに、それを新しい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_spec name1:/path/to/logs/1,name2:/path/to/logs/2
このフラグ ( --logdir_spec
) は推奨されず、通常は回避できます。 TensorBoard はログ ディレクトリを再帰的に探索します。よりきめ細かい制御を行うには、シンボリックリンク ツリーの使用をお勧めします。 --logdir
代わりに--logdir_spec
使用すると、一部の機能が動作しない可能性があります。
TensorBoard のスカラー ダッシュボードは、時間の経過とともに変化するスカラー統計を視覚化します。たとえば、モデルの損失率や学習率を追跡したい場合があります。 「主要な概念」で説明されているように、複数の実行を比較でき、データはタグごとに整理されます。折れ線グラフには次のような相互作用があります。
各グラフの左下隅にある小さな青いアイコンをクリックすると、グラフが展開されます。
チャート上の長方形の領域をドラッグすると拡大します。
チャートをダブルクリックするとズームアウトします
チャート上にマウスを置くと十字線が表示され、左側の実行セレクターにデータ値が記録されます。
さらに、ダッシュボードの左上にあるボックスに正規表現を書き込むことで、タグを整理するための新しいフォルダーを作成できます。
ヒストグラム ダッシュボードには、テンソルの統計的分布が時間の経過とともにどのように変化したかが表示されます。 tf.summary.histogram
を介して記録されたデータを視覚化します。各チャートは、データの時間的な「スライス」を示します。各スライスは、特定のステップでのテンソルのヒストグラムです。最も古いタイムステップが後ろに、最新のタイムステップが前に配置されています。ヒストグラム モードを「オフセット」から「オーバーレイ」に変更すると、パースペクティブが回転して、すべてのヒストグラム スライスが線としてレンダリングされ、互いにオーバーレイされます。
分布ダッシュボードは、 tf.summary.histogram
のヒストグラム データを視覚化する別の方法です。ディストリビューションに関するいくつかの高レベルの統計が表示されます。グラフ上の各線は、データ全体の分布のパーセンタイルを表します。たとえば、一番下の線は最小値が時間の経過とともにどのように変化したかを示し、中央の線は中央値がどのように変化したかを示します。上から下に読むと、行の意味は次のとおりです: [maximum, 93%, 84%, 69%, 50%, 31%, 16%, 7%, minimum]
これらのパーセンタイルは、正規分布の標準偏差境界として見ることもできます: [maximum, μ+1.5σ, μ+σ, μ+0.5σ, μ, μ-0.5σ, μ-σ, μ-1.5σ, minimum]
色付きの領域は、内側から外側に向かってそれぞれ[σ, 2σ, 3σ]
の幅を持つようになります。
画像ダッシュボードには、 tf.summary.image
経由で保存された png を表示できます。ダッシュボードは、各行が異なるタグに対応し、各列が実行に対応するように設定されています。画像ダッシュボードは任意の png をサポートしているため、これを使用してカスタム ビジュアライゼーション (matplotlib 散布図など) を TensorBoard に埋め込むことができます。このダッシュボードには、各タグの最新の画像が常に表示されます。
オーディオ ダッシュボードには、 tf.summary.audio
経由で保存されたオーディオの再生可能なオーディオ ウィジェットを埋め込むことができます。ダッシュボードは、各行が異なるタグに対応し、各列が実行に対応するように設定されています。このダッシュボードには、常に各タグの最新のオーディオが埋め込まれます。
Graph Explorer は TensorBoard グラフを視覚化し、TensorFlow モデルの検査を可能にします。グラフ ビジュアライザを最大限に活用するには、名前スコープを使用してグラフ内の操作を階層的にグループ化する必要があります。そうしないと、グラフが解読しにくくなる可能性があります。例を含む詳細については、「TensorFlow グラフの検証」チュートリアルを参照してください。
エンベディング プロジェクターを使用すると、高次元データを視覚化できます。たとえば、モデルによって高次元空間に埋め込まれた入力データを表示できます。埋め込みプロジェクターはモデル チェックポイント ファイルからデータを読み取り、語彙ファイルやスプライト イメージなどの追加のメタデータを使用して構成されている場合があります。詳細については、プロジェクターの埋め込みチュートリアルを参照してください。
テキスト ダッシュボードには、 tf.summary.text
経由で保存されたテキスト スニペットが表示されます。ハイパーリンク、リスト、テーブルなどのマークダウン機能がすべてサポートされています。
時系列ダッシュボードには、 tf.summary.scalar
、 tf.summary.image
、またはtf.summary.histogram
経由で保存されたすべてのスカラー、ヒストグラム、およびイメージを含む統合インターフェイスが表示されます。たとえば、「精度」折れ線グラフをアクティベーション ヒストグラムやトレーニング サンプル画像と並べて表示できます。
特徴は次のとおりです。
カスタム実行の色: 実行セレクター内の色付きの円をクリックして、実行の色を変更します。
ピン留めされたカード: カードの「ピン」アイコンをクリックすると、カードが上部のピン留めされたセクションに追加され、簡単に比較できるようになります。
設定: 右側のペインには、チャートやその他の視覚エフェクトの設定が表示されます。同じ URL オリジンでホストされている場合、重要な設定は TensorBoard セッション間で保持されます。
タグフィルターのオートコンプリート: 特定のチャートをより簡単に検索します。
まず、 --logdir
に渡されたディレクトリが正しいことを確認してください。また、Scalars ダッシュボード ([非アクティブ] メニューの下) に移動し、左側のサイドバーの下部にあるログ ディレクトリ パスを探して、これを確認することもできます。
適切なパスからロードしている場合は、イベント ファイルが存在することを確認してください。 TensorBoard はその logdir を再帰的に調べます。データがサブディレクトリの下にネストされている場合は問題ありません。以下に少なくとも 1 つの結果が表示されていることを確認してください。
find DIRECTORY_PATH | grep tfevents
また、検査モードで tensorboard を実行してイベント ファイルの内容を検査することで、イベント ファイルに実際にデータがあることを確認することもできます。
tensorboard --inspect --logdir DIRECTORY_PATH
空の TensorBoard に対応するイベント ファイルの出力には、TensorBoard によって表示されないいくつかの初期イベントを表すいくつかのステップが表示される場合があります (たとえば、Keras TensorBoard コールバックを使用する場合)。
tensor
first_step 0
last_step 2
max_step 2
min_step 0
num_steps 2
outoforder_steps [(2, 0), (2, 0), (2, 0)]
対照的に、より多くのデータを含むイベント ファイルの出力は次のようになります。
tensor
first_step 0
last_step 55
max_step 250
min_step 0
num_steps 60
outoforder_steps [(2, 0), (2, 0), (2, 0), (2, 0), (50, 9), (100, 19), (150, 29), (200, 39), (250, 49)]
更新: 2.3.0 リリース後、TensorBoard は 30 秒ごとに自動リロードされなくなりました。この動作を再度有効にするには、TensorBoard Web インターフェイスの右上にある歯車アイコンをクリックして設定を開き、「データの再読み込み」を有効にしてください。
更新:実験的な
--reload_multifile=true
オプションを使用して、以下で説明する最新のファイルではなく、ディレクトリ内のすべての「アクティブ」ファイルをポーリングして新しいデータを取得できるようになりました。ファイルは、--reload_multifile_inactive_secs
秒前 (デフォルトは 86400) 以内に新しいデータを受信している限り「アクティブ」です。
この問題は通常、TensorBoard がtfevents
ファイルを反復処理する方法が原因で発生します。TensorBoard はイベント ファイルをタイムスタンプ順に処理し、一度に 1 つのファイルのみを読み取ります。タイムスタンプがa
とb
aのファイルがあるとします。 TensorBoard は、
a
のすべてのイベントを読み取ると、新しいイベントがより新しいファイルに書き込まれていると想定するため、決してそのファイルに戻ることはありません。たとえば、2 つのFileWriters
同じディレクトリに同時に書き込みを行っている場合、これにより問題が発生する可能性があります。複数のサマリー ライターがある場合は、それぞれが別のディレクトリに書き込む必要があります。
更新:実験的な
--reload_multifile=true
オプションを使用して、ディレクトリ内のすべての「アクティブ」ファイルに新しいデータをポーリングできるようになりました。これは、--reload_multifile_inactive_secs
秒前 (デフォルトは 86400) 以内に新しいデータを受信したファイルとして定義されます。
いいえ。TensorBoard は一度に 1 つのイベント ファイルのみが書き込まれることを想定しており、複数のサマリー ライターは複数のイベント ファイルを意味します。分散 TensorFlow インスタンスを実行している場合は、すべての要約処理を担当する「チーフ」として 1 人のワーカーを指定することをお勧めします。例については、supervisor.py を参照してください。
時間を逆行してそれ自体と重なっているように見えるデータが表示されている場合、考えられる説明がいくつかあります。
TensorFlow が複数実行され、すべてが同じログ ディレクトリに書き込まれる可能性があります。 TensorFlow を実行するたびに、独自のログディレクトリに書き込むようにしてください。
更新:実験的な
--reload_multifile=true
オプションを使用して、ディレクトリ内のすべての「アクティブ」ファイルに新しいデータをポーリングできるようになりました。これは、--reload_multifile_inactive_secs
秒前 (デフォルトは 86400) 以内に新しいデータを受信したファイルとして定義されます。
コードにバグがあり、( FileWriter.add_summary
に渡される) global_step 変数が正しく維持されていない可能性があります。
TensorFlow ジョブがクラッシュし、以前のチェックポイントから再開された可能性があります。以下のTensorFlow の再起動を処理する方法を参照してください。
回避策として、TensorBoard の x 軸表示をsteps
からwall_time
に変更してみてください。これにより、多くの場合、問題が解決されます。
TensorFlow は、ジョブがクラッシュしたり強制終了された場合に正常に回復するためのメカニズムを備えて設計されています。TensorFlow は定期的にモデル チェックポイント ファイルを書き込むことができるため、トレーニングの進行状況をすべて失うことなく TensorFlow を再起動できます。
ただし、これにより TensorBoard の状況が複雑になる可能性があります。 TensorFlow がステップa
でチェックポイントを書き込み、ステップb
まで実行を続け、その後クラッシュしてタイムスタンプa
で再起動したと想像してください。 a
とb
の間に書き込まれたすべてのイベントは、再起動イベントによって「孤立」したため、削除する必要があります。
これを容易にするために、 tensorflow/core/util/event.proto
にSessionStatus.START
イベントとして記録できるSessionLog
メッセージがあります。すべてのイベントと同様に、それに関連するstep
が存在する場合があります。 TensorBoard がステップa
のSessionStatus.START
イベントを検出した場合、 a
より大きいステップを持つすべてのイベントが孤立していると想定し、それらのイベントを破棄します。この動作は、フラグ--purge_orphaned_data false
(0.7 以降のバージョン) で無効にすることができます。
Scalar ダッシュボードはデータのエクスポートをサポートしています。左側のバーにある「ダウンロード リンクを有効にする」オプションをクリックできます。次に、各プロットには、そこに含まれるデータのダウンロード リンクが表示されます。
完全なデータセットにアクセスする必要がある場合は、 summary_iterator
メソッドを使用して TensorBoard が消費するイベント ファイルを読み取ることができます。
はい!例の 1 つを複製していじくり回して、独自の素晴らしいビジュアライゼーションを作成できます。プラグイン システムに関する詳細なドキュメントは、ADDING_A_PLUGIN ガイドで説明されています。プラグインの機能に関する機能リクエストや質問を遠慮なく提出してください。
独自の画期的な新しいプラグインに満足したら、PyPI に公開してコミュニティと共有する方法についての配布セクションを参照してください。
カスタム スカラー プラグインを使用すると、カスタムの実行タグ ペアの線を含むスカラー プロットを作成できます。ただし、元のスカラー ダッシュボード内では、各スカラー プロットは特定のタグのデータに対応し、そのタグを含む各実行の線が含まれています。
マージン プロット (下限と上限を視覚化する) は、カスタム スカラー プラグインを使用して作成できます。オリジナルのスカラー プラグインはマージンの視覚化をサポートしていません。
これはまだ不可能です。回避策として、独自のコード (matplotlib など) でカスタム プロットを作成し、それをSummaryProto
( core/framework/summary.proto
) に書き込み、 FileWriter
に追加することができます。次に、カスタム プロットが TensorBoard 画像タブに表示されます。
TensorBoard はリザーバー サンプリングを使用してデータをダウンサンプリングし、RAM にロードできるようにします。 --samples_per_plugin
コマンドライン引数を使用して、タグごとに保持する要素の数を変更できます (例: --samples_per_plugin=scalars=500,images=20
)。詳細については、このスタック オーバーフローの質問を参照してください。
TensorBoard 2.0 より前のバージョンの TensorBoard は、デフォルトでホスト0.0.0.0
上で動作し、パブリックにアクセスできます。これらのバージョンの TensorBoard では、起動時に--host localhost
指定することでポップアップを停止できます。
TensorBoard 2.0 以降では、 --host localhost
がデフォルトです。 --bind_all
使用すると、IPv4 と IPv6 の両方でパブリック ネットワークにサービスを提供する古い動作が復元されます。
tensorboard
実行できますか?TensorFlow がインストールされていない場合、TensorBoard 1.14 以降は、制限された機能セットで実行できます。主な制限は、1.14 の時点では、スカラー、カスタム スカラー、画像、オーディオ、グラフ、プロジェクター (部分的)、分布、ヒストグラム、テキスト、PR カーブ、メッシュのプラグインのみがサポートされていることです。さらに、Google Cloud Storage 上のログ ディレクトリはサポートされていません。
DEVELOPMENT.mdを参照してください。
まず、GitHub の問題とスタック オーバーフローを検索してみてください。他の誰かがすでに同じ問題や質問を抱えている可能性があります。
一般的な使用上の質問 (またはローカル設定に固有の問題) については、Stack Overflow に問い合わせてください。
TensorBoard でバグを見つけた場合は、提供できる限りのサポート情報 (例: tensorboard --inspect
の出力を含むイベント ファイルの添付など) を添えて GitHub の問題を提出してください。