Pytorch基础 - 3. torch.utils.tensorboard

目录

1. 简介

2. 基本步骤

3. 示例1 - 可视化单条曲线

4. 示例2 - 可视化多条曲线

5. 示例3 - 可视化网络结构


1. 简介

Tensorboard是Tensorflow的可视化工具,常用来可视化网络的损失函数,网络结构,图像等。后来将Tensorboard集成到了PyTorch中,常使用torch.utils.tensorboard来进行导入。官网地址:TensorBoard — PyTorch

2. 基本步骤

(1) 首先执行如下代码,具体含义写在注释里

from torch.utils.tensorboard import SummaryWriter

if __name__ == '__main__':
    # 新建实例, log_dir为生成文件的存储地址, 不写参数默认是./run/文件夹下
    writer = SummaryWriter(log_dir='events存储地址')
    # 调用对象的方法,给文件写入数据
    writer.add_scalar(tag="show1", scalar_value=loss, global_step=epoch)
    writer.add_scalars(main_tag="show2", tag_scalar_dict={'fun1': None, 'fun2': None}, global_step=epoch)
    writer.add_graph(model=model, input_to_model=input)
    # 关闭writer
    writer.close()

(2) 执行完上述代码,会在设置的log_dir路径下生成一个以events.out开头的文件,如下所示

(3) 执行如下命令,运行该文件

tensorboard --logdir=r'events存储地址'

(4) 运行结束后复制生成的地址并在浏览器中打开

3. 示例1 - 可视化单条曲线

from torch.utils.tensorboard import SummaryWriter

if __name__ == '__main__':
    writer = SummaryWriter(log_dir='/home/Test/log_dir')
    for i in range(100):
        writer.add_scalar(tag="y=2x", scalar_value=2 * i, global_step=i)
    writer.close()

其中参数的具体含义如下:

4. 示例2 - 可视化多条曲线

from torch.utils.tensorboard import SummaryWriter

if __name__ == '__main__':
    writer = SummaryWriter(log_dir='/home/Test/log_dir')
    for x in range(100):
        writer.add_scalars('multi_funcs', {'2x': 2 * x, '3x': 3 * x, '4x': 4 * x}, x)
    writer.close()

其中参数的具体含义如下:

5. 示例3 - 可视化网络结构

新建一个MLP网络,通过add_graph来保存网络结构

import torch
import torch.nn as nn
from torch.utils.tensorboard import SummaryWriter


class MLP(nn.Module):
    def __init__(self):
        super(MLP, self).__init__()
        self.model = nn.Sequential(
            nn.Linear(784, 512),
            nn.ReLU(),
            nn.Linear(512, 128),
            nn.ReLU(),
            nn.Linear(128, 10)
        )

    def forward(self, x):
        out = self.model(x)
        return out


if __name__ == '__main__':
    writer = SummaryWriter(log_dir='/home/TenbodTest/log_dir')
    model = MLP()
    input = torch.rand(32, 1, 28, 28).view(-1, 28 * 28)
    writer.add_graph(model, input)
    writer.close()

其中参数的具体含义如下:

可视化结果如下: 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/10117.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】认识协议

🎇Linux: 博客主页:一起去看日落吗分享博主的在Linux中学习到的知识和遇到的问题博主的能力有限,出现错误希望大家不吝赐教分享给大家一句我很喜欢的话: 看似不起波澜的日复一日,一定会在某一天让你看见坚持…

QT程序退出还占进程

问题情况 程序运行时的样子: 程序退出时的样子: 其跑到了后台进程里面: 程序退出了,但在任务管理器里查看,其从进程里面转移到后台进程了。 这种问题,怎么办,代码里,应该释放的也都…

【我的创作纪念日】恒川的创作一周年

机缘 大家好,我是热爱跑步的恒川,今天是个特殊的日子(我的创作纪念日),在去年的今天,我发了第一篇博文。去年的时候,刚接触到CSDN,只想把他当作一个学习的工具,后来&…

浅析时间复杂度与空间复杂度

时间复杂度 何为时间复杂度 算法的时间复杂度,是一个用于度量一个算法的运算时间的一个描述,本质是一个函数,根据这个函数能在不用具体的测试数据来测试的情况下,粗略地估计算法的执行效率,换句话讲时间复杂度表示的…

UNIX高级编程--管道

管道 管道是 UNIX 系统 IPC 的最高老形式,所有的 UNIX 系统都提供此种通信机制。管道有以下两种局限性。 历史上,它们是半双工(既数据只能在一个方向上流动)。现在,某些系统提供全双工管道,但是为了最佳的…

代码随想录算法训练营第五十七天 | 647. 回文子串、516. 最长回文子序列、动态规划总结

647. 回文子串 动规五部曲 1、确定dp数组(dp table)以及下标的含义 在判断字符串S是否为回文时,如果知道 s[1],s[2],s[3] 这个子串是回文的,那么只需要比较 s[0]和s[4]这两个元素是否相同,如果…

Motion Planning学习笔记一:配置空间、图、图搜索、图遍历

