TensorBoardは使いこなすととても便利そうです。
ネットワーク構造の可視化が素晴らしいですね。
PyTorchチュートリアルの「VISUALIZING MODELS, DATA, AND TRAINING WITH TENSORBOARD」をやっていきます。今回は、TensorBoardのセットアップや、基本的な使い方をチュートリアルから勉強しました。
ニューラルネットワークの可視化、はとても分かりやすく、便利だと感じました。どこで画像がどんなサイズになっているか、も一目瞭然です。
前回からの続きです、前回の記事はこちらをご参考ください。
こんな人の役に立つかも
・機械学習プログラミングを勉強している人
・PyTorchのチュートリアルで勉強をしている人
・PyTorchでTensorBoardを利用したい人
1.TensorBoardのセットアップ
まずは、TensorBoardのセットアップを行います。
「torch.utils」から「tensorboard」をインポートし、TensorBoardに情報を書き込むための主要なオブジェクトであるSummaryWriterを定義します。
from torch.utils.tensorboard import SummaryWriter
# default `log_dir` is "runs" - we'll be more specific here
writer = SummaryWriter('runs/fashion_mnist_experiment_1')
このプログラムで、ファイルに「runs/fashion_mnist_experiment_1」フォルダーが作成されます。
2.TensorBoardへの書き込み
make_gridを使用してTensorBoard、具体的にはグリッドに画像を書き込みます。
#trainloaderのイテレータを取得
dataiter = iter(trainloader)
#イテレータでミニバッチ(画像4枚)を取得
images, labels = dataiter.next()
#make_grid関数で画像を書き込み、並べて表示できる
img_grid = torchvision.utils.make_grid(images)
#matplotlibで先ほどmake_gridで並べた画像を表示する。
matplotlib_imshow(img_grid, one_channel=True)
#tensorboardに並べた4枚の画像を書き込む。
writer.add_image('four_fashion_mnist_images', img_grid)
ここでは、make_gridという関数で画像を見やすく4枚並べるようにしています。そして、matplotlibで表示を行っています。最後に、TensorBoardにこの画像を書き込む、という流れとなっています。
TensorBoardをGoogleColaboで実行するために、以下のコマンドを実行しておきます。
・参考のサイト
https://www.msdd.info/entry/2019/12/20/180000
%load_ext tensorboard
Colaboに埋め込まれるようにTensorBoardが起動します。
このコマンドを実行することで、GoogleColabo上でTensorBoardが動作するようになるみたいです。
それでは、チュートリアルにもどって、以下のコマンドを実行します。
tensorboard --logdir=runs
次のように、セルにTensorBoardが起動して、画像が表示されます。
これが、TensorBoardの基本的な使い方です。
TensorBoardに書き込むことで、情報をTensorBoardに送信していくようなイメージなんですね。
3.TensorBoardを使用してモデルを検査する
TensorBoardの強みの1つは、複雑なモデル構造を視覚化できることです。作成したモデルを視覚化しましょう。
次のプログラムで、ネットワークを可視化できます。TensorBorardにモデルと画像を追加します。
writer.add_graph(net, images)
#closeが必要なようです。
writer.close()
TensorBoardで確認してみます。
tensorboard --logdir=runs
GRAPHSタブができましたので、こちらをクリックします。
すると、ネットワークが図となり出現します。
上の図の、「Net」をダブルクリックすると、下の図のように、ネットワークの中が見れます。その中には、画像データがどのようなテンソルで流れているか等の情報も掲載されています。
今までこんがらがっていたところが明確になりますね。
続きの記事はこちらになります。