tf.contrib.layers.embed_sequence()是为了什么?

use*_*017 4 deep-learning tensorflow

tf.contrib.layers.embed_sequence()在最新的Tensorflow例子中找到了函数,但它没有包含在主API中.我不知道为什么.任何关于它是如何工作的解释将不胜感激.

pva*_*rma 16

我可以想到两个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}]
Run Code Online (Sandbox Code Playgroud)

编码后的文本如下所示:

features = [[1, 2, 3, 4, 5], [5, 6, 7, 8, 9]]
Run Code Online (Sandbox Code Playgroud)

您将此编码文本features批量传递给此函数:

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

现在,使用索引(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]]
Run Code Online (Sandbox Code Playgroud)

sent2 类似地编码(5×10矩阵).

希望这很清楚.