from torch.utils.tensorboard import SummaryWriter
参数详解:
log_dir:输入文件夹的名称(string)。如果为None,默认位置为:runs/**CURRENT_DATETIME_HOSTNAME**
其他不常用参数:comment, purge_step, max_queue, flush_secs, fliename_suffix. 具体用处可以在pycharm中ctrl+单击SummaryWriter查看。
tag(string): Data的指定方式,图表的标题
scalar(float or string/blobname): 需要存储的数值
global_step(int): 训练的步数(Global step value to record),结合scalar,那就是训练到多少步的时候scalar的数值是多少。
walltime(float): (不常用参数,可选)Optional override default walltime(time.time()) with seconds after epoch of event
更直观的参数解释,可以表示为下图的方式:
from torch.utils.tensorboard import SummaryWriter
writer=SummaryWriter("logs") #将事件文件存储到logs这个文件夹底下
#绘制一个y=2x的图像
for i in range(100):
writer.add_scalar("y=x",2*i,i) # writer.add_scalar(图像标题,y轴,x轴)
writer.close()
tag(string): Data的指定方式,图表的标题
img_tensor(torch.Tensor, numpy.array, or string/blobname): 图像数据
global_step(int): 训练的步数(Global step value to record),结合img_tensor,那就是训练到多少步的时候img_tensor的图像是什么。
walltime(float): (不常用参数,可选)Optional override default walltime(time.time()) with seconds after epoch of event
默认输入图像数据形状:
(3, H, W):三通道,高,宽
注意:如果输入数据为 (H, W, 3) 也是可以的,但是需要设置dataformats
,如dataformats='HWC'
使用示例:
数据下载地址:百度网盘 请输入提取码 (baidu.com)
提取码:zsh8
from PIL import Image
image_path="E:\\Desktop\\hymenoptera_data\\hymenoptera_data\\train\\ants\\0013035.jpg" #图片路径
img=Image.open(image_path) #读取图片信息
print(type(img))
'''
[Run]
<class 'PIL.JpegImagePlugin.JpegImageFile'>
'''
img_tensor
的要求,所以不能用PIL读取利用numpy.array(),对PIL图片进行转换,具体操作如下:
from torch.utils.tensorboard import SummaryWriter
from PIL import Image
import numpy as np
writer=SummaryWriter("Image")
image_path="E:\\Desktop\\hymenoptera_data\\hymenoptera_data\\train\\ants\\0013035.jpg" #图片路径
img_PIL=Image.open(image_path) #读取图片的PIL格式
img_array=np.array(img_PIL) #将PIL类型的图片数据转为numpy型数据
print(img_array.shape) #查看图片数据的格式. [Run] (512, 768, 3);即3通道在最后一位
#添加image到SummaryWriter
#由shape数据可知,3通道在最后一位,所以设置为‘HWC’
writer.add_image("test", img_array, 1, dataformats='HWC')
writer.close()
在上面writer=SummaryWriter("logs")
代码的基础上,建立了一个名称为logs的文件,下面我们学习如何打开它。
tensorboard --logdir=logs
并按回车,需要注意的是:logdir=事件文件所在的文件名
。得到如下语句:TensorFlow installation not found - running with reduced feature set.
Serving TensorBoard on localhost; to expose to the network, use a proxy or pass --bind_all
TensorBoard 2.13.0 at http://localhost:6006/ (Press CTRL+C to quit)
其中,http://localhost:6006/
为tensorboard的打开位置,可直接单击打开
但有的时候,一台服务器上有好几个人在使用,如果都指向6006窗口,则会导致与其他人发生冲突,所以我们可以指定一个端口:
tensorboard --logdir=logs --port=6007
打开可能会出现下面这个页面:
存在原因及解决办法如下:
tensorboard --logdir=路径中含有中文
解决方法:把中文改成英文
路径错误
解决方法:tensorboard --logdir=路径,其中这个输入的路径不用带引号
tensorboard语句错误
解决方法:在一些tensorboard版本中,打开路径的语句为tensorboard --logdir=路径
,但在另一些版本中,打开路径的语句为tensorboard --logdir"路径"
如果反复更改上面的代码并运行,比如说把\(y=2x\)改为\(y=3x\),那么可能会出现这样的图像:
也就是说\(y=2x\)和\(y=3x\)会同时出现在同一个图像上,并且还会出现一条拟合这两个函数的线。解决方法如下:
方法一:把--logdir
中对应的文件夹找到,并直接删除。然后再运行一次程序,绘制想要的图片。
方法二:创建一个子文件
方法同上
如果要同时读取几张图片,可以有以下方法:
将writer.add_image("test", img_array, 1, dataformats='HWC')
中的step由1改为2或多个,此时可在同一个图像上,翻页显示
将writer.add_image("test", img_array, 1, dataformats='HWC')
中的tag由"test"改为另一个名字,此时可打开一个新的框来显示图像