关于李宏毅ML2021、2022HW3双Boss baseline的一步一步尝试实验记录与总结(五)----接近双Bossline

@CNN

1、Base_Line_V4_CNN

2、条件预设

A、数据使用情况

​ 1、完全使用2022数据,Train:9866. Validation:3430

​ 2、 添加了Augment策略,增加图片的多样性

# It is important to do data augmentation in training.
train_tfm = transforms.Compose([
    transforms.Resize((224, 224)),
    transforms.RandomChoice(
        [transforms.AutoAugment(),
        transforms.AutoAugment(transforms.AutoAugmentPolicy.CIFAR10),
        transforms.AutoAugment(transforms.AutoAugmentPolicy.SVHN)]
    ),
    # 随机水平翻转
    transforms.RandomHorizontalFlip(p=0.5),
    # 对图像执行随机仿射变换。
    transforms.RandomAffine(degrees=20, translate=(0.2, 0.2), scale=(0.7, 1.3)),
    transforms.ToTensor(),
])

# We don't need augmentations in testing and validation.
# All we need here is to resize the PIL image and transform it into Tensor.

test_tfm = transforms.Compose([
    transforms.Resize((224, 224)),
    transforms.ToTensor(),
])

B、模型架构

​ 1、模型为开始的卷积模型

class CNN(nn.Module):
    def __init__(self):
        super(CNN, self).__init__()
        # The arguments for commonly used modules:
        # torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride, padding)
        # torch.nn.MaxPool2d(kernel_size, stride, padding)

        # input image size: [3, 128, 128]
        
        self.cnn_layers = nn.Sequential(
            # 3 * 224 * 224 -> 64 * 111 * 111
            nn.Conv2d(3, 32, 3, padding=1),
            nn.BatchNorm2d(32),
            nn.ReLU(),

            nn.Conv2d(32, 64, 3),
            nn.BatchNorm2d(64),
            nn.ReLU(),
            nn.MaxPool2d(kernel_size=2),

            # 64 * 111 * 111 -> 128 * 54 * 54
            nn.Conv2d(64, 128, 3),
            nn.BatchNorm2d(128),
            nn.ReLU(),
            nn.MaxPool2d(kernel_size=2),

            # 128 * 54 * 54 -> 256 * 26 * 26
            nn.Conv2d(128, 256, 3),
            nn.BatchNorm2d(256),
            nn.ReLU(),
            nn.MaxPool2d(kernel_size=2),

            # 256 * 26 * 26  -> 256 * 12 * 12
            nn.Conv2d(256, 256, 3),
            nn.BatchNorm2d(256),
            nn.ReLU(),
            nn.MaxPool2d(kernel_size=2),

            # 256 * 12 * 12  -> 512 * 5 * 5
            nn.Conv2d(256, 512, 3),
            nn.BatchNorm2d(512),
            nn.ReLU(),
            nn.MaxPool2d(kernel_size=2),
        )
        
        self.fc_layers = nn.Sequential(
            nn.Linear(512 * 5 * 5, 512),
            nn.ReLU(),
            nn.BatchNorm1d(512),
            nn.Dropout(0.5),
            nn.Linear(512, 11),
        )

    def forward(self, x):
        # input (x): [batch_size, 3, 128, 128]
        # output: [batch_size, 11]

        # Extract features by convolutional layers.
        x = self.cnn_layers(x)

        # The extracted feature map must be flatten before going to fully-connected layers.
        x = x.flatten(1)

        # The features are transformed by fully-connected layers to obtain the final logits.
        x = self.fc_layers(x)
        return x

C、训练参数设置

Batch_size_Data = 32

criterion = nn.CrossEntropyLoss()

optimizer = torch.optim.Adam(model.parameters(), lr=0.0003, weight_decay=1e-5)

3、总结

在这里插入图片描述

差一点点就双过Bossbase line了,这次是使用了全部的2022提供的数据集,前面一直是使用2021的数据集,想看看半监督学习出来的效果,结果不管怎么换模型,效果都很差,甚至没有单纯使用labeled数据集的效果好,换了几次模型,也换了训练策略,都得到了很差的效果,所以暂时放弃了,转用全部的2022的数据集,发现真的好简单,2022的作业,提供的数据集相对也够大,随便用了个CNN就取得了很好的效果,差点就双Boss baseline了,这次就Private差大概0.001左右,主要是训练的时间太长了,在Kaggle上面跑的,超过了12个小时,导致数据还没有完全拟合,就这种效果,且导致没有保存训练信息,导致我画不了图、呜呜呜呜。
在这里插入图片描述
最好的一次的Res18但学习时间不够。

还尝试了Res18/Res30,可能都掌握的不好,效果没有这个好,也有可能是训练的时间太少了,每次都只能12个小时,Res30可能都还没有拟合就要停止了。不打算继续尝试了(四个号本周的时间都没了)练不动了,感觉现阶段掌握的方法就是数据增强、可变学习率、权重衰减好像没有其他办法了,使用可变学习率的话,最好先做一个不变学习率的,然后看损失的变化,再哪里学不动了,那个时候改变学习率,效果会更好一点

4、课外总结(新学的一些东西)

使用了可变学习率:可以看这篇,最好是先不用这个去学习一遍,看看模型在哪里大概会卡住,有针对性的去降低学习率,效果还不错:

可变学习率

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
李宏毅ML2021春季课程的第三个作业是一个关于自然语言处理任务的实践项目。这个作业涵盖了文本分类、情感分析和命名实体识别等主题。 学生们的任务是使用提供的数据集,通过实现机器学习算法,对文本进行分类和情感分析。对于命名实体识别,学生们需要利用已有的工具和技术来提取文本中的实体,例如人名、地名、组织名等。 在这个作业中,学生们需要掌握一些基本的自然语言处理技术和算法。他们需要了解常用的特征提取方法,例如词袋模型和TF-IDF。此外,学生们还需要学习基本的分类算法,如朴素贝叶斯和支持向量机。在情感分析任务中,学生们需要了解情感词典和情感分析的基本原理。 此外,学生们还需要使用Python编程语言和相关的自然语言处理工具库,如NLTK和SpaCy。通过实践项目,学生们将获得与自然语言处理相关的实际经验,并加深对机器学习模型和算法的理解。 完成这个作业需要一定的时间和努力。学生们需要仔细阅读作业要求和相关文档,并按照要求完成代码实现和实验报告。他们还需要参考课程讲义和推荐的学习资源,以加深对自然语言处理领域的理解。 总的来说,李宏毅ML2021春季课程的HW3是一个涉及自然语言处理任务的实践作业。通过完成这个作业,学生们将掌握基本的自然语言处理技术和算法,并获得与自然语言处理相关的实际经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

xihuanafengxx

好累好累好累!

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

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

打赏作者

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

抵扣说明:

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

余额充值