安装包:
conda install tensorboard
Tensorboard 官方文档:https://tensorflow.google.cn/tensorboard/get_started?authuser=0
写入标量
from torch.utils.tensorboard import SummaryWriter
writer = SummaryWriter("logs") # 写入的 log 文件路径
# 函数 y = 2 * x
for i in range(100):
# 添加标量数据,tag 对应标题,scalar_value 对应 y 轴,global_step 对应 x 轴
writer.add_scalar("y=2x", 2 * i, i)
writer.close()
- 运行上面代码后,会在
"./logs"
路径下保存 log 文件 - 在虚拟环境中执行命令:
tensorboard --logdir=logs --port=6007
- 进入 tensorboard 页面
注意:如果修改了代码,但没有修改标题
- eg.
writer.add_scalar("y=2x", 3 * i, i)
,改成了 y = 3 x,但是标题仍为"y=2x"
,那么刷新 tensorboard 页面后发现图像出现了重叠(好保留了原来 y = 2 x 的曲线) - 解决办法:
- 删除 ‘./logs’ 文件夹下的旧数据,再刷新 tensorboard 页面
- 或者,修改标题
写入图像
from torch.utils.tensorboard import SummaryWriter
import numpy as np
from PIL import Image
writer = SummaryWriter("logs") # 写入的 log 文件路径
image_path = "./data/dataset/train/ants_image/24335309_c5ea483bb8.jpg"
img = Image.open(image_path)
print(type(img)) # <class 'PIL.JpegImagePlugin.JpegImageFile'>,不是 tensor or numpy 格式的
img_array = np.array(img) # 转化为 numpy
print(type(img_array)) # <class 'numpy.ndarray'>
print(img_array.shape) # [H, W, C] = (375, 500, 3)
# 添加图像数据,tag 对应标题,img_tensor 对应图像 tensor or numpy 且要求 shape = [C, H, W]
# 由于 PIL 直接转换成 numpy 后是 HWC 格式,所以需加上 dataformats="HWC"
writer.add_image("train", img_array, step=1, dataformats="HWC")
# 可以改用 opencv 的包,import cv2,cv_img = cv2.imread(img_path) 读出来就是 numpy 格式
writer.close()
上面是 step1 的输出,下面修改图像作为 step2 的输出
writer = SummaryWriter("logs")
image_path = "./data/dataset/train/bees_image/476347960_52edd72b06.jpg"
img = Image.open(image_path)
writer.add_image("train", img_array, 2, dataformats="HWC")
writer.close()
Tensorboard 查看时注意顶部切换到 IMAGE 这一栏
写入网络结构
input = torch.ones((64, 3, 32, 32))
writer = SummaryWriter("../logs_seq")
writer.add_graph(myNet, input)
writer.close()