使用具有LSTM和动态RNN的可训练单词嵌入层:AdamOptimizer期望float_ref而不是float

时间:2017-04-30 22:09:06

标签: python tensorflow nlp lstm

我在单词嵌入序列上使用RNN来对句子进行分类。起初,我正在喂养预先训练过的单词嵌入,一切正常。我使用维度(Vocab大小,嵌入大小)将嵌入矩阵设为tf.placeholder,并从GloVe中提供一些预先训练的嵌入。我还使用tf.nn.embedding_lookup将我的输入(这是单词ID序列)转换为嵌入序列。

然后我想让模型也训练嵌入,所以我将嵌入矩阵设为tf.Variable而不是占位符。现在TensorFlow给了我这个错误 - 显然AdamOptimizer无法处理嵌入查找。有什么想法或者如何解决这个问题?

tensorflow.python.framework.errors_impl.InvalidArgumentError: Input 0 of node 
Adam/update_embeddings/AssignSub was passed float from _recv_embeddings_0:0 
incompatible with expected float_ref.

1 个答案:

答案 0 :(得分:1)

您无法将值提供给变量并同时对其进行优化。相反,您必须首先对该变量运行tf.assign以将其初始化为fed值,然后运行优化器。或者,更简单地说,您可以将手套向量作为变量的初始值传递,并运行tf.global_variables_initializer。