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