Я обучил порождающую состязательную сеть для реализации задачи преобразования изображения в изображение. Я обучил модель с помощью WassersteinGAN с градиентным штрафом, как в следующем коде. Однако, как показано на рисунке, в процессе обучения сети я обнаружилчто потеря генератора станет отрицательной и изменится между положительной и отрицательной.Это нормальное явление?
gen_loss_GAN = -tf.reduce_mean(dis_fake)
gen_loss_L1 = tf.reduce_mean(l1_loss(gen_label, train_label))
gen_loss = gen_loss_GAN * args.lamda_gan_weight + gen_loss_L1 * args.lamda_l1_weight #the total generator loss
eps = tf.random_uniform([1, 1], minval=0., maxval=1.)
X_inter = eps*train_label + (1. - eps)*gen_label
grad = tf.gradients(discriminator(image=concat_image, targets=X_inter, reuse=True), [X_inter])[0]
print(grad)
grad_norm = tf.sqrt(tf.reduce_sum((grad)**2, axis=1))
grad_pen = 10 * tf.reduce_mean((grad_norm - 1.)**2)
dis_loss = -tf.reduce_mean(dis_real)+tf.reduce_mean(dis_fake)+grad_pen #the total discriminator loss