Вы можете легко определить эту функцию, используя бэкэнд-функции 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
для получения суммы по всему элементуодного образца (и не всей партии).