Spec-Zone.ru › PyTorch 2

torch.qr

torch.qr(input, some=True, *, out=None)

Вычисляет QR-разложение матрицы или набора матриц input, и возвращает именованную кортеж (Q, R) тензоров, таких что input=QR\text{input} = Q R с QQ являющейся ортогональной матрицей или набором ортогональных матриц, и RR являющейся верхней треугольной матрицей или набором верхних треугольных матриц.

Если 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, обратите внимание, что текущая реализация обратного распространения определена корректно только тогда, когда первые min⁡(input.size(−1),input.size(−2))\min(input.size(-1), input.size(-2)) столбцов input линейно независимы. Это поведение, вероятно, изменится, как только QR будет поддерживать пивотирование.

Примечание

Эта функция использует LAPACK для входных данных CPU и MAGMA для входных данных CUDA и может генерировать разные (корректные) разложения на разных типах устройств или платформах.

Параметры
  • input (Tensor) – входной тензор размера (∗,m,n)(*, m, n) где * — ноль или более размерностей пакетных данных, состоящих из матриц размерности m×nm \times n.
  • 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)
Ключевые аргументы

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API