def weak_script_method(fn):
weak_script_methods[fn] = {
"rcb": createResolutionCallback(frames_up=2),
"original_method": fn
}
return fn
但是,你不必担心那个装修工。此修饰符是JIT的内部。在
以@weak_script_method修饰的技术方法将添加到前面创建的weak_script_methods字典中,如下所示:
^{pr2}$
dict跟踪方法以避免循环依赖问题;方法在创建PyTorch图时调用其他方法。在
除非你能理解TorchScript的一般概念,否则这真的没有多大意义。在
TorchScript的思想是在PyTorch中训练模型,并将模型导出到另一个非Python生产环境(阅读:C++/C/CUDA)支持静态类型。在
Pythorch团队在有限的Python基础上制作了TorchScript来支持静态类型。
默认情况下,Python是动态类型化语言,但很少使用技巧(阅读:支票)它可以成为静态的类型化语言。在
因此TorchScript函数是Python的静态类型子集,它包含PyTorch的所有内置张量操作。这种差异允许TorchScript模块代码在不需要Python解释器的情况下运行。在
可以使用跟踪(torch.jit.trace()方法)将现有的PyTorch方法转换为TorchScript,也可以使用@torch.jit.script修饰符手动创建TorchScript。在
如果您使用跟踪,您将在最后得到一个类模块。示例如下:import inspect
import torch
def foo(x, y):
return x + y
traced_foo = torch.jit.trace(foo, (torch.rand(3), torch.rand(3)))
print(type(traced_foo)) #
print(traced_foo) #foo()
print(traced_foo.forward) #
lines = inspect.getsource(traced_foo.forward)
print(lines)
输出:
foo()
def forward(self, *args, **kwargs):
return self._get_method('forward')(*args, **kwargs)
您可以使用“检查”模块进一步调查。这只是一个演示如何使用跟踪转换一个函数。在