История множественных потерь - PullRequest
0 голосов
/ 18 марта 2020

Я использую пользовательские функции потерь в архитектуре 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 просто скаляр, который является суммой двух функций потерь.

Как я могу получить два отдельных компонента функции потери? Я делаю что-то неправильно? Спасибо.

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