2017-09-26 4 views
1

tf.contrib.legacy_seq2seq.embedding_rnn_seq2seqの公式文書はoutput_projection引数の以下の説明がありません:
tf.contrib.legacy_seq2seq.embedding_rnn_seq2seq出力投影

output_projection

:出力投影重みおよびバイアスのいずれ又は対(W、B)。 Wは形状[出力サイズ×num_decoder_symbols]を持ち、Bは形状[num_decoder_symbols]を持つ。 feed_previous = Trueの場合、以前に出力されたそれぞれの出力は最初にWで乗算され、Bが加算されます。

なぜB引数のサイズが[num_decoder_symbols]になるのか分かりません。出力は最初にWで乗算され、その後にバイアスが追加されるため、[output_size]ではありませんか?

+0

これは、テンソルフローベクトル(この場合はB)が通常行ベクトルであるため、uとBが両方の行ベクトルである(uW + B)として乗算が行われるためです。 –

+0

ああ!私はちょうどouput_projectionのコードを設定しようとしましたが、output_sizeを指定しても、最後の次元は常にlstm-cellのnum_proj引数のouput_sizeと等しいことが分かります。それはまだ元の疑問に答えることはできません:(なぜバイアスはnum_decoder_symbolですか?) –

答えて

0

大丈夫です!だから、私はその質問に対する答えを見つけました。
混乱の主な原因は、Wマトリクス自体の寸法 [output_size x num_decoder_symbols]です。

output_sizeは、ここであなたが望むoutput_sizeを参照していないが、LSTMセルの(隠されたベクトルの大きさと同じ)output_sizeです。したがって、行列乗算u x Wは、出力シンボルのロジットと考えることができるサイズnum_decoder_symbolsのベクトルになります。