Итак, я пытался понять, как именно работает GradientTape тензорного потока.
Я могу определить пользовательскую операцию в простой python функции, используя тензоры, и достаточно, чтобы переменная была указана как tf.Variable .
Мне интересно, что именно делает тензорный поток в реализации диспетчера контекста.
Я просмотрел исходный код и дошел до этого: https://github.com/tensorflow/tensorflow/blob/2c2fdd3205a8d31e5f09a71ac7eb52b8c0294a60/tensorflow/python/eager/tape.py#L52
def push_tape(tape):
"""Pushes an existing tape onto the tape stack."""
pywrap_tensorflow.TFE_Py_TapeSetAdd(tape._tape) # pylint: disable=protected-access
который, кажется, использует некоторые обертки, и я не могу проследить дальше.
Мой вопрос: отслеживает ли тензорный поток переменные внутри на низком уровне привязки, или это делается в python? Как работает внутреннее отслеживание переменных, чтобы я мог использовать простой синтаксис c из приведенного ниже?
with tf.GradientTape as tape:
...