Pytorch作为一大主流深度学习框架,在1.2版本之后自带tensorboard,这为监视训练过程带来了巨大的便利。但目前的教程多数没有写如何动态监视训练过程。在进行了一些探索后,实现了mnist分类训练动态监视这一功能,特此记录。文中分类demo来自https://blog.csdn.net/KyrieHe/article/details/80516737

  1. 安装或者升级pytorch环境,安装必要依赖包;
  2. 搭网络训练,但在代码中要插入如下代码,分为三个部分:
from torch.utils.tensorboard import SummaryWriter
writer = SummaryWriter() #定义writer,使用默认路径
# log_dir = 'dir_to_your_destination'
# writer = SummaryWriter(log_dir) #定义writerwriter.add_scalar('test/loss', test_loss, epoch+1) # add the information to the log file
writer.add_scalar('test/correct', correct, epoch+1)writer.close()

程序一旦运行到writer.add_scalar后就会生成类似名字为Jan10_13-12-32_DESKTOP-G0RGKWD的文件夹,内有添加的数据
3. 从终端进入当前使用的虚拟环境和目录
4. 使用tensorboard --logdir=dir_to_your_destination --port=2200来启动tensorboard,该命令直行后会有一个连接http://localhost:2200/,将其复制粘贴到(pycharm的终端中可直接点击进入)浏览器中,即可打开
5. 选择要查看的数据进行查看,注意tensorboard是30秒更新一次数据,效果如下图


注意:

  • 指定端口和完整日志路径比较容易出现效果,前期尝试中易出现无法打开或者打开后数据不对的情况,稍微多尝试几次
  • 本例子只是以标量数据为例,可以添加多种类型的数据,可直接搜索查看tensorboard的官方说明
  • 本例子的详细代码见https://github.com/AlvinLXS/Train_NN_with_Tensorboard

完整代码:

