visdom可视化安装与入门使用(附带pytorch-MPL手写数字识别案例源码)
注:附带案例需要有pytorch基础
0为什么用visdom而不用matplotlib或tensorboardX?
1.visdom可以直接接受torch的tensor,而不用转化成numpy array;
2.运行效率更高。 tensorboard会把数据写入文件,导致监听文件很大,占用大量的资源,且是每隔三十秒更新一次;而visdom直接在内存中获取数据,毫秒级刷新。
1.安装与使用
安装很简单,直接执行命令:pip install visdom
1.1开启服务
因为visdom本质上是一个类似于就jupyter notebook 的web服务器,在使用之前需要在终端打开服务
在终端中输入 python -m visdom.server(注意第一次运行的时候,visdom会去外网下载一些需要的文件,这时需要当前的网络能翻墙不然页面会一直卡在t might take a while那里不动。)
正常执行后,在浏览器中打开程序给出的网页http://localbost:8097
出现蓝底空白的页面,并且上排有一些bar,表示安装使用成功
1.2简单的使用
1.2.1绘制一条曲线
先创建一个visdom()实例;
viz.line(),前两个参数分别为y和x,win定义当前图的id,另外还有一个env参数,相当于一个更大范围的id,一个env可以包括多个win,在不指定env的情况下,env默认为‘main’
opt=定义一些每个图的具体设置,如title等;
再次调用viz.line(), 使用相同的env和win,将数据给到图中去,update定义数据的更新方式,‘append’表示附加。
1.2.2绘制多条曲线
在同一个图中绘制多条曲线时,只需要y的参数提供为一个list[y1, y2];
opts中加图标参数legend=[y1, y2]。
1.2.3可视化图片和文字等
2.pytorch训练识别手写数字网络过程的visdom可视化案例
现在终端启动visdom服务,在浏览器中打开程序给的网页,具体操作参考1.1
案例代码与解读
先导入需要的包
import torch import torch.nn as nn import torch.nn.functional as F import torch.optim as optim from torchvision import datasets, transforms from visdom import Visdom
定义训练参数
batch_size=200 learning_rate=0.01 epochs=10
# 获取训练和测试数据 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=batch_size, shuffle=True) test_loader = torch.utils.data.DataLoader( datasets.MNIST('../data', train=False, transform=transforms.Compose([ transforms.ToTensor(), # transforms.Normalize((0.1307,), (0.3081,)) ])), batch_size=batch_size, shuffle=True)
# 定义多层感知机(全连接网络) class MLP(nn.Module): def __init__(self): super(MLP, self).__init__() self.model = nn.Sequential( nn.Linear(784, 200), nn.LeakyReLU(inplace=True), nn.Linear(200, 200), nn.LeakyReLU(inplace=True), nn.Linear(200, 10), nn.LeakyReLU(inplace=True), ) def forward(self, x): x = self.model(x) return x # 定义训练过程 device = torch.device('cuda:0') net = MLP().to(device) optimizer = optim.SGD(net.parameters(), lr=learning_rate) criteon = nn.CrossEntropyLoss().to(device)
# 定义两个用于可视化训练和测试过程visdom窗口,即两张图 viz = Visdom() viz.line([0.], [0.], win='train_loss', opts=dict(title='train loss')) viz.line([[0.0, 0.0]], [0.], win='test', opts=dict(title='test loss&acc.', legend=['loss', 'acc.'])) global_step = 0
这个代码块执行后,去查看visdom提高供的网页,可以发现网页中出现了两个定义的win,即两张没有数据的图
# 开始训练,并给图送入实时更新的数据,以可视化训练过程 for epoch in range(epochs): for batch_idx, (data, target) in enumerate(train_loader): data = data.view(-1, 28*28) data, target = data.to(device), target.cuda() logits = net(data) loss = criteon(logits, target) optimizer.zero_grad() loss.backward() optimizer.step() global_step += 1 # 给‘train_loss’送入数据 viz.line([loss.item()], [global_step], win='train_loss', update='append') if batch_idx % 100 == 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())) test_loss = 0 correct = 0 for data, target in test_loader: data = data.view(-1, 28 * 28) data, target = data.to(device), target.cuda() logits = net(data) test_loss += criteon(logits, target).item() pred = logits.argmax(dim=1) correct += pred.eq(target).float().sum().item() # 给‘test’送入数据 viz.line([[test_loss, correct / len(test_loader.dataset)]], [global_step], win='test', update='append') # 可视化当前测试的数字图片 viz.images(data.view(-1, 1, 28, 28), win='x') # 可视化测试结果 viz.text(str(pred.detach().cpu().numpy()), win='pred', opts=dict(title='pred')) 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)))
执行成功后,在visdom网页可以看到实时更新的训练过程的数据变化
每一个epoch测试数据更新一次
- 点赞 1
- 收藏
- 分享
- 文章举报
- 深度学习计算机视觉实战(一) : 基于pytorch框架的MNIST手写数字识别详解(附源码)
- 数据挖掘入门系列教程(八)之使用神经网络(基于pybrain)识别数字手写集MNIST
- 用MXnet入门实战深度学习之一:安装GPU版mxnet并跑一个MNIST手写数字识别
- 学习笔记(02):轻松入门Tensorflow-手写数字识别案例小结
- torch入门笔记4:用torch实现MNIST手写数字识别
- PyTorch CNN实战之MNIST手写数字识别示例
- 用MXnet入门实战深度学习之一:安装GPU版mxnet并跑一个MNIST手写数字识别
- 用MXnet入门实战深度学习之一:安装GPU版mxnet并跑一个MNIST手写数字识别
- 使用Knn算法实现手写数字识别系统(附带jpg转txt代码)
- Keras入门课2 -- 使用CNN识别mnist手写数字
- Pytorch基础之——(七)用Pytorch完成手写数字识别
- 用MXnet入门实战深度学习之一:安装GPU版mxnet并跑一个MNIST手写数字识别
- 用MXnet入门实战深度学习之一:安装GPU版mxnet并跑一个MNIST手写数字识别
- 用MXnet入门实战深度学习之一:安装GPU版mxnet并跑一个MNIST手写数字识别
- MNIST-手写数字识别-TensorFlow&&Pytorch
- pytorch 利用lstm做mnist手写数字识别分类的实例
- 深度学习入门实战----基于Keras的手写数字识别(模型的保存与使用,json,weights)
- 用MXnet入门实战深度学习之一:安装GPU版mxnet并跑一个MNIST手写数字识别
- 用MXnet入门实战深度学习之一:安装GPU版mxnet并跑一个MNIST手写数字识别
- 用MXnet入门实战深度学习之一:安装GPU版mxnet并跑一个MNIST手写数字识别