张量的核规范是什么?

时间:2019-11-25 09:21:55

标签: pytorch

当我这样做

?draft=true

它给出了

import torch
x = torch.ones(3, 4)
x.norm(p='nuc')

该值如何计算?

1 个答案:

答案 0 :(得分:2)

核规范(又称跟踪规范)是x奇异值的总和或以下等价的表达式之一(假设x是实数)

u,s,v = torch.svd(x, compute_uv=False)
print(torch.sum(s))

eigs, eigvecs = torch.symeig(x.transpose(1,0) @ x)
print(torch.sum(torch.sqrt(torch.abs(eigs))))

pytorch本身不支持查找矩阵平方根(您可以使用symeig,但这会简化为先前的表达式)。如果您使用this sqrtm implementation之类的东西,那么您可以使用

print(torch.trace(sqrtm(x.transpose(1,0) @ x))

从上面的表达式中可以清楚地看出,如果x是方形且对称的,那么迹线范数是公正的

# use this only if you know x is square and symmetric
print(torch.trace(x))