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.
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.
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 seleccionartf.gather()
enteros en la dimensión 0 (filas enteras en el ejemplo de una matriz), por lo que puede necesitartf.reshape()
otf.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.