Я недавно решил попробовать 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
.Мои вопросы:
- Есть ли способ сделать это, придерживаясь API высокого уровня?
- Как передать данные тренировки в модель?Если я сконструировал набор данных как
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)))