voo*_*doo 16 python linear-algebra deep-learning pytorch tensor
我在这里关注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])
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下data.norm()在这里做什么吗?当我改变.randn到.ones它的输出 tensor([ 1024., 1024., 1024.]).
kma*_*o23 11
它只是张量的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)
Run Code Online (Sandbox Code Playgroud)
首先,它对张量中的每个元素求平方y,然后求和,最后取平方根。这些运算计算所谓的L2或欧几里得范数。
根据@kmario23 所说,代码将向量的元素乘以 2,直到向量的欧几里得幅度(距原点的距离)/L2 范数至少为 1000。
以带有 (1,1,1) 的向量为例:它增加到 (512, 512, 512),其中 l2 范数约为 886。这小于 1000,因此它再次乘以 2 并变为 ( 1024、1024、1024)。它的震级大于 1000,所以它停止了。
| 归档时间: |
|
| 查看次数: |
4773 次 |
| 最近记录: |