world tutorial instalar imagenes hello español ejemplos como clasificador basicos python tensorflow

tutorial - tensorflow python español



¿Cómo obtener las dimensiones de un tensor(en TensorFlow) en el momento de la construcción del gráfico? (6)

Veo a la mayoría de la gente confundida acerca de tf.shape(tensor) y tensor.get_shape() Vamos a dejarlo en claro:

  1. tf.shape

tf.shape se usa para la forma dinámica. Si la forma de su tensor es cambiante , úselo . Un ejemplo: una entrada es una imagen con ancho y alto variable, queremos redimensionarla a la mitad de su tamaño, luego podemos escribir algo como:
new_height = tf.shape(image)[0] / 2

  1. tensor.get_shape

tensor.get_shape se usa para formas fijas, lo que significa que la forma del tensor se puede deducir en el gráfico.

Conclusión: tf.shape se puede usar casi en cualquier lugar, pero t.get_shape solo se puede deducir de las formas a partir del gráfico.

Estoy probando una Op que no se comporta como se esperaba.

graph = tf.Graph() with graph.as_default(): train_dataset = tf.placeholder(tf.int32, shape=[128, 2]) embeddings = tf.Variable( tf.random_uniform([50000, 64], -1.0, 1.0)) embed = tf.nn.embedding_lookup(embeddings, train_dataset) embed = tf.reduce_sum(embed, reduction_indices=0)

Entonces necesito saber las dimensiones del Tensor embed . Sé que se puede hacer en el tiempo de ejecución, pero es demasiado trabajo para una operación tan simple. ¿Cuál es la forma más fácil de hacerlo?


Simplemente imprima el gráfico embed after construction (ops) sin ejecutar:

import tensorflow as tf ... train_dataset = tf.placeholder(tf.int32, shape=[128, 2]) embeddings = tf.Variable( tf.random_uniform([50000, 64], -1.0, 1.0)) embed = tf.nn.embedding_lookup(embeddings, train_dataset) print (embed)

Esto mostrará la forma del tensor de inserción:

Tensor("embedding_lookup:0", shape=(128, 2, 64), dtype=float32)

Por lo general, es bueno verificar las formas de todos los tensores antes de entrenar a tus modelos.


Una función para acceder a los valores:

def shape(tensor): s = tensor.get_shape() return tuple([s[i].value for i in range(0, len(s))])

Ejemplo:

batch_size, num_feats = shape(logits)


Vamos a hacerlo simple como el infierno. Si quiere un número único para el número de dimensiones como 2, 3, 4, etc., simplemente use tf.rank() . Pero, si quieres la forma exacta del tensor, utiliza tensor.get_shape()

with tf.Session() as sess: arr = tf.random_normal(shape=(10, 32, 32, 128)) a = tf.random_gamma(shape=(3, 3, 1), alpha=0.1) print(sess.run([tf.rank(arr), tf.rank(a)])) print(arr.get_shape(), ", ", a.get_shape()) # for tf.rank() [4, 3] # for tf.get_shape() Output: (10, 32, 32, 128) , (3, 3, 1)


Tensor.get_shape() desde esta publicación .

De la documentación :

c = tf.constant([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]]) print(c.get_shape()) ==> TensorShape([Dimension(2), Dimension(3)])