2017-10-07 11 views
1

モデルの定義では、にkernel_regularizer=tf.contrib.layers.l2_regularizer(scale=0.00001)を使用して、各畳み込みレイヤの畳み込みカーネルを正規化しました。テンソルフローモデルの全損失に正則化損失を追加する必要がありますか?

私の質問は:いくつかのバッチインプットのためのネットワーク全体の総損失を計算するために、我々は次のように手動で正則損失を追加する必要があります:

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を決定するには、yesであれば、どのように上記? scalereg_constantの関係は何ですか?ありがとう。

答えて

2

あなたは正しいです。

技術的にはreg_constantは必要ありません。 scaleパラメータで各レイヤの正則化を制御できます。これはすべてのレイヤーで同じにすることができます。この場合は、reg_constant=1と設定するだけです。

reg_constantの唯一の利点scaleを見ると、正則化の損失にreg_constantを掛けて、おそらくあなたのコードの読みやすさです。

標準アーキテクチャを使用している場合は、reg_constant=1に設定し、scaleをいくつかの小さなスカラー、たとえば0.001に設定することをお勧めします。リソースがある場合、グリッド検索を適用して、検証損失を経験的に最小限に抑える値、つまり[0.0001、0.1]を見つけることをお勧めします。

具体的に正規化する必要があるレイヤーがあると思われる場合は、その特定のレイヤーを異なる値に設定するだけです。この時間だけ以前のようにグリッド検索を2つの異なるスケール値に適用します。

+0

こんにちは、ありがとうございました。うん、私が正しく理解していれば、 'reg_constant'は減量のためのグローバル倍率であり、' scale'は各層の各重さの局所的因子減量です(例えば畳み込み、完全連結)。 'caffe'のやり方とちょうど似ています。うん、あなたは絶対に正しいです、これらのハイパーパラメータを選択するためにグリッド検索が必要です。すべてのレイヤー、特に非常に深いネットワークでは、各ローカル減衰係数を選択することは本当に困難です。また、ウェイトを初期化する方法も非常に重要です。とても難しい... – mining

関連する問題