实例化一个SummaryWrite类:TensorBoard是什么?
TensorBoard是Tensorflow的可视化工具,提供机器学习实验所需的功能和工具,例如可以跟踪和可视化损失集准确率等指标;可视化模型图(包括操作和层);可以查看权重、偏差或者其他张量随时间的变化的直方图;可以显示图片、文字和音频数据、剖析TensorFlow程序等等
我们要使用TensorBoard首先先认识一个SummaryWrite的类,该类可以在指定文件夹生成一个事件文件,这个事件文件可以对TensorBoard解析。
如何打开TensorBoard:我们在终端进行打开,输入以下代码:
tensorboard --logdir="事件文件夹所在位置" #在写的时候不加""
打开后,就可以在 http://localhost:6006/看到可视化界面。
我们要实际的去完成一个图像的操作,首先要实例化SummaryWrite类,生成一个新的事件文件
from torch.utils.tensorboard import SummaryWriter
#logs为事件文件夹
writer = SummaryWriter("logs")
使用TensorBoard可视化一个图片:ps(该路径为相对路径)
#图片所在路径
image_path = "data/train/ants_image/6743948_2b8c096dda.jpg"
在具体去操作一个数据集之前,我们先要了解一个python库PIL(Python Imaging Library),是 Python 平台一个功能非常强大而且简单易用的图像处理库。在这里我们使用到一个打开图像的功能。
img_PIL = Image.open(image_path)
由于我们使用的Summarywrite中的img函数,该函数限制只能使用某些固定类型,官方解释如下
def add_image(
self, tag, img_tensor, global_step=None, walltime=None, dataformats="CHW"
):
"""Add image data to summary.
Note that this requires the ``pillow`` package.
Args:
tag (string): Data identifier
img_tensor (torch.Tensor, numpy.array, or string/blobname): Image data
global_step (int): Global step value to record
walltime (float): Optional override default walltime (time.time())
seconds after epoch of event
dataformats (string): Image data format specification of the form
CHW, HWC, HW, WH, etc.
Shape:
img_tensor: Default is :math:`(3, H, W)`. You can use ``torchvision.utils.make_grid()`` to
convert a batch of tensor into 3xHxW format or call ``add_images`` and let us do the job.
Tensor with :math:`(1, H, W)`, :math:`(H, W)`, :math:`(H, W, 3)` is also suitable as long as
corresponding ``dataformats`` argument is passed, e.g. ``CHW``, ``HWC``, ``HW``.
使用如下代码,将jpeg格式的tupian改成numpy类型:
img_array = np.array(img_PIL)
剩下的就是显示一张图片:
#在TensorBoard中写入
writer.add_image("train", img_array, 2, dataformats='HWC')
#关闭
writer.close()
在此处如果不修改datafirmats=“HWC”程序运行会报错,因为图片的shape要和我们的参数一致,HWC分别是高宽和通道数。
完整代码如下:
from torch.utils.tensorboard import SummaryWriter
import numpy as np
from PIL import Image
#logs为事件文件夹
writer = SummaryWriter("logs")
#图片所在路径
image_path = "data/train/ants_image/6743948_2b8c096dda.jpg"
#使用PIL库操作图片
img_PIL = Image.open(image_path)
#img_tensor的类别只能是torch.Tensor, numpy.array
#修改图片的格式为numpy类型
img_array = np.array(img_PIL)
print(type(img_array))
print(img_array.shape)
#在TensorBoard中写入
writer.add_image("train", img_array, 2, dataformats='HWC')
#关闭
writer.close()