超级厉害的中文官方教程:https://pytorch.apachecn.org/#/docs/1.7/54
官网教程的两个要安装的包
pip install torch torchvision
pip install torch_tb_profiler
目前用的多的是
from torch.utils.tensorboard import 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文件夹中的一个日志文件。
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,不知道怎么整