Как я могу обратиться к отдельным выходам нейронной сети из пользовательской функции потери Tensorflow? - PullRequest
0 голосов
/ 19 мая 2019

Я бы хотел реализовать пользовательскую функцию потерь (в частности, для этого ) для обучения NN в Tensorflow, в котором NN имеет два выхода, а функция потерь - это формула, включающая как выходы, так иожидаемый результат.Как я могу индивидуально обратиться к этим? Примеры из tenorflow это выглядит, например, следующим образом:

def mean_absolute_percentage_error(y_true, y_pred):
  y_pred = ops.convert_to_tensor(y_pred)
  y_true = math_ops.cast(y_true, y_pred.dtype)
  diff = math_ops.abs(
      (y_true - y_pred) / K.clip(math_ops.abs(y_true), K.epsilon(), None))
  return 100. * K.mean(diff, axis=-1)

Какие именно тензоры передаются здесь как y_true - какую форму они имеют?Я не смог найти никакой документации об этом.Все примеры, которые я видел для пользовательских потерь, просто рассчитывают все результаты одновременно, тогда как мне нужно выбрать отдельные результаты.

Обратите внимание: я не могу определить сеть на два выхода и определить отдельные потери для каждого выхода, так как документация Model.compile позволяет / как это делается здесь , поскольку функция потерь является функцией всех трех значений.

1 Ответ

0 голосов
/ 20 мая 2019

Я не нашел документации о форме параметров y_pred и y_true, но, похоже, работает следующее: чтобы получить доступ к отдельным выходам (при условии, что вывод является одномерным), вы можете нарезать по последней оси тензора: например, y_pred[..., 0:1] - первый выход, y_pred[..., 1::2] - каждый выход с нечетным номером, y_true[..., 0::2] каждый ярлык с четным номером и т. Д.

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