zoukankan      html  css  js  c++  java
  • 在pytorch下使用tensorboardX(win10;谷歌浏览器;jupyter notebook)

    使用环境:win10 ,在jupyter notebook下运行 谷歌浏览器

    1、环境安装

      使用conda 安装,打开anacond powershell,输入pip install tensorboard ,然后安装pip install tensorflow

    2、使用操作

            在终端或者环境命令行下,打开程序所在目录,使用shift+右键进入cmd,输入jupyter notebook,进入环境,打开程序。

    (1)在程序开头加入

    from torch.utils.tensorboard import SummaryWriter,而不是from tensorboardX import SummaryWriter,参考https://pytorch.org/tutorials/intermediate/tensorboard_tutorial.html

    (2)writer = SummaryWriter('runs/exp1'),runs/exp1表示相关信息存储位置,可自行定义。然后调用相关函数即可。例如想知道训练次数epoch与损失函数之间的关系,调用writer.add_scalar('Train Loss', train_loss / len(train_data), global_step=epoch) 。然后运行一次函数,等待程序运行完毕。

    (3)打开runs文件夹的上一级目录,然后使用shift+右键进入cmd,输入tensorboard --logdir=runs ,随后弹出如下

     复制网址,然后打开(据说只能使用谷歌浏览器,未经验证)。有可能出现如下提示,打开exp1文件夹,如果文件大小为0,则表示数据未成功写入,重新运行程序即可。或者重新操作第三步

     如果进入如下类似页面,则表示成功

    指令集补充

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

    功能:
    在一个图表中记录一个标量的变化,常用于 Loss 和 Accuracy 曲线的记录。
    参数:
    tag(string)- 该图的标签,类似于 polt.title。

    scalar_value(float or string/blobname)- 用于存储的值,曲线图的 y 坐标

    global_step(int)- 曲线图的 x 坐标
    walltime(float)- 为 event 文件的文件名设置时间,默认为 time.time() 

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

    功能:
    在一个图表中记录多个标量的变化,常用于对比,如 trainLoss 和 validLoss 的比较
    等。
    参数:
    main_tag(string)- 该图的标签。
    tag_scalar_dict(dict)- key 是变量的 tag, value 是变量的值。
    global_step(int)- 曲线图的 x 坐标
    walltime(float)- 为 event 文件的文件名设置时间,默认为 time.time()

    writer.add_scalars('result', {'Train Loss':train_loss / len(train_data),'Train Acc':train_acc / len(train_data),'Valid Loss':valid_loss / len(valid_data),'Valid Acc':valid_acc / len(valid_data)}, global_step=epoch)

    类似上面代码,其中result表示标题,train Loss等表示每条线名字,epoch表示x轴

    (3)add_histogram(tag, values, global_step=None, bins='tensorflow', walltime=None)
    功能:
    绘制直方图和多分位数折线图,常用于监测权值及梯度的分布变化情况,便于诊断网
    络更新方向是否正确。
    参数:
    tag(string)- 该图的标签,类似于 polt.title。
    values(torch.Tensor, numpy.array or string/blobname)- 用于绘制直方图的值
    global_step(int)- 曲线图的 y 坐标
    bins(string)- 决定如何取 bins,默认为‘tensorflow’ ,可选: ’auto’, ‘fd’ 等
    walltime(float)- 为 event 文件的文件名设置时间,默认为 time.time()


    (4)add_image(tag, img_tensor, global_step=None, walltime=None)
    功能:
    绘制图片,可用于检查模型的输入,监测 feature map 的变化,或是观察 weight。
    参数:
    tag(string)- 该图的标签,类似于 polt.title。
    img_tensor(torch.Tensor,numpy.array, or string/blobname)- 需要可视化的图片数
    据, shape = [C,H,W]。
    global_step(int)- x 坐标。
    walltime(float)- 为 event 文件的文件名设置时间,默认为 time.time()。
    通常会借助 torchvision.utils.make_grid() 将一组图片绘制到一个窗口

    (5)torchvision.utils.make_grid(tensor, nrow=8, padding=2, normalize=False, ra
    nge=None, scale_each=False, pad_value=0)
    功能:
    将一组图片拼接成一张图片,便于可视化。
    参数:
    tensor(Tensor or list)- 需可视化的数据, shape:(B x C x H x W) ,B 表示 batch 数,即
    几张图片
    nrow(int)- 一行显示几张图,默认值为 8。
    padding(int)- 每张图片之间的间隔,默认值为 2。
    normalize(bool)- 是否进行归一化至(0,1)。
    range(tuple)- 设置归一化的 min 和 max,若不设置,默认从 tensor 中找 min 和 max。
    scale_each(bool)- 每张图片是否单独进行归一化,还是 min 和 max 的一个选择。
    pad_value(float)- 填充部分的像素值,默认为 0,即黑色。

    (6)add_graph(model, input_to_model=None, verbose=False, **kwargs)
    功能:
    绘制网络结构拓扑图。
    参数:
    model(torch.nn.Module)- 模型实例
    inpjt_to_model(torch.autograd.Variable)- 模型的输入数据,可以生成一个随机数,只
    要 shape 符合要求即可

    运行以下代码:

    import torch
    from torch import nn
    import numpy as np
    from torch.autograd import Variable
    from torchvision.datasets import CIFAR10
    
    from datetime import datetime
    import os
    from torch.utils.tensorboard import SummaryWriter
    import torchvision.models as models
    import tensorflow as tf
    
    #定义网络架构
    class AlexNet(nn.Module):
        def __init__(self):
            super().__init__()
            
            # 第一层是 5x5 的卷积, 输入的 channels 是 3,输出的 channels 是 64, 步长是 1, 没有 padding
            self.conv1 = nn.Sequential(
                nn.Conv2d(3, 64, 5), 
                nn.ReLU(True))
            
            # 第二层是 3x3 的池化, 步长是 2, 没有 padding
            self.max_pool1 = nn.MaxPool2d(3
                                          , 2)
            
            # 第三层是 5x5 的卷积, 输入的 channels 是 64,输出的 channels 是 64, 步长是 1, 没有 padding
            self.conv2 = nn.Sequential(
                nn.Conv2d(64, 64, 5, 1),
                nn.ReLU(True))
    
            # 第四层是 3x3 的池化,步长是 2,没有 padding
            self.max_pool2 = nn.MaxPool2d(3, 2)
            
            # 第五层是全连接层,输入是 1204,输出是 384
            self.fc1 = nn.Sequential(
                nn.Linear(1024, 384),
                nn.ReLU(True))
            
            # 第六层是全连接层,输入是 384,输出是 192
            self.fc2 = nn.Sequential(
                nn.Linear(384, 192),
                nn.ReLU(True))
            
            # 第七层是全连接层,输入是 192,输出是 10
            self.fc3 = nn.Linear(192, 10)
            
        def forward(self, x):
            x = self.conv1(x)
            x = self.max_pool1(x)
            x = self.conv2(x)
            x = self.max_pool2(x)
            
            # 将矩阵拉平
            x = x.view(x.shape[0], -1)
            x = self.fc1(x)
            x = self.fc2(x)
            x = self.fc3(x)
            return x
    
    alexnet = AlexNet()
    
    writer = SummaryWriter('runs/exp1')
    dummy_input = Variable(torch.zeros(1, 3, 32, 32))
    with writer:
        writer.add_graph(alexnet,dummy_input)

    可在 GRAPHS 中看到 Resnet18 的网络拓扑

     双击AlexNet


    (7)add_embedding(mat, metadata=None, label_img=None, global_step=None, tag='de
    fault', metadata_header=None)
    功能:
    在三维空间或二维空间展示数据分布,可选 T-SNE、 PCA 和 CUSTOM 方法。
    参数

    mat(torch.Tensor or numpy.array)- 需要绘制的数据,一个样本必须是一个向量形式。
    shape = (N,D), N 是样本数, D 是特征维数。
    metadata(list)- 数据的标签,是一个 list,长度为 N。
    label_img(torch.Tensor)- 空间中展示的图片, shape = (N,C,H,W)。
    global_step(int)- Global step value to record,不理解这里有何用处呢?知道的朋友补
    充一下吧。
    tag(string)- 标签

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

    功能: 记录文字
    (9)add_video(tag, vid_tensor, global_step=None, fps=4, walltime=None)
    功能: 记录 video
    (10)add_figure(tag, figure, global_step=None, close=True, walltime=None)
    功能: 添加 matplotlib 图片到图像中

    (11)add_image_with_boxes(tag, img_tensor, box_tensor, global_step=None, walltime
    =None, **kwargs)
    功能: 图像中绘制 Box,目标检测中会用到

    (12)add_pr_curve(tag, labels, predictions, global_step=None, num_thresholds=127, w
    eights=None, walltime=None)
    功能: 绘制 PR 曲线

    (13)add_pr_curve_raw(tag, true_positive_counts, false_positive_counts, true_negati
    ve_counts, false_negative_counts, precision, recall, global_step=None, num_thres
    holds=127, weights=None, walltime=None)
    功能: 从原始数据上绘制 PR 曲线

    (14)export_scalars_to_json(path)
    功能: 将 scalars 信息保存到 json 文件,便于后期使用

    注意:没有验证或者验证有问题参考官方链接

     

  • 相关阅读:
    多输出感知机及其梯度
    《机器学习实战》-线性回归
    《机器学习实战》-逻辑(Logistic)回归
    SQL Server 空间监测
    SQL Server 从数据库快照还原数据库
    SQL Server 创建数据库快照
    SQL Server 数据库的自动选项
    SQL Server 数据库游标选项
    SQL Server 数据库状态选项
    MYSQL 二进制还原
  • 原文地址:https://www.cnblogs.com/yuanwei-wu/p/12544583.html
Copyright © 2011-2022 走看看