当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python tf.keras.layers.experimental.RandomFourierFeatures用法及代码示例


将其输入投影到随机特征空间的层。

继承自:LayerModule

用法

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

参数

  • 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 字符串,用于该层的名称。

该层实现了从输入空间到具有output_dim 维度的空间的映射,这近似于shift-invariant 内核。内核函数 K(x, y) 是 shift-invariant 如果 K(x, y) == k(x - y) 对于某些函数 k 。许多流行的径向基函数 (RBF),包括高斯和拉普拉斯核,都是shift-invariant。

该层的实现基于以下论文:Ali Rahimi 和 Ben Recht 的“Large-Scale Kernel Machines 的随机特征”。

随机特征图(层)的参数从中采样的分布决定了该层近似于哪个shift-invariant内核(有关更多详细信息,请参见论文)。您可以使用您选择的分布。该层支持以下两个 RBF 内核的out-of-the-box 近似:

  • 高斯:K(x, y) == exp(- square(x - y) / (2 * square(scale)))
  • 拉普拉斯算子:K(x, y) = exp(-abs(x - y) / scale))

注意:与论文中说明的内容和Scikit-Learn 实现中使用的内容不同,该层的输出不应用sqrt(2 / D) 归一化因子。

用法:通常,此层用于"kernelize" 线性模型,方法是对输入特征应用非线性变换(此层),然后在变换后的特征之上训练线性模型。根据线性模型的损失函数,该层和线性模型的组合导致模型等效于(近似)内核 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']
)

MNIST 的quasi-SVM 分类器:

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=...,
    ...)

相关用法


注:本文由纯净天空筛选整理自tensorflow.org大神的英文原创作品 tf.keras.layers.experimental.RandomFourierFeatures。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。