pytorch中使用tensorboard可视化

文章目录

    • tensorboard
      • 常用记录函数
        • add_graph
        • add_image
        • add_images
        • add_figure
        • add_scalar
        • add_scalars
        • add_histogram
        • add_pr_curve
        • add_text
        • add_embedding
      • 参数说明
        • tag
        • global_step
        • walltime

  • 安装目标:pytorch1.2.0+tensorboard1.14
  • 当前环境:
    • ubuntu16.04
    • 已安装有tensorflow1.11(内部集成有tensorboard)
    • python环境为anaconda,3.6版本

pytorch官网教程使用如下命令安装tensorboard

pip install tb-nightly
tensorboard --logdir=runs

但由于老版本的tensorflow没有卸载,故会引起冲突,之所以会引起冲突是因为tensorboard优先检索是否安装有tensorflow,如果有,则会使用tensorflow提供的函数集,如果没有安装则使用自带的精简函数集。而当tensorflow与tensorboard版本不匹配或者tensorflow卸载不完整时,tensorboard检索到tensorflow,并用其作为函数集,但当运行时才发现其中的各种函数接口不匹配,或者直接没有,故而引起各种问题报错。

  • 首先卸载tensorflow(不建议将tensorflow跟pytorch都安装到系统环境中,可以使用docker或者conda环境):(因为我的系统python默认使用anaconda,并且anaconda安装在当前用户/home/user/下,而非系统/usr/local/下,故不需要使用sudo前缀)

    pip uninstall tensorflow-gpu 
    
  • 这时候在终端中进入python,输入import tensorflow会发现tensorflow依然能导入,但各种函数都不不能使用,这是因为tensorflow这个文件夹还存在于path-to/anaconda3/lib/python3.6/site-packages/中,需要进入到该路径删除整个tensorflow文件夹

  • 之后再执行官网教程命令即可安装tensorboard

tensorboard

  • torch.utils.tensorboard.writer.SummaryWriter
  • torch.utils.tensorboard.writer.SummaryWriter.init
  • torch.utils.tensorboard.writer.SummaryWriter.add_audio
  • torch.utils.tensorboard.writer.SummaryWriter.add_custom_scalars
  • torch.utils.tensorboard.writer.SummaryWriter.add_embedding
  • torch.utils.tensorboard.writer.SummaryWriter.add_figure
  • torch.utils.tensorboard.writer.SummaryWriter.add_graph
  • torch.utils.tensorboard.writer.SummaryWriter.add_histogram
  • torch.utils.tensorboard.writer.SummaryWriter.add_image
  • torch.utils.tensorboard.writer.SummaryWriter.add_images
  • torch.utils.tensorboard.writer.SummaryWriter.add_mesh
  • torch.utils.tensorboard.writer.SummaryWriter.add_pr_curve
  • torch.utils.tensorboard.writer.SummaryWriter.add_scalar
  • torch.utils.tensorboard.writer.SummaryWriter.add_scalars
  • torch.utils.tensorboard.writer.SummaryWriter.add_text
  • torch.utils.tensorboard.writer.SummaryWriter.add_video
  • torch.utils.tensorboard.writer.SummaryWriter.close
  • torch.utils.tensorboard.writer.SummaryWriter.flush

常用记录函数

在训练过程中经常使用的有:add_scalar,add_histogram, add_graph

下面将着重讲解这几个函数用法。。

add_graph

add_graph(model, input_to_model=None, verbose=False)

添加网络结构图

  • 参数
    • 网络模型
    • 一个输入样本实例
    • verbose: 控制是否打印网络结构的开关语句

add_image

add_image(*tag*, *img_tensor*, *global_step=None*, *walltime=None*, *dataformats='CHW'*)

Add image data to summary.

Note that this requires the pillow package.

  • 参数

    • tag: 数据标识名
    • img_tensor: 图像输入
    • global_step: 全局步长值
  • 形状:

    • 默认输入形状为(3,H,W),但如果输入图像为(H,W,3),(H,W),(1,H,W)之类的形状的话,需要指定dataformats参数为HWC,HW,CHW以正确显示图像
  • 例子

    im = np.random.rand(2,4)
    writer.add_image('images/test',im,0,dataformats='HW')
    

    pytorch中使用tensorboard可视化_第1张图片

add_images

add_images(tag, img_tensor, global_step=None, walltime=None, dataformats='NCHW')

