Я пытаюсь разработать модель, которая выбирает лучшего кандидата из списка кандидатов:
- Входные данные: список
K
кандидатов - Целевой результат:Горячий вектор
x
с x[t] = p_t
, где p_t
- это вероятность того, что t
будет лучшим кандидатом
Вот как я пытаюсь это сделать в Керасе:
- Для данной обучающей строки представьте каждого кандидата
i
как вектор признаков f_i
(все признаки положительны).В строке может быть менее K
кандидатов;в этом случае я маскирую / дополняю список кандидатов фиктивными f_i
векторами (всех -1) - Пропускаю каждый из действительных
f_i
векторов через набор слоев, чтобы получить некоторый балл s_i
;фиктивные векторы объектов не должны проходить через эти слои и должны напрямую получать оценку 0 - Делать softmax по всем ненулевым
s_i
и получать окончательную вероятность
Шаг 1 тривиален, а шаг 3 можно выполнить с помощью пользовательской активации, как показано здесь .Шаг 2 - это то, что я не знаю, как делать;Я попытался использовать слой Lambda
из Keras с K.switch
вроде:
score_layer = Lambda(lambda x: K.switch(K.sum(x) < 0, 0.0, score_using_layers(x))
, но это не сработало.Когда я попытался скомпилировать модель и напечатать сводку, она даже не показывала слои, используемые для оценки векторов реальных объектов.Как мне это сделать?