Функция regularizers.l1_l2
Функция regularizers.l1_l2 создает объект регуляризатора,
который комбинирует L1- и L2-штрафы. Такой регуляризатор
применяется к весам слоя и добавляет к функции потерь сумму
модулей весов (L1) и сумму квадратов весов (L2). Первым
параметром передается коэффициент L1, вторым - коэффициент L2.
Регуляризатор передается в слой через параметр
kernel_regularizer или bias_regularizer.
Синтаксис
tf.keras.regularizers.l1_l2(l1=0.01, l2=0.01)
Пример
Давайте создадим регуляризатор с коэффициентами L1 и L2 по умолчанию и посмотрим на его тип:
import tensorflow as tf
reg = tf.keras.regularizers.l1_l2()
print(reg)
Результат выполнения кода:
<keras.src.regularizers.regularizers.L1L2 object at 0x7f8b1c0a5d90>
Пример
Давайте создадим регуляризатор с явными коэффициентами
0.001 для L1 и 0.005 для L2:
Результат выполнения кода:
0.001
0.005
Пример
Давайте применим регуляризатор к полносвязному слою и вычислим его штраф для конкретных весов:
import tensorflow as tf
tf.random.set_seed(0)
reg = tf.keras.regularizers.l1_l2(l1=0.1, l2=0.1)
layer = tf.keras.layers.Dense(
units=3,
kernel_regularizer=reg
)
layer.build((None, 2))
penalty = reg(layer.kernel)
print(penalty)
Результат выполнения кода:
tf.Tensor(0.23281413, shape=(), dtype=float32)
Пример
Давайте обучим простую модель с комбинированной регуляризацией и посмотрим итоговую функцию потерь:
import tensorflow as tf
tf.random.set_seed(0)
model = tf.keras.Sequential([
tf.keras.layers.Dense(
units=4,
activation='relu',
kernel_regularizer=tf.keras.regularizers.l1_l2(
l1=0.01,
l2=0.01
),
input_shape=(3,)
),
tf.keras.layers.Dense(units=1)
])
model.compile(
optimizer='adam',
loss='mse'
)
x = tf.constant([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])
y = tf.constant([[1.0], [2.0]])
history = model.fit(x, y, epochs=1, verbose=0)
print(history.history['loss'])
Результат выполнения кода:
<~show-> <+python+> [11.73033618927002] <-python-> <-show->