【深度学习】计算机视觉(13)——tensorboard

news2024/11/14 20:38:46

因为意识到tensorboard的使用远不止画个图放个图片那么简单,所以这里总结一些关键知识的笔记。由于时间问题,我先学习目前使用最多的功能,大部分源码都包含summary的具体使用,基本不需要自己修改,因此tensorboard的解读作为目前学习的核心,所以本文的知识结构可能不是很完整,以后的学习中再慢慢调整。

ps:便于更直观的理解,文中给出的代码大多是我学习时直接从项目源码那里复制过来的,如果没有特殊说明,文中出现的路径、字符串等都是项目特定内容,不影响学习也不必深究其含义。

1 Tensorboard怎么解读?

1.1 histogram直方图

1.1.1 概念

通过tf.summary.histogram生成某一张量tensor的直方图,在TensorBoard直方图仪表板上显示。直方图是显示张量在不同时间点的,通过直方图显示某些值的分布随时间变化的情况。

如何理解“随时间”变化?按照初学时的理解,在训练网络的过程中,数据肯定是随着迭代次数的增加慢慢保存更新的,比如loss曲线的生成,横坐标一定与迭代次数正相关。通过阅读代码我了解到,我们设置了每隔一定的时间,保存一次summary,也就是说实际上迭代的次数体现在时间的变化。

The time interval for saving tensorflow summaries

1.1.2 数据解读

先抛开时间不谈,从分布情况的角度看,tf.summary.histogram()将输入的一个任意大小和形状的张量压缩成一个由宽度和数量组成的直方图数据结构。
举个例子便于理解,假设输入的数据为 [0.5, 1.1, 1.3, 2.2, 2.9, 2.5],直方图将横坐标分成三个区间,分别为0-11-22-3,而纵坐标表示在每个区间内的元素的数量。实际上tensor读取的图片像素是有维度要求的,而且划分区间也有一定的规则,那么模拟一下真实情况,还是用上面的数据构造一个RGB图片:

import tensorflow as tf
from torchvision import transforms
from torch.utils.tensorboard import SummaryWriter
import numpy as np

writer = SummaryWriter("logs")

# width = 6 and height = 2
img_row = [0.5, 1.1, 1.3, 2.2, 2.9, 2.5]
img_r = [img_row, img_row]
img_g = [img_row, img_row]
img_b = [img_row, img_row]
img = [img_r, img_g, img_b]

ans = np.array(img, dtype='float')

to_tensor = transforms.ToTensor()
ans = to_tensor(ans)

writer.add_histogram("test histogram sample of img", ans)

writer.close()

得到的直方图如下:
在这里插入图片描述
其中xy的对应关系为:

x = ?y = ?
0.546.00
0.620.00
0.940.00
1.023.03
1.12.97
1.180.00
1.263.89
1.342.11
1.420.00
2.060.00
2.140.477
2.222.22
2.32.22
2.382.12
2.462.02
2.542.02
2.620.933
2.70.00
2.780.00
2.860.00

说明:虽然直方图看起来是连续的,但是鼠标移动时只显示这这几对数据,每组数据之间直线连接。

1.1.3 数据计算

显示在tensorboard时,默认将数据分为30个区间,每个区间的长度为(max-min)/30,即(2.9-05)/30=0.08。而每组xi取区间的中点,比如第一组区间为[0.5, 0.58],则x1=0.54,同理第二组x2=0.62。

但是显示和实际数值是有区别的,实际上,区间并不是等分的,而是从0开始,区间长度是首项为0.1×10-12、公比为1.1的等比数列,且最后一个区间的长度需要进行截取,满足右端点经截取后保证不超过max。它使用指数分布来产生区间,越接近零区间分得越密,越大的数区间的长度越宽。我们将这些区间称为bin。

区间划分的规则清楚后学习实际的数据(x’i, y’i)与显示数据(xj, yj)之间的对应关系。公式为:
在这里插入图片描述
比如显示区间[2.50, 2.58]对应的中点x=2.54
计算实际区间,根据等比数列可知,第300个区间为[2.3791, 2.617](经四舍五入后),"交集长度"为2.58-2.50=0.08,"区间大小"为2.617-2.3791=0.2379。因为在数列[0.5, 1.1, 1.3, 2.2, 2.9, 2.5]中只有2.5在[2.3791, 2.617]范围内,而且我构造的图片是6个这样的数列组成的张量,所以"区间所含元素个数"为1×6=6
则当x=2.54时,y=0.08÷0.2379×6=2.0176,对照上表,2.0176≈2.02

附:求实际区间按照等比数列求和公式Sn,已知首项和公比,第n个区间的端点为[Sn-1, Sn]。

验证1:显示数据为(1.02, 3.03),对应实际区间第291个区间[1.009, 1.1099],数据正确。

验证2:显示数据为(2.14, 0.477),对应实际区间第298个区间[1.9662, 2.1628]或第299个区间[2.1628, 2.3791],因为第298个区间里没有数据,所以对照第299个区间,数据正确。

