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.