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

1、Base_Line_V2_Nor

这是练习时常24307.5s的增加了归一化处理的加深一点点CNN练习生

2、条件预设

A、数据使用情况

​ 1、完全使用labeled的数据集,没有采用unlabeled的数据集,数据量为train_set:3080,valid_set:660

​ 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(),
    transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]),
])

# 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、总结

1、第101轮

请添加图片描述
在这里插入图片描述

5060.8s	202	[ Train | 101/1000 ] loss = 1.01228, acc = 0.67043
5069.5s	203	[ Valid | 101/1000 ] loss = 1.15767, acc = 0.62173

模型训练正常,好像对数据进行归一化处理,也没有让这些训练的尖刺消失,暂时不知道是什么东西。

2、第190轮

请添加图片描述
在这里插入图片描述

9493.2s	389	[ Train | 190/1000 ] loss = 0.65504, acc = 0.78157
9501.7s	390	[ Valid | 190/1000 ] loss = 0.94915, acc = 0.72083

感觉还行,效果相当于没有加的时候的第210多轮,加快了拟合速度

3、第307轮

请添加图片描述
在这里插入图片描述

15292.4s	628	[ Train | 307/1000 ] loss = 0.38810, acc = 0.87178
15301.2s	629	[ Valid | 307/1000 ] loss = 0.90180, acc = 0.73452

到这里同样已经开始产生较为严重的过拟合了,但是还没有触发早停机制,效果和没加之前,有一点点轻微的提升

4、第386轮

请添加图片描述
在这里插入图片描述

19218.7s	789	[ Train | 386/1000 ] loss = 0.34434, acc = 0.88918
19227.1s	790	[ Valid | 386/1000 ] loss = 0.87424, acc = 0.75923

最接近Strongbase line的一次,也是触发早停的最后一次记录,效果还不错,添加了对数据的正则化,确实带来了不错的提升,也确实加快了模型的收敛。可惜的是忘记保存最后一轮的模型了,整整多训练了100个epoch,尽管已经嘎嘎过拟合了,但是我还是挺期待那个效果的。呜呜呜!!!

24299.1s	992	[ Train | 487/1000 ] loss = 0.23309, acc = 0.92558
24307.5s	993	[ Valid | 487/1000 ] loss = 0.96833, acc = 0.74583
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 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、付费专栏及课程。

余额充值