TensorBoardチュートリアル:TensorFlowグラフの可視化

⚡ スマートサマリー

TensorBoardは、TensorFlowのトレーニング実行結果を視覚的に表示するフロントエンドであり、損失曲線、モデルグラフ、重みヒストグラム、埋め込みなどをプロットします。このチュートリアルでは、推定器を使用してイベントファイルを書き込み、ポート6006でダッシュボードを開きます。

  • 🔘 5つのダッシュボード: スカラー、グラフ、分布、ヒストグラム、プロジェクターはそれぞれ異なるサマリータイプを読み取ります。
  • ☑️ ログディレクトリ: model_dir引数は、TensorFlowがevents.out.tfeventsファイルを書き込む場所を決定します。
  • ✅ 起動コマンド: tensorboard –logdir=PATH を実行してから、任意のブラウザで http://localhost:6006 を開いてください。
  • 🧪 学習率: ギザギザした損失曲線は、モデルが収束するにはレートが高すぎることを示しています。
  • 🛠️ TensorFlow 2: Keras TensorBoard のコールバックは、元の例で示されていた推定器のログ出力を置き換えます。
  • ⚠️ トラブルシューティング: ダッシュボードが空の場合、ほぼ間違いなくログディレクトリのパスがトレーニング実行と一致していないことを意味します。

TensorBoardチュートリアル:TensorFlowグラフの可視化

TensorBoard とは何ですか?

TensorBoardは、グラフやその他のツールを視覚化してモデルを理解、デバッグ、最適化するためのインターフェースです。機械学習ワークフローの測定と視覚化を提供するツールです。 trac損失や精度などのk個の指標を用いて、モデルグラフを可視化し、埋め込み表現を低次元空間に投影します。

TensorBoardには以下のものが付属しています TensorFlow そして、トレーニングジョブがディスクに書き込むイベントファイルを読み込む、小型のローカルWebサーバーとして動作します。

TensorBoardを使用したTensorFlowグラフ可視化の例

以下の画像は、このチュートリアルで生成するTensorBoardグラフのメインパネルです。

トレーニング済みのDNN回帰器の平均損失曲線を示すTensorBoard Scalarsダッシュボード

下の図から、TensorBoard グラフ視覚化のパネルを見ることができます。 パネルにはさまざまなタブが含まれており、モデルの実行時に追加する情報のレベルにリンクされています。

TensorBoardのナビゲーションバーには、「スカラー」、「グラフ」、「分布」、「ヒストグラム」、「プロジェクター」の各タブがあります。

  • スカラー: モデルトレーニング中にさまざまな有用な情報を表示する
  • グラフ: モデルを表示する
  • ヒストグラム: ヒストグラムで重みを表示する
  • ディストリビューション: 重みの分布を表示する
  • プロジェクター: 主成分分析とT-SNEアルゴリズムを示します。次元削減に使用される手法です。

このTensorBoardチュートリアルでは、シンプルなモデルをトレーニングします。 深い学習 これはモデルであり、生成されるグラフは下から上に読み取られます。

グラフを見れば、このモデルの仕組みが理解できます。下のスクリーンショットにある番号付きのバッジは、以下の4つの段階を示しています。

  1. データをモデルにエンキューする: バッチ サイズに等しい量のデータをモデルにプッシュします。つまり、各反復後のデータ フィードの数です。
  2. データを Tensor にフィードする
  3. モデルを訓練する
  4. トレーニング中のバッチ数を表示します。 モデルをディスクに保存します。

TensorBoard 上の TensorFlow グラフ。入力キュー、DNN ブロック、保存操作のノードには番号が付けられています。

TensorBoardの基本的な考え方は、ニューラルネットワークはブラックボックスのように振る舞うため、その内部を調べるためのツールが必要だという点にあります。TensorBoardは、ネットワークの内部を探るための懐中電灯のようなものだと考えてください。

これは、操作間の依存関係、重みの計算方法、損失関数の表示、その他の多くの有用な情報を理解するのに役立ちます。これらすべての情報をまとめると、デバッグしてモデルを改善する方法を見つけるための優れたツールが得られます。

TensorBoardグラフがどれほど便利かを知っていただくために、以下の2つの損失曲線をご覧ください。

学習しないモデルと収束するモデルを比較した、2つのTensorBoard損失曲線を並べて表示。

