pytorch中使用TensorBoard进行可视化Loss及特征图

这篇具有很好参考价值的文章主要介绍了pytorch中使用TensorBoard进行可视化Loss及特征图。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

pytorch中使用TensorBoard进行可视化Loss及特征图

安装导入TensorBoard

  • 安装TensorBoard

    pip install tensorboard
    
  • 导入TensorBoard

    from torch.utils.tensorboard import SummaryWriter
    
  • 实例化TensorBoard

    writer = SummaryWriter('./logs')
    

可视化标量数据

训练过程中的loss,accuracy等都是标量,都可以用TensorBoard中的add_scalar来显示,add_scalar方法中第一个参数表示表的名字,第二个参数表示的是你要存的值,第三个参数可以理解为x轴坐标。

for i in range(100):
    loss = i
    writer.add_scalar("loss",loss,i)
writer.close()

终端输入tensorboard --logdir=logs,开启TensorBoard

pytorch中使用TensorBoard进行可视化Loss及特征图

可视化网络结构

使用add_graph方法,可以将定义的网络模型可视化,第一个参数传入模型对象,第二个参数用来描述输入的shape

import torch

class Model(torch.nn.Module):
    def __init__(self):
        super(Model,self).__init__()
        self.convl = torch.nn.Sequential(
            torch.nn.Conv2d(1,64,kernel_size=3,stride=1,padding=1),
            torch.nn.ReLU(),
            torch.nn.Conv2d(64,128,kernel_size=3,stride=1,padding=1),
            torch.nn.ReLU(),
            torch.nn.MaxPool2d(stride=2,kernel_size=2)
        )
    
        self.dense = torch.nn.Sequential(
            torch.nn.Linear(14*14*128,1024),
            torch.nn.ReLU(),
            torch.nn.Dropout(p=0.5),
            torch.nn.Linear(1024,10)
        )
    def forward(self,x):
        x = self.convl(x)
        x = x.view(-1,14*14*128)
        x = self.dense(x)
        return x
model = Model()
images = torch.randn(1, 1, 28, 28)
writer.add_graph(model, images)
writer.close()

pytorch中使用TensorBoard进行可视化Loss及特征图

可视化图片

使用add_image(self, tag, img_tensor, global_step=None, walltime=None, dataformats=‘CHW’)绘制图片,可用于检查模型的输入,监测 feature map 的变化,或是观察 weight。
tag:就是保存图的名称
img_tensor:图片的类型要是torch.Tensor, numpy.array, or string这三种
global_step:第几张图片
dataformats=‘CHW’,默认CHW,tensor是CHW,numpy是HWC

writer = SummaryWriter("logs")
image_path = "./img/1.jpg"
image_PIL = Image.open(image_path)
img = np.array(image_PIL)
print(img.shape)
writer.add_image("test", img, 1, dataformats='HWC')
writer.close()

使用TensorBoard可视化Loss和卷积层特征图

  • 可视化训练过程中的loss

    pytorch中使用TensorBoard进行可视化Loss及特征图

  • 可视化卷积层特征图

使用torch.nn.Module.register_forward_hook(hook_func)函数可以实现特征图的可视化,register_forward_hook是一个钩子函数,设置完后,当输入图片进行前向传播的时候就会执行自定的函数,该函数作为参数传到register_forward_hook方法中。

hook_func函数可从前向过程中接收到三个参数:hook_func(module, input, output)。其中module指的是模块的名称,比如对于ReLU模块,module是ReLU(),对于卷积模块,module是Conv2d(in_channel=…),注意module带有具体的参数。input和output就是我们心心念的特征图,这二者分别是module的输入和输出,输入可能有多个(比如concate层就有多个输入),输出只有一个,所以input是一个tuple,其中每一个元素都是一个Tensor,而输出就是一个Tensor。一般而言output可能更经常拿来做分析。我们可以在hook_func中将特征图画出来并保存为图片,所以hook_func就是我们实现可视化的关键。

