admin 发布的文章

torch的乘积分两种

一、点乘

点乘都是broadcast的,可以用torch.mul(a, b)实现,也可以直接用*实现。
要求a,b有相同的维度

二、矩阵相乘

矩阵相乘有torch.mm和torch.matmul两个函数。其中前一个是针对二维矩阵,后一个是高维。当torch.mm用于大于二维时将报错。
a = [B,E]
b = [E,B]
c = torch.mm(a,b)
C 维度是[B,B]

一、定义

1.返回所给tensor的矩阵范数或向量范数
2.范数本质上是一种距离

二、常用

1.最常用的就是做求2范数
2.可以用来对向量做归一化

三、代码

def normalize(x, axis=-1):
    """Normalizing to unit length along the specified dimension.
    Args:
      x: pytorch Variable
    Returns:
      x: pytorch Variable, same shape as input
    """
    x = 1. * x / (torch.norm(x, 2, axis, keepdim=True).expand_as(x) + 1e-12)#2是范数计算中的幂指数值,就是取2范式
    return x

一、定义

我们知道距离的定义是一个宽泛的概念,只要满足非负、自反、三角不等式就可以称之为距离。范数是一种强化了的距离概念,它在定义上比距离多了一条数乘的运算法则。有时候为了便于理解,我们可以把范数当作距离来理解。

二、常用范数
L-P范数

与闵可夫斯基距离的定义一样,L-P范数不是一个范数,而是一组范数,其定义如下:
v2-2e775b7de565040937e554fcd5409144_720w.png
常见范数有:
l.png

L1-P范数

1-范数:
l1.png

L2-P范数

2-范数:
l2.png
在深度学习中,我们常用l2范数做特征归一化:

def normalize(x, axis=-1):
    """Normalizing to unit length along the specified dimension.
    Args:
      x: pytorch Variable
    Returns:
      x: pytorch Variable, same shape as input
    """
    x = 1. * x / (torch.norm(x, 2, axis, keepdim=True).expand_as(x) + 1e-12)#2是范数计算中的幂指数值,就是取2范式
    return x