我正在使用 word2vec 作为输入构建 LSTM 模型。我正在使用张量流框架。我已经完成了词嵌入部分,但我仍然坚持使用 LSTM 部分。
这里的问题是我有不同的句子长度,这意味着我必须进行填充或使用具有指定序列长度的 dynamic_rnn 。我和他们两个都在挣扎。
填充。填充的令人困惑的部分是当我做填充时。我的模型就像
word_matrix=model.wv.syn0
X = tf.placeholder(tf.int32, shape)
data = tf.placeholder(tf.float32, shape)
data = tf.nn.embedding_lookup(word_matrix, X)
然后,我将 word_matrix 的单词索引序列输入 X。我担心如果我将零填充到输入 X 的序列中,那么我会错误地继续输入不必要的输入(在本例中为 word_matrix[0])。
所以,我想知道 0 填充的正确方法是什么。如果您让我知道如何使用 tensorflow 实现它,那就太好了。
dynamic_rnn 为此,我声明了一个包含所有句子长度的列表,并在结尾处将它们与 X 和 y 一起提供。在这种情况下,我不能批量输入输入。然后,我遇到了这个错误(ValueError: as_list() is not defined on an unknown TensorShape.),在我看来,sequence_length 参数只接受列表?(虽然我的想法可能完全不正确)。
以下是我的代码。
X = tf.placeholder(tf.int32)
labels = tf.placeholder(tf.int32, [None, numClasses])
length = tf.placeholder(tf.int32)
data = tf.placeholder(tf.float32, [None, None, numDimensions])
data = tf.nn.embedding_lookup(word_matrix, X)
lstmCell = tf.contrib.rnn.BasicLSTMCell(lstmUnits, state_is_tuple=True)
lstmCell = tf.contrib.rnn.DropoutWrapper(cell=lstmCell, output_keep_prob=0.25)
initial_state=lstmCell.zero_state(batchSize, tf.float32)
value, _ = tf.nn.dynamic_rnn(lstmCell, data, sequence_length=length,
initial_state=initial_state, dtype=tf.float32)
我在这部分很挣扎,因此非常感谢任何帮助。
守着一只汪
相关分类