Pytorch-属性统计

2023-05-16

引言

本篇介绍Pytorch属性统计的几种方式。

统计属性

求值或位置

  • norm
  • mean sum
  • prod
  • max, min, argmin, argmax
  • kthvalue, topk

norm

norm 与 normalize

  • norm指的是范数,并不是normalize。
  • normalize是归一化,例如 batch_norm。

matrix norm 与 vector norn

要更好的理解范数,就要从函数、几何与矩阵的角度去理解。
我们都知道,函数与几何图形往往是有对应的关系,这个很好想象,特别是在三维以下的空间内,函数是几何图像的数学概括,而几何图像是函数的高度形象化,比如一个函数对应几何空间上若干点组成的图形。
但当函数与几何超出三维空间时,就难以获得较好的想象,于是就有了映射的概念,映射表达的就是一个集合通过某种关系转为另外一个集合。通常数学书是先说映射,然后再讨论函数,这是因为函数是映射的一个特例。
为了更好的在数学上表达这种映射关系,(这里特指线性关系)于是就引进了矩阵。这里的矩阵就是表征上述空间映射的线性关系。而通过向量来表示上述映射中所说的这个集合,而我们通常所说的基,就是这个集合的最一般关系。于是,我们可以这样理解,一个集合(向量),通过一种映射关系(矩阵),得到另外一个几何(另外一个向量)

  • 向量的范数,就是表示这个原有集合的大小

  • 矩阵的范数,就是表示这个变化过程的大小的一个度量

总结起来一句话,范数(norm),是具有“长度”概念的函数

![Vector Norm and Matrix Norm](Pytorch-属性统计/Vector Norm and Matrix Norm.jpg)

推荐阅读 向量范数与矩阵范数, 机器学习下的各种norm到底是个什么东西?, 机器学习中的范数规则化之(一)L0、L1与L2范数.

在做 gradient clipping 的时候,需要查看weight 的 gradient norm 如果太大的话就需要做 gradient clipping(使用clamp)

norm-p

  • 1-Norm就是所有元素的绝对值之和

  • 2-Norm就是所有元素的平方和并开根号

  • 不加dim参数,默认所有维度

  • 从shape出发,加入dim后,这个dim就会消失(做Norm)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42

In[3]: a = torch.full([8],1)
In[4]: b = a.view(2,4)
In[5]: c = a.view(2,2,2)
In[6]: b
Out[6]:
tensor([[1., 1., 1., 1.],
[1., 1., 1., 1.]])
In[7]: c
Out[7]:
tensor([[[1., 1.],
[1., 1.]],

[[1., 1.],
[1., 1.]]])

In[8]: a.norm(1), b.norm(1), c.norm(1)
Out[8]: (tensor(8.), tensor(8.), tensor(8.))
In[9]: a.norm(2), b.norm(2), c.norm(2)
Out[9]: (tensor(2.8284), tensor(2.8284), tensor(2.8284))

In[10]: b.norm(1,dim=1)
Out[10]: tensor([4., 4.]) # 就shape来讲 [2,4] norm之后 --> [2]
In[16]: b.norm(1,dim=0)
Out[16]: tensor([2., 2., 2., 2.]) # shape [2,4] ---> [4]

In[11]: b.norm(2,dim=1)
Out[11]: tensor([2., 2.])

In[12]: c.norm(1,dim=0) # [2,2,2] 在0维度做求1范数,那么这个维度就将消掉,得到shape为[2,2]
Out[12]:
tensor([[2., 2.],
[2., 2.]])
In[14]: c.norm(2,dim=0)
Out[14]:
tensor([[1.4142, 1.4142],
[1.4142, 1.4142]])
# 位置[0,0,0] 与 [1,0,0]
[[[1., .],
[ ., .]],

[[1., .],
[ ., .]]]

mean,sum,min,max,prod

  • max() 求最大的值

  • min() 求最小的值

  • mean() 求平均值 mean = sum / size

  • prod() 累乘

  • sum() 求和

  • argmax() 返回最大值元素的索引

  • argmin() 返回最大值元素的索引

  • argmax(dim=l)l 维中,最大元素的位置,这样的话这一维将消失。

