我需要在Tensorflow中运行编码器 - 解码器模型。我看到使用可用的API basic_rnn_seq2seq(encoder_input_data, decoder_input_data, lstm_cell)
等,可以创建编码器 - 解码器系统。
encoder_input_data
是尺寸为batch_size x的2D Tensor列表
input_size。如何使用此设置中的相应单词嵌入来表示每个单词?甚至embedding_rnn_seq2seq
内部提取嵌入。如何将预先计算的单词嵌入作为输入? 答案 0 :(得分:3)
第一个问题: 可能不是最好的方式,但我在做完模型之后,在训练开始之前做了什么:
for v in tf.trainable_variables():
if v.name == 'embedding_rnn_seq2seq/RNN/EmbeddingWrapper/embedding:0':
assign_op = v.assign(my_word2vec_matrix)
session.run(assign_op) # or `assign_op.op.run()`
my_word2vec_matrix是一个形状词汇表x嵌入大小的矩阵,填写在我的预先计算的嵌入向量中。 如果您认为嵌入非常好,请使用此(或类似的东西)。否则,随着时间的推移,seq2seq-Model将提供自己训练有素的嵌入。
第二个问题: 在seq2seq.py中有一个对model_with_buckets()的调用,您可以在python / ops / seq2seq.py中找到它。从那里返回损失。
第三个问题: 在测试用例中,每个解码器输入是从时间步之前的解码器输出(即第一解码器输入是特殊GO符号,第二解码器输入是第一时间步的解码器输出,第三解码器输入是解码器输出第二个时间步,等等)