用caffe自身的訓練方法訓練的時候,在驗證集上準確率達到99%,可是當我用python介面跑測試資料只有50%左右,我起初以為是過擬合,可看了資料發現分類全部偏向乙個類別,幾乎所有,全部分為印刷類。過擬合也不該這樣啊。
後來發現是我的均值檔案有問題,訓練時做了歸一化,資料在01之間,可是,直接用訓練資料計算的均值在0-255之間,訓練時會除255,可是自己用python測試的時候,減去的均值要自己除255,否則,均值太大直接覆蓋了資訊,當然只能分一類。
後來,又遇到一次,可是這一次,我能確定我的caffe-model檔案沒有問題。python訓練檔案也沒有問題,因為我改換另乙個caffe-model檔案,分類結果是正確的,唯一有問題可能是deploy檔案,可是這個我後來 也排除了,檢查了很多次了,這就很詭異了,網上查也查不到。
鬱悶了一天,只能向老大求助,他說這個可能原因有很多,問我訓練時用了gpu嗎?用了。測試呢?沒用。那看看是不是這個原因吧。
額--!,果然是,加了這麼一句話,caffe.set_mode_gpu(),分類結果又快又準。
為什麼呢?我新增一了個denseblock層,當時猜想是作者難道沒有實現cpu計算,只用gpu,可是看了**,明明寫了啊,這個我就不知道了,留著填坑吧。
這是那個位址。
最後總結下,caffe訓練時驗證集準確率高,用python介面測試測試集準確率低的原因:
1) 檢查你的python測試檔案,是否有問題,比如歸一化,比如rgb換成bgr,比如hwc換成chw
2) 檢查deploy檔案是否有問題
3) 檢查你測試時用的是gpu模式還是cpu
訓練集 驗證集 測試集
訓練集loss 驗證集loss 測試集loss 乙個好的網路,二者的差距應該是很低的。但一般情況下因為網路不可避免地存在一定程度上的過擬合,所以肯定是train loss低於test lost,但如果低太多,就得考慮是過擬合的問題還是因為樣本的特徵空間不統一的問題。驗證集基本是在每個epoch完成後...
訓練集,驗證集,測試集
普通引數就是可以被梯度下降所更新的,也就是訓練集所更新的引數。超引數是指訓練開始之前設定的引數,不在梯度下降的更新範圍內,比如網路層數 網路節點數 迭代次數 學習率等等 1.訓練集 確定模型後,用於訓練普通引數 2.驗證集 交叉驗證集cv 驗證集在每個epoch訓練完成後,用來測試一下當前模型的準確...
訓練集 測試集 驗證集
訓練集 用來訓練和擬合模型。驗證集 當通過訓練集訓練出多個模型後,使用驗證集資料糾偏或比較 測試集 模型泛化能力的考量。泛化 對未知資料的 能力 from sklearn.model selection import train test split import numpy as np from ...