Comment puis-je convertir un tenseur en un tableau vide dans TensorFlow?
comment convertir un tenseur en un tableau numpy en utilisant Tensorflow avec des fixations Python?
5 réponses
tout tenseur retourné par Session.run
ou eval
est un réseau minuscule.
>>> print(type(tf.Session().run(tf.constant([1,2,3]))))
<class 'numpy.ndarray'>
ou:
>>> sess = tf.InteractiveSession()
>>> print(type(tf.constant([1,2,3]).eval()))
<class 'numpy.ndarray'>
ou, de manière équivalente:
>>> sess = tf.Session()
>>> with sess.as_default():
>>> print(type(tf.constant([1,2,3]).eval()))
<class 'numpy.ndarray'>
EDIT: Pas tout tenseur retourné par Session.run
ou eval()
est un tableau NumPy. Les tenseurs épars, par exemple, sont retournés en tant que SparseTensorValue:
>>> print(type(tf.Session().run(tf.SparseTensor([[0, 0]],[1],[1,2]))))
<class 'tensorflow.python.framework.sparse_tensor.SparseTensorValue'>
pour convertir de nouveau du tenseur au tableau de numpy vous pouvez simplement exécuter .eval()
sur le tenseur transformé.
Vous avez besoin de:
- encoder le tenseur d'image dans un certain format (jpeg, png) en tenseur binaire
- évaluer (exécuter) le tenseur binaire dans une session
- turn the binaire to stream
- l'alimentation à l'image de PIL
- (optionnel) displaythe image with matplotlib
Code:
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)
ça a marché pour moi. Vous pouvez essayez dans un carnet ipython. N'oubliez pas d'ajouter la ligne suivante:
%matplotlib inline
peut-être Pouvez-vous essayer cette méthode:
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)
j'ai affronté et résolu la conversion tenseur->ndarray dans le cas spécifique des tenseurs représentant des images (accusariales), obtenu avec cleverhans bibliothèque/tutoriels.
je pense que ma question/réponse ( ici ) peut être un exemple utile aussi pour d'autres cas.
je suis nouveau avec TensorFlow, la mienne est une conclusion empirique:
il semble qui tenseur.la méthode eval () peut avoir besoin, pour réussir, aussi la valeur pour l'entrée placeholders .
Tensor peut fonctionner comme une fonction qui a besoin de ses valeurs d'entrée (fournies dans feed_dict
) pour retourner une valeur de sortie, par exemple
array_out = tensor.eval(session=sess, feed_dict={x: x_input})
veuillez noter que le nom du paramètre est x dans mon cas, mais je suppose que vous devriez trouver le bon nom pour l'entrée paramètre .
x_input
est une valeur scalaire ou un tableau contenant les données d'entrée.
était également obligatoire.
mon exemple couvre aussi la matplotlib partie de visualisation d'image, mais ceci est OT.