Я работаю с данными последовательности (одна горячая кодировка последовательностей) и ищу способ написать пользовательскую функцию потерь, которая использует веса из словаря значений, основанных на y_pred и y_true, и зависит от этих значений.во время тренировки (поэтому я не могу использовать постоянные веса при подходящем подходе).
В принципе, для каждой позиции индекса argmax в матрице последовательности я могу получить символ.Для каждых двух символов я могу получить вес.Словари для них, как показано ниже:
values =
{0: 'A',
1: 'C',
2: 'D',
...}
matrix = array
([[ 4, -1, -2, -2, 0, -1, -1, 0, -2, -1, -1, -1, -1, -2, -1, 1,
0, -3, -2, 0, -2, -1, 0, -4],
[-1, 5, 0, -2, -3, 1, 0, -2, 0, -3, -2, 2, -1, -3, -2, -1,
-1, -3, -2, -3, -1, 0, -1, -4],
[-2, 0, 6, 1, -3, 0, 0, 0, 1, -3, -3, 0, -2, -3, -2, 1,
0, -4, -2, -3, 3, 0, -1, -4],
...]])
Я хочу сделать что-то вроде этого:
y_true (n,155,20) ---K.argmax(.., axis=2)---> a:(n,155)
y_pred (n,155,20) ---K.argmax(.., axis=2)---> b:(n,155)
for i in range(n):
for j in range(155):
weights[i,j] = matrix[values[a[i,j]], values[b[i,j]]]
Представьте, что есть способ получить значения матрицы выше с помощью некоторого другого слова.
Тогда я хочу использовать свою матрицу weights
следующим образом:
def custom_loss_mse(y_true,y_pred):
w = getWeights(y_true,y_pred)
return K.mean(K.dot(w, K.square(y_pred-y_true)), axis=-1)
До сих пор я нашел только этот вопрос полезным, и он не очень похож.
Это просто, но из-за модели графов вычислений мне намного сложнее из-за кераса.Должен быть какой-то быстрый способ сделать это, но у меня нет идей.
Буду признателен за любую помощь, так как я довольно новичок в numpy и keras.