1.TensorBoard的安装
1.1 关于TensorBoard
TensorBoard是Google开发的一组用于数据可视化的工具。它包含在流行的开源机器学习库 Tensorflow 中,主要用于记录机器学习的过程。
- 跟踪和可视化损失及准确率等指标
- 可视化模型图(操作和层)
- 查看权重、偏差或其他张量随时间变化的直方图
- 将嵌入投射到较低的维度空间
- 显示图片、文字和音频数据
- 剖析 TensorFlow 程序
【嘿,没看懂。】
另篇文章介绍的功能是:
- 记录损失变化、准确率变化等
- 记录图片变化、语音变化、文本变化等,例如在做GAN时,可以过一段时间记录一张生成的图片
- 绘制模型
【这个好理解了点。】
1.2 TensorBoard的安装(只看加粗字体就行)
在命令行中,先进入虚拟环境:activate pytorch
然后使用pip进行安装:pip install tensorboard

然后运行示例代码:
from torch.utils.tensorboard import SummaryWriter
writer = SummaryWriter("logs")
for i in range(100):
writer.add_scalar("y=x", i, i)
writer.close()
发现报错,错误原因是TensorBoard版本过低:

在终端中输入conda list 查看Tensorboard版本,1.10.0,确实低。

卸载TensorBoard,命令:pip uninstall tensorboard

重新安装一个高版本的TensorBoard:pip install tensorboard==2.3.0
又报错了。

更新下pip试试:python -m pip install --upgrade pip
没用,还是报错。
下载grpcio:
pip install grpcio
pip install grpcio-tools
一直超时。
加上镜像源下载grpcio:
pip install grpcio -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
pip install grpcio-tools -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
那叫一个丝滑,瞬间下完了。
然后重新下载Tensorboard:
pip install tensorboard==2.10.1 -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
下载成功!

再试试运行示例代码,没报错,运行成功:
项目目录下多了个叫logs的文件夹。

2.TensorBoard的使用
2.1 SummaryWriter类
官方文档解释(加腾讯翻译):
将条目直接写入log_dir中的事件文件, 由TensorBoard使用。 “SummaryWriter”类提供了一个高级API来创建事件文件 并向其中添加摘要和事件。该类将异步地更新文件内容。这允许训练程序调用方法 直接从训练循环向文件添加数据,而不会减慢训练速度。
(1)add_scalar(tag, scalar_value, global_step)
其中,第一个是图的标题;第二个是需要保存的数值,对应y轴;第三个是全局的步数,对应x轴
添加一个标量数据(scalar data)到summary中,主要用来绘制图表。
用的就是上面的示例代码,再粘一次:
from torch.utils.tensorboard import SummaryWriter
# 从torch(大工具箱中)的 utils(常用的工具箱)中导入tensorboard,然后导入了SummaryWriter这个类
writer = SummaryWriter("logs")
# 创建实例
# 常用的两个方法writer.add_image()和writer.add_scalar()
# writer.add_scalar()
for i in range(100):
writer.add_scalar("y=x", i, i)
# 第一个是图的标题;第二个是需要保存的数值,对应y轴;第三个是全局的步数,对应x轴
writer.close()
然后在下面终端中输入如下命令:
tensorboard --logdir=logs (logdir=事件文件所在文件夹名)
假如需要指定端口号则在后面加上port:
tensorboard --logdir=logs --port=6007(指定端口号6007)
运行后如下:

网页打开如下(报错了),原因是我的py文件在pythonProject下的learn_dataset文件夹内,而终端在pythonProject下运行。

cd到python文件所在的目录,然后重新输入命令tensorboard --logdir=logs --port=6007即可。
打开网址长这个样:

【注,标题一样将会在同一个图里展示】
(2)add_image(tag, img_tensor, global_step,dataformats='CHW')
其中,第一个是图的标题;第二个是图像数据类型;第三个是训练的步骤;第三个是数据格式。
img_tensor需要是以下几种类型:torch.Tensor, numpy.array, or string/blobname,别滴不行,需要强制类型转换。
dataformats中,H、W、C分别表示图像的高度、宽度和通道数,比如CHW, HWC, HW。假如图像的格式是CHW则可以省略,是别的需要在函数中定义dataformats的格式。
[应该可以省略吧?我猜的。]
该函数通常用来观察训练结果。
测试代码:
from torch.utils.tensorboard import SummaryWriter
# 从torch(大工具箱中)的 utils(常用的工具箱)中导入tensorboard,然后导入了SummaryWriter这个类
import numpy as np
# 为了转换数据类型
from PIL import Image
writer = SummaryWriter("logs")
# 创建实例
image_path = "datas/val/ants/800px-Meat_eater_ant_qeen_excavating_hole.jpg"
img_PIL = Image.open(image_path)
# print(type(img)) 此时数据类型不能用于add_image()函数
image_array = np.array(img_PIL) # 将数据类型强制转换为numpy.array类型
print(image_array.shape) # 查看图像尺寸格式,是(533, 800, 3),即为HWC,高度、宽度和通道数
writer.add_image("test", image_array, 1, dataformats='HWC')
# 从PIL到numpy,需要指定shape中每个数字/维表示的含义,就是这一步:dataformats='HWC'
writer.close()
在终端中输入tensorboard --logdir=logs
运行后得到:

当更改图片路径以及image()函数中的训练步数时(不更改title),会发现图片显示step2的,并且可以实现和step1之间的切换:

其中代码只改变了:
# image_path = "datas/val/ants/800px-Meat_eater_ant_qeen_excavating_hole.jpg"
image_path = "datas/val/bees/6a00d8341c630a53ef00e553d0beb18834-800wi.jpg"
以及:
# writer.add_image("test", image_array, 1, dataformats='HWC')
writer.add_image("test", image_array, 2, dataformats='HWC')
假如把图的title一起改变(我改成了test2),就能得到一个新的图。

版权归原作者 小呀小白菜~ 所有, 如有侵权,请联系我们删除。