我刚刚发现PyTorch文档中提供了一种称为Torch脚本的东西。但是,我不知道:
- 它们应该在什么时候使用?
- 如何使用它们?
- 它们的好处是什么?
nn.Module
子类更费力,但它允许一些额外的功能,尤其是像 if
语句或 for
循环这样的流程控制。跟踪将这种流程控制视为“常量” - 换句话说,如果您在模块中有一个 if model.training
子句,并使用 training = True
进行跟踪,则无论您以后将 training
变量更改为 False
,它始终会以这种方式运行。 jit
,否则,如果您想以牺牲额外开发工作的代价获得一些执行性能,则应该使用 jit
(因为并不是每个模型都可以直接符合 jit
)。特别是,如果您的代码依赖于某些功能,例如 if
语句,则应使用Torch Script,因为您的代码无法通过跟踪单独 jit
。为了最大的人体工程学,您可能想要混合使用两者并根据具体情况进行选择。
最后,如何使用请参考所有文档和教程链接。
nn.Sequential
重新实现为for module in self: x = module(x)
,则可以使用跟踪,因为包含在self
中的模块在执行之间不会改变。如果循环取决于x
,则必须使用脚本。 - Jatentaki