本篇介绍Pytorch属性统计的几种方式。
统计属性
求值或位置
- norm
- mean sum
- prod
- max, min, argmin, argmax
- kthvalue, topk
norm
norm 与 normalize
- norm指的是范数,并不是normalize。
- normalize是归一化,例如 batch_norm。
matrix norm 与 vector norn
要更好的理解范数,就要从函数、几何与矩阵的角度去理解。
我们都知道,函数与几何图形往往是有对应的关系,这个很好想象,特别是在三维以下的空间内,函数是几何图像的数学概括,而几何图像是函数的高度形象化,比如一个函数对应几何空间上若干点组成的图形。
但当函数与几何超出三维空间时,就难以获得较好的想象,于是就有了映射的概念,映射表达的就是一个集合通过某种关系转为另外一个集合。通常数学书是先说映射,然后再讨论函数,这是因为函数是映射的一个特例。
为了更好的在数学上表达这种映射关系,(这里特指线性关系)于是就引进了矩阵。这里的矩阵就是表征上述空间映射的线性关系。而通过向量来表示上述映射中所说的这个集合,而我们通常所说的基,就是这个集合的最一般关系。于是,我们可以这样理解,一个集合(向量),通过一种映射关系(矩阵),得到另外一个几何(另外一个向量)。
- 向量的范数,就是表示这个原有集合的大小。 
- 矩阵的范数,就是表示这个变化过程的大小的一个度量。 
总结起来一句话,范数(norm),是具有“长度”概念的函数。

推荐阅读 向量范数与矩阵范数, 机器学习下的各种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 / size
- prod()累乘
- 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 | 

