Jawaban:
Tensor apa pun yang dikembalikan oleh Session.run
atau eval
merupakan array NumPy.
>>> print(type(tf.Session().run(tf.constant([1,2,3]))))
<class 'numpy.ndarray'>
Atau:
>>> sess = tf.InteractiveSession()
>>> print(type(tf.constant([1,2,3]).eval()))
<class 'numpy.ndarray'>
Atau, yang setara:
>>> sess = tf.Session()
>>> with sess.as_default():
>>> print(type(tf.constant([1,2,3]).eval()))
<class 'numpy.ndarray'>
EDIT: Tidak ada tensor yang dikembalikan oleh Session.run
atau eval()
merupakan array NumPy. Tensor Jarang misalnya dikembalikan sebagai SparseTensorValue:
>>> print(type(tf.Session().run(tf.SparseTensor([[0, 0]],[1],[1,2]))))
<class 'tensorflow.python.framework.sparse_tensor.SparseTensorValue'>
Untuk mengkonversi kembali dari tensor ke array numpy, Anda cukup menjalankan .eval()
pada tensor yang diubah.
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)'
Apakah ini hanya dapat digunakan selama sesi aliran uang?
.eval()
pemanggilan metode dari dalam sesi: sess = tf.Session(); with sess.as_default(): print(my_tensor.eval())
Eksekusi Eager diaktifkan secara default, jadi panggil saja .numpy()
objek 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)
Perlu dicatat (dari dokumen),
Array numpy dapat berbagi memori dengan objek Tensor. Setiap perubahan satu dapat tercermin dalam yang lain.
Penekanan berani saya. Salinan dapat dikembalikan atau tidak, dan ini merupakan detail implementasi.
Jika Eksekusi Eager dinonaktifkan, Anda dapat membuat grafik dan kemudian menjalankannya melalui 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)
Lihat juga Peta Simbol TF 2.0 untuk pemetaan API lama ke yang baru.
eval()
.
Kamu butuh:
Kode:
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)
Ini berhasil untuk saya. Anda bisa mencobanya di notebook ipython. Jangan lupa untuk menambahkan baris berikut:
%matplotlib inline
Saya telah menghadapi dan menyelesaikan konversi tensor-> ndarray dalam kasus khusus tensor yang mewakili gambar (permusuhan), diperoleh dengan pustaka pintar / tutorial.
Saya pikir pertanyaan / jawaban saya (di sini ) dapat menjadi contoh yang bermanfaat juga untuk kasus lain.
Saya baru dengan TensorFlow, milik saya adalah kesimpulan empiris:
Tampaknya metode tensor.eval () mungkin perlu, agar berhasil, juga nilai bagi tempat penampung input . Tensor dapat bekerja seperti fungsi yang membutuhkan nilai inputnya (disediakan ke feed_dict
) untuk mengembalikan nilai output, misalnya
array_out = tensor.eval(session=sess, feed_dict={x: x_input})
Harap perhatikan bahwa nama placeholder adalah x dalam kasus saya, tetapi saya kira Anda harus mencari tahu nama yang tepat untuk placeholder input .
x_input
adalah nilai skalar atau array yang berisi data input.
Dalam kasus saya juga menyediakan sess
adalah wajib.
Contoh saya juga mencakup bagian visualisasi gambar matplotlib , tapi ini OT.
Contoh sederhana bisa jadi,
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 sekarang jika kita ingin tensor ini dikonversi menjadi array numpy
a_np=a.eval()
print(type(a_np))
#<class 'numpy.ndarray'>
Sesimpel itu!
//
bukan untuk berkomentar dengan python. Harap edit jawaban Anda.
Saya mencari-cari perintah ini selama berhari-hari.
Ini bekerja untuk saya di luar sesi atau sesuatu seperti ini.
# 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
Anda dapat menggunakan fungsi backend keras.
import tensorflow as tf
from tensorflow.python.keras import backend
sess = backend.get_session()
array = sess.run(< Tensor >)
print(type(array))
<class 'numpy.ndarray'>
Saya harap ini membantu!