Почему при реализации «Кодировщика контекста: изучение функций путем рисования» генератор всегда заполнял замаскированные части всех изображений одним цветом? - PullRequest
0 голосов
/ 21 июня 2020

При реализации «Кодировщик контекста: изучение функций путем рисования» с использованием Tf2 замаскированная часть всегда заполняется случайно выбранным цветом. Как решить эту проблему.

Генератор

    # Encoder
    self.model.add(Conv2D(128, kernel_size=4, strides=2, padding="same",name="conv1",input_shape=(32,32,3),kernel_initializer=tf.random_normal_initializer(stddev=0.02)))
    self.model.add(Activation('relu'))
    self.model.add(BatchNormalization())
    self.model.add(Conv2D(256, kernel_size=4, strides=2, padding="same",name="conv2",kernel_initializer=tf.random_normal_initializer(stddev=0.02)))
    self.model.add(Activation("relu"))
    self.model.add(BatchNormalization())
    self.model.add(Conv2D(512, kernel_size=4, strides=2, padding="same",name="conv3",kernel_initializer=tf.random_normal_initializer(stddev=0.02)))
    self.model.add(Activation('relu'))
    self.model.add(BatchNormalization())
     
    self.model.add(Conv2D(100,kernel_size=4,name="conv5"))
    
    # Decoder
    self.model.add(Conv2DTranspose(512,kernel_size=4,name="conv6",strides=2))
    self.model.add(BatchNormalization())
    self.model.add(LeakyReLU(alpha=0.2))
    self.model.add(Conv2DTranspose(256, kernel_size=4,strides=2,name="conv7",padding="same",kernel_initializer=tf.random_normal_initializer(stddev=0.02)))
    self.model.add(Activation('relu'))
    self.model.add(BatchNormalization())
    self.model.add(Conv2DTranspose(channels, kernel_size=4,strides=2,name="conv8",padding="same",kernel_initializer=tf.random_normal_initializer(stddev=0.02)))
    self.model.add(Activation('relu'))
    self.model.add(Activation('tanh'))  

Дискриминатор

    self.model.add(Conv2D(64, kernel_size=4, strides=2, padding="same",input_shape=(16,16,3),name="dconv1",kernel_initializer=tf.random_normal_initializer(stddev=0.02)))
    self.model.add(LeakyReLU(alpha=0.2))
    self.model.add(BatchNormalization())
    self.model.add(Conv2D(128, kernel_size=4, strides=2, padding="same",name="dconv2",kernel_initializer=tf.random_normal_initializer(stddev=0.02)))
    self.model.add(LeakyReLU(alpha=0.2))
    self.model.add(BatchNormalization())
    self.model.add(Conv2D(256, kernel_size=4,strides=2, padding="same",name="dconv3",kernel_initializer=tf.random_normal_initializer(stddev=0.02)))
    self.model.add(LeakyReLU(alpha=0.2))
    self.model.add(BatchNormalization())
    self.model.add(Flatten())
    self.model.add(Dense(1,activation="sigmoid"))

Обновить Часть

def train_step(masked_imgs,masked_parts,valid,fake):
  with tf.GradientTape() as gen_tape, tf.GradientTape() as dis_tape:
    
    gen_parts = Generator(masked_imgs) 
    g_adv = adv_loss(Discriminator(gen_parts), valid)
    g_pixel = np.mean(losses.mean_squared_error(gen_parts, masked_parts))      
    g_loss = 0.01* g_adv + 0.99* g_pixel      
   
    real_loss = adv_loss(Discriminator(masked_parts),valid)
    fake_loss = adv_loss(Discriminator(gen_parts),fake)
    d_loss = 0.5*(real_loss+fake_loss)

    gradients_d = dis_tape.gradient(d_loss, Discriminator.trainable_variables)
    optimizer_d.apply_gradients(zip(gradients_d,Discriminator.trainable_variables))

    
    gradients_g = gen_tape.gradient(g_loss, Generator.trainable_variables)
    optimizer_g.apply_gradients(zip(gradients_g,Generator.trainable_variables))

Я играл со скоростью обучения, но это не так не решаю проблему. Я использую набор данных Cifar10.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...