Si encuentras alguna parte que no entiendes puedes dejarlo en los comentarios y te responderemos tan rápido como podamos.
Capa que proyecta sus entradas en un espacio de características aleatorio.
Hereda de: Layer
, Module
Ver alias
Alias de compatibilidad para la migración
Ver Guía de migración para más detalles.
tf.compat.v1.keras.layers.experimental.RandomFourierFeatures
tf.keras.layers.experimental.RandomFourierFeatures( output_dim, kernel_initializer='gaussian', scale=None, trainable=False, name=None,**kwargs )
Esta capa implementa un mapeo desde el espacio de entrada a un espacio con output_dim
dimensiones, que se aproxima a los núcleos invariantes al desplazamiento. Una función del kernel K(x, y)
es invariante al cambio si K(x, y) == k(x - y)
para alguna función k
. Muchas funciones de base radial (RBF) populares, incluidos los núcleos gaussianos y laplacianos, son invariantes al desplazamiento.
La implementación de esta capa se basa en el siguiente documento: “Funciones aleatorias para máquinas de kernel a gran escala” por Ali Rahimi y Ben Recht.
La distribución a partir de la cual se muestrean los parámetros del mapa de características aleatorias (capa) determina a qué núcleo invariante de desplazamiento se aproxima la capa (consulte el artículo para obtener más detalles). Puede utilizar la distribución que desee. La capa admite la aproximación lista para usar de los dos núcleos RBF siguientes:
- Gaussiano:
K(x, y) == exp(- square(x - y) / (2 * square(scale)))
- Laplaciano:
K(x, y) = exp(-abs(x - y) / scale))
Nota: A diferencia de lo que se describe en el documento y a diferencia de lo que se usa en la implementación de Scikit-Learn, la salida de esta capa no aplica la
sqrt(2 / D)
factor de normalización.
Uso: Normalmente, esta capa se utiliza para “kernelizar” modelos lineales aplicando una transformación no lineal (esta capa) a las entidades de entrada y luego entrenando un modelo lineal sobre las entidades transformadas. Dependiendo de la función de pérdida del modelo lineal, la composición de esta capa y el modelo lineal dan como resultado modelos que son equivalentes (hasta una aproximación) a las SVM del kernel (para pérdida de bisagra), regresión logística del kernel (para pérdida logística), kernel lineal regresión (para pérdida al cuadrado), etc.
Ejemplos:
Un modelo de regresión logística multinomial de kernel con kernel gaussiano para MNIST:
model = keras.Sequential([ keras.Input(shape=(784,)), RandomFourierFeatures( output_dim=4096, scale=10., kernel_initializer='gaussian'), layers.Dense(units=10, activation='softmax'),]) model.compile( optimizer='adam', loss='categorical_crossentropy', metrics=['categorical_accuracy'])
Un clasificador cuasi-SVM para MNIST:
model = keras.Sequential([ keras.Input(shape=(784,)), RandomFourierFeatures( output_dim=4096, scale=10., kernel_initializer='gaussian'), layers.Dense(units=10),]) model.compile( optimizer='adam', loss='hinge', metrics=['categorical_accuracy'])
Para usar otro kernel, simplemente reemplace la línea de creación de capa con:
random_features_layer = RandomFourierFeatures( output_dim=500, kernel_initializer=<my_initializer>, scale=...,...)
Argumentos | |
---|---|
output_dim |
Entero positivo, la dimensión de la salida de la capa, es decir, el número de características aleatorias utilizadas para aproximar el kernel. |
kernel_initializer |
Determina la distribución de los parámetros del mapa de características aleatorias (y por lo tanto el kernel aproximado por la capa). Puede ser un string identificador o un Keras Initializer ejemplo. Actualmente solo se admiten ‘gaussiano’ y ‘laplaciano’ string identificadores (no distinguen entre mayúsculas y minúsculas). Tenga en cuenta que la matriz del núcleo no se puede entrenar. |
scale |
Para los núcleos gaussianos y laplacianos, esto corresponde a un factor de escala del núcleo correspondiente aproximado por la capa (consulte las definiciones concretas más arriba). Cuando se proporcione, debe ser un flotador positivo. Si es None, se usa un valor predeterminado: si el inicializador del kernel está configurado en “gaussian”, scale predeterminado a sqrt(input_dim / 2) , de lo contrario, el valor predeterminado es 1.0. Tanto el error de aproximación del kernel como la calidad de clasificación son sensibles a este parámetro. Si trainable se establece en True , este parámetro se aprende de un extremo a otro durante el entrenamiento y el valor proporcionado sirve como valor inicial. Nota: Cuando las entidades de esta capa se alimentan a un modelo lineal, al hacer scale entrenable, el problema de optimización resultante ya no es convexo (incluso si la función de pérdida utilizada por el modelo lineal es convexa). |
trainable |
Si el parámetro de escala de la capa debe ser entrenable. Predeterminado a False . |
name |
Cadena, nombre que se utilizará para esta capa. |
Si te gusta la programación, tienes la habilidad dejar un post acerca de qué le añadirías a esta reseña.