2017-06-11 12 views
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) 

答えて

2

私は解決策があるが見つかりました:

from tensorflow.python.layers.core import Dense 
decoder = seq2seq.BasicDecoder(
     cell=decoder_cell, 
     helper=helper, 
     initial_state=encoder_state, 
     output_layer=Dense(decoder_vocabulary_size)) 
... 
logits = decoder_outputs[0] 

あなたは語彙サイズにcell_sizeから突出する緻密層を指定する必要があります。

関連する問題