TensorBoard是tensorflow官方推出的可视化工具,它可以将模型训练过程中的各种汇总数据展示出来,包括标量(Scalars)、图片(Images)、音频(Audio)、计算图(Graphs)、数据分布(Distributions)、直方图(Histograms)和潜入向量(Embeddigngs)。
对于tensorBoard的安装可以使用pip install进行安装,这里百度就能直接找到方法,因此不再赘述。
我们这里主要使用tensorBoard的SummaryWriter方法,因此,我们这边导入的时候理论上使用命令:
from torch.utils.tensorboard import SummaryWriter
但是我在实际使用过程中,编译器给我报了个错误,因此这里给他修改为了
from torch.utils.tensorboard import *
对于函数形数据,我们可以通过数据数据和输出数据来给定一个函数图像。
在这之前,我们需要先出实话SummaryWriter对象。
在调用构造方法时,我们根据官方文档来进行设计。
首先,__init__方法需要传入一个log_dir作为参数,这个log_dir是我们python运行环境下的一个目录,这个目录用于持久化存储我们的日志数据和文件,如果我们删除了这个目录和文件,那么我们在可视化数据阅读时,将会无法得到我们想要的数据。
其中,add_scalar用于进行我们函数图像的绘制。因此,在这里,我们通过add_scalar方法进行图像的绘制。
add_scalar的第一个参数是我们给这个函数图像打上的一个标签,第二个参数是我们y轴的数据,而第三个参数是我们x轴的数据。
我们的代码编写如下:
writer = SummaryWriter("logs");
for i in range(-500,500):
writer.add_scalar("y=x*x",i*i,i)
for i in range(-500,500):
writer.add_scalar("y=x*x*x",i*i*i,i)
writer.close()
运行代码后,我们的logs目录下,将会出现一个文件,这个文件我们无法直接阅读
因此,我们在该目录输入tensorboard --logdir="logs"命令来进行数据可视化的操作。
我们打开浏览器访问本机的6006端口。
我们能够特别直观的看到系统中出现了两条函数图像,分别是二次函数和三次函数。
对于更高次的函数图像,我们也可以使用循环进行生成。
writer = SummaryWriter("logs");
for t in range(2,10):
for i in range(-500,500):
writer.add_scalar("y="+("x*"*t)[:-1],i**t,i)
writer.close()
对于图片类数据的处理,我们参考我们之前的一篇文章我们通过getitem方法能够获得一个PIL类型的图像文件,那么通过tensorBoard的add_image方法就能将其添加到我们的数据集中。
根据官方文档描述,我们需要定义图片文件的标签、图片资源的格式,这里推荐我们使用的格式为torch.Tensor、numpy.array、string/blobname格式的Images数据。
同时,我们还要阐述图片的shape信息,通过HWC或者CHW来传递,其中H代表高,W代表宽。这是一个三维信息。
代码如下:
ants_label_dir = "ants"
bees_label_dir = "bees"
ants_dataset = MyData(root_dir,ants_label_dir)
bees_dataset = MyData(root_dir,bees_label_dir)
img_PIL = ants_dataset[5][0]
writer = SummaryWriter("logs");
img_array = numpy.array(img_PIL)
writer.add_image("ants",img_array,1,dataformats="HWC")
writer.close()
直接通过TensorBoard获得Images的数据。,并可以通过add_image的第三个参数来设置Step步骤。