1.1.4 OVERLAY和OFFSET

上一小节没有引入时间的概念,数据范围和数量已经构成了二维图像,那么随时间的变化如何表示呢?直方图有两种模式:OVERLAY和OFFSET。

OVERLAY
在这里插入图片描述
横轴表示bin值,纵轴表示数量,每个切片显示一个直方图,切片按步骤(步数或时间)排列。旧的切片较暗,新的切片颜色较浅。如图,可以看到在第393步时,以4.91为中心的bin中有161个元素。

另外,直方图切片并不总是按步数或时间均匀分布,而是通过水塘抽样/reservoir sampling来抽取所有直方图的一个子集,以节省内存.

OVERLAY
在这里插入图片描述
同样,横轴表示bin值,纵轴表示数量。但是OVERLAY模式下各个直方图切片不再展开,而是全部绘制在相同的y轴上,不同的线表示不同的步骤(步数或时间)。如图,可以看到在第5步时,以0.11为中心的bin中有183个元素。

OVERLAY模式用于直接比较不同直方图的计数.

1.1.5 应用

利用tf.summary.histogram可视化梯度、权重或特定层的输出分布,可传入的张量包括但不限于:网络输出特征(act_summary)、训练结果(score_summary)、需要训练的变量(train_summary)。根据代码为不同直方图设置标签,可生成多个直方图。
图片来源网络

act_summary

tf.summary.histogram('ACT/' + tensor.op.name + '/activations', tensor)

传入的张量tensor = [net, rpn],其中net.shape = [1, w/16, h/16, 512]rpn.shape = [1, w/16, h/16, 512],显示神经网络两次特征的输出net、rpn的特征值分布。

score_summary

tf.summary.histogram('SCORE/' + tensor.op.name + '/' + key + '/scores', tensor)

传入的张量生成多个不同功能的分布直方图,例如网络输出、预测分数、预测概率、预测偏移、预测框坐标等。

train_summary

tf.summary.histogram('TRAIN/' + var.op.name, var)

传入的张量包括需要训练的变量的值。

参考来源

TensorBoardX histogram查看说明
等比数列的前n项和公式是什么
TensorFlow学习Program1——4.TensorBoard可视化数据流图
TensorFlow学习--tf.summary.histogram与直方图仪表板/tensorboard_histograms
【Tensorflow_DL_Note17】TensorFlow可视化学习4_tf.summary模块的详解

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

选择云原生是企业进行技术变革的必经之路

前言 众所周知,云计算领域的蓬勃发展,让越来越多的企业将自己的业务搬到云上,上云已经成为大部分企业的首选操作。无论是头部的中大型企业,还是普通的微小企业,企业业务是亘古不变的核心,这关系着企业的命脉…

赋值带随机指针的链表

给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的 n…

云主机如何恢复备份和挂载备份

一、挂载备份(优先推荐) 1、windows系统: 在主机管理界面,点击【挂载备份盘】 挂载完成以后远程连接到服务器,右键 我的电脑--管理--磁盘管理 可以看到未分配的磁盘 右键未分配的磁盘--更改驱动路径--添加 给磁盘指定一个盘符。…

C++学习day--02 C++语法规则

1、回顾 通过第一天的学习&#xff0c;我们搭建好了开发环境&#xff0c;并打印了你好&#xff0c;现在做一个案例&#xff1a;自己跟着敲写出来&#xff1a; #include <iostream> #include <Windows.h> int main(void) { std::cout << "1.网站 404 攻…

SPSS如何进行相关分析之案例实训?

文章目录 0.引言1.双变量相关分析2.偏相关分析3.距离分析 0.引言 因科研等多场景需要进行绘图处理&#xff0c;笔者对SPSS进行了学习&#xff0c;本文通过《SPSS统计分析从入门到精通》及其配套素材结合网上相关资料进行学习笔记总结&#xff0c;本文对相关分析进行阐述。 1.双…

ubuntu(22.04)--常用命令(2)-awk-sed-find-cut-xargs-grep-curl-tee-wc-sort

1.awk 它逐行处理数据&#xff0c;特别适用于从文件中提取特定的数据。例如&#xff0c;您可以使用以下命令从CSV文件中提取数据的第一列&#xff1a; #1.awk awk -F , {print $1} linuxmi.csv#指定分割符#第一列# 待处理文件$ awk [options] [file] #1.打印第2列awk ‘{pr…

IPC<进程间通信>之共享内存-源代码在结尾处

一&#xff0c;什么是共享内存 共享内存是进程间通信的一种方式&#xff0c;相较于传统的管道和命名文件的通信方式&#xff0c;shared memory是最快的一种方式&#xff0c;但是他也有一定的缺陷&#xff0c;下面再谈。 共享内存区是最快的IPC形式。一旦这样的内存映射到共享…

从C语言到C++⑤(第二章_类和对象_中篇)(6个默认成员函数+运算符重载+const成员)

