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:
tensor
y Variable
, tensor
tf.constant
, ‘tensor’ vs. tf.placeholder
? 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 Queue
– close()
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):
sess.run()
en sess.run()
) 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 )
Ahora, en el contexto de TensorFlow, puedes imaginar un gráfico de cómputo como el de abajo,
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?