2017-10-07 22 views
1

在模型定義中,我使用kernel_regularizer=tf.contrib.layers.l2_regularizer(scale=0.00001)加入tf.layers.conv2d()來調整每個卷積層中的卷積核。我們是否需要將正則化損失添加到張量流模型的總損失中?

我的問題是:計算整個網絡的某些批次投入的總損失,我們需要手動添加正規化損失如下:

reg_losses = tf.get_collection(tf.GraphKeys.REGULARIZATION_LOSSES) 
reg_constant = 0.01 # Choose an appropriate one. 
loss = my_normal_loss + reg_constant * sum(reg_losses) 

,如果是,如何確定reg_constant以上? scalereg_constant之間有什麼關係?謝謝。

回答

2

你說得對。

您技術上不需要reg_constant。您可以通過參數scale來控制每個圖層正則化,這對所有圖層都是一樣的。在這種情況下,您可以設置reg_constant=1

使用reg_constant我看到的scale的唯一優點是將正則化損失乘以reg_constant,這可能是您的代碼的可讀性。

如果你使用的是標準體系結構,我建議先設置reg_constant=1並將scale設置爲一些小標量,比如0.001。如果你有資源,更好的方法是應用網格搜索來找到經驗上最小化驗證損失的值,即[0.0001,0.1]。

如果您懷疑應該特別調整圖層,則可以按照第一種情況設置特定圖層scale以獲取不同的值。像以前一樣對這兩個不同的比例值應用網格搜索。

+0

嗨,非常感謝您的回答!是的,如果我理解正確,reg_constant可能是權重衰減的全局乘法因子,scale是每層中每個權重的局部因子權重衰減(例如卷積,完全連接)。就像'caffe'一樣。是的,你說得對,需要網格搜索來選擇這些超參數。爲每個層選擇每個局部衰減因子非常困難,特別是對於那些非常深的網絡。如何初始化權重也非常重要。這麼困難... – mining