ニューラルネットワークは、異なるニューロンをどのように接続するか、そしてモデルが結果を予測できるようになるまでに何層の層が必要かを決定します。アーキテクチャが定義されたら、モデルを訓練するだけでなく、予測の精度を測定する指標も訓練する必要があります。この指標は損失関数と呼ばれ、目標は損失関数を最小化することです。つまり、モデルのエラーを減らすということです。

どの学習アルゴリズムも、損失がより平坦な線になるまで計算を何度も繰り返します。損失を最小化するには、学習率、つまりモデルが学習する速度も必要です。学習率を高く設定しすぎると、モデルは何も学習する時間がなくなってしまいます。左側のグラフは、モデルが事実上推測しているため線が上下に動いている状態を示しています。右側のグラフは、反復回数を重ねるごとに損失が減少し、曲線が平坦になる様子を示しています。これは、モデルが解を見つけたことを意味します。

TensorBoardは、こうした指標を視覚化し、潜在的な問題点を明確にするのに最適なツールです。ニューラルネットワークは解決策を見つけるまでに数時間から数週間かかることがありますが、TensorBoardはジョブの実行中に指標を更新します。そのため、モデルが正しく学習しているかどうかを確認するために最後まで待つ必要はありません。TensorBoardを開いて学習の進捗状況を確認し、必要に応じて適切な変更を加えるだけで済みます。

TensorBoardの使い方

このセクションでは、ターミナルから TensorBoard を開く方法を学びます。 macOS コマンドラインから Windowsここではモデルよりもツールに重点が置かれているため、トレーニングコードは意図的に短く抑えられています。

まず、トレーニング中に使用するライブラリをインポートする必要があります。

## Import the library
import tensorflow as tf
import numpy as np

データはあなたが作成します。これは10000行5列の配列です。

X_train = (np.random.sample((10000,5)))
y_train =  (np.random.sample((10000,1)))
X_train.shape

出力

(10000, 5)

以下のコードは、データを変換してモデルを作成します。

学習率は0.1に設定されていることに注意してください。この値を高く変更すると、モデルは解を見つけることができません。上の図の左側で起こっているのはまさにこのことです。

この例では、数学的計算をラップする高レベル API である TensorFlow エスティメータを使用します。エスティメータは TensorFlow 1.x API に属するため、以下の 2 つのコードスニペットは 1.x インストール環境または以下の環境で実行されます。 tf.compat.v1 名前空間

ログファイルを作成するには、パスを指定する必要があります。これは引数を使用して行います。 model_dir.

以下の TensorBoard の例では、モデルを作業ディレクトリ内、つまりノートブックを保存する場所または Python ファイル。このパス内に、TensorFlow は train という名前のフォルダを作成し、その中に linreg という名前の子フォルダを作成します。

feature_columns = [
      tf.feature_column.numeric_column('x', shape=X_train.shape[1:])]
DNN_reg = tf.estimator.DNNRegressor(feature_columns=feature_columns,
# Indicate where to store the log file    
     model_dir='train/linreg',    
     hidden_units=[500, 300],    
     optimizer=tf.train.ProximalAdagradOptimizer(      
          learning_rate=0.1,      
          l1_regularization_strength=0.001    
      )
)

出力

