【李宏毅2022 机器学习春】hw3_CNN(Boss baseline)

实验记录

在这里插入图片描述
单个model,224:resize 224
在这里插入图片描述
在这里插入图片描述
两个model做ensemble,private 没过 boss baseline
在这里插入图片描述
验证Test Time Augmentation的作用,确实有作用,提升0.01
在这里插入图片描述
在这里插入图片描述
Test Time Augmentation + ensemble

在这里插入图片描述

评分标准

在这里插入图片描述

收获

  1. 单个模型训练,离boss baseline差一点,需要做 Test Time Augmentation + ensemble
  2. Test Time Augmentation 在测试时多transform几张图片,一起做ensemble,transform随机因此效果可能差一点,这里我运行了两次。另外,需要单独取一张图片出来,因此不能做batch的预测(也可能我代码写得差),所以 速度会很慢,相当于一个一个预测。Test Time Augmentation有点耍流氓的意思了,类似的见到方法有5-crop(四角 + 中心),10-crop(5-crop + 翻转)
    什么是深度学习中的1-crop和10-crop?
  3. ensemble常见的做法有:1.直接概率取平均;2.voting,甚至级联voting,详见去年作业一些改进想法
  4. cross validation没有做,不做可以重新划分训练集和验证集的比例(sample code = 3:1,可以5:1),验证集只是用来靠看有无过拟合,并不需要太多。
  5. cross validation相当于训练了多个模型,自己跑两份代码做ensemble也是一样的效果。
  6. =====================================================================
  7. 数据增强部分:一般来说随机裁剪和颜色变换就很有效,可以参考 官方库的训练代码,详见图像分类训练技巧之数据增强篇,甚至有打包好的数据增强如TrivialAugment,但可能数据集不同不一定适用。
  8. 更高级的数据增强mixup没有用,不会。
  9. 数据增强会导致训练和测试时的物体分辨率(resolution)不一致,继而提出FixRes策略来改善这个问题:常规训练后再采用更大的分辨率对模型的classifier或最后的几层layers进行finetune >https://zhuanlan.zhihu.com/p/347537453
  10. 模型设计部分:自己手撸一个CNN,从224开始用max pool降采样,最后全局最大池化self.pooling = torch.nn.AdaptiveMaxPool2d((1, 1)),和直接使用预定义的resnet18,效果差不多。一般来说,全连接层只做分类头即可。
  11. 考虑用卷积步长实现降采样还是用max pool,详见降采样使用 conv步长实现还是pool实现好?。结论:卷积神经网络小,用max pool,反之卷积(resnet 是用卷积步长实现的降采样)。
  12. conv + bn + relu, Resnet_bn_relu在激活后+还是激活前?结论:激活函数前
  13. ==============================================================
  14. 训练部分nn.utils.clip_grad_norm_梯度裁剪,早停策略,画图查看train_acc, train_loss和val_acc, val_loss的差距判断有无过拟合
  15. 学习率和优化器直接用的sample code,没有用余弦退火学习率,下次可以用下余弦衰减学习率,一般来说,越训练学习率越小。
  16. 80个epoch差不多收敛了。一般来说设置100个epoch就差不多了。
  17. other tricks:label smoothing, FacalLoss …
    在这里插入图片描述
  18. pytorch输出网络每层的参数和维度信息
import torch.nn as nn
from torchsummary import summary

#定义网络结构
net = nn.Sequential(
            nn.Conv2d(1,8,kernel_size=7),
            nn.MaxPool2d(2,stride=2),
            nn.ReLU(True),
            nn.Conv2d(8,10,kernel_size=5),
            nn.MaxPool2d(2,stride=2),
            nn.ReLU(True)
        )

#输出每层网络参数信息
summary(net,(1,28,28),batch_size=1,device="cpu")
————————————————
版权声明:本文为CSDN博主「修炼之路」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/sinat_29957455/article/details/112701029

参考资料

数据增强部分

图像分类训练技巧之数据增强篇:https://zhuanlan.zhihu.com/p/430563265

在这里插入图片描述
在这里插入图片描述
https://zhuanlan.zhihu.com/p/347537453

【Pytorch学习笔记】数据增强:https://blog.csdn.net/Miao_sin/article/details/122474968

torchvision.transforms.RandomResizedCrop方法解读:https://blog.csdn.net/qq_36915686/article/details/122136299

在这里插入图片描述

torchvision.transforms.ColorJitter(brightness=0, contrast=0, saturation=0, hue=0):

在这里插入图片描述

模型选择设计部分

ResNet详解与分析:https://www.cnblogs.com/shine-lee/p/12363488.html

Resnet_bn_relu在激活后+还是激活前?

from: https://zhuanlan.zhihu.com/p/31852747
from: https://www.cnblogs.com/shine-lee/p/12363488.html在这里插入图片描述

降采样使用 conv步长实现还是pool实现好?

from: https://zhuanlan.zhihu.com/p/46633171
在这里插入图片描述

训练部分

nn.utils.clip_grad_norm_

from: https://blog.csdn.net/zhaohongfei_358/article/details/122820992
在这里插入图片描述

K-fold 交叉验证
在这里插入图片描述

称霸Kaggle的十大深度学习技巧

from: https://zhuanlan.zhihu.com/p/41379279
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43154149/article/details/123943748