FeatureCross
类keras_rs.layers.FeatureCross(
projection_dim: Optional[int] = None,
diag_scale: Optional[float] = 0.0,
use_bias: bool = True,
pre_activation: Union[
str, keras.src.layers.activations.activation.Activation, NoneType
] = None,
kernel_initializer: Union[
str, keras.src.initializers.initializer.Initializer
] = "glorot_uniform",
bias_initializer: Union[
str, keras.src.initializers.initializer.Initializer
] = "zeros",
kernel_regularizer: Union[
str, NoneType, keras.src.regularizers.regularizers.Regularizer
] = None,
bias_regularizer: Union[
str, NoneType, keras.src.regularizers.regularizers.Regularizer
] = None,
**kwargs: Any
)
深度交叉网络 (DCN) 中的 FeatureCross 层。
该层可高效地创建显式且有界度的特征交互。`call` 方法接受两个输入:`x0` 包含原始特征;第二个输入 `xi` 是堆栈中前一个 `FeatureCross` 层的输出,即第 i 个 `FeatureCross` 层。对于堆栈中的第一个 `FeatureCross` 层,`x0 = xi`。
输出为 `x_{i+1} = x0 .* (W * x_i + bias + diag_scale * x_i) + x_i`,其中 .* 表示逐元素相乘。W 可以是满秩矩阵,也可以是为了降低计算成本的低秩矩阵 `U*V`,而 `diag_scale` 会增加 W 的对角线元素以提高训练稳定性(特别是对于低秩情况)。
参数
None
(默认值),则使用完整的矩阵 W
(形状为 (input_dim, input_dim)
)。否则,将使用低秩矩阵 W = U*V
,其中 U
的形状为 (input_dim, projection_dim)
,V
的形状为 (projection_dim, input_dim)
。projection_dim
需要小于 input_dim//2
才能提高模型效率。在实践中,我们观察到 projection_dim = input_dim//4
始终能够保持与满秩版本相当的准确率。diag_scale
,即 W + diag_scale * I
,其中 I 是单位矩阵。默认为 None
。True
。keras.activations
。在与输入相乘之前,应用于层输出矩阵的激活函数。可用于控制层输出的尺度并提高稳定性。默认为 None
。keras.initializers
初始化器。用于核矩阵的初始化器。默认为 "glorot_uniform"
。keras.initializers
初始化器。用于偏置向量的初始化器。默认为 "ones"
。keras.regularizer
正则化器。用于核矩阵的正则化器。keras.regularizer
正则化器。用于偏置向量的正则化器。示例
# 1. Simple forward pass
batch_size = 2
embedding_dim = 32
feature1 = np.random.randn(batch_size, embedding_dim)
feature2 = np.random.randn(batch_size, embedding_dim)
crossed_features = keras_rs.layers.FeatureCross()(feature1, feature2)
# 2. After embedding layer in a model
vocabulary_size = 32
embedding_dim = 6
# Create a simple model containing the layer.
inputs = keras.Input(shape=(), name='indices', dtype="int32")
x0 = keras.layers.Embedding(
input_dim=vocabulary_size,
output_dim=embedding_dim
)(inputs)
x1 = keras_rs.layers.FeatureCross()(x0, x0)
x2 = keras_rs.layers.FeatureCross()(x0, x1)
logits = keras.layers.Dense(units=10)(x2)
model = keras.Model(inputs, logits)
# Call the model on the inputs.
batch_size = 2
input_data = np.random.randint(0, vocabulary_size, size=(batch_size,))
outputs = model(input_data)
参考
call
方法FeatureCross.call(x0: Any, x: Optional[Any] = None)
交叉层的前向传播。
参数
(batch_size, ..., input_dim)
。x0
相同。返回值
交叉张量,形状与 x0
相同。