概述
题目: 猫狗分类
数据集: train: cat: 12500张
dog: 12500张
test: 12500张
输出结果:对于每一个图片给出该图片属于狗的概率
评价结果:[loss = - frac{1}{n}sumlimits_{i = 1}^n {left[ {y_i^{true}log left( {y_i^{pred}} right) + left( {1 - y_i^{true}} right)log left( {1 - y_i^{pred}} right)} right]} ]
其中: n是样本的数量
注意:当预测精度较高时,如非常接近1或者0,此时会导致 ln(x) 出现偏差较大,因此这里有个小trick。此处的0.8与0.2分别为对Dog和Cat的置信度(实验验证,0.8和0.2的置信度效果好)。具体公式如下:
[fleft( {y_{pred}^i} right) = left{ begin{array}{l}
0.995{rm{ }}y_{pred}^i ge 0.8\
0.005{rm{ }}y_{pred}^i le 0.2\
y_{pred}^i{rm{ }}else
end{array} right.]
分析: 由于此处为二分类问题,且分类的对象:Dog and Cat在ImageNet分类中出现,因此可以适合迁移学习。
方案1: 利用Caffe进行快速实验,查看迁移学习的效果。这里采用的是ResNet101进行的迁移学习,学习的部分为最后的全连接层。参数为:learning rate=1e-3, epochs = 1(实验验证,learning rate = 1e-4收敛较慢)。
方案2:利用基于Tensorflow的高级库Keras进行快速的迁移学习。ImageNet上的模型对比结果为
Model Name | Model Size | Top1 Acc | Top5 Acc |
InceptionResNetV2 | 215MB | 0.804 | 0.953 |
Xception | 88MB | 0.790 | 0.945 |
InceptionV3 | 92MB | 0.788 | 0.944 |
ResNet50 | 99MB | 0.759 | 0.929 |
VGG19 | 549MB | 0.727 | 0.910 |
VGG16 | 528MB | 0.715 | 0.901 |
MobileNet | 17MB | 0.665 | 0.871 |
通过对比,选择模型较好的InceptionResNetV2、Xception和InceptionV3进行finetuning。
实验参数为:learning rate = 1e-3,epoch = 10。
实验过程的测试:
1、在InceptionResNetV2、Xception和InceptionV3中,添加的全连接层探索。实验在InceptionResNetV2的基础上进行的实验。
InceptionResNetV2_1024表示只添加一层全连接层,然后连接Softmax。
InceptionResNetV2_1024*2表示添加两层全连接层,每一层后面加上一个Dropout层,然后连接Softmax。
实验结果如下表所示(last epoch)。
Model | Training Loss | Training Acc | Val Loss | Val Acc | Score on Kaggle | Ranking |
InceptionResNetV2_1024 | 0.1621 | 0.9356 | 0.0252 | 0.9949 | 0.04585 | 35/1314 |
InceptionResNetV2_1024*2 | 0.0061 | 0.9983 | 0.4263 | 0.9584 | 0.21145 | 794/1314 |
2、实验在InceptionResNetV2中,上述lossTrick的作用。实验在InceptionResNetV2的基础上进行的实验。
其中 InceptionResNetV2表示只添加一层全连接层,然后连接Softmax, InceptionResNetV2+modifyLoss表示网络相同,只修改loss的求解方法。
Model | Training Loss | Training Acc | Val Loss | Val Acc | Score on Kaggle | Ranking |
InceptionResNetV2_1024 | 0.1621 | 0.9356 | 0.0252 | 0.9949 | 0.04585 | 35/1314 |
InceptionResNetV2+modifyLoss | 0.1621 | 0.9356 | 0.0252 | 0.9949 | 0.04453 | 28/1314 |
3. 下面给出各个模型的实验结果以及Ensemble的结果。
Model | Training Loss | Training Acc | Val Loss | Val Acc | Score on Kaggle | Ranking |
InceptionResNetV2(Keras-TF) | 0.1621 | 0.9356 | 0.00252 | 0.9949 | 0.04453 | 28/1314 |
Xception(Keras-TF) | 0.0085 | 0.9973 | 0.0197 | 0.9937 | 0.04348 | 25/1314 |
InceptionV3(Keras-TF) | 0.0147 | 0.9950 | 0.0301 | 0.9893 | 0.07149 | 177/1314 |
ResNet101(Caffe) | -- | -- | -- | -- | 0.05707 | 102/1314 |
Ensemble | -- | -- | -- | -- | 0.03735 | 7/1314 |
Ensemble的过程:实验中实验了基于投票的Ensemble结果,但是效果并不好。本文中的Ensemble策略是:在原来的预测精度上进行求均值,然后利用上述的loss trick来得到最后的结果。
本文只是为了记录此次作业的过程。
There may be some mistakes in this blog. So, any suggestions and comments are welcome!
[Reference]
[1] https://www.kaggle.com/c/dogs-vs-cats-redux-kernels-edition#description
[2] https://baijiahao.baidu.com/s?id=1563055785256199&wfr=spider&for=pc
最后
以上就是无限河马为你收集整理的Kaggle —— Dogs VS Cats top 0.53%(ranking top 7)的全部内容,希望文章能够帮你解决Kaggle —— Dogs VS Cats top 0.53%(ranking top 7)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复