torch.lu
-
torch.lu(*args, **kwargs) -
Вычисляет LU-разложение матрицы или набора матриц
A. Возвращает кортеж, содержащий LU-разложение и перестановкиA. Перестановка выполняется, еслиpivotустановлено вTrue.Предупреждение
torch.lu()устарело и заменено наtorch.linalg.lu_factor()иtorch.linalg.lu_factor_ex().torch.lu()будет удалена в будущих выпусках PyTorch.LU, pivots, info = torch.lu(A, compute_pivots)следует заменить наLU, pivots = torch.linalg.lu_factor(A, compute_pivots)
LU, pivots, info = torch.lu(A, compute_pivots, get_infos=True)следует заменить наLU, pivots, info = torch.linalg.lu_factor_ex(A, compute_pivots)
Примечание
- Возвращаемая матрица перестановок для каждой матрицы в наборе представлена вектором с индексацией с единицы размером
min(A.shape[-2], A.shape[-1]).pivots[i] == jуказывает, что наiшаге алгоритмаiстрока была переставлена соj-1строкой. - LU-разложение с
pivot=Falseнедоступно для ЦП, и попытка выполнить его приведет к ошибке. Однако LU-разложение сpivot=Falseдоступно для CUDA. - Эта функция не проверяет, было ли разложение успешным или нет, если
get_infosравноTrue, поскольку состояние разложения присутствует в третьем элементе кортежа возврата. - В случае наборов квадратных матриц размером меньше или равным 32 на устройстве CUDA LU-разложение повторяется для сингулярных матриц из-за ошибки в библиотеке MAGMA (см. проблему MAGMA 13).
-
L,U, иPмогут быть получены с помощьюtorch.lu_unpack().
Предупреждение
Градиенты этой функции будут конечными только тогда, когда
Aимеет полный ранг. Это потому, что LU-разложение дифференцируемо только для матриц с полным рангом. Кроме того, еслиAблизка к неполному рангу, градиент будет численно неустойчивым, так как он зависит от вычисления и .- Параметры
-
- A (Тензор) – факторизуемый тензор размера
-
pivot (bool, необязательно) – управляет выполнением перестановки. По умолчанию:
True -
get_infos (bool, необязательно) – если установлено в
True, возвращает IntTensor с информацией. По умолчанию:False -
out (кортеж, необязательно) – необязательный выходной кортеж. Если
get_infosравноTrue, элементы кортежа — Tensor, IntTensor и IntTensor. Еслиget_infosравноFalse, элементы кортежа — Tensor и IntTensor. По умолчанию:None
- Возвращаемое значение
-
Кортеж тензоров, содержащий
- разложение (Тензор): разложение размера
-
перестановки (IntTensor): перестановки размера .
pivotsхранит все промежуточные перестановки строк. Окончательная перестановкаpermможет быть восстановлена применениемswap(perm[i], perm[pivots[i] - 1])дляi = 0, ..., pivots.size(-1) - 1, гдеperm— изначально единичная перестановка из элементов (по сути, это то, что делаетtorch.lu_unpack()). -
infos (IntTensor, необязательно): если
get_infosравноTrue, это тензор размера , где ненулевые значения указывают на успешное или неудачное разложение для матрицы или каждого минипакета.
- Тип возвращаемого значения
-
(Тензор, IntTensor, IntTensor (необязательно))
Пример:
>>> A = torch.randn(2, 3, 3) >>> A_LU, pivots = torch.lu(A) >>> A_LU tensor([[[ 1.3506, 2.5558, -0.0816], [ 0.1684, 1.1551, 0.1940], [ 0.1193, 0.6189, -0.5497]], [[ 0.4526, 1.2526, -0.3285], [-0.7988, 0.7175, -0.9701], [ 0.2634, -0.9255, -0.3459]]]) >>> pivots tensor([[ 3, 3, 3], [ 3, 3, 3]], dtype=torch.int32) >>> A_LU, pivots, info = torch.lu(A, get_infos=True) >>> if info.nonzero().size(0) == 0: ... print('LU factorization succeeded for all samples!') LU factorization succeeded for all samples! - Возвращаемая матрица перестановок для каждой матрицы в наборе представлена вектором с индексацией с единицы размером
© 2024, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://pytorch.org/docs/2.1/generated/torch.lu.html