(以下内容中来源于《pytorch深度学习入门与实战(孙玉林,余本国)》)
HiddenLayer库包含有一个build_graph()函数,可以非常方便地将深度学习网络进行可视化。
import hiddenlayer as hl
hl_graph = hl.build_graph(MyConvnet, torch.zeros([1, 1, 28, 28])) #使用hl.builde_graph()得到MyConvnet网络的可视化图像
hl_graph.theme = hl.graph.THEMES['blue'].copy() #将图像的主题设置为蓝色
hl_graph.save('./MyConvnet_hl.png',format = 'png') #保存图像时使用图像的.save()方法
PytorchViz库含有可以将深度学习网络进行可视化的函数make_dot()
from torchviz import make_dot
# 使用make_dot可视化网络结构
x = torch.randn(1,1,28,28)
y = MyConvnet(x)
MyConvnetvis = make_dot(y,params = dict(list(MyConvnet.named_parameters())+[('x',x)]))
# 将MyConvnetvis保存为图片
MyConvnetvis.format = 'png'
MyConvnetvis.directory = './MyConvnet_vis'
MyConvnetvis.view() #会自动在当前文件夹生成文件
tensorboardX是帮助Pytorch使用tensorboard工具来可视化的库。在tensorboardX库中,提供了多种向tensorboard中添加事件的函数。
函数 | 功能 | 用法 |
---|---|---|
SummaryWriter() | 创建编写器,保存日志 | writer = SummaryWriter() |
writer.add_scalar() | 添加标量 | writer.add_scalar(‘myscalar’, value, iteration) |
writer.add_image() | 添加图像 | writer.add_image(‘imresult’, x, iteration) |
writer.add_histogram() | 添加直方图 | writer.add_histogram(‘hist’, array, iteration) |
writer.add_graph() | 添加网络结构 | writer.add_graph(model, input_to_model = None) |
writer.add_audio() | 添加音频 | add_audio(tag, audio, iteration, sample,_rate) |
writer.add_text() | 添加文本 | writer.add_text(tag, text_string, global_step = None) |
实例
from tensorboardX import SummaryWriter
SumWriter = SummaryWriter(log_dir = './log')
optimizer = torch.optim.Adam(MyConvnet.parameters(),lr = 0.0003)
loss_func = nn.CrossEntropyLoss()
train_loss = 0
print_step = 100
for epoch in range(5):
for step, (x, y) in enumerate(train_Loader):
output = MyConvnet(x)
loss = loss_func(output, y)
optimizer.zero_grad()
loss.backward()
optimizer.step()
train_loss = train_loss + loss
niter = epoch *len(train_loader) + step + 1
if niter % print_stpe == 0:
# 为日志添加训练集的损失函数
SumWriter.add_scaler('train_loss', train_loss.item() / niter ,global_step = niter)
output = MyConvnet(test_data_x)
_,pre_lab = torch.max(output,1)
acc = accuracy_score(test_data_y, pre_lab)
# 为日志添加在测试集上的预测精度
SumWriter.add_scalar('test acc', acc.item(), niter)
# 为日志中添加训练数据的可视化图像,使用当前的batch的图像
# 将一个batch的数据进行预处理
x_im = vutils.make_grid(x,nrow =12)
SumWriter.add_image('train image sample',x_im, niter)
# 使用直方图可视化网络中的参数的分布情况
for name,param in MyConvnet.named_parameters():
SumWirter.add_histogram(name, param.data.numpy(), niter)
查看结果
打开终端,将工作路径指定到./log文件根目录下,输入命令tensorboard–logdir=“log”,成功后,即可得到一个网页路径
下面只给出区别用法,变量名以及意义和上面代码中的一样。
# 导入hiddenlayer库
import hiddenlayer as hl
# 记录训练过程中的指标
history1 = hl.History()
# 使用Canvas进行可视化
canvas1 = hl.Canvas()
...
#计算每个epoch和step的模型的输出特征
history1.log((epoch, step), train_loss = loss, test_acc = acc, hidden_weight = MyConvnet.fc[2].weight)
# 可视化训练过程
with canvas1:
canvas1.draw_plot(history1['train_loss'])
canvas1.draw_plot(history1['test_acc'])
canvas1.draw_plot(history1['hidden_weight'])
Visdom库是Facebook专门为pytorch开发的一款可视化工具。该库使用时非常灵活,可用于创建,组织和共享实时丰富的数据的可视化。可视化的数据支持pytorch中的tensor和numpy中的ndarray
函数 | 功能 |
---|---|
vis.image | 一张图像 |
vis.images | 一个batch或一个列表的图像 |
vis.text | 文本 |
vis.audio | 播放音频 |
vis.video | 播放视频 |
vis.matplot | 可视化matplotlib的图像 |
vis.scatter | 2D或3D散点图 |
vis.line | 线图 |
vis.stem | 茎叶图 |
vis.heatmap | 热力图 |
vis.bar | 条形图 |
vis.histogram | 直方图 |
vis.boxplot | 盒形图 |
vis. surf | 曲面图 |
vis.contour | 等高图 |
vis.mesh | 网格图 |
from visdom import Visdom
vis = Visdom()
vis.scatter(x, y, win= '窗口名字', env = 'main' , opts = dict(markersize = 4, xlabel = '',ylabel = '',legend = ''))
## 其他函数用法与此类似