tf.nn.embedding_lookup 使用浮点输入?

tf.nn.embedding_lookup with float input?

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

我的问题是 tensorflow 强制我使用整数进行嵌入 table:

TypeError: Value passed to parameter ‘indices’ has DataType float32 not in list of allowed values: 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”)

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

谢谢!

tf.nn.embedding_lookup 不允许输入浮点数,因为这个函数的重点是 select 在 指定行的嵌入 .

示例:

这里有 5 个单词和 5 个嵌入 3D 向量,操作 returns 第 3 行(索引为 0)。这相当于 tensorflow 中的这一行:

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

您不可能查找浮点索引,例如 0.20.8,因为没有 0.20.8 行索引矩阵。强烈推荐 this post by Chris McCormick 关于 word2vec。

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