Tensorboard--模型可视化工具

Tensorboard

  • 1.tensorboard in tensorflow
    • 1.1 tensorboard的启动过程
    • 1.2 tf.summary 可视化类型
    • 1.3 tf.summary 使用demo
  • 2.tensorboard in pytorch
    • 2.1 SummaryWriter 使用demo1
    • 2.2 tSummaryWriter 使用demo2
    • 2.3 tensorboard 数据再读取

tensorboard in tensorflow :tensorboard 是一套用于tensorflow训练过程可视化工具,能够可视化模型的结构,参数,损失函数等。最常用于记录训练过程中参数和损失函数值的变化,用来反馈模型性能指标的变化。

TensorBoard github readme–基础概念、操作,tf.summary.xxx
Get started with TensorBoard–图像、网络图、网络参数的可视化

tensorboard in pytorch: 有多种方式来使用tensorboard。本文想推荐的是通过 TensorboardX [第三方库] 来使用tensorboard。底层实际还是tensorflow的tensorboard. 在pytorch 代码框架下想要使用tensorboard 的话,需安装以下两个包。 pip install tensorboardX、pip install tensorflow # cpu 版本即可。

PyTorch 自带 TensorBoard 使用教程 – from torch.utils.tensorboard import SummaryWriter
PyTorch 使用 TensorboardX 进行网络可视化–from tensorboardX import SummaryWriter

(pytorch 和 tensorflow 使用tensorboard 之间的差别后续在整理。本文先着重于整理tensor low中tensor board的使用。)

从标黄的三个地方可以看出,Summary这个对象蛮重要的。

1.tensorboard in tensorflow

1.1 tensorboard的启动过程

# 1.创建writer,用于写日志文件
writer=tf.summary.FileWriter('/path/to/logs', tf.get_default_graph())
# 2.保存日志文件
writer.close()
# 3.运行可视化命令,启动服务
tensorboard –logdir /path/to/logs
# 4.打开可视化界面
通过浏览器打开服务器访问端口http://xxx.xxx.xxx.xxx:6006

参考文档–Tensorboard 详解(上篇)

1.2 tf.summary 可视化类型

Tensorboard 需要将可视化的数据存盘,这些数据来自 summary操作[summary ops]。 summary操作和tensorflow的其他ops性质是一致的,它能够产生序列化的protobufs数据,然后使用summary.FileWriter写入磁盘。

tensorboard支持以下操作,也就是tensor board能够可视化的对象类型。

tf.summary.FileWriter()    # 指定一个文件用来保存图,可以调用其add_summary()方法将训练过程数据保存在filewriter指定的文件中,详见使用demo
tf.summary.scalar          # 用于追踪模型的loss,
tf.summary.image
tf.summary.audio
tf.summary.text
tf.summary.histogram
tf.summary.merge_all      # 可以将所有summary全部保存到磁盘

tf.summary.scalar、tf.summary.histogram
建议给每类数据赋予一个tag, scalar 和 histogram 的标签里如果有/, 这些数据在存储的时候会存入对应的目录文件中。

1.3 tf.summary 使用demo

自动管理: tf.summary.merge_all(),猜测是直接将训练输出到tensor board中

summary_writer = tf.summary.FileWriter(dir, flush_secs=60)
summary_writer.add_graph(sess.graph)   #添加graph图
tf.summary.scalar('loss', loss)
tf.summary.scalar('accuracy', accuracy)
sum_ops = tf.summary.merge_all()      #自动管理,就是说要算loss 和 accuracy 呗
metall = sess.run(sum_ops, feed_dict={X: batch_x_test, Y: batch_y_test, keep_prob: 1.})
summary_writer.add_summary(metall, global_step=step) # 写入文件

手动管理:

