Spec-Zone.ru › TensorFlow 2.3

tf.keras.layers.experimental.RandomFourierFeatures

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

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

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

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

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

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), включая гауссовы и лапласовские ядра, являются сдвигоинвариантными.

Реализация этого слоя основана на следующей статье: "Случайные признаки для машин с ядрами большого масштаба" Али Рахими и Беном Рехтом.

Распределение, из которого выбираются параметры отображения случайных признаков (слоя), определяет, какое сдвигоинвариантное ядро приближает слой (см. статью для получения дополнительной информации). Вы можете использовать распределение по своему выбору. Слой поддерживает приближение следующих двух 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»), ядёрной логистической регрессии (для логистической потери), ядёрной линейной регрессии (для квадратичной потери) и т.д.

Примеры:

Модель ядёрной многоклассовой логистической регрессии с гауссовым ядром для 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, этот параметр обучается end-to-end во время обучения, и предоставленное значение служит начальным значением. Примечание: При подаче признаков из этого слоя в линейную модель, сделав 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.3/api_docs/python/tf/keras/layers/experimental/RandomFourierFeatures

Spec-Zone.ru

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