文章目录

  • 一、Visdom

  • 安装与使用

  • 小案例

  • 二、TensorBoardX

  • 案例一

  • 案例二

  • 使用PROJECTOR对高维向量可视化

  • 绘制网络结构

一、Visdom

Visdom是Facebook在2017年发布的一款针对PyTorch的可视化工具。visdom由于其功能简单,一般会被定义为服务器端的matplot,也就是说我们可以直接使用python的控制台模式进行开发并在服务器上执行,将一些可视化的数据传送到Visdom服务上,通过Visdom服务进行可视化。
官网:https://github.com/facebookresearch/visdom

安装与使用

执行命令:pip install visdom安装即可。
使用命令:python \-m visdom.server 在本地启动服务器,启动后会提示It’s Alive! You can navigate to http://localhost:8097 这就说明服务已经可用。
输入地址:http://localhost:8097 即可看到页面。


此时终端:

(AI_PyTorch_GPU) E:\pytorch_AI>python -m visdom.server
Checking for scripts.
It's Alive!
INFO:root:Application Started
You can navigate to http://localhost:8097
INFO:tornado.access:200 GET / (::1) 14.96ms
INFO:tornado.access:200 GET /static/css/react-resizable-styles.css?v=9f91a8dbf4d8f7ef1399e625660405f4 (::1) 1.00ms
INFO:tornado.access:200 GET /static/css/react-grid-layout-styles.css?v=7dc8934d2f9ac5303b8f0bb1148152a0 (::1) 2.00ms
INFO:tornado.access:200 GET /static/js/bootstrap.min.js?v=5869c96cc8f19086aee625d670d741f9 (::1) 1.00ms
INFO:tornado.access:200 GET /static/js/react-react.min.js?v=bca103da5b5404d93783ccf73e0e9d1e (::1) 0.00ms
INFO:tornado.access:200 GET /static/fonts/layout_bin_packer?v=6c46683ed70fbb1443caf3531243836d (::1) 1.00ms
INFO:tornado.access:200 GET /static/css/bootstrap.min.css?v=ec3bb52a00e176a7181d454dffaea219 (::1) 188.49ms
INFO:tornado.access:200 GET /static/js/react-dom.min.js?v=950495cc51ccb90612cf0fe0bb44f8f3 (::1) 11.97ms
INFO:tornado.access:200 GET /static/js/jquery.min.js?v=e071abda8fe61194711cfc2ab99fe104 (::1) 5.98ms
INFO:tornado.access:200 GET /static/css/style.css?v=f1b2f4d2442b8263f30058d8085c1ab3 (::1) 1.02ms
INFO:tornado.access:200 GET /static/js/mathjax-MathJax.js?v=49565b9ce89c64da075a5a39969b366e (::1) 1.00ms
INFO:tornado.access:200 GET /static/js/main.js?v=4316a77ded15b92b6e884b60b72f6513 (::1) 21.94ms
INFO:tornado.access:200 GET /static/js/plotly-plotly.min.js?v=00dcca8ba45aab5f63dc7fc55a544d3d (::1) 81.78ms
INFO:tornado.access:200 GET /static/fonts/glyphicons-halflings-regular.woff2 (::1) 1.00ms
INFO:tornado.access:101 GET /socket (::1) 1.00ms
INFO:root:Opened new socket from ip: ::1
INFO:tornado.access:200 POST /env/main (::1) 0.99ms
INFO:tornado.access:200 POST /env/main (::1) 0.00ms
INFO:tornado.access:200 GET /favicon.png (::1) 2.99ms
INFO:tornado.access:200 GET /extensions/MathMenu.js?V=2.7.1 (::1) 2.03ms
INFO:tornado.access:200 GET /extensions/MathZoom.js?V=2.7.1 (::1) 1.96ms

端口8097是默认的端口可以在启动命令后加 -port参数指定端口,常用的参数还有 --hostname,-base_url等

Visdom的服务在启动时会自动下载一些静态文件,可能会有报错问题。这里直接复制到Lib\site-packages\visdom中即可。
C:\Anaconda3\envs\<"虚拟环境名">\Lib\site-packages\visdom
关于文件详情以及安装 详情请点击

