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)