1、概念
TensorBoard可以看作是一个“训练监控仪表盘”,可以
将训练过程中的数据可视化,让你通过图表直观地看到模型的表现,
识别问题,并进行调试和优化。
TensorFlow是用来训练模型的深度学习框架,在使用tensorflow训练模型时,可以通过tensorboard来对数据进行可视化,帮助优化模型。
Pytorch也是一种深度学习框架。
- TensorFlow:功能强大,但初学者可能觉得上手稍难,适合工业生产中应用
- PyTorch:语法简洁,易于理解,许多用户觉得它更友好,在学术界中非常受欢迎
(一些项目可能会在研究阶段使用 PyTorch,随后在生产环境中使用 TensorFlow)
2、如何使用TensorBoard?(代码)
(1)安装tensorflow或pytorch后,引入SummaryWriter类
SummaryWriter:用来记录数据的指标
from torch.utils.tensorboard import SummaryWriter
(2)创建SummarWriter实例及其关联文件夹
writer=SummaryWriter("logs")
logs是即将创建的文件夹名称(日志目录)
(3)记录训练过程中产生的数据
for i in range(100): writer.add_scalar("y=3x",3*i,i)
1、writer.add_scalar():记录标量数据(如损失、准确率等)并进行可视化
writer.add_scalar(tag, scalar_value, global_step=None)
tag:标签(相当于标题)
scalar_value:要记录的标量值(y轴的值)
global_step:记录的步数(x轴的值)
2、writer.add_image():记录图像数据并进行可视化
writer.add_image(tag, image, global_step=None, dataformats='CHW')
tag:标签(标题)
image:要记录的图像(torch.Tensor或numpy.array类型)
global_step:记录的步数
dataformats:数据格式(默认为 'CHW'(通道-高度-宽度),
注意要看数据的格式是不是CHW,print(img_array.shape)可以查看)
(4)关闭文件夹
writer.close()
标量数据:
from torch.utils.tensorboard import SummaryWriter
writer=SummaryWriter("logs")
for i in range(100):
writer.add_scalar("y=3x",3*i,i)
writer.close()
图像数据:
法一:先生成PIL对象,再将其转换成numpy对象,最后用add_image(第二个参数用numpy类型的)
from torch.utils.tensorboard import SummaryWriter
from PIL import Image
import numpy as np
writer=SummaryWriter("logs") #创建SummaryWriter实例对象和日志文件logs
img_path="dataset/hymenoptera_data/train/bees/359928878_b3b418c728.jpg"
img_PIL=Image.open(img_path) #生成图像的PIL对象
img_array=np.array(img_PIL) #将PIL.Image类型转为numpy.array类型
print(img_array.shape)
writer.add_image("train",img_array,5,dataformats='HWC')
writer.close()
法二:先生成PIL对象,再将其转换成tensor对象,最后用add_image(第二个参数是tensor类型的)
from torch.utils.tensorboard import SummaryWriter
from PIL import Image
from torchvision import transforms
writer=SummaryWriter("logs")
img_path=r"C:\Users\zzr\Desktop\Learning\dataset\hymenoptera_data\train\bees\16838648_415acd9e3f.jpg"
img=Image.open(img_path) #PIL.Image类型
tensor_trans=transforms.ToTensor() #生成ToTensor类的实例
img_tensor=tensor_trans(img) #把PIL.Image类型转换成torch.Tensor类型
print(img_tensor.shape)
writer.add_image("train1",img_tensor,1,dataformats='CHW')
writer.close()
3、如何查看可视化结果?
(1)在终端启动TensorBoard:
tensorboard --logdir=logs --port=6007
--logdir:指定TensorBoard日志文件的目录(就是SummarWriter创建的文件名)
--port:指定端口是6007,避免与默认的6006端口产生冲突(可以多个端口同时运行)
(为什么要在终端启动TensorBoard?
不同的执行环境:TensorBoard 通常需要在独立的进程中运行,以便持续地、实时地监控训练过程,而 Python 脚本通常是一次性执行的;
阻塞问题:在命令行中启动 TensorBoard 通常会占用一个终端窗口,但它不会阻塞整个系统。你可以在一个终端窗口中启动 TensorBoard,然后在另一个终端窗口中执行其他命令或运行训练脚本
简化管理:通过命令行启动 TensorBoard,可以更灵活地指定日志目录、端口等参数)
(2)查看结果
打开浏览器,访问 http://localhost:6007/
(3)如果因为tag未更改而与上一次的事件进行了拟合,则删除logs文件夹,重新运行生成即可。