学习高飞博士的路径规划课程所总结的学习笔记。 目录 1、配置空间(Configuration Space, C-space) 2、图(Graphs) 3、图搜索(Graph Search Basis) 3.1、总体框架 3.2、两种基本的图遍历算法 3.3、启…

【Python】【进阶篇】十七、Python爬虫实现实时翻译

目录十七、Python爬虫实现实时翻译17.1 JS代码slat与sign17.2 Python代码表示参数17.3 完整程序实现十七、Python爬虫实现实时翻译 YD翻译是以异步方式实现数据加载的,要实现数据抓取,其过程极其繁琐。 上一节《Python爬虫的浏览器实现抓包》&#xff…

【hello Linux】Linux开发工具

目录 1. vim:文本编辑器 1.1 各种模式的切换 补充:ctrl r命令 1.2 命令模式的操作 1.3 插入模式的操作 1.4 底行模式的操作 1.5 配置vim环境 1.6 配置亲属关系 2. gcc/g:编译器 2.1 预处理: 2.2 编译: 2.3 汇编&#x…

如何利用ChatGPT辅助优化刷题性能

根据土著刷题共建群里的一个小伙伴反馈,刷题会出现切题卡顿的情况,有时会出现滑不动的情况。 定位问题 为了定位切题卡顿问题的具体原因,测试了高低端手机📱、切换2G、3G、4G低网络状态等各种影响切题的现实情况,经过借…

STM32F4_定时器精讲(TIM)

目录 1. 什么是定时器? 2. STM32定时器简介 2.1 高级控制定时器 TIM1和TIM8 2.1.1 TIM1和TIM8简介 2.1.2 时基单元 2.1.3 计数器模式 2.1.4 重复计数器 2.1.5 时钟选择 2.1.6 捕获/比较通道 2.1.7 输入捕获模式 2.1.8 其他功能 2.2 通用定时器 TIM2到TI…

Mysql 你还在一个字段一个索引吗

今天看到某系统的mysql在某时段存在thread_running线程数飙高触发告警,挤时间分析了该异常时间段的慢日志记录,并进行了sql优化 慢日志记录主要归为3个慢sql (编号1,2,3) 一、 1号sql原文 select * from feeds where topics_id &…

【MySQL数据库原理】MySQL Community安装与配置

目录 安装成功之后查看版本验证1、介绍、安装与配置数据库2、操作MySQL数据库3、MySQL数据库原理安装成功之后查看版本验证 SELECT VERSION();查看mysql版本号 1、介绍、安装与配置数据库 下载安装包:https://download.csdn.net/download/weixin_41194129/87672588 MySQL…

Visual studio C#中通过nuget安装sqlite库及C#中sliqte的用法

以前在Visual studio 的2017版中讲过如何使用sqlite,这里我们再次说说如何使用sqlite,以前Nuget使用还不是很流行很普及,大多数人不知道,但随着VS的升级,Nuget成为安装插件或者引用库文件标准的获取手段,所…

Qt Quick - TabBar

Qt Quick - TabBar使用总结一、概述二、调整选项卡三、Flickable标签三、定制化一、概述 TabBar其实就是选项卡,TabBar是由TabButton控件填充,TabBar可以与任何提供currentIndex属性的布局或容器控件一起使用,如StackLayout或SwipeView。Tab…

Vector - CAPL - CAN x 总线信息获取

在CAN&CANFD测试中,我们经常需要获取到CAN总线的负载、错误帧、过载帧、发送错误等等CAN总线上面的信息,这些信息如此重要,但是如果真的要写代码去实现也是相当不易的,那我们该如何去获取到的呢?下面我们就来一起看…

Object方法

私人博客 许小墨のBlog —— 菜鸡博客直通车 系列文章完整版,配图更多,CSDN博文图片需要手动上传,因此文章配图较少,看不懂的可以去菜鸡博客参考一下配图! 系列文章目录 前端系列文章——传送门 JavaScript系列文章—…

柔性数组【结构体和动态内存的结合】

全文目录前言柔性数组的定义语法柔性数组的特点柔性数组的使用柔性数组的优势前言 很多人可能没有听过柔性数组这个概念,但是在C99中柔性数组是确实存在的。我个人感觉有点像动态内存和结构体的结合。 柔性数组的定义语法 结构中的最后一个元素允许是未知大小的数…

NumPy 秘籍中文第二版:三、掌握常用函数

原文:NumPy Cookbook - Second Edition 协议:CC BY-NC-SA 4.0 译者:飞龙 在本章中,我们将介绍许多常用函数: sqrt(),log(),arange(),astype()和sum()ceil(),modf()&…

《Java8实战》第1章 Java 8、9、10 以及 11 的变化

如想了解 Oracle 公司对 JDK 的最新支持情况,请访问https://www.oracle.com/technetwork/java/java-se-supportroadmap.html。所有的示例代码均可见于图灵社区本书主页 http://ituring.com.cn/book/2659“随书下载”处。 1.1 为什么要关心 Java 的变化 Java8做的…