Angular Keras 中的距离作为度量
Angular distance in Keras as metric
我正在使用 Keras 训练我的模型,并希望使用我的预测和假设之间的 angular 距离作为我的指标。到目前为止,我发现的最接近的度量是余弦接近度,而不是 angular 距离。
余弦接近度(或余弦距离)的问题是小数的余弦非常相似。
查看 Wikipedia,可以使用余弦近似计算 angular 距离:
所以我想知道使用基于余弦近似度的自定义指标是否是个好主意,如果是的话是如何实现的。
所以我想我已经找到了我自己的问题的答案。我所做的是首先使用 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])
我正在使用 Keras 训练我的模型,并希望使用我的预测和假设之间的 angular 距离作为我的指标。到目前为止,我发现的最接近的度量是余弦接近度,而不是 angular 距离。
余弦接近度(或余弦距离)的问题是小数的余弦非常相似。
查看 Wikipedia,可以使用余弦近似计算 angular 距离:
所以我想知道使用基于余弦近似度的自定义指标是否是个好主意,如果是的话是如何实现的。
所以我想我已经找到了我自己的问题的答案。我所做的是首先使用 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])