使用Pytorch中的tensorboard可视化网络训练参数

前几日在利用Pytorch训练CIFAR-10数据集时,就在想这些训练过程中的loss怎么才能可视化出来,于是去找了一下,网上大部分的方法都是利用tensorboardX来实现的,后来发现其实新版本Pytorch里边自带的tensorboard就可以实现可视化。(应该是版本升级之后tensorboardX被torch.utils.tensorboard取代了)于是就尝试了一番:

环境配置

安装tensorboard(感觉安装了torch之后其实这一步好像都不用安装,因为它是包含在torch里边的),但刚开始没试成功还是安装了:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple tensorboard

初步试验

试一下以下官方给的示例:

from torch.utils.tensorboard import SummaryWriter
writer = SummaryWriter()
x = range(100)
for i in x:
    writer.add_scalar('y=2x', i * 2, i)
writer.close()

这个示例是将训练的日志保存在了和你这个python文件同级的目录下,或者理解为 ‘./runs’ 。咱先不管啥意思,先试一下结果,运行之后,再去terminal 下调用一下命令:

tensorboard --logdir=E:\runs

后面这个E:\runs是我程序所在的目录,这一块支持中文路径,我试过了。然后就会报错

cudart64_101.dll not found

就找到这个解决方法:

cudart64_101.dll not found解决方法

其实说的就是把原安装目录下的cudart64_102.dll复制一份改名为cudart64_101.dll,方法的确有效。

再次在terminal 中执行上面的命令,可以看到已经tensorboard运行了:

2020-06-15 10:02:55.349105: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudart64_101.dll
Serving TensorBoard on localhost; to expose to the network, use a proxy or pass --bind_all
TensorBoard 2.2.1 at http://localhost:6006/ (Press CTRL+C to quit)

复制http://localhost:6006/到浏览器即可看到结果:

使用Pytorch中的tensorboard可视化网络训练参数_第1张图片

左下角是我们文件的路径,如果这一块没有出现打勾的文件,一般就是路径填写的有问题,这种情况下右边的图像也不会出来的。

应用到CNN网络训练

选取了一段代码(完整代码见另一篇博文):

利用Pytorch训练CIFAR-10数据集

#model.train()
from torch.utils.tensorboard import SummaryWriter
writer = SummaryWriter('cifar-10')
for epoch in range(EPOCH):
    for i,data in enumerate(train_loader):
        inputs,labels = data
        inputs,labels = inputs.to(device),labels.to(device)
        
        #前向传播
        outputs = model(inputs)
        #计算损失函数
        loss = criterion(outputs,labels)
        #清空上一轮的梯度
        optimizer.zero_grad()
        
        #反向传播
        loss.backward()
        #参数更新
        optimizer.step()
        if  i%50 == 0:
            writer.add_scalar("Train/Loss", loss.item(), epoch*len(train_loader)+i)
        #print('it’s training...{}'.format(i))
    print('epoch{} loss:{:.4f}'.format(epoch+1,loss.item()))

#保存模型参数
torch.save(model,'cifar10_densenet161.pt')
print('cifar10_densenet161.pt saved')
#模型加载
#model = torch.load('cifar10_resnet.pt')#161.200epoch
model = torch.load('cifar10_densenet161.pt')
#测试
#model.eval()
model.train()

correct,total = 0,0
for j,data in enumerate(test_loader):
    inputs,labels = data
    inputs,labels = inputs.to(device),labels.to(device)
    #前向传播
    outputs = model(inputs)
    _, predicted = torch.max(outputs.data,1)
    total =total+labels.size(0)
    correct = correct +(predicted == labels).sum().item()
    if  j%20 == 0:
        writer.add_scalar("Train/Accuracy", 100.0*correct/total, j)
print('准确率:{:.4f}%'.format(100.0*correct/total))

可以看出核心语句:

writer.add_scalar(“Train/Accuracy”, 100.0*correct/total, j)

方法原型:

def add_scalar(self, tag, scalar_value, global_step=None, walltime=None):

tag:画图的标题

scalar_value:当前存入的数值,即y轴的值

global_step:在哪一步存入了一次数据,即x轴的值

由于只在本地笔记本上跑一下示意,选择了epoch=2跑了一下:

使用Pytorch中的tensorboard可视化网络训练参数_第2张图片

通过上面的图可以看出,tensorboard记录了每一步执行的loss和accuracy,而且还能看到执行到每一步时的耗时,这个对于认识模型、优化模型都是很有帮助的啦。

此外,tensorboard还可以可视化训练的图片和模型图,图片用 add_image,模型图用 add_graph。详见文末的官方文档。不再一一举例,按需自查。

更多可以参见官方文档:

VISUALIZING MODELS, DATA, AND TRAINING WITH TENSORBOARD

其他参考文章:

pytorch使用tensorboard实现可视化

用tensorboard实现可视化

PyTorch里如何利用TensorBoard–详解

你可能感兴趣的:(Pytorch使用,深度学习,pytorch,tensorflow,神经网络,可视化)