Tensorflow.org पर TensorFlow ट्यूटोरियल tf.GradientTape को इस प्रकार उपयोग करने का तरीका दिखाते हैं:

x = tf.convert_to_tensor([1,2,3]);
with tf.GradientTape() as t:
  t.watch(x); 

मुझे आश्चर्य है कि मैं t.watch(x) को with ब्लॉक से बाहर इस तरह क्यों नहीं ले जा सकता:

x = tf.convert_to_tensor([1,2,3]);
t = tf.GradientTape();
t.watch(x); #ERROR

त्रुटि है:

tape.py (59):
pywrap_tensorflow.TFE_Py_TapeWatch(tape._tape, tensor)

AttributeError: 'NoneType' object has no attribute '_tape'
1
datdinhquoc 26 सितंबर 2019, 09:11

1 उत्तर

सबसे बढ़िया उत्तर

मुझे पता चला कि कैसे। tf.GradientTape वर्ग को with ब्लॉक के भीतर काम करने के लिए डिज़ाइन किया गया है, अर्थात। इसमें दर्ज करें और बाहर निकलें विधियां हैं।

तो इसे 'विथ' ब्लॉक के बाहर काम करने के लिए, विधि __enter__ को स्पष्ट रूप से कॉल किया जाना चाहिए, हालांकि, __enter__ को सीधे कॉल करने से बचें:

x = tf.convert_to_tensor([1,2,3]);
t = tf.GradientTape();
t.__enter__();
t.watch(x); 

संदर्भ: पायथन के '__enter__' और '__exit__' की व्याख्या करना

1
datdinhquoc 26 सितंबर 2019, 09:25