• GAN中train与eval训练


    1.问题

    https://discuss.pytorch.org/t/why-dont-we-put-models-in-train-or-eval-modes-in-dcgan-example/7422

    链接中问题当在生成时,如果将generator状态设置为eval(),那么就会模式坍缩,只生成一张图片。

    回答:

    GAN的训练非常不稳定,eval不如train模式下稳定,为了模型在eval的时候稳定,在结束训练时,需要先用一个minibatch做生成,这样bn层的mean和std都会稳定。

    # Training phase
    G.train()
    D.train()
    for epoch in range(n_epoch):
        ....  # train D and G
    
    # Now run generation for a few min-batch while keeping the mode as "train"
    for _ in range(additional_iters):
        z = ...  # sample a z
        _ = G(z)
    
    # Now switch to eval mode to do the actual generation
    G.eval()
    D.eval()
    z = ...
    samples2output = G(z)

    但eval的时候mean和std会有什么影响吗?

    2.训练技巧

    https://www.jianshu.com/p/aab68eb0f7ed

    误差曲线走向:

    理想的Generator loss的误差曲线应该是不断往0靠的下降的抛物线。

    理想的Discrimnator loss的误差曲线应该是最终在0附近振荡,即傻傻分不清。换言之,就是判别器有50%的概率判断你是真的,50%概率判断你是假的。

    https://zhuanlan.zhihu.com/p/188734829

    • 在生成器损失使用梯度惩罚情况下,判别器尽量避免使用BN
    • 避免梯度稀疏及信息丢失:

  • 相关阅读:
    用with来打开文本文件
    字符串与列表的转换
    python中的字典两种遍历方式
    Sigar介绍与使用
    tomcat结合nginx使用小结
    AtomicInteger简介
    BeanUtils.copyProperties() 用法
    Spring RPC 入门学习(3)-插入Student对象
    Spring RPC 入门学习(3)-获取Student对象
    Spring RPC 入门学习(2)-获取Map对象
  • 原文地址:https://www.cnblogs.com/BlueBlueSea/p/14638292.html
Copyright © 2020-2023  润新知