#!/usr/bin/env python
# encoding: utf-8
'''
@author: AlvinLXS
@time: 2020.1.10 12:50
@file: train_process.py
@desc: most part of the source codes comes from https://blog.csdn.net/KyrieHe/article/details/80516737
'''
from __future__ import absolute_import
from __future__ import print_function
from __future__ import divisionimport argparse  #Python 命令行解析工具
import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
from torchvision import datasets, transformsfrom torch.utils.tensorboard import SummaryWriter
writer = SummaryWriter() #定义writer,使用默认路径# log_dir = 'dir_to_your_destination'
# writer = SummaryWriter(log_dir) #定义writerclass Net(nn.Module):def __init__(self):super(Net, self).__init__()self.conv1 = nn.Conv2d(1, 10, kernel_size=5)self.conv2 = nn.Conv2d(10, 20, kernel_size=5)self.conv2_drop = nn.Dropout2d()self.fc1 = nn.Linear(320, 50)self.fc2 = nn.Linear(50, 10)def forward(self, x):x = F.relu(F.max_pool2d(self.conv1(x), 2))x = F.relu(F.max_pool2d(self.conv2_drop(self.conv2(x)), 2))x = x.view(-1, 320)x = F.relu(self.fc1(x))x = F.dropout(x, training=self.training)x = self.fc2(x)return F.log_softmax(x, dim=1)def train(args, model, device, train_loader, optimizer, epoch):model.train()for batch_idx, (data, target) in enumerate(train_loader):data, target = data.to(device), target.to(device)optimizer.zero_grad()output = model(data)loss = F.nll_loss(output, target)loss.backward()optimizer.step()if batch_idx % args.log_interval == 0:print('Train Epoch: {} [{}/{} ({:.0f}%)]\tLoss: {:.6f}'.format(epoch, batch_idx * len(data), len(train_loader.dataset),100. * batch_idx / len(train_loader), loss.item()))def test(args, model, device, test_loader,epoch):model.eval()test_loss = 0correct = 0with torch.no_grad():for data, target in test_loader:data, target = data.to(device), target.to(device)output = model(data)test_loss += F.nll_loss(output, target, size_average=False).item() # sum up batch losspred = output.max(1, keepdim=True)[1] # get the index of the max log-probabilitycorrect += pred.eq(target.view_as(pred)).sum().item()test_loss /= len(test_loader.dataset)print('\nTest set: Average loss: {:.4f}, Accuracy: {}/{} ({:.0f}%)\n'.format(test_loss, correct, len(test_loader.dataset),100. * correct / len(test_loader.dataset)))writer.add_scalar('test/loss', test_loss, epoch+1) # add the information to the log filewriter.add_scalar('test/correct', correct, epoch+1)def main():# Training settingsparser = argparse.ArgumentParser(description='PyTorch MNIST Example')parser.add_argument('--batch-size', type=int, default=64, metavar='N',help='input batch size for training (default: 64)')parser.add_argument('--test-batch-size', type=int, default=1000, metavar='N',help='input batch size for testing (default: 1000)')parser.add_argument('--epochs', type=int, default=30, metavar='N',help='number of epochs to train (default: 10)')parser.add_argument('--lr', type=float, default=0.000001, metavar='LR',help='learning rate (default: 0.01)')  # use a small learning rate to slow the trainparser.add_argument('--momentum', type=float, default=0.5, metavar='M',help='SGD momentum (default: 0.5)')parser.add_argument('--no-cuda', action='store_true', default=False,help='disables CUDA training')parser.add_argument('--seed', type=int, default=1, metavar='S',help='random seed (default: 1)')parser.add_argument('--log-interval', type=int, default=10, metavar='N',help='how many batches to wait before logging training status')args = parser.parse_args()use_cuda = not args.no_cuda and torch.cuda.is_available()torch.manual_seed(args.seed)device = torch.device("cuda" if use_cuda else "cpu")kwargs = {'num_workers': 1, 'pin_memory': True} if use_cuda else {}train_loader = torch.utils.data.DataLoader(datasets.MNIST('../data', train=True, download=True,transform=transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.1307,), (0.3081,))])),batch_size=args.batch_size, shuffle=True, **kwargs)test_loader = torch.utils.data.DataLoader(datasets.MNIST('../data', train=False, transform=transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.1307,), (0.3081,))])),batch_size=args.test_batch_size, shuffle=True, **kwargs)model = Net().to(device)optimizer = optim.SGD(model.parameters(), lr=args.lr, momentum=args.momentum)for epoch in range(1, args.epochs + 1):train(args, model, device, train_loader, optimizer, epoch)test(args, model, device, test_loader,epoch)if __name__ == '__main__':main()writer.close()

