visdom的安装

参考链接:

https://blog.csdn.net/qq_36104364/article/details/88956717

https://blog.csdn.net/weixin_41735859/article/details/88777217

1.安装

sudo pip install visdom

2.打开服务器

python -m visdom.server

3.正常的话应该出现如下内容

4.这里提示cryptography版本过低,其实没有什么影响,但是还是进行了更新

sudo pip install --upgrade cryptography

#提示类似错误:AttributeError: ‘module’ object has no attribute ‘SSL_ST_INIT’

sudo python -m easy_install --upgrade pyOpenSSL

5.然后打开浏览器,在地址栏中输入上图中最后一行显示的网址 “http://localhost:8097”(根据自己的情况而定)

6.正常的话应该进入如下的界面

7.原文说可能遇到文件缺失,我并没有遇到,安装成功

visdom初级使用

import visdom

import numpy as np

# vis = visdom.Visdom()

# vis.text('Hello, world!')

# vis.image(np.ones((3, 100, 100)))

# vis = visdom.Visdom(env='my_windows')

# x = list(range(10))

# y = list(range(10))

# vis.line(X=np.array(x), Y=np.array(y), opts=dict(showlegend=True))

# vis = visdom.Visdom(env='my_windows')

# x = list(range(10))

# y = list(range(10))

# z = list(range(1,11))

# vis.line(X=np.array(x), Y=np.column_stack((np.array(y), np.array(z))), opts=dict(showlegend=True))

vis = visdom.Visdom(env='my_windows')

x = 0

y = 0

my_win = vis.line(X=np.array([x]), Y=np.array([y]), opts=dict(title='Update'))

for i in range(10):

x += 1

y += i

vis.line(X=np.array([x]), Y=np.array([y]), win=my_win, update='append')

简单操作,试一下好不好用

实际应用

1.显示数据集中的图片

#创建窗口

viz = visdom.Visdom(env='train-CIFAR10')

#显示图片,通过迭代器取出第一个mini_batch并且把这batch的图片拼成一张大图

viz.image(torchvision.utils.make_grid(next(iter(train_data))[0], nrow=8), win='train-image')

torchvision.utils.make_grid(tensor, nrow=8, padding=2, normalize=False, range=None, scale_each=False, pad_value=0)

tensor (Tensororlist) –4D mini-batch Tensor of shape (B x C x H x W) or a list of images all of the same size.

nrow (int,optional) – Number of images displayed in each row of the grid. The Final grid size is (B / nrow, nrow). Default is 8.

padding (int,optional) – amount of padding. Default is 2.

normalize (bool,optional) – If True, shift the image to the range (0, 1), by subtracting the minimum and dividing by the maximum pixel value.

range (tuple,optional) – tuple (min, max) where min and max are numbers, then these numbers are used to normalize the image. By default, min and max are computed from the tensor.

scale_each (bool,optional) – If True, scale each image in the batch of images separately rather than the (min, max) over all images.

pad_value (float,optional) – Value for the padded pixels.

关于make_grid函数的讲解:https://www.cnblogs.com/aoru45/p/10629025.html

关于iter()的讲解:https://blog.csdn.net/li1615882553/article/details/79360172

2.显示loss、accuracy

1)train_acc

train_total:目前为止有多少数据送到网络里进行了训练

train_correct:经过前向传播以后预测正确的样本数

每个epoch开始train_total清零,每个iteration开始train_total加上batch_size

每个epoch开始train_correct清零,每个iteration结束train_correct加上本次预测正确的数量

每个iteration结束计算train_correct / train_total,就是当前训练的准确率

这种算法是不正确的,因为每个mini_batch的训练都会对参数做出优化,所以train_acc应该在每个min_batch里算,即:

本次mini_batch中预测正确数running_correct除以batch_size(running_correct / batch_size)

#本次iteration中预测正确的数量

running_correct = (pred == label).sum().data.cpu()

#除以本次训练所用样本数量

tr_acc = float(running_correct) / label.size(0)

2)test_acc

每进行200次训练,进行一次测试,计算准确率,这个过程和上边说的那种不对的方法是一样的

if i % 200 == 0:#当进行了200次训练后

# 进行测试,首先进行归零

ts_total = 0

ts_correct = 0

for inputs,labels in test_data:

inputs = inputs.cuda()

labels = labels.cuda()

net.eval()

outputs = net(inputs)

_, prediction = torch.max(outputs, 1)

#测试中本次iteration中预测正确的数量

ts_correct += (prediction == labels).sum().data.cpu()

#本次iteration后总测试样本数量增加了batch_size个

ts_total += labels.size(0)

#准确率为目前为止测试正确的样本总数除以进行了测试的样本总数

ts_acc = float(ts_correct)/ts_total

3)train_loss

每个iteration里直接把loss输出就可以了

#计算loss进行反向传播,此处默认为mini_batch的平均loss

loss = criterion(out, label)

optimizer.zero_grad() # reset the gradient

loss.backward()

optimizer.step()

#本次iteration中的loss直接输出就可以了

tr_loss = loss.data

3.visdom画线

plot.line

