PyTorch深度学习实战笔记
1. TensorBoard
TensorBoard是TensorFlow提供的一组可视化工具(A Suite of Visualization Tools),可以帮助开发者理解、调试和优化TensorFlow程序,作为一款优秀的可视化组件,自然会被其他框架借用和引进。在PyTorch中也能够通过TensorBoardX组件使用这一款可视化工具,TensorBoardX组件支持scalar、image、figure、histogram、audio、text、graph、onnx_graph、embedding、pr_curve、videosummaries等不同的可视化展示方式。下面先安装TensorBoardX组件。
pip install tensorboardX
pip install tensorflow
pip install Tensorboard_logger
TensorBoard通过读取日志文件进行可视化,使用时需要引入SummaryWriter。
from tensorboardX import SummaryWriter
writer = SummaryWriter()
标量可视化
使用SummaryWriter上的add_scalar方法添加标量,其定义如下。
add_scalar(tag,scalar_value,global_step=None,walltime=None)
第一个参数设定标量的标签;第二个参数指定标量的值;第三个参数是全局的step;最后一个参数是标量产生的时间,默认为当前的系统时间。
# 20个step对应的损失
from tensorboardX import SummaryWriter
writer = SummaryWriter()
losses = list(range(20,0,-1))
for step in range(20):
writer.add_scalar("data/loss",losses[step]*5,step)
writer.add_scalar("data/loss1",losses[step],step)
运行上述代码将在项目目录下产生runs文件夹.
下面通过“tensorboard–host 127.0.0.1–logdir./runs”启动TensorBoard服务,–host参数指定运行的IP地址,–logdir参数则指定日志存放的目录,TensorBoard将读取该目录下的日志文件,并解析和可视化。
tensorboard --host 127.0.0.1 --logdir ./runs
打开浏览器,输入“http://127.0.0.1:6006”即可看到可视化界面。在界面中单击“SCALARS”可以看到刚才写入的标量数据的可视化信息.
注:在VScode中可直接launch TensorBoard session
python.exe -m pip install -U torch-tb-profiler
未完待续
2 . visdom
Visdom是一个专业的可视化工具,用于创建、组织和共享数据的可视化,支持NumPy和Tensor数据,使用简单的命令便可以绘制出丰富的图片,其支持的图表包括折线图、热力图、小提琴图、散点图等。
先通过pip命令安装Visdom:
pip install visdom
启动Visdom服务
python -m visdom.server
启动后通过浏览器访问“http://localhost:8097”即可进入Visdom可视化界面。将数据发送给Visdom进行可视化的过程如下:先实例化一个环境,得到Visdom实例,通过实例中的方法向Visdom服务写入需要可视化的的数据,Visdom接收到数据便进行相应的展示。
import visdom
import numpy as np
import time
# # 单一显示
# viz = visdom.Visdom(port=8097,server="127.0.0.1",env = "Test")
# viz.line(np.arange(1))
# global_step = 0
# while True:
# global_step += 1
# print(global_step)
# viz.line(Y = np.array([np.random.random()]),X = np.array([global_step]),update = 'append',win = "Test")
# time.sleep(1)
# 多变量显示
viz = visdom.Visdom(port=8097,server="127.0.0.1",env = "Test")
legend = ['train_loss', 'test_loss']
title = 'Train'
# viz.line([[0.,0.]], [0], win='train', opts=dict(title=title, legend=legend))
global_step = 0
while True:
global_step += 1
print(global_step)
train_loss = np.random.random()
test_loss = np.random.random()*0.8-1
viz.line([[train_loss,test_loss ]],[global_step],update = 'append',win = "Test",opts=dict(title=title, legend=legend))
time.sleep(1)