Keras 3 API 文件 / 層 API / 核心層 / EinsumDense 層

EinsumDense 層

[原始碼]

EinsumDense 類別

keras.layers.EinsumDense(
    equation,
    output_shape,
    activation=None,
    bias_axes=None,
    kernel_initializer="glorot_uniform",
    bias_initializer="zeros",
    kernel_regularizer=None,
    bias_regularizer=None,
    kernel_constraint=None,
    bias_constraint=None,
    lora_rank=None,
    **kwargs
)

一個使用 einsum 作為後端計算的層。

此層可以執行任意維度的 einsum 計算。

參數

  • equation:描述要執行的 einsum 的方程式。此方程式必須是有效的 einsum 字串,形式為 ab,bc->ac...ab,bc->...acab...,bc->ac...,其中 'ab'、'bc' 和 'ac' 可以是任何有效的 einsum 軸表達式序列。
  • output_shape:輸出張量的預期形狀(不包括批次維度和以省略號表示的任何維度)。您可以為任何未知或可以從輸入形狀推斷出的維度指定 None
  • activation:要使用的激活函數。如果您未指定任何內容,則不會應用激活函數(即,「線性」激活函數:a(x) = x)。
  • bias_axes:一個字串,包含要套用偏差的輸出維度。bias_axes 字串中的每個字元都應對應於 equation 字串輸出部分中的字元。
  • kernel_initializerkernel 權重矩陣的初始化器。
  • bias_initializer:偏差向量的初始化器。
  • kernel_regularizer:應用於 kernel 權重矩陣的正規化函數。
  • bias_regularizer:應用於偏差向量的正規化函數。
  • kernel_constraint:應用於 kernel 權重矩陣的約束函數。
  • bias_constraint:應用於偏差向量的約束函數。
  • lora_rank:可選的整數。如果設定,則該層的前向傳遞將使用提供的 rank 實作 LoRA(低秩適應)。LoRA 將該層的 kernel 設定為不可訓練,並將其替換為原始 kernel 的 delta,該 delta 通過將兩個較低秩的可訓練矩陣相乘獲得(因式分解發生在最後一個維度上)。這對於降低微調大型密集層的計算成本非常有用。您也可以通過調用 layer.enable_lora(rank) 在現有的 EinsumDense 層上啟用 LoRA。
  • **kwargs:基礎層關鍵字參數,例如 namedtype

範例

使用 einsum 的偏差密集層

此範例示範如何使用 einsum 運算實例化標準 Keras 密集層。此範例等效於 keras.layers.Dense(64, use_bias=True)

>>> layer = keras.layers.EinsumDense("ab,bc->ac",
...                                       output_shape=64,
...                                       bias_axes="c")
>>> input_tensor = keras.Input(shape=[32])
>>> output_tensor = layer(input_tensor)
>>> output_tensor.shape
(None, 64)

將密集層應用於序列

此範例示範如何實例化一個層,該層將相同的密集運算應用於序列中的每個元素。在此範例中,output_shape 有兩個值(因為輸出中有兩個非批次維度);output_shape 中的第一個維度是 None,因為序列維度 b 具有未知的形狀。

>>> layer = keras.layers.EinsumDense("abc,cd->abd",
...                                       output_shape=(None, 64),
...                                       bias_axes="d")
>>> input_tensor = keras.Input(shape=[32, 128])
>>> output_tensor = layer(input_tensor)
>>> output_tensor.shape
(None, 32, 64)

使用省略號將密集層應用於序列

此範例示範如何實例化一個層,該層將相同的密集運算應用於序列中的每個元素,但使用省略號表示法而不是指定批次和序列維度。

因為我們正在使用省略號表示法並且僅指定了一個軸,所以 output_shape 參數是一個單一值。以這種方式實例化時,該層可以處理任意數量的序列維度,包括不存在序列維度的情況。

>>> layer = keras.layers.EinsumDense("...x,xy->...y",
...                                       output_shape=64,
...                                       bias_axes="y")
>>> input_tensor = keras.Input(shape=[32, 128])
>>> output_tensor = layer(input_tensor)
>>> output_tensor.shape
(None, 32, 64)