tf.keras.regularizers.Regularizer
| Просмотреть исходный код на GitHub |
Базовый класс регуляризатора.
Регуляризаторы позволяют применять штрафы к параметрам слоев или активности слоев во время оптимизации. Эти штрафы суммируются в функцию потерь, которую оптимизирует сеть.
Штрафы регуляризации применяются на основе каждого слоя. Точный API будет зависеть от слоя, но многие слои (например, Dense, Conv1D, Conv2D и Conv3D) имеют унифицированный API.
Эти слои поддерживают 3 ключевых аргумента:
-
kernel_regularizer: Регуляризатор для применения штрафа к ядру слоя -
bias_regularizer: Регуляризатор для применения штрафа к смещению слоя -
activity_regularizer: Регуляризатор для применения штрафа к выходу слоя
Все слои (включая пользовательские слои) поддерживают activity_regularizer как свойство, которое можно устанавливать, независимо от того, указано ли оно в аргументах конструктора.
Значение, возвращаемое activity_regularizer, делится на размер пакета входных данных, чтобы относительное соотношение между штрафами регуляризации весов и штрафами регуляризации активности не изменялось при изменении размера пакета.
Вы можете получить доступ к штрафам регуляризации слоя, вызвав layer.losses после применения слоя к входным данным.
Пример
layer = tf.keras.layers.Dense(
5, input_dim=5,
kernel_initializer='ones',
kernel_regularizer=tf.keras.regularizers.L1(0.01),
activity_regularizer=tf.keras.regularizers.L2(0.01))
tensor = tf.ones(shape=(5, 5)) * 2.0
out = layer(tensor)
# The kernel regularization term is 0.25 # The activity regularization term (after dividing by the batch size) is 5 tf.math.reduce_sum(layer.losses) <tf.Tensor: shape=(), dtype=float32, numpy=5.25>
Доступные штрафы
tf.keras.regularizers.L1(0.3) # L1 Regularization Penalty tf.keras.regularizers.L2(0.1) # L2 Regularization Penalty tf.keras.regularizers.L1L2(l1=0.01, l2=0.01) # L1 + L2 penalties
Прямое вызов регуляризатора
Вычисление штрафа регуляризации для тензора путем прямого вызова регуляризатора как функции с одним аргументом.
Например:
>>> regularizer = tf.keras.regularizers.L2(2.) >>> tensor = tf.ones(shape=(5, 5)) >>> regularizer(tensor) <tf.Tensor: shape=(), dtype=float32, numpy=50.0>
Разработка новых регуляризаторов
Любая функция, которая принимает матрицу весов и возвращает скалярный тензор, может быть использована в качестве регуляризатора, например:
@tf.keras.utils.register_keras_serializable(package='Custom', name='l1')
def l1_reg(weight_matrix):
return 0.01 * tf.math.reduce_sum(tf.math.abs(weight_matrix))
layer = tf.keras.layers.Dense(5, input_dim=5,
kernel_initializer='ones', kernel_regularizer=l1_reg)
tensor = tf.ones(shape=(5, 5))
out = layer(tensor)
layer.losses
[<tf.Tensor: shape=(), dtype=float32, numpy=0.25>]
Альтернативно, вы можете написать свои пользовательские регуляризаторы объектно-ориентированным способом, расширив этот базовый класс регуляризатора, например:
@tf.keras.utils.register_keras_serializable(package='Custom', name='l2')
class L2Regularizer(tf.keras.regularizers.Regularizer):
def __init__(self, l2=0.):
self.l2 = l2
def __call__(self, x):
return self.l2 * tf.math.reduce_sum(tf.math.square(x))
def get_config(self):
return {'l2': float(self.l2)}
layer = tf.keras.layers.Dense(
5, input_dim=5, kernel_initializer='ones',
kernel_regularizer=L2Regularizer(l2=0.5))
tensor = tf.ones(shape=(5, 5)) out = layer(tensor) layer.losses [<tf.Tensor: shape=(), dtype=float32, numpy=12.5>]
Примечание о сериализации и десериализации:
Регистрация регуляризаторов в качестве сериализуемых необязательна, если вы просто обучаете и выполняете модели, экспортируете в SavedModels и из них, или сохраняете и загружаете контрольные точки весов.
Регистрация требуется для сохранения и загрузки моделей в формате HDF5, клонирования моделей Keras, некоторых утилит визуализации и экспорта моделей в JSON и из него. При использовании этой функциональности необходимо убедиться, что любой процесс Python, выполняющий вашу модель, также определил и зарегистрировал ваш пользовательский регуляризатор.
Методы
from_config
@classmethod
from_config(
config
)
Создает регуляризатор из его конфигурации.
Этот метод является обратным к get_config, способному восстановить тот же регуляризатор из словаря конфигурации.
Этот метод используется Keras model_to_estimator, сохранением и загрузкой моделей в форматы HDF5, клонированием моделей Keras, некоторыми утилитами визуализации и экспортом моделей в JSON и из него.
| Аргументы | |
|---|---|
config | Словарь Python, как правило, вывод get_config. |
| Возвращаемое значение | |
|---|---|
| Экземпляр регуляризатора. |
get_config
get_config()
Возвращает конфигурацию регуляризатора.
Конфигурация регуляризатора — это словарь Python (сериализуемый), содержащий все параметры конфигурации регуляризатора. Тот же регуляризатор может быть повторно создан позже (без сохранения состояния) из этой конфигурации.
Этот метод необязателен, если вы просто обучаете и выполняете модели, экспортируете в SavedModels и из них, или используете контрольные точки весов.
Этот метод необходим для Keras model_to_estimator, сохранения и загрузки моделей в форматы HDF5, клонирования моделей Keras, некоторых утилит визуализации и экспорта моделей в JSON и из него.
| Возвращаемое значение | |
|---|---|
| Словарь Python. |
__call__
__call__(
x
)
Вычисление штрафа регуляризации из входного тензора.
© 2022 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 4.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r2.9/api_docs/python/tf/keras/regularizers/Regularizer