最近在写论文,需要重新做一下之前的实验以确定结果无误。
论文对比了基于传统的PCA+LDA+SVM的方法和基于CNN的方法。
重新实验的是传统方法,之前分类准确率在70%-80%左右,但是在这次复现时发现稳定10%,一看预测结果全是某一个类别,我用脚趾头猜也知道是出错了,期间查了两天。
第一天,考虑是不是PCA的随机性问题,所以写了个程序,跑了250000次,成功跑满了24小时,结果没什么差别,大概猜到不是随机性的问题了,因为大数定理告诉我,这不可能- - !(跑实验期间吃了一天的鸡,2333333333)
第二天,在想是不是哪个包更新了,捣鼓了conda、pycharm,发现没问题。然后绞尽脑汁地想现在的脚本和之前有什么不同,仔细一想,不同的地方太多了。。。。
没办法,一个个查,从输入文件,到数据处理,都没问题。
最后定位于PCA,就这家伙出问题了。因为之前用PCA+SVM结果大概有60%,现在只有20%-30%,而只用SVM的话,结果很稳定。
定位在PCA上,然后尝试了无数种PCA的组合,什么copy=True,什么核PCA,都没用,最后又回到大家来找茬的阶段。
仔细一想,之前做过CNN+统计特征的实验,用了tensorflow,所以有一句
import tensorflow as tf
尝试性地把它给注释了,苍天!!!!!!!复现了!!!居然复现了!!!!
不过我现在还是不知道原因,不过这个事儿给了我几个教训。
- git是个好东西
- pycharm自带local history也是个好东西
- 查问题的时候还得静心,不要被吃鸡诱惑了。
此处记录一下各种环境、版本。
- scikit-learn: 0.19.1
- tensorflow: 1.3.0
- pycharm : 2017.3 unbuntu 版本 社区版
- python2.7
PS:有知道为什么的烦请评论留言,感激不尽。