文章目录
- 一、前置知识
- 1.Tensorboard是什么
- 2.SummaryWriter
- 3.add_scalar()
- 4.add_image()
- 二、代码
- 1.一次函数
- 2.蚂蚁和蜜蜂图片
一、前置知识
1.Tensorboard是什么
TensorBoard 是 TensorFlow 的可视化工具,它允许开发者可视化模型的图(graph)、指标(metrics)、参数分布等多种数据。TensorBoard 通过读取 TensorFlow 程序运行过程中输出的日志文件来工作,这些日志文件包含了关于模型训练、评估的详细信息。使用 TensorBoard,开发者可以更直观地理解、调试和优化他们的 TensorFlow 程序。
TensorBoard 的主要功能包括:
**图可视化:**展示 TensorFlow 计算图的结构,帮助开发者理解模型的构建。
**指标跟踪:**如损失和准确率等,在训练过程中动态地展示这些指标的变化,便于监控模型的训练进度。
**参数分布:**显示模型参数(如权重和偏置)随时间的变化情况,有助于分析模型的学习过程。
**嵌入向量:**可视化高维数据的低维表示,常用于理解词嵌入和其他类型的嵌入。
**图像和文本展示:**如果模型处理的是图像或文本数据,TensorBoard 可以直接在界面上展示这些数据及其对应的模型输出,方便进行结果分析。
2.SummaryWriter
在 PyTorch 中,使用 SummaryWriter 类来记录日志信息,以便通过 TensorBoard 进行可视化。
当创建一个 SummaryWriter 实例并指定一个目录(例如 “logs”)时,它会将所有的日志数据保存到这个目录下。这些数据包括训练过程中的损失、准确率、模型参数分布、图像、模型计算图等。
使用步骤:
#(1)导入必要的库
import torch
from torch.utils.tensorboard import SummaryWriter
#(2)创建实例
writer = SummaryWriter("logs")
#这行代码创建一个 SummaryWriter 对象,所有通过这个对象记录的日志都会被保存到当前工作目录下的 "logs" 文件夹中。如果 "logs" 文件夹不存在,它会被自动创建。
#(3)记录数据
# .....
#(4)查看TensorBoard
tensorboard --logdir=logs
#(5)关闭SummaryWriter
writer.close()
3.add_scalar()
可参考博客:
add_scalar与add_image
add_scalar() 是 PyTorch TensorBoard 的 SummaryWriter 类中的一个方法,用于记录标量数据(如损失值、准确率等)随时间的变化。
函数原型:
add_scalar(tag, scalar_value, global_step=None, walltime=None)
tag (string): 数据的标识符,用于 TensorBoard 中的显示。
scalar_value (float or string/blobname): 要记录的标量值。
global_step (int, optional): 记录标量的全局步数,通常用于表示训练过程中的时间点。提供此参数可以帮助 TensorBoard 绘制标量随时间(或训练步骤)的变化图。
walltime (float, optional): 数据点的实际时间戳,默认为 time.time() 的值。通常不需要手动设置。
个人理解:
add_scalar(标签,y轴数据,x轴数据)
4.add_image()
可参考博客:
add_scalar与add_image
add_image() 是 PyTorch TensorBoard 的 SummaryWriter 类中的一个方法,用于记录和可视化图像数据。
函数原型:
add_image(tag, img_tensor, global_step=None, walltime=None, dataformats=‘CHW’)
tag (string): 图像的标识符,用于 TensorBoard 中的显示。
img_tensor (Tensor): 要记录的图像数据。这个张量应该是 3D (C x H x W) 或者 4D (N x C x H x W),其中 N 是图像数量,C 是通道数(例如,对于彩色图像通常是 3),H 是图像高度,W 是图像宽度。
global_step (int, optional): 记录图像的全局步数,通常用于表示训练过程中的时间点。
walltime (float, optional): 数据点的实际时间戳,默认为 time.time() 的值。通常不需要手动设置。
dataformats (string): 指定图像数据的维度排列方式。默认为 ‘CHW’,但也可以是 ‘NCHW’、‘NHWC’ 等。
个人理解:
add_image(标签,图像数据,第几步,图像维度排列方式)
二、代码
1.一次函数
from torch.utils.tensorboard import SummaryWriterwriter=SummaryWriter("logs")
#y=x
#for i in range(100):#writer.add_scalar("y=x",i,i)#y=3x
for i in range(100):writer.add_scalar("y=3x",3*i,i)writer.close()
结果:
2.蚂蚁和蜜蜂图片
from torch.utils.tensorboard import SummaryWriter
from PIL import Image
import numpy as np#创建一个 SummaryWriter 对象
#所有通过这个对象记录的日志都会被保存到当前工作目录下的 "logs" 文件夹中
writer=SummaryWriter("logs")#蚂蚁的图片,作为step1
image_path1="data/train/ants_image/0013035.jpg"
#使用Pillow打开图片
image_PIL1=Image.open(image_path1)
#将PIL图像对象转换为NumPy数组
#如果图像是彩色的,转换后的 NumPy 数组将具有三个维度(高度、宽度、颜色通道),通道顺序通常为 RGB。
#如果图像是灰度的,则数组将只有两个维度(高度、宽度)
image_array1=np.array(image_PIL1)#蜜蜂的图片,作为step2
image_path2="data/train/bees_image/16838648_415acd9e3f.jpg"
image_PIL2=Image.open(image_path2)
image_array2=np.array(image_PIL2)writer.add_image("test",image_array1,1,dataformats='HWC')
writer.add_image("test",image_array2,2,dataformats='HWC')writer.close()
结果:
或者也可以这么写:
from torch.utils.tensorboard import SummaryWriter
from PIL import Image
import torchwriter = SummaryWriter("logs")image_path1 = "data/train/ants_image/0013035.jpg"
image_PIL1 = Image.open(image_path1)
#转换为PyTorch张量并调整通道顺序
image_array1 = torch.tensor(np.array(image_PIL1)).permute(2, 0, 1) image_path2 = "data/train/bees_image/16838648_415acd9e3f.jpg"
image_PIL2 = Image.open(image_path2)
# 转换为PyTorch张量并调整通道顺序
image_array2 = torch.tensor(np.array(image_PIL2)).permute(2, 0, 1) writer.add_image("test", image_array1, 1)
writer.add_image("test", image_array2, 2)writer.close()