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.TextVectorization
、tf.keras.layers.StringLookup
和 tf.keras.layers.IntegerLookup
預處理層可以幫助準備 Embedding
層的輸入。
此層接受 tf.Tensor
、tf.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)
參數
embeddings
矩陣的初始化器(請參閱 keras.initializers
)。embeddings
矩陣的正規化函數(請參閱 keras.regularizers
)。embeddings
矩陣的約束函數(請參閱 keras.constraints
)。True
,則模型中的所有後續層都需要支援遮罩,否則會引發例外。如果 mask_zero 設定為 True,則索引 0 不能在詞彙表中使用(input_dim 應等於詞彙表大小 + 1)。Flatten
,然後是上游的 Dense
層(沒有此參數,則無法計算密集輸出的形狀),則必須提供此參數。tf.SparseTensor
。如果為 False,則該層會返回一個密集的 tf.Tensor
。對於稀疏張量中沒有特徵的條目(值為 0 的條目),預設情況下會傳回索引 0 的嵌入向量。輸入形狀
形狀為 (batch_size, input_length)
的 2D 張量。
輸出形狀
形狀為 (batch_size, input_length, output_dim)
的 3D 張量。
關於變數放置的注意事項:預設情況下,如果有 GPU 可用,則嵌入矩陣將放置在 GPU 上。這樣可以達到最佳效能,但可能會導致問題
在這種情況下,您應該將嵌入矩陣放置在 CPU 記憶體中。您可以使用裝置範圍來執行此操作,如下所示
with tf.device('cpu:0'):
embedding_layer = Embedding(...)
embedding_layer.build()
然後,可以將預建的 embedding_layer
實例添加到 Sequential
模型(例如 model.add(embedding_layer)
)、在 Functional 模型中呼叫(例如 x = embedding_layer(x)
),或在子類化模型中使用。