Двоичная кросс-энтропия по компонентам в керасе - PullRequest
0 голосов
/ 28 сентября 2018

Я хочу написать функцию с двумя аргументами, A и B, тензорами одной и той же формы (например, 13x13 или какой-либо другой формы) и вернуть число, представляющее суммирование по всем потерям, когда применяется двоичная кросс-энтропия по компонентам.Итак, для A [i, j] и B [i, j] мы находим binary_loss, а затем суммируем по всем i, j.Как реализовать это в Keras и Tensorflow?

1 Ответ

0 голосов
/ 28 сентября 2018

Вы можете легко определить эту функцию, используя бэкэнд-функции sum и binary_crossentropy (или напрямую использовать их эквиваленты в Tensorflow):

def func(A, B):
    return K.sum(K.binary_crossentropy(A,B)) 

Обратите внимание, что K.binary_crossentropy() предполагает, что заданные входные значения являются вероятностями;если это не так, передайте from_logit=True в качестве другого аргумента.

Далее, если вы хотите использовать эту функцию в слое Lambda, вам нужно изменитьэто так, что он принимает список тензоров в качестве входных данных:

def func(inp):
    return K.sum(K.binary_crossentropy(inp[0], inp[1]), [1,2]) # take the sum for each sample independently

# ...
out = Lambda(func)([A, B])

Как видите, [1,2] был передан K.sum() в качестве аргумента axis для получения суммы по всему элементуодного образца (и не всей партии).

...