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,则词汇表(input_dim 应等于词汇表大小 + 1)中不能使用索引 0。Flatten
层然后是 Dense
层,则需要此参数(没有它,无法计算稠密输出的形状)。tf.SparseTensor
。如果为 False,则层返回稠密的 tf.Tensor
。对于稀疏张量中没有特征的条目(值为 0 的条目),默认返回索引 0 的 embedding 向量。输入形状
形状为 (batch_size, input_length)
的二维张量。
输出形状
形状为 (batch_size, input_length, output_dim)
的三维张量。
关于变量放置的注意: 默认情况下,如果 GPU 可用,embedding 矩阵将被放置在 GPU 上。这可以实现最佳性能,但也可能导致问题
在这种情况下,您应该将 embedding 矩阵放置在 CPU 内存上。您可以通过设备范围来实现,如下所示
with tf.device('cpu:0'):
embedding_layer = Embedding(...)
embedding_layer.build()
预构建的 embedding_layer
实例可以添加到 Sequential
模型(例如 model.add(embedding_layer)
),在 Functional 模型中调用(例如 x = embedding_layer(x)
),或在子类化模型中使用。