tf keras, настраиваемая функция потерь, которая требует нескольких сетевых выходов в качестве входов - PullRequest
0 голосов
/ 25 сентября 2019

Я недавно решил попробовать tf2.0, особенно API-интерфейс keras высокого уровня.Я тоже не слишком знаком с керасом, раньше использовал главным образом тензорный поток.Тем не менее, я не могу найти хороший способ использования пользовательских функций потери.Возьмем простой пример. Предположим, у нас есть модель с несколькими входами и несколькими выходами, определенная следующим образом:

# define model
... your network definition
...

model = tf.keras.Model(inputs=[input_1, input_2], outputs=[output_1, output_2, output_3])

Предположим, у меня есть две пользовательские функции потерь: my_loss_1 требует output_1, output_2 и targets_1 чтобы рассчитать убыток.Точно так же my_loss_2 требует output_2, output_3 и targets_2.Мои вопросы:

  1. Есть ли способ сделать это, придерживаясь API высокого уровня?
  2. Как передать данные тренировки в модель?Если я сконструировал набор данных как
train_ds = tf.data.Dataset.zip((input_ds_1, input_ds_2), (target_ds_1, target_ds_2))

и передам его model.fit, то модель будет предполагать вычисление loss_1 с использованием output_1 и target_ds_1, а это не то, чтоЯ намеревался.

Мне даже не ясно, как правило соответствия данных при использовании tf.data с keras, оно нигде не объяснено.Я предполагаю, что набор обучающих данных должен быть кортежем (inputs, targets).Если ваша сеть использует несколько входов, то входы - это еще один кортеж (input_1, input_2, ...), то же самое с целями.Это правильно?

Есть ли способ повторно использовать данные, переданные в модель?Предположим, что для my_loss_1 и my_loss_2 требуется target_1, нужно ли мне менять train_ds на дубликаты?

train_ds = tf.data.Dataset.zip((input_ds_1, input_ds_2), (target_ds_1, (target_ds_1, target_ds_2)))
...