引言
当tf.keras.losses中的损失函数不够用的时候,就需要我们自己来定义一部分损失函数,来达到我们的需求。
方法
有两种方法来定义我们的损失函数,第一种是直接定义,第二种是子类化tf.keras.losses.Loss。我们来介绍第一种。
损失函数
我们要实现ESRGAN中的这种raletivistic discirminator的损失函数。下面是原文:

首先看到,这种鉴别器分别对fake和real作为输入,输出结果。然后,以Dra(xr, xf)为例,首先求取fake的预测的一个batch的平均值,然后用real预测去减这个平均值,最后求一个sigmoid,作为Dra(xr, xf)。
得出这个结果之后,显然Discriminator的想法是让Dra(xr, xf)最大化,由于经过了sigmoid激活,等价于让Dra(xr, xf)接近于1。同时,让Dra(xf, xr)最小化,由于经过sigmoid激活,等价于让其接近于0。
观察这个形式,发现就是交叉熵的形式,可以计算出两个Dra的形式之后,调用keras的交叉熵进行计算,我们为了更加细化,不调用交叉熵函数。
def discriminator_loss(real_output, fake_output

本文介绍了如何在TensorFlow中定义自定义损失函数,特别是针对ESRGAN(增强超分辨率生成对抗网络)中的相对鉴别器损失。通过直接定义损失函数,作者展示了如何计算并实现鉴别器和生成器的损失,涉及到关键步骤包括计算平均值、sigmoid激活以及交叉熵的变形式。文章强调了理解损失函数计算维度的重要性,并提供了详细的代码示例。
最低0.47元/天 解锁文章
1万+





