李宏毅hw-6利用GAN生成动漫图像

一、查漏补缺、熟能生巧:

1.什么是转置卷积convTranspose、以及这种转置卷积怎么使用:

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

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

(2)对于这个代码

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

来自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循环注释掉,其他的就按照助教给的注释来就好了

复制代码
def compute_gradient_penalty(self,D, real_samples, fake_samples):    
        
        Tensor = torch.cuda.FloatTensor  #if cuda else torch.FloatTensor
        """
        #这里需要参考那个link引入gradient penalty function
        Implement gradient penalty function
        """
        """Calculates the gradient penalty loss for WGAN GP"""
        # Random weight term for interpolation between real and fake samples
        alpha = Tensor(np.random.random((real_samples.size(0), 1, 1, 1)))
        # Get random interpolation between real and fake samples
        interpolates = (alpha * real_samples + ((1 - alpha) * fake_samples)).requires_grad_(True)
        d_interpolates = D(interpolates)
        
        
        
        fake = Variable(Tensor(d_interpolates.shape).fill_(1.0), requires_grad=False)

        # Get gradient w.r.t. interpolates
        gradients = autograd.grad(
            outputs=d_interpolates,
            inputs=interpolates,
            grad_outputs=fake,
            create_graph=True,
            retain_graph=True,
            only_inputs=True,
        )[0]
        gradients = gradients.view(gradients.size(0), -1)
        gradient_penalty = ((gradients.norm(2, dim=1) - 1) ** 2).mean()
        return gradient_penalty

效果:

;

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

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

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

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

相关推荐
Highcharts.js9 小时前
2026年,AI正在重写技术:“工具思维”正在失效?
人工智能·echarts·客户端·highcharts·可视化图表·企业级图表
林伽一9 小时前
训练断网、部署上门槛:AI 基础设施的两道新闸门|2026年10月25日
人工智能·科技·安全·ai·1024程序员节
在所不辞兄9 小时前
【零基础学智能仿真-62】从应变—应力计算弹性常数
人工智能·深度学习·神经网络·机器学习·有限元·智能仿真
二宝哥9 小时前
02.springboot项目对接国内模型实现对话聊天
数据库·人工智能·spring boot
kaixin_啊啊9 小时前
【零基础学AI】第 17 章——一个机器学习项目怎样完成
人工智能·机器学习
Elastic 中国社区官方博客9 小时前
5 分钟内将 56 页扫描文档转化为带引用的答案:面向搜索无法读取的文档的检索增强生成流水线
大数据·运维·人工智能·elasticsearch·搜索引擎·信息可视化·全文检索
天天代码码天天9 小时前
我用 C# 做了个运动计数器:打开摄像头,让电脑帮你数次数
人工智能
STLearner9 小时前
KDD 2026 | (2月轮)时空数据(Spatial-Temporal)论文总结时空【下】(人群移动,城市科学(资源调度,)
大数据·人工智能·python·深度学习·机器学习·语言模型·数据挖掘
云和数据.ChenGuang9 小时前
python sorted函数详细剖析
开发语言·人工智能·windows·python·1024程序员节
打工仔折腾 AI9 小时前
AI Agent 工程化实战(二):5 分钟跑通 Deep Agent 并逐层拆解底层链路
java·数据库·人工智能·后端·python·langchain·ai agent 实战