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'
答案 0 :(得分:0)
我发现了。 tf.GradientTape
类旨在在with
块内工作,即。它具有输入和退出方法。
要使其在'with'块外运行,必须显式调用方法__enter__
,但是,请避免直接调用__enter__
:
x = tf.convert_to_tensor([1,2,3]);
t = tf.GradientTape();
t.__enter__();
t.watch(x);