Каков синтаксис для передачи аргументов в функции потери keras? - PullRequest
0 голосов
/ 05 февраля 2020

Я пытаюсь дать моей керальной нейронной сети категорическую потерю кроссентропии с from_logits = True. Однако я не уверен, как передать это в код, так как он просит меня указать цель и вывод.

Обычно я могу использовать:

network.compile(sgd, loss='categorical_crossentropy'),

, но теперь я ' Мне нужно попробовать это:

network.compile(sgd, loss=categorical_crossentropy(from_logits=True))

, что дает мне ошибку:

TypeError: categorical_crossentropy() missing 2 required positional arguments: 'target' and 'output'

Лучшее, что я могу придумать, это:

network.compile(sgd, loss=categorical_crossentropy(y_true, network.output, from_logits=True))

Я надеваю Я не имею ни малейшего представления, что поставить для y_true, так как это не является частью сети. Я посмотрел онлайн, но не нашел ничего, что бы указывало, как это сделать, включая, как ни странно, документацию по keras.

1 Ответ

2 голосов
/ 05 февраля 2020

Потери Keras требуют строго двух аргументов: y_true (данные истинности земли) и y_pred (выходные данные модели).

Если вы хотите использовать функцию с другой подписью, вы должны обернуть ее, чтобы следовать правильной подписи.

import keras.backend as K

def cc_from_logits(y_true, y_pred):
    return K.categorical_crossentropy(y_true, y_pred, from_logits=True, axis=-1)

model.compile(loss=cc_from_logits)

Я совершенно уверен, что cc_with_logits приносит точно такую ​​же результаты как softmax + 'categorical_crossentropy'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...