pytorch构建和训练深度学习模型的过程中,往往需要能够直观的观测到可视化的过程,比如画出训练曲线等。
对于简单的曲线绘制可以使用matplotlib库做出基本的图,如果需要更加高级的可视化过程,pytorch有好几个工具都可以做到,比如tensorwatch,visdom,tensorboard,实测下来发现tensorboard用起来比较方便和成熟稳定。
(pytorch自从1.2版本依赖就正式支持了独立的tensorboard,不再需要去安装tensorboardX了)
本文通过简单线性模型训练来讲解如何使用这两种可视化方法。
安装依赖
这里用的pytorch1.5 cpu版本,需要额外安装matplotlib和tensorboard库
pip
代码
引入模块
import
准备数据
这里用一个简单的线性模型为例
# real parameter
输入两个特征值,输出一个结果
通过随机数构造批量特征值矩阵,并增加随机噪声
# prepare data
定义模型
根据输入输出维度构建一个简单的线性层
# define model
定义训练参数
lr
通过matplotlib可视化
在训练过程中保存中间结果,然后用matplotlib画出损失曲线
# define draw
# train and visualize
结果如下
=== train begin ===
epoch 0: train loss 1.163743, test loss 1.123318
epoch 10: train loss 0.002227, test loss 0.001833
epoch 20: train loss 0.000107, test loss 0.000106
epoch 30: train loss 0.000101, test loss 0.000106
epoch 40: train loss 0.000100, test loss 0.000104
epoch 50: train loss 0.000101, test loss 0.000104
epoch 60: train loss 0.000100, test loss 0.000103
epoch 70: train loss 0.000101, test loss 0.000102
epoch 80: train loss 0.000100, test loss 0.000103
epoch 90: train loss 0.000103, test loss 0.000103
final epoch: train loss 0.000100, test loss 0.000102
plot curves
=== train end ===
查看一下训练后好的参数
print
Parameter containing:
tensor([[ 1.9967, -3.3978]], requires_grad=True)
Parameter containing:
tensor([4.2014], requires_grad=True)
通过tensorboard可视化
启动tensorboard显示网页
先引入模块
# train with tensorboard
定义一个writer,记录的中间数据会落到对应的目录中去用于显示
writer
此时用命令行启动tensorboard网页服务
tensorboard --logdir=runs
然后打开 http://localhost:6006/ 网页进入tensorboard主页面
模型可视化
tensorboard可以通过传入一个样本,写入graph到日志中,在网页上看到模型的结构
sample
刷新网页即可看到
训练过程可视化
定义新的训练函数,在过程中写入对应的scalar数据,就可以由tensorboard绘制出曲线
# trian and record scalar
结果如下
=== train begin ===
epoch 0: train loss 0.928869, test loss 0.978139
epoch 10: train loss 0.000948, test loss 0.000902
epoch 20: train loss 0.000102, test loss 0.000104
epoch 30: train loss 0.000101, test loss 0.000105
epoch 40: train loss 0.000101, test loss 0.000102
epoch 50: train loss 0.000100, test loss 0.000103
epoch 60: train loss 0.000101, test loss 0.000105
epoch 70: train loss 0.000102, test loss 0.000103
epoch 80: train loss 0.000104, test loss 0.000110
epoch 90: train loss 0.000100, test loss 0.000103
final epoch: train loss 0.000101, test loss 0.000104
=== train end ===
刷新页面可以看到
更多高阶用法就有待于自己去摸索研究了