При реализации «Кодировщик контекста: изучение функций путем рисования» с использованием 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.