訓練時batch_size不同會影響訓練結果我能理解,但測試時的batch_size應該隻影響測試時間才對,為什麼不同的batch_size仍然會有同的測試結果?
例:我在一次測試集測試中選擇batch_size為32得到的accuracy是91%,選擇batch_size為64得到的accuracy是92%
前陣子剛踩坑
一般這種時候應該是程序中有比較隱晦的bug
如果是涉及到文本等序列數據已經padding後採用CNN的情況
可能是CNN進行時候計算的時候,不同的batchsize進行計算時,部分採用的是embedding中的padding數值進行計算,然後CNN自己採用了全0的補齊padding進行計算,這樣不同的batch_size的計算結果就會不同了
近期踩坑,使用 CNN 做 NLP 處理,組 batch 測試 和單句測試的結果存在偏差。以下解決方案,僅適用於只有個別句子出現預測結果波動並且幅度較小的情況。如果偏差較大的,趕緊找找肯定有大 bug。
此外,我 debug 後定位在了 CNN 的使用上,self-attention 和 RNN 類網路不會出現此類問題。
解決此類問題的第一步,是端正心態,不要心存僥倖:第一,如果出現運行偏差,一定一定是自己的代碼有 bug。第二,模型不會飄,如果輸入數據是相同的,多次預測的結果應當完全一致。
CNN 類網路,在改變 batch_size 時,到底對輸入數據施加了什麼影響呢?答案是 PADDING。
NLP 的一個應用特點是,它不能像 CV 那樣對圖像做縮放來進行尺度歸一化。一個最基本的問題,就是如何在同一個 batch_size 內處理變長的序列。CNN 類網路的基本做法,就是把每個句子,都在結尾補 0,使它和最長句一致。這是預處理時候進行的 PADDING,是為了構造 batch。