CNN全連接層隱層結點數(output_dim)的設定有什麼講究嗎?

使用卷積神經網路進行訓練時,卷積池化成後面的全連接層隱層的結點數設置為多少合適呢?有沒有像使用批梯度下降中batch size設置的講究?


用cross-validation去試,並且結合你對模型大小和運行速度的要求找最佳折中。全連接層神經元越多,模型越大,速度越慢,模型擬合能力越高,在訓練集上準確率越高,但過擬合風險也越大。反之,全連接層神經元越少,模型越小,速度越快,模型擬合能力越低,在訓練集上準確率越低,但訓練集與測試集上的差距越小。另外batch size也沒啥太大講究吧,保證能塞進GPU里就行了吧。


就目前的科技水平而言,一般來說,Batch size取決於你的顯存……


我歪個樓 問問 這個 全卷積層和全連接層 是怎樣的區別? 好多人都認為全卷積層能夠做到對任意大小圖片的處理,敢問全連接層不能做到嗎?


1. CNN output dimension

這個設得比較隨意,因為一般自己會再加幾層的fully connected, 所以通常取決於具體模型。As a rule of thumb, 我會取CNN flatten後的30% ~ 50%作為初始值。

2. batch size的問題

一開始的我也認為stochastic是內存不夠的無奈之舉,把batch size設置得撐滿內存是利用矩陣乘法提高計算速度的好方法。直到在某一個模型上遇到了問題:太高的batch size似乎限制了模型能達到的準確率。嘗試過程不表,想引用一句作為結論:

It"s important, however, to note that this computational boost comes at a cost. In practice, small mini batch size has more noise in their error calculation. and this noise is often helpful in preventing the training process from stopping at local minimum.

而batch size和learning rate是相互影響的, 具體可見Dmytro Mishkin, Nikolay Sergievskiy, Jiri Matas的「Systematic evaluation of CNN advances on the ImageNet「,下面是其中的一個圖

同樣,as a rule of thumb, 我會選擇[32, 256]作為batch size的初始值範圍.

@David Lee 我的理解卷積的優勢在於減小計算量(parameter sharing),卷積能做的全連接也能做,但是後者所需計算量(也許還有訓練集)要大太多。


同意一樓的觀點,木有錦上添花的其他想法。。。


同意上面的觀點,可以看下這兩篇文章:

Very deep convolutional networks for large-scale image recognition

Delving Deep into Rectifiers--Surpassing Human-Level Performance on ImageNet Classification

另外,有一種說法是batch size會影響loss的波動幅度,實際中我沒有仔細分析過


推薦閱讀:

用c++怎麼去調用你訓練好的caffe模型啊?我一點頭緒都沒有,求大神指教
cnn中的learning rate會導致overfitting嗎?
Mac需要装cuda吗?
cuDNN怎麼無法下載呢?

TAG:機器學習 | 深度學習DeepLearning | Caffe深度學習框架 |