मैं TensorFlow में एक टेंसर को एक सुस्पष्ट सरणी में कैसे बदल सकता हूं?


181

पायथन बाइंडिंग के साथ टेंसोरफ्लो का उपयोग करते समय एक टेंसर को एक सुपीरियर सरणी में कैसे परिवर्तित किया जाए?

जवाबों:


134

किसी भी टेनर द्वारा लौटाया गया Session.runया evalएक न्यूपी सरणी है।

>>> 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 सरणी है। उदाहरण के लिए स्पार्स सेंसर SparseTensorValue के रूप में लौटाए जाते हैं:

>>> print(type(tf.Session().run(tf.SparseTensor([[0, 0]],[1],[1,2]))))
<class 'tensorflow.python.framework.sparse_tensor.SparseTensorValue'>

गुण: मॉड्यूल 'टेंसरफ्लो' में कोई विशेषता नहीं है 'सत्र'
जुर्गन के।

77

टेंसर से वापस सुन्न सरणी में परिवर्तित करने के लिए आप बस .eval()ट्रांसफॉर्म किए गए टेंसर पर चल सकते हैं ।


5
स्पष्ट करने के लिए: yourtensor.eval ()
mrk

12
मुझे 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)'यह केवल एक टेंसोफ्लो सत्र के दौरान उपयोग करने योग्य है?
एडुआर्डो पिग्नाटेली

@EduardoPignatelli यह मेरे लिए थीनो में कोई अतिरिक्त काम नहीं करता है। Tf के बारे में निश्चित नहीं है।
बॉलपॉइंटबैन

5
@EduardoPignatelli आपको .eval()सत्र के अंदर से मेथड कॉल चलाने की आवश्यकता है : sess = tf.Session(); with sess.as_default(): print(my_tensor.eval())
duhaime

इसके इस्तेमाल से मुझे एट्रीब्यूट के रूप में त्रुटि हो रही है: 'टेंसर' ऑब्जेक्ट में कोई विशेषता नहीं है 'eval'
आकाश अग्रवाल

73

TensorFlow 2.x

उत्सुक निष्पादन डिफ़ॉल्ट रूप से सक्षम है, इसलिए केवल .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 array Tensor ऑब्जेक्ट के साथ मेमोरी साझा कर सकती है। एक में कोई भी परिवर्तन दूसरे में परिलक्षित हो सकता है।

बोल्ड जोर मेरा। एक प्रति वापस हो सकती है या नहीं, और यह एक कार्यान्वयन विवरण है।


यदि ईगर निष्पादन अक्षम किया गया है, तो आप एक ग्राफ बना सकते हैं और फिर इसके माध्यम से चला सकते हैं 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)

पुराने API की मैपिंग के लिए नए के लिए TF 2.0 सिंबल मैप भी देखें ।


2
यह एक tf.function कैसे करें?
मैथटीक

@mentalmushroom एक दस्तावेज़ीकरण नहीं ढूँढ सका, लेकिन यह अनुकूलन मैनुअल में उल्लिखित है । अधिक विवरण स्रोत में पाया जा सकता है ।
निश-आन-दन

5
मुझे TF 2.0 में निम्न त्रुटि मिलती है: "'Tensor' ऑब्जेक्ट में कोई विशेषता 'numpy' नहीं है"
Will.Evo

@ Will.Evo संभव है कि आपने इसे चलाने से पहले उत्सुक निष्पादन अक्षम कर दिया हो। मेरे उत्तर की दूसरी छमाही की जाँच करें जहाँ आप उपयोग कर सकते हैं eval()
cs95

2
नहीं, मैंने उत्सुक निष्पादन को अक्षम नहीं किया। अभी भी गुण प्राप्त करें: 'Tensor' ऑब्जेक्ट में कोई विशेषता 'numpy' नहीं है
ज्योफ्री एंडरसन

6

आपको:

  1. बाइनरी टेंसर को कुछ प्रारूप (जेपीईजी, पीएनजी) में छवि टेंसर को एनकोड करें
  2. एक सत्र में बाइनरी टेंसर का मूल्यांकन (रन) करें
  3. स्ट्रीम करने के लिए बाइनरी चालू करें
  4. पीआईएल छवि को फ़ीड
  5. (वैकल्पिक) matplotlib के साथ डिस्प्लेटी छवि

कोड:

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

4

शायद आप इस विधि को आजमा सकते हैं:

import tensorflow as tf
W1 = tf.Variable(tf.random_uniform([1], -1.0, 1.0))
init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)
array = W1.eval(sess)
print (array)

2

मैंने होशियार पुस्तकालय / ट्यूटोरियल के साथ प्राप्त टेंसरों का प्रतिनिधित्व (प्रतिकूल) छवियों के विशिष्ट मामले में टेंसर-> ndarray रूपांतरण का सामना किया और हल किया है ।

मुझे लगता है कि मेरा प्रश्न / उत्तर ( यहां ) अन्य मामलों के लिए भी एक सहायक उदाहरण हो सकता है।

मैं TensorFlow के साथ नया हूँ, मेरा एक अनुभवजन्य निष्कर्ष है:

ऐसा लगता है कि इनपुट प्लेसहोल्डर्स के सफल होने के लिए टेंसर.वैल () विधि की आवश्यकता हो सकती है । Tensor एक फंक्शन की तरह काम कर सकता है feed_dict, जिसके आउटपुट वैल्यू को वापस करने के लिए इसके इनपुट वैल्यूज़ (इसमें दिए गए ) की ज़रूरत होती है

array_out = tensor.eval(session=sess, feed_dict={x: x_input})

कृपया ध्यान दें कि मेरे मामले में प्लेसहोल्डर का नाम x है, लेकिन मुझे लगता है कि आपको इनपुट प्लेसहोल्डर का सही नाम पता लगाना चाहिए । x_inputएक अदिश मान या सरणी है जिसमें इनपुट डेटा है।

मेरे मामले में भी प्रदान sessकरना अनिवार्य था।

मेरा उदाहरण भी matplotlib छवि विज़ुअलाइज़ेशन भाग को कवर करता है , लेकिन यह OT है।


1

एक सरल उदाहरण हो सकता है,

    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_np=a.eval()
    print(type(a_np))
    #<class 'numpy.ndarray'>

इतना सरल है!


//अजगर में टिप्पणी करने के लिए नहीं है। कृपया अपना उत्तर संपादित करें।
व्लाद

0

मैं इस कमांड के लिए दिन खोज रहा था।

यह मेरे लिए किसी भी सत्र के बाहर या इस तरह से काम करता है।

# 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


0

आप केरस बैकेंड फ़ंक्शन का उपयोग कर सकते हैं।

import tensorflow as tf
from tensorflow.python.keras import backend 

sess = backend.get_session()
array = sess.run(< Tensor >)

print(type(array))

<class 'numpy.ndarray'>

मुझे उम्मीद है यह मदद करेगा!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.