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のサイズを教えていませんでした。では、このテンソルがどこにないのでしょうか?
最高の人、私はあなたがレポの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
基本的に、hがLSTM隠れ状態である場合、各時間ステップについて学習された 'word_logits =(W_h + b)'のWはどこですか? – vega