Keras - пропускать входы через слои, только если условие проходит - PullRequest
0 голосов
/ 20 сентября 2019

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

  • Входные данные: список K кандидатов
  • Целевой результат:Горячий вектор x с x[t] = p_t, где p_t - это вероятность того, что t будет лучшим кандидатом

Вот как я пытаюсь это сделать в Керасе:

  1. Для данной обучающей строки представьте каждого кандидата i как вектор признаков f_i (все признаки положительны).В строке может быть менее K кандидатов;в этом случае я маскирую / дополняю список кандидатов фиктивными f_i векторами (всех -1)
  2. Пропускаю каждый из действительных f_i векторов через набор слоев, чтобы получить некоторый балл s_i;фиктивные векторы объектов не должны проходить через эти слои и должны напрямую получать оценку 0
  3. Делать 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))

, но это не сработало.Когда я попытался скомпилировать модель и напечатать сводку, она даже не показывала слои, используемые для оценки векторов реальных объектов.Как мне это сделать?

...