note:以上这些,如果不加参数,会先打平,在计算,所以对于 argmax 和 argmin来说得到的是打平后的索引。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

In[18]: a = torch.arange(8).view(2,4).float()		# 假设我们生成一组 gradient
In[19]: a
Out[19]:
tensor([[0., 1., 2., 3.], # 想要做clipping,先要知道它的最大最小值
[4., 5., 6., 7.]])
In[20]: a.min(), a.max(), a.mean(), a.prod()
Out[20]: (tensor(0.), tensor(7.), tensor(3.5000), tensor(0.))

In[21]: a.sum()
Out[21]: tensor(28.)

In[22]: a.argmax()
Out[22]: tensor(7)
In[23]: a.argmin()
Out[23]: tensor(0)

In[24]: a = torch.randn(4,10) # 假设生成4张手写体数字照片的概率(发生过偏移)
In[25]: a[0]
Out[25]:
tensor([ 0.0234, 0.6830, -0.1518, 0.4595, -1.5634, 0.5534, 0.9934, -1.1536,
0.3124, -1.4103])
In[26]: a.argmax() # 打平成一个1维的vector
Out[26]: tensor(28)
In[28]: a.argmax(dim=1) # shape[4,10] 在 dim=1 求最大值的索引
Out[28]: tensor([6, 1, 8, 1]) # 获取4张照片预测值最大的位置,这个位置决定了它是数字几 注意:参数dim=1 才拿到了这个结果!!

dim,keepdim

  • 使用max(dim=) 函数配上dim参数,可以很好的返回最大值与该值的位置
  • argmax 其实是 max 的一部分(位置)
  • keepdim=True 设置这个参数后,维度得以保留,与原来的维度是一样的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39

In[33]: a				# # 假设生成4张手写体数字照片的概率(发生过偏移)
Out[33]:
tensor([[ 0.0234, 0.6830, -0.1518, 0.4595, -1.5634, 0.5534, 0.9934, -1.1536,
0.3124, -1.4103],
[ 0.6339, 1.5724, 0.2552, 1.0917, -1.4003, 0.5165, 0.8891, -2.0315,
0.4666, 1.4355],
[ 1.6149, 0.2364, 0.3789, -0.3974, -0.1433, 0.9235, 0.6730, 0.3575,
2.0742, 0.8954],
[-0.1019, 1.6405, -1.3493, 0.5554, -0.0533, 0.0450, 0.2018, -0.1688,
-1.2579, -0.7906]])

In[30]: a.max(dim=1)
Out[30]:
torch.return_types.max(
values=tensor([0.9934, 1.5724, 2.0742, 1.6405]),
indices=tensor([6, 1, 8, 1]))
# 第1张照片,预测为6的置信度为0.9934(这个概率是个示意,并不真是概率)
# 第2张照片,预测为1的置信度是1.5724
# 第3张照片,预测为8的置信度是2.0742
# 第4张照片,预测为1的置信度是1.6405


In[31]: a.max(dim=1,keepdim=True)
Out[31]:
torch.return_types.max(
values=tensor([[0.9934],
[1.5724],
[2.0742],
[1.6405]]),
indices=tensor([[6],
[1],
[8],
[1]]))
In[32]: a.argmax(dim=1, keepdim=True) # 返回一个 [4,1] , dim=1这一维并没有消失
Out[32]:
tensor([[6],
[1],
[8],
[1]])

Top-k or k-th

topk

  • 由于max只能找出一个最大,如果想找最大的几个就做不到了。

  • top-k 比max提供更多的信息,适用于特定的场合。

  • top-k 指的是返回概率最大的的 k 组数据以及位置

  • largest=False 求概率最小的 k 组

例如:对于一张照片,他的概率是[0.2, 0.3, 0.1, 0.2, 0.1, 0.1],使用topk(3) 会得到 概率最大的三个数[0.3, 0.2, 0.2] 以及位置[1, 0, 3]


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

