torch.qr
-
torch.qr(input, some=True, *, out=None) -
Вычисляет QR-разложение матрицы или набора матриц
input, и возвращает именованную кортеж (Q, R) тензоров, таких что с являющейся ортогональной матрицей или набором ортогональных матриц, и являющейся верхней треугольной матрицей или набором верхних треугольных матриц.Если
someравноTrue, тогда эта функция возвращает тонкое (сокращённое) QR-разложение. В противном случае, еслиsomeравноFalse, эта функция возвращает полное QR-разложение.Предупреждение
torch.qr()устарела в пользуtorch.linalg.qr()и будет удалена в будущей версии PyTorch. Логический параметрsomeбыл заменён на строковый параметрmode.Q, R = torch.qr(A)следует заменить наQ, R = torch.linalg.qr(A)
Q, R = torch.qr(A, some=False)следует заменить наQ, R = torch.linalg.qr(A, mode="complete")
Предупреждение
Если вы планируете выполнять обратное распространение через QR, обратите внимание, что текущая реализация обратного распространения определена корректно только тогда, когда первые столбцов
inputлинейно независимы. Это поведение, вероятно, изменится, как только QR будет поддерживать пивотирование.Примечание
Эта функция использует LAPACK для входных данных CPU и MAGMA для входных данных CUDA и может генерировать разные (корректные) разложения на разных типах устройств или платформах.
- Параметры
-
-
input (Tensor) – входной тензор размера где
*— ноль или более размерностей пакетных данных, состоящих из матриц размерности . -
some (bool, необязательно) –
Установить в
Trueдля сокращенного QR-разложения иFalseдля полного QR-разложения. Еслиk = min(m, n)тогда:-
some=True: возвращает(Q, R)с размерами (m, k), (k, n) (по умолчанию) -
'some=False': возвращает(Q, R)с размерами (m, m), (m, n)
-
-
input (Tensor) – входной тензор размера где
- Ключевые аргументы
-
out (tuple, необязательно) – кортеж тензоров
QиR. РазмерыQиRподробно описаны в описанииsomeвыше.
Пример:
>>> a = torch.tensor([[12., -51, 4], [6, 167, -68], [-4, 24, -41]]) >>> q, r = torch.qr(a) >>> q tensor([[-0.8571, 0.3943, 0.3314], [-0.4286, -0.9029, -0.0343], [ 0.2857, -0.1714, 0.9429]]) >>> r tensor([[ -14.0000, -21.0000, 14.0000], [ 0.0000, -175.0000, 70.0000], [ 0.0000, 0.0000, -35.0000]]) >>> torch.mm(q, r).round() tensor([[ 12., -51., 4.], [ 6., 167., -68.], [ -4., 24., -41.]]) >>> torch.mm(q.t(), q).round() tensor([[ 1., 0., 0.], [ 0., 1., -0.], [ 0., -0., 1.]]) >>> a = torch.randn(3, 4, 5) >>> q, r = torch.qr(a, some=False) >>> torch.allclose(torch.matmul(q, r), a) True >>> torch.allclose(torch.matmul(q.mT, q), torch.eye(5)) True
© 2024, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://pytorch.org/docs/2.1/generated/torch.qr.html