Tensorflow 中新增正則化項

2021-10-06 15:13:06 字數 2031 閱讀 2662

為防止網路過擬合,在損失函式上增加乙個網路引數的正則化項是乙個常用方法,下面介紹如何在tensorflow中新增正則化項。

tensorflow中對引數使用正則項分為兩步:

下面詳細介紹:

step1: 建立乙個正則化方法

regularizer_l1 = tf.contrib.layers.l1_regularizer(scale, scope=none)
引數:

返回:可選擇的其他正則化方法:

regularizer_l2 = tf.contrib.layers.l2_regularizer(scale, scope=none)

regularizer__sum = tf.contrib.layers.sum_regularizer(regularizer_list, scope=none)

其中,regularizer_l2中引數的定義與regularizer_l1 相同。

regularizer_sum 是乙個可以執行多種(個)正則化的函式.意思是,建立乙個正則化方法,這個方法是多個正則化方法的混合體.,regularizer_list是乙個regularizer的列表,如

regularizer_list = [regularizer_l1,regularizer_l2]
step2: 將定義的正則方法(函式/物件),應用到引數上

方法1:

引數:函式返回乙個標量tensor,同時,這個標量tensor也會儲存到graphkeys.regularization_losses中.這個tensor儲存了計算正則項損失的方法.

tensorflow中的tensor是儲存了計算這個值的路徑(方法),當我們run的時候,tensorflow後端就通過路徑計算出tensor對應的值。

現在,我們只需將這個正則項損失加到我們的損失函式上就可以了.

如果是自己手動定義weight的話,需要手動將weight儲存到graphkeys.weights中,但是如果使用layer的話,就不用這麼麻煩了,別人已經幫你考慮好了.(最好自己驗證一下tf.graphkeys.weights中是否包含了所有的weights,防止被坑)

方法2(更常用)

在使用tf.get_variable()和tf.variable_scope()的時候,你會發現,它倆中有regularizer形參.如果傳入這個引數的話,那麼variable_scope內的weights的正則化損失,或者weights的正則化損失就會被新增到graphkeys.regularization_losses中

import tensorflow as tf

from tensorflow.contrib import layers

# 在tf.variable_scope()中加入regulizer

regularizer_l1 = layers.l1_regularizer(0.1)

with tf.variable_scope('var1', regularizer=regularizer_l1):

weight1= tf.get_variable('weight1', shape=[8])

with tf.variable_scope('var2',regularizer=regularizer_l1):

weight2 = tf.get_variable('weight2', shape=[8])

regularization_loss = tf.reduce_sum(tf.get_collection(tf.graphkeys.regularization_losses))

# 列印正則項包含的變數

print(tf.get_collection(tf.graphkeys.regularization_losses))

備註:正則化項常用於weights,而不用於bias,具體分析見:tensorflow之四—正則化

參考:

tensorflow中的正則化

import tensorflow as tf import tensorflow.contrib as contrib weight tf.constant 1,2 3,4 dtype tf.float32 with tf.session as sess init tf.global variab...

keras中新增正則化

正則項在優化過程中層的引數或層的啟用值新增懲罰項,這些懲罰項將與損失函式一起作為網路的最終優化目標 懲罰項基於層進行懲罰,目前懲罰項的介面與層有關,但dense,conv1d,conv2d,conv3d具有共同的介面。這些層有三個關鍵字引數以施加正則項 from keras import regul...

TensorFlow正則化小結

在設計深度學習模型的時候,我們經常需要使用正則化 regularization 技巧來減少模型的過擬合效果,例如 l1 正則化 l2 正則化等。在keras中,我們可以方便地使用三種正則化技巧 那麼,我們應該如何使用這三種正則化技巧呢?以keras中的dense層為例,我們發現有以下三個引數 這三個...