【问题标题】:Loss implementation in Improved-GAN改进 GAN 中的损失实现
【发布时间】:2018-03-28 19:50:07
【问题描述】:

最近在看论文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_unll_gen,这是代码0.5*T.mean(T.nnet.softplus(l_unl)) + 0.5*T.mean(T.nnet.softplus(l_gen)) 告诉我们的。 提前致谢。

【问题讨论】:

    标签: deep-learning loss-function


    【解决方案1】:

    你应该阅读一下Improv-gan的这个片段。

    Loss_unlabel 对应于 L_{unsupervised}。

    见下文。

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

    希望能帮到你。

    【讨论】:

    • 你能解释一下为什么 loss_lab 应该是代码中的那个吗? @张千惠?
    • @Schaffer,如果不明白这段原码,可以看这段代码。github.com/gitlimlab/SSGAN-Tensorflow。 semi-gan 的实现有很多方法。希望能帮到你。
    猜你喜欢
    • 2020-08-06
    • 2018-10-03
    • 1970-01-01
    • 1970-01-01
    • 2021-11-19
    • 1970-01-01
    • 1970-01-01
    • 2020-08-26
    • 2020-01-31
    相关资源
    最近更新 更多