Keras 2 API 文件 / 層 API / 核心層 / 嵌入層

嵌入層

[來源]

Embedding 類別

tf_keras.layers.Embedding(
    input_dim,
    output_dim,
    embeddings_initializer="uniform",
    embeddings_regularizer=None,
    activity_regularizer=None,
    embeddings_constraint=None,
    mask_zero=False,
    input_length=None,
    sparse=False,
    **kwargs
)

將正整數(索引)轉換為固定大小的密集向量。

例如:[[4], [20]] -> [[0.25, 0.1], [0.6, -0.2]]

此層只能用於固定範圍的正整數輸入。 tf.keras.layers.TextVectorizationtf.keras.layers.StringLookuptf.keras.layers.IntegerLookup 預處理層可以幫助準備 Embedding 層的輸入。

此層接受 tf.Tensortf.RaggedTensortf.SparseTensor 輸入。

範例

>>> model = tf.keras.Sequential()
>>> model.add(tf.keras.layers.Embedding(1000, 64, input_length=10))
>>> # The model will take as input an integer matrix of size (batch,
>>> # input_length), and the largest integer (i.e. word index) in the input
>>> # should be no larger than 999 (vocabulary size).
>>> # Now model.output_shape is (None, 10, 64), where `None` is the batch
>>> # dimension.
>>> input_array = np.random.randint(1000, size=(32, 10))
>>> model.compile('rmsprop', 'mse')
>>> output_array = model.predict(input_array)
>>> print(output_array.shape)
(32, 10, 64)

參數

  • input_dim:整數。詞彙表的大小,即最大整數索引 + 1。
  • output_dim:整數。密集嵌入的維度。
  • embeddings_initializer:用於 embeddings 矩陣的初始化器(請參閱 keras.initializers)。
  • embeddings_regularizer:應用於 embeddings 矩陣的正規化函數(請參閱 keras.regularizers)。
  • embeddings_constraint:應用於 embeddings 矩陣的約束函數(請參閱 keras.constraints)。
  • mask_zero:布林值,指示輸入值 0 是否為應被遮罩的特殊「填充」值。這在使用可能接受可變長度輸入的循環層時非常有用。如果此值為 True,則模型中的所有後續層都需要支援遮罩,否則會引發例外。如果 mask_zero 設定為 True,則索引 0 不能在詞彙表中使用(input_dim 應等於詞彙表大小 + 1)。
  • input_length:輸入序列的長度,當其為常數時。如果要連接 Flatten,然後是上游的 Dense 層(沒有此參數,則無法計算密集輸出的形狀),則必須提供此參數。
  • sparse:如果為 True,則呼叫此層會返回 tf.SparseTensor。如果為 False,則該層會返回一個密集的 tf.Tensor。對於稀疏張量中沒有特徵的條目(值為 0 的條目),預設情況下會傳回索引 0 的嵌入向量。

輸入形狀

形狀為 (batch_size, input_length) 的 2D 張量。

輸出形狀

形狀為 (batch_size, input_length, output_dim) 的 3D 張量。

關於變數放置的注意事項:預設情況下,如果有 GPU 可用,則嵌入矩陣將放置在 GPU 上。這樣可以達到最佳效能,但可能會導致問題

  • 您可能正在使用不支援稀疏 GPU 核心的優化器。在這種情況下,您將在訓練模型時看到錯誤。
  • 您的嵌入矩陣可能太大,無法容納在您的 GPU 上。在這種情況下,您將看到記憶體不足 (OOM) 錯誤。

在這種情況下,您應該將嵌入矩陣放置在 CPU 記憶體中。您可以使用裝置範圍來執行此操作,如下所示

with tf.device('cpu:0'):
  embedding_layer = Embedding(...)
  embedding_layer.build()

然後,可以將預建的 embedding_layer 實例添加到 Sequential 模型(例如 model.add(embedding_layer))、在 Functional 模型中呼叫(例如 x = embedding_layer(x)),或在子類化模型中使用。