这个函数用来画 线图。它需要一个形状为N或者N×M的tensor Y,用来指定 M条线的值(每条线上有N个点)。和一个可供选择的 tensor X 用来指定对应的 x轴的值; X可以是一个长度为N的tensor(这种情况下,M条线共享同一个 x轴),也可以是形状和Y一样的tensor。

所以说Y是必须的,可以是一个维:一条线上的N个点

可以是一个NXM维:M条线,每条线上的N个点

1).长度为N的向量Y

viz = visdom.Visdom(env='my_windows')

y=np.random.rand(10)

viz.line(Y=y)

print(y)

print(type(y))

print(y.shape)

>>>[0.92547514 0.1330522 0.86590528 0.19810879 0.85298911 0.72697041

0.47156944 0.67554992 0.41820009 0.47531884]

>>>>>>(10,)

可以看到,一共10个点,9条线,Y轴坐标就是Y的值,X轴坐标是0到1均匀分布(用y=np.random.rand(100)进行了验证)

2).NXM维向量Y

viz = visdom.Visdom(env='my_windows')

y1=np.random.rand(10)

y2=np.random.rand(10)

y = np.column_stack((y1,y2))

viz.line(Y=y)

print(y)

print(type(y))

print(y.shape)

>>>[[0.72026344 0.44266446]

[0.50660761 0.61611835]

[0.09468318 0.02341496]

[0.10970412 0.4309315 ]

[0.28817805 0.20979975]

[0.37569748 0.65329589]

[0.9862575 0.47113639]

[0.56578969 0.83928822]

[0.93971474 0.56504222]

[0.82374676 0.44717981]]

>>>>>>(10, 2)

可以看到就是刚才的线画了两条,所以这里column_stack的作用就是在同一张图上画多条线

3).长度为N的向量Y、长度为N的向量X

viz = visdom.Visdom(env='my_windows')

y=np.random.rand(10)

x=np.random.rand(10)

viz.line(X=x,Y=y)

print(y)

print(type(y))

print(y.shape)

print(x)

print(type(x))

print(x.shape)

>>>[0.5245108 0.02636458 0.53726694 0.90884771 0.53928544 0.14314678

0.09001705 0.56826278 0.22983814 0.95068692]

>>>>>>(10,)

>>>[0.70339366 0.40876747 0.06640855 0.9302397 0.62631973 0.36839199

0.16045358 0.40951232 0.56444878 0.20747185]

>>>>>>(10,)

添加X以后改变的是横坐标,没有X时横坐标是0到1均匀分布,有了X以后横坐标就是对应的X值,所以X长度也要是N

4).NXM维向量Y、NXM维向量X

viz = visdom.Visdom(env='my_windows')

y1=np.random.rand(10)

y2=np.random.rand(10)

y = np.column_stack((y1,y2))

x1 = np.linspace(0, 10, 10)

x2 = np.linspace(10, 50, 10)

x = np.column_stack((x1,x2))

viz.line(X=x,Y=y)

print(y)

print(type(y))

print(y.shape)

print(x)

print(type(x))

print(x.shape)

>>>[[0.51131919 0.71606353]

[0.47654122 0.74981154]

[0.32802854 0.02204193]

[0.67049126 0.86551808]

[0.78512542 0.53473589]

[0.27507499 0.75626246]

[0.61938654 0.13058733]

[0.82682454 0.28227554]

[0.28311043 0.66463922]

[0.03722072 0.54953736]]

>>>>>>(10, 2)

>>>[[ 0. 10. ]

[ 1.11111111 14.44444444]

[ 2.22222222 18.88888889]

[ 3.33333333 23.33333333]

[ 4.44444444 27.77777778]

[ 5.55555556 32.22222222]

[ 6.66666667 36.66666667]

[ 7.77777778 41.11111111]

[ 8.88888889 45.55555556]

[10. 50. ]]

>>>>>>(10, 2)

可以看到这和第2中操作基本相同,就是在同一张图上画多条线,这里用np.linspace(0, 10, 10)也是在设定X轴

5).实例

初始创建一系列存放数据的列表

每个循环中把要存放的数据append到初始列表中

X,Y轴分别进行column_stack

viz.line,不使用update参数

#一同做append操作可以保证X,Y长度都为N

time_p.append(time.time() - start_time)

tr_acc.append(sum_acc / sum_step)

ts_acc.append(acc)

loss_p.append(sum_loss / sum_step)

#为三条线指定X轴,这里都是时间,所以就是三个np.array(time_p)堆叠起来

#为三条线指定Y轴

#指定显示窗口

#线形注解

viz.line(X=np.column_stack((np.array(time_p), np.array(time_p), np.array(time_p))),

Y=np.column_stack((np.array(loss_p), np.array(tr_acc), np.array(ts_acc))),

win=line,

opts=dict(legend=["Loss", "TRAIN_acc", "TEST_acc"]))

参考链接:

https://www.cnblogs.com/king-lps/p/8973824.html

https://www.pytorchtutorial.com/using-visdom-for-visualization-in-pytorch/#plotline

https://blog.csdn.net/u013555719/article/details/83989987

