tf.contrib.layers.embed_sequence() 的用途是什么?

2023-11-30

I found tf.contrib.layers.embed_sequence()最新的功能Tensorflow示例,但它不包含在主要 API 中。我不知道为什么。任何有关其工作原理的解释将不胜感激。


我可以想到两个主要原因tensorflow.contrib.layers.embed_sequence很有用:

  1. 当构建具有多个以特征作为输入的门的神经网络模型时,通过使用tensorflow.contrib.layers.embed_sequence,您可以在保留深度的同时减少网络中的参数数量。例如,它消除了 LSTM 的每个门执行其自己的特征线性投影的需要。
  2. 它允许任意输入形状,这有助于实现简单且灵活。

假设我有一个数据集,如下所示:

[("garbage piles in the city","Garbage"), ("city is clogged with vehicles","Traffic")]

我想获取每个元组的第一个元素,它是一个单词序列。这些单词需要以向量形式嵌入。 第一步,应将它们转换为索引或数字。例如, 在这种情况下,词汇表将是:

vocab = [{'garbage':1},
         {'piles':2},
         {'in':3},
         {'the':4},
         {'city':5},
         {'is':6},
         {'clogged':7},
         {'with':8},
         {'vehicles':9}]

编码后的文本将如下所示:

features = [[1, 2, 3, 4, 5], [5, 6, 7, 8, 9]]

您将此编码文本传递为features批量调用此函数:

features_embedded = tf.contrib.layers.embed_sequence(
    ids=features,
    vocab_size=len(vocab),
    embed_dim=EMBEDDING_SIZE,
    scope='words'
)

现在,使用索引(1 到 5)表示的每个单词都嵌入到大小为EMBEDDING_SIZE.

如果批量大小为 2(即一批中有 2 个序列)并且EMBEDDING_SIZE为 10,输出将是形状矩阵(2, 5, 10)

示例输出:

[[[0.1, 0.3, 0.4, 0.2, 0.5, 0.2, 0.2, 0.2, 0.4, 0.1], # garbage
  [0.1, 0.3, 0.4, 0.2, 0.5, 0.2, 0.1, 0.2, 0.4, 0.1], # piles
  [0.1, 0.3, 0.4, 0.2, 0.5, 0.2, 0.4, 0.2, 0.4, 0.1], # in
  [0.1, 0.3, 0.4, 0.2, 0.5, 0.3, 0.1, 0.2, 0.4, 0.1], # the
  [0.1, 0.3, 0.4, 0.2, 0.5, 0.2, 0.1, 0.2, 0.4, 0.6]], # city
 [sent2]]

sent2类似地编码(5 x 10 矩阵)。

希望这一点是清楚的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

tf.contrib.layers.embed_sequence() 的用途是什么? 的相关文章

随机推荐