当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python PyTorch orthogonal用法及代码示例


本文简要介绍python语言中 torch.nn.utils.parametrizations.orthogonal 的用法。

用法:

torch.nn.utils.parametrizations.orthogonal(module, name='weight', orthogonal_map=None, *, use_trivialization=True)

参数

  • module(torch.nn.Module) -在其上注册参数化的模块。

  • name(str,可选的) -使正交的张量的名称。默认值:"weight"

  • orthogonal_map(str,可选的) -以下之一:"matrix_exp""cayley""householder"。默认值:"matrix_exp" 如果矩阵是方阵或复数,则 "householder" 否则。

  • use_trivialization(bool,可选的) -是否使用动态平凡化框架。默认值:True

返回

具有注册到指定权重的正交参数化的原始模块

将正交或酉参数化应用于矩阵或一组矩阵。

\mathbb{K} \mathbb{R} 或者\mathbb{C} , 参数化矩阵Q \in \mathbb{K}^{m \times n} 正交作为

其中 是当 是复数时的共轭转置,当 是实值时的转置, n维单位矩阵。简而言之,只要 时, 将具有正交列,否则将具有正交行。

如果张量有两个以上的维度,我们将其视为一批形状为 (…, m, n) 的矩阵。

矩阵 可以根据原始张量通过三个不同的orthogonal_map 参数化:

  • "matrix_exp" /"cayley" matrix_exp() Cayley map 应用于 skew-symmetric 以给出正交矩阵。

  • "householder":计算 Householder 反射器的乘积 ( householder_product() )。

"matrix_exp" /"cayley" 通常使参数化权重比 "householder" 收敛得更快,但对于非常薄或非常宽的矩阵,它们的计算速度较慢。

如果use_trivialization=True(默认),参数化实现“Dynamic Trivialization Framework”,其中一个额外的矩阵 存储在module.parametrizations.weight[0].base下。这有助于参数化层的收敛,但会消耗一些额外的内存。见Trivializations for Gradient-Based Optimization on Manifolds

的初始值:如果原始张量未参数化且 use_trivialization=True(默认),则 的初始值是原始张量的初始值,如果它是正交的(或在复杂情况下是单一的)并且它是否则通过 QR 分解正交化(参见 torch.linalg.qr() )。当它没有参数化和 orthogonal_map="householder" 即使在 use_trivialization=False 时也会发生同样的情况。否则,初始值是应用于原始张量的所有注册参数化组合的结果。

注意

此函数是使用 register_parametrization() 中的参数化函数实现的。

例子:

>>> orth_linear = orthogonal(nn.Linear(20, 40))
>>> orth_linear
ParametrizedLinear(
in_features=20, out_features=40, bias=True
(parametrizations): ModuleDict(
    (weight): ParametrizationList(
    (0): _Orthogonal()
    )
)
)
>>> Q = orth_linear.weight
>>> torch.dist(Q.T @ Q, torch.eye(20))
tensor(4.9332e-07)

相关用法


注:本文由纯净天空筛选整理自pytorch.org大神的英文原创作品 torch.nn.utils.parametrizations.orthogonal。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。