我正在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
只是两个损失函数之和的标量。
如何获得损失函数的两个单独的成分?难道我做错了什么?谢谢。