summary_writer = tf.summary.FileWriter(dir', flush_secs=60)
summary_writer.add_graph(sess.graph)        #添加graph图
loss_scalar = tf.summary.scalar('loss', loss)
accuracy_scalar = tf.summary.scalar('accuracy', accuracy)
loss_metall, accuracy_metall, = sess.run([loss_scalar, accuracy_scalar], feed_dict={X: batch_x_test, Y: batch_y_test, keep_prob: 1.})
summary_writer.add_summary(loss_metall, global_step=step)     # 写入文件
summary_writer.add_summary(accuracy_metall, global_step=step) # 写入文件

参考文档:
Tensorflow学习笔记——Summary用法
tf.summary.merge_all()

构建更复杂的图的代码demo

2.tensorboard in pytorch

2.1 SummaryWriter 使用demo1

from tensorboardX import SummaryWriter
writer1 = SummaryWriter('runs/exp')       # 日志保存在‘runs/exp’路径下
writer2 = SummaryWriter()                 # 默认将使用‘runs/日期时间’路径来保存日志
writer3 = SummaryWriter(comment='resnet') # 使用 runs/日期时间-comment 路径来保存日志# 调用 SummaryWriter 实例的各种 add_something 方法向日志中写入不同类型的数据# 标量
writer1.add_scalar(tag, scalar_value, global_step=None, walltime=None)
# tag 子图标识。相同tag的saclar被放在了同一张图表中,方便对比观察
# scalar_value 要求float类型。如果是tensor,则需要调用.item() 方法获取其数值。# 图像
writer1.add_image(tag, img_tensor, global_step=None, walltime=None, dataformats='CHW')
# img_tensor (torch.Tensor / numpy.array): 图像数据
# dataformats (string, optional): 图像数据的格式# 直方图
writer1.add_histogram(tag, values, global_step=None, bins='tensorflow', walltime=None, max_bins=None)
# values (torch.Tensor, numpy.array, or string/blobname): 用来构建直方图的数据# 网络结构
writer1.add_graph(model, input_to_model=None, verbose=False, **kwargs)
# model (torch.nn.Module): 待可视化的网络模型
# input_to_model (torch.Tensor or list of torch.Tensor, optional): 待输入神经网络的变量或一组变量# 嵌入向量 (embedding),作用:高维特征使用PCA、t-SNE等方法降维至二维平面或三维空间显示,还可观察每一个数据点在降维前的特征空间的K近邻情况。
writer1.add_embedding(mat, metadata=None, label_img=None, global_step=None, tag='default', metadata_header=None)
# 可以运行一下参考论文中的demo 加深印象

参考论文:
详解PyTorch项目使用TensorboardX进行训练可视化

2.2 tSummaryWriter 使用demo2

1.记录数据

from tensorboardX import SummaryWriter
# 设置路径
# 数据将存在代码运行文件目录下的./run/xxxyyy/下的文件中,其中run文件目录,xxx附加名称是自动生成的
path = “yyy” 
selfwriter = SummaryWriter(comment=os.path.split(path)
# 添加要观察数据add_scalar方法保证实时观察
# global_step 数据步长
selfwriter.add_scalar("Grad/gradD", d_grad_mean, global_step=dis_iter# ations)
....
selfwriter.add_scalar("Loss/lossD", loss_D, global_step=dis_iterations)
....

2.显示数据:切换至./run/xxxpath/下,运行以下命令,在输出信息中打开对应的网页链接

tensorboard --logdir .

2.3 tensorboard 数据再读取

使用tensorboard 记录实验数据,可以启动服务后,在网页上实时看到被记录指标的变换情况。有时需操作记录下来的数据,那么就涉及到tensorboar 数据再读取问题。

参考博文:https://blog.csdn.net/nima1994/article/details/82844988#commentBox
读取的接口的github 库:https://github.com/tensorflow/tensorboard/blob/master/tensorboard/backend/event_processing/event_accumulator.py

from tensorboard.backend.event_processing import event_accumulator
import matplotlib.pyplot as plt
# 加载日志数据
path = "./runs/xxxyyy/events.out.tfevents.1609854743.pp-System-Product-Name"
ea = event_accumulator.EventAccumulator(path)
# 数据再载入
ea.Reload()
# 输出所有图对应的keys,之后会依据这个keys取出对应的数据
print(ea.scalars.Keys())grad_d = ea.scalars.Items('Grad/gradD')
grad_g = ea.scalars.Items('Grad/gradG')
nd, ng = len(grad_d), len(grad_g)
# 数据长度,event_accumulator默认的数据载入压缩比为500:1,最多载入10000个点
# 所以数据很多的话。最多也就是载入10000个点,我是有后续的点被舍弃掉了么?两个都是10000,但是数据量明明不一样?
print(nd,ng)
# 数据后加工,这里就是展示了绘制
# 数据是[(.step, .value),(),()] 的形式存的
figure = plt.figure()
axes1 = figure.add_subplot(2,1,1)
axes2 = figure.add_subplot(2,1,2)
axes1.plot([i.step for i in grad_d], [i.value for i in grad_d])
axes2.plot([i.step for i in grad_g], [i.value for i in grad_g])
axes1.set_title("grad d")
axes2.set_title("grad g")
plt.savefig("grad_any.png")

下图中上下两子图都包含1万个点,那只能说明采样率不同?(60万个点采1万个Vs 12万个点采1万个)

在这里插入图片描述

如何实现的自动采样率?修改总的采样点数,还需要查看官网接口。(具体效果没有验证过)
初步查看应该修改event_accumulator.EventAccumulator(path)类实例话时的参数size_guidance,不传入时默认为:

DEFAULT_SIZE_GUIDANCE = {COMPRESSED_HISTOGRAMS: 500,IMAGES: 4,AUDIO: 4,SCALARS: 10000,HISTOGRAMS: 1,TENSORS: 10,
}

tf.summary.merge_all 可以将所有summary全部保存到磁盘,以便tensorboard显示。
这个tensorbord 可以显示模型结构?
再看一看这个玩意
summary.merge_all() 的用法

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

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

相关文章

opencv findContours 报错_acrt_first_block == header

报错_acrt_first_block header 之前一直使用OpenCV3.3VS2015 void AOIAlgorithm::findUnits(Mat& blkGray, vector<vector<cv::Point>> & blkContours) {Mat blkOBW;blur(blkGray, blkGray, cv::Size(5, 5));threshold(blkGray, blkOBW, 0, 255, CV_THR…

TensorFlow(2)-训练数据载入

tensorflow 训练数据载入1. tf.data.Dataset2. dataset 创建数据集的方式2.1 tf.data.Dataset.from_tensor_slices()2.2 tf.data.TextLineDataset()2.3 tf.data.FixedLengthRecordDataset()2.4 tf.data.TFRecordDataset()3. dateset 迭代操作iterator3.1 make_one_shot_iterato…

leetcode14. 最长公共前缀

编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀&#xff0c;返回空字符串 ""。 示例 1: 输入: ["flower","flow","flight"] 输出: "fl" 示例 2: 输入: ["dog","racecar",&quo…

Android在子线程里使用Toast报错Can't toast on a thread that has not called Looper.prepare()

在接android SDK的时候有时候为了方便debug调试查看&#xff0c;通过Toast输出相关信息&#xff0c; 实际上这个是在子线程中输出的&#xff0c;在logcat里查看有如下报错java.lang.RuntimeException: Cant toast on a thread that has not called Looper.prepare()。 解决办法…

虚拟机安装windows2012和虚拟机安装国产系统deepin

虚拟机安装windows2012和虚拟机安装国产系统deepin 一.安装windows20121.安装VMWare虚拟机2.1.注意点一&#xff1a;VMWare虚拟网卡2.2.注意点二&#xff1a;配置虚拟网络编辑器3.安装配置Windows Server 2012 R2 二.虚拟机安装deepin1.deepin官网下载ios镜像2.deepin下载合适的…

leetcode876 链表中间的结点

给定一个带有头结点 head 的非空单链表&#xff0c;返回链表的中间结点。 如果有两个中间结点&#xff0c;则返回第二个中间结点。 示例 1&#xff1a; 输入&#xff1a;[1,2,3,4,5] 输出&#xff1a;此列表中的结点 3 (序列化形式&#xff1a;[3,4,5]) 返回的结点值为 3 。 …

PlayFab(二)如何通过Demo应用来进一步熟悉Playfab

有时候刚开始接触新的平台会两眼一麻黑,不过这个文章希望能给读者一些启示,Playfab默认会给开发者提供一个应用,这里我暂且叫他”我的游戏“; 我通过官网提供的DEMO测试地址: https://www.vanguardoutrider.com/#/ 来为该应用配置服务器。 如果你是第一次进入这个页面想为…

leetcode718 最长重复子数组

给两个整数数组 A 和 B &#xff0c;返回两个数组中公共的、长度最长的子数组的长度。 示例 1: 输入: A: [1,2,3,2,1] B: [3,2,1,4,7] 输出: 3 解释: 长度最长的公共子数组是 [3, 2, 1]。 说明: 1 < len(A), len(B) < 1000 0 < A[i], B[i] < 100 思路&#xf…

leetcode108 将有序数组转换为二叉搜索树

将一个按照升序排列的有序数组&#xff0c;转换为一棵高度平衡二叉搜索树。 本题中&#xff0c;一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。 示例: 给定有序数组: [-10,-3,0,5,9], 一个可能的答案是&#xff1a;[0,-3,9,-10,null,…

MachineLearning(12)- RNN-LSTM-tf.nn.rnn_cell

RNN-LSTM1.RNN2.LSTM3. tensorflow 中的RNN-LSTM3.1 tf.nn.rnn_cell.BasicRNNCell()3.2 tf.nn.rnn_cell.BasicLSTMCell()3.3 tf.nn.dynamic_rnn()--多步执行循环神经网络1.RNN RNN-Recurrent Neural Network-循环神经网络 RNN用来处理序列数据。多层感知机MLP层间节点全联接&…

AWS的VPC使用经验(二)

上文说了如何创建自定义VPC网络的EC2实例&#xff0c;这节说如何在多个VPC之间创建对等连接。 这里分别填写自己的VPC和对方的VPC的ID信息&#xff0c;然后在对方的VPC里就能看到有连接请求&#xff0c;在对方的连接请求里选择 “操作”->接受。 到这里已经快要收尾了&…

ubuntu nginx配置负载均衡篇(一)

Nginx 代理服务的配置说明 1、设置 404 页面导向地址 error_page 404 https://www.runnob.com; #错误页 proxy_intercept_errors on; #如果被代理服务器返回的状态码为400或者大于400,设置的error_page配置起作用。默认为off。 2、如果我们的代理只允许接受get,post请求…

坦克大战

效果 map.js var map4 [[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,2,2,0,0,2,2,0,0,0,2,2,0,0,2,2,0,0,2,2,0,2,2,0],[0,2,2,0,0,2,2,0,0,0,2,2,3,3,2,2…

windows安装 MySQL5.7服务端

1,安装https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.30-winx64.zip mysql安装包。 2. 自己配置my.ini [client] port=3306 [mysql] default-character-set=utf8[mysqld] character-set-server=utf8 port=3306 basedir="D:/mysql-5.7.30-winx64/" datad…

screen命令使用说明

有些程序写的很操蛋&#xff0c;比如放到后台执行&#xff0c;但后边还需要再切回前台来重新执行&#xff0c;这个时候我们选择screen工具&#xff1a; screen -d -m -S LoginServer[6001] ./run_login_server.sh 具体的screen命令包含哪些参数&#xff0c;可以参考scree…

看这玩意复习你还会挂科?《数据结构篇》

一&#xff0e;绪论 1.何谓程序设计&#xff1f; 程序 算法 数据结构 2.数据结构的定义 是相互之间存在一种或多种特定关系的数据元素的集合 3.数据、数据元素、数据对象的概念 数据&#xff08;data&#xff09;&#xff1a;对客观事物的符号表示&#xff0c;含义很广&am…

苹果订阅服务器端开发

有时候我们想做一个苹果订阅功能,需要在苹果开发者后台添加订阅商品productid/ 订阅需要增加一个参数: password: 秘钥, 就可以了, 但是官方文档说秘钥仅仅用在自动续订上面 大家叫后台加个验证,如果苹果验证返回21004的话(21004 你提供的共享密钥和账户的共享密钥不一致)…

nginx代理配置根据ip地址来转发到不同的地址端口

最近我们在开发的某SLG游戏的某业务要做如下场景: 要求在全球各个区域访问离他最近的服务器节点:用户通过访问域名A,在服务器端解析用户来源,根据ip地址来源来转发到对应的最近的服务器节点。 由于我们之前的业务一些设计很难调整,所以我将通过代码层面来进行做转发处理,…

做了nginx反向代理之后常见问题汇总

1.客户端无缘无故的主动断开和服务器的连接&#xff0c;如图&#xff1a; 服务器端收到了FIN包&#xff0c;查看了nginx 的配置有个选项&#xff1a;proxy_timeout选项 设置为30s。 注意&#xff1a;“proxy_timeout”这个参数可以写在stream节点下&#xff0c;所有server都生效…

在GoogPlay上发布的包Facebook登录失败提示签名问题

在googplay提审的包发布后,发现Facebook登录功能异常,提示如下: 意识到可能是hashkey出问题了,但是之前测试都是好的,原来是上传包到googlePlay后有个二次签名,会修改hashkey的,所以需要在Facebook后台添加下重新签名的hashkey。 基本签名信息在Google Play 上都能查看…