使用 GreedyEmbeddingHelper 构建 BasicDecoder 时出错
Error when building BasicDecoder with GreedyEmbeddingHelper
我正在尝试构建一个基本的编码器-解码器模型。我为训练图建立了模型,并且效果很好。解码器的助手是 tf.contrib.seq2seq.TrainingHelper
。但是当我切换到 tf.contrib.seq2seq.GreedyEmbeddingHelper
的助手时,它会抛出一个形状错误。
这是我的工作帮手
helper = tf.contrib.seq2seq.TrainingHelper(
decoder_emb_inp, decoder_lengths, time_major=True)
这就是我想要做的。
start_tokens = tf.fill([batch_size], vezins_dict[start_token_str])
end_token = vezins_dict[end_token_str]
helper = tf.contrib.seq2seq.GreedyEmbeddingHelper(decoder_emb_inp,
start_tokens, end_token)
我使用的解码器和 dynamic_decoding 相同。它适用于 TrainingHelper
,但不适用于 GreedyEmbeddingHelper
。
# decoder
decoder = tf.contrib.seq2seq.BasicDecoder(
decoder_cell, helper, encoder_state,
output_layer=projection_layer)
# Dynamic decoding
outputs, _, _ = tf.contrib.seq2seq.dynamic_decode(decoder)
logits = outputs.rnn_output
这里是错误。
ValueError: linear is expecting 2D arguments:
[TensorShape([Dimension(20), Dimension(20), Dimension(10)]),
TensorShape([Dimension(20), Dimension(128)])]
问题出在 GreedyEmbeddingHelper
的输入上。使用 Greedy Helper 时,不需要解码器输入。
这是 Greedy Helper
的错误嵌入输入
embedding_decoder = tf.get_variable(
"embedding_decoder", [out_alphabet_size, embedding_size])
decoder_emb_inp = tf.nn.embedding_lookup(
embedding_decoder, decoder_inputs)
为了Greedy需要这样
decoder_emb_inp = tf.get_variable(
"embedding_decoder", [out_alphabet_size, embedding_size])
我正在尝试构建一个基本的编码器-解码器模型。我为训练图建立了模型,并且效果很好。解码器的助手是 tf.contrib.seq2seq.TrainingHelper
。但是当我切换到 tf.contrib.seq2seq.GreedyEmbeddingHelper
的助手时,它会抛出一个形状错误。
这是我的工作帮手
helper = tf.contrib.seq2seq.TrainingHelper(
decoder_emb_inp, decoder_lengths, time_major=True)
这就是我想要做的。
start_tokens = tf.fill([batch_size], vezins_dict[start_token_str])
end_token = vezins_dict[end_token_str]
helper = tf.contrib.seq2seq.GreedyEmbeddingHelper(decoder_emb_inp,
start_tokens, end_token)
我使用的解码器和 dynamic_decoding 相同。它适用于 TrainingHelper
,但不适用于 GreedyEmbeddingHelper
。
# decoder
decoder = tf.contrib.seq2seq.BasicDecoder(
decoder_cell, helper, encoder_state,
output_layer=projection_layer)
# Dynamic decoding
outputs, _, _ = tf.contrib.seq2seq.dynamic_decode(decoder)
logits = outputs.rnn_output
这里是错误。
ValueError: linear is expecting 2D arguments:
[TensorShape([Dimension(20), Dimension(20), Dimension(10)]),
TensorShape([Dimension(20), Dimension(128)])]
问题出在 GreedyEmbeddingHelper
的输入上。使用 Greedy Helper 时,不需要解码器输入。
这是 Greedy Helper
的错误嵌入输入embedding_decoder = tf.get_variable(
"embedding_decoder", [out_alphabet_size, embedding_size])
decoder_emb_inp = tf.nn.embedding_lookup(
embedding_decoder, decoder_inputs)
为了Greedy需要这样
decoder_emb_inp = tf.get_variable(
"embedding_decoder", [out_alphabet_size, embedding_size])