Visdom是由Plotly 提供的可视化支持,所以提供一下可视化的接口

可视化接口:

vis.scatter : 2D 或 3D 散点图
vis.line : 线图
vis.stem : 茎叶图
vis.heatmap : 热力图
vis.bar : 条形图
vis.histogram: 直方图
vis.boxplot : 箱型图
vis.surf : 表面图
vis.contour : 轮廓图
vis.quiver : 绘出二维矢量场
vis.image : 图片
vis.text : 文本
vis.mesh : 网格图
vis.save : 序列化状态

小案例
import math
import numpy as np
from visdom import Visdom
import timeenv = Visdom()
assert env.check_connection() #测试一下链接,链接错误的话会报错
Y = np.linspace(0, 2 * math.pi, 70)
X = np.column_stack((np.sin(Y), np.cos(Y)))
env.stem(X=X,Y=Y,opts=dict(legend=['Sine', 'Cosine']))# 通过env参数指定Environments,如果名称包含了下划线,那么visdom会跟根据下划线分割并自动分组
envtest = Visdom(env='test_mesh')
assert envtest.check_connection()x = [0, 0, 1, 1, 0, 0, 1, 1]
y = [0, 1, 1, 0, 0, 1, 1, 0]
z = [0, 0, 0, 0, 1, 1, 1, 1]
X = np.c_[x, y, z]
i = [7, 0, 0, 0, 4, 4, 6, 6, 4, 0, 3, 2]
j = [3, 4, 1, 2, 5, 6, 5, 2, 0, 1, 6, 3]
k = [0, 7, 2, 3, 6, 7, 1, 1, 5, 5, 7, 6]
Y = np.c_[i, j, k]
envtest.mesh(X=X, Y=Y, opts=dict(opacity=0.5))# 更新损失函数
x,y=0,0
env2 = Visdom()
pane1= env2.line(X=np.array([x]),Y=np.array([y]),opts=dict(title='dynamic data'))for i in range(10):time.sleep(1)        # 每隔一秒钟打印一次数据x+=iy=(y+i)*1.5print(x,y)env2.line(X=np.array([x]),Y=np.array([y]),win=pane1,       # win参数确认使用哪一个paneupdate='append') # 我们做的动作是追加,除了追加意外还有其他方式

二、TensorBoardX

安装与使用 (依次执行如下命令)

pip install tensorboard    #安装tensorboard
pip install tensorboardx   #安装tensorboardxtensorboard --logdir runs
http://localhost:6006/    #在chrome浏览器中打开
案例一

项目地址:https://github.com/lanpa/tensorboardX

python examples/demo.py
tensorboard --logdir runs
http://localhost:6006/    #在chrome浏览器中打开

界面说明

  • SCALAR
    对标量数据进行汇总和记录,通常用来可视化训练过程中随着迭代次数准确率(val acc)、损失值(train/test loss)、学习率(learning rate)、每一层的权重和偏置的统计量(mean、std、max/min)等的变化曲线

  • IMAGES
    可视化当前轮训练使用的训练/测试图片或者 feature maps

  • GRAPHS
    可视化计算图的结构及计算图上的信息,通常用来展示网络的结构

  • HISTOGRAMS
    可视化张量的取值分布,记录变量的直方图(统计张量随着迭代轮数的变化情况)

  • PROJECTOR
    全称Embedding Projector 高维向量进行可视化

  • 使用
    在使用前请先去确认执行tensorboard --logdir logs 并保证 http://localhost:6006/ 页面能够正常打开。tensorboard 使用详情请点击

