Yanıtlar:
Session.run
Veya tarafından döndürülen herhangi bir tensör eval
bir NumPy dizisidir.
>>> print(type(tf.Session().run(tf.constant([1,2,3]))))
<class 'numpy.ndarray'>
Veya:
>>> sess = tf.InteractiveSession()
>>> print(type(tf.constant([1,2,3]).eval()))
<class 'numpy.ndarray'>
Veya eşdeğer olarak:
>>> sess = tf.Session()
>>> with sess.as_default():
>>> print(type(tf.constant([1,2,3]).eval()))
<class 'numpy.ndarray'>
DÜZENLEME: Değil herhangi tensör tarafından döndürülen Session.run
veya eval()
bir NumPy dizidir. Örneğin Seyrek Tensörler SparseTensorDeğer olarak döndürülür:
>>> print(type(tf.Session().run(tf.SparseTensor([[0, 0]],[1],[1,2]))))
<class 'tensorflow.python.framework.sparse_tensor.SparseTensorValue'>
Tensörden numpy dizisine geri dönüştürmek için dönüştürülmüş tensör .eval()
üzerinde çalışabilirsiniz .
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)'
bu sadece bir tensoflow oturumu sırasında kullanılabilir mi?
.eval()
bir oturum içinden yöntem çağrısını çalıştırmanız gerekiyor :sess = tf.Session(); with sess.as_default(): print(my_tensor.eval())
Eager Execution varsayılan olarak etkindir, bu nedenle .numpy()
Tensor nesnesini çağırmanız yeterlidir.
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)
Dikkat çekmeye değer (dokümanlardan),
Numpy dizisi belleği Tensor nesnesiyle paylaşabilir. Birindeki değişiklikler diğerine yansıtılabilir.
Cesur vurgu benim. Bir kopya iade edilebilir veya edilmeyebilir ve bu bir uygulama detayıdır.
Eager Yürütme devre dışı bırakılmışsa, bir grafik oluşturabilir ve ardından şu şekilde çalıştırabilirsiniz 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)
Eski API'nin yenisiyle eşlenmesi için TF 2.0 Semboller Haritasına da bakın .
eval()
.
Gerek:
Kod:
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)
Bu benim için çalıştı. Bir ipython not defterinde deneyebilirsiniz. Aşağıdaki satırı eklemeyi unutmayın:
%matplotlib inline
Cleverhans kütüphanesi / öğreticileri ile elde edilen (çekişmeli) görüntüleri temsil eden özel tensörler durumunda tensör-> ndarray dönüşümüyle karşılaştım ve çözdüm .
Soru / cevabımın ( burada ) diğer durumlar için de yararlı bir örnek olabileceğini düşünüyorum.
TensorFlow'da yeniyim, benimki ampirik bir sonuç:
Başarılı olmak için tensor.eval () yönteminin girdi yer tutucuları için de değere ihtiyacı olabilir . Tensör, feed_dict
bir çıkış değeri döndürmek için giriş değerlerine (içine verilen ) ihtiyaç duyan bir işlev gibi çalışabilir , örn.
array_out = tensor.eval(session=sess, feed_dict={x: x_input})
Benim durumumda yer tutucu adının x olduğunu lütfen unutmayın , ancak giriş yer tutucusu için doğru adı bulmanız gerektiğini düşünüyorum .
x_input
bir skaler değer veya girdi verilerini içeren bir dizidir.
Benim durumumda da sağlanması sess
zorunluydu.
Örneğim matplotlib görüntü görselleştirme bölümünü de kapsıyor , ancak bu OT.
Basit bir örnek,
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 şimdi bu tensörün a'nın numpy dizisine dönüştürülmesini istiyorsak
a_np=a.eval()
print(type(a_np))
#<class 'numpy.ndarray'>
Kadar basit!
//
python'da yorum yapmak için değildir. Lütfen cevabınızı düzenleyin.
Bu komuta günlerce bakıyordum.
Bu benim için herhangi bir oturumun veya bunun gibi bir şeyin dışında çalıştı.
# 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 arka uç işlevini kullanabilirsiniz.
import tensorflow as tf
from tensorflow.python.keras import backend
sess = backend.get_session()
array = sess.run(< Tensor >)
print(type(array))
<class 'numpy.ndarray'>
Umut ediyorum bu yardım eder!