合理利用工具很关键,这样就不用自己用matplotlib画图咯!之前使用的是tensorflow的,不过现在主要都是使用pytorch了,故记录一下~
官方教程在:
https://github.com/lanpa/tensorboardXgithub.com主要依赖:
别忘了pip install tensorflow. 这里可以使用清华源,不过后面千万不要加上-user参数,不然conda会帮你安装到C:UsersAdministratorAppDataRoaming 上,相当于又多了一个python环境,很容易出错!如果后面使用的时候说找不到tensorboard程序,不用想肯定是环境变量的问题了。
pip --default-timeout=1000 install -i https://pypi.tuna.tsinghua.edu.cn/simple tensorflow-gpu
from tensorboardX import SummaryWriter
最基本的东西,定义writer来记录哪些东西是要显示出来的。比如说定义一个简单的一元函数.
from tensorboardX import SummaryWriter
if __name__ == '__main__':
# writer = SummaryWriter('../runs/scalar_example_09')
writer = SummaryWriter('../runs/scalar_example_0914')
for i in range(10):
writer.add_scalar('my_value_1', i + 1, global_step=i)
writer.add_scalar('my_value_2', i * 10, global_step=i)
- SummaryWriter()定义存放的地址,就是后面tensorboard --logdir path 的 path;如果直接不加任何东西,返回的是以时间命名的文件,如果是云服务器,后面还会加上主机的名字,比如我的:Sep14_16-15-26_cht-1998-79;
- add_scalar(name, value, xticks) 这个就相当于画图而已;
运行程序后就可以看看效果了:
其中左侧的Smoothing(平滑),数据平滑其实经常用到(简单理解就是:一个滑动窗口求平均或者某一些操作,使得数据看起来变化幅度不大),不过这里本来就很平滑了,效果变化不大。
画图这里暂时先学到这里,时间问题以后有需要在进行学习。接下来还有一个重要的部分就是可视化模型结构。
直接上代码,记得传入的参数是(module, input), 输入必须存在, 多个输入就用tuple/list:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2020/9/15 8:56
# @Author : CHT
# @Blog : https://www.zhihu.com/people/xia-gan-yi-dan-chen-hao-tian
# @Site :
# @File : demo2_module.py
# @Function:
# @Software: PyCharm
import numpy as np
import torch
import torch.nn as nn
from tensorboardX import SummaryWriter
class Discriminator(nn.Module):
def __init__(self, in_feature):
super(Discriminator, self).__init__()
self.ad_layer1 = nn.Linear(in_feature, 1024)
self.ad_layer2 = nn.Linear(1024, 1024)
self.ad_layer3 = nn.Linear(1024, 1)
self.sigmoid = nn.Sigmoid()
self.main = nn.Sequential(
self.ad_layer1,
nn.BatchNorm1d(1024),
nn.LeakyReLU(0.2, inplace=True),
self.ad_layer2,
nn.BatchNorm1d(1024),
nn.LeakyReLU(0.2, inplace=True),
self.ad_layer3,
self.sigmoid
)
def forward(self, x):
for module in self.main:
x = module(x)
return x
if __name__ == '__main__':
discriminator = Discriminator(in_feature=500)
d_input = torch.zeros(3, 500)
writer = SummaryWriter('../runs/module_example_0915')
writer.add_graph(discriminator, d_input, True)
效果如下,十分清晰,连batchnorm的moving average都能够显示出来:
构建一个完整的流程,识别MNIST数据集,显示loss与accuracy.
注意add_graph这里好像模型不能是cuda上的,不然会报错!!!
效果如下:
完整代码已上传到github:
https://github.com/cht619/tensorboardX-mnistgithub.com后续还会加上显示图片等功能,时间问题现在(2020/09/15)还没学习到。
更新:在使用诸如GAN之类的网络,就是说每个网络之间没有联系,无需用sequential layer进行连接起来,但是却不能同时展示两个网络,搜了一下原来作者也关注了这个问题,不知道谁有很好的方法可以 add_grap() multiple timesn呢?欢迎告知~
issue: https://github.com/lanpa/tensorboardX/issues/319 目前看到的笨方法就是把多个网络写在一个class里,然后return多个输出。