Tensorflow: Documentación poco clara para el comportamiento de aplanamiento de tf.layers.dense

Creado en 7 mar. 2017  ·  3Comentarios  ·  Fuente: tensorflow/tensorflow

Estados de la documentación:

Nota: si el tensor inputs tiene un rango mayor que 2, entonces es
aplanado antes de la matriz inicial multiplicar por w .

Sin embargo, el siguiente tensor devuelve con forma shape=(2, 2, 2, 400) , como si la entrada no se hubiera aplanado
tf.layers.dense(tf.placeholder(tf.float32, (2,2,2,2)), 400)

docs-bug

Comentario más útil

Ah, gracias, la conexión tensordot lo deja más claro.

Parece que tf.dense comporta contrayendo el último índice del tensor de entrada con el primer tensor del índice de pesos. La palabra "aplanar" era confusa, no estoy seguro de lo que significa aquí

Ejemplo de juguete que hice para mí mismo para traducir tf.dense a np.tensordot equivalente

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)

Todos 3 comentarios

Ups, lo siento, no quise quitarme. Investigando internamente, estaba tratando de agregar a la persona que creo que es responsable.

Entonces, después de la investigación, lo que me dijeron fue que se comporta como tensordot, por lo que el comportamiento y la documentación actual son correctos, y el ingeniero con el que hablé dijo que pensaban que podíamos usar un lenguaje más preciso, pero que no lo haría ' Esto necesariamente ayuda, ya que el lenguaje actual es claro e inequívoco cuando está en contexto. (Ver tensordot: https://docs.scipy.org/doc/numpy/reference/generated/numpy.tensordot.html)

Si desea intentar hacer una solicitud de extracción usted mismo para hacer una nueva redacción, sería bienvenido, pero cerraré este error por ahora, ya que no vamos a hacer nada al respecto internamente.

Ah, gracias, la conexión tensordot lo deja más claro.

Parece que tf.dense comporta contrayendo el último índice del tensor de entrada con el primer tensor del índice de pesos. La palabra "aplanar" era confusa, no estoy seguro de lo que significa aquí

Ejemplo de juguete que hice para mí mismo para traducir tf.dense a np.tensordot equivalente

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)
¿Fue útil esta página
0 / 5 - 0 calificaciones