Tensorflow: Unklare Dokumentation für das Abflachungsverhalten von tf.layers.dense

Erstellt am 7. März 2017  ·  3Kommentare  ·  Quelle: tensorflow/tensorflow

In der Dokumentation heißt es:

Hinweis: Wenn der Tensor inputs einen Rang größer als 2 hat, ist dies der Fall
vor der anfänglichen Matrix abgeflacht multiplizieren mit w .

Im Folgenden wird jedoch ein Tensor mit der Form shape=(2, 2, 2, 400) , als ob die Eingabe nicht abgeflacht worden wäre
tf.layers.dense(tf.placeholder(tf.float32, (2,2,2,2)), 400)

docs-bug

Hilfreichster Kommentar

Ah danke, die Tensordot-Verbindung macht es klarer.

Es scheint, dass sich tf.dense verhält, indem der letzte Index des Eingangstensors mit dem ersten Index des Gewichtstensors kontrahiert wird. Das Wort "Abflachen" war verwirrend, nicht sicher, was es hier bedeutet

Spielzeugbeispiel, das ich mir gemacht habe, um tf.dense in äquivalentes np.tensordot zu übersetzen

tf.reset_default_graph()
x0 = np.ones((3, 3, 3))
w0 = np.arange(6).reshape((3, 2))
x = tf.constant(x0)
y = tf.layers.dense(x, 2)
var_dict = {v.op.name: v for v in tf.global_variables()}
assert(var_dict["dense/kernel"].get_shape() == (3, 2))
sess = tf.InteractiveSession()
sess.run(tf.global_variables_initializer())
sess.run(tf.assign(var_dict["dense/kernel"], w0))
sess.run(tf.assign(var_dict["dense/bias"], np.zeros((2,))))

expected_y0 = np.tensordot(x0,w0,axes=[(2,),(0,)])
y0 = sess.run(y)
np.testing.assert_allclose(y0, expected_y0)

Alle 3 Kommentare

Hoppla, sorry, ich wollte mich nicht entfernen. Interne Nachforschungen haben versucht, die Person hinzuzufügen, die meiner Meinung nach verantwortlich ist.

Nach einer Untersuchung wurde mir gesagt, dass es sich wie Tensordot verhält, und daher sind sowohl das Verhalten als auch die aktuelle Dokumentation korrekt - und der Ingenieur, mit dem ich gesprochen habe, sagte, dass sie dachten, wir könnten eine präzisere Sprache verwenden, aber das würde es nicht. Es muss nicht unbedingt helfen, da die aktuelle Sprache im Kontext klar und eindeutig ist. (Siehe tensordot: https://docs.scipy.org/doc/numpy/reference/generated/numpy.tensordot.html)

Wenn Sie versuchen möchten, selbst eine Pull-Anfrage zu stellen, um eine Neuformulierung vorzunehmen, wäre dies willkommen, aber ich schließe diesen Fehler vorerst, da wir intern nichts dagegen unternehmen werden.

Ah danke, die Tensordot-Verbindung macht es klarer.

Es scheint, dass sich tf.dense verhält, indem der letzte Index des Eingangstensors mit dem ersten Index des Gewichtstensors kontrahiert wird. Das Wort "Abflachen" war verwirrend, nicht sicher, was es hier bedeutet

Spielzeugbeispiel, das ich mir gemacht habe, um tf.dense in äquivalentes np.tensordot zu übersetzen

tf.reset_default_graph()
x0 = np.ones((3, 3, 3))
w0 = np.arange(6).reshape((3, 2))
x = tf.constant(x0)
y = tf.layers.dense(x, 2)
var_dict = {v.op.name: v for v in tf.global_variables()}
assert(var_dict["dense/kernel"].get_shape() == (3, 2))
sess = tf.InteractiveSession()
sess.run(tf.global_variables_initializer())
sess.run(tf.assign(var_dict["dense/kernel"], w0))
sess.run(tf.assign(var_dict["dense/bias"], np.zeros((2,))))

expected_y0 = np.tensordot(x0,w0,axes=[(2,),(0,)])
y0 = sess.run(y)
np.testing.assert_allclose(y0, expected_y0)
War diese Seite hilfreich?
0 / 5 - 0 Bewertungen