【pytorch】TensorBoard使用

超级厉害的中文官方教程:https://pytorch.apachecn.org/#/docs/1.7/54

1、下载配置TensorBoard

官网教程的两个要安装的包

pip install torch torchvision
pip install torch_tb_profiler

目前用的多的是

from torch.utils.tensorboard import SummaryWriter

2、SummaryWriter使用

画表格:

from torch.utils.tensorboard import SummaryWriter
import numpy as np

writer = SummaryWriter()


for n_iter in range(100):
    writer.add_scalar('Loss/train', np.random.random(), n_iter)
    writer.add_scalar('Loss/test', np.random.random(), n_iter)
    writer.add_scalar('Accuracy/train', np.random.random(), n_iter)
    writer.add_scalar('Accuracy/test', np.random.random(), n_iter)


writer.close()

这部分是用了scalar功能写表格,y轴数值放的是随机值,第一个参数是表格名称,第三个参数是x轴数值,这里放的是循环。

这里writer = SummaryWriter()是实例化这个工具,括号里面是存放记录的文件夹,没写的话默认是./runs

运行的话在终端里面跑,注意要在对应的工程文件夹的终端里面跑,直接复制得到的链接到浏览器中打开

 tensorboard --logdir=logs

这里的表格名称命名好像还有格式‘Loss/train’啥的

放图:

from torch.utils.tensorboard import SummaryWriter
import numpy as np
from PIL import Image

writer=SummaryWriter('logs')
image_path="data/hymenoptera_data/train/ants/0013035.jpg"
img_PIL=Image.open(image_path)
img_array=np.array(img_PIL)

writer.add_image('test',img_array,1,dataformats='HWC')
#上面的1是step的数值,在页面上可以拖动,同名的图可以重叠,要分别展示就改名字

writer.close()

这里要注意把dataformats的格式改成HWC不然会报错

可以用tensorboard --logdir=logs --port=6007指定端口(在终端中运行,替换上面的tensorboard --logdir=logs)logs是上面指定的日志文件保存的文件夹,更换这个值可以查看不同日志文件夹里面的可视化数据。如果是在jupyter中打开的要跑到相应的工程文件夹中跑终端命令。

tensorboard会对之前所有事件进行拟合,每个事件对应Logs文件夹中的一个日志文件。

3、pytorch-profiler

import torch
import torch.nn
import torch.optim
import torch.profiler
import torch.utils.data
import torchvision.datasets
import torchvision.models
import torchvision.transforms as T

transform = T.Compose(
    [T.Resize(224),
    T.ToTensor(),
    T.Normalize((0.5,0.5,0.5),(0.5,0.5,0.5))])
train_set = torchvision.datasets.CIFAR10(root='./data',train=True,
                                        download=True,transform=transform)
train_loader = torch.utils.data.DataLoader(train_set,batch_size=32,shuffle=True)

device=torch.device("cuda:0")
model=torchvision.models.resnet18(pretrained=True).cuda(device)
criterion=torch.nn.CrossEntropyLoss().cuda(device)
optimizer=torch.optim.SGD(model.parameters(),lr=0.01,momentum=0.9)


def train(data):
    inputs, labels = data[0].to(device=device), data[1].to(device=device)
    outputs = model(inputs)
    loss = criterion(outputs, labels)
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()

上面是模型的搭建,下面是添加profiler和训练

with torch.profiler.profile(
        schedule=torch.profiler.schedule(wait=1, warmup=1, active=3, repeat=2),
        on_trace_ready=torch.profiler.tensorboard_trace_handler('./log/resnet18'),
        record_shapes=True,
        with_stack=True
) as prof:
    for step, batch_data in enumerate(train_loader):
        if step >= (1 + 1 + 3) * 2:
            break
        print(step)
        train(batch_data)
        prof.step()  # Need to call this at the end of each step to notify profiler of steps' boundary.

用一样的方式就可以在TensorBoard中打开

tensorboard --logdir=log

这里好像是跑完一次数据集,我在程序里面看了step发现只有两次循环,但是界面里面有2,3,4的step,好像上面的设置是跳过了第一个step

后面又跑了一个10epoch的训练,还是只有三个step,不知道怎么整

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值