tensorboard简介
TensorBoard 是一组用于数据可视化的工具。它包含在流行的开源机器学习库 Tensorflow 中.但是也可以独立安装,服务Pytorch等其他的框架
可以常常用来观察训练过程中每一阶段如何输出的
-
安装
pip install tensorboard
-
启动
pythontensorboard --logdir=<directory_name>
会默认在6006端口打开,也可以自行制定窗口,如:
pythontensorboard --logdir=logs --port=6007
用法
-
所在类:
pythonfrom torch.utils.tensorboard import SummaryWriter
介绍:
pythonclass SummaryWriter: """Writes entries directly to event files in the log_dir to be consumed by TensorBoard. The `SummaryWriter` class provides a high-level API to create an event file in a given directory and add summaries and events to it. The class updates the file contents asynchronously. This allows a training program to call methods to add data to the file directly from the training loop, without slowing down training. """
-
创建对象
pythonwriter = SummaryWriter('logs') # 说明写入哪个文件夹
-
常用方法
pythonwriter.add_image() # 图像方式 writer.add_scalar() # 坐标方式 writer.close() # 使用完之后需要close
add_scalar()
python
def add_scalar(self,tag,scalar_value,global_step=None,walltime=None,new_style=False,double_precision=False,):
"""Add scalar data to summary.
添加标量数据到summary中
Args:
tag (str): Data identifier 图表标题
scalar_value (float or string/blobname): Value to save 数值(y轴)
global_step (int): Global step value to record 训练到多少步(x轴)
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 %
"""
注意:向writer中写入新事件的同时她也会保留上一个事件,这就会导致一些拟合出现问题
解决:删除之前的log文件,重新生成
add_image()
python
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 (str): Data identifier
img_tensor (torch.Tensor, numpy.ndarray, 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 (str): 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``.
"""
实践
如在tensorboard中展示图片:
python
from torch.utils.tensorboard import SummaryWriter
import numpy as np
from PIL import Image
writer = SummaryWriter('logs')
image_path = './dataset2/train/ants_image/0013035.jpg'
img_PIL = Image.open(image_path)
img_array = np.array(img_PIL)
print(type(img_array))
print(img_array.shape)
writer.add_image("test",img_array,1,dataformats='HWC') # 展示读取的图片
for i in range(100):
writer.add_scalar('y=2x', 3*i, i) # 绘图
writer.close()
-
writer.add_image中的参数
pythondef add_image( self, tag, img_tensor, global_step=None, walltime=None, dataformats="CHW" ):
名称、图形向量(ndarray类型),第几步(是滑动翻页那种的,这里相当于设定是第几页,每次向后设定时不会清除原来的数据)
当前代码效果如图:
修改图片后:
python
from torch.utils.tensorboard import SummaryWriter
import numpy as np
from PIL import Image
writer = SummaryWriter('logs')
image_path = './dataset2/train/ants_image/5650366_e22b7e1065.jpg'
img_PIL = Image.open(image_path)
img_array = np.array(img_PIL)
print(type(img_array))
print(img_array.shape)
# 这里更新,说明为第二步
writer.add_image("test",img_array,2,dataformats='HWC')
for i in range(100):
writer.add_scalar('y=2x', 3*i, i)
writer.close()
拖拉就会发现有两张图