2016-12-18 31 views
0

使用BVLC參考AlexNet文件,我一直在訓練CNN針對我創建的訓練集。爲了測量訓練的進度,我一直使用粗略的方法來逼近訓練數據的準確性。我在測試網上的批量大小是256.我有〜4500圖像。我對solver.test_nets [0] .forward()執行17次調用並記錄solver.test_nets [0] .blobs ['accuracy']。data(該正向傳遞的準確性)的值。我拿這些平均值。我的想法是,我從我的驗證集中隨機抽取了17個樣本,並獲得了這些隨機樣本的準確性。我希望這個數據能夠逼近整個集合的真實精度。然而,我後來回去寫了一個腳本來瀏覽我的LMDB中的每個項目,這樣我就可以爲我的整個測試集生成一個混淆矩陣。我發現我的模型的真實準確度顯着低於估計的準確度。例如,我的約75%的預期精度下降到約50%的準確度。這是比我預期的更糟糕的結果。Caffe如何確定測試集的準確性?

My assumptions match the answer given here.

有我的地方做出了不正確的假設?什麼可以解釋差異?我曾假設forward()函數收集了一個隨機樣本,但我不確定情況如何。 blob。['accuracy']。data每次都返回不同的結果(儘管通常在一個小範圍內),所以這就是我爲什麼這樣做的原因。

回答

0

我假定forward()函數收集了一個隨機樣本,但我不確定是這種情況。 blob。['accuracy']。data每次都返回不同的結果(儘管通常在一個小範圍內),所以這就是我爲什麼這樣做的原因。

從來自Caffe的forward()功能不執行任何隨機抽樣,它會根據你的DataLayer只獲取下一個批次。例如,在您的情況下,forward()將會傳遞網絡中的下一個256個圖像。執行這17次將依次傳遞17x256=4352圖像。

我在某處做了一個錯誤的假設嗎?什麼可以解釋差異?

檢查通過整個LMDB的腳本執行與培訓期間相同的數據預處理。

相關問題