Получение отрицательного косинусного расстояния с использованием тензорного потока - PullRequest
1 голос
/ 29 мая 2019

Я использую tf.losses.cosine_distance(Y, outputs, axis=2, reduction=tf.losses.Reduction.MEAN) для измерения разницы между моими ярлыками и прогнозами. Тензорная форма [batch_size, sequence_length, embedding]. В моем случае форма прогноза составляет [16311, 20, 100].

Мой результат следующий.

----------------------epoch1----------------------
train 1  loss 1.1429076
----------------------epoch2----------------------
train 2  loss 0.51511204
----------------------epoch3----------------------
train 3  loss -2.5750072
----------------------epoch4----------------------
train 4  loss -6.685198
----------------------epoch5----------------------
train 5  loss -10.863398

Граница косинусного сходства равна [0,1]. Но в моем случае он больше 1 в начале и стал отрицательным после нескольких эпох. Интересно, почему это могло произойти.

Мое вложение содержит отрицательные числа. Должен ли я нормализовать его до расчета косинусного расстояния?

1 Ответ

1 голос
/ 29 мая 2019

Во-первых, да, вы должны нормализовать перед вычислением косинусного расстояния: (из документации)

Обратите внимание, что функция предполагает, что предсказания и метки уже Блок-нормализованы.

Однако диапазон функции подобия косинуса не равен [0,1]. Рассмотрим векторы (1 0) и (-1 0). Оба являются единичными векторами, а их косинусное сходство равно -1.

Наконец, обратите внимание, что потеря - это вычисление косинусного расстояния, которое равно 1 минус косинусное сходство, потому что операция оптимизации для потерь - это минимизация, а не максимизация (как было бы уместно для косинусного подобия). Таким образом, можно ожидать, что отрицательные числа будут становиться все больше в абсолютном значении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...