使用不等大小的列表进行Tensorflow嵌入查找

时间:2017-06-26 09:58:48

标签: tensorflow categorical-data embedding-lookup

Hej伙计们, 我试图使用嵌入将多标记分类数据投影到密集空间中。

这是一个玩具示例。让我们说我有四个类别,并希望将它们投射到2D空间。此外,我有两个实例,第一个属于0类,第二个属于1类。

代码看起来像这样:

sess = tf.InteractiveSession()
embeddings =  tf.Variable(tf.random_uniform([4, 2], -1.0, 1.0))
sess.run(tf.global_variables_initializer())
y = tf.nn.embedding_lookup(embeddings, [0,1])
y.eval()

并返回这样的内容:

array([[ 0.93999457, -0.83051205],
       [-0.1699729 ,  0.73936272]], dtype=float32)

到目前为止,这么好。现在假设一个实例属于两个类别。嵌入查找将返回两个向量,我可以通过平均值减少,例如:

y = tf.nn.embedding_lookup(embeddings, [[0,1],[1,2]]) # two categories
y_ = tf.reduce_mean(y, axis=1)
y_.eval()

这就像我期望的一样。我的问题现在出现在我的批次中的实例不属于相同数量的类别时,例如:

y = tf.nn.embedding_lookup(embeddings, [[0,1],[1,2,3]]) # unequal sized lists
y_ = tf.reduce_mean(y, axis=1)
y_.eval()

ValueError: Argument must be a dense tensor: [[0, 1], [1, 2, 3]] - got shape [2], but wanted [2, 2].

关于如何解决这个问题的任何想法?

0 个答案:

没有答案