目录 0. 引入6个默认成员函数 1. 构造函数&#xff08;默认成员函数&#xff09; 1.1 构造函数的概念 1.2 构造函数的特性和用法 1.3 默认构造函数 2. 析构函数&#xff08;默认成员函数&#xff09; 2.1 析构函数概念 2.2 析构函数特性 3. 拷贝构造函数&#xff08;默认成员函…

附录2-购物车案例

目录 1 效果 2 接口数据 3 App.vue 4 HEADER.vue 5 COUNT.vue 6 GOODS.vue 7 FOOTER.vue 1 效果 由四种子组件和一个App.vue构成 2 接口数据 返回结果如下 {"status": 200,"message": "获取购物车列表数据成功&#xff01;",&q…

idea中的debug操作详解

行断点 默认模式 方法断点 菱形&#xff0c;加在方法前&#xff0c;用的比较多的地方&#xff1a;加在接口前会进入这个接口的实现类。 异常断点 如果说你的程序抛了某个异常&#xff0c;你需要知道在哪里抛出的&#xff0c;可以直接设置异常断点&#xff0c;设置后程序会…

Shell脚本之循环语句(for、while、until)

目录 一、echo命令二 for循环语句三 while循环语句结构(迭代&#xff09;四. until 循环语句结构五.continue和break和exit 一、echo命令 ?echo -n 表示不换行输出 echo -e 输出转义字符&#xff0c;将转义后的内容输出到屏幕上 常见转义字符&#xff1a; 二 for循环语句 用法…

Baumer工业相机堡盟工业相机如何通过BGAPI SDK设置自动亮度调整BrightnessAuto(自动曝光自动增益)(C++)

自动亮度调整项目场景 Baumer工业相机堡盟相机是一种高性能、高质量的工业相机&#xff0c;可用于各种应用场景&#xff0c;如物体检测、计数和识别、运动分析和图像处理。 Baumer的万兆网相机拥有出色的图像处理性能&#xff0c;可以实时传输高分辨率图像。此外&#xff0…

北斗哨兵北斗短报文远程监控系统解决方案

一、项目背景 随着社会发展各行各业都会遇到各种各样的安全问题&#xff0c;监控系统作为安防的第一线安防设备也已广泛部署&#xff0c;然而地处偏僻的监控区域往往面临着难以提供电力供应以及网络供应的问题&#xff0c;类似于山区环境监测&#xff0c;工地监测等复杂的环境布…

Web自动化测试流程:从入门到精通,帮你成为测试专家

B站首推&#xff01;2023最详细自动化测试合集&#xff0c;小白皆可掌握&#xff0c;让测试变得简单、快捷、可靠https://www.bilibili.com/video/BV1ua4y1V7Db 目录 摘要&#xff1a; 步骤一&#xff1a;选取测试工具 步骤二&#xff1a;编写测试用例 步骤三&#xff1a;编…

5月4号软件资讯更新合集.....

&#x1f680; Layui 2.8.2 发布 更新日志 table 修复 autoSort: true 时&#xff0c;更改 table.cache 未同步到 data 属性的问题 修复 多级表头存在 hide 表头属性时&#xff0c;执行完整重载可能出现的错位问题 修复 未开启 page 属性时底边框缺失问题 优化 打印内容中…

大型游戏剧本杀小程序app

大型游戏剧本杀小程序的发展趋势主要表现为以下几个方面&#xff1a; 社交互动&#xff1a;未来大型游戏剧本杀小程序将会更加注重社交互动&#xff0c;为用户提供更多的沟通方式和社交场景&#xff0c;以增强玩家间的互动和参与感。 智能化和AR/VR技术应用&#xff1a…

网络基础项目——全网互通实验

作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​​ 前言 本章将会讲解网络基础项目——全网互通实验。 一.实验项目图 二.实验要求 1.全网互通,所有PC机能访问服务器(ping)2.路由器…

DA-Net:用于视网膜血管分割的双分支Transformer和自适应条带上采样

文章目录 DA-Net: Dual Branch Transformer and Adaptive Strip Upsampling for Retinal Vessels Segmentation摘要本文方法整体框架Transformer LayerAdaptive Strip Upsampling Block 实验结果消融实验 DA-Net: Dual Branch Transformer and Adaptive Strip Upsampling for R…

【Python习题集6】类与对象

类与对象 一、实验内容二、实验总结 一、实验内容 1.设计一个Circle类来表示圆&#xff0c;这个类包含圆的半径以及求面积和周长的函数。在使用这个类创建半径为1~10的圆&#xff0c;并计算出相应的面积和周长。 半径为1的圆&#xff0c;面积: 3.14 周长: 6.28 半径为2的圆&am…

【虹科案例】虹科任意波形发生器板卡在声场模拟实验中的应用

声场模拟实验介绍 声场模拟实验是一种通过模拟不同环境下的声场特征来模拟真实世界中声音传输情况的实验方法。通过模拟不同环境下的声场特征&#xff0c;如空间分布、强度、频率等&#xff0c;来模拟真实世界中的声音传输情况&#xff0c;从而对声学相关问题进行研究。 在声…