from torch.utils.tensorboard import SummaryWriter
import os
import torch
log_dir = rf'./logs_{grade}'
if not os.path.exists(log_dir):
os.mkdir(log_dir)
else:
print(f'{log_dir} exist')
tb_writer = SummaryWriter(log_dir= f'{log_dir}/batch_{batch_size}_lr_{learning_rate}_wd_{weight_decay}_gamma_{gamma}') # 保存日志到 logs/lr_1e-4_batch_16/ 下
add_scalar()
tb_writer.add_scalar('train/loss', train_loss, epoch)
tb_writer.add_scalar('train/acc', train_acc, epoch)
tb_writer.add_scalar('val/loss', val_loss, epoch)
tb_writer.add_scalar('val/acc', val_acc, epoch)
tb_writer.add_scalar('learning_rate', optimizer.param_groups[0]["lr"], epoch)
解释一下:最后会产生train,val和learning_rate三栏,第一栏里面有两个figure分别是loss和acc,第二栏有两个figure,第三栏有一个figure
add_scales()
tb_writer.add_scalars('loss/',{'train':train_loss,'validate':val_loss},epoch)
tb_writer.add_scalars('accuracy/',{'train':train_acc,'validate':val_acc},epoch)
tb_writer.add_scalar('learning_rate',optimizer.param_groups[0]["lr"],epoch)
解释一下:最后会产生loss,accuracy和learning-rate三栏,每一栏只有一个figure,表示不同的阶段。学习率还是一个参数,只有前两个是两个参数。注意,重要的事情说三遍:想要多个参数一定是add_scales
!!!加s,加s,加s!!!然后后面使用字典形式列出需要可视化的参数!!!
OK,截止目前我用只用到这些,其实tensorboard还有其他的功能,如保存模型中间生成的figure等,可以通过这个来检查模型的有效性,但是呢,我还没有看,其实因为我还没试用,但是看效果是OK的。我也付一下test代码,你们用的话自取。
from PIL import Image
import numpy as np
writer = SummaryWriter(log_dir= f'{log_dir}/lr_1e-4_batch_18')
img_HWC = np.array(Image.open('train_valid/image/1.png').convert('RGB')) # 彩色图
img_HW = np.array(Image.open('train_valid/image/1.png').convert('L')) # 灰度图
# If you have non-default dimension setting, set the dataformats argument.
for i in range(5):
writer.add_image('my_image_HWC', img_HWC, i, dataformats='HWC')
writer.add_image('my_image_HW', img_HW, i, dataformats='HW')
writer.close()
注:保存图片支持numpy和tensor,不支持PIL的image,需要转换!RGB和灰度图是add的时候dataformat是不同的!
from PIL import Image
import numpy as np
writer = SummaryWriter(log_dir= f'{log_dir}/lr_1e-4_batch_18')
img_batch = np.zeros((5, 584, 565,3))
label_batch = np.zeros((5, 1, 584, 565))
for ind,i in enumerate(os.listdir('train_valid/image/')[0:5]):
image = np.array(Image.open(fr'train_valid/image/{i}'))
label = np.array(Image.open(fr'train_valid/mask/{i}').convert('L'))
img_batch[ind,:,:,:] = image
label_batch[ind,0,:,:] = label
print(label_batch.shape)
# If you have non-default dimension setting, set the dataformats argument.
writer.add_images('batch/image', img_batch, 0, dataformats='NHWC') # 彩色batch
writer.add_images('batch/label', label_batch,0, dataformats='NCHW') # 灰度batch 必须是NCHW
writer.close()
注:可以保存一个batch的图片!保存RGB和灰度图的时候dataformat是不同的!
如果是:
昨天太仓促,忘记写怎么查看可视化这些log文件呢?
linux:tensorboard --logdir='logs_dir'
windows:tensorboard.exe --logdir='logs_dir'
(其中的logs_dir是上面创建的文件夹name)