当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。