當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


Python tf.keras.layers.Embedding用法及代碼示例

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

繼承自:LayerModule

用法

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, **kwargs
)

參數

  • input_dim 整數。詞匯表的大小,即最大整數索引 + 1。
  • output_dim 整數。密集嵌入的維度。
  • embeddings_initializer embeddings 矩陣的初始化程序(參見 keras.initializers )。
  • embeddings_regularizer 應用於 embeddings 矩陣的正則化函數(參見 keras.regularizers )。
  • embeddings_constraint 應用於embeddings 矩陣的約束函數(參見keras.constraints)。
  • mask_zero 布爾值,輸入值 0 是否是應屏蔽的特殊 "padding" 值。這在使用可能采用可變長度輸入的循環層時很有用。如果這是 True ,則模型中的所有後續層都需要支持屏蔽,否則將引發異常。如果 mask_zero 設置為 True,則索引 0 不能在詞匯表中使用(input_dim 應該等於詞匯表的大小 + 1)。
  • input_length 輸入序列的長度,當它是常數時。如果您要連接 Flatten 然後 Dense 上遊層(沒有它,密集輸出的形狀無法計算),則需要此參數。

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

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

該層接受 tf.Tensortf.RaggedTensor 輸入。它不能用tf.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)

輸入形狀:

具有形狀的二維張量:(batch_size, input_length)

輸出形狀:

具有形狀的 3D 張量:(batch_size, input_length, output_dim)

變量放置注意事項:默認情況下,如果 GPU 可用,則嵌入矩陣將放置在 GPU 上。這可以獲得最佳性能,但可能會導致問題:

  • 您可能正在使用不支持稀疏 GPU 內核的優化器。在這種情況下,您將在訓練模型時看到錯誤。
  • 您的嵌入矩陣可能太大而無法放入您的 GPU。在這種情況下,您將看到內存不足 (OOM) 錯誤。

在這種情況下,您應該將嵌入矩陣放在 CPU 內存中。您可以使用設備範圍執行此操作,例如:

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

然後可以將預構建的 embedding_layer 實例添加到 Sequential 模型(例如 model.add(embedding_layer) ),在函數模型中調用(例如 x = embedding_layer(x) ),或在子類模型中使用。

相關用法


注:本文由純淨天空篩選整理自tensorflow.org大神的英文原創作品 tf.keras.layers.Embedding。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。