Сгенерированное изображение не раскрашено в GAN - PullRequest
1 голос
/ 11 июня 2019

У меня есть сборщик изображений. Это создает хорошее изображение, но, боюсь, оно создает изображение в градациях серого. Не знаю почему, может проблема в модели? Возможно потеря? Или, может быть, что-то еще. Часть авто-кодирования в модели генератора работает хорошо, но не дает цветного изображения. Вот код, который вам может понадобиться

def train(self,gray_scale_image_dataset,color_image_dataset,test_image):
    generator = self.generator_model()
    discriminator = self.discriminator_model()

    gen_optimizer = tf.train.AdamOptimizer(self.learning_rate)
    dis_optimizer = tf.train.AdamOptimizer(self.learning_rate)
    for eachEpoch in range(self.epochs):

        with tf.GradientTape() as gen_tape, tf.GradientTape() as disc_tape:
            for i in range(20):
                random.shuffle(gray_scale_image_dataset)
                random.shuffle(color_image_dataset)
            gray_scale_dataset_image = gray_scale_image_dataset[:self.batch_size]
            color_dataset_image_batch = color_image_dataset[:self.batch_size]

            generated_image = generator(gray_scale_dataset_image)
            real_output = discriminator(color_dataset_image_batch)
            fake_output = discriminator(generated_image)

            gen_loss = self.generator_loss(fake_output,generated_image,color_dataset_image_batch)
            dis_loss = self.discriminator_loss(fake_output,real_output)
            print("generator = {} discriminator =  {}".format(gen_loss,dis_loss))            
        gen_gradients = gen_tape.gradient(gen_loss,generator.trainable_variables)
        disc_gradients = disc_tape.gradient(dis_loss,discriminator.trainable_variables)
        print("APPLYING GRADENTS")
        gen_optimizer.apply_gradients(zip(gen_gradients, generator.trainable_variables))
        dis_optimizer.apply_gradients(zip(disc_gradients, discriminator.trainable_variables))

        print ("EPOCHS COMPLETED = {} ".format(eachEpoch))
        #for drawing test_image
        self.draw_images(generator,test_image)

Функция потерь генератора имеет MSE и сигмоидальную перекрестную энтропию

def generator_loss(self,fake_output,generated_image, actual_image,regularizer_lambda=100):
        mse = tf.reduce_mean(regularizer_lambda*tf.keras.losses.mean_absolute_error(generated_image, actual_image))
        return tf.nn.sigmoid_cross_entropy_with_logits(labels = tf.ones_like(fake_output)*0.9,logits = fake_output) + mse

Вывод не окрашен, вот пример выходного изображения из заданного изображения в градациях серого: The image after 50 epochs!

...