带浮点输入的tf.nn.embedding_lookup?

时间:2017-11-09 23:52:57

标签: machine-learning tensorflow nlp word-embedding

我想用浮点输入而不是int32或64b来实现嵌入表。 原因是我想使用百分比而不是简单的RNN中的单词。 例如,在食谱的情况下;我可能有1000或3000种成分;但在每个食谱中我最多可能有80个。 成分将以百分比表示,例如:成分1 = 0.2成分2 = 0.8 ......等

我的问题是tensorflow迫使我使用整数作为嵌入表:

  

TypeError :传递给参数'indices'的值的DataType float32不在允许值列表中:int32,int64

有什么建议吗? 感谢您的反馈,

嵌入查找的示例:

inputs = tf.placeholder(tf.float32, shape=[None, ninp], name=“x”)
n_vocab = len(int_to_vocab)
n_embedding = 200 # Number of embedding features 
with train_graph.as_default():
    embedding = tf.Variable(tf.random_uniform((n_vocab, n_embedding), -1, 1))
    embed = tf.nn.embedding_lookup(embedding, inputs)

错误是由

引起的
inputs = tf.placeholder(**tf.float32,** shape=[None, ninp], name=“x”)

我想到了一种可以使用循环工作的算法。但是,我想知道是否有更直接的解决方案。

谢谢!

1 个答案:

答案 0 :(得分:1)

tf.nn.embedding_lookup不允许浮动输入,因为此功能的目的是选择指定行的嵌入。

示例:

embed-lookup

这里有5个字和5个嵌入3D向量,操作返回第3行(带0索引)。这相当于tensorflow中的这一行:

embed = tf.nn.embedding_lookup(embed_matrix, [3])

您无法查找浮点索引,例如0.20.8,因为此处没有0.20.8行索引矩阵。强烈推荐关于word2vec的this post by Chris McCormick

你所描述的听起来更像是一个softmax损失函数,它输出目标类的概率分布。