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


Soy nuevo en TensorFlow. Mientras leía la documentación existente, encontré el término tensor realmente confuso. Debido a ello, necesito aclarar las siguientes preguntas:

  1. ¿Cuál es la relación entre tensor y Variable, tensor
    vs tf.constant, 'tensor versus tf.placeholder?
  2. Son todos los tipos de tensores?
Author: julianfperez, 2016-06-16

4 answers

TensorFlow no tiene objetos tensores de primera clase, lo que significa que no hay noción de Tensor en el gráfico subyacente que se ejecuta en tiempo de ejecución. En su lugar, el gráfico consiste en nodos op conectados entre sí, representando operaciones. Una operación asigna memoria para sus salidas, que están disponibles en los puntos finales :0, :1, etc, y se puede pensar en cada uno de estos puntos finales como un Tensor. Si tiene tensor correspondiente a nodename:0 puede obtener su valor como sess.run(tensor) o sess.run('nodename:0'). Ejecución la granularidad ocurre a nivel de operación, por lo que el método run ejecutará op que calculará 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. No es posible tener tensores sin un nodo Op subyacente.

Puede 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 puede buscarlo 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 podría alimentarlo como feed_dict={"Placeholder:0":2} o feed_dict={value:2}. No puede alimentar y obtener un marcador de posición en la misma llamada session.run, pero puede ver el resultado adjuntando un nodo tf.identity en la parte superior y recuperándolo.

Para la variable

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

Verás 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 especial ref type significa que se puede usar como entrada para operaciones mutantes. El resultado de Python call tf.Variable es un objeto Python Variable y hay algo de magia Python para sustituir Variable/read:0 o Variable:0 dependiendo de si la mutación es necesaria. Dado que la mayoría de los ops solo tienen 1 punto final, :0 se elimina. Otro ejemplo es Queue -- close() el método creará un nuevo nodo Close op que se conecta a Queue op. Para resumir operations las operaciones en objetos python como Variable y Queue se asignan a diferentes subyacentes Nodos TensorFlow op dependiendo del uso.

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

 48
Author: Yaroslav Bulatov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-02 15:09:44

Del glosario :

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

Básicamente, cada datos es un Tensor en TensorFlow (de ahí el nombre):

  • los marcadores de posición son tensores a los que se puede alimentar un valor (con el argumento feed_dict 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 solo el tensor más básico, que contiene un valor fijo dado cuando lo crea

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

 11
Author: Olivier Moindrot,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-16 13:43:20

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

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

tensor-definición

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

cálculo-gráfico

Aquí, los Op s toman dos tensores a y b como entrada ; multiplica los tensores consigo mismos y luego añade el resultado de estas multiplicaciones para producir el resultado tensor t3. Y estas multiplicaciones y suma Ops sucede en los nodos en el 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 y cuando sean del mismo tipo de datos y formas compatibles(o broadcastcapaces de ello) para lograr las operaciones.

 5
Author: kmario23,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-27 15:18:38

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 cero o n-dimensional, determinada por rango, forma y tipo.Leer más: ¿Qué son los tensores en TensorFlow?

 0
Author: Amit Arora,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-20 06:54:38