TensorFlow正則化小結

2021-10-25 02:03:55 字數 2625 閱讀 3743

在設計深度學習模型的時候,我們經常需要使用正則化(regularization)技巧來減少模型的過擬合效果,例如 l1 正則化、l2 正則化等。在keras中,我們可以方便地使用三種正則化技巧:

那麼,我們應該如何使用這三種正則化技巧呢?以keras中的dense層為例,我們發現有以下三個引數:

這三個引數代表什麼含義,我們該使用哪乙個呢?國內論壇鮮少有相關討論,寫此文以記之。

kernel_regularizer:初看似乎有點費解,kernel代表什麼呢?其實在舊版本的keras中,該引數叫做weight_regularizer,即是對該層中的權值進行正則化,亦即對權值進行限制,使其不至於過大。

bias_regularizer:與權值類似,限制該層中 biases 的大小。

activity_regularizer:更讓人費解,activity又代表什麼?其實就是對該層的輸出進行正則化。由此可見keras的命名團隊各個都是鬼才。

現在我們知道了這三個引數的異同,那麼,我們該在什麼時候使用哪乙個引數呢?網友 bloc97 [1] 如是說:

大多數情況下,使用kernel_regularizer就足夠了;如果你希望輸入和輸出是接近的,你可以使用bias_regularizer

如果你希望該層的輸出盡量小,你應該使用activity_regularizer

我們使用乙個簡單的模型來測試以下正則化的效果,基準**如下:

from tensorflow.python import keras

mnist = keras.datasets.mnist

(x_train, y_train), (x_test, y_test) = mnist.load_data()

x_train, x_test = x_train / 255.0, x_test / 255.0

model = keras.sequential([

keras.layers.flatten(input_shape=(28, 28)),

keras.layers.dense(128, activation='relu'),

keras.layers.dense(10, activation='softmax')

])model.compile(optimizer='adam',

loss='sparse_categorical_crossentropy',

metrics=['accuracy'])

model.fit(x_train, y_train, epochs=10)

model.evaluate(x_test, y_test)

實驗結果如下:

引數結果

no regularizer

0.9770

kernel_regularizer=l1(0.001)

0.9421

kernel_regularizer=l2(0.001)

0.9690

kernel_regularizer=l2(0.0001)

0.9785

kernel_regularizer=l1_l2(l1=0.0001, l2=0.0001)

0.9753

bias_regularizer=l2(0.0001)

0.9755

activity_regularizer=l2(0.0001)

0.9764

kernel_regularizer=l2(0.0001)

bias_regularizer=l2(0.0001)

0.9771

activity_regularizer=l2(0.0001)

0.9783

activation=『linear』

0.9233

activation='linear』

kernel_regularizer=l2(0.0001)

bias_regularizer=l2(0.0001)

0.9225

activation='linear』

activity_regularizer=l2(0.0001)

0.9199

實驗結果(初步分析,並不絕對)說明:

正則化係數的選擇很重要,選的不對容易有負面影響,選的好的話實驗效果有提公升;

實驗四、五、六說明,在當前實驗環境下,無論是l1l2,還是l1_l2,對實驗結果影響都不大;

可能是由於 mnist 任務太過於簡單,實驗結果區別都不是很大。具體使用哪種方法,只能由各位看官自己探索了。

bloc97. (december 17, 2018). difference between kernel, bias, and activity regulizers in keras. retrieved from 

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...

正則化方法小結

來自 在演算法中使用正則化的目的是防止模型出現過擬合。提到正則化,想到l1範數和l2範數。在這之前,先看lp範數是什麼。lp範數 範數簡單理解為向量空間中的距離,距離定義很抽象,只要滿足非負 自反 三角不等式就可以稱之為距離。lp範數不是乙個範數,而是一組範數,定義為 p的範圍 1,p在 0,1 範...

Tensorflow 中新增正則化項

為防止網路過擬合,在損失函式上增加乙個網路引數的正則化項是乙個常用方法,下面介紹如何在tensorflow中新增正則化項。tensorflow中對引數使用正則項分為兩步 下面詳細介紹 step1 建立乙個正則化方法 regularizer l1 tf.contrib.layers.l1 regula...