添加一批图像

  • 参数
  • dataformats: 输入图像数据的维度形式:NCHW, NHWC, CHW, HWC, HW, WH
  • 形状
  • 默认为(N,3,H,W),对于其他形状的,需要在dataformats中指定

add_figure

add_figure(tag, figure, global_step=None, close=True, walltime=None)

对于matplotlib图像对象,可以使用该函数直接输出,其用法与add_images基本类似

  • 参数
    • close: 在输出图片后自动关闭fig对象,默认为真

add_scalar

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

添加标量

  • 参数

    • tag: 数据标识名
    • scalar_value: 标量值
  • 例子

    from torch.utils.tensorboard import SummaryWriter
    import numpy as np
    
    writer = SummaryWriter()
    
    for n_iter in range(100):
        writer.add_scalar('Loss/train', np.random.random(), n_iter)
    

    pytorch中使用tensorboard可视化_第2张图片

add_scalars

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

添加多个标量

需要注意的是,该函数会将所记录的函数保存在内存中,极端情况下它可能会耗尽内存资源

  • 参数

    • main_tag:主标签
    • tag_scalar_dict: 由标签与值构成的字典
  • 例子

    from torch.utils.tensorboard 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()
    

    pytorch中使用tensorboard可视化_第3张图片

add_histogram

add_histogram(tag, values, global_step=None, bins='tensorflow', walltime=None, max_bins=None)

添加直方图

  • 参数

    • values: 一个张量或数组
    • bins: 设定柱状图样式
  • 例子

    from torch.utils.tensorboard import SummaryWriter
    import numpy as np
    writer = SummaryWriter()
    for i in range(10):
        x = np.random.random(1000)
        writer.add_histogram('distribution centers', x + i, i)
    writer.close()
    

pytorch中使用tensorboard可视化_第4张图片

add_pr_curve

add_pr_curve(tag, labels, predictions, global_step=None, num_thresholds=127, weights=None, walltime=None)

添加精度召回曲线。通过画精度召回曲线让人知道在不同阈值下模型的表现。该函数需要提供ground truth以及预测置信度(通常就是网络输出)

  • 参数

    • labels: ground truth
    • predictions:分类正确置信度,值在[0,1]之间
    • num_thresholds: 曲线阈值
  • 例子

    from torch.utils.tensorboard import SummaryWriter
    import numpy as np
    labels = np.random.randint(2, size=100)  # binary label
    predictions = np.random.rand(100)
    writer = SummaryWriter()
    writer.add_pr_curve('pr_curve', labels, predictions, 0)
    writer.close()
    

pytorch中使用tensorboard可视化_第5张图片

add_text

add_text(tag, text_string, global_step=None, walltime=None)

添加文字

  • 参数

    • text_string: 想要显示的文字
  • 例子

    writer.add_text('lstm', 'This is an lstm', 0)
    

pytorch中使用tensorboard可视化_第6张图片

add_embedding

add_embedding(mat, metadata=None, label_img=None, global_step=None, tag='default', metadata_header=None)

使用如T-sne, pca等算法将高维数据映射到低维

  • 参数

    • mat:(N,D),每一行是数据点的特征向量
    • metadata: 数据标签组成的list,长度N
    • label_img: 在映射后空间中展示的图片,形状为(N,C,H,W)
  • 例子

    from torch.utils.tensorboard import SummaryWriter
    import numpy as np
    writer = SummaryWriter()
    dataset = datasets.MNIST('mnist', train=False, download=True)
    images = dataset.test_data[:100].float()
    label = dataset.test_labels[:100]
    features = images.view(100, 784)
    writer.add_embedding(features, metadata=label, label_img=images.unsqueeze(1))
    

pytorch中使用tensorboard可视化_第7张图片

参数说明

tag

实验中会输出众多图表,为便于理解,我们可以将图表划分为不同类型。

这通过将数据标识名tag命名为aa/bb形式实现。例如Loss/trainLoss/test将会被划归Loss一个组别,而与Accuracy/train区分开显示

global_step

全局步数,也就是当前网络的训练步数,显示在图中也就是其横坐标。

walltime

Optional override default walltime (time.time()) with seconds after epoch of event

为 event 文件的文件名设置时间,默认为 time.time()

你可能感兴趣的:(pytorch,pytorch,可视化,深度学习)