基于pytorch的相关可视化工具

(以下内容中来源于《pytorch深度学习入门与实战(孙玉林,余本国)》)

网络结构的可视化

HiddenLayer库可视化网络

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库可视化网络

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

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库可视化训练过程

下面只给出区别用法,变量名以及意义和上面代码中的一样。

# 导入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

Visdom库是Facebook专门为pytorch开发的一款可视化工具。该库使用时非常灵活,可用于创建,组织和共享实时丰富的数据的可视化。可视化的数据支持pytorch中的tensor和numpy中的ndarray

函数功能
vis.image一张图像
vis.images一个batch或一个列表的图像
vis.text文本
vis.audio播放音频
vis.video播放视频
vis.matplot可视化matplotlib的图像
vis.scatter2D或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 =  ''))
	## 其他函数用法与此类似
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值