Pytorch使用tensorboard监视网络训练过程相关推荐

  1. 【深度学习】Tensorboard可视化模型训练过程和Colab使用

    [深度学习]Tensorboard可视化模型训练过程和Colab使用 文章目录 1 概述 2 手撸代码实现 3 Colab使用3.1 详细步骤3.2 Demo 4 总结 1 概述 在利用TensorF ...

  2. 关于网络训练过程中过拟合的一些问题及解决方法

    下午华为面试,面试官问道在网络训练过程中如何避免过拟合的问题,自己虽然懵懵懂懂知道一些,但是并没有真正的总结记录,特地查阅了过拟合的一些列问题,总结在自己的博客当中. - 什么是过拟合? - 过拟合的 ...

  3. InfoGAN 网络训练过程介绍

    一.InfoGAN是什么 简单的讲,就是一种常见的GAN,是在普通的GAN的基础上增加Q网络,可以通过无监督学习的方式学到生成的数据的类别. 二.小故事 小D是一个很喜欢吃饺子的姑娘,喜欢吃不同的馅的 ...

  4. PyTorch下的可视化工具(网络结构/训练过程可视化)

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者 | 锦恢@知乎 来源 | https://zhuanlan.z ...

  5. TF学习——TF之TFOD:基于TFOD AP训练ssd_mobilenet预模型+faster_rcnn_inception_resnet_v2_模型训练过程(TensorBoard监控)全记录

    TF学习--TF之TFOD:基于TFOD AP训练ssd_mobilenet预模型+faster_rcnn_inception_resnet_v2_模型训练过程(TensorBoard监控)全记录 目 ...

  6. HALCON 21.11:深度学习笔记---网络和训练过程(4)

    HALCON 21.11:深度学习笔记---网络和训练过程(4) HALCON 21.11.0.0中,实现了深度学习方法.关于网络和训练过程如下: 在深度学习中,任务是通过网络发送输入图像来执行的.整 ...

  7. HALCON 20.11:深度学习笔记(4)--- 网络和训练过程

    HALCON 20.11:深度学习笔记(4)--- 网络和训练过程 HALCON 20.11.0.0中,实现了深度学习方法.关于网络和训练过程如下: 在深度学习中,任务是通过网络发送输入图像来执行的. ...

  8. 神经网络变得轻松(第二部分):网络训练和测试

    概述 1. 定义问题 2. 神经网络模型项目 2.1. 判定输入层中神经元的数量 2.2. 设计隐藏层 2.3. 判定输出层中神经元的数量 3. 编程 3.1. 准备工作 3.2. 初始化类 3.3. ...

  9. tensorflow笔记:模型的保存与训练过程可视化

    tensorflow笔记系列:  (一) tensorflow笔记:流程,概念和简单代码注释  (二) tensorflow笔记:多层CNN代码分析  (三) tensorflow笔记:多层LSTM代 ...

最新文章

  1. mysql分组和where条件查询_【MySQL】:分组查询where和having
  2. 基于队列的生产消费设计java_生产者-消费者设计模式
  3. Python基础语法06--文件
  4. 解决AJAX CalendarExtender控件不显示中文的情况(转帖博客园某人(不好意思,实在是没有找到您的尊姓大名,感谢一下!))...
  5. python按键盘上哪个键运行_python通过按下键盘特定按键,开始运行python文件
  6. 今天又听了蓝色的缘分
  7. es6 --- 使用生成器交替执行
  8. iOS-Runtime知识点整理
  9. 背景透明文字不透明的最佳方法兼容IE(以背景黑色透明度0.5为例)
  10. 【clickhouse】未解决 ClickHouse exception, code: 1002 DB::Exception: Directory already exists
  11. bzoj 3143: [Hnoi2013]游走(高斯消元)
  12. AWS知识图谱大赛 -- 负面新闻影响股票基金预测系统架构设计文档
  13. 8086汇编语言程序设计典型题目
  14. 新型智慧城市城市大脑大数据平台顶层设计规划建设方案
  15. fiddler抓包视频
  16. SSRF利用协议中的万金油——Gopher
  17. 曲线与曲面的微分几何
  18. python oserror怎么解决_Python读取csv报错解决方法:OSError: Initializing from file failed
  19. 存档:全球各国名称中英文对照表
  20. VirtualBox虚拟机使用Vagrant连接win(甲骨文Oracle VM )

热门文章

  1. “基因编辑婴儿”背后到底用了什么术?
  2. PNG图片怎么制作gif动画?图片gif动画制作方法
  3. 【1】少儿Python编程学习_Microbit展示名字
  4. MindManager更改线条颜色
  5. 到底什么是BFC?一篇就够了
  6. 解决pc游戏启动报错3005 Error 30005: Create File Failed With 32
  7. Hashmap扩容方法机制原理
  8. Nginx实现 内网访问外网https页面资源的解决方案
  9. Android、Flutter为不同的CPU架构包打包APK(v7a、v8a、x86)
  10. MindSpore爱因斯坦求和约定API解析【mindspore.ops.Einsum】