どーも、ぐるたか@guru_takaです。
Google Colaboratoryの環境で、PyTorch Lightningを使ってモデルを学習した後、Tnesorboardでデータを可視化する方法を紹介します!
Good news! TensorBoard now works in Jupyter Notebooks, via magic commands "%" that match the command line.
Example: https://t.co/5rtcpyhXSG pic.twitter.com/SceivzfrTJ
— Josh Gordon (@random_forests) February 26, 2019
開発環境
- Google Colaboratory
- Pytorch Lightning:0.7.4
- Pytorch:1.4.0
Tnesorboardにログを残すサンプルコード
サンプルコードになりますが、コメントにあるように、まずは、'log': tensorboard_logs
と値を返すように追記します。
class TrainNet(pl.LightningModule):
@pl.data_loader
def train_dataloader(self):
return torch.utils.data.DataLoader(train, self.batch_size,shuffle=True)
def training_step(self, batch, batch_nb):
x, t = batch
y = self.forward(x)
loss = self.lossfun(y, t)
##### 追加 ######
tensorboard_logs = {'train_loss': loss}
results = {'loss': loss, 'log': tensorboard_logs}
################
return results
class ValidationNet(pl.LightningModule):
@pl.data_loader
def val_dataloader(self):
return torch.utils.data.DataLoader(val, self.batch_size)
def validation_step(self, batch, batch_nb):
x, t = batch
y = self.forward(x)
loss = self.lossfun(y, t)
y_label = torch.argmax(y, dim=1)
acc = torch.sum(t == y_label) * 1.0 / len(t)
results = {'val_loss': loss, 'val_acc': acc}
return results
def validation_end(self, outputs):
avg_loss = torch.stack([x['val_loss'] for x in outputs]).mean()
avg_acc = torch.stack([x['val_acc'] for x in outputs]).mean()
##### 追加 ######
tensorboard_logs = {'avg_acc': avg_acc}
results = {'val_loss': avg_loss, 'val_acc': avg_acc, 'log': tensorboard_logs}
################
return results
Tnesorboardでグラフ化する方法
python
%load_ext tensorboard
%tensorboard --logdir ./lightning_logs/フォルダ名
フォルダ名のパスを%tensorboard --logdir
の後に書いて、実行するだけです!
すると、こんな感じでtensroboradが表示されます。便利すぎる!!
コメントを残す