2017-09-26 3 views
1

Die offizielle Dokumentation für tf.contrib.legacy_seq2seq.embedding_rnn_seq2seq hat die folgende Erklärung für das Argument output_projection:
tf.contrib.legacy_seq2seq.embedding_rnn_seq2seq Ausgabeprojektion

output_projection: Keine oder ein Paar (W, B) des Ausgangsprojektions Gewichte und Vorspannungen; W hat die Form [Ausgabegröße x Zahl_Decodersymbole] und B hat die Form [Num_decoder_symbols]; Wenn angegeben und feed_previous = True, wird jede vorhergehende Ausgabe zuerst mit W multipliziert und mit B ergänzt.

Ich verstehe nicht, warum das B-Argument die Größe [num_decoder_symbols] haben sollte? Da die Ausgabe zuerst mit W multipliziert wird und dann die Verzerrungen addiert werden, sollte es nicht [output_size] sein?

+0

Dies kann daran liegen, dass Tensorflussvektoren (in diesem Fall B) normalerweise Zeilenvektoren sind, so dass die Multiplikation als (uW + B) erfolgt, wobei u und B beide Zeilenvektoren sind. –

+0

Oh nein! Ich habe gerade versucht, den Code für die ouput_projection einzurichten, und es stellt sich heraus, egal welche output_size Sie geben, die endgültige Dimension wird immer gleich der output_size des num_proj Arguments der lstm-Zelle. Was den ursprünglichen Zweifel immer noch nicht beantwortet: (Warum sind Vorurteile num_decoder_symbol?) –

Antwort

0

In Ordnung! Also, ich habe die Antwort auf die Frage gefunden.
Die Hauptquelle der Verwirrung war in den Dimensionen [output_size x num_decoder_symbols] der W-Matrix selbst.

Die output_size hier bezieht sich nicht auf die output_size, die Sie wollen, aber ist die output_size (entspricht der Größe des verborgenen Vektor) der LSTM Zelle. Somit wird die Matrixmultiplikation u x W zu einem Vektor der Größe num_decoder_symbols führen, der als die Logits für die Ausgangssymbole betrachtet werden kann.