cGANs with Projection Discriminator Takeru Miyato, Masanori Koyama 03 Feb 2018ICLR 2018 Conference Blind Abstract: We propose a novel, projection based way to incorporate the conditional information into the discriminator ImageNet) dataset from the current state-of-the-art result, and we achieved this with a single pair of a discriminator OpenReview Takeru Miyato, Masanori Koyama. cGANs with Projection Discriminator. ICLR2018. $CONFIG --results_dir=$LOGDIR --data_dir=$PREPROCESSED_DATA_DIR Spectral normalization + projection discriminator
https://github.com/pfnet-research/sngan_projection cGANs with Projection Discriminator Takeru Miyato Abstract: We propose a novel, projection based way to incorporate the conditional information into the discriminator ImageNet) dataset from the current state-of-the-art result, and we achieved this with a single pair of a discriminator OpenReview Takeru Miyato, Masanori Koyama. cGANs with Projection Discriminator. ICLR2018. $CONFIG --results_dir=$LOGDIR --data_dir=$PREPROCESSED_DATA_DIR Spectral normalization + projection discriminator
result column="gender" property="gender"/> <result column="email" property="email"/> <discriminator gender"/> <result column="last_name" property="email"/> </case> </discriminator
) D的real概率的loss # Train the discriminator with real images real_validity = discriminator(real_images , labels) # Calculate loss on real images; discriminator's goal: classify real images as real (1) weights d_loss.backward() 整合: def discriminator_train_step(batch_size, discriminator, generator, with real images real_validity = discriminator(real_images, labels) # Calculate loss on real , Variable(torch.ones(batch_size)).to(device)) # Train the discriminator with fake images z
discriminator接收二维数组,然后判断这二维数组是来自训练数据还是来自generator,如果generator生成的二维数组使得discriminator无法区分是来自训练数据还是generator ,这个流程反复进行直到generator生成的图片被discriminator接受为止,此时generator生成的图片质量与训练discriminator所用的图片质量几乎一模一样。 接下来我们看看discriminator网络的实现: #generator的输出就是discriminator的输入 discriminator_input = layers.Input(shape=( = keras.models.Model(discriminator_input, x) discriminator.summary() discriminator_optimizer = keras.optimizers.RMSprop 两者连接成整体的代码如下: ''' 我们把generator和discriminator连成一个整体,在对整体进行训练时, 只更改generator网络的参数,discriminator的参数保持不变
Args: discriminator_gen_outputs: Discriminator output on generated data. , weights)) as scope: discriminator_gen_outputs = _to_float(discriminator_gen_outputs) loss Args: discriminator_real_outputs: Discriminator output on real data. discriminator_gen_outputs: Discriminator output on generated data. )) as scope: discriminator_real_outputs = _to_float(discriminator_real_outputs) discriminator_gen_outputs
making the correct choice. 2. update the discriminator ($D$) to maximize the probability of the discriminator on generated data: 更新generator ($G$)以最大化discriminator做出错误分类的概率。 Update the discriminator ($D$), to maximize the probability of the discriminator making the correct choice on real and generated data: 更新discriminator ($D$)以最大化discriminator做出正确分类的概率。 - discriminator_loss, generator_loss: Functions to use for computing the generator and discriminator
Loss: 2.398796, Discriminator Loss: 0.512406 Step 2500: Generator Loss: 3.057401, Discriminator Loss : 3.193395, Discriminator Loss: 0.265896 Step 4000: Generator Loss: 5.071162, Discriminator Loss: 0.409445 , Discriminator Loss: 0.350634 Step 5500: Generator Loss: 5.467363, Discriminator Loss: 0.424895 Step Loss: 4.165446, Discriminator Loss: 0.150221 Step 8000: Generator Loss: 5.681596, Discriminator Loss : 4.660669, Discriminator Loss: 0.182506 Step 9500: Generator Loss: 4.492438, Discriminator Loss: 0.411817
discriminator = Sequential() discriminator.add(Dense(1024, input_dim=784, kernel_initializer=initializers.RandomNormal (stddev=0.02))) discriminator.add(LeakyReLU(0.2)) discriminator.add(Dropout(0.3)) discriminator.add(Dense (512)) discriminator.add(LeakyReLU(0.2)) discriminator.add(Dropout(0.3)) discriminator.add(Dense(256) ) discriminator.add(LeakyReLU(0.2)) discriminator.add(Dropout(0.3)) discriminator.add(Dense(1, activation discriminator.trainable = True dloss = discriminator.train_on_batch(X, yDis)
[3]), name='Discriminator/b_6') } # Discriminator def discriminator(input_images): with tf.variable_scope ("Discriminator"): # Encoder out_1 = tf.nn.conv2d(input_images, discriminator_variables_dict['W_1 ['b_1']) out_1 = batch_norm(out_1, discriminator_variables_dict['beta_1'], discriminator_variables_dict ['b_2']) out_2 = batch_norm(out_2, discriminator_variables_dict['beta_2'], discriminator_variables_dict ['b_3']) out_3 = batch_norm(out_3, discriminator_variables_dict['beta_3'], discriminator_variables_dict
) disc_loss = discriminator_loss(real_output, fake_output) gradients_of_discriminator = disc_tape.gradient(disc_loss, discriminator.trainable_variables) discriminator_optimizer.apply_gradients (zip(gradients_of_discriminator, discriminator.trainable_variables)) # 训练生成器noise = tf.random.normal = build_discriminator()# 训练模型train_gan(generator, discriminator, dataset, epochs)# 生成视频帧generated_videos = build_discriminator()# 训练GANs# ...VI.
接下来我们看看鉴别者网络的代码实现: class Discriminator(Model): def __init__(self, params): super(Discriminator ) ) if params.discriminator_batch_norm_momentum and i > 0: self.discriminator_layers.append )) if params.discriminator_dropout_rate: self.discriminator_layers.append = len(discriminator_params.discriminator_conv_filters) self.discriminator = Discriminator(discriminator_params self.discriminator_optimizer.apply_gradients(ziep(grads, self.discriminator.trainable_variables))
Loss: 4.470613, Discriminator Loss: 0.117488 Step 10000: Generator Loss: 3.813103, Discriminator Loss , Discriminator Loss: 0.362798 Step 22000: Generator Loss: 3.760236, Discriminator Loss: 0.188211 Step Discriminator Loss: 0.211489 Step 28000: Generator Loss: 3.523777, Discriminator Loss: 0.273607 Step Loss: 3.081174, Discriminator Loss: 0.332788 Step 38000: Generator Loss: 2.946176, Discriminator Loss Discriminator Loss: 0.477840 Step 56000: Generator Loss: 2.561056, Discriminator Loss: 0.449300 Step
GANs通过两个神经网络——生成器(Generator)和判别器(Discriminator)——之间的对抗训练,实现了从噪声中生成高质量、逼真的图像和其他类型的内容。 判别器(Discriminator):接受真实数据和生成器生成的假数据,尝试区分它们。 生成器的目标是欺骗判别器,使其认为生成的数据是真实的,而判别器的目标是正确地区分真实数据和生成数据。 (nn.Module): def __init__(self): super(Discriminator, self). 初始化模型和优化器 generator = Generator().to(device) discriminator = Discriminator().to(device) optimizer_G = optim.Adam(generator.parameters(), lr=0.0002) optimizer_D = optim.Adam(discriminator.parameters(),
model class Discriminator(nn.Module): def __init__(self, img_shape): super(Discriminator __init__() self.generator = generator self.discriminator = discriminator def forward(self, x): x = self.generator(x) x = self.discriminator(x) return d_optimizer = optim.Adam(discriminator.parameters(), lr=0.0002, betas=(0.5, 0.999)) g_optimizer = Discriminator(img_shape) gan = GAN(generator, discriminator) compile_models(generator, discriminator
训练一个discriminator让in-class样本的latent representation的分布接近与Uniform(-1, 1)。 再训练一个discriminator让latent通过generator (decoder)生成的图片更加真实。 (即让discriminator的loss变大)。 Visual Discriminator 我们希望从latent space上随机的sample,经过generator(decoder)之后,其重建图像能尽可能像真实的图片。 同样的,我们希望decoder生成的图像和真实图像越接近越好,从而骗过discriminator(即让其loss变大)。
= pix2pix.discriminator(norm_type='instancenorm', target=False) discriminator_y = pix2pix.discriminator =discriminator_x, discriminator_y=discriminator_y, =discriminator_x_optimizer, discriminator_y_optimizer=discriminator_y_optimizer ( zip(discriminator_x_gradients, discriminator_x.trainable_variables)) discriminator_y_optimizer.apply_gradients ( zip(discriminator_y_gradients, discriminator_y.trainable_variables)) for epoch in range
(): discriminator=Sequential() discriminator.add(Dense(units=1024,input_dim=784)) discriminator.add (LeakyReLU(0.2)) discriminator.add(Dropout(0.3)) discriminator.add(Dense(units=512)) discriminator.add (LeakyReLU(0.2)) discriminator.add(Dropout(0.3)) discriminator.add(Dense(units=256)) discriminator.add (LeakyReLU(0.2)) discriminator.add(Dense(units=1, activation='sigmoid')) discriminator.compile = create_discriminator() gan = create_gan(discriminator, generator) for e in range(1,epochs+
discriminator_vars是要选择的键 discriminator_vars = ['hidden_units_d', 'seq_length', 'cond_dim', 'batch_size ', 'batch_mean'] discriminator_settings = dict((k, settings[k]) for k in discriminator_vars) 更新python
GAN的基本原理 GAN的基本原理其实非常简单,它包含两个网络,G网络(Generator)和D网络(Discriminator)。 Model Discriminator是一个基于CNN的分类器(classifier)。 discriminator = make_discriminator_model() decision = discriminator(generated_image) print (decision) loss Discriminator Loss用来衡量discriminator能够区分图像真假的能力。 , generator.trainable_variables)) discriminator_optimizer.apply_gradients(zip(gradients_of_discriminator