INFO:tensorflow:Using default config.
INFO:tensorflow:Using config: {&#x27;_model_dir': 'train/linreg', '_tf_random_seed': None, '_save_summary_steps': 100, '_save_checkpoints_steps': None, '_save_checkpoints_secs': 600, '_session_config': None, '_keep_checkpoint_max': 5, '_keep_checkpoint_every_n_hours': 10000, '_log_step_count_steps': 100, '_train_distribute': None, '_service': None, '_cluster_spec': <tensorflow.python.training.server_lib.ClusterSpec object at 0x1818e63828>, '_task_type': 'worker', '_task_id': 0, '_global_id_in_cluster': 0, '_master': '', '_evaluation_master': '', '_is_chief': True, '_num_ps_replicas': 0, '_num_worker_replicas': 1}

このTensorFlowによるグラフ可視化の例の最後のステップは、モデルのトレーニングです。トレーニング中、TensorFlowはモデルディレクトリに情報を書き込みます。

# Train the estimator
train_input = tf.estimator.inputs.numpy_input_fn(    
     x={"x": X_train},    
     y=y_train, shuffle=False,num_epochs=None)
DNN_reg.train(train_input,steps=3000)

出力

INFO:tensorflow:Calling model_fn.
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Create CheckpointSaverHook.
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Saving checkpoints for 1 into train/linreg/model.ckpt.
INFO:tensorflow:loss = 40.060104, step = 1
INFO:tensorflow:global_step/sec: 197.061
INFO:tensorflow:loss = 10.62989, step = 101 (0.508 sec)
INFO:tensorflow:global_step/sec: 172.487
INFO:tensorflow:loss = 11.255318, step = 201 (0.584 sec)
INFO:tensorflow:global_step/sec: 193.295
INFO:tensorflow:loss = 10.604872, step = 301 (0.513 sec)
INFO:tensorflow:global_step/sec: 175.378
INFO:tensorflow:loss = 10.090343, step = 401 (0.572 sec)
INFO:tensorflow:global_step/sec: 209.737
INFO:tensorflow:loss = 10.057928, step = 501 (0.476 sec)
INFO:tensorflow:global_step/sec: 171.646
INFO:tensorflow:loss = 10.460144, step = 601 (0.583 sec)
INFO:tensorflow:global_step/sec: 192.269
INFO:tensorflow:loss = 10.529617, step = 701 (0.519 sec)
INFO:tensorflow:global_step/sec: 198.264
INFO:tensorflow:loss = 9.100082, step = 801 (0.504 sec)
INFO:tensorflow:global_step/sec: 226.842
INFO:tensorflow:loss = 10.485607, step = 901 (0.441 sec)
INFO:tensorflow:global_step/sec: 152.929
INFO:tensorflow:loss = 10.052481, step = 1001 (0.655 sec)
INFO:tensorflow:global_step/sec: 166.745
INFO:tensorflow:loss = 11.320213, step = 1101 (0.600 sec)
INFO:tensorflow:global_step/sec: 161.854
INFO:tensorflow:loss = 9.603306, step = 1201 (0.619 sec)
INFO:tensorflow:global_step/sec: 179.074
INFO:tensorflow:loss = 11.110269, step = 1301 (0.556 sec)
INFO:tensorflow:global_step/sec: 202.776
INFO:tensorflow:loss = 11.929443, step = 1401 (0.494 sec)
INFO:tensorflow:global_step/sec: 144.161
INFO:tensorflow:loss = 11.951693, step = 1501 (0.694 sec)
INFO:tensorflow:global_step/sec: 154.144
INFO:tensorflow:loss = 8.620987, step = 1601 (0.649 sec)
INFO:tensorflow:global_step/sec: 151.094
INFO:tensorflow:loss = 10.666125, step = 1701 (0.663 sec)
INFO:tensorflow:global_step/sec: 193.644
INFO:tensorflow:loss = 11.0349865, step = 1801 (0.516 sec)
INFO:tensorflow:global_step/sec: 189.707
INFO:tensorflow:loss = 9.860596, step = 1901 (0.526 sec)
INFO:tensorflow:global_step/sec: 176.423
INFO:tensorflow:loss = 10.695, step = 2001 (0.567 sec)
INFO:tensorflow:global_step/sec: 213.066
INFO:tensorflow:loss = 10.426752, step = 2101 (0.471 sec)
INFO:tensorflow:global_step/sec: 220.975
INFO:tensorflow:loss = 10.594796, step = 2201 (0.452 sec)
INFO:tensorflow:global_step/sec: 219.289
INFO:tensorflow:loss = 10.4212265, step = 2301 (0.456 sec)
INFO:tensorflow:global_step/sec: 215.123
INFO:tensorflow:loss = 9.668612, step = 2401 (0.465 sec)
INFO:tensorflow:global_step/sec: 175.65
INFO:tensorflow:loss = 10.009649, step = 2501 (0.569 sec)
INFO:tensorflow:global_step/sec: 206.962
INFO:tensorflow:loss = 10.477722, step = 2601 (0.483 sec)
INFO:tensorflow:global_step/sec: 229.627
INFO:tensorflow:loss = 9.877638, step = 2701 (0.435 sec)
INFO:tensorflow:global_step/sec: 195.792
INFO:tensorflow:loss = 10.274586, step = 2801 (0.512 sec)
INFO:tensorflow:global_step/sec: 176.803
INFO:tensorflow:loss = 10.061047, step = 2901 (0.566 sec)
INFO:tensorflow:Saving checkpoints for 3000 into train/linreg/model.ckpt.
INFO:tensorflow:Loss for final step: 10.73032.

<tensorflow.python.estimator.canned.dnn.DNNRegressor at 0x1818e63630>

TensorFlow 2では、同じ処理はKeras TensorBoardコールバックによって行われ、推定コードなしでグラフとエポックごとのメトリクスが書き込まれます。

logdir = "logs/fit/" + datetime.now().strftime("%Y%m%d-%H%M%S")
tensorboard_callback = keras.callbacks.TensorBoard(log_dir=logdir)

model.fit(train_images, train_labels, epochs=5,
          callbacks=[tensorboard_callback])

実行が終了すると、ログディレクトリにはチェックポイントファイル、 graph.pbtxt ファイルと 1 つ以上の events.out.tfevents ファイル ― TensorBoard が読み込むものと全く同じもの。

『Brooklyn Galaxy』のために、倪氏はブルックリン美術館のコレクションからXNUMX点の名品を選び、そのイメージを極めて詳細に描き込みました。これらの作品は、彼の作品とともに中国ギャラリーに展示されています。彼はXNUMX年にこの作品の制作を開始しましたが、最初の硬貨には、当館が所蔵する macOS users

以下の Finder 表示は、作業ディレクトリ内に作成された新しい train/linreg フォルダを示しています。

macOS チェックポイント、イベント、およびgraph.pbtxtファイルを含むtrainおよびlinregログフォルダを示すファイルリスト

『Brooklyn Galaxy』のために、倪氏はブルックリン美術館のコレクションからXNUMX点の名品を選び、そのイメージを極めて詳細に描き込みました。これらの作品は、彼の作品とともに中国ギャラリーに展示されています。彼はXNUMX年にこの作品の制作を開始しましたが、最初の硬貨には、当館が所蔵する Windows users

On Windows アドレスバーにハイライト表示されているように、model_dirに渡したパスの下に同じファイルが表示されます。

Windows TensorFlowのイベントファイルとチェックポイントファイルを含むtrain linregフォルダのエクスプローラビュー

同じイベントファイル形式は以下によって生成されます。 PyTorchそのため、ダッシュボードはTensorFlowの実行結果に限定されません。

ログイベントが書き込まれたので、TensorBoard を開くことができます。TensorBoard はデフォルトでポート 6006 で動作します (Jupyter ポート8888を使用します。ターミナルを使用してください。 macOS またはAnacondaプロンプト Windows.

『Brooklyn Galaxy』のために、倪氏はブルックリン美術館のコレクションからXNUMX点の名品を選び、そのイメージを極めて詳細に描き込みました。これらの作品は、彼の作品とともに中国ギャラリーに展示されています。彼はXNUMX年にこの作品の制作を開始しましたが、最初の硬貨には、当館が所蔵する macOS users

# Different for you
cd /Users/Guru99/tuto_TF
source activate hello-tf!

ノートブックは /Users/ のパスに保存されていますGuru99/tuto_TF

『Brooklyn Galaxy』のために、倪氏はブルックリン美術館のコレクションからXNUMX点の名品を選び、そのイメージを極めて詳細に描き込みました。これらの作品は、彼の作品とともに中国ギャラリーに展示されています。彼はXNUMX年にこの作品の制作を開始しましたが、最初の硬貨には、当館が所蔵する Windows users

cd C:\Users\Admin\Anaconda3
activate hello-tf

ノートブックはパス C:\Users\Admin\Anaconda3 に保存されます。

TensorBoardを起動するには、そのディレクトリから以下のコマンドを実行してください。

『Brooklyn Galaxy』のために、倪氏はブルックリン美術館のコレクションからXNUMX点の名品を選び、そのイメージを極めて詳細に描き込みました。これらの作品は、彼の作品とともに中国ギャラリーに展示されています。彼はXNUMX年にこの作品の制作を開始しましたが、最初の硬貨には、当館が所蔵する macOS users

tensorboard --logdir=./train/linreg

『Brooklyn Galaxy』のために、倪氏はブルックリン美術館のコレクションからXNUMX点の名品を選び、そのイメージを極めて詳細に描き込みました。これらの作品は、彼の作品とともに中国ギャラリーに展示されています。彼はXNUMX年にこの作品の制作を開始しましたが、最初の硬貨には、当館が所蔵する Windows users

tensorboard --logdir=.\train\linreg

TensorBoardはhttp://localhost:6006で提供されます。

フラグ 制御するもの
--logdir イベントファイルが格納されているディレクトリ。これは唯一必須のフラグです。
--port サービス提供に使用するポート番号。デフォルトは6006です。以前のセッションでそのポートが使用されている場合は、変更してください。
--bind_all すべてのネットワークインターフェイスでサービスを提供します。TensorBoard はデフォルトでは localhost にのみバインドされるため、リモート アクセスにはこのフラグが必要であり、と組み合わせることはできません。 --host.
--reload_interval ログディレクトリが新しいデータを検出するために再スキャンされる頻度(秒単位)。
--logdir_spec 複数のパスをカンマで区切って受け入れる従来のフォールバック機能。 --logdir そのフォームはサポートされなくなりました。

その tensorboard dev サブコマンドは動作しなくなりました。ホストされていた TensorBoard.dev サービスは 2024 年 1 月 1 日に停止しました。ローカルでの使用には影響はありません。

一部のマシンでは、コンソールにlocalhostではなくホスト名が表示されます。下のAnacondaプロンプトの例をご覧ください。どちらのアドレスを使用しても、同じダッシュボードが開きます。

Anacondaプロンプトでtensorboardコマンドを実行し、ポート6006のサーバーアドレスを表示する。

お使いのブラウザにアドレスをコピー&ペーストしてください。下図のようなScalarsダッシュボードが表示されるはずです。

ログディレクトリが正しく読み込まれた後、ブラウザでTensorBoard Scalarsダッシュボードが開きます。

代わりに次のような表示が出た場合:

TensorBoardのエラーページ読み取り:グラフ定義ファイルが見つかりませんでした

これは、TensorBoard がログファイルを見つけられないことを意味します。 cd 正しいパスに進むか、ログイベントが実際に作成されたかどうかを再確認してください。作成されていない場合は、トレーニングコードを再実行してください。

TensorBoardを閉じるには、ターミナルウィンドウでCtrl+Cを押してください。

ヒント:Anacondaのプロンプトで現在の作業ディレクトリを確認してください。

アクティブなhello-tf環境と現在の作業ディレクトリを表示するAnacondaプロンプト

上記のスクリーンショットでは、プロンプトがC:\Users\Adminに表示されているので、ログファイルもそのフォルダ内に作成されるはずです。

よくあるご質問

実行が完了すると、チェックポイントインデックス、1つ以上のmodel.ckptファイル、graph.pbtxtファイル、および少なくとも1つのevents.out.tfeventsファイルが残ります。TensorBoardはイベントファイルのみを読み取ります。チェックポイントは、トレーニングが中断したところから再開できるようにするために存在します。

Yes. PyTorch 船の概要Writer 同じイベントファイル形式を出力するため、同じ tensorboard –logdir コマンドでダッシュボードが表示されます。サーバー側は何も変更されず、変更されるのはサマリーを生成するライブラリのみです。

いいえ。ホストサービスは 2024 年 1 月 1 日に終了し、tensorboard dev サブコマンドはエラーを返すようになりました。結果を共有するには、ノートブック内で TensorBoard を実行してください。 Google Colabを使用するか、チャートをCSVまたはJSON形式でエクスポートすることで可能です。

各実行ごとに、共通の親フォルダの下に独自のサブフォルダを作成し、`--logdir`コマンドで親フォルダを指定します。各サブフォルダは左側のパネルに個別の実行として表示され、それぞれの曲線は同じ軸上に描画され、各曲線にはチェックボックスが表示されます。

オペレーションレベルグラフはデフォルトの表示形式で、TensorFlowがプログラムをどのように理解しているかをボトムアップ方式で示します。kerasタグを選択すると概念グラフに切り替わり、モデルレイヤーのみが表示されるため、設計との照合が容易になります。

自動スキャンでは一度に数十回の実行が行われるため、ダッシュボードは単一実行のモニターではなく、比較ツールとして機能します。HParamsプラグインは各設定とそのメトリクスをログに記録するため、曲線グラフを一つずつ読み取る代わりに、試行をまとめてソートできます。

GitHubコパイロット コールバックとサマリーライターの定型コードを素早く作成します。出力はあくまでも下書きとして扱ってください。TensorFlow 1.xと2.xのAPIが混在している場合が多いため、コードを実行する前に、各名前を最新のドキュメントと照合してください。

イベントファイルが書き込まれなかったか、-logdir に渡されたパスがトレーニング ジョブで使用されたパスと一致しません。そのフォルダーに events.out.tfevents ファイルが存在することを確認し、 Windows TensorBoardを同じドライブレターから起動してください。