首页 > 解决方案 > data.norm() < 1000 在 PyTorch 中有什么作用?

问题描述

我在这里关注 PyTorch 教程。它说

x = torch.randn(3, requires_grad=True)

y = x * 2
while y.data.norm() < 1000:
    y = y * 2

print(y)

Out:    
tensor([-590.4467,   97.6760,  921.0221])

有人可以解释一下 data.norm() 在这里做什么吗?当我改变.randn.ones的输出是 tensor([ 1024., 1024., 1024.]).

标签: pythondeep-learninglinear-algebrapytorchtensor

解决方案


它只是张量的 L2 范数(又名欧几里得范数)。下面是一个可重现的插图:

In [15]: x = torch.randn(3, requires_grad=True)

In [16]: y = x * 2

In [17]: y.data
Out[17]: tensor([-1.2510, -0.6302,  1.2898])

In [18]: y.data.norm()
Out[18]: tensor(1.9041)

# computing the norm using elementary operations
In [19]: torch.sqrt(torch.sum(torch.pow(y, 2)))
Out[19]: tensor(1.9041)

解释:首先,它取输入张量中每个元素的平方x,然后将它们相加,最后取结果和的平方根。总而言之,这些操作计算所谓的L2 或欧几里得范数


推荐阅读