Як перетворити тензор у масив numpy при використанні Tensorflow з прив’язками Python?
Як перетворити тензор у масив numpy при використанні Tensorflow з прив’язками Python?
Відповіді:
Будь-який тензор, що повертається 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()
перетворений тензор.
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)'
чи це корисно лише під час сеансу tensoflow?
.eval()
виклик методу з сеансу: sess = tf.Session(); with sess.as_default(): print(my_tensor.eval())
Швидке виконання увімкнено за замовчуванням, тому просто зателефонуйте .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 у конкретному випадку тензорів, що представляють (змагальні) зображення, отримані за допомогою бібліотеки / навчальних посібників розумних людей .
Я думаю, що моє запитання / відповідь ( тут ) може бути корисним прикладом і для інших випадків.
Я новачок у TensorFlow, мій емпіричний висновок:
Здається, що для досягнення успіху методу tensor.eval () може знадобитися також значення для заповнювачів . Тензор може працювати як функція, яка потребує вхідних значень (надається в feed_dict
), щоб повернути вихідне значення, наприклад
array_out = tensor.eval(session=sess, feed_dict={x: x_input})
Зверніть увагу, що в моєму випадку ім'я заповнення місця є x , але я вважаю, що ви повинні знайти правильне ім'я для заповнення вводу .
x_input
- скалярне значення або масив, що містить вхідні дані.
У моєму випадку надання sess
було обов'язковим.
Мій приклад також охоплює частину візуалізації зображення matplotlib , але це ОТ.
Простим прикладом може бути,
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.
n тепер, якщо ми хочемо, щоб цей тензор a був перетворений в масивний масив
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
Ви можете скористатися функцією резервного керасу.
import tensorflow as tf
from tensorflow.python.keras import backend
sess = backend.get_session()
array = sess.run(< Tensor >)
print(type(array))
<class 'numpy.ndarray'>
Я сподіваюся, що це допомагає!