Ответ прямо здесь:
self.critic_model = Model(inputs=[real_img, z_disc],
outputs=[valid, fake, validity_interpolated, aux1]) #<- 4 outputs
#4 model losses + 1 total loss:
self.critic_model.compile(loss=[self.wasserstein_loss, #loss for output 0
self.wasserstein_loss, #loss for output 1
partial_gp_loss, #loss for output 2
'categorical_crossentropy'] #loss for output 3
optimizer=optimizer,
metrics=['accuracy'], #replicated, one for each output
loss_weights=[1, 1, 5, 1])
Ваша модель явно имеет 4 выхода, и вы определили одну потерю на выход. Всякий раз, когда у вас есть несколько потерь, Keras будет суммировать для вас общую потерю, поэтому:
'loss'
- это общая потеря (сумма всех потерь для этой модели)
Остальные 4 'model_2_loss'
расположены по порядку:
self.wasserstein_loss
для первого выхода valid
self.wasserstein_loss
, для второго выхода fake
partial_gp_loss
, для validity_interpolated
'categorical_crossentropy'
для aux1
Для метрик, поскольку вы определили только одну, система реплицирует эту же Метри c для каждого из выходов модели:
'model_2_acc'
, Метри c для valid
'model_2_acc_1'
, Метри c для fake
'model_2_acc_2'
, метри c для validity_interpolated
'model_2_acc_3'
, метри c для aux1
Для лучшего имена потерь, вы должны добавить имена к выходам моделей, к потерям и т. д. c., где возможно добавить параметр name
.
Некоторые операции принимают имена, например: Как установить имя моей операции потери в Tensorflow?
Потери в более новых версиях, созданных как объекты, также принимают Имена: https://www.tensorflow.org/api_docs/python/tf/keras/losses/CategoricalCrossentropy
Модели принимают имена, такие как:
self.critic_model = Model(inputs=[real_img, z_disc],
outputs=[valid, fake, validity_interpolated, aux1],
name='critic_model')
Слои принимают имена, поэтому у вас должно быть имя для выходного слоя каждой модели чтобы отслеживать вещи лучше.
Я не совсем знаком с новой концепцией исполнения в нетерпеливом режиме, но вы можете попытаться добавить имя также всякий раз, когда вызываете модель ... не уверен, возможно ли это.