【发布时间】:2016-11-24 10:59:30
【问题描述】:
我在最新的Tensorflow 示例中找到了tf.contrib.layers.embed_sequence() 函数,但它并未包含在主API 中。我不知道为什么。任何有关其工作原理的解释将不胜感激。
【问题讨论】:
我在最新的Tensorflow 示例中找到了tf.contrib.layers.embed_sequence() 函数,但它并未包含在主API 中。我不知道为什么。任何有关其工作原理的解释将不胜感激。
【问题讨论】:
我可以想到 tensorflow.contrib.layers.embed_sequence 有用的两个主要原因:
tensorflow.contrib.layers.embed_sequence,您可以减少网络中的参数数量,同时保留深度。例如,它消除了 LSTM 的每个门执行其自己的特征线性投影的需要。假设我有一个看起来像这样的数据集:
[("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 矩阵)。
希望这很清楚。
【讨论】:
来自 TF 文档:
将符号序列映射到嵌入序列。
... 回报: [batch_size, doc_length, embed_dim] 的张量与嵌入序列。
【讨论】: