2017-10-17 92 views
0

最近我读了培训甘斯纸改进的技术,笔者定义的损失如下: enter image description here 后来我查看文章的代码,损失定义的相应代码:在改进-GaN损失实现

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_unll_gen,这是代码0.5*T.mean(T.nnet.softplus(l_unl)) + 0.5*T.mean(T.nnet.softplus(l_gen))告诉我们。 在此先感谢。

回答

0

您应该阅读这个Improve-gan的片段。 enter image description here

Loss_unlabel对应于L_ {无监督}。

请参阅下面的内容。 enter image description here

然后,由功能nn.softplusnn.logsum_exp的代码,你会得到loss_unl

希望的代码,以帮助您。

+0

这是一个很好的解释,谢谢@ zhangqianhui。 – Schaffer

+0

你能解释为什么loss_lab应该是代码中的吗? @ zhangqianhui? – Schaffer

+0

@Schaffer,如果不明白这个原始代码,你可以看到这个code.https://github.com/gitlimlab/SSGAN-Tensorflow。半甘的工具有很多方法。希望能帮助你。 – zhangqianhui