pytorch 训练过程acc_pytorch应用(四)训练过程可视化visdom相关推荐

  1. pytorch 训练过程acc_Pytorch之Softmax多分类任务

    在上一篇文章中,笔者介绍了什么是Softmax回归及其原理.因此在接下来的这篇文章中,我们就来开始动手实现一下Softmax回归,并且最后要完成利用Softmax模型对Fashion MINIST进行 ...

  2. Mask R-CNN 训练自己的数据集(balloon过程+报错解释)

    因项目需要,识别带有多边形标注的图像,舍弃了速度快精度高的yolov3,使用Mask R-CNN网络.作为一名深度学习小白,在摸爬滚打中查找资料修改代码以及不断地调整训练集,途中踩了不少坑,终于达到预 ...

  3. 神经网络训练的一般步骤,神经网络训练过程详解

    1.想要学习人工神经网络,需要什么样的基础知识? 人工神经网络理论百度网盘下载: 链接:https://pan.baidu.com/s/1Jcg4s2ETCrag2Vo-OA57Og 提取码:rxlc ...

  4. bp神经网络训练函数选择,BP神经网络训练过程

    BP神经网络的训练集需要大样本吗?一般样本个数为多少? BP神经网络的训练集需要大样本吗?一般样本个数为多少? BP神经网络样本数有什么影响学习神经网络这段时间,有一个疑问,BP神经网络中训练的次数指 ...

  5. pytorch 7 optimizer 优化器 加速训练

    pytorch 7 optimizer 优化器 加速训练 import torch import torch.utils.data as Data import torch.nn.functional ...

  6. 文本分类入门(四)训练Part 1

    文本分类入门(四)训练Part 1 训练,顾名思义,就是training(汗,这解释),简单的说就是让计算机从给定的一堆文档中自己学习分类的规则(如果学不对的话,还要,打屁屁?). 开始训练之前,再多 ...

  7. pytorch指定用多张显卡训练_Pytorch中多GPU训练指北

    前言 在数据越来越多的时代,随着模型规模参数的增多,以及数据量的不断提升,使用多GPU去训练是不可避免的事情.Pytorch在0.4.0及以后的版本中已经提供了多GPU训练的方式,本文简单讲解下使用P ...

  8. pytorch建立mobilenetV3-ssd网络并进行训练与预测

    pytorch建立mobilenetV3-ssd网络并进行训练与预测 前言 Step1:搭建mobilenetV3-ssd网络框架 需要提前准备的函数和类. mobilenetV3_large 调用m ...

  9. (四)训练运行Deep CycleGAN以进行移动风格迁移

    目录 介绍 训练周期GAN 评估CycleGAN 季节更替CycleGAN 下一步 下载项目代码 - 7.2 MB 介绍 在本系列文章中,我们将展示一个基于循环一致对抗网络(CycleGAN)的移动图 ...

  10. 1.Pytorch框架下使用yolov3-tiny网络模型 训练自己的数据集

    在Pytorch框架下使用yolov3-tiny网络模型 ,训练自己的数据集 1.本文参考链接如下: https://blog.csdn.net/gbz3300255/article/details/ ...

最新文章

  1. malloc函数具体解释
  2. 青鸟IT汇微信公众号新增智能机器人
  3. 病人排队(信息学奥赛一本通-T1183)
  4. 基于mini2440的两种触屏中断程序(T35)
  5. java代码自动生成
  6. CSDN用户数据库泄露事件给我们的启示
  7. android申请蓝牙动态权限,Android权限动态申请
  8. 蓝牙iBeacon工作原理
  9. Aug.2019_Memory
  10. html文档成品,HTML成品代码
  11. win10系统怎么qq远程连接到服务器,QQ远程控制功能在Win10系统上无法使用怎么解决...
  12. 【教程】Ubuntu20.04 + VirtualBox 各种软件环境安装
  13. 基于语料库的汉语形容词宾语与名词句法语义关系分析
  14. 打印机审计产品的一种思路
  15. 关于在VM安装CentOS的经验总结
  16. 微软预览word_如何在Microsoft Word中更改语言
  17. Java 排序 - 冒泡排序
  18. ORY Hydra项目详解
  19. 为什么Integer a=100,b=100时候a==b返回true,而Integer c=1000,d=1000时候c==d返回false
  20. 这些数据知识库至少够你用10年(关键还免费)

热门文章

  1. PowerPC 汇编
  2. Java的GUI学习八(键盘码查询器)
  3. linux shell将字符串分割数组
  4. vue脚手架实现选项卡_从零一步步实现一个前端脚手架
  5. apk逆向思路_Java语言的逆向(Android APP)
  6. sql与MySQL like用法_MySQL中Like概念及用法讲解
  7. 计算机应用基础论坛发帖,计算机应用基础串讲冲刺讲义(一)_IT教育论坛_计算机学习论坛_学赛网_IT在线教育平台...
  8. android 获取已安装的应用大小,Android获得已安装应用大小
  9. 多线程 空值线程数_跳槽涨薪季面试题之多线程(三)
  10. Linux自动配置部署,企业级自动化部署方案——ansible实现tomcat自动安装和配置,...