TensorFlow में ग्राफ़ के भाग का मूल्यांकन करने के दो तरीके हैं: Session.run
चर की सूची और Tensor.eval
। क्या इन दोनों में अंतर है?
TensorFlow में ग्राफ़ के भाग का मूल्यांकन करने के दो तरीके हैं: Session.run
चर की सूची और Tensor.eval
। क्या इन दोनों में अंतर है?
जवाबों:
यदि आपके पास एक Tensor
टी है, तो कॉलिंग कॉलिंग t.eval()
के बराबर है tf.get_default_session().run(t)
।
आप निम्नानुसार एक सत्र को डिफ़ॉल्ट बना सकते हैं:
t = tf.constant(42.0)
sess = tf.Session()
with sess.as_default(): # or `with sess:` to close on exit
assert sess is tf.get_default_session()
assert t.eval() == sess.run(t)
सबसे महत्वपूर्ण अंतर यह है कि आप sess.run()
एक ही चरण में कई टेंसरों के मूल्यों को लाने के लिए उपयोग कर सकते हैं :
t = tf.constant(42.0)
u = tf.constant(37.0)
tu = tf.mul(t, u)
ut = tf.mul(u, t)
with sess.as_default():
tu.eval() # runs one step
ut.eval() # runs one step
sess.run([tu, ut]) # evaluates both tensors in a single step
ध्यान दें कि प्रत्येक कॉल स्क्रैच से पूरे ग्राफ़ को निष्पादित eval
और run
निष्पादित करेगा। एक संगणना के परिणाम को कैश करने के लिए, इसे असाइन करें tf.Variable
।
a = tf.constant(2.0) b = tf.constant(3.0) ab = tf.matmul(a, b)
और मुझे टेंसरफ़्लो से शिकायतें मिलीं कि आकृतियाँ मेल नहीं खातीं, मैं अधिक सटीक अनुमान लगाता हूं, कि रैंक कम से कम 2 होनी चाहिए
tf.multiply(t, u)
और यह ठीक काम किया।
टेंसर प्रवाह पर अक्सर पूछे जाने वाले प्रश्न सत्र में ठीक उसी प्रश्न का उत्तर होता है । मैं अभी आगे जाऊंगा और इसे यहां छोड़ दूंगा:
यदि t
कोई Tensor
वस्तु है, t.eval()
तो शॉर्टहैंड है sess.run(t)
(जहां sess
वर्तमान डिफ़ॉल्ट सत्र है। कोड के निम्नलिखित दो स्निपेट समतुल्य हैं:
sess = tf.Session()
c = tf.constant(5.0)
print sess.run(c)
c = tf.constant(5.0)
with tf.Session():
print c.eval()
दूसरे उदाहरण में, सत्र एक संदर्भ प्रबंधक के रूप में कार्य करता है, जिसमें इसे with
ब्लॉक के जीवनकाल के लिए डिफ़ॉल्ट सत्र के रूप में स्थापित करने का प्रभाव होता है । संदर्भ प्रबंधक दृष्टिकोण सरल उपयोग के मामलों (जैसे यूनिट परीक्षण) के लिए अधिक संक्षिप्त कोड को जन्म दे सकता है; यदि आपका कोड कई ग्राफ़ और सत्रों से संबंधित है, तो यह स्पष्ट कॉल के लिए अधिक सीधा हो सकता है Session.run()
।
मेरा सुझाव है कि आप कम से कम पूरे एफएक्यू में स्किम करें, क्योंकि यह बहुत सारी चीजों को स्पष्ट कर सकता है।
eval()
सूची ऑब्जेक्ट को संभाल नहीं सकता
tf.reset_default_graph()
a = tf.Variable(0.2, name="a")
b = tf.Variable(0.3, name="b")
z = tf.constant(0.0, name="z0")
for i in range(100):
z = a * tf.cos(z + i) + z * tf.sin(b - i)
grad = tf.gradients(z, [a, b])
init = tf.global_variables_initializer()
with tf.Session() as sess:
init.run()
print("z:", z.eval())
print("grad", grad.eval())
लेकिन Session.run()
कर सकते हैं
print("grad", sess.run(grad))
अगर मैं ग़लत हूं तो मेरी गलती सुझाएं
सबसे महत्वपूर्ण बात याद रखें:
TenorFlow से एक स्थिर, चर (कोई भी परिणाम) प्राप्त करने का एकमात्र तरीका सत्र है।
यह जानना बाकी सब कुछ आसान है :
दोनों सत्र से परिणाम प्राप्त करते हैं
tf.Session.run()
और कॉलिंग के लिए एक शॉर्टकट हैtf.Tensor.eval()
tf.Tensor.eval()
tf.get_default_session().run(t)
मैं भी विधि की रूपरेखा तैयार की tf.Operation.run()
में के रूप में यहाँ :
ग्राफ को एक सत्र में लॉन्च किए जाने के बाद, एक ऑपरेशन को इसे पारित करके निष्पादित किया जा सकता है
tf.Session.run()
।op.run()
कॉल करने के लिए एक शॉर्टकट हैtf.get_default_session().run(op)
।
टेंसरफ़्लो में आप ग्राफ़ बनाते हैं और उस ग्राफ़ में मान पास करते हैं। ग्राफ़ सभी हार्डवर्क करता है और ग्राफ़ में आपके द्वारा किए गए कॉन्फ़िगरेशन के आधार पर आउटपुट उत्पन्न करता है। अब जब आप ग्राफ़ में मान पास करते हैं तो सबसे पहले आपको टेंसरफ़्लो सत्र बनाने की आवश्यकता होती है।
tf.Session()
एक बार सत्र शुरू होने के बाद आप उस सत्र का उपयोग करने वाले हैं क्योंकि सभी चर और सेटिंग्स अब सत्र का हिस्सा हैं। इसलिए, बाहरी मानों को ग्राफ़ में पास करने के दो तरीके हैं ताकि ग्राफ़ उन्हें स्वीकार कर ले। जब आप सत्र निष्पादित किए जा रहे हैं तो एक .run () को कॉल करना है।
दूसरा तरीका जो मूल रूप से इसका एक शॉर्टकट है, वह है .eval () का उपयोग करना। मैंने शार्टकट इसलिए कहा क्योंकि .eval () का पूर्ण रूप है
tf.get_default_session().run(values)
आप खुद देख सकते हैं। values.eval()
दौड़ने की जगह पर tf.get_default_session().run(values)
। आपको वही व्यवहार प्राप्त करना चाहिए।
eval क्या कर रहा है डिफ़ॉल्ट सत्र का उपयोग कर रहा है और फिर रन () निष्पादित कर रहा है।
Tensorflow 2.x संगत उत्तर : Tensorflow 2.x (>= 2.0)
समुदाय के लाभ के लिए श्री का कोड परिवर्तित करना ।
!pip install tensorflow==2.1
import tensorflow as tf
tf.compat.v1.disable_eager_execution()
t = tf.constant(42.0)
sess = tf.compat.v1.Session()
with sess.as_default(): # or `with sess:` to close on exit
assert sess is tf.compat.v1.get_default_session()
assert t.eval() == sess.run(t)
#The most important difference is that you can use sess.run() to fetch the values of many tensors in the same step:
t = tf.constant(42.0)
u = tf.constant(37.0)
tu = tf.multiply(t, u)
ut = tf.multiply(u, t)
with sess.as_default():
tu.eval() # runs one step
ut.eval() # runs one step
sess.run([tu, ut]) # evaluates both tensors in a single step
tf.Tensor.eval()
औरtf.Session.run()
, लेकिन जुड़े हुए हैंtf.Operation.run()
औरtf.Tensor.eval()
जैसा कि यहां