本篇介绍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 | In[3]: a = torch.full([8],1) |
mean,sum,min,max,prod
max() 求最大的值
min()
求最小的值mean()
求平均值 mean = sum / sizeprod()
累乘sum()
求和argmax()
返回最大值元素的索引argmin()
返回最大值元素的索引argmax(dim=l)
求l
维中,最大元素的位置,这样的话这一维将消失。
note:以上这些,如果不加参数,会先打平,在计算,所以对于 argmax 和 argmin来说得到的是打平后的索引。
1 | In[18]: a = torch.arange(8).view(2,4).float() # 假设我们生成一组 gradient |
dim,keepdim
- 使用max(dim=) 函数配上dim参数,可以很好的返回最大值与该值的位置
- argmax 其实是 max 的一部分(位置)
- keepdim=True 设置这个参数后,维度得以保留,与原来的维度是一样的。
1 | In[33]: a # # 假设生成4张手写体数字照片的概率(发生过偏移) |
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 | In[33]: a |
kthvalue
- kthvalue(i, dim=j) 求 j 维上,第 i 小的元素以及位置。
- keepdim=True 会保持维度
1 | In[36]: a.kthvalue(8,dim=1) # 求1维,第8小(第3大)( 0-9,第10小=第1大) |
compare
>, >=, <, <=, !=, ==
- 进行比较后,返回的是一个 bytetensor,不再是floattensor,由于pytorch中所有的类型都是数值,没有True or False ,为了表达使用整型的0,1
- torch.eq(a,b) 判断每一个元素是否相等,返回 bytetensor
- torch.equal(a,b) 返回True or False
1 | In[39]: a>0 |
下表是numpy与pytorch比较操作的方法,还是推荐 符号 > < ..
Numpy | PyTorch |
---|---|
np.less | x.lt |
np.less_equal | x.le |
np.less_equal | x.le |
np.less_equal | x.le |
np.equal | x.eq |
np.not_equal | x.ne |