深度學習中批量大小batch size和分類個數num class的有什麼關係呢?

時間 2021-05-30 17:58:12

1樓:Neo

沒啥關係吧。numclass看需求,要分多少類就分多少類,感覺沒啥特殊要求。batchsize看gpu,我個人一般情況是可以的話就盡量大一點來弄的。

2樓:馬屁哥哥

沒有關係。

如果沒對資料讀取模組做什麼特殊處理的話,batchsize再大,在乙個batch裡,也可能沒法包括所有的類。

不過我們確實做過類似的實驗,但是是針對樣本不平衡的場景的,生成乙個batch的資料裡,保證這個batch包含所有的類別,實驗結果確實有那麼點用。

3樓:不像樣

理論上來講,要減小優化的損失是在整個訓練集上的損失,所以每次更新引數時應該用訓練集上的所有樣本來計算梯度。但是實際中,如果訓練集太大,每次更新引數時都用所有樣本來計算梯度,訓練將非常慢,耗費的計算資源也很大。所以用訓練集的乙個子集上計算的梯度來近似替代整個訓練集上計算的梯度。

這個子集的大小即為batch size,相應地稱這樣的優化演算法為batch梯度下降。batch size可以為訓練集大小,可以更小,甚至也可以為1,即每次用乙個樣本來計算梯度更新引數。batch size越小收斂相對越快,但是收斂過程相對不穩定,在極值附近振盪也比較厲害。

另外,ImageNet競賽有1000個類,好像那些刷榜的分類模型訓練時用的batch size也沒大於1000呀。

4樓:湃森

一般來說batch_size和num_class之間沒有必然的聯絡。

題主說的不錯,考慮到計算機中線程數一般是2^n,所以為了提高並行運算的效率,我們通常會將bs設定為2^n來提高GPU的利用率。

在樣本分佈較為合理的情況下,對於使用Batch Normalization, batch_size通常情況下盡可能設定大一點會比較好,因為BN比bs的大小較為敏感。較大的bs資料之間的bias會偏小,這樣網路就會更容易收斂。但如果樣本分佈不合理的話,一味的增大bs會增加模型的overfitting效應。

你老師的觀點是乙個batch應該盡量覆蓋到所有的類別,這就好比我們在辨識多個物體的時候是否需要同時觀察這麼多個物體?這顯然是沒有必要的。按照個人的理解,應該是乙個epoch下要盡量涵蓋所有的類別,模型根據這樣評估出來的結果來挑選合適的權重才顯得比較客觀,而不是限定於每個batch_size都要囊括所有的類別。

5樓:

在imagenet訓練過模型的我,表示你們老師的話可信度不大。

imagenet上有1000類,我也沒見著那麼多模型用的batchsize超過1000的啊……

我自己拿pytorch寫了darknet19,然後256batchsize,90epoch,完美復現官方的模型(官方引數是64batchsize,160epoch)。

深度學習中的batch的大小對學習效果有何影響?

張萬 Batch size對深度學習的訓練是有很大意義,但是對其推理除了提高了整體效能和降低了AI晶元的功耗外,沒有特別的意義,還有乙個重要的問題是,batch size推理會不會造成輸出的結果有卡頓的現象,比如實時的攝像頭採集影象,要先換成幾幀影象用作batch size處理,然後,處理完的結果,...

關於深度學習中adaptive learning rate的問題,比如RMSprop?

AsSalmon 我是這樣理解的,有不對的望指正.引數更新時,使用梯度下降演算法更新,沿著梯度方向是變化最快的方向。訓練集資料量很大的時候,使用SGD,每次只用一小批資料更新,這時候根據這一小批資料計算出的梯度和前面用全部訓練集資料計算的梯度是有一點誤差的,即梯度方向並不是下降最快的方向,會有偏差。...

深度學習中「Transformer」怎麼翻譯為中文?

沈卓然 我覺得暫時最好的方案就是直接用英文Transformer。Transformer基本上相當於乙個專有名詞,不是所有專有名詞都需要翻譯的。比如Windows Office iPhone,甚至WiFi,這些都沒有翻譯,大家用到的時候也是直接用英文詞彙的。我是乙個比較注重語言純潔性的人,但是有些詞...