Câu trả lời:
Bất kỳ tenor nào được trả về bởi Session.run
hoặc eval
là một mảng NumPy.
>>> print(type(tf.Session().run(tf.constant([1,2,3]))))
<class 'numpy.ndarray'>
Hoặc là:
>>> sess = tf.InteractiveSession()
>>> print(type(tf.constant([1,2,3]).eval()))
<class 'numpy.ndarray'>
Hoặc, tương đương:
>>> sess = tf.Session()
>>> with sess.as_default():
>>> print(type(tf.constant([1,2,3]).eval()))
<class 'numpy.ndarray'>
EDIT: Không phải bất kỳ tenor nào được trả về bởi Session.run
hoặc eval()
là một mảng NumPy. Ví dụ, các giá trị thưa thớt được trả về là SpzzyTensorValue:
>>> print(type(tf.Session().run(tf.SparseTensor([[0, 0]],[1],[1,2]))))
<class 'tensorflow.python.framework.sparse_tensor.SparseTensorValue'>
Để chuyển đổi trở lại từ tenor sang mảng numpy, bạn chỉ cần chạy .eval()
trên tenxơ đã chuyển đổi.
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)'
Điều này chỉ có thể sử dụng được trong một phiên kéo dài?
.eval()
cuộc gọi phương thức từ bên trong một phiên: sess = tf.Session(); with sess.as_default(): print(my_tensor.eval())
Thực thi Eager được bật theo mặc định, vì vậy chỉ cần gọi .numpy()
đối tượng 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)
Điều đáng chú ý (từ các tài liệu),
Mảng Numpy có thể chia sẻ bộ nhớ với đối tượng Tensor. Mọi thay đổi đối với cái này có thể được phản ánh trong cái khác.
Nhấn mạnh đậm của tôi. Một bản sao có thể hoặc không thể được trả lại, và đây là một chi tiết thực hiện.
Nếu Thực thi Eager bị vô hiệu hóa, bạn có thể xây dựng một biểu đồ và sau đó chạy nó qua 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)
Xem thêm Bản đồ biểu tượng TF 2.0 để ánh xạ API cũ sang API mới.
eval()
.
Bạn cần phải:
Mã số:
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)
Điều này làm việc cho tôi. Bạn có thể thử nó trong một máy tính xách tay ipython. Chỉ cần đừng quên thêm dòng sau:
%matplotlib inline
Tôi đã phải đối mặt và giải quyết chuyển đổi tenor-> ndarray trong trường hợp cụ thể của các tenx đại diện cho các hình ảnh (nghịch cảnh), thu được bằng các thông minh thư viện / hướng dẫn.
Tôi nghĩ rằng câu hỏi / câu trả lời của tôi ( ở đây ) có thể là một ví dụ hữu ích cho các trường hợp khác.
Tôi mới sử dụng TensorFlow, của tôi là một kết luận theo kinh nghiệm:
Có vẻ như phương thức tenor.eval () có thể cần, để thành công, cũng là giá trị cho các trình giữ chỗ đầu vào . Tenor có thể hoạt động giống như một hàm cần các giá trị đầu vào của nó (được cung cấp vào feed_dict
) để trả về giá trị đầu ra, ví dụ
array_out = tensor.eval(session=sess, feed_dict={x: x_input})
Xin lưu ý rằng tên giữ chỗ là x trong trường hợp của tôi, nhưng tôi cho rằng bạn nên tìm ra tên đúng cho trình giữ chỗ đầu vào .
x_input
là một giá trị vô hướng hoặc mảng chứa dữ liệu đầu vào.
Trong trường hợp của tôi cũng cung cấp sess
là bắt buộc.
Ví dụ của tôi cũng bao gồm phần trực quan hóa hình ảnh matplotlib , nhưng đây là OT.
Một ví dụ đơn giản có thể là,
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 bây giờ nếu chúng ta muốn tenor này được chuyển đổi thành một mảng numpy
a_np=a.eval()
print(type(a_np))
#<class 'numpy.ndarray'>
Đơn giản vậy thôi!
//
không phải để bình luận trong python. Vui lòng chỉnh sửa câu trả lời của bạn.
Tôi đã tìm kiếm nhiều ngày cho lệnh này.
Điều này làm việc cho tôi bên ngoài bất kỳ phiên hoặc một cái gì đó như thế này.
# 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
Bạn có thể sử dụng chức năng phụ trợ máy ảnh.
import tensorflow as tf
from tensorflow.python.keras import backend
sess = backend.get_session()
array = sess.run(< Tensor >)
print(type(array))
<class 'numpy.ndarray'>
Tôi hy vọng nó sẽ giúp!