将其输入投影到随机特征空间的层。
用法
tf.keras.layers.experimental.RandomFourierFeatures(
output_dim, kernel_initializer='gaussian', scale=None,
trainable=False, name=None, **kwargs
)
参数
-
output_dim
正整数,层输出的维度,即用于逼近内核的随机特征的数量。 -
kernel_initializer
确定随机特征图的参数分布(以及因此层近似的内核)。它可以是字符串标识符或 KerasInitializer
实例。目前仅支持 '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=...,
...)
相关用法
- Python tf.keras.layers.experimental.preprocessing.PreprocessingLayer.adapt用法及代码示例
- Python tf.keras.layers.experimental.preprocessing.HashedCrossing用法及代码示例
- Python tf.keras.layers.experimental.SyncBatchNormalization用法及代码示例
- Python tf.keras.layers.experimental.EinsumDense用法及代码示例
- Python tf.keras.layers.InputLayer用法及代码示例
- Python tf.keras.layers.serialize用法及代码示例
- Python tf.keras.layers.Dropout用法及代码示例
- Python tf.keras.layers.maximum用法及代码示例
- Python tf.keras.layers.LayerNormalization用法及代码示例
- Python tf.keras.layers.Conv2D用法及代码示例
- Python tf.keras.layers.RepeatVector用法及代码示例
- Python tf.keras.layers.Multiply用法及代码示例
- Python tf.keras.layers.Activation用法及代码示例
- Python tf.keras.layers.Conv1D用法及代码示例
- Python tf.keras.layers.CategoryEncoding用法及代码示例
- Python tf.keras.layers.subtract用法及代码示例
- Python tf.keras.layers.Subtract用法及代码示例
- Python tf.keras.layers.ZeroPadding3D用法及代码示例
- Python tf.keras.layers.MaxPool3D用法及代码示例
- Python tf.keras.layers.Dot用法及代码示例
注:本文由纯净天空筛选整理自tensorflow.org大神的英文原创作品 tf.keras.layers.experimental.RandomFourierFeatures。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。