当我这样做
?draft=true
它给出了
import torch
x = torch.ones(3, 4)
x.norm(p='nuc')
该值如何计算?
答案 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))