tf.cond
के लिए (स्रोत कोड) दस्तावेज इस बात पर अस्पष्ट नहीं है कि भविष्यवाणी के मूल्यांकन के दौरान किए जाने वाले कार्यों का दुष्प्रभाव हो सकता है या नहीं। मैंने कुछ परीक्षण किए हैं लेकिन मुझे विवादित परिणाम मिल रहे हैं। उदाहरण के लिए नीचे दिया गया कोड काम नहीं करता है:दुष्प्रभावों के साथ टीएफ ओप का समर्थन कर सकते हैं?
import tensorflow as tf
from tensorflow.python.ops import control_flow_ops
pred = tf.placeholder(tf.bool, [])
count = tf.Variable(0)
adder = count.assign_add(1)
subtractor = count.assign_sub(2)
my_op = control_flow_ops.cond(pred, lambda: adder, lambda: subtractor)
sess = tf.InteractiveSession()
tf.initialize_all_variables().run()
my_op.eval(feed_dict={pred: True})
count.eval() # returns -1
my_op.eval(feed_dict={pred: False})
count.eval() # returns -2
आईई। इससे कोई फर्क नहीं पड़ता कि भविष्यवाणी का मूल्यांकन किस मूल्य से होता है, दोनों कार्य चल रहे हैं, और इसलिए नेट परिणाम 1 का घटाव है। दूसरी तरफ, यह कोड स्निपेट काम करता है, जहां केवल अंतर यह है कि मैं ग्राफ में नए ऑप्स जोड़ता हूं हर बार my_op
कहा जाता है:
pred = tf.placeholder(tf.bool, [])
count = tf.Variable(0)
my_op = control_flow_ops.cond(pred, lambda:count.assign_add(1), lambda:count.assign_sub(2))
sess = tf.InteractiveSession()
tf.initialize_all_variables().run()
my_op.eval(feed_dict={pred: False})
count.eval() # returns -2
my_op.eval(feed_dict={pred: True})
count.eval() # returns -1
सुनिश्चित नहीं हैं कि क्यों जबकि अन्य मामला नहीं करता है हर बार काम करता है नई ऑप्स बनाने, लेकिन मैं स्पष्ट रूप से नहीं बल्कि नहीं नोड्स जोड़ने होगी के रूप में ग्राफ अंत में बहुत बड़ा हो जाएगा।