如何在Tensorflow中使用embedding_lookup和一批不同长度的序列?

时间:2016-12-01 05:20:43

标签: python tensorflow

说我有一个嵌入张量:

emb = [[1,1],
       [2,2],
       [3,3],
       [4,4]]
emb = tf.constant(emb)

我有一系列序列:

inputs = [[0,1,2,3]
          [3,2]]

我想查找emb和填充零以使每个序列具有相同的长度:

  [[[1, 1],
    [2, 2],
    [3, 3],
    [4, 4]],

   [[4, 4],
    [3, 3],
    [0, 0],
    [0, 0]]]

我尝试了tf.nn.embedding_lookup,但收到了错误:

  

ValueError:参数必须是密集张量:[[0,1,2,3],[3,2]] -   得到了形状[2],但想要[2,4]。

是否可以在不[0, 0]前加emb

的情况下实现这一目标

1 个答案:

答案 0 :(得分:1)

tf.nn.embedding_lookup(params, ids)函数只接受密集的矩形张量作为[ { "_id" : '', "_skills" : { "label" : "skill1", "skill_score" : 1 } }, { "_id" : '', "_skills" : { "label" : "skill2", "skill_score" : 1 } }, { "_id" : '' }, ] 参数。 (一般情况下,对于期望tf.Tensor或类似张量的参数(如NumPy数组)的所有TensorFlow运算符也是如此。)

对于稀疏数据,您可以使用tf.nn.embedding_lookup_sparse(),它接受​​tf.SparseTensor作为参数,可以表示不同长度的序列。 -XX:+PrintGCDateStamps -verbose:gc 由三个独立(密集)张量定义,表示非零的索引,非零值和整体密集形状。对于输入的示例,表示形式为:

ids