torch一些老忘记的函数

1. torch.diag_embed(input) 将输入tensor最后一维变成对角线矩阵

参数

input为tensor

示例

import torch
a = torch.tensor([[1,2],[3,4]])
print(a)
'''a->tensor([[1, 2],
             [3, 4]]), shape->(1,2)'''
b = torch.diag_embed(a)
print(b)
'''tensor([[[1, 0],
         [0, 2]],
        [[3, 0],
         [0, 4]]]), shape->(1,2,2)'''

2. torch.linalg.qr(A, mode)

参数

  • A:形状为两个维度以上的Tensor
  • mode:‘reduced’ , ‘complete’ , ‘r’ 之一。控制返回的张量的形状,默认为’reduced‘

return (Q,R)

用途:计算矩阵的QR分解
QR分解一些需要简单理解的知识
当mode='reduced’的时候,采用的简化QR分解 Q ∈ R m × k Q \in \mathbb{R}^{m \times k} QRm×k R ∈ R k × n R \in \mathbb{R}^{k \times n} RRk×n。其中 k = m i n ( m , n ) k=min(m,n) k=min(m,n)
当mode=’complete‘的时候,采用的完全QR分解 Q ∈ R m × m Q \in \mathbb{R}^{m \times m} QRm×m R ∈ R m × n R \in \mathbb{R}^{m \times n} RRm×n
注意,当 n > = m n>=m n>=m时,简化的QR分解与完全的QR分解一致。
当mode=’r‘的时候,仅返回简化QR分解的r矩阵,Q矩阵为空。 R ∈ R k × n R \in \mathbb{R}^{k \times n} RRk×n

注意

  1. mode='r’不支持反向传播,请采用mode=‘reduced’
  2. 当A的前 k = m i n ( m , n ) k=min(m,n) k=min(m,n)列线性无关时,QR分解仅在R的对角线处唯一。如果不是这种情况,不同的库或在不同设备上可能会产生不同的有效分解。
  3. 仅当A中每个矩阵的前 k = m i n ( m , n ) k=min(m,n) k=min(m,n)列线性无关时,才支持梯度计算。如果不满足这个条件,不会抛出错误,但是产生的梯度会不正确。这是因为QR分解在这些点上是不可微的。

猜你喜欢

转载自blog.csdn.net/REstrat/article/details/127197414
今日推荐