Spec-Zone.ru › TensorFlow 2.9

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 (для функции потерь hinge), ядрам логистической регрессии (для логистической функции потерь), ядрам линейной регрессии (для функции потерь squared) и т. д.

Примеры:

Модель ядра многоклассовой логистической регрессии с гауссовым ядром для 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 Строка, имя, используемое для этого слоя.

© 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/layers/experimental/RandomFourierFeatures

Spec-Zone.ru

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