我开始用tf.GradientTape(persistent=True)
记录梯度,以便能够多次调用gradient_tape.gradient()
。由于这意味着在调用gradient()
方法后不会释放渐变,所以我是否必须在train_step
的末尾调用类似__exit__
的东西?
根据https://www.tensorflow.org/api_docs/python/tf/GradientTape:
默认情况下,GradientTape所拥有的资源会尽快释放作为GradientTape.gradient((方法。计算倍数梯度在相同的计算上,创建一个持久的梯度磁带这允许多次调用gradient((方法作为资源在磁带对象被垃圾回收时释放。
train步骤之后,只要没有其他对象引用该磁带,垃圾收集器就会收集它。