码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 李宏毅hw-6利用GAN生成动漫图像


    一、查漏补缺、熟能生巧:
    1.什么是转置卷积convTranspose、以及这种转置卷积怎么使用:

    (1)具体的原理直接看李沐老师的那个演示,非常清晰:

    47 转置卷积【动手学深度学习v2】_哔哩哔哩_bilibili

    (2)对于这个代码

    1. def dconv_bn_relu(self, in_dim, out_dim):
    2. return nn.Sequential(
    3. nn.ConvTranspose2d(in_dim, out_dim, kernel_size=5, stride=2,
    4. padding=2, output_padding=1, bias=False), #double height and width
    5. nn.BatchNorm2d(out_dim),
    6. nn.ReLU(True)
    7. )

    来自GPT的说法:

    2.关于weight_init和self.apply()

    3.关于G(z_samples)部分的一个不理解的地方:

    二、DCGAN , WGAN ,WGAN_GP (三种的5个epoch的效果对比):
    1.DCGAN版本:一般般,直接用助教的sample_code即可,

    2.对于WGAN的代码:

    也就是在DCGAN中进行这种修改就好了

    效果:

    3.采用WAGN-GP:

    需要做的修改:

    PyTorch-GAN/implementations/wgan_gp/wgan_gp.py at master · eriklindernoren/PyTorch-GAN (github.com)

     主要是写一个函数,然后把weight_clam那个for循环注释掉,其他的就按照助教给的注释来就好了

    1. def compute_gradient_penalty(self,D, real_samples, fake_samples):
    2. Tensor = torch.cuda.FloatTensor #if cuda else torch.FloatTensor
    3. """
    4. #这里需要参考那个link引入gradient penalty function
    5. Implement gradient penalty function
    6. """
    7. """Calculates the gradient penalty loss for WGAN GP"""
    8. # Random weight term for interpolation between real and fake samples
    9. alpha = Tensor(np.random.random((real_samples.size(0), 1, 1, 1)))
    10. # Get random interpolation between real and fake samples
    11. interpolates = (alpha * real_samples + ((1 - alpha) * fake_samples)).requires_grad_(True)
    12. d_interpolates = D(interpolates)
    13. fake = Variable(Tensor(d_interpolates.shape).fill_(1.0), requires_grad=False)
    14. # Get gradient w.r.t. interpolates
    15. gradients = autograd.grad(
    16. outputs=d_interpolates,
    17. inputs=interpolates,
    18. grad_outputs=fake,
    19. create_graph=True,
    20. retain_graph=True,
    21. only_inputs=True,
    22. )[0]
    23. gradients = gradients.view(gradients.size(0), -1)
    24. gradient_penalty = ((gradients.norm(2, dim=1) - 1) ** 2).mean()
    25. return gradient_penalty

    效果:

    ;

    中午睡觉的时候,用这个kaggle来train一下这个WGAN-GP,

    直接设置critic =5 , epoch =1000 试一试

    很可惜,第36个epoch的时候就崩掉了,不过生成的效果还不错,比之前的都要好一些,

    所以,估计只要epoch足够多,用WGAN-GP可以生成比较好的动漫人脸的

  • 相关阅读:
    推行数字人民币对电信网络诈骗防范治理的影响分析
    达梦数据库——异常崩溃(core)分析处理
    408知识框架总结——计算机网络
    231022|redis_demo
    MySQL中获取时间的方法
    AutoConfigurationPackages.Registrar.class源码阅读
    基于lammps的工件-轧辊组合模型轧制过程模拟
    IntelliJ IDEA-Debug断点调试 看这篇文章就够了
    记录--JS精粹,原型链继承和构造函数继承的 “毛病”
    设计模式截图记录
  • 原文地址:https://blog.csdn.net/xiao_ZHEDA/article/details/132942846
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号