Shortcuts

函子

警告

我们已经将functorch集成到PyTorch中。作为集成的最后一步,functorch API自PyTorch 2.0起已被弃用。请改用torch.func API,并查看迁移指南文档以获取更多详细信息。

函数转换

vmap

vmap 是向量化映射;vmap(func) 返回一个新函数,该函数将 func 映射到输入的某个维度上。

grad

grad 操作符帮助计算 func 相对于 argnums 指定的输入的梯度。

grad_and_value

返回一个函数,用于计算梯度和原始或前向计算的元组。

vjp

代表向量-雅可比积,返回一个包含应用于primalsfunc结果的元组,以及一个函数,当给定cotangents时,计算func相对于primals的反向模式雅可比乘以cotangents

jvp

代表雅可比向量积,返回一个包含func(*primals)输出的元组,以及在primals处评估的“func的雅可比”乘以tangents的结果。

jacrev

使用反向模式自动微分计算func相对于索引argnum处的参数的雅可比矩阵

jacfwd

使用前向模式自动微分计算func相对于索引argnum处的参数的雅可比矩阵

hessian

通过前向-反向策略计算func关于索引argnum处的参数的Hessian矩阵。

functionalize

functionalize 是一种转换,可用于从函数中移除(中间)突变和别名,同时保留函数的语义。

用于处理 torch.nn.Modules 的工具

通常,你可以对一个调用torch.nn.Module的函数进行转换。 例如,以下是一个计算雅可比矩阵的例子,该函数接收三个值并返回三个值:

model = torch.nn.Linear(3, 3)

def f(x):
    return model(x)

x = torch.randn(3)
jacobian = jacrev(f)(x)
assert jacobian.shape == (3, 3)

然而,如果你想做一些类似计算模型参数的雅可比矩阵的事情,那么需要有一种方法来构造一个函数,其中参数是函数的输入。 这就是make_functional()make_functional_with_buffers()的用途: 给定一个torch.nn.Module,这些函数返回一个新的函数,该函数接受parameters和模块前向传递的输入。

make_functional

给定一个torch.nn.Modulemake_functional()提取状态(参数)并返回模型的功能版本,func

make_functional_with_buffers

make_functional(model, disable_autograd_tracking=False) -> func, params

combine_state_for_ensemble

准备一个用于与vmap()集成的torch.nn.Modules列表。

如果您正在寻找有关修复批量归一化模块的信息,请遵循此处的指导