def hook_func(module, input):
    x = input[0][0]
    x = x.unsqueeze(1)
    global i
    image_batch = torchvision.utils.make_grid(x, padding=4)
    image_batch = image_batch.numpy().transpose(1, 2, 0)
    writer.add_image("test", image_batch, i, dataformats='HWC')
    i += 1

注册torch.nn.Module.register_forward_hook函数

for name, m in model.named_modules():
  if isinstance(m, torch.nn.Conv2d):
    m.register_forward_pre_hook(hook_func)

完整代码

import torch
import torch.nn as nn
import torchvision
from torchvision import transforms
import torch.nn.functional as F
from torch.utils.tensorboard import SummaryWriter
import os
import cv2

class MyModel(nn.Module):
    def __init__(self):
        super(MyModel, self).__init__()
        self.convl = torch.nn.Sequential(
            torch.nn.Conv2d(1, 32, kernel_size=3, stride=1, padding=1),
            torch.nn.ReLU(),
            torch.nn.Conv2d(32, 64, kernel_size=3, stride=1, padding=1),
            torch.nn.ReLU(),
            torch.nn.Conv2d(64, 128, kernel_size=3, stride=1, padding=1),
            torch.nn.ReLU(),
            torch.nn.MaxPool2d(stride=2, kernel_size=2)
        )

        self.dense = torch.nn.Sequential(
            torch.nn.Linear(14 * 14 * 128, 1024),
            torch.nn.ReLU(),
            torch.nn.Dropout(p=0.5),
            torch.nn.Linear(1024, 10)
        )

    def forward(self, x):
        x = self.convl(x)

        x = x.view(-1, 14 * 14 * 128) 
        x = self.dense(x)
        output = F.log_softmax(x, dim=1)
        return output


def hook_func(module, input):
    x = input[0][0]
    x = x.unsqueeze(1)
    global i
    image_batch = torchvision.utils.make_grid(x, padding=4)
    image_batch = image_batch.numpy().transpose(1, 2, 0)
    writer.add_image("test", image_batch, i, dataformats='HWC')
    i += 1




if __name__ == '__main__':
    os.environ["KMP_DUPLICATE_LIB_OK"] = "TRUE"
    writer = SummaryWriter("./logs")

    device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
    pipline = transforms.Compose([
        transforms.ToTensor(),  
        transforms.Normalize((0.1307,), (0.3081)),  
    ])
    if torch.cuda.is_available():
        map_location = "gpu"
    else:
        map_location = "cpu"
    model = MyModel().to(device)
    model.load_state_dict(torch.load('./MyModel.pkl',map_location=map_location))
    i=0
    for name, m in model.named_modules():
        #if isinstance(m, torch.nn.Conv2d):
        m.register_forward_pre_hook(hook_func)
    img = cv2.imread('./1.png')
    writer.add_image("img", img, 1, dataformats='HWC')
    img = pipline(img).unsqueeze(0).to(device)
    img = transforms.functional.resize(img, [28, 28])
    img = img.reshape(-1, 1, 28, 28)
    with torch.no_grad():
        model(img)
  • 第一层卷积后的32张特征图

pytorch中使用TensorBoard进行可视化Loss及特征图

  • 第二层卷积后的64张特征图

pytorch中使用TensorBoard进行可视化Loss及特征图

  • 第三层卷积后的128张特征图

pytorch中使用TensorBoard进行可视化Loss及特征图文章来源地址https://www.toymoban.com/news/detail-411348.html

