keras - softmax top N - функция потерь

У меня возникли проблемы с тем, как использовать keras в соответствии с моим сценарием. В моем выходном слое он выводит вероятности каждого элемента. Я хотел бы взять верхние N элементов (т.е. с наибольшей вероятностью) и посмотреть, являются ли они подмножеством истины (которое имеет набор элементов). Я должен скомпилировать вероятность отрицательного логарифма для этого сценария. Могу я спросить, как я могу это сделать?

Большое спасибо за вашу помощь заранее.

`

nn = Sequential()
 nn.add(Dense(self.num_hidden_units, input_dim = input_num, init="uniform"))
 nn.add(Activation('tanh'))
 nn.add(Dense(self.num_items, init="uniform"))
 nn.add(Activation('softmax'))

`


person soulless    schedule 09.08.2017    source источник
comment
Это сценарий с несколькими метками или несколькими классами? Другими словами, являются ли ваши ярлыки взаимоисключающими?   -  person Yuval Atzmon    schedule 09.08.2017
comment
Результатом являются вероятности появления каждого элемента, можно сказать, каждого класса. Но они не исключают друг друга, как я уже упоминал, я хотел бы взять верхние N в выводе и посмотреть, являются ли они подмножеством истинного множества. Но я не уверен, как применить отрицательную логарифмическую вероятность в этом случае. Я не могу использовать категориальную перекрестную энтропию, так как я не предсказываю один класс из мультиклассов. Спасибо за ответ!   -  person soulless    schedule 09.08.2017


Ответы (1)


Если я правильно понимаю, вы находитесь в режиме классификации с несколькими метками. Общей целевой функцией в этом случае является потеря бинарной перекрестной энтропии выше активации sigmoid.

Обратите внимание, что вы должны заменить активацию softmax сигмовидной, так как в вашем случае вероятности не должны суммироваться до 1

Пример использования для применения потерь в керасах:

model.compile(loss='binary_crossentropy', optimizer='sgd')
person Yuval Atzmon    schedule 09.08.2017
comment
Я думал, что бинарная кроссэнтропия предназначена для бинарной классификации. Так что, когда это классификация с несколькими метками, мы также используем бинарную кроссэнтропию? Кроме того, почему сигмоид вместо softmax? Я имею в виду, есть ли разница? - person soulless; 09.08.2017
comment
В мультиметке вам нравится предсказывать, существует ли класс или нет, отсюда и двоичный код. Поскольку несколько классов могут существовать одновременно, вам нужно использовать sigmoid вместо softmax, потому что softmax подходит для случая, когда классы являются взаимоисключающими. Например. если на изображении есть птица и собака, идеальный сигмовидный классификатор даст результат output_dog=1, output_bird=1, все остальные выходные данные=0, в то время как с softmax ближайшим результатом будет output_dog=0.5, output_bird=0.5, все остальные выходы=0 - person Yuval Atzmon; 10.08.2017
comment
О... Я полностью понимаю, что вы имеете в виду. А если они взаимоисключающие? тогда какая должна быть потеря? PS На самом деле я пытаюсь реализовать этот документ — ceur-ws.org/Vol-1441/ recsys2015_poster15.pdf , рекомендацию следующей корзины в качестве практики, поскольку ее структура довольно проста. Но я просто не совсем понимаю, как мне использовать отрицательную логарифмическую вероятность с keras - person soulless; 11.08.2017
comment
Если они взаимоисключающие, то лучше использовать активацию вывода softmax с категорической потерей перекрестной энтропии. - person Yuval Atzmon; 11.08.2017
comment
но мой y_true будет чем-то вроде вектора длины = общего количества элементов, значение будет равно 1, если этот элемент присутствует, иначе 0, потому что у меня нет вероятности истины. Если мне нужен softmax для получения элементов с наивысшей вероятностью, стоит ли добавлять дополнительную обработку, при которой я выбираю элементы с наивысшей вероятностью, они будут равны 1 в результирующем векторе, так что это сопоставимо с правдой y? Большое спасибо и извините за все последующие вопросы - person soulless; 11.08.2017