Pytorch个人学习记录总结 02

目录

Tensorboard


Tensorboard

启动tensorboard服务

cd 到 logs 目录所在的同级目录,在命令行输入如下命令,logdir等式右边可以是相对路径或绝对路径。

tensorboard --logdir=logs --port 6006
#如果是Windows环境,要注意路径解析,如
#tensorboard --logdir=r'D:\myboard\test\logs' --port 6006

SummaryWriter类from torch.utils.tensorboard import SummaryWriter(摘要编写器) 

如果调用SummaryWriter类没有传入log_dir参数的话,会默认在当前目录下新建一个runs文件夹用于存放训练过程中的event事件文件。

使用自动生成的文件夹名称runs创建SummaryWriter()。

writer = SummaryWriter()
# folder location: runs/May04_22-14-54_s-MacBook-Pro.local/

使用指定的文件夹名称my_experiment创建SummaryWriter()。

writer = SummaryWriter("my_experiment")
# folder location: my_experiment

创建一个附加注释的SummaryWriter()。

writer = SummaryWriter(comment="LR_0.1_BATCH_16")
# folder location: runs/May04_22-14-54_s-MacBook-Pro.localLR_0.1_BATCH_16/

writer.add_image(tag, tensor, step) # 添加图像(模型图像,观察训练结果)


writer.add_scalar(tag, tensor, step) # 添加标量(就是一些数据的变化曲线,比如loss)


writer.add_graph(model, input) # 查看模型计算图

writer.close()关闭

打开tensorboard观察图表的方式:在pycharm的终端Terminal中键入tensorboard --logdir=logs --port=6007(最后指定端口的操作是可选的,这里指定端口是为了避免:当前有多人在使用同一个服务器的默认端口进行训练而造成的拥塞


注意:
1)当前面3步运行完之后,再通过第4步指定event文件的存放路径,将event文件们显示进行观察。


2)如果同一logdir下存放了多个相同tag的event文件,则绘图时会发生混乱。解决方案:将此logdir下的文件全部删除,然后重新运行。or构建子文件夹,也就是说创建新的SummaryWriter(‘新文件夹’)
 

运用writer.add_image()。由上节 P8 可知,add_image能处理的图像数据类型是:torch.Tensor、numpy.array、String。
IL.Image 读取的数据类型是PIL.JpegImagePlugin.JpegImageFile,所以需要转换成 numpy.array 才可放进 add_image 中使用。
 

利用numpy.array() 将 PIL 转为 numpy.ndarray

from PIL import Image
image_path = 'hymenoptera_data/train/ants/0013035.jpg'
img = Image.open(image_path)
print(type(img))	# <class 'PIL.JpegImagePlugin.JpegImageFile'>

import numpy as np
img_array = np.array(img)	
print(type(img_array))	# <class 'numpy.ndarray'>

img_tensor的默认shape是(3, H, W)


如果要使用其他的shape,则需要通过dataformats来指明一下,即:dataformats=‘CHW’、dataformats=‘HWC’、dataformats=‘HW’


通过将PIL转换为numpy后,虽然满足了img_tensor的数据类型要求,但是没有满足img_tensor的默认shape要求。

因为转换后的numpy的shape是(H,W,C),也就是说channel=3在最后一维,所以还需要在add_image()中添加参数dataformats=(H,W,C)(或者手动调整一下维度,代码为img_array = img_array.transepose(2, 0, 1),然后就不用添加dataformats参数了)。
 

from torch.utils.tensorboard import SummaryWriter
from PIL import Image
import numpy as np

writer = SummaryWriter('logs_3')  # 实例化一个SummaryWriter为writer,并指定event的保存路径为logs

image_path1 = 'hymenoptera_data/train/ants/0013035.jpg'
image_path2 = 'hymenoptera_data/train/bees/16838648_415acd9e3f.jpg'

img = Image.open(image_path2)	# image_path1
img_array = np.array(img)
print(type(img))  # <class 'PIL.JpegImagePlugin.JpegImageFile'>
print(type(img_array))  # <class 'numpy.ndarray'>
print(img_array.shape)

# 这里的add_image中的tag为'test_image'没有变化,所以在tensorboard中可通过拖动滑块来展示这两张图像
# writer.add_image('test_image', img_array, 1, dataformats='HWC')
writer.add_image('test_image', img_array, 2, dataformats='HWC')

for i in range(10):	# 这个add_scalar暂时没有管它,虽然tag没有变,但是因为每次写入的数据都是y=3x所以曲线没有显示混乱
    writer.add_scalar('y=3x', 3 * i, i)

writer.close()  # 最后还需要将这个writer关闭

猜你喜欢

转载自blog.csdn.net/timberman666/article/details/131842745
今日推荐