Я использую пользовательские функции потерь в архитектуре GAN. После компиляции и запуска модели я хотел бы получить разные компоненты полной потери. Но я получаю только полную потерю, которая является суммой различных компонентов. Ниже приведен скрипт для добавления разных потерь.
model = Model(inputs=[img_lr, img_hr], outputs=[grad_loss, gen_loss])
model.add_loss(grad_loss)
model.add_loss(gen_loss)
model.compile(optimizer=Adam(0.001))
model.metrics_names.append('grad_loss')
model.metrics_tensor.append(grad_loss)
model.metrics_names.append('gen_loss')
model.metrics_tensor.append(gen_loss)
generator_loss = model.train_on_batch([imgs_lr, imgs_hr], None)
Если я запускаю приведенный выше код с Tenorflow 1.12.0, я получаю generator_loss как вектор, который имеет два компонента. Если я пытаюсь использовать более высокую версию Tensorflow 1.13.1, мне нужно было внести некоторые изменения, чтобы добавить потери, как показано ниже:
model = Model(inputs=[img_lr, img_hr], outputs=[grad_loss, gen_loss])
model.add_loss(grad_loss)
model.add_loss(gen_loss)
model.compile(optimizer=Adam(0.001))
model.metrics_names.append('grad_loss')
model.**metrics**.append(grad_loss)
model.metrics_names.append('gen_loss')
model.**metrics**.append(gen_loss)
generator_loss = model.train_on_batch([imgs_lr, imgs_hr], None)
С приведенным выше кодом в Tensorflow 1.13.1, generator_loss
просто скаляр, который является суммой двух функций потерь.
Как я могу получить два отдельных компонента функции потери? Я делаю что-то неправильно? Спасибо.