1
Tensorflowのseq2seq.dynamic_decodeを使用してシーケンスモデルを構築しようとしています。私は既にエンコーダー部分を終えました。 decoder_outputs
は[batch_size x sequence_length x embedding_size]
を返すようですが、私は正確に私の損失を計算するために実際の単語インデックスが必要ですので、私はデコーダについて混乱しています[batch_size x sequence_length]
。 私の形状入力の1つが間違っているか、何かを忘れてしまったのかなと思います。
デコーダおよびエンコーダセルはrnn.BasicLSTMCell()
です。Tensorflow v1.1 seq2seq.dynamic_decodeの使い方?
# Variables
cell_size = 100
decoder_vocabulary_size = 7
batch_size = 2
decoder_max_sentence_len = 7
# Part of the encoder
_, encoder_state = tf.nn.dynamic_rnn(
cell=encoder_cell,
inputs=features,
sequence_length=encoder_sequence_lengths,
dtype=tf.float32)
# ---- END Encoder ---- #
# ---- Decoder ---- #
# decoder_sequence_lengths = _sequence_length(features)
embedding = tf.get_variable(
"decoder_embedding", [decoder_vocabulary_size, cell_size])
helper = seq2seq.GreedyEmbeddingHelper(
embedding=embedding,
start_tokens=tf.tile([GO_SYMBOL], [batch_size]),
end_token=END_SYMBOL)
decoder = seq2seq.BasicDecoder(
cell=decoder_cell,
helper=helper,
initial_state=encoder_state)
decoder_outputs, _ = seq2seq.dynamic_decode(
decoder=decoder,
output_time_major=False,
impute_finished=True,
maximum_iterations=self.decoder_max_sentence_len)
# I need labels (decoder_outputs) to be indices
losses = nn_ops.sparse_softmax_cross_entropy_with_logits(
labels=labels, logits=logits)
loss = tf.reduce_mean(losses)