colab+pytorch+tensorboardx可视化多次调参结果运行在一张图表中,不能完整运行代码时传参

目录

    • 安装tensorboardx
    • 运行tensorboardx
    • 实现可视化
      • add_scalar 方法
        • 可视化
    • 多次运行结果显示在同一张图
    • 代码未运行完传参

安装tensorboardx

! pip install tensorboardX

colab+pytorch+tensorboardx可视化多次调参结果运行在一张图表中,不能完整运行代码时传参_第1张图片

运行tensorboardx

因为colab是notebook的形式,每次只能运行一个代码块。因此要想在colab上运行tensorboardx需要执行以下指令。

% load_ext tensorboard

运行这个语句以后就相当于开启了tensorboardx的服务。
colab+pytorch+tensorboardx可视化多次调参结果运行在一张图表中,不能完整运行代码时传参_第2张图片
到这里准备步骤都已经做完了,下面就是运行代码和可视化

实现可视化

在代码的最开始需要使用下面的语句,创建一个 SummaryWriter 的示例。

writer = SummaryWriter('runs/example')

在colab上推荐大家用runs/xx这样命名,如果不写runs不会默认创建到此文件夹下。在这里插入图片描述
在代码执行以后就可以在runs的文件夹下看到example的文件夹。

writer = SummaryWriter(comment='example')

也可以这样进行命名,文件夹名称为“运行时间”-example

add_scalar 方法

使用pytorch进行神经网络训练时,想要生成loss或者其他评价指标的折线图,使用add_scalar

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

参数:
main_tag(string)- 该图的标签(名称)。
tag_scalar_dict(dict)- 曲线图的y坐标
global_step(int)- 曲线图的 x 坐标
walltime(float)- 为 event 文件的文件名设置时间,默认为 time.time()

import numpy as np
from tensorboardX import SummaryWriter
writer = SummaryWriter('runs/example1')

for epoch in range(100):
  writer.add_scalar('1',np.random.rand(),epoch)
  
writer.close()

这段代码实现了随机数的曲线图。

可视化

% tensorboard --logdir=runs/example1

运行上述代码,显示运行结果的可视化。

colab+pytorch+tensorboardx可视化多次调参结果运行在一张图表中,不能完整运行代码时传参_第3张图片
可以看到“1”为曲线图的名称,横坐标为epoch,纵坐标为random值。

如果有多个参数可以使用:

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

多次运行结果显示在同一张图

在神经网络训练过程中,需要将多次调参结果进行对比,比如不同lr的loss情况。

import numpy as np
from tensorboardX import SummaryWriter
writer = SummaryWriter('runs/example1')

for epoch in range(100):
  writer.add_scalar('1',np.random.rand(),epoch)

writer.close()
import numpy as np
from tensorboardX import SummaryWriter
writer = SummaryWriter('runs/example2')

for epoch in range(100):
  writer.add_scalar('1',epoch,epoch)

writer.close()

例如,第一次运行的是第一段代码,第二次运行的是第二段代码。

在这里插入图片描述
runs文件夹下就会有两个文件夹,example1example2
但是这两段代码在writer.add_scalar中对于图片的命名是一样的,tensorboardx会自动识别到同一张图下。

% tensorboard --logdir=runs

只需要在运行时改成父级文件夹即可。
colab+pytorch+tensorboardx可视化多次调参结果运行在一张图表中,不能完整运行代码时传参_第4张图片
可以看到,两次运行的曲线画在了“1”这张图中。

代码未运行完传参

在神经网络训练中,无法预估运行多少epoch可以获得自己想要的结果,有时候不需要训练完全部epoch。
tensorboardx必须运行writer.close()才能把训练的结果传入,因此如果提前停止就运行不到writer.close()
在此,只需要添加try/except语句。

import numpy as np
from tensorboardX import SummaryWriter
writer = SummaryWriter('runs/example3')
class Infinit:
     def __iter__(self):
         return self
    
     def __next__(self):
         return None
i=0
for epoch in Infinit():
  i=i+1
  writer.add_scalars('2',{'xsinx':epoch*np.sin(epoch),'xcosx':epoch*np.cos(epoch)},epoch)
  
try:
  writer.close()
except KeyboardInterrupt:
  writer.close()

Infinit()是一个死循环,这段代码如果不强行中断就会一直运行下去。
colab+pytorch+tensorboardx可视化多次调参结果运行在一张图表中,不能完整运行代码时传参_第5张图片
右键可以中断执行。
colab+pytorch+tensorboardx可视化多次调参结果运行在一张图表中,不能完整运行代码时传参_第6张图片
最下面异常提示为KeyboardInterrupt,因此在except后输入KeyboardInterrupt,也可以根据自己的需求修改为其他异常。

colab+pytorch+tensorboardx可视化多次调参结果运行在一张图表中,不能完整运行代码时传参_第7张图片
添加这段代码以后,提前中断运行也可以正常显示。

你可能感兴趣的:(学习路上的绊脚石)