本文主要是介绍如何从tensorboardX中的参数histogram看网络训练问题?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
最近遇到一个问题,同样的一个网络,稍微改了一丢丢地方,居然会导致结果差异天差地别,看loss函数可以大概知道model1有问题。但是其实也可以从另一个角度,比如参数的分布来看,这里就介绍一下我的做法。(pytorch 用tensorboardX, tensorflow用tensorboard)
一共四个小实验
实验1,对比model 1和model 2的参数histogram
示例代码:
服务器上训练好的模型保存在“models_2_1”和“model_2_2”下面
服务器上代码:
#debug.py
import torch, os
from MyNet
from tensorboardX import SummaryWriter
import numpy as np
epochs = 10
train_parts = '1_3'
test_part = '2'
save_dir1 = './models_'+test_part+'_1'
save_dir2 = './models_'+test_part+'_2'
epochs = 10
cuda_num = 0
if not os.path.exists(save_dir1):os.mkdir(save_dir1)
if not os.path.exists(save_dir2):os.mkdir(save_dir2)
net = MyNet()
if torch.cuda.is_available():net.cuda(0)
writer = SummaryWriter()
for epoch in range(9,epochs):model_path = save_dir1 + '/combine_' + train_parts + '_params_epoch_' + str(epoch) + '.pkl'net.load_state_dict(torch.load(model_path))net.eval()for name, param in net.named_parameters():writer.add_histogram(name + "_model1", param.clone().cpu().data.numpy(), epoch)model_path = save_dir2 + '/combine_' + train_parts + '_params_epoch_' + str(epoch) + '.pkl'net.load_state_dict(torch.load(model_path))net.eval()for name, param in net.named_parameters():writer.add_histogram(name + "_model2", param.clone().cpu().data.numpy(), epoch)
writer.close()
服务器上:
python3 debug.py
tensorboard --logdir=./runs
我的台式机上:
ssh -L 6192:127.0.0.1:6006 myname@xx.xx.xx.xx
(ssh -L 本地端口:本地IP:远程端口 远程服务器用户名@远程服务器Ip)
配置好之后本地浏览器打开网址:http://127.0.0.1:6192/#histograms
这篇关于如何从tensorboardX中的参数histogram看网络训练问题?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!