0

我正在测试新的指标来测量 Pytorch 中权重矩阵之间的距离,现在我正在尝试使用 Mahalanobis。为此,我将每个矩阵重塑为一个向量,然后将其连接为一个矩阵,然后使用该矩阵计算该矩阵任意两行之间的马氏距离。问题是其中一些给我带来了负面结果,而负面的平方根则让我感到 NaN。

我知道协方差矩阵必须是正定义的,我想我搞砸了,或者我在这种情况下使用 mahalanobis 的想法是不可能的?

这是我正在使用的代码,我向它传递了一个形状为 (64,121) 的 X,即 64 (11x11) 矩阵

def _mahalanobis(X):
    VI = torch.inverse(cov(X)) #covariance matrix
    total_dist = 0
    for i,v in enumerate(X):
        dist = 0
        for j,u in enumerate(X):
            if i == j:
                continue
            x = (v-u).unsqueeze(0).t()
            y = (v - u).unsqueeze(0)

            dist = torch.sqrt(torch.mm(torch.mm(y,VI),x))

            total_dist +=dist
            print(dist)
    return total_dist


## Returns the covariance matrix of m
    def cov(m, rowvar=False):

        if m.dim() > 2:
            raise ValueError('m has more than 2 dimensions')
        if m.dim() < 2:
            m = m.view(1, -1)
        if not rowvar and m.size(0) != 1:
            m = m.t()
        # m = m.type(torch.double)  # uncomment this line if desired
        fact = 1.0 / (m.size(1) - 1)
        m -= torch.mean(m, dim=1, keepdim=True)
        mt = m.t()  # if complex: mt = m.t().conj()
        return fact * m.matmul(mt).squeeze()
4

0 回答 0