以Keras为单位的角距离

时间:2019-06-13 19:17:37

标签: keras deep-learning metrics

我正在使用Keras训练模型,并希望使用预测和假设之间的角距离作为度量。到目前为止,我发现的最接近的度量是余弦接近度,而不是角距离。

余弦接近度(或余弦距离)存在的问题是,小数的余弦非常相似。

Wikipedia,可以使用余弦接近度来计算角距离:

formula

因此,我想知道使用基于余弦接近度的自定义指标是否是个好主意,以及是否可以实现?

1 个答案:

答案 0 :(得分:0)

所以我想我有自己的问题的答案。我要做的是,我首先使用Keras的源代码来计算余弦近似度。然后,我计算了先前结果的反余弦值:

def angular_distance(y_true, y_pred):
     y_true = K.l2_normalize(y_true, axis=-1)
     y_pred = K.l2_normalize(y_pred, axis=-1)
     cosine = K.sum(y_true * y_pred, axis=-1)
     return 2*tf.math.acos(cosine)/np.pi

然后,我将新功能作为自定义指标传递给模型的编译脚本:

model.compile(loss='categorical_crossentropy', optimizer=Adam(0.001),
            metrics=[angular_distance])