簡體   English   中英

具有高級API的張量流中的L2正則化

[英]L2 regularization in tensorflow with high level API

我知道有一些關於使用tensorflow的層API進行l2正則化的類似問題,但對我來說仍然不太清楚。

首先,我在我的conv2d層中重復設置kernel_regularizer ,如下所示:

regularizer = tf.contrib.layers.l2_regularizer(scale=0.1)
tf.layers.conv2d(kernel_regularizer=)

然后我可以通過以下方式收集所有正規化損失:

regularization_losses = tf.get_collection(tf.GraphKeys.REGULARIZATION_LOSSES)

最后但並非最不重要的是,我必須將正則化術語納入最終損失。 但是,在這里我不太清楚該怎么做,以下哪一項是正確的?

1) loss = loss + factor * tf.reduce_sum(regularization_losses)

2) loss = loss + tf.contrib.layers.apply_regularization(regularizer, weights_list=regularization_losses)

或者他們都錯了? 第二個選項似乎很奇怪,因為我必須再次將正則化器作為參數傳遞,即使每個層已經有一個正則化器作為參數。

編輯

loss_1 = tf.losses.mean_squared_error(labels=y, predictions=logits, weights=1000)

regularization_loss = tf.get_collection(tf.GraphKeys.REGULARIZATION_LOSSES)

loss = tf.add_n([loss_1] + regularization_loss, name='loss')

第一種方法是正確的。 tf.add_n一種方法是通過tf.add_n函數:

reg_losses = tf.get_collection(tf.GraphKeys.REGULARIZATION_LOSSES)
loss = tf.add_n([base_loss] + reg_losses, name="loss")

第二種方法也可以,但是你必須定義一個正則。 所以它適用於您的情況,但如果您在不同的層中使用不同的正則化器,可能會很不方便。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM