李宏毅2022机器学习hw6

本文档是李宏毅2022年机器学习课程的第六次作业,目标是生成1000张二次元人脸。数据集来源于Crypko并提供了百度网盘链接。作业中探讨了四种不同的基线方法:基础代码运行、增加训练次数、将DCGAN改进为WGAN以及应用style-gan。
部署运行你感兴趣的模型镜像

目录

​Machine Learning HW6

一、任务

二、数据集

         Crypko:

三、结果

四、改进方法

        4.1 Simple line 

                运行课程上给的基础代码。

        4.2 Medium Baseline 

                增加训练次数

        4.3 Strong Baseline

                把DCGAN转化成WGAN

··              修改gp函数

                 修改loss函数

        4.4 Boss Baseline 

                 style-gan


Machine Learning HW6

一、任务

        二次元人物脸的生成,最后的目标是生成1000张二次元人物的人脸 

二、数据集

         Crypko:

        百度网盘:

        链接:https://pan.baidu.com/s/10QORgGHFEZ-nYETL_1miCw?pwd=a37q 
        提取码:a37q

三、结果

四、改进方法

        4.1 Simple line 

                运行课程上给的基础代码。

        4.2 Medium Baseline 

                增加训练次数

                将n_epoch调大 

"n_epoch": 50,
"n_critic": 2,

        4.3 Strong Baseline

                把DCGAN转化成WGAN

# 去掉discriminator最后一个sigmoid层。
# nn.Sigmoid()
# 使用nn.InstanceNorm2d层
def conv_bn_lrelu(self, in_dim, out_dim):
        return nn.Sequential(
            nn.Conv2d(in_dim, out_dim, 4, 2, 1),
            #nn.BatchNorm2d(out_dim),
            nn.InstanceNorm2d(out_dim),
            nn.LeakyReLU(0.2),
        )

··                修改gp函数

    def gp(self, r_imgs, f_imgs):
        Tensor = torch.cuda.FloatTensor
        alpha = Tensor(np.random.random((r_imgs.size(0), 1, 1, 1)))
        interpolates = (alpha*r_imgs + (1 - alpha)*f_imgs).requires_grad_(True)
        d_interpolates = self.D(interpolates)
        fake = Variable(Tensor(r_imgs.shape[0]).fill_(1.0), requires_grad=False)
        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(1, dim=1) - 1)**2).mean()
        return gradient_penalty

                修改loss函数

gradient_penalty = self.gp(r_imgs, f_imgs)
loss_D = -torch.mean(r_logit) + torch.mean(f_logit) + gradient_penalty
......
loss_G = -torch.mean(self.D(f_imgs))

        4.4 Boss Baseline 

                style-gan

!pip install stylegan2_pytorch
#训练模型
!stylegan2_pytorch --data faces --image-size 64 --batch-size 16 --num-train-steps=20000
#训练结束后,利用模型生成图片,可选择使用哪个epoch的模型来生成
!stylegan2_pytorch --generate --num_generate=4 --num_image_tiles=8
#生成转换动画
!stylegan2_pytorch --generate-interpolation --interpolation-num-steps 100

         

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

### 李宏毅 2022 机器学习 HW3 的主要内容 #### 资料概述 李宏毅教授的《2022机器学习》课程中的第三次作业(HW3)主要围绕图像分类展开,涉及模型设计、数据增强以及优化策略等内容。以下是关于该次作业的一些核心要点: 1. **训练数据增强** 数据增强技术被广泛应用于提升模型性能。通过增加样本多样性来减少过拟合现象的发生,在本次作业中,采用数据增强方法后,private leaderboard得分达到了0.760562[^1]。 2. **交叉验证与集成学习 (Cross Validation & Ensemble)** 使用交叉验证和模型集成的方法可以进一步提高预测准确性。这种方法使得private leaderboard上的得分为0.816473[^1]。 3. **测试集数据增强 (Test Dataset Augmentation)** 测试阶段的数据增强同样重要,它能够帮助模型更好地泛化到未见过的数据上。应用此技巧之后,private score上升至0.82458[^1]。 4. **ResNet架构的应用** ResNet作为一种经典的卷积神经网络结构,因其残差连接机制而闻名。在本作业中选用ResNet50作为基础框架,并对其进行了自定义修改以适配特定任务需求。具体实现如下所示: ```python import torch.nn as nn from torchvision import models def ResNet1(): model = models.resnet50(weights=None) model.conv1.in_channels = 3 model.fc = nn.Sequential( nn.Flatten(), nn.Linear(2048, 512), nn.LeakyReLU(0.1), nn.BatchNorm1d(512), nn.Dropout(0.2), nn.Linear(512, 11) ) model.fc.out_features = 11 return model ``` 此外,利用ResNet并调整超参数可使private leaderboard成绩达到0.86555[^1]。 5. **图像标准化处理 (Image Normalization)** 对输入图片进行规范化操作有助于加速收敛过程并改善最终效果。实施这一措施后,private score升至0.87494[^1]。 6. **Batch Size的影响** 批量大小的选择对于梯度估计质量有着直接影响。适当减小batch size可能会带来更优的结果——在此案例下,相应分数为0.895[^1]。 7. **Label Smoothing的作用** Label smoothing是一种正则化手段,旨在缓解因硬标签带来的潜在问题。其引入对整体表现亦有正面贡献。 8. **强基线改进方案 (Strong Baseline Enhancement)** 针对比标准版更强力的基础解决方案而言,除了加深网络层数之外还增加了迭代轮数;与此同时配合Test Time Augmentation(TTA),即分别基于不同转换方式创建多个用于评估的加载器(testloader)并将它们按一定比例加权组合起来共同决定最后输出概率分布向量的形式。经由这些改动后的总评分为0.88247,距离顶级水平已然非常接近但仍需继续探索最佳配置选项[^3]。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦想的小鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值