torch.qr
-
torch.qr(input, some=True, *, out=None) -
Вычисляет QR-разложение матрицы или набора матриц
input, и возвращает именованную кортеж (Q, R) тензоров, таких что с являющейся ортогональной матрицей или набором ортогональных матриц, а — верхней треугольной матрицей или набором верхних треугольных матриц.Если
someявляетсяTrue, то эта функция возвращает тонкое (сокращенное) QR-разложение. В противном случае, еслиsomeявляетсяFalse, эта функция возвращает полное QR-разложение.Предупреждение
torch.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 для ввода на процессоре и 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/1.13/generated/torch.qr.html