tensorflow實現L2正則化的方法總結

2021-10-07 07:06:25 字數 1861 閱讀 1949

l2正則化通常是指在損失函式後面新增乙個額外的l2正則化項,又稱l2範數(l2範數:定義為向量中所有元素的平方和的開平方)。目的是為了防止網路過擬合。

l2正則化防止過擬合的原理可以參考這篇部落格:

tensorflow中計算l2正則化項的方法有tf.nn.l2_loss()tf.contrib.layers.l2_regularizer(),使用示例如下

import tensorflow as tf

weights = tf.constant([[1,2,3], [4,5,6]], dtype=tf.float32)

sess = tf.interactivesession()

# 計算的是所有元素的平方和再除以2

print(tf.nn.l2_loss(weights).eval())

# 等價於

print(tf.contrib.layers.l2_regularizer(1.)(weights).eval())

# output: 45.5

接下來將介紹兩種方法將l2正則化項新增到損失函式後:

1.遍歷可訓練引數,將每個引數傳入tf.nn.l2_loss()進行計算並相加起來;

2.乘以weight_decay並與base_loss相加。

weight_decay = 0.001

base_loss = tf.reduce_mean(tf.nn.sparse_softmax_cross_entropy_with_logits(labels=labels, logits=logits))

l2_loss = weight_decay * tf.add_n([tf.nn.l2_loss(tf.cast(v, tf.float32)) for v in tf.trainable_variables()])

loss = base_loss + l2_loss

注意:該過程對每個trainable variable都進行了l2正則化,包括權值w和偏置b。有種說法是如果對偏執b進行l2正則化將會導致欠擬合,一般只需要對權值w進行正則化,所以來看第二種方法。

如下所示,在構造網路層時,將'kernel_initializer'引數設為l2正則化函式,則tensorflow會將該權重變數(卷積核)的l2正則化項加入到集合 tf.graphkeys.regularizatoin_losses裡。

x = tf.layers.conv2d(x, 512, (3, 3),

padding='same',

activation=tf.nn.relu,

kernel_initializer=tf.truncated_normal_initializer(stddev=0.01),

kernel_regularizer=tf.contrib.layers.l2_regularizer(0.001)

在計算loss時使用tf.get_collection()來獲取tf.graphkeys.regularizatoin_losses集合,然後相加即可:

base_loss = tf.reduce_mean(tf.nn.sparse_softmax_cross_entropy_with_logits(labels=labels, logits=logits))

l2_loss = tf.get_collection(tf.graphkeys.regularization_losses)

loss = tf.add_n([base_loss] + l2_loss, name="loss")

歡迎補充指正。

L2正則化 tensorflow實現

l2正則化是一種減少過擬合的方法,在損失函式中加入刻畫模型複雜程度的指標。假設損失函式是j 則優化的是j r w r w n i 0 w2i 在tensorflow中的具體實現過程如下 coding utf 8 import tensorflow as tf defget weight shape,...

L2正則化的TensorFlow實現

tensorflow實現l2正則化 tensorflow的最優化方法tf.train.gradientdescentoptimizer包辦了梯度下降 反向傳播,所以基於tensorflow實現l2正則化,並不能按照上節的演算法直接干預權重的更新,而要使用tensorflow方式 tf.add to ...

Pytorch實現L1與L2正則化

關於pytorch如何實現正則化在這篇部落格 pytorch實現l2和l1正則化regularization的方法 其實已經給出了差不多正確的方法,但是這篇部落格的 在實現l2正則的時候是有一點小問題的。首先看一下l2正則的公式 l os s cl 2 wi 2loss cl frac sum w ...