caffe驗證集測試集準確率差別很大的可能原因

用caffe自身的訓練方法訓練的時候,在驗證集上準確率達到99%,可是當我用python接口跑測試數據只有50%左右,我起初以爲是過擬合,可看了數據發現分類全部偏向一個類別,幾乎所有圖片,全部分爲印刷類。過擬合也不該這樣啊。

後來發現是我的均值文件有問題,訓練時做了歸一化,數據在01之間,可是,直接用訓練數據計算的均值在0-255之間,訓練時會除255,可是自己用python測試的時候,減去的均值要自己除255,否則,圖片均值太大直接覆蓋了圖片信息,當然只能分一類。

後來,又遇到一次,可是這一次,我能確定我的caffe-model文件沒有問題。python訓練文件也沒有問題,因爲我改換另一個caffe-model文件,分類結果是正確的,唯一有問題可能是deploy文件,可是這個我後來 也排除了,檢查了很多次了,這就很詭異了,網上查也查不到。

鬱悶了一天,只能向老大求助,他說這個可能原因有很多,問我訓練時用了gpu嗎?用了。測試呢?沒用。那看看是不是這個原因吧。

額--!,果然是,加了這麼一句話,caffe.set_mode_gpu(),分類結果又快又準。

爲什麼呢?我添加一了個DenseBlock層,當時猜想是作者難道沒有實現cpu計算,只用gpu,可是看了代碼,明明寫了啊,這個我就不知道了,留着填坑吧。

https://github.com/senlinuc/caffe_ocr/blob/master/src/caffe/layers/DenseBlock_layer.cpp

這是那個地址。

最後總結下,caffe訓練時驗證集準確率高,用python接口測試測試集準確率低的原因:

1) 檢查你的python測試文件,是否有問題,比如歸一化,比如RGB換成BGR,比如HWC換成CHW

2) 檢查deploy文件是否有問題

3) 檢查你測試時用的是GPU模式還是CPU


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章