Nuestro grupo redactor ha estado horas investigando para dar respuesta a tu interrogante, te dejamos la respuestas y deseamos resultarte de mucha apoyo.
Ver fuente en GitHub |
Clase base regularizador.
Ver alias
Compat alias para la migración
Ver Guía de migración para más detalles.
Los regularizadores le permiten aplicar penalizaciones a los parámetros de la capa o la actividad de la capa durante la optimización. Estas penalizaciones se suman a la función de pérdida que optimiza la red.
Las penalizaciones por regularización se aplican por capa. La API exacta dependerá de la capa, pero muchas capas (p. Ej. Dense
, Conv1D
, Conv2D
y Conv3D
) tienen una API unificada.
Estas capas exponen 3 argumentos de palabras clave:
kernel_regularizer
: Regularizador para aplicar una penalización en el kernel de la capabias_regularizer
: Regularizador para aplicar una penalización en el sesgo de la capa.activity_regularizer
: Regularizador para aplicar una penalización en la salida de la capa.
Todas las capas (incluidas las capas personalizadas) exponen activity_regularizer
como una propiedad configurable, esté o no en los argumentos del constructor.
El valor devuelto por el activity_regularizer
se divide por el tamaño del lote de entrada para que la ponderación relativa entre los regularizadores de peso y los regularizadores de actividad no cambie con el tamaño del lote.
Puede acceder a las penalizaciones de regularización de una capa llamando layer.losses
después de llamar a la capa en las entradas.
Ejemplo
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>
Sanciones disponibles
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
Llamar directamente a un regularizador
Calcule una pérdida de regularización en un tensor llamando directamente a un regularizador como si fuera una función de un solo argumento.
P.ej
>>> regularizer = tf.keras.regularizers.L2(2.)>>> tensor = tf.ones(shape=(5,5))>>>regularizer(tensor)<tf.Tensor: shape=(), dtype=float32, numpy=50.0>
Desarrollando nuevos regularizadores
Cualquier función que tome una matriz de peso y devuelva un tensor escalar se puede usar como regularizador, por ejemplo:
@tf.keras.utils.register_keras_serializable(package='Custom', name='l1')defl1_reg(weight_matrix):return0.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>]
Alternativamente, puede escribir sus regularizadores personalizados de una manera orientada a objetos extendiendo esta clase base de regularizador, por ejemplo:
@tf.keras.utils.register_keras_serializable(package='Custom', name='l2')classL2Regularizer(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))defget_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>]
Una nota sobre serialización y deserialización:
El registro de los regularizadores como serializables es opcional si solo está entrenando y ejecutando modelos, exportando hacia y desde modelos guardados o guardando y cargando puntos de control de peso.
Es necesario registrarse para Keras model_to_estimator
, guardar y cargar modelos en formatos HDF5, clonación de modelos de Keras, algunas utilidades de visualización y exportación de modelos hacia y desde JSON. Si usa esta funcionalidad, debe asegurarse de que cualquier proceso de Python que ejecute su modelo también haya definido y registrado su regularizador personalizado.
tf.keras.utils.register_keras_serializable
solo está disponible en TF 2.1 y posteriores. En versiones anteriores de TensorFlow, debe pasar su regularizador personalizado al custom_objects
argumento de métodos que esperan que los regularizadores personalizados se registren como serializables.
Métodos
from_config
@classmethod from_config( config )
Crea un regularizador a partir de su configuración.
Este método es el reverso de get_config
, capaz de instanciar el mismo regularizador desde el diccionario de configuración.
Este método es utilizado por Keras model_to_estimator
, guardar y cargar modelos en formatos HDF5, clonación de modelos de Keras, algunas utilidades de visualización y exportación de modelos hacia y desde JSON.
Argumentos | |
---|---|
config |
Un diccionario de Python, normalmente el resultado de get_config. |
Devoluciones | |
---|---|
Una instancia de regularizador. |
get_config
get_config()
Devuelve la configuración del regularizador.
Una configuración de regularizador es un diccionario de Python (serializable) que contiene todos los parámetros de configuración del regularizador. El mismo regularizador se puede reinstalar más tarde (sin ningún estado guardado) desde esta configuración.
Este método es opcional si solo está entrenando y ejecutando modelos, exportando hacia y desde SavedModels o utilizando puntos de control de peso.
Este método es necesario para Keras model_to_estimator
, guardar y cargar modelos en formatos HDF5, clonación de modelos de Keras, algunas utilidades de visualización y exportación de modelos hacia y desde JSON.
Devoluciones | |
---|---|
Diccionario de Python. |
__call__
__call__( x )
Calcule una penalización de regularización a partir de un tensor de entrada.
Si sostienes algún dilema o forma de aumentar nuestro sección eres capaz de realizar un exégesis y con gusto lo analizaremos.