快捷键

torch.autograd.anomaly_mode 源代码

# mypy: 允许未类型化定义
r"""自回归异常模式。"""
导入 警告

导入 火炬


全部 = [检测异常, "设置检测异常"]


[文档] 检测异常: r上下文管理器,用于为自动微分引擎启用异常检测。 这做了两件事: 运行启用检测的前向传递将允许反向 传递以打印创建失败的前向操作的跟踪回溯 反向函数。 - 如果 `check_nan` 为 `True`,则任何生成 "nan" 值的反向计算将引发错误。默认 `True`。 此模式仅应用于调试,因为不同的测试... ..警告:: 此模式应仅用于调试,因为不同的测试... 将会减慢你的程序执行速度。 示例: >>> # xdoctest: +REQUIRES(env:TORCH_DOCTEST_ANOMALY) >>> 导入 torch >>> from torch import autograd >>> class MyFunc(autograd.Function): ... @staticmethod ... def forward(ctx, inp): ... return inp.clone() ... @staticmethod ... def backward(ctx, gO): ... # 反向传播过程中发生错误 ... raise RuntimeError("反向传播中发生某些错误") ... return gO.clone() >>> 定义函数 run_fn(a): ... out = MyFunc.apply(a) ... 返回 out.sum() >>> inp = torch.rand(10, 10, requires_grad=True) >>> out = run_fn(inp) >>> out.backward() Traceback (most recent call last): 文件 "", 行 1,在 中 文件 "/your/pytorch/install/torch/_tensor.py",第 93 行,in backward torch.autograd.backward(self, gradient, retain_graph, create_graph) 文件 "/your/pytorch/install/torch/autograd/__init__.py",第 90 行,in backward allow_unreachable=True) # 允许不可达标志 File "/your/pytorch/install/torch/autograd/function.py", line 76, in apply return self._forward_cls.backward(self, *args) File "<stdin>", line 8, in backward 运行时错误:反向传播中发生错误 >>> 使用 autograd.detect_anomaly() 检测异常 ... inp = torch.rand(10, 10, requires_grad=True) ... out = run_fn(inp) ... out.backward() 错误引起的 forward 调用回溯: 文件 "tmp.py",第 53 行, out = run_fn(inp) 文件 "tmp.py",第 44 行,在 run_fn 函数中 out = MyFunc.apply(a) Traceback (most recent call last): 文件 "",第 4 行,在 中 文件 "/your/pytorch/install/torch/_tensor.py",第 93 行,在 backward 函数中 torch.autograd.backward(self, gradient, retain_graph, create_graph) 文件 "/your/pytorch/install/torch/autograd/__init__.py",第 90 行,在 backward() 中 allow_unreachable=True) # 允许不可达标志 文件 "/your/pytorch/install/torch/autograd/function.py",第 76 行,在 apply() 中 return self._forward_cls.backward(self, *args) File "<stdin>", line 8, in backward RuntimeError: Some error in backward """ def __init__(self, check_nan=True) -> : # 无需注意:D107 self.上一个 = PyTorch.异常检测是否启用() self.检查非零数值 = 检查非零数值 self.prev_check_nan 前检查非数值 = PyTorch.是否启用异常检测 NaN() 警告.警告( 异常检测已启用。 此模式将增加运行时间 仅应启用调试。, 栈级别=2, ) def __进入__(self) -> : # 无需注意:D105 PyTorch.设置异常启用(True, self.检查 NaN) def __退出__(self, *参数: 对象) -> : # noqa: D105 PyTorch.设置异常启用(self.上一页, self.前置检查 NaN)
[文档]类 set_detect_anomaly: 上下文管理器,用于开启或关闭自动微分引擎的异常检测。 `set_detect_anomaly` 将启用或禁用自动微分异常检测 基于其参数::attr:`模式`。 它可以作为一个上下文管理器或作为一个函数使用。 查看上面的 ``detect_anomaly`` 了解异常检测行为的详细信息。 Args: mode (bool): 是否启用异常检测的标志(``True``), 或禁用(``False``)。 检查非数值(bool):标志是否在反向时引发错误 生成 "nan" ```python # 假设输入文本为: input_text = '"""' # 翻译函数(此处仅为示例,实际翻译功能需要调用真实的翻译 API) def translate_to_simplified_chinese(text): # 这里应该调用真实的翻译 API 进行翻译 # 由于示例中不使用真实的 API,以下为模拟翻译结果 return text # 输出翻译结果 translated_text = translate_to_simplified_chinese(input_text) print(translated_text) ``` def __init__(self, 模式: bool, 检查非数值: bool = True) -> None: # noqa: D107 self.prev = torch.is_anomaly_enabled() self.prev_check_nan = torch.is_anomaly_check_nan_enabled() torch.set_anomaly_enabled(mode, check_nan) def __enter__(self) -> None: # noqa: D105 通过 def __exit__(self, *args: object) -> None: # noqa: D105 torch.set_anomaly_enabled(self.prev, self.prev_check_nan)

© 版权所有 PyTorch 贡献者。

使用 Sphinx 构建,并使用 Read the Docs 提供的主题。

文档

查看 PyTorch 的全面开发者文档

查看文档

教程

深入了解初学者和高级开发者的教程

查看教程

资源

查找开发资源,获取您的疑问解答

查看资源