Pytorch 张量的核范数是什么?

Pytorch 张量的核范数是什么?,pytorch,Pytorch,当我这样做的时候 import torch x = torch.ones(3, 4) x.norm(p='nuc') 它给 tensor(3.4641) 该值是如何计算的?核范数,也称为迹范数,是x的奇异值之和,或等价于以下表达式之一(假设x为实) pytorch本机不支持查找矩阵平方根(您可以使用symeig,但这将简化为前面的表达式)。如果你用类似的方法,那么你可以用 print(torch.trace(sqrtm(x.transpose(1,0) @ x)) 从上面的表达式可以清

当我这样做的时候

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

tensor(3.4641)

该值是如何计算的?

核范数,也称为迹范数,是
x
奇异值之和,或等价于以下表达式之一(假设x为实)



pytorch本机不支持查找矩阵平方根(您可以使用
symeig
,但这将简化为前面的表达式)。如果你用类似的方法,那么你可以用

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))

我认为第二个公式适用于frobenius范数frobenius范数就是
torch.sqrt(torch.sum(x**2))
。如果你把矩阵“展开”成向量形状,它基本上就是L2范数。但你是对的,我在跟踪标准中有一个输入错误。让我重写一下。
print(torch.trace(sqrtm(x.transpose(1,0) @ x))
# use this only if you know x is square and symmetric
print(torch.trace(x))