Shortcuts

torch.nn.utils.stateless.functional_call

torch.nn.utils.stateless.functional_call(module, parameters_and_buffers, args, kwargs=None, *, tie_weights=True, strict=False)[源代码]

通过替换模块的参数和缓冲区为提供的参数和缓冲区,执行模块的功能调用。

警告

自 PyTorch 2.0 起,此 API 已被弃用,并将在未来的 PyTorch 版本中移除。请改用 torch.func.functional_call(),它是此 API 的直接替代品。

注意

如果模块有活动的参数化设置,在 parameters_and_buffers 参数中传递一个值,并将名称设置为常规参数名称,将完全禁用参数化设置。 如果你想将参数化函数应用于传递的值,请将键设置为 {submodule_name}.parametrizations.{parameter_name}.original

注意

如果模块对参数/缓冲区执行就地操作,这些操作将反映在参数和缓冲区输入中。

示例:

>>> a = {'foo': torch.zeros(())}
>>> mod = Foo()  # 将 self.foo 设置为 self.foo + 1
>>> print(mod.foo)  # tensor(0.)
>>> functional_call(mod, a, torch.ones(()))
>>> print(mod.foo)  # tensor(0.)
>>> print(a['foo'])  # tensor(1.)

注意

如果模块有绑定的权重,是否功能调用尊重绑定由tie_weights标志决定。

示例:

>>> a = {'foo': torch.zeros(())}
>>> mod = Foo()  # 同时具有 self.foo 和 self.foo_tied,它们是绑定的。返回 x + self.foo + self.foo_tied
>>> print(mod.foo)  # tensor(1.)
>>> mod(torch.zeros(()))  # tensor(2.)
>>> functional_call(mod, a, torch.zeros(()))  # tensor(0.) 因为它也会改变 self.foo_tied
>>> functional_call(mod, a, torch.zeros(()), tie_weights=False)  # tensor(1.) -- self.foo_tied 没有更新
>>> new_a = {'foo': torch.zeros(()), 'foo_tied': torch.zeros(())}
>>> functional_call(mod, new_a, torch.zeros()) # tensor(0.)
Parameters
  • 模块 (torch.nn.Module) – 要调用的模块

  • parameters_and_buffers (字典字符串和Tensor) – 将在模块调用中使用的参数。

  • args (任意元组) – 传递给模块调用的参数。如果不是元组,则视为单个参数。

  • kwargs (字典) – 传递给模块调用的关键字参数

  • tie_weights (bool, 可选) – 如果为True,则在原始模型中绑定的参数和缓冲区将在重新参数化的版本中被视为绑定。因此,如果为True并且为绑定的参数和缓冲区传递了不同的值,将会报错。如果为False,则不会尊重原始绑定的参数和缓冲区,除非为两个权重传递的值相同。默认值:True。

  • 严格布尔值可选)– 如果为True,则传入的参数和缓冲区必须与原始模块中的参数和缓冲区匹配。因此,如果为True并且存在任何缺失或意外的键,将会报错。默认值:False。

Returns

调用 module 的结果。

Return type

任意

优云智算