tensorboard的使用(常用方法及可视化)
可以看到源码中对add_scalar的介绍
def add_scalar(
self,
tag,
scalar_value,
global_step=None,
walltime=None,
new_style=False,
double_precision=False,
):
"""Add scalar data to summary.
Args:
tag (string): Data identifier
scalar_value (float or string/blobname): Value to save
global_step (int): Global step value to record
walltime (float): Optional override default walltime (time.time())
with seconds after epoch of event
new_style (boolean): Whether to use new style (tensor field) or old
style (simple_value field). New style could lead to faster data loading.
Examples::
from torch.utils.tensorboard import SummaryWriter
writer = SummaryWriter()
x = range(100)
for i in x:
writer.add_scalar('y=2x', i * 2, i)
writer.close()
Expected result:
.. image:: _static/img/tensorboard/add_scalar.png
:scale: 50 %
"""
其中常用的参数是tag
,scalar_value
,global_step
tag:相当于图表的标题
scalar_value:相当于图表的纵坐标值(Y轴)
global_step:相当于图表的横坐标值(X轴)
# 导入类方法
from torch.utils.tensorboard import SummaryWriter
# 生成一个writer对象,并指定生成图片的目录,其中logs为指定生成事件的目录
writer = SummaryWriter("logs")
for i in range(100):
# 以y=x为标题,i为横坐标值,i同时也为纵坐标值,相当于绘制了一个y=x(0<=x<100)的直线
writer.add_scalar("y=x",i,i)
writer.close()
运行代码之后会生成一个指定名字的目录,并且会包含一个事件在里面,这个事件要用tensorboard打开。
tensorboard打开之后的效果如下:
点击pycharm下方的terminal窗口
输入指令tensorboard --logdir=logs
,就会自动在本地启用6006端口,但时这样会用一个问题就是,当多个人同时使用远程主机进行显示操作时,会出现端口被占用的情况,所以我们亦可以指定端口打开,可输入指令tensorboard --logdir=logs --port=6007
指定6007或其他空闲端口。
点击链接之后可以看到效果图:
可以看到源码中对add_image的介绍
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
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``.
Examples::
from torch.utils.tensorboard import SummaryWriter
import numpy as np
img = np.zeros((3, 100, 100))
img[0] = np.arange(0, 10000).reshape(100, 100) / 10000
img[1] = 1 - np.arange(0, 10000).reshape(100, 100) / 10000
img_HWC = np.zeros((100, 100, 3))
img_HWC[:, :, 0] = np.arange(0, 10000).reshape(100, 100) / 10000
img_HWC[:, :, 1] = 1 - np.arange(0, 10000).reshape(100, 100) / 10000
writer = SummaryWriter()
writer.add_image('my_image', img, 0)
# If you have non-default dimension setting, set the dataformats argument.
writer.add_image('my_image_HWC', img_HWC, 0, dataformats='HWC')
writer.close()
Expected result:
.. image:: _static/img/tensorboard/add_image.png
:scale: 50 %
"""
其中常用的参数是tag
,img_tensor
,global_step
img_tensor需要是torch.Tensor, numpy.array, or string/blobname这几种类型这里我们用ndarray来讲解,然后将图像转换成ndarray就需要用到其他模块opencv或者numpy,没有的同学可以安装一下
opencv安装指令pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple
numpy安装指令pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple
tag:相当于图表的标题
img_tensor:相当于图片对象(torch.Tensor, numpy.array, or string/blobname)
global_step:是步长
# 导入相关模块
from torch.utils.tensorboard import SummaryWriter
from PIL import Image
import numpy as np
# 生成一个writer对象
writer = SummaryWriter("logs")
image_path = r"D:\pycharm_professional\PycharmProjects\learning_pytorch\dataset\train\ants_image\0013035.jpg"
# 读取图片
img_PIL = Image.open(image_path)
# 将图片转化为ndarray类型
img_array = np.array(img_PIL)
writer.add_image("test",img_array,1, dataformats='HWC')
writer.close()
注意writer.add_image("test",img_array,1, dataformats='HWC')
中需要加上 dataformats='HWC'
其中H
代表图片高度,W
代表图片宽度,C
代表图片通道数。默认情况下的顺序是(C,H,W),但是使用np.array()转化之后顺序变成了(H,W,C),所以要将dataformat的值设为HWC。如果不这么做的话就会报错哦!说到如何查看图片对象的这个属性时,我们可以通过pycharm下方的console控制台来逐行执行,查看图片对象的相关属性或者直接print(img_array.shape)来查看。
运行代码之后会生成一个指定名字的目录,并且会包含一个事件在里面,这个事件要用tensorboard打开。
tensorboard打开之后的效果如下:
点击pycharm下方的terminal窗口
输入指令tensorboard --logdir=logs
,就会自动在本地启用6006端口,但时这样会用一个问题就是,当多个人同时使用远程主机进行显示操作时,会出现端口被占用的情况,所以我们亦可以指定端口打开,可输入指令tensorboard --logdir=logs --port=6007
指定6007或其他空闲端口。
点击链接之后可以看到效果图:
ctrl+p
和ctrl+alt
这两个组合快捷键