tf.GradientTape无法在“ with”块之外观看

时间:2019-09-26 06:11:29

标签: python tensorflow syntax gradient with-statement

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 个答案:

答案 0 :(得分:0)

我发现了。 tf.GradientTape类旨在在with块内工作,即。它具有输入退出方法。

要使其在'with'块外运行,必须显式调用方法__enter__,但是,请避免直接调用__enter__

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

参考: Explaining Python's '__enter__' and '__exit__'