.. py:class:: paddle.autograd.PyLayerContext
PyLayerContext 对象能够辅助 :ref:`cn_api_paddle_autograd_PyLayer` 实现某些功能。
COPY-FROM: paddle.autograd.PyLayerContext
获取被 save_for_backward 暂存的 Tensor 。此属性是方法 saved_tensor() 的别名。
返回
如果调用 save_for_backward 暂存了一些 Tensor,则返回这些 Tensor,否则,返回 None。
save_for_backward(*tensors)
用于暂存 backward 需要的 Tensor,在 backward 中调用 saved_tensor 获取这些 Tensor 。
Note
这个 API 只能被调用一次,且只能在 forward 中调用。
参数
- tensors (list of Tensor) - 需要被暂存的
Tensor
返回
None
代码示例
COPY-FROM: paddle.autograd.PyLayerContext.save_for_backward
获取被 save_for_backward 暂存的 Tensor 。
返回
如果调用 save_for_backward 暂存了一些 Tensor,则返回这些 Tensor,否则,返回 None。
代码示例
COPY-FROM: paddle.autograd.PyLayerContext.saved_tensor
mark_not_inplace(self, *tensors)
标记一些输入是不需要 inplace 的。
如果 forward 的输入输出是同一个 Tensor ,并且这个 Tensor 被标记为 not_inplace 的。Paddle 会替用户创建一个新的 Tensor 作为输出。
这样可以防止输入的 Tensor 的 auto grad 信息被错误的篡改。
Note
这个函数最多只能在 forward 调用一次,并且所有的参数必须是 forward 输入的 Tensor 。
参数
- tensors (list of Tensor) - 需要标记 not inplace 的
Tensor
返回
None
代码示例
COPY-FROM: paddle.autograd.PyLayerContext.mark_not_inplace
mark_non_differentiable(self, *tensors)
标记一些输出是不需要反向的。
如果 forward 的输入输出是同一个 Tensor ,并且这个 Tensor 被标记为 not_inplace 的。Paddle 会替用户创建一个新的 Tensor 作为输出。
将不需要反向的 Tensor 标记为 non-differentiable,可以提升反向的性能。但是你在 backward 函数的输入参数中,仍要为其留有反向梯度的位置。
只是这个反向梯度是 1 个全为 0 的、shape 和 forward 的输出一样的 Tensor .
Note
这个函数最多只能在 forward 调用一次,并且所有的参数必须是 forward 输出的 Tensor 。
参数
- tensors (list of Tensor) - 需要标记不需要反向的
Tensor
返回
None
代码示例
COPY-FROM: paddle.autograd.PyLayerContext.mark_non_differentiable
设置是否要框架来初始化未初始化的反向梯度。默认是 True。
如果设置为 True,框架会将未初始化的反向梯度数据初始化为 0,然后再调用 backward 函数。
如果设置为 False,框架会将未初始化的反向梯度以 None 向 backward 函数传递。
Note
这个函数最多只能在 forward 中调用。
参数
- value (bool) - 是否要框架来初始化未初始化的反向梯度
返回
None
代码示例
COPY-FROM: paddle.autograd.PyLayerContext.set_materialize_grads