到了这里,关于pytorch中使用TensorBoard进行可视化Loss及特征图的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 无涯教程-TensorFlow - TensorBoard可视化

    TensorFlow包含一个可视化工具,称为TensorBoard,它用于分析数据流图,还用于了解机器学习模型。 TensorBoard的重要功能包括查看有关垂直对齐的任何图形的参数和详细信息的不同类型统计的视图。 深度神经网络包括多达36,000个节点。 TensorBoard帮助将这些节点折叠成块并突出显

    2024年02月12日
    浏览(41)
  • TensorFlow入门(八、TensorBoard可视化工具的应用)

    TensorBoard常用函数和类 http://t.csdn.cn/Hqi9c TensorBoard可视化的过程: ①确定一个整体的图表,明确从这个图表中获取哪些数据的信息 ②确定在程序的哪些节点、以什么样的方式进行汇总数据的运算,以记录信息,比如在反向传播定义以后,使用tf.summary.scalar记录损失值的变换 ③运行所

    2024年02月07日
    浏览(51)
  • 三种实现模型可视化的方式(print, torchinfo, tensorboard)

    记录一下自己使用的三种模型可视化的方式,从简单到难 最简单的是print,就不用多说了。 即可按照像文档路径一样的方式输出结构,并且有每一层的shape和参数量,比print的信息更多。 但相对而言还是比较简单。 该方法是个人觉得最好用的并且很动态 需要提前下好tensorb

    2023年04月13日
    浏览(38)
  • 本地浏览器查看--服务器上运行的可视化,如tensorboard

    特别提醒 :注意看 本地 端和 服务器 端 解释 :将服务器的6008端口 映射 到本地的6008端口,-p  443  是你服务器上的IP后面紧跟的那个端口,root是自己的服务器名字 参考: 在远程服务器上使用tensorboard方法_tensorboard远程服务器-CSDN博客 本地查看服务器端运行的Tensorboard方法

    2024年01月16日
    浏览(55)
  • 【tensorboard】深度学习的日志信息events.out.tfevents文件可视化工具

    在用深度学习模型训练完模型后,会有一些events.out.tfevents格式的日志信息文件,如下图: 在这类文件需要用tensorboard进行打开,并且查看训练过程的信息内容。 命令格式为: 注意:日志所在的目录是指日志的目录文件夹,不是日志本身路径。 以上面图片中为例,命令为:

    2024年02月12日
    浏览(50)
  • pytorch训练可视化包visdom的使用

    Visdom是一个基于Python的可视化工具包,可以用于PyTorch等深度学习框架中的实时数据可视化。它提供了一个Web界面,可以方便地创建图表、散点图和直方图等可视化元素。相比 tensorboard 、 rensorboardX 具有更轻量、更便捷、更丰富、更快速等特点。 visdom的github主页:https://githu

    2024年02月05日
    浏览(41)
  • 使用Python进行三维可视化

    使用Python进行三维可视化 Python是一种易于学习和使用的编程语言,它拥有强大的图形处理能力。在科学、工程或数据分析等领域,Python可以用来处理和生成各种图表和图像。本文将介绍如何使用Python进行三维可视化,并提供相应的源代码。 首先,我们需要安装必要的Python库

    2024年02月14日
    浏览(49)
  • 使用Kibana进行数据可视化

    使用 Kibana 进行数据可视化 使用 ELK 堆栈(Elasticsearch、Logstash 和 Kibana)和 Elastic Stack 的一部分 Kibana 可视化和分析数据。 课程英文名:Data Visualization with Kibana 此视频教程共21.0小时,中英双语字幕,画质清晰无水印,源码附件全 下载地址 百度网盘地址:https://pan.baidu.com/s/1

    2023年04月13日
    浏览(43)
  • 【数据可视化】通过使用网络爬虫对数据爬取并进行可视化分析

      本次项目所爬取的网页为柳州职业技术学院电子信息工程学院的超星学习通课程中心。在该网页中可以查看到电子信息工程学院历年的超星课程创建情况,还可以进入到课程界面查看相应的教学资源。   在该网页中,详细记录了课程序号、课程名称、课程链接、所属院

    2024年02月04日
    浏览(51)
  • 使用Puppeteer进行游戏数据可视化

    导语 Puppeteer是一个基于Node.js的库,可以用来控制Chrome或Chromium浏览器,实现网页操作、截图、测试、爬虫等功能。本文将介绍如何使用Puppeteer进行游戏数据的爬取和可视化,以《英雄联盟》为例。 概述 《英雄联盟》是一款由Riot Games开发和运营的多人在线竞技游戏,拥有数亿

    2024年02月09日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包