当前位置: 首页 > news >正文

[pytorch] 2. tensorboard

tensorboard简介

TensorBoard 是一组用于数据可视化的工具。它包含在流行的开源机器学习库 Tensorflow 中.但是也可以独立安装,服务Pytorch等其他的框架
可以常常用来观察训练过程中每一阶段如何输出的

  • 安装
    pip install tensorboard
    
  • 启动
    tensorboard --logdir=<directory_name>
    
    会默认在6006端口打开,也可以自行制定窗口,如:
    tensorboard --logdir=logs --port=6007
    

用法

  1. 所在类:
    from torch.utils.tensorboard import SummaryWriter
    
    介绍:
    class SummaryWriter:"""Writes entries directly to event files in the log_dir to beconsumed by TensorBoard.The `SummaryWriter` class provides a high-level API to create an event filein a given directory and add summaries and events to it. The class updates thefile contents asynchronously. This allows a training program to call methodsto add data to the file directly from the training loop, without slowing downtraining."""
    
  2. 创建对象
    writer = SummaryWriter('logs') # 说明写入哪个文件夹
    
  3. 常用方法
    writer.add_image()   # 图像方式
    writer.add_scalar()  # 坐标方式writer.close()  # 使用完之后需要close
    

add_scalar()

    def add_scalar(self,tag,scalar_value,global_step=None,walltime=None,new_style=False,double_precision=False,):"""Add scalar data to summary.添加标量数据到summary中Args:tag (str): Data identifier 图表标题scalar_value (float or string/blobname): Value to save 数值(y轴)global_step (int): Global step value to record 训练到多少步(x轴)walltime (float): Optional override default walltime (time.time())with seconds after epoch of eventnew_style (boolean): Whether to use new style (tensor field) or oldstyle (simple_value field). New style could lead to faster data loading.Examples::from torch.utils.tensorboard import SummaryWriterwriter = SummaryWriter()x = range(100)for i in x:writer.add_scalar('y=2x', i * 2, i)writer.close()Expected result:.. image:: _static/img/tensorboard/add_scalar.png:scale: 50 %"""

注意:向writer中写入新事件的同时她也会保留上一个事件,这就会导致一些拟合出现问题
解决:删除之前的log文件,重新生成

add_image()

def add_image(self, tag, img_tensor, global_step=None, walltime=None, dataformats="CHW"):"""Add image data to summary.Note that this requires the ``pillow`` package.Args:tag (str): Data identifierimg_tensor (torch.Tensor, numpy.ndarray, or string/blobname): Image data 注意数据的类型global_step (int): Global step value to record后面不用管walltime (float): Optional override default walltime (time.time())seconds after epoch of eventdataformats (str): Image data format specification of the formCHW, HWC, HW, WH, etc.Shape:img_tensor: Default is :math:`(3, H, W)`. You can use ``torchvision.utils.make_grid()`` toconvert a batch of tensor into 3xHxW format or call ``add_images`` and let us do the job.Tensor with :math:`(1, H, W)`, :math:`(H, W)`, :math:`(H, W, 3)` is also suitable as long ascorresponding ``dataformats`` argument is passed, e.g. ``CHW``, ``HWC``, ``HW``."""

实践

如在tensorboard中展示图片:

from torch.utils.tensorboard import SummaryWriter
import numpy as np
from PIL import Imagewriter = SummaryWriter('logs')
image_path = './dataset2/train/ants_image/0013035.jpg'
img_PIL = Image.open(image_path)
img_array = np.array(img_PIL)
print(type(img_array))
print(img_array.shape)writer.add_image("test",img_array,1,dataformats='HWC') # 展示读取的图片for i in range(100):writer.add_scalar('y=2x', 3*i, i)     # 绘图writer.close()
  • writer.add_image中的参数

    def add_image(self, tag, img_tensor, global_step=None, walltime=None, dataformats="CHW"):
    

    名称、图形向量(ndarray类型),第几步(是滑动翻页那种的,这里相当于设定是第几页,每次向后设定时不会清除原来的数据)

当前代码效果如图:
在这里插入图片描述
修改图片后:

from torch.utils.tensorboard import SummaryWriter
import numpy as np
from PIL import Imagewriter = SummaryWriter('logs')
image_path = './dataset2/train/ants_image/5650366_e22b7e1065.jpg'
img_PIL = Image.open(image_path)
img_array = np.array(img_PIL)
print(type(img_array))
print(img_array.shape)# 这里更新,说明为第二步
writer.add_image("test",img_array,2,dataformats='HWC')for i in range(100):writer.add_scalar('y=2x', 3*i, i)writer.close()

拖拉就会发现有两张图
在这里插入图片描述

在这里插入图片描述

相关文章:

  • Flask用于生产环境
  • cpp_12_异常处理
  • Self-RAG:通过自我反思学习检索、生成和批判
  • python插件架构介绍
  • Python项目——搞怪小程序(PySide6+Pyinstaller)
  • 【LeetCode每日一题】2788. 按分隔符拆分字符串
  • ubuntu18.04clion无法进入断点
  • C语言总结十一:自定义类型:结构体、枚举、联合(共用体)
  • 用C语言实现简单的三子棋游戏
  • 【docker】之基础篇二
  • 130 删除二叉搜索树中的节点
  • 怎么提升搜狗网站排名
  • ora-12154无法解析指定的连接标识符
  • OCR识别网络CRNN理解与Pytorch实现
  • 堆优化的dijkstra板子
  • 【译】理解JavaScript:new 关键字
  • canvas实际项目操作,包含:线条,圆形,扇形,图片绘制,图片圆角遮罩,矩形,弧形文字...
  • docker-consul
  • eclipse(luna)创建web工程
  • Javascript Math对象和Date对象常用方法详解
  • python3 使用 asyncio 代替线程
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • Redux 中间件分析
  • Travix是如何部署应用程序到Kubernetes上的
  • 读懂package.json -- 依赖管理
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 无服务器化是企业 IT 架构的未来吗?
  • 学习笔记TF060:图像语音结合,看图说话
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • #ifdef 的技巧用法
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • $().each和$.each的区别
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (Git) gitignore基础使用
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • (转)一些感悟
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • .NET Core工程编译事件$(TargetDir)变量为空引发的思考
  • .Net Core缓存组件(MemoryCache)源码解析
  • .Net 代码性能 - (1)
  • .NET 中什么样的类是可使用 await 异步等待的?
  • @Controller和@RestController的区别?
  • @ResponseBody
  • [2016.7 day.5] T2
  • [AIGC] Kong:一个强大的 API 网关和服务平台
  • [Android View] 可绘制形状 (Shape Xml)
  • [android] 切换界面的通用处理
  • [bzoj1038][ZJOI2008]瞭望塔
  • [HAOI2016]食物链
  • [JavaEE系列] wait(等待) 和 notify(唤醒)
  • [leetcode top100] 0924 找到数组中消失的数,合并二叉树,比特位计数,汉明距离
  • [LeetCode] 596:超过5名学生的课