要注意环境变量的配置:[PyCharm | Anaconda] error importing numpy - 简书
一、Tensorboard的使用
作用:直观观察训练中给模型提供了哪些数据,或者是可以看到模型训练的每一步结果,或是观察不同阶段的显示。
(1)画图列表
from torch.utils.tensorboard import SummaryWriter
# 创建一个实例,将该实例对应的事件文件存储到logs文件夹下
writer = SummaryWriter("logs")
# writer.add_image()
# y = x
# 添加一个数,即标量 "y=x"表示数据类型,第一个i是y轴,第二个i是x轴(训练步骤数)
for i in range(100):
writer.add_scalar("y=x", i, i)
# y = 2x
# 添加一个数,即标量 "y=x"表示图名称,第一个i是y轴,第二个i是x轴(训练步骤数)
# for i in range(100):
# writer.add_scalar("y=2x", 3*i, i)
writer.close()
# 应用方法:tensorboard --logdir=logs logdir = 事件文件所在文件夹名
# 拓展:tensorboard --logdir=logs --port=6007 指定端口
# 注: writer.add_scalar("y=2x", 3*i, i) 这个代码可能使原本是y=3x的公式进入到上一个事件y=2x中(即保留了),删除logs中的文件重新运行即可
(2)插入图片
函数解析:
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()
a.获取图片格式(img_tensor的选择),可转为numpy型图片数据(opencv)
from PIL import Image
image_path = "data/train/ants_image/0013035.jpg"
img = Image.open(image_path)
#得到img ={JpegImageFile} <PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=768x512 at 0x2C3C5E68B88> 所以类型是JpegImageFile
print(type(img))
<class 'PIL.JpegImagePlugin.JpegImageFile'>
import numpy as np
img_array = np.array(img)
b.应用
from torch.utils.tensorboard import SummaryWriter
import numpy as np
from PIL import Image
# 创建一个实例,将该实例对应的事件文件存储到logs文件夹下
writer = SummaryWriter("logs")
image_path = "data/train/ants_image/0013035.jpg"
img_PIL = Image.open(image_path)
#转换图片格式为np
img_array = np.array(img_PIL)
print(type(img_array))
print(img_array.shape)
# (512, 768, 3) 通道格式为(H,W,C) dataformats='HWC'
writer.add_image("text", img_array, 1, dataformats='HWC')
# 1表示输出的是第一步的结果, 2表示输出的是第二步的结果
# 如果将text改成其他名称,那么就会在其他窗口显示结果
writer.close()
# 应用方法:tensorboard --logdir=logs logdir = 事件文件所在文件夹名
# 拓展:tensorboard --logdir=logs --port=6007 指定端口