Как я могу преобразовать тензор в массив numpy в TensorFlow?



Как преобразовать тензор в массив numpy при использовании Tensorflow с привязками Python?

681   5  

5 ответов:

любой тензор, возвращенные Session.run или eval - это массив NumPy.

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

или:

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

или, что то же самое:

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

EDIT: не любой тензор, возвращенные Session.run или eval() - это массив NumPy. Разреженные тензоры, например, возвращаются как SparseTensorValue:

>>> print(type(tf.Session().run(tf.SparseTensor([[0, 0]],[1],[1,2]))))
<class 'tensorflow.python.framework.sparse_tensor.SparseTensorValue'>

чтобы преобразовать обратно из тензора в массив numpy, вы можете просто запустить .eval() на преобразованный тензор.

вам нужно:

  1. кодировать тензор изображения в некотором формате (jpeg, png) в двоичный тензор
  2. оценить (запустить) двоичный тензор в сеансе
  3. поверните двоичный файл в поток
  4. feed to PIL image
  5. (необязательно) отображение изображения с помощью matplotlib

код:

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)

это работает для меня. Вы можете попробовать его в культуры Просто не забудьте добавить следующее линия:

%matplotlib inline

может быть, вы можете попробовать,этот метод:

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)

я столкнулся и решил тензор->ndarray преобразование в конкретном случае тензоров, представляющих (состязательные) изображения, полученные с помощью cleverhans библиотека/учебники.

Я думаю, что мой вопрос/ответ (здесь) может быть полезным примером и для других случаев.

Я новичок в TensorFlow, мой эмпирический вывод:

кажется, что это тензор.метод eval () может потребоваться, чтобы добиться успеха, также значение для ввода заполнители. Тензор может работать как функция, которая нуждается в своих входных значениях (предоставленных в feed_dict) для возврата выходного значения, например

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

обратите внимание, что имя -x в моем случае, но я полагаю, что вы должны найти правильное имя для ввода прототип. x_input - скалярное значение или массив, содержащий входные данные.

в моем случае также предоставления sess был обязательный.

мой пример также охватывает matplotlib часть визуализации изображения, но это OT.

Comments

    Ничего не найдено.