Spec-Zone.ru › TensorFlow 2.4

tf.keras.layers.experimental.RandomFourierFeatures

Слой, который проектирует свои входные данные в случайное пространство признаков.

Наследуется от: Layer, Module

Просмотр псевдонимов

Псевдонимы для миграции

См. Руководство по миграции для получения дополнительной информации.

tf.compat.v1.keras.layers.experimental.RandomFourierFeatures

tf.keras.layers.experimental.RandomFourierFeatures(
    output_dim, kernel_initializer='gaussian', scale=None,
    trainable=False, name=None, **kwargs
)

Этот слой реализует отображение из входного пространства в пространство с output_dim измерениями, которое аппроксимирует сдвигоинвариантные ядра. Функция ядра K(x, y) является сдвигоинвариантной, если K(x, y) == k(x - y) для некоторой функции k. Многие популярные радиальные базисные функции (RBF), включая гауссовы и лапласианские ядра, являются сдвигоинвариантными.

Реализация этого слоя основана на следующей статье: "Random Features for Large-Scale Kernel Machines" Али Рахими и Бена Рехта.

Распределение, из которого выбираются параметры карты случайных признаков (слоя), определяет, какое сдвигоинвариантное ядро аппроксимирует слой (см. статью для получения дополнительной информации). Вы можете использовать распределение по своему выбору. Слой поддерживает прямое приближение следующих двух ядер RBF:

  • Гауссовское: K(x, y) == exp(- square(x - y) / (2 * square(scale)))
  • Лапласианское: K(x, y) = exp(-abs(x - y) / scale))
Примечание: В отличие от описанного в статье и используемого в реализации Scikit-Learn, выходной слой этого слоя не применяет sqrt(2 / D) нормализационный множитель.

Использование: Обычно этот слой используется для "ядерной" линейной модели, применяя нелинейное преобразование (этот слой) к входным признакам, а затем обучая линейную модель на преобразованных признаках. В зависимости от функции потерь линейной модели, композиция этого слоя и линейной модели приводит к моделям, которые являются эквивалентными (с точностью до аппроксимации) к ядровым SVM (для потери шарнира), ядровой логистической регрессии (для логистической потери), ядровой линейной регрессии (для квадратичной потери) и т. д.

Примеры:

Модель ядровой многочленной логистической регрессии с гауссовым ядром для 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']
)

Классификатор квази-SVM для 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']
)

Чтобы использовать другое ядро, просто замените строку создания слоя на:

random_features_layer = RandomFourierFeatures(
    output_dim=500,
    kernel_initializer=<my_initializer>,
    scale=...,
    ...)
Аргументы
output_dim Положительное целое число, размер выходного слоя, то есть количество случайных признаков, используемых для аппроксимации ядра.
kernel_initializer Определяет распределение параметров карты случайных признаков (и, следовательно, ядра, аппроксимированного слоем). Может быть строковым идентификатором или экземпляром Keras Initializer. В настоящее время поддерживаются только строковые идентификаторы 'gaussian' и 'laplacian' (регистр игнорируется). Обратите внимание, что матрица ядра не обучаема.
scale Для гауссовых и лапласианских ядер это соответствует коэффициенту масштабирования соответствующего ядра, аппроксимированного слоем (см. конкретные определения выше). При предоставлении это должно быть положительное число с плавающей точкой. Если None, используется значение по умолчанию: если инициализатор ядра установлен на "gaussian", scale по умолчанию sqrt(input_dim / 2), в противном случае по умолчанию 1,0. Как ошибка аппроксимации ядра, так и качество классификации чувствительны к этому параметру. Если trainable установлено на True, этот параметр обучается с конца до начала во время обучения, и предоставленное значение служит начальным значением. Примечание: При подаче признаков из этого слоя в линейную модель, сделав scale обучаемым, результирующая задача оптимизации больше не является выпуклой (даже если функция потерь, используемая линейной моделью, выпуклая).
trainable Следует ли параметр масштабирования слоя обучаемым. По умолчанию False.
name Строка, имя, используемое для этого слоя.

© 2020 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 3.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r2.4/api_docs/python/tf/keras/layers/experimental/RandomFourierFeatures

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API