Kein Rundfunk für tf.matmul in TensorFlow

Ich habe ein Problem, mit dem ich zu kämpfen habe. Es ist verwandt mittf.matmul() und seine Abwesenheit von Rundfunk.

Ich kenne ein ähnliches Problem amhttps: //github.com/tensorflow/tensorflow/issues/21, abertf.batch_matmul() sieht nicht nach einer Lösung für meinen Fall aus.

Ich muss meine Eingabedaten als 4D-Tensor kodieren:X = tf.placeholder(tf.float32, shape=(None, None, None, 100)) Die erste Dimension ist die Größe eines Stapels, die zweite die Anzahl der Einträge im Stapel. Sie können sich jeden Eintrag als Komposition mehrerer Objekte (dritte Dimension) vorstellen. Schließlich wird jedes Objekt durch einen Vektor von 100 Gleitkommawerten beschrieben.

Hinweis, dass ich None für die zweite und dritte Dimension verwendet habe, da sich die tatsächlichen Größen in jeder Charge ändern können. Der Einfachheit halber wollen wir den Tensor jedoch mit den tatsächlichen Zahlen formen:X = tf.placeholder(tf.float32, shape=(5, 10, 4, 100))

Dies sind die Schritte meiner Berechnung:

Berechnen einer Funktion jedes Vektors mit 100 Gleitkommawerten (z. B. lineare Funktion)W = tf.Variable(tf.truncated_normal([100, 50], stddev=0.1)) Y = tf.matmul(X, W) Proble: kein Rundfunk fürtf.matmul() und kein Erfolg mittf.batch_matmul() erwartete Form von Y: (5, 10, 4, 50)

Anwenden des durchschnittlichen Pools für jeden Eintrag des Stapels (über die Objekte jedes Eintrags):Y_avg = tf.reduce_mean(Y, 2) erwartete Form von Y_avg: (5, 10, 50)

Das habe ich erwartettf.matmul() hätte Broadcasting unterstützt. Dann fand ichtf.batch_matmul(), aber es sieht so aus, als würde es nicht auf meinen Fall zutreffen (z. B. W muss mindestens 3 Dimensionen haben, nicht klar warum).

BTW, oben habe ich eine einfache lineare Funktion verwendet (deren Gewichte in W gespeichert sind). Aber in meinem Modell habe ich stattdessen ein tiefes Netzwerk. Das allgemeinere Problem, das ich habe, besteht darin, automatisch eine Funktion für jede Schicht eines Tensors zu berechnen. Deshalb habe ich erwartet, dasstf.matmul() hätte ein Sendeverhalten gehabt (wenn ja, vielleichttf.batch_matmul() wäre nicht mal nötig).

Freuen Sie sich darauf, von Ihnen zu lernen! Alessio

Antworten auf die Frage(4)

Ihre Antwort auf die Frage