将正整数(索引)转换为固定大小的密集向量。
用法
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.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)
输入形状:
具有形状的二维张量:(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)
),或在子类模型中使用。
相关用法
- Python tf.keras.layers.ELU用法及代码示例
- Python tf.keras.layers.InputLayer用法及代码示例
- Python tf.keras.layers.serialize用法及代码示例
- Python tf.keras.layers.Dropout用法及代码示例
- Python tf.keras.layers.maximum用法及代码示例
- Python tf.keras.layers.LayerNormalization用法及代码示例
- Python tf.keras.layers.Conv2D用法及代码示例
- Python tf.keras.layers.RepeatVector用法及代码示例
- Python tf.keras.layers.Multiply用法及代码示例
- Python tf.keras.layers.Activation用法及代码示例
- Python tf.keras.layers.Conv1D用法及代码示例
- Python tf.keras.layers.experimental.preprocessing.PreprocessingLayer.adapt用法及代码示例
- Python tf.keras.layers.CategoryEncoding用法及代码示例
- Python tf.keras.layers.subtract用法及代码示例
- Python tf.keras.layers.experimental.preprocessing.HashedCrossing用法及代码示例
- Python tf.keras.layers.Subtract用法及代码示例
- Python tf.keras.layers.ZeroPadding3D用法及代码示例
- Python tf.keras.layers.MaxPool3D用法及代码示例
- Python tf.keras.layers.Dot用法及代码示例
- Python tf.keras.layers.UpSampling1D用法及代码示例
注:本文由纯净天空筛选整理自tensorflow.org大神的英文原创作品 tf.keras.layers.Embedding。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。