几个月前看到DataCastle的“猫狗大战”的竞赛的时候,想过要用CNN进行识别,毕竟这方面有很多参考的案例,然而当时正在研究其他算法,神经网络理解的也不是很精通,就没有去实现。一个月前,看到网站论坛里yinjh战队分享的源代码,并且取得了很高的成绩,就想着照着做做,当作学习。初步分析代码后,发现了一个很严重的问题,他们貌似没有用到训练集,这就有点吃惊了(这是神马黑科技???)。原来他们用了一种vgg_16的模型,而且已经有了训练好的权重(“vgg16_weights.h5”),对于日常物品可以直接进行识别。我当时的心情~~哈哈,很想知道竞赛组织者是怎么想的,辛辛苦苦准备的大赛竟然被一个已经训练好的模型完美吊打。不过以能跑的都是好鞍为原则,还是研究了下这个模型。
打开keras官方文档,发现卷积模块完全一样,再看看学习规则,也就是sgd的参数需要自己调,这个团队简直机智到家(目瞪口呆~)。跑了一遍代码,发现还是有问题的,cv2.imread读到空图,resize直接挂掉,因此需要甄别一下空图。改之后继续跑,顺利输出结果,截取前五十个提交,有成绩了。继续截取前两百个提交,成绩提升到0.98,还不错。接下来改sgd参数,先改lr(学习率初始值),调了很多次,不升反降,哈哈(都0.98了还咋升)。decay