機械学習・自然言語処理の勉強メモ

学んだことのメモやまとめ

tensorboardXの基本的な使い方①

はじめに

今更ですが、tensorboardを触ってみました。

普段TensorFlowを使わないので、何となく避けてたのですが、
tensorboardXは「tensorboard for pytorch」ということで、
触ってみました。

結論から言うとめちゃくちゃ簡単で便利でした。
なので、備忘録として残そうと思います。

きっちりと理解したい人は公式のGithubやDocumentを見るのが良いと思います。
github.com

tensorboardx.readthedocs.io

ここでは、利用頻度が高いと思わるものについて限定してまとめます。

基本

基本的な使い方は以下の通りです。

from tensorboardX import SummaryWriter

writer = SummaryWriter()

# build network
# training

# data to tensorboard
writer.add_XXX

writer.close()

作った後は以下をシェルで起動します。

tensorboard --logdir runs

立ち上がった後はブラウザから確認可能です。

http://localhost:6006/

add_scalar

1次元(スカラー値)の連続データを描画します。

add_scalar(tag, scalar_value, global_step=None, walltime=None)

サンプルはこんな感じです。

from tensorboardX import SummaryWriter
writer = SummaryWriter()
x = range(100)
for i in x:
    writer.add_scalar('y=2x', i * 2, i)
writer.close()

f:id:kento1109:20190706173125p:plain:w300

損失値の描画に使うとこんな感じになります。

for n_iter in range(epochs):
    train_loss = train(...)
    test_loss = test(...)
    writer.add_scalar('data/scalar1', train_loss, n_iter)
    writer.add_scalar('data/scalar2', test_loss, n_iter)
writer.close()

f:id:kento1109:20190706173644p:plain

add_scalars

訓練データとテストデータの損失値を合わせて描画したいです。
そんな場合は「add_scalars」を使うと便利です。

add_scalars(main_tag, tag_scalar_dict, global_step=None, walltime=None)

サンプルはこんな感じです。

from tensorboardX import SummaryWriter
writer = SummaryWriter()
r = 5
for i in range(100):
    writer.add_scalars('run_14h', {'xsinx':i*np.sin(i/r),
                                    'xcosx':i*np.cos(i/r),
                                    'tanx': np.tan(i/r)}, i)
writer.close()

f:id:kento1109:20190706173937p:plain:w300

さて、訓練データとテストデータの損失値を合わせて描画します。

for n_iter in range(epochs):
    train_loss = train(...)
    test_loss = test(...)
    writer.add_scalars('data/scalars',{'train': train_loss,
                                       'test': test_loss
                                       }, n_iter)
writer.close()

f:id:kento1109:20190706174419p:plain

ちなみにタグは「/」でグループ化できるみたいです。
テストの精度を含めてグループ化してみます。

for n_iter in range(epochs):
    train_loss = train(...)
    test_loss, test_acc = test(...)
    writer.add_scalars('model1/loss',{'train': train_loss,
                                       'test': test_loss
                                       }, n_iter)
    writer.add_scalar('model1/acc', test_acc, n_iter)
writer.close()

f:id:kento1109:20190706175550p:plain

今回、紹介したのは add_scalar, add_scalars だけですが、
とりあえず、基本的な学習時の値を描画するのは十分かと思います。

本日、用いたコードは以下に置きました。
repo/tensorX.py at master · kento1109/repo · GitHub

次回は、Embeddingについてまとめたいと思います。