variable tutorial que get_variable funciones español ejemplos matrix reshape tensorflow

matrix - tutorial - tf get_variable



¿Cómo puedo cambiar la forma de una variable en TensorFlow? (4)

La documentación muestra métodos para remodelar. Son:

  • remodelar
  • squeeze (elimina las dimensiones del tamaño 1 de la forma de un tensor)
  • expand_dims (agrega dimensiones de tamaño 1)

así como un montón de métodos para obtener la shape , el size y el rank de tu tensor. Probablemente el más utilizado sea la reshape y aquí hay un ejemplo de código con un par de casos extremos (-1):

import tensorflow as tf v1 = tf.Variable([ [1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12] ]) v2 = tf.reshape(v1, [2, 6]) v3 = tf.reshape(v1, [2, 2, -1]) v4 = tf.reshape(v1, [-1]) # v5 = tf.reshape(v1, [2, 4, -1]) will fail, because you can not find such an integer for -1 v6 = tf.reshape(v1, [1, 4, 1, 3, 1]) v6_shape = tf.shape(v6) v6_squeezed = tf.squeeze(v6) v6_squeezed_shape = tf.shape(v6_squeezed) init = tf.initialize_all_variables() sess = tf.Session() sess.run(init) a, b, c, d, e, f, g = sess.run([v2, v3, v4, v6, v6_shape, v6_squeezed, v6_squeezed_shape]) # print all variables to see what is there print e # shape of v6 print g # shape of v6_squeezed

El tutorial de TensorFlow dice que en el momento de la creación necesitamos especificar la forma de los tensores. Esa forma se convierte automáticamente en la forma del tensor. También dice que TensorFlow proporciona mecanismos avanzados para remodelar las variables. ¿Cómo puedo hacer eso? ¿Algún ejemplo de código?


La clase tf.Variable es la forma recomendada de crear variables, pero restringe su capacidad para cambiar la forma de la variable una vez que se ha creado.

Si necesita cambiar la forma de una variable, puede hacer lo siguiente (por ejemplo, para un tensor de coma flotante de 32 bits):

var = tf.Variable(tf.placeholder(tf.float32)) # ... new_value = ... # Tensor or numpy array. change_shape_op = tf.assign(var, new_value, validate_shape=False) # ... sess.run(change_shape_op) # Changes the shape of `var` to new_value''s shape.

Tenga en cuenta que esta función no se encuentra en la API pública documentada, por lo que está sujeta a cambios. Si encuentra que necesita usar esta función, avísenos y podremos investigar una forma de ayudarlo a seguir adelante.


Eche un vistazo a las formas y la forma de la documentación de TensorFlow. Describe las diferentes transformaciones de formas disponibles.

La función más común es probablemente tf.reshape , que es similar a su equivalente numpy. Le permite especificar cualquier forma que desee, siempre y cuando la cantidad de elementos permanezca igual. Hay algunos ejemplos disponibles en la documentación.


tf.Variable(tf.placeholder(tf.float32))

no es válido en tensorflow 1.2.1

en python shell:

import tensorflow as tf tf.Variable(tf.placeholder(tf.float32))

Conseguirás:

ValueError: initial_value must have a shape specified: Tensor("Placeholder:0", dtype=float32)

Actualización: si agrega validate_shape=False , no habrá ningún error.

tf.Variable(tf.placeholder(tf.float32), validate_shape=False)

si tf.py_func coincide con su requisito:

def init(): return numpy.random.rand(2,3) a = tf.pyfun(init, [], tf.float32)

Puede crear variables que tengan cualquier forma pasando su propia función init.

De otra manera:

var = tf.get_varible(''my-name'', initializer=init, shape=(1,1))

Puede pasar tf.constant o cualquier función init que devuelva numpy array. La forma proporcionada no será validada. La forma de salida es tu forma de datos real.