将可训练词嵌入层与 LSTM 和动态 RNN 结合使用:预计 AdamOptimizer float_ref 而不是 float

Using trainable word embedding layer with LSTM and dynamic RNN: AdamOptimizer expected float_ref instead of float

我在词嵌入序列上使用 RNN 来对句子进行分类。起初,我输入的是预训练的词嵌入,一切正常。我将嵌入矩阵设为 tf.placeholder,维度为(Vocab 大小,嵌入大小),并从 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.

您不能在为变量提供值的同时对其进行优化。相反,您必须首先 运行 该变量上的 tf.assign 以将其初始化为输入值,然后 运行 优化器。或者,更简单地,您可以将手套向量作为变量的初始值设定项传递,然后 运行 tf.global_variables_initializer.