In[33]: a
Out[33]:
tensor([[ 0.0234, 0.6830, -0.1518, 0.4595, -1.5634, 0.5534, 0.9934, -1.1536,
0.3124, -1.4103],
[ 0.6339, 1.5724, 0.2552, 1.0917, -1.4003, 0.5165, 0.8891, -2.0315,
0.4666, 1.4355],
[ 1.6149, 0.2364, 0.3789, -0.3974, -0.1433, 0.9235, 0.6730, 0.3575,
2.0742, 0.8954],
[-0.1019, 1.6405, -1.3493, 0.5554, -0.0533, 0.0450, 0.2018, -0.1688,
-1.2579, -0.7906]])
In[34]:
In[34]: a.topk(3,dim=1)
Out[34]:
torch.return_types.topk(
values=tensor([[0.9934, 0.6830, 0.5534], # 返回概率最大的前3个
[1.5724, 1.4355, 1.0917],
[2.0742, 1.6149, 0.9235],
[1.6405, 0.5554, 0.2018]]),
# shape的话 从[4, 10] ---> [4,3]
indices=tensor([[6, 1, 5], # 最可能是6,1次之,5次之
[1, 9, 3],
[8, 0, 5],
[1, 3, 6]]))

In[35]: a.topk(3,dim=1,largest=False)
Out[35]:
torch.return_types.topk(
values=tensor([[-1.5634, -1.4103, -1.1536],
[-2.0315, -1.4003, 0.2552],
[-0.3974, -0.1433, 0.2364],
[-1.3493, -1.2579, -0.7906]]),
indices=tensor([[4, 9, 7], # 最不可能是4,9次之,7次之
[7, 4, 2],

kthvalue

  • kthvalue(i, dim=j) 求 j 维上,第 i 小的元素以及位置。
  • keepdim=True 会保持维度

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

In[36]: a.kthvalue(8,dim=1)	# 求1维,第8小(第3大)( 0-9,第10小=第1大)
Out[36]:
torch.return_types.kthvalue(
values=tensor([0.5534, 1.0917, 0.9235, 0.2018]),
indices=tensor([5, 3, 5, 6]))
In[37]: a.kthvalue(3)
Out[37]:
torch.return_types.kthvalue(
values=tensor([-1.1536, 0.2552, 0.2364, -0.7906]),
indices=tensor([7, 2, 1, 9]))
In[38]: a.kthvalue(3,dim=1)
Out[38]:
torch.return_types.kthvalue(
values=tensor([-1.1536, 0.2552, 0.2364, -0.7906]),
indices=tensor([7, 2, 1, 9]))

compare

  • >, >=, <, <=, !=, ==
  • 进行比较后,返回的是一个 bytetensor,不再是floattensor,由于pytorch中所有的类型都是数值,没有True or False ,为了表达使用整型的0,1
  • torch.eq(a,b) 判断每一个元素是否相等,返回 bytetensor
  • torch.equal(a,b) 返回True or False

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

In[39]: a>0
Out[39]:
tensor([[1, 1, 0, 1, 0, 1, 1, 0, 1, 0],
[1, 1, 1, 1, 0, 1, 1, 0, 1, 1],
[1, 1, 1, 0, 0, 1, 1, 1, 1, 1],
[0, 1, 0, 1, 0, 1, 1, 0, 0, 0]], dtype=torch.uint8)
In[40]: torch.gt(a,0)
Out[40]:
tensor([[1, 1, 0, 1, 0, 1, 1, 0, 1, 0],
[1, 1, 1, 1, 0, 1, 1, 0, 1, 1],
[1, 1, 1, 0, 0, 1, 1, 1, 1, 1],
[0, 1, 0, 1, 0, 1, 1, 0, 0, 0]], dtype=torch.uint8)
In[41]: a!=0
Out[41]:
tensor([[1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1]], dtype=torch.uint8)
In[42]: a = torch.ones(2,3)
In[43]: b = torch.randn(2,3)
In[44]: torch.eq(a,b)
Out[44]:
tensor([[0, 0, 0],
[0, 0, 0]], dtype=torch.uint8)
In[45]: torch.eq(a,a)
Out[45]:
tensor([[1, 1, 1],
[1, 1, 1]], dtype=torch.uint8)
In[46]: torch.equal(a,a)
Out[46]: True

下表是numpy与pytorch比较操作的方法,还是推荐 符号 > < ..

NumpyPyTorch
np.lessx.lt
np.less_equalx.le
np.less_equalx.le
np.less_equalx.le
np.equalx.eq
np.not_equalx.ne

转载于:https://www.cnblogs.com/taosiyu/p/11599179.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pytorch-属性统计 的相关文章

  • 链式队列总结

    基本数据结构之 链式队列 链式队列就是一个操作受到限制的单链表 xff0c 学会了单链表再来写这个就是轻松加愉快 xff0c 但是貌似我去用了两个小时搞定 xff0c 主要是基础差 xff01 队列的基本操作就是入栈和出栈 xff0c 还可
  • float c语言存储格式,float a=1.0f 这里的1.0f中的“f”代表什么 ?float的储存格式?...

    float a 61 1 0f 这里的1 0f中的 f 代表什么 xff0c 有什么意思 xff0c 在C语言里面 xff0c 解答详细点啊 xff01 xff01 xff01 f 代表这个数据是float类型的常量 xff0c 如果你直接
  • 简单实现一个go协程池

    协程池简单来说就是一个管道进 xff0c 一个管道出 xff0c 多个协程工作 实现一 xff1a 无顺序协程工作 package main import 34 fmt 34 var workerNum 61 3 func worker i
  • package.xml

    package xml 也是一个 catkin 的 package 必备文件 xff0c 它是这个软件包的描述文件 xff0c 在较早的 ROS 版本 rosbuild 编译系统 中 xff0c 这个文件叫做 manifest xml xf
  • docker-更新镜像

    更新镜像 更新镜像之前 xff0c 我们需要使用镜像来创建一个容器 w3cschool 64 w3cschool docker run t i ubuntu 15 10 bin bash root 64 e218edb10161 在运行的容
  • 实时监控、直播流、流媒体、视频网站开发方案设计简要

    欢迎大家积极开心的加入讨论群 群号 371249677 xff08 点击这里进群 xff09 一 本地推送端 1 本地 xff1a 采用javaCV xff08 安卓和java平台推荐javaCV xff09 ffmpeg openCV或者
  • 学完嵌入式可以做什么呢?我们为什么要学习嵌入式?

    就目前中国市场行情来看 xff0c IT技术已经进入了高速发展的阶段 xff0c 互联网开始逐渐步入物联网的科技时代 xff0c 可以说嵌入式开发技术在物联网领域应用最为广泛 xff0c 正是嵌入式开发行业十分火热 xff0c 很多大学毕业
  • 微软服务器软件维护,软件更新维护 - Configuration Manager | Microsoft Docs

    软件更新维护 04 27 2021 本文内容 适用范围 xff1a Configuration Manager Current Branch 可从 Configuration Manager 控制台和软件更新点组件属性中计划和运行 WSUS
  • 用C#来开发CAD插件,含源代码

    CAD插件看起来很神秘 xff0c 其实一个合格码农经过几天就能快速掌握 没什么秘密 xff0c 开发CAD插件和winform一样简单学几个类库用法就是 xff08 只是太多人不喜欢知识分享 xff09 xff0c 在CAD里展现界面和w
  • linux C/C++服务器后台开发面试题总结

    一 编程语言 1 根据熟悉的语言 xff0c 谈谈两种语言的区别 xff1f 主要浅谈下C C 43 43 和PHP语言的区别 1 PHP弱类型语言 xff0c 一种脚本语言 xff0c 对数据的类型不要求过多 xff0c 较多的应用于We
  • 如何设置树莓派 -Zero 自启动连接WIFI

    1 首先我们需要一台可以读取树莓派跟文件系统的Linux虚拟机 比如Ubuntu 将树莓派SD卡系统插入电脑 xff0c 识别并打开rootfs文件夹 xff0c 切换到 96 rootfs etc wpa supplicant 96 目录
  • Linux Shell 小数比较

    bin bash expr 方法是错误的 xff0c 在比较相同位数时可以 xff0c 当位数不同就会出错 xff0c 如100 00 gt 70 00就会得出错误的结果 a 61 123 b 61 123 c 61 99 99 rat 6
  • rpc通信的实现方式(以grpc为例)

    基础知识 RPC xff08 Remote Procedure Call xff09 xff1a 远程过程调用 它是一种调用方式 xff0c 可以像调用本地方法那样调用远端方法 protobuf Protocol Buffers 一种开源跨
  • 第五周总结 & 实验报告(三)

    第五周总结 一 继承 1 类的继承格式 class 父类 class 子类 extends 父类 2 扩展类的功能 class 父类 父类属性 xff1b class 子类 extends 父类 新定义属性 xff1b 注意 xff1a 只
  • 第六周总结 & 实验报告(四)

    第六周小结 一 instanceof关键字 在Java中使用instanceof关键字判断一个对象到底是哪个类的实例 xff0c 返回boolean类型 1 instanceof关键字的作用 例 class A public void fu
  • git 下载指定tag版本的源码

    git clone branch x x x https xxx xxx com xxx xxx git 转载于 https www cnblogs com wangjq19920210 p 10695231 html
  • Android yuv转Bitmap

    YuvImage image 61 new YuvImage data ImageFormat NV21 size width size height null if image 61 null ByteArrayOutputStream
  • PCB线宽与电流计算器--在线计算

    http eda365 com article 12 1 html 计算线宽与载流量的关系 xff0c 方便设计 xff1b 单个人建议在有限的空间尽量将大电流线路加宽 转载于 https www cnblogs com brianblog
  • 中国的第一封电子邮件

    Across the Great Wall we can reach every corner in the world 或许你已经忘记 xff0c 那就让我们一同来记起 中国的第一封电子邮件标志着我国进入了互联网时代 xff0c 我似乎也
  • 报Error creating bean with name 'dataSource' defined in class path resource 报错解决办法

    在学习spring boot 的数据库操作的时候 xff0c 报了一串错误 对于初学spring boot的我来说 xff0c 英语水平低 xff0c 看不懂报错的信息 xff0c 给我造成了很大的麻烦 xff0c 花了我一天的时间 xff

随机推荐

  • IntelliJ IDEA 文档无法编辑,变成了只读模式

    因为你 之前 修改了 系统时间 哈哈哈 转载于 https www cnblogs com zongheng14 p 10948236 html
  • Python pip版本升级

    pip版本升级命令 python m pip install upgrade pip 如果报错代码如下 venv C Users ssdy PycharmProjects untitled gt python m pip install u
  • 玩了下opencv的aruco(python版)

    简单的玩了下opencv里头的aruco xff0c 用的手机相机 xff0c 手机装了个 ip摄像头 xff0c 这样视频就可以传到电脑上了 首先是标定 xff0c 我没打印chessboard xff0c 直接在电脑屏幕上显示 xff0
  • 深浅拷贝和赋值的区别

    1 部分语言的深浅拷贝 赋值 软连接 你变他也变 浅拷贝 除了最外层的连接不变外 xff0c 与赋值相同 深拷贝 完全独立 span class token function import span copy a span class to
  • px4的CMakelists.txt阅读

    1 2 3 Copyright c 2017 PX4 Development Team All rights reserved 4 5 Redistribution and use in source and binary forms wi
  • 嵌入式Qt开发环境的搭建详解

    一 嵌入式Qt开发环境的搭建前奏 1 下载arm linux gcc 4 4 3 20100728 tar gz 2 下载qt everywhere opensource src 4 8 5 tar gz xff08 Qt的源码 xff09
  • 百度静态资源库

    http cdn code baidu com 转载于 https www cnblogs com mingl12 p 6373088 html
  • OpenCV 矩形轮廓检测

    转载请注明出处 xff1a http blog csdn net wangyaninglm article details 44151213 xff0c 来自 xff1a shiter编写程序的艺术 基础介绍 OpenCV里提取目标轮廓的函
  • linux更新系统内核,Linux内核升级方法详解

    Linux的内核是系统的核心 xff0c 所以升级内核是Linux系统管理员的一项基本技能 xff0c 所以我就分享了系统运维实务上的一篇文章 xff0c 当然我对源文件稍做了一些内容的增加 xff0c 就是把遇到的问题及解决方案也加上了
  • [ASP.NET] 实现客户端浏览服务端目录的页面

    由于项目需要制作程序发布的网站 xff0c 需要手动选择服务端目录下的文件夹和文件 故制作该页面 xff0c 并打算转为UserControl 页面代码 xff1a AppFileSelect aspx 1 lt 64 Page Langu
  • CSP-S 模拟53

    中下游水准 xff0c 暴力分没拿全 xff0c T1水了 T1 u 两个差分数组水掉 xff08 竖着一个 xff0c 斜着一个 xff09 T2 v 状压 43 记忆化搜索 xff0c 对于sta 61 1 lt lt 30 用hash
  • CSP-S 模拟52

    rank10 T1 平均数 二分答案 xff0c 让所有的数减去这个答案 xff0c 求前缀和 xff0c 然后验证子序列平均数比这个答案小的的个数是否等于K 只需要找前缀和的逆序对个数即可 xff08 归并排序 xff09 T2 涂色游戏
  • 抓取Android崩溃日志

    作为一个测试人员 xff0c 特别是安卓的测试 xff0c 由于系统版本的不同和手机本身各个品牌的优化和硬件的不同 xff0c 会出现各种各样的崩溃 记录崩溃的方式有很多种 xff0c 比如使用录屏工具或文档进行记录 xff0c 但是最简洁
  • oracle给用户赋dblink权限

    create database link 别名 xff08 可任意起 xff09 connect to 需要连接库的用户名identified by 需要连接库的用户名 using 39 DESCRIPTION 61 ADDRESS LIS
  • 前端间隔查询的两种方法:Debounce和Throttle

    Debounce 中文名 xff1a 防抖 在开始操作了之后 xff0c 那么只有在一段 delay 时间段后不再有操作了 xff0c 才执行操作 Throttle 中文名 xff1a 节流 在开始操作之后 xff0c 在 delay ms
  • tcpdump指定IP和端口抓包

    如下指定抓www baidu com 并且80端口的包 保存到test cap 可以在Windows下面用wireshark打开 tcpdump 39 port 80 and host www baidu com 39 w test cap
  • codevs4438 YJQ Runs Upstairs

    Description 学校科技楼一共有 N 层 而神犇YJQ每天都在科技楼 N 楼的机房写代码 这天 他准备从科技楼 1 楼爬到 N 楼 有个 M 连接不同楼层的楼梯 爬每个楼梯需要一定的体力值 楼梯一定是从低处通往高处的 但是由于楼房的
  • linux下如何查看服务器的硬件配置信息

    性能测试时一定要确定测试环境和的硬件配置 软件版本配置 xff0c 保证和线上一致 xff0c 才更接近真实环境 那么linux下如何查看服务器的硬件配置信息 xff1f xff1f 一 查看cpu信息 1 所有信息 lscpu root
  • 转:如何查找别人论文(计算机类文献)中实验的代码?

    最近看计算机类文献 xff0c 想看看别人论文中实验是如何做出来的 xff0c 请问如何查找别人论文中实验的代码 1 如果这论文很老 xff0c 论文里的算法在该领域有举足轻重的地位 那么网上很可能有工具包 例如我做的机器学习方向 xff0
  • Pytorch-属性统计

    引言 本篇介绍Pytorch属性统计的几种方式 统计属性 求值或位置 normmean sumprodmax min argmin argmaxkthvalue topk norm norm 与 normalize norm指的是范数 xf