tf.GradientTape не может смотреть снаружи с блоком - PullRequest
0 голосов
/ 26 сентября 2019

В руководствах TensorFlow на tenorflow.org показан способ использования 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 голосов
/ 26 сентября 2019

Я узнал как.Класс tf.GradientTape предназначен для работы в блоке with, т.е.у него есть методы ввода и выхода .

Таким образом, чтобы он работал вне блока with, необходимо явно вызвать метод __enter__, однако избегайте прямого вызова __enter__:

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

Ссылка: ОбъяснениеPython '__enter__' и '__exit __'

...