案例二
import torch
import numpy as np
import torch.nn as nn
import torch.nn.functional as F
from PIL import Image
from torch.utils.data import DataLoader
from torchvision import transforms
from torchvision import models,datasets
from tensorboardX import SummaryWritercat_img = Image.open('./Felis_silvestris_catus_lying_on_rice_straw.jpg')transform_224 = transforms.Compose([transforms.Resize(224),transforms.CenterCrop(224),transforms.ToTensor(),])
cat_img_224=transform_224(cat_img)# 将图片展示在tebsorboard中:
writer = SummaryWriter(log_dir='./logs', comment='cat image') # 这里的logs要与--logdir的参数一样
writer.add_image("cat",cat_img_224)
writer.close()# 执行close立即刷新,否则将每120秒自动刷新# 更新损失函数
# 更新损失函数和训练批次我们与visdom一样使用模拟展示,这里用到的是tensorboard的SCALAR页面
x = torch.FloatTensor([100])
y = torch.FloatTensor([500])for epoch in range(100):x /= 1.5y /= 1.5loss = y - xwith SummaryWriter(log_dir='./logs', comment='train') as writer: #with语法:自动调用close方法writer.add_histogram('his/x', x, epoch)writer.add_histogram('his/y', y, epoch)writer.add_scalar('data/x', x, epoch)writer.add_scalar('data/y', y, epoch)writer.add_scalar('data/loss', loss, epoch)writer.add_scalars('data/data_group', {'x': x,'y': y,'loss': loss}, epoch)

查看图像:

  • 方法一:
    激活环境 --> 进入logs目录 -->执行命令 --> chrome下打开http://localhost:8080/

    (AI_PyTorch_GPU) E:\pytorch_AI\logs>tensorboard --logdir=E:\\pytorch_AI\\logs --port=8080
    TensorBoard 1.12.2 at http://DESKTOP-JQI7IBN:8080 (Press CTRL+C to quit)
    

    如图:

  • 方法二:
    激活环境 --> 进入logs父目录 -->执行命令 --> chrome下打开http://localhost:6006/

    (AI_PyTorch_GPU) E:\pytorch_AI>tensorboard --logdir logs
    TensorBoard 1.12.2 at http://DESKTOP-JQI7IBN:6006 (Press CTRL+C to quit)
    

    如图:

使用PROJECTOR对高维向量可视化

PROJECTOR的的原理是通过PCA,T-SNE等方法将高维向量投影到三维坐标系(降维度)。Embedding Projector从模型运行过程中保存的checkpoint文件中读取数据,默认使用主成分分析法(PCA)将高维数据投影到3D空间中,也可以通过设置设置选择T-SNE投影方法,这里做一个简单的展示。

import torch
import torch.nn as nn
import torch.nn.functional as F
from torch.utils.data import DataLoader
from torchvision import transforms
from torchvision import datasets
from tensorboardX import SummaryWriter""" ==================使用PROJECTOR对高维向量可视化====================PROJECTOR的的原理是通过PCA,T-SNE等方法将高维向量投影到三维坐标系(降维度)。Embedding Projector从模型运行过程中保存的checkpoint文件中读取数据,默认使用主成分分析法(PCA)将高维数据投影到3D空间中,也可以通过设置设置选择T-SNE投影方法,这里做一个简单的展示。
"""BATCH_SIZE=256
EPOCHS=20
DEVICE = torch.device("cuda" if torch.cuda.is_available() else "cpu")train_loader = DataLoader(datasets.MNIST('./mnist', train=True, download=False,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('./mnist', train=False, transform=transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.1307,), (0.3081,))])),batch_size=BATCH_SIZE, shuffle=True)class ConvNet(nn.Module):def __init__(self):super().__init__()# 1,28x28self.conv1=nn.Conv2d(1,10,5)  # 10, 24x24self.conv2=nn.Conv2d(10,20,3) # 128, 10x10self.fc1 = nn.Linear(20*10*10,500)self.fc2 = nn.Linear(500,10)def forward(self,x):in_size = x.size(0)out = self.conv1(x)            #24out = F.relu(out)out = F.max_pool2d(out, 2, 2)  #12out = self.conv2(out)          #10out = F.relu(out)out = out.view(in_size,-1)out = self.fc1(out)out = F.relu(out)out = self.fc2(out)out = F.log_softmax(out,dim=1)return out
model = ConvNet().to(DEVICE)
optimizer = torch.optim.Adam(model.parameters())def train(model, DEVICE,train_loader, optimizer, epoch):n_iter=0model.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+1)%30 == 0:n_iter=n_iter+1print('Train Epoch: {} [{}/{} ({:.0f}%)]\t Loss: {:.6f}'.format(epoch, batch_idx * len(data), len(train_loader.dataset),100. * batch_idx / len(train_loader), loss.item()))#主要增加了一下内容out = torch.cat((output.data.cpu(), torch.ones(len(output), 1)), 1) # 因为是投影到3D的空间,所以我们只需要3个维度with SummaryWriter(log_dir='./pytorch_tensorboardX_03_logs', comment='mnist') as writer:#使用add_embedding方法进行可视化展示writer.add_embedding(out,metadata=target.data,label_img=data.data,global_step=n_iter)def test(model, device, test_loader):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, reduction='sum').item() # 损失相加pred = output.max(1, keepdim=True)[1]                           # 找到概率最大的下标correct += pred.eq(target.view_as(pred)).sum().item()test_loss /= len(test_loader.dataset)print('\n Test set: Average loss: {:.4f}, Accuracy: {}/{} ({:.0f}%)\n'.format(test_loss, correct, len(test_loader.dataset),100. * correct / len(test_loader.dataset)))for epoch in range(1, EPOCHS + 1):train(model, DEVICE, train_loader, optimizer, epoch)test(model, DEVICE, test_loader)# 保存模型
torch.save(model.state_dict(), './pytorch_tensorboardX_03.pth')
# Test set: Average loss: 0.0400, Accuracy: 9913/10000 (99%)

