基于pytorch的相关可视化工具

基于pytorch的相关可视化工具

  • 网络结构的可视化
    • HiddenLayer库可视化网络
    • PytorchViz库可视化网络
  • 训练过程的可视化
    • tensorboardX
    • HiddenLayer库可视化训练过程
    • Visdom

(以下内容中来源于《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.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 =  ''))
	## 其他函数用法与此类似

你可能感兴趣的:(pytorch入门与实战,pytorch,python)