usar tutorial tensores imagenes examples español ejemplos clasificador basicos aplicaciones python python-2.7 tensorflow

python - tensores - tensorflow tutorial



Pitón de Tensorflow: acceso a elementos individuales en un tensor (3)

Hay dos formas principales de acceder a los subconjuntos de los elementos en un tensor, cualquiera de los cuales debería funcionar para su ejemplo.

  1. Use el operador de indexación (basado en tf.slice() ) para extraer un segmento contiguo del tensor.

    input = tf.constant([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) output = input[0, :] print sess.run(output) # ==> [1 2 3]

    El operador de indexación admite muchas de las mismas especificaciones de segmento que NumPy.

  2. Use tf.gather() op para seleccionar un segmento no contiguo del tensor.

    input = tf.constant([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) output = tf.gather(input, 0) print sess.run(output) # ==> [1 2 3] output = tf.gather(input, [0, 2]) print sess.run(output) # ==> [[1 2 3] [7 8 9]]

    Tenga en cuenta que tf.gather() solo le permite seleccionar tf.gather() enteros en la dimensión 0 (filas enteras en el ejemplo de una matriz), por lo que puede necesitar tf.reshape() o tf.transpose() su entrada para obtener el elementos apropiados.

Esta pregunta es con respecto al acceso a elementos individuales en un tensor, digamos [[1,2,3]]. Necesito acceder al elemento interno [1,2,3] (Esto se puede realizar usando .eval () o sess.run ()) pero lleva más tiempo cuando el tamaño del tensor es enorme)

¿Hay algún método para hacer lo mismo más rápido?

Gracias por adelantado.


Simplemente no puede obtener el valor del 0 ° elemento de [[1,2,3]] sin ejecutar () - ning o eval () - ing una operación que lo obtendría. Porque antes de ''ejecutar'' o ''evaluar'', solo tiene una descripción de cómo obtener este elemento interno (porque TF usa gráficos / cálculos simbólicos). Por lo tanto, incluso si usara tf.gather / tf.slice, aún tendría que obtener los valores de estas operaciones a través de eval / run. Ver la respuesta de @mrry.


Sospecho que es el resto del cálculo lo que lleva tiempo, en lugar de acceder a un elemento.

Además, el resultado puede requerir una copia de la memoria en la que esté almacenada, de modo que si está en la tarjeta gráfica, primero deberá copiarla a la memoria RAM y luego tendrá acceso a su elemento. Si este es el caso, puede omitirlo agregando una operación tensorflow para tomar el primer elemento y solo devolverlo.