python - started - tensorflow tutorial pdf
¿Cómo entender el término `tensor` en TensorFlow? (4)
Como ya lo mencionaron otros, sí, todos son tensores.
La forma en que los comprendí es primero visualizar y comprender 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 computación como el siguiente,
Aquí, los Op
toman dos tensores b
como entrada ; multiplica los tensores consigo mismo y luego agrega el resultado de estas multiplicaciones para producir el tensor de resultado t3
. Y estas multiplicaciones y Op
adición ocurren en los nodos en el gráfico de computación.
Y estos tensores 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 broadcast
) para lograr las operaciones.
Soy nuevo en TensorFlow. Mientras leo la documentación existente, el término tensor
me pareció realmente confuso. Por eso, necesito aclarar las siguientes preguntas:
- Cuál es la relación entre el
tensor
y laVariable
,tensor
vs.tf.constant
, ''tensor'' vs.tf.placeholder
? - ¿Son todos tipos de tensores?
Del glossary :
Un Tensor es una matriz multidimensional tipada. Por ejemplo, una matriz 4-D de números de coma flotante que representa un mini lote de imágenes con dimensiones [lote, altura, ancho, canal].
Básicamente, cada dato es 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()
ensess.run()
) - Las variables son Tensors que puede actualizar (con
var.assign()
). Técnicamente hablando,tf.Variable
no es una subclase detf.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.
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 n o dimensional, determinada por rango, forma y tipo.Leer más: ¿Qué son los tensores en TensorFlow?
TensorFlow no tiene objetos Tensor de primera clase, lo que significa que no hay ninguna noción de Tensor
en el gráfico subyacente que ejecuta el tiempo de ejecución. En cambio, 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 puntos finales :0
,: :1
, etc., y puede pensar en cada uno de estos puntos finales como un Tensor
. Si tiene un tensor
correspondiente a nombre de nodename:0
puede obtener su valor como sess.run(tensor)
o sess.run(''nodename:0'')
. La granularidad de la ejecución ocurre en el nivel de operación, por lo que el método de ejecución 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 con él. 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())
Entonces con tf.constant
obtienes un único nodo de operación, y puedes buscarlo usando sess.run("Const:0")
o sess.run(value)
De forma 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 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 obteniéndolo.
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 puede usarse como entrada para operaciones de mutación. El resultado de la llamada de Python tf.Variable
es un objeto de la 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 las operaciones tienen solo 1 punto final,: :0
se descarta. Otro ejemplo es el método Queue
- close()
que creará un nuevo nodo Close
op que se conecta a la función Queue
op. Para resumir: operaciones en objetos de Python como el mapa de Variable
y Queue
para diferentes nodos TensorFlow op subyacentes 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 automáticamente envuelve la salida en tuple
o collections.namedtuple
de los objetos Tensor
que se pueden buscar individualmente.