我想用浮点输入而不是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”)
我想到了一种可以使用循环工作的算法。但是,我想知道是否有更直接的解决方案。
谢谢!
答案 0 :(得分:1)
tf.nn.embedding_lookup
不允许浮动输入,因为此功能的目的是选择指定行的嵌入。
示例:
这里有5个字和5个嵌入3D向量,操作返回第3行(带0索引)。这相当于tensorflow中的这一行:
embed = tf.nn.embedding_lookup(embed_matrix, [3])
您无法查找浮点索引,例如0.2
或0.8
,因为此处没有0.2
和0.8
行索引矩阵。强烈推荐关于word2vec的this post by Chris McCormick。
你所描述的听起来更像是一个softmax损失函数,它输出目标类的概率分布。