【问题标题】:Angular distance in Keras as metricKeras中的角距离作为度量
【发布时间】:2019-06-13 19:17:37
【问题描述】:
我正在使用 Keras 来训练我的模型,并希望使用我的预测和假设之间的角距离作为我的指标。到目前为止,我发现的最接近的度量是余弦接近度,而不是角距离。
余弦接近度(或余弦距离)的问题是小数的余弦非常相似。
查看Wikipedia,可以使用余弦接近度计算角距离:
所以我想知道使用基于余弦接近度的自定义指标是否是一个好主意,如果是,那么它是如何实现的。
【问题讨论】:
标签:
keras
deep-learning
metrics
【解决方案1】:
所以我想我有自己问题的答案。我所做的是我首先通过简单地使用 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])