如上代码直接点击运行。
可视化展示:

(AI_PyTorch_GPU) E:\pytorch_AI>tensorboard --logdir pytorch_tensorboardX_03_logs
TensorBoard 1.12.2 at http://DESKTOP-JQI7IBN:6006 (Press CTRL+C to quit)

复制http://localhost:6006/到chrome打开:

绘制网络结构
import torch
import numpy as np
from torchvision import models,transforms
from PIL import Image
from tensorboardX import SummaryWritervgg16 = models.vgg16() # 这里下载预训练好的模型
print(vgg16)           # 打印一下这个模型transform_2 = transforms.Compose([transforms.Resize(224),transforms.CenterCrop(224),transforms.ToTensor(),# convert RGB to BGR# from <https://github.com/mrzhu-cool/pix2pix-pytorch/blob/master/util.py>transforms.Lambda(lambda x: torch.index_select(x, 0, torch.LongTensor([2, 1, 0]))),transforms.Lambda(lambda x: x*255),transforms.Normalize(mean = [103.939, 116.779, 123.68],std = [ 1, 1, 1 ]),
])cat_img = Image.open('./Felis_silvestris_catus_lying_on_rice_straw.jpg')
vgg16_input=transform_2(cat_img)[np.newaxis]# 因为pytorch的是分批次进行的,所以我们这里建立一个批次为1的数据集
print(vgg16_input.shape)# 开始前向传播,打印输出值
raw_score = vgg16(vgg16_input)
raw_score_numpy = raw_score.data.numpy()
print(raw_score_numpy.shape, np.argmax(raw_score_numpy.ravel()))# 将结构图在tensorboard进行展示
with SummaryWriter(log_dir='./vgg16_logs', comment='vgg16') as writer:writer.add_graph(vgg16, (vgg16_input,))
(AI_PyTorch_GPU) E:\pytorch_AI>tensorboard --logdir vgg16_logs
TensorBoard 1.12.2 at http://DESKTOP-JQI7IBN:6006 (Press CTRL+C to quit)

