pytorch 训练过程acc_pytorch应用(四)训练过程可视化visdom
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相关推荐
- pytorch 训练过程acc_Pytorch之Softmax多分类任务
在上一篇文章中,笔者介绍了什么是Softmax回归及其原理.因此在接下来的这篇文章中,我们就来开始动手实现一下Softmax回归,并且最后要完成利用Softmax模型对Fashion MINIST进行 ...
- Mask R-CNN 训练自己的数据集(balloon过程+报错解释)
因项目需要,识别带有多边形标注的图像,舍弃了速度快精度高的yolov3,使用Mask R-CNN网络.作为一名深度学习小白,在摸爬滚打中查找资料修改代码以及不断地调整训练集,途中踩了不少坑,终于达到预 ...
- 神经网络训练的一般步骤,神经网络训练过程详解
1.想要学习人工神经网络,需要什么样的基础知识? 人工神经网络理论百度网盘下载: 链接:https://pan.baidu.com/s/1Jcg4s2ETCrag2Vo-OA57Og 提取码:rxlc ...
- bp神经网络训练函数选择,BP神经网络训练过程
BP神经网络的训练集需要大样本吗?一般样本个数为多少? BP神经网络的训练集需要大样本吗?一般样本个数为多少? BP神经网络样本数有什么影响学习神经网络这段时间,有一个疑问,BP神经网络中训练的次数指 ...
- pytorch 7 optimizer 优化器 加速训练
pytorch 7 optimizer 优化器 加速训练 import torch import torch.utils.data as Data import torch.nn.functional ...
- 文本分类入门(四)训练Part 1
文本分类入门(四)训练Part 1 训练,顾名思义,就是training(汗,这解释),简单的说就是让计算机从给定的一堆文档中自己学习分类的规则(如果学不对的话,还要,打屁屁?). 开始训练之前,再多 ...
- pytorch指定用多张显卡训练_Pytorch中多GPU训练指北
前言 在数据越来越多的时代,随着模型规模参数的增多,以及数据量的不断提升,使用多GPU去训练是不可避免的事情.Pytorch在0.4.0及以后的版本中已经提供了多GPU训练的方式,本文简单讲解下使用P ...
- pytorch建立mobilenetV3-ssd网络并进行训练与预测
pytorch建立mobilenetV3-ssd网络并进行训练与预测 前言 Step1:搭建mobilenetV3-ssd网络框架 需要提前准备的函数和类. mobilenetV3_large 调用m ...
- (四)训练运行Deep CycleGAN以进行移动风格迁移
目录 介绍 训练周期GAN 评估CycleGAN 季节更替CycleGAN 下一步 下载项目代码 - 7.2 MB 介绍 在本系列文章中,我们将展示一个基于循环一致对抗网络(CycleGAN)的移动图 ...
- 1.Pytorch框架下使用yolov3-tiny网络模型 训练自己的数据集
在Pytorch框架下使用yolov3-tiny网络模型 ,训练自己的数据集 1.本文参考链接如下: https://blog.csdn.net/gbz3300255/article/details/ ...
最新文章
- malloc函数具体解释
- 青鸟IT汇微信公众号新增智能机器人
- 病人排队(信息学奥赛一本通-T1183)
- 基于mini2440的两种触屏中断程序(T35)
- java代码自动生成
- CSDN用户数据库泄露事件给我们的启示
- android申请蓝牙动态权限,Android权限动态申请
- 蓝牙iBeacon工作原理
- Aug.2019_Memory
- html文档成品,HTML成品代码
- win10系统怎么qq远程连接到服务器,QQ远程控制功能在Win10系统上无法使用怎么解决...
- 【教程】Ubuntu20.04 + VirtualBox 各种软件环境安装
- 基于语料库的汉语形容词宾语与名词句法语义关系分析
- 打印机审计产品的一种思路
- 关于在VM安装CentOS的经验总结
- 微软预览word_如何在Microsoft Word中更改语言
- Java 排序 - 冒泡排序
- ORY Hydra项目详解
- 为什么Integer a=100,b=100时候a==b返回true,而Integer c=1000,d=1000时候c==d返回false
- 这些数据知识库至少够你用10年(关键还免费)
热门文章
- PowerPC 汇编
- Java的GUI学习八(键盘码查询器)
- linux shell将字符串分割数组
- vue脚手架实现选项卡_从零一步步实现一个前端脚手架
- apk逆向思路_Java语言的逆向(Android APP)
- sql与MySQL like用法_MySQL中Like概念及用法讲解
- 计算机应用基础论坛发帖,计算机应用基础串讲冲刺讲义(一)_IT教育论坛_计算机学习论坛_学赛网_IT在线教育平台...
- android 获取已安装的应用大小,Android获得已安装应用大小
- 多线程 空值线程数_跳槽涨薪季面试题之多线程(三)
- Linux自动配置部署,企业级自动化部署方案——ansible实现tomcat自动安装和配置,...