tensorboard是个可视化工具,用于观察神经网络训练过程
SummaryWriter:
首先需要创建一个SummaryWriter示例
其中有些参数不常用,我们可以只在参数里写上一个训练保存的路径即可
例:writer=SummaryWriter('logs')
我们在SummaryWriter中常用的方法有:
1. add_scalar
2. add_image
add_scalar(tag, scalar_value, global_step=None, walltime=None)
tag (string): 数据名称,不同名称的数据使用不同曲线展示
scalar_value (float): 数字常量值
global_step (int, optional): 训练的 step
walltime (float, optional): 记录发生的时间,默认为 time.time()
例:
创建一个y=x的图像
from torch.utils.tensorboard import SummaryWriter
import numpy as np
writer=SummaryWriter('logs')
for i in range(100):
writer.add_scalar("y=x",i,i)
writer.close()
打开Anaconda Prompt或者直接在Pycharm中下方的Terminal
先激活PyTorch环境,如果在Terminal中会直接激活,输入tensorboard --logdir=logs
注意:logdir后面是事件文件所在文件夹名
打开Anaconda Prompt或者直接在Pycharm中下方的Terminal
先激活PyTorch环境,如果在Terminal中会直接激活,输入 tensorboard --logdir=logs --port=6007
若是一个tag训练了多次就会出现多次训练的图像相对拟合的结果
例:如果我在原有的y=x图像中又画出y=2x,就会出现如下的情况
解决方法:
1.换个tag
2.在pycharm左侧中删除对应的logs文件,重新训练y=2x
add_image(tag, img_tensor, global_step=None, walltime=None, dataformats='CHW')
tag (string): 数据名称
img_tensor (torch.Tensor / numpy.array): 图像数据
global_step (int, optional): 训练的 step
walltime (float, optional): 记录发生的时间,默认为 time.time()
dataformats (string, optional): 图像数据的格式,默认为 'CHW',即 Channel x Height x Width,还可以
是'CHW'、'HWC' 或 'HW' 等
在上图,img_tensor要求是torch.Tensor, numpy.array, or string/blobname
类型
所以利用刚学的numpy
from torch.utils.tensorboard import SummaryWriter
import numpy as np
from PIL import Image
writer=SummaryWriter('logs')
image_path="dataset/train/ants/0013035.jpg"
image=Image.open(image_path)
img_array=np.array(image)
writer.add_image('test',img_array,1)
writer.close()
然后运行可能会报错,是因为图像数据的格式可能不同
print(img_array.shape)
利用shape查看,判断出图片格式是’HWC’的
然后我们在add_image中加入dataformats即可
from torch.utils.tensorboard import SummaryWriter
import numpy as np
from PIL import Image
writer=SummaryWriter('logs')
image_path="dataset/train/ants/0013035.jpg"
image=Image.open(image_path)
img_array=np.array(image)
writer.add_image('test',img_array,1,dataformats='HWC')
writer.close()
打开事件文件我们会发现在左上角多了一个IMAGES,里面就是我们输入的图片