0

最近在看论文Improved Techniques for Training GANs,作者对loss的定义如下: 在此处输入图像描述 然后我查看了文章的代码,loss定义对应的代码是:

output_before_softmax_lab = ll.get_output(disc_layers[-1], x_lab, deterministic=False)
output_before_softmax_unl = ll.get_output(disc_layers[-1], x_unl, deterministic=False)
output_before_softmax_gen = ll.get_output(disc_layers[-1], gen_dat, deterministic=False)

l_lab = output_before_softmax_lab[T.arange(args.batch_size),labels]
l_unl = nn.log_sum_exp(output_before_softmax_unl)
l_gen = nn.log_sum_exp(output_before_softmax_gen)
loss_lab = -T.mean(l_lab) + 
T.mean(T.mean(nn.log_sum_exp(output_before_softmax_lab)))
loss_unl = -0.5*T.mean(l_unl) + 0.5*T.mean(T.nnet.softplus(l_unl)) + 0.5*T.mean(T.nnet.softplus(l_gen))    

我认识到这l_lab是用于标记数据的分类损失,因此应该将其最小化,并且l_unl是关于未标记数据的l_gen损失,以及生成图像的损失。我的困惑是为什么鉴别器应该最小化l_unland l_gen,这是代码0.5*T.mean(T.nnet.softplus(l_unl)) + 0.5*T.mean(T.nnet.softplus(l_gen))告诉我们的。提前致谢。

4

1 回答 1

1

你应该阅读一下Improv-gan的这个片段。 在此处输入图像描述

Loss_unlabel 对应于 L_{unsupervised}。

见下文。 在此处输入图像描述

然后,通过函数nn.softplusnn.logsum_exp的代码,您将得到loss_unl的代码

希望能帮到你。

于 2017-11-20T14:04:36.810 回答