我正在使用Keras来训练我的模型,并希望使用我的预测和假设之间的角距离作为我的度量。到目前为止,我发现的最接近的度量是余弦接近度,而不是角距离。
我对余弦近似性(或余弦距离)的问题是,小数字的余弦非常相似。
查看Wikipedia,可以使用余弦邻近度计算角距离:
因此,我想知道使用基于余弦邻近度的自定义度量是不是一个好主意,如果是的话,它是如何实现的。
发布于 2019-06-14 07:42:00
所以我想我有了我自己问题的答案。我所做的是首先通过简单地使用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])https://stackoverflow.com/questions/56587247
复制相似问题