как ссылаться на один выход из нескольких выходов с различным измерением в Керасе - PullRequest
0 голосов
/ 12 сентября 2018

В настоящее время у меня есть выход из моей модели:

egen = keras.models.Model(egen_input, [classes,x])

, где x имеет [None, 32, 32, 3], а classes имеет [None, 2] в качестве своего измерения. Как я могу ссылаться только на часть вывода в пользовательской функции потерь?

например,

def customLoss():
  def loss(y_true, y_pred): 
    return keras.losses.binary_crossentropy(y_true, y_pred[0])

return loss

в настоящее время вышеупомянутая функция потерь возвращает мне ошибку в несоответствующем измерении, но если я просто использую y_pred, она не возвращает ошибку ... очень запутанная здесь

Спасибо!

1 Ответ

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

Если вы хотите использовать только classes, который является первым выходом, для расчета потерь, тогда вы можете установить опцию loss_weights (https://keras.io/models/model/) при компиляции.

model.compile(...., loss_weights=[1.0, 0.0]) 

Обратите также внимание, что потери рассчитываются для каждого выхода отдельно, а затем усредняются (с равным весом по умолчанию) по выходам, чтобы получить единственную метрику потерь. Таким образом, y_pred[0] означает не classes, а первый элемент classesи x.

РЕДАКТИРОВАТЬ.

, если это первый элемент классов и x, какой будет форма y_pred [0]? бит запутан здесь

Обе! Keras вычисляет потери для classes и x отдельно, а затем принимает (взвешенное) среднее значение. Таким образом, если функция потерь определяется как return keras.losses.binary_crossentropy(y_true, y_pred[0]), как в вопросе, keras пытается вычислитьпотери с classes_true против class_pred[0] и с x_true против x_pred[0], что приводит к ошибке несоответствия формы.

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