【Pytorch】2.TensorBoard的运用

什么是TensorBoard

是一个可视化和理解深度爵溪模型的工具。它可以通过显示模型结构、训练过程中的指标和图形化展示训练的效果来帮助用户更好地理解和调试他们的模型

TensorBoard的使用

安装tensorboard环境
在终端使用

conda install tensorboard

通过anaconda安装
导入类SummaryWriter

from torch.utils.tensorboard import SummaryWriter

我们可以查看SummaryWriter的源码
在这里插入图片描述
对他的介绍是
将条目直接写入log_dir中的事件文件,以供TensorBoard使用。
然后我们可以看到他的使用方法
在这里插入图片描述
我们就可以通过指定单个参数,来将生成的事件与文件存储到指定的文件夹下

writer = SummaryWriter("logs")  # 单参数传递,说明将我们的事件和文件存储到logs的文件夹下

其中主要使用到了两种方法

  • add_image()
  • add_scalar()

add_scalar() 添加标量

我们查看源码
在这里插入图片描述
在这里插入图片描述
我们可以编写一个例子演示一下

for i in range(100):writer.add_scalar("y=2x", 2*i, i) #生成图像

运行结束后会生成logs的文件夹
在这里插入图片描述
然后再项目终端使用

# tensorboard --logdir=文件夹名tensorboard --logdir=logs

打开生成的事件与文件
在这里插入图片描述
就可以在对应的端口上观察相应的可视化界面了
在这里插入图片描述

add_image() 添加图片

我们先看一下源码
在这里插入图片描述
注意我们的img_tensor的类型,就不能用我们Image.open()打开的类型了
因为打开的类型为

from PIL import Image
img = Image.open(img_path)
print(type(img))
<class 'PIL.JpegImagePlugin.JpegImageFile'>		# 不符合上面文件的规范

这时候我们可以使用numpy包中的array方法,将Image.open打开的图片类型转化为numpy类型,具体操作为

img_path = "dataset/hymenoptera_data/train/ants/0013035.jpg"
img_PIL = Image.open(img_path)
img_np = np.array(img_PIL)  # 将其他数据结构转化为numpy类型

然后我们就可以导入测试了,但是注意一个问题
通过这种方式转化为numpy类型的数据与add_image方法默认的数据形式不相同,默认形式为CHW,而numpy类型时HWC
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

writer.add_image("test", img_np, 1, dataformats='HWC')  # 添加图片
# 最后需要指定格式

程序成功运行,通过终端输入指令

tensorboard --logdir=logs

成功运行
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

408数据结构-树与森林 自学知识点整理

前置知识&#xff1a;树的基本概念与性质 树的存储结构 树既可以采用顺序存储结构&#xff0c;又可采用链式存储结构。但无论采取哪种方式&#xff0c;都要求能够唯一地反映树中各结点之间的逻辑关系。 1. 双亲表示法 这种存储结构采用一组连续空间来存储每个结点&#xff0…

DW PCIE LINUX的初始化分析

一些定义 PCIE复位&#xff1a;一些PCIE复位的知识链接 PCIE初始化&#xff1a;初始化相关定义看下面链接和下图 C语言简化初始化看本人的《DW PCIE的PCIE的RC和EP最简初始化学习笔记》文章。 Sticky Registers&#xff1a;与传统的复位方式相同&#xff0c;FLR方式不能复位…

Linux环境下的事件驱动力量:探索Libevent的高性能I/O架构

hello &#xff01;大家好呀&#xff01; 欢迎大家来到我的Linux高性能服务器编程系列之《Linux环境下的事件驱动力量&#xff1a;探索Libevent的高性能I/O架构》&#xff0c;在这篇文章中&#xff0c;你将会学习到Libevent的高性能I/O原理以及应用&#xff0c;并且我会给出源码…

java中的字符串(String)常量池理解

下面创建String对象的方式一样吗&#xff1f; 上述程序创建对象类似&#xff0c;为什么s1和s2引用对象一样&#xff0c;但是s3和s4不一样呢&#xff1f; 在java程序中&#xff0c;许多基本类型的字面常量会经常用到&#xff0c;例如2,3.11&#xff0c;“hyy”等。为了提升程序…

一文读懂Vue生命周期(Vue2)

一文读懂Vue生命周期&#xff08;Vue2&#xff09; 目录 一文读懂Vue生命周期&#xff08;Vue2&#xff09;1 前言2 Vue生命周期2.1 基本生命周期2.1.1 8个生命周期2.1.2 案例 2.2 组件生命周期2.2.1 父子生命周期2.2.2 案例 2.3 keep-alive生命周期2.3.1 案例 2.4 其他 3 总结…

OpenHarmony实战开发-应用侧调用前端页面函数

应用侧可以通过runJavaScript()方法调用前端页面的JavaScript相关函数。 在下面的示例中&#xff0c;点击应用侧的“runJavaScript”按钮时&#xff0c;来触发前端页面的htmlTest()方法。 前端页面代码。 <!-- index.html --> <!DOCTYPE html> <html> <…

迭代器解释(C++)

一、什么是迭代器 为了提高C编程的效率&#xff0c;STL&#xff08;Standard Template Library&#xff09;中提供了许多容器&#xff0c;包括vector、list、map、set等。然而有些容器&#xff08;vector&#xff09;可以通过下标索引的方式访问容器里面的数据&#xff0c;但是…

php基础知识快速入门

一、PHP基本知识 1、php介绍&#xff1a; php是一种创建动态交互性的强有力的服务器脚本语言&#xff0c;PHP是开源免费的&#xff0c;并且使用广泛。PHP是解释性语言&#xff0c;按顺序从上往下执行&#xff0c;无需编译&#xff0c;直接运行。PHP脚本在服务器上运行。 2、ph…

【STM32嵌入式系统设计与开发】——18StaticNixite(静态数码管应用)

这里写目录标题 STM32资料包&#xff1a; 百度网盘下载链接&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1mWx9Asaipk-2z9HY17wYXQ?pwd8888 提取码&#xff1a;88881、函数编辑&#xff08;1&#xff09;主函数编辑&#xff08;2&#xff09;主函数头文件函数&#x…

Vue 介绍

【1】前端发展史 前端的发展史可简述为&#xff1a; 从最初的静态页面编写&#xff0c;依赖后端模板渲染逐步演化为通过JavaScript&#xff08;特别是Ajax技术&#xff09;实现前后端分离&#xff0c;使得前端能够独立地加载数据和渲染页面随后&#xff0c;Angular、React、Vu…

CTF(Web)中关于执行读取文件命令的相关知识与绕过技巧

在我遇到的题目中&#xff0c;想要读取文件必然是要执行cat /flag这个命令&#xff0c;但是题目当然不会这么轻松。让你直接cat出来&#xff0c;必然会有各种各样的滤过条件&#xff0c;你要做的就是尝试各种方法在cat /flag的基础上进行各种操作构建出最终的payload。 下面我…

Vite构造Vue3

环境安装 node.js安装-CSDN博客 初始化Vue项目安装脚手架_vue init webpack安装脚手架-CSDN博客 选择Vue框架 &#xff0c;项目名称可以自定义&#xff0c;我使用默认的 vite-project 选择JS 进入项目安装依赖 安装路由