2017-09-01 12 views
0

vocabのサイズを教えないと、デコーダはどのようにセルの状態をボキャブにマッピングするのですか?Tensorflow TrainingHelperは、デコードに使用されたボキャブサイズをどのように知っていますか?

cell = # instance of RNNCell 

if mode == "train": 
    helper = tf.contrib.seq2seq.TrainingHelper(
    input=input_vectors, 
    sequence_length=input_lengths) 
elif mode == "infer": 
    helper = tf.contrib.seq2seq.GreedyEmbeddingHelper(
     embedding=embedding, 
     start_tokens=tf.tile([GO_SYMBOL], [batch_size]), 
     end_token=END_SYMBOL) 

decoder = tf.contrib.seq2seq.BasicDecoder(
    cell=cell, 
    helper=helper, 
    initial_state=cell.zero_state(batch_size, tf.float32)) 
outputs, _ = tf.contrib.seq2seq.dynamic_decode(
    decoder=decoder, 
    output_time_major=False, 
    impute_finished=True, 
    maximum_iterations=20) 

GreedyEmbeddingHelperは、次の時間ステップに入力する最も確からしいsample_idを選択した場合、それはされていなければならない、ARGMAXする上寸法[lstm_hidden_size, vocab_size]の重み行列を使用する必要がありそう:TFダイナミック復号docsのコードサンプルがありますトレーニング中に学んだ。しかし、私たちはTrainingHelperにvocabのサイズを教えていませんでした。では、このテンソルがどこにないのでしょうか?

答えて

0

vocab_sizeは、cellオブジェクトのoutput_sizeプロパティによって決まります。実際、TrainingHelperによって生成されたsample_idsは、セルの出力を取り、argmax(code here)を出力します。 GreedyEmbeddingHelperも同じです。後者の場合、embeddingと一致するのはcelloutput_sizeです。

+0

最高の人、私はあなたがレポのseq2seqのebrevdoだと思います。ここで私の問題は、 'セル'の出力は隠された状態です、いいえ? 'cell'に' vocab_size'について伝えることも、 'TrainingHelper'に伝えることもありません。私は間違っているかもしれませんが、実際には 'output_layer'引数でテンソル' [cell_h_size、vocab_size] 'を必要とする' BasicDecoder'だと思います。あなたは 'GreedyEmbeddingHelper'が' output_size'ではなく 'output_layer'でargmaxになることを確認できますか?たとえば、 'BasicLSTMCell'を見ると' output_size' argはありません。 – vega

+0

基本的に、hがLSTM隠れ状態である場合、各時間ステップについて学習された 'word_logits =(W_h + b)'のWはどこですか? – vega

関連する問題