Ответы:
Любой тензор, возвращаемый 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'>
РЕДАКТИРОВАТЬ: не любой тензор, возвращенный Session.run
или eval()
является массивом NumPy. Например, Sparse Tensors возвращаются как SparseTensorValue:
>>> print(type(tf.Session().run(tf.SparseTensor([[0, 0]],[1],[1,2]))))
<class 'tensorflow.python.framework.sparse_tensor.SparseTensorValue'>
Чтобы преобразовать обратно из тензорного в массив numpy, вы можете просто запустить .eval()
преобразованный тензор.
ValueError: Cannot evaluate tensor using 'eval()': No default session is registered. Use 'with sess.as_default()' or pass an explicit session to 'eval(session=sess)'
Это можно использовать только во время сеанса с десятками потоков?
.eval()
вызов метода изнутри сессии: sess = tf.Session(); with sess.as_default(): print(my_tensor.eval())
Eager Execution включено по умолчанию, поэтому просто вызовите .numpy()
объект Tensor.
import tensorflow as tf
a = tf.constant([[1, 2], [3, 4]])
b = tf.add(a, 1)
a.numpy()
# array([[1, 2],
# [3, 4]], dtype=int32)
b.numpy()
# array([[2, 3],
# [4, 5]], dtype=int32)
tf.multiply(a, b).numpy()
# array([[ 2, 6],
# [12, 20]], dtype=int32)
Стоит отметить (из документов),
Массив Numpy может совместно использовать память с объектом Tensor. Любые изменения в одном могут быть отражены в другом.
Жирный акцент мой. Копия может или не может быть возвращена, и это деталь реализации.
Если Eager Execution отключено, вы можете построить график и затем запустить его через tf.compat.v1.Session
:
a = tf.constant([[1, 2], [3, 4]])
b = tf.add(a, 1)
out = tf.multiply(a, b)
out.eval(session=tf.compat.v1.Session())
# array([[ 2, 6],
# [12, 20]], dtype=int32)
См. Также Карта символов TF 2.0 для сопоставления старого API с новым.
eval()
.
Тебе надо:
Код:
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)
Это сработало для меня. Вы можете попробовать это в блокноте ipython. Только не забудьте добавить следующую строку:
%matplotlib inline
Я сталкивался и решал преобразование тензор-> ndarray в конкретном случае тензоров, представляющих (состязательные) изображения, полученные с помощью библиотеки / учебных пособий Cleverhans .
Я думаю, что мой вопрос / ответ ( здесь ) может быть полезным примером и для других случаев.
Я новичок в TensorFlow, мой эмпирический вывод:
Похоже, что для метода tenor.eval () может потребоваться также значение для входных заполнителей . Тензор может работать как функция, которая нуждается во входных значениях (предоставленных в feed_dict
) для возврата выходного значения, например
array_out = tensor.eval(session=sess, feed_dict={x: x_input})
Обратите внимание, что имя заполнителя в моем случае - x , но я полагаю, вы должны найти правильное имя для входного заполнителя .
x_input
скалярное значение или массив, содержащий входные данные.
В моем случае предоставление также sess
было обязательным.
Мой пример также охватывает часть визуализации изображений matplotlib , но это OT.
Простой пример может быть,
import tensorflow as tf
import numpy as np
a=tf.random_normal([2,3],0.0,1.0,dtype=tf.float32) #sampling from a std normal
print(type(a))
#<class 'tensorflow.python.framework.ops.Tensor'>
tf.InteractiveSession() # run an interactive session in Tf.
п теперь, если мы хотим, чтобы этот тензор был преобразован в массив NumPy
a_np=a.eval()
print(type(a_np))
#<class 'numpy.ndarray'>
Так просто, как, что!
//
не для комментирования в Python. Пожалуйста, отредактируйте свой ответ.
Я искал дни для этой команды.
Это работало для меня вне любой сессии или чего-то подобного.
# you get an array = your tensor.eval(session=tf.compat.v1.Session())
an_array = a_tensor.eval(session=tf.compat.v1.Session())
https://kite.com/python/answers/how-to-convert-a-tensorflow-tensor-to-a-numpy-array-in-python
Вы можете использовать функцию keras backend.
import tensorflow as tf
from tensorflow.python.keras import backend
sess = backend.get_session()
array = sess.run(< Tensor >)
print(type(array))
<class 'numpy.ndarray'>
Я надеюсь, что это помогает!