IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> pytorch 笔记:tensorboardX -> 正文阅读

[人工智能]pytorch 笔记:tensorboardX

1 SummaryWriter

1.1 创建

首先,需要创建一个 SummaryWriter 的示例:

from tensorboardX import SummaryWriter

#以下是三种不同的初始化 SummaryWriter 的方法

writer1 = SummaryWriter('runs/exp')
#提供一个路径,将使用该路径来保存日志

writer2 = SummaryWriter()
#无参数,默认将使用 runs/日期时间 路径来保存日志

writer3 = SummaryWriter(comment='resnet')
#提供一个 comment 参数,将使用 runs/日期时间-comment 路径来保存日志

????????一般来讲,我们对于每次实验新建一个路径不同的 SummaryWriter,叫作一个 run,如 runs/exp1、runs/exp2。

1.2?可视化

????????接下来,我们就可以调用 SummaryWriter 实例的各种 add_something 方法向日志中写入不同类型的数据了。想要在浏览器中查看可视化这些数据,只要在命令行中开启 tensorboard 即可:

tensorboard --logdir=<your_log_dir>

????????其中的 <your_log_dir> 可以是单个 run 的路径,如上面 writer1 生成的 runs/exp;

???????? <your_log_dir> 也可以是多个 run 的父目录,如??runs/?下面可能会有很多的子文件夹,每个文件夹都代表了一次实验,我们令?--logdir=runs/?,就可以在 tensorboard 可视化界面中方便地横向比较?runs/?下不同次实验所得数据的差异。

2 使用add 记录数据

2.1 添加数字 add_scalar

记录数字常量。

2.1.1 基本使用方法

add_scalar(
    tag, 
    scalar_value, 
    global_step=None, 
    walltime=None)

2.1.2 参数介绍

tag?(string)数据名称,不同名称的数据使用不同曲线展示
scalar_value?(float)数字常量值
global_step?(int, optional)训练的 step
walltime?(float, optional)记录发生的时间,默认为?time.time()

2.1.3 举例

from tensorboardX import SummaryWriter
writer = SummaryWriter('runs/scalar_example')
for i in range(10):
    writer.add_scalar('quadratic', i**2, global_step=i)
    writer.add_scalar('exponential', 2**i, global_step=1)

首先,在对应的路径出现了scalar_example 文件夹

?????????然后可视化之(这里我已经cd到runs的路径上了,所以使用的是相对路径。当然绝对路径也是可以的)

tensorboard --logdir=scalar_example

? ? ? ? 会出来一行这个:

Serving TensorBoard on localhost; to expose to the network, use a proxy or pass --bind_all
TensorBoard 2.7.0 at http://localhost:6006/ (Press CTRL+C to quit)

2.1.4 多个?writer

from tensorboardX import SummaryWriter
writer = SummaryWriter('runs/example_test/scalar_example')
for i in range(10):
    writer.add_scalar('quadratic', i**2, global_step=i)
    writer.add_scalar('exponential', 2**i, global_step=i)
writer1 = SummaryWriter('runs/example_test/scalar_example1')
for i in range(10):
    writer1.add_scalar('quadratic', i**3, global_step=i)
    writer1.add_scalar('exponential', 3**i, global_step=i)

?2.1.5 add_scalar注意事项

????????这里的 scalar_value 一定是 float 类型。

????????如果是 PyTorch scalar tensor,则需要调用 .item() 方法获取其数值。

????????我们一般会使用 add_scalar 方法来记录训练过程的 loss、accuracy、learning rate 等数值的变化,直观地监控训练过程。
?

2.2 add_histogram 添加直方图

2.2.1 使用方法

add_histogram(
    tag, 
    values, 
    global_step=None, 
    bins='tensorflow', 
    walltime=None, 
    max_bins=None)

2.2.2 参数说明

tag?(string)?数据名称
values?(torch.Tensor, numpy.array, or string):用来构建直方图的数据
global_step?(int, optional)训练的 step
bins?(string, optional)

?该参数决定了分桶的方式

具体见:numpy.histogram_bin_edges — NumPy v1.21 Manual

walltime?(float, optional)记录发生的时间,默认为?time.time()
max_bins?(int, optional)最大分桶数

2.2.3 使用举例

from tensorboardX import SummaryWriter

writer = SummaryWriter('runs/embedding_example2')

writer.add_histogram(
    'normal_centered5', 
    np.random.normal(0, 1, 1000), 
    global_step=1,
    max_bins=100)
writer.add_histogram(
    'normal_centered5', 
    np.random.normal(0, 2, 1000), 
    global_step=1,
    max_bins=100)
writer.add_histogram(
    'normal_centered5', 
    np.random.normal(0, 3, 1000), 
    global_step=1,
    max_bins=100)

writer.add_histogram(
    'normal_centered6', 
    np.random.normal(0, 1, 1000), 
    global_step=1,
    max_bins=100)
writer.add_histogram(
    'normal_centered6', 
    np.random.normal(0, 2, 1000), 
    global_step=5,
    max_bins=100)
writer.add_histogram(
    'normal_centered6', 
    np.random.normal(0, 3, 1000), 
    global_step=10,
    max_bins=100)

在tensorboard的histograms里面有:(但我并没有弄明白这时候的global_step有什么作用。。。望评论区赐教)、

overlay

【global_step=1,1,1? VS global_step=1,5,10】

?offset

【global_step=1,1,1? VS global_step=1,5,10】

?2.3? add_graph 添加图

?使用?add_graph?方法来可视化一个神经j

2.3.1 基本使用方法

add_graph(
    model, 
    input_to_model=None, 
    verbose=False, 
    **kwargs)

?2.3.2 参数使用说明

model?(torch.nn.Module):待可视化的网络模型
input_to_model?(torch.Tensor or list of torch.Tensor, optional)?待输入神经网络的变量或一组变量

2.3.3 使用举例?

pytorch笔记:VGG 16_UQI-LIUWJ的博客-CSDN博客

import torch, torchvision
 
model = torchvision.models.vgg16()

writer=SummaryWriter('graph')
writer.add_graph(model,torch.ones((1,3, 224, 224)))

?展开之后是

?随便点开一个block:

?

?2.4 add_embedding?

使用?add_embedding?方法可以在二维或三维空间可视化 embedding 向量。

2.4.1 使用方法

add_embedding(
    mat, 
    metadata=None, 
    label_img=None, 
    global_step=None, 
    tag='default', 
    metadata_header=None)

2.4.2 参数说明

mat?(torch.Tensor or numpy.array)一个矩阵,每行代表特征空间的一个数据点
metadata?(list or torch.Tensor or numpy.array, optional)一个一维列表,mat 中每行数据的 label,大小应和 mat 行数相同
global_step?(int, optional)训练的 step
label_img?(torch.Tensor, optional)一个形如 NxCxHxW 的张量,对应 mat 每一行数据显示出的图像,N 应和 mat 行数相同
tag?(string, optional)数据名称,不同名称的数据将分别展示

2.4.3 举例

from tensorboardX import SummaryWriter
import torchvision

writer = SummaryWriter('runs/embedding_example')
mnist = torchvision.datasets.MNIST('mnist', download=True)
writer.add_embedding(
    mnist.train_data.reshape((-1, 28 * 28))[:100,:],
    #每一行是一个数据,前100个数据
    metadata=mnist.train_labels[:100],
    label_img = mnist.train_data[:100,:,:].reshape((-1, 1, 28, 28)).float() / 255,
    global_step=0
)

?

?

2.4.4 作用

????????add_embedding 是一个很实用的方法,不仅可以将高维特征使用PCA、t-SNE等方法降维至二维平面或三维空间显示,还可观察每一个数据点在降维前的特征空间的K近邻情况。

? ? ? ? 上面的例子中我们取 MNIST 训练集中的 100 个数据,将图像展成一维向量直接作为 embedding,使用 TensorboardX 可视化出来。

2.4.5 注意事项

add_embedding?方法需要注意的几点:

  • mat?是二维 NxM,metadata?是一维 N,label_img?是四维 NxCxHxW!
  • label_img?记得归一化为 0-1 之间的 float 值

参考资料:

详解PyTorch项目使用TensorboardX进行训练可视化_浅度寺-CSDN博客_tensorboardx

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-11-27 09:54:11  更:2021-11-27 09:54:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 3:59:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码