Угловое расстояние в Керасе как метрическое - PullRequest
0 голосов
/ 13 июня 2019

Я использую Keras для обучения своей модели и хочу использовать угловое расстояние между моими предсказаниями и гипотезой в качестве моей метрики. Самая близкая метрика, которую я нашел до сих пор, - это косинус, а не угловое расстояние.

Проблема, с которой я сталкиваюсь с косинусом (или косинусом), состоит в том, что косинус для малых чисел очень похож.

Глядя на Википедию , можно рассчитать угловое расстояние, используя косинусную близость:

formula

Поэтому мне интересно, является ли использование пользовательской метрики, основанной на косинусной близости, хорошей идеей, и если да, то как это реализовано.

1 Ответ

0 голосов
/ 14 июня 2019

Так что я думаю, что у меня есть ответ на свой вопрос. Что я сделал, так это то, что сначала рассчитал близость косинуса, просто используя исходный код 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])
...