將其輸入投影到隨機特征空間的層。
用法
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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。