深度学习tricks

1

先把预训练模型的特征层抽出来当作一个net,然后让所有的数据过一遍这个net,算是预训练完了。因为不需要计算梯度,可以将bitch_size开到很大,同样只过一遍,速度也很快。 然后把过一遍的数据保存的本地,然后新建一个全链接层的小net,然后加载保存的数据进行训练,同样,因为网络小,bitch_size也可以开到很大,而且速度飞快

2

使用更好的显卡跑训练,节省生命
训练的时候观察 loss 和 val_loss,防止模型过度训练造成过拟合
使用迁移学习等方法加速训练
参考先进的论文提出的结构,自己搭的模型虽然深,不一定有好的结果

3

可以尝试更多的方法提升成绩,比如可以先进行 fine-tuning,提升单个模型准确率,然后再融合,同时还可以进行更多的数据增强来提升模型的泛化能力,期待你更好的成绩。

4
在原数据集上加了预处理,之前做过salient object detection,找了个17年state of art的模型对图像做了预处理,相当于前景提取,做出来是这样的,感觉效果还不错。
这里写图片描述
没加salient object detection预处理正确率75%,加了之后正确率81%,前面的那位只微调resnet50到0.61说明还有调参空间。

http://crcv.ucf.edu/papers/cvpr2017/salobjshortconnections.pdf

5

预测这里我们用到了一个小技巧,我们将每个预测值限制到了 [0.005, 0.995] 个区间内,这个原因很简单,kaggle 官方的评估标准是 LogLoss,对于预测正确的样本,0.995 和 1 相差无几,但是对于预测错误的样本,0 和 0.005 的差距非常大,是 15 和 2 的差别。参考 LogLoss 如何处理无穷大问题,下面的表达式就是二分类问题的 LogLoss 定义。

LogLoss = 1 n i = 1 n [ y i log ( y ^ i ) + ( 1 y i ) log ( 1 y ^ i ) ]

6
shuffle引入梯度下降方向的随机性
避免训练集沿固定路径下降
有时候训练集loss跟精度不好,检查一下是否打开

7
比如可以先进行 fine-tuning,提升单个模型准确率,然后再融合,同时还可以进行更多的数据增强来提升模型的泛化能力,

8
把原始图像的短边随机resize到256-480
test的时候稍微扩张一下test的图片的尺寸
224->288
299->363

猜你喜欢

转载自blog.csdn.net/haseetxwd/article/details/79379937