ich zwei Tensoren der folgenden Formen haben:Tensorflow sequentielle Matrix-Multiplikation
tensor1 => shape(?, ?, 100) # corresponds to [batch_size, max_time, embedding_size]
tensor2 => shape(?, 100) # corresponds to [batch_size, embedding_size]
Was ich möchte, ist in tensor2
für jeden [100] dimensional
Vektor zu tun mit entsprechenden [max_time, 100] dimensional
Matrix in tensor1
eine Matrixmultiplikation erhalten zu bekommen batch_size
Anzahl der max_time
dimensionale Vektoren; Das ist das gleiche wie eine [batch_size, max_time] dimensional
Matrix.
Für diejenigen, die wissen: Ich versuche im Grunde, die inhaltliche Aufmerksamkeit über die codierten Eingaben zu implementieren, die vom Kodierer eines seq2seq Modells gegeben werden. Alle [max_time]
dimensionalen Vektoren sind nur die Aufmerksamkeitswerte, die ich später softmax.
Ich bin mir bewusst, dass Tensorflow bietet die AttentionWrapper
sowie verschiedene Helfer in der contrib
Paket. Ich möchte dies jedoch tun, weil ich mit dem Aufmerksamkeitsmechanismus experimentiere, um eine hybride Aufmerksamkeitsmaske zu erhalten.
Ich habe versucht, die aber, blieb in der ?
Form, um die Schleife zu entrollen. Eine vektorisierte Implementierung erscheint mir auch nicht sehr geradlinig. Bitte helfen Sie.
Vielen Dank für die schnelle Antwort (hilft viel). Ich wusste nicht, dass das 'tf.matmul' ein anderes Verhalten für Argumente hat, die einen' Rang> 2' haben. –