目次
はじめに
TensorBoardというTensorFlowの可視化ツールの存在を知ったので、以前TensorFlowで作成した画像分類モデルの学習過程の可視化を行ってみたいと思います。
TensorBoardとは
TensorBoardは、TensorFlow用のツールで、機械学習モデルのトレーニングと評価の可視化を行うためのダッシュボードです。具体的には以下の機能があります。
- スカラー値の可視化
- 損失関数や精度などの学習中の挙動を折れ線グラフで表示
- 学習データとバリデーションデータの比較が可能
- 画像の可視化
- 各層の重みやバイアスの遷移を確認
- 前処理後の画像を表示して確認
- 音声の可視化
- 音声データの再生や音量調節が可能
- ヒストグラムの表示
- 各層の重みやバイアスの分布を確認
- 計算グラフの可視化
- モデルの構造を視覚的に確認
- デバイス(GPU/CPU)の使用状況を色分けして表示
- 分散表現の可視化
- Embedding Projectorで分散表現をインタラクティブに操作
- その他
- データのダウンロード(CSVやJSONで出力可能)
- ハイパーパラメータの探索結果の可視化
これらの機能を活用することで、モデルのトレーニングプロセスをより深く理解し、調整やデバッグを効率的に行うことができます。使い方は、TensorFlowのトレーニングスクリプトにいくつかのログ記録のコードを追加するだけで簡単に始められます。
実装方法
TensorBoardのセットアップ
TensorBoardを使用するためには、まずTensorFlowがインストールされている必要があります。まだインストールしていない場合は、以下のコマンドでインストールします。
pip install tensorflow
ログディレクトリの指定
モデルのトレーニング中にログを記録するディレクトリを指定します。
import tensorflow as tf
# ログディレクトリの設定
log_dir = "logs/fit/" + datetime.datetime.now().strftime("%Y%m%d-%H%M%S")
tensorboard_callback = tf.keras.callbacks.TensorBoard(log_dir=log_dir, histogram_freq=1)
モデルトレーニング中のコールバックにTensorBoardを追加
モデルのトレーニングにおいて、fitメソッドにTensorBoardコールバックを追加します。
model.fit(
x_train, y_train,
epochs=10,
validation_data=(x_val, y_val),
callbacks=[tensorboard_callback]
)
TensorBoardの起動
ログを記録した後、以下のコマンドでTensorBoardを起動し、ブラウザでダッシュボードを表示します。
tensorboard --logdir=logs/fit
その後、ブラウザで表示されるURL(通常は http://localhost:6006/
)にアクセスすると、トレーニングプロセスや結果の可視化ができます。
これで、モデルのトレーニング中の各種指標(損失、精度、重みのヒストグラムなど)をリアルタイムで確認できるようになります。
出力結果
今回は、こちらの記事で実装したスクリプトに上記処理を追加して、可視化してみました。
こちらがTensorBoardのダッシュボードになります。それぞれ見ていきます。
bias: エポックごとのバイアスパラメータのヒストグラムになります。各エポックごとにバイアスの値の分布がどのように変化しているかが確認できます。
epoch_accuracy: エポックごとのトレーニングと検証データの精度になります。 エポックが進むにつれて、精度が上がっていくことが望ましいです。もし精度が大きくぶれていたり、検証精度が上がらない場合、過学習(overfitting)やデータに問題がある可能性があります。
epoch_learning_rate: エポックごとの学習率になります。スクリプト内で0.001に設定しているため、エポックが進んでも一定です。
epoch_loss: エポックごとのトレーニングと検証データの損失になります。エポックが進むにつれて、損失は小さくなることが期待されます望ましいですが、検証損失がエポック後半で上昇する場合は過学習の可能性があります。
evaluation_accuracy_vs_iterations: イテレーションごとの検証データの精度を示しています。エポック内の各イテレーションでの精度の変化を見ることができます。黄色のラインで表されており、精度が安定しているかどうかを確認できます。
evaluation_loss_vs_iterations: イテレーションごとの検証データの損失を示したグラフです。損失が小さいほど、モデルがより良い予測をしていることを示します。この場合、損失が上がったり下がったりしているので、モデルがデータに対してどう適応しているかを確認できます。
kernel: エポックごとの重みパラメータ(カーネル)のヒストグラムを表示しています。重みの値の分布がどのように変化しているかを視覚化しています。
Settings: 画面左の項目は各グラフの表示方法を変更するメニューとなっています。
- GENERAL
各グラフのデータポイントをステップ毎・処理時間毎・時刻毎の表示に変更したり、特定のデータポイントまでのグラフのみの表示に変更する設定ができます。
- SCALARS
スライダーでグラフの平滑化(データポイントのばらつきを抑えて、グラフを滑らかにする)の度合いを調整したり、グラフ上でカーソルを移動したときに表示されるツールチップ内のデータポイントを、昇順(Ascending)や降順(Descending)でソート、外れ値によるグラフのスケーリングへの影響を減らしたり、単調増加しないX軸を分割して表示等の設定ができます。
- HISTOGRAMS
デフォルトではステップごとのヒストグラムが連なって表示されているのを、すべて重ねて表示するよう設定ができます。
- IMAGES
可視化される画像の表示方法を変更できます。
まとめ
TensorBoard自体はTensorFlowに組み込まれており、実装方法も、既存スクリプトに追加するだけなので、とても簡単に実装することができます。
TensorBoardダッシュボード内でも表示の設定が変更できるので、モデルのトレーニングプロセスの理解を助けてくれると思います。