visdom TensorboardX进行可视化-包括对高维特征可视化(T-SNE PCA等)相关推荐

  1. 文件可视化编辑_高维数据可视化必备图形平行坐标图

    作者:科研猫 | 小飞鼠 责编:科研猫 | 依米 如果我们想比较某个数值在不同分组之间的变化差异.或者随着时间序列的变化趋势,往往会用到折线图.折线图是在我们的科研绘图当中最为常用的图形之一. 正如在 ...

  2. GoogleNet是怎么理解图像的?谷歌大神教你读懂「神经特征可视化」

    来源:雷克世界 编译:嗯~阿童木呀 概要:特征可视化使我们能够看到在ImageNet数据集上训练的GoogLeNet是如何构建对多层图像的理解的. 边缘(层 conv2d0) 纹理(层 mixed3a ...

  3. 特征可视化 Feature Visualization

    Feature Visualization::https://distill.pub/2017/feature-visualization/ tensorlow中tensorboard可视化展示训练过 ...

  4. PyTorch之—可视化(Visdom/TensorboardX)

    文章目录 一.Visdom 安装与使用 小案例 二.TensorBoardX 案例一 案例二 使用PROJECTOR对高维向量可视化 绘制网络结构 一.Visdom Visdom是Facebook在2 ...

  5. 【数据可视化】复杂高维多元数据的可视化

    1 高维多元数据 每个数据对象有两个或两个以上独立或者相关属性的数据.高维指数据具有多个独立属性,多元指数据具有多个相关属性.由于研究者在很多情况下不确定数据的属性是否独立,因此通常简单地称之为多元数 ...

  6. pytorch 神经网络特征可视化

    可参考博客 Pytorch可视化模型任意中间层的类激活热力图(Grad-CAM)_潜行隐耀的博客-CSDN博客_pytorch热力图 Pytorch输出网络中间层特征可视化_Joker-Tong的博客 ...

  7. OpenAI和Google特征可视化新技术:用激活地图集(Activation Atlases)探索神经网络

    本文介绍OpenAI和Google特征可视化新技术:用激活地图集(Activation Atlases)探索神经网络 Exploring Neural Networks with Activation ...

  8. 神经网络特征可视化新技术:用激活地图集(Activation Atlases)探索神经网络

    本文介绍OpenAI和Google特征可视化新技术:用激活地图集探索神经网络 Exploring Neural Networks with Activation Atlases 原文链接:<ht ...

  9. 降维后的高维特征的参数_高维超参数调整简介

    降维后的高维特征的参数 by Thalles Silva 由Thalles Silva 高维超参数调整简介 (An introduction to high-dimensional hyper-par ...

最新文章

  1. 实现计时、时钟,实时获取当前年月日时分秒,记录时间(获取当前的时间,开始计时,计时过程相当于你的电脑时钟)0000年00月00日 00:00:00
  2. 宏基因组实战4. 基因注释Prokka
  3. 添加服务引用的本质是什么?
  4. Matlab中legend位置
  5. android四中启动模式
  6. python 生成器笔记
  7. 利用curl 多线程 模拟 并发的详解
  8. python工作目录_如何使用python 3获取当前工作目录?
  9. 实现值两者之间添加 , 、 | 等字符
  10. solr 启动、停止
  11. 深度学习数据集制作_一篇文章搞定人工智能之深度学习创建训练数据集的方法
  12. JSP实用教程(3)——Tag文件和Tag标记
  13. 自动驾驶仿真(二)—— 基于PreScan与Simulink的联合仿真
  14. ftp常用命令(windows cmd中使用示例)
  15. 哪些英语用法是普通中国学生最生疏的?
  16. python爬取微信公众号network_python如何爬取搜狗微信公众号文章永久链接的思路解析...
  17. 全息成像与集成成像原理
  18. pdf文件展示盖章及下载
  19. 华中科技大学网络教材
  20. 华为:将在员工绩效考核中增加“伙伴满意度”选项;谷歌研究员“走火入魔”,被罚带薪休假;魅族回应被吉利收购 | EA周报...

热门文章

  1. 使用Python中的matplotlib将多个图片显示到一张图内
  2. 计算机专业读研外文文献怎么找,计算机专业学术论文参考文献推荐 计算机专业学术外文文献怎么找...
  3. php网页爬虫-简单的类
  4. linux下通过SD卡烧录.bin程序
  5. 选择 FreeBSD 而不是 Linux 的技术性原因
  6. 获取和清除cookie
  7. caffe-ristretto:定点方案
  8. markdown语法之表格
  9. socket连接 error 113 /111 的解决方法
  10. 使用Python预测黄金AU9999收盘价