tensorboard数据可视化


环境:Anaconda3-2020.11-Windows-x86_64,conda虚拟环境:Python 3.6.8+torch 1.5.1

写入数据

写入标量

import torch
from torch.utils.tensorboard import SummaryWriter
import random
import os

# 这个函数在当前代码目录下创建一个runs文件夹,并在runs内部创建run1、run2...的文件夹,记录每次代码运行生成的数据
# 第一次运行创建runs,再创建run1
def get_next_run_folder():
    runs_folder = 'runs'
    if not os.path.exists(runs_folder):
        os.makedirs(runs_folder)
        return os.path.join(runs_folder, 'run1')
    existing_runs = [d for d in os.listdir(runs_folder) if os.path.isdir(os.path.join(runs_folder, d)) and d.startswith('run')]
    if not existing_runs:
        return os.path.join(runs_folder, 'run1')
    last_run_number = max(int(run.split('run')[1]) for run in existing_runs)
    return os.path.join(runs_folder, f'run{last_run_number + 1}')

log_dir = get_next_run_folder()
writer = SummaryWriter(log_dir)

for i in range(100):
    # 写入数据,data1表示数据标签,random.randint(0,20)表示纵坐标值, global_step=i表示横坐标值
    writer.add_scalar('data', random.randint(0,20), global_step=i) 

writer.close()

由于torch安装在conda 虚拟环境中,首先激活虚拟环境,然后运行以下代码

tensorboard --logdir=data_path
# 端口号默认为6006,如果要在其他端口查看数据,需要在后面指定端口号
# 理论上可以是从 1 到 65535 之间的任何未被占用的端口。但一些常见的端口(如 80 # 用于 HTTP、443 用于 HTTPS 等)可能已经被其他服务占用,
# 所以通常选择一个较大的、不太可能被占用的数字作为端口号。
tensorboard --logdir=data_path --port=6005

data_path是数据所在路径,这里是E:\ju\runs
在这里插入图片描述

网页打开结果如下,图中共三组数据:
在这里插入图片描述
在这里插入图片描述

如果要写入多组不同的数据,for循环添加代码即可,注意用不同的标签

for i in range(100):
    # 写入数据,data1表示数据标签,random.randint(0,20)表示纵坐标值, global_step=i表示横坐标值
    writer.add_scalar('data1', random.randint(0,20), global_step=i) 
    writer.add_scalar('data2', random.randint(0,20), global_step=i)

结果如下,图中共两组数据:
在这里插入图片描述

写入向量

修改for循环的代码

for i in range(100):
    # 写入数据,data1表示数据标签,random.randint(0,20)表示纵坐标值, global_step=i表示横坐标值
    writer.add_scalars('vector_data1', {'data1': random.randint(0,20), 
    									'data2': random.randint(0,20),
                                       'data3': random.randint(0,20)}, global_step=i)
writer.close()

写入多个标量只生成一个数据文件,但是写入向量则创建了三个文件夹存储数据,但都是在一个图中呈现数据。
写入多组向量的情况也是直接在for循环添加代码即可,但是要注意用不同的数据标签区分。
在这里插入图片描述
在这里插入图片描述

遇到的问题

当一个文件夹下生成两个或多个events文件的情况时,画出来的曲线就会出现下图的连线,这是由于没有将每次生成的events文件放进独立的文件夹导致的。
在这里插入图片描述
在这里插入图片描述
需要新建两个文件夹,分别存放一个events文件。
但更好的办法是从代码入手,将每次运行生成的events文件放到独立的文件夹中。

导出数据

先勾选左上角的Show data download links
在这里插入图片描述
右下角会出现数据导出的选项,选中需要的数据,点击CSV或JSON就能导出
在这里插入图片描述

可视化神经网络结构

运行以下代码,打印神经网络结构

import torch
import torch.nn as nn
from torch.utils.tensorboard import SummaryWriter

class MyNetwork(nn.Module):
    def __init__(self, input_size, hidden_size, output_size):
        super(MyNetwork, self).__init__()
        self.linear = nn.Linear(input_size, hidden_size)
        self.lstm = nn.LSTM(hidden_size, hidden_size, batch_first=True)
        self.output_layer = nn.Linear(hidden_size, output_size)

    def forward(self, x):
        out = self.linear(x)
        out, _ = self.lstm(out.unsqueeze(0))
        out = self.output_layer(out.squeeze(0))
        return out

# 实例化
net = MyNetwork(input_size=10, hidden_size=20, output_size=5)
print(net)

但是只是文本的格式
在这里插入图片描述
tensorboard中能够可视化神经网络,在上面的代码中加上以下代码

writer = SummaryWriter()
writer.add_graph(net, torch.randn(32, 10).squeeze(dim=1))
writer.close()

同样地,用tensorboard --logdir=data_path命令查看,这里不再赘述,打开如下
在这里插入图片描述
共三个模块,双击可以查看各个模块的内部结构,MyNetwork模块的结构如下
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值