如何使用 Keras 计算马氏距离?

Posted

技术标签:

【中文标题】如何使用 Keras 计算马氏距离?【英文标题】:How can I calculate Mahalanobis distance with Keras? 【发布时间】:2018-06-29 08:26:41 【问题描述】:

对于使用 Keras 的回归 NN,我希望计算马氏距离。但它看起来还没有内置的。所以希望自己玩一下自定义损失函数,希望能问几个问题。

有没有办法打印自定义损失函数的输出。不使用verbose=1 或其他东西,而是使用简单的调用,以便我可以检查计算。如果是这样,我应该为y_predy_true,NumPy 传递什么类型的值?

如果 Mahalanobis 有效,我希望输出协方差的 Cholesky 分解。但是,神经网络的输出将比标签多出 6 个值。有没有巧妙的方法来避免网络的输出和标签的维度应该相同的断言错误?

在自定义损失函数中,张量的索引是否像 NumPy 一样工作?例如,如果我想要y_pred 的部分总和,我可以K.sum(y_pred[3:5, :]) 吗?好吧其实,如果Q1能回答,我可以自己试试这些。

【问题讨论】:

我希望问几个问题。 - 请不要。问题越集中越好,一般来说 - 一个问题,一个问题。 您的第一个问题已回答here。 【参考方案1】:

在您的自定义损失中,您应该将 y_true 和 y_pred 视为张量(如果您使用 tf 作为后端,则为张量流张量)。

如果要执行自定义计算,则必须使用后端:

import keras.backend as K

在这里你可以使用 K.sum、K.abs、K.mean、...(或多或少的 numpy 风格)。

当您实际为模型提供一些数据时,您会将其作为 numpy 数组传递。

【讨论】:

以上是关于如何使用 Keras 计算马氏距离?的主要内容,如果未能解决你的问题,请参考以下文章

Matlab中的马氏距离

超过2组的R上的马氏距离

最小马氏距离分类器

最小马氏距离分类器

马氏距离在SLAM中的应用

MATLAB求马氏距离(Mahalanobis distance)