Shortcuts

torch.jit.ignore

torch.jit.ignore(drop=False, **kwargs)[源代码]

这个装饰器向编译器指示一个函数或方法应该被忽略并保持为Python函数。这允许你在模型中保留尚未与TorchScript兼容的代码。如果在TorchScript中调用,被忽略的函数将把调用分派给Python解释器。带有被忽略函数的模型无法导出;请改用@torch.jit.unused

示例(在方法上使用 @torch.jit.ignore):

import torch
import torch.nn as nn

class MyModule(nn.Module):
    @torch.jit.ignore
    def debugger(self, x):
        import pdb
        pdb.set_trace()

    def forward(self, x):
        x += 10
        # 编译器通常会尝试编译 `debugger`,
        # 但由于它被 `@ignore` 了,它将被保留为一个
        # 对 Python 的调用
        self.debugger(x)
        return x

m = torch.jit.script(MyModule())

# 错误!调用 `debugger` 无法保存,因为它调用了 Python
m.save("m.pt")

示例(在方法上使用 @torch.jit.ignore(drop=True)):

import torch
import torch.nn as nn

class MyModule(nn.Module):
    @torch.jit.ignore(drop=True)
    def training_method(self, x):
        import pdb
        pdb.set_trace()

    def forward(self, x):
        if self.training:
            self.training_method(x)
        return x

m = torch.jit.script(MyModule())

# 这是可以的,因为 `training_method` 没有被保存,调用被替换为 `raise`。
m.save("m.pt")
优云智算