¿Cómo puedo convertir un tensor en una matriz numpy en TensorFlow?


¿Cómo convertir un tensor en una matriz numpy cuando se utiliza Tensorflow con enlaces Python?

Author: mathetes, 2015-12-04

5 answers

Cualquier tensor devuelto por Session.run o eval es una matriz NumPy.

>>> print(type(tf.Session().run(tf.constant([1,2,3]))))
<class 'numpy.ndarray'>

O:

>>> sess = tf.InteractiveSession()
>>> print(type(tf.constant([1,2,3]).eval()))
<class 'numpy.ndarray'>

O, equivalentemente:

>>> sess = tf.Session()
>>> with sess.as_default():
>>>    print(type(tf.constant([1,2,3]).eval()))
<class 'numpy.ndarray'>

EDITAR: No cualquier tensor devuelto por Session.run o eval() es un array NumPy. Por ejemplo, los tensores dispersos se devuelven como SparseTensorValue:

>>> print(type(tf.Session().run(tf.SparseTensor([[0, 0]],[1],[1,2]))))
<class 'tensorflow.python.framework.sparse_tensor.SparseTensorValue'>
 70
Author: Lenar Hoyt,
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-03-23 01:40:11

Para convertir de nuevo de tensor a matriz numpy, simplemente puede ejecutar .eval() en el tensor transformado.

 59
Author: Rafał Józefowicz,
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
2015-12-04 20:59:39

Necesitas:

  1. codificar el tensor de imagen en algún formato (jpeg, png) a tensor binario
  2. evaluar (ejecutar) el tensor binario en una sesión
  3. gire el binario a stream
  4. alimentar a la imagen PIL
  5. (opcional) mostrar la imagen con matplotlib

Código:

import tensorflow as tf
import matplotlib.pyplot as plt
import PIL

...

image_tensor = <your decoded image tensor>
jpeg_bin_tensor = tf.image.encode_jpeg(image_tensor)

with tf.Session() as sess:
    # display encoded back to image data
    jpeg_bin = sess.run(jpeg_bin_tensor)
    jpeg_str = StringIO.StringIO(jpeg_bin)
    jpeg_image = PIL.Image.open(jpeg_str)
    plt.imshow(jpeg_image)

Esto funcionó para mí. Puedes probarlo en un cuaderno ipython. No olvides añadir la siguiente línea:

%matplotlib inline
 4
Author: Gooshan,
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-04-17 14:59:12

Tal vez usted puede tratar,este método:

import tensorflow as tf
W1 = tf.Variable(tf.random_uniform([1], -1.0, 1.0))
init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)
array = W1.eval(sess)
print (array)
 1
Author: lovychen,
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-03-21 11:44:59

He enfrentado y resuelto la conversión de tensor->ndarray en el caso específico de tensores que representan imágenes (adversariales), obtenidos con cleverhans biblioteca/tutoriales.

Creo que mi pregunta/respuesta ( aquí) puede ser un ejemplo útil también para otros casos.

Soy nuevo con TensorFlow, la mía es una conclusión empírica:

Parece que el tensor.el método eval () puede necesitar, para tener éxito, también el valor para input placeholders. Tensor puede funcionar como una función que necesita sus valores de entrada (proporcionados en feed_dict) para devolver un valor de salida, por ejemplo,

array_out = tensor.eval(session=sess, feed_dict={x: x_input})

Tenga en cuenta que el nombre del marcador de posición es x en mi caso, pero supongo que debería encontrar el nombre correcto para el marcador de posición de entrada . x_input es un valor escalar o matriz que contiene datos de entrada.

En mi caso también proporcionar sess era obligatorio.

Mi ejemplo también cubre la parte de visualización de imágenes matplotlib, pero esto es OT.

 0
Author: Fabiano Tarlao,
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-09-22 07:41:00