¿Cómo entender el término `tensor` en TensorFlow?

Soy nuevo en TensorFlow. Mientras estoy leyendo la documentación existente, encontré el término tensor realmente confuso. Por eso, necesito aclarar las siguientes preguntas:

  1. ¿Cuál es la relación entre tensor y Variable , tensor
    vs. tf.constant , ‘tensor’ vs. tf.placeholder ?
  2. ¿Son todos los tipos de tensores?

TensorFlow no tiene objetos Tensor de primera clase, lo que significa que no hay una noción de Tensor en el gráfico subyacente ejecutado por el tiempo de ejecución. En cambio, el gráfico consta de nodos op conectados entre sí, que representan operaciones. Una operación asigna memoria para sus salidas, que están disponibles en los puntos finales :0 ,: :1 , etc., y puede pensar en cada uno de estos puntos finales como un Tensor . Si tiene un tensor correspondiente al nombre de nodename:0 , puede obtener su valor como sess.run(tensor) o sess.run('nodename:0') . La granularidad de la ejecución se produce en el nivel de operación, por lo que el método de ejecución ejecutará una operación que computará todos los puntos finales, no solo el punto final :0 . Es posible tener un nodo Op sin salidas (como tf.group ) en cuyo caso no hay tensores asociados con él. No es posible tener tensores sin un nodo Op subyacente.

Puedes examinar lo que sucede en el gráfico subyacente haciendo algo como esto

 tf.reset_default_graph() value = tf.constant(1) print(tf.get_default_graph().as_graph_def()) 

Así que con tf.constant obtienes un solo nodo de operación, y puedes sess.run("Const:0") usando sess.run("Const:0") o sess.run(value)

De manera similar, value=tf.placeholder(tf.int32) crea un nodo regular con el nombre Placeholder , y puede alimentarlo como feed_dict={"Placeholder:0":2} o feed_dict={value:2} . No puede alimentar y recuperar un marcador de posición en la misma llamada session.run , pero puede ver el resultado al adjuntar un nodo tf.identity en la parte superior y recuperarlo.

Para variable

 tf.reset_default_graph() value = tf.Variable(tf.ones_initializer()(())) value2 = value+3 print(tf.get_default_graph().as_graph_def()) 

Verá que crea dos nodos Variable y Variable/read , el punto final :0 es un valor válido para obtener en ambos nodos. Sin embargo, Variable:0 tiene un tipo de ref especial, lo que significa que se puede usar como entrada para operaciones de mutación. El resultado de la llamada tf.Variable de Python es un objeto de Variable Python y hay algo de magia de Python para sustituir Variable/read:0 o Variable:0 dependiendo de si la mutación es necesaria. Como la mayoría de los operadores solo tienen 1 punto final, se elimina :0 . Otro ejemplo es el método Queueclose() creará un nuevo nodo Close op que se conecta a Queue op. Para resumir: las operaciones en objetos de Python como Variable y Queue asignan a diferentes nodos operativos subyacentes de TensorFlow según el uso.

Para operaciones como tf.split o tf.nn.top_k que crean nodos con múltiples puntos finales, la llamada tf.nn.top_k Python envuelve automáticamente la salida en tuple o collections.namedtuple de objetos Tensor que se pueden buscar individualmente.

Desde el glosario :

Un tensor es una matriz multidimensional mecanografiada. Por ejemplo, una matriz 4-D de números de punto flotante que representan un mini lote de imágenes con dimensiones [lote, altura, ancho, canal].

Básicamente, todos los datos son un Tensor en TensorFlow (de ahí el nombre):

  • los marcadores de posición son Tensores a los que puede alimentar un valor (con el argumento sess.run() en sess.run() )
  • Las variables son tensores que puede actualizar (con var.assign() ). Técnicamente hablando, tf.Variable no es una subclase de tf.Tensor aunque
  • tf.constant es simplemente el Tensor más básico, que contiene un valor fijo dado cuando lo creas

Sin embargo, en el gráfico, cada nodo es una operación, que puede tener Tensores como entradas o salidas.

Como ya han mencionado otros, sí, son todos tensores.

La forma en que los entendí es visualizar y entender primero los tensores 1D, 2D, 3D, 4D, 5D y 6D como se muestra en la siguiente imagen. (fuente: knoldus )

definición tensorial

Ahora, en el contexto de TensorFlow, puedes imaginar un gráfico de cómputo como el de abajo,

computación-gráfica

Aquí, los Op s toman dos tensores a y b como entrada ; multiplica los tensores consigo mismo y luego agrega el resultado de estas multiplicaciones para producir el tensor t3 resultante. Y estas multiplicaciones y Op sum ocurren en los nodos del gráfico de cálculo.

Y estos tensores a y b pueden ser tensores constantes, tensores variables o marcadores de posición. No importa, siempre que sean del mismo tipo de datos y formas compatibles (o que puedan broadcast ) para lograr las operaciones.

El tipo de datos central de TensorFlow es el tensor. Los tensores son los componentes subyacentes de la computación y una estructura de datos fundamental en TensorFlow. Sin utilizar interpretaciones matemáticas complejas, podemos decir que un tensor (en TensorFlow) describe una matriz numérica multidimensional, con una colección de datos de cero o n dimensiones, determinada por rango, forma y tipo. Leer más: ¿Qué son los tensores en TensorFlow?