Spec-Zone.ru › PyTorch 1

torch.linalg.tensorinv

torch.linalg.tensorinv(A, ind=2, *, out=None) → Tensor

Вычисляет мультипликативное обратное значение torch.tensordot().

Если m является произведением первых ind измерений A и n является произведением остальных измерений, эта функция ожидает, что m и n будут равны. Если это так, она вычисляет тензор X такой, что tensordot(A, X, ind) является единичной матрицей в измерении m. X будет иметь форму A , но с первыми ind измерениями, отодвинутыми в конец

X.shape == A.shape[ind:] + A.shape[:ind]

Поддерживает входные данные типов float, double, cfloat и cdouble.

Примечание

Когда A является 2-мерным тензором и ind= 1, эта функция вычисляет (мультипликативное) обратное значение A (см. torch.linalg.inv()).

Примечание

Рассмотрите использование torch.linalg.tensorsolve(), если это возможно, для умножения тензора слева на обратный тензор, так как:

linalg.tensorsolve(A, B) == torch.tensordot(linalg.tensorinv(A), B)  # When B is a tensor with shape A.shape[:B.ndim]

Всегда предпочтительно использовать tensorsolve(), когда это возможно, так как это быстрее и более числово устойчиво, чем вычисление псевдообратного значения явно.

См. также

torch.linalg.tensorsolve() вычисляет torch.tensordot(tensorinv(A), B).

Параметры:
  • A (Tensor) – тензор, который нужно инвертировать. Его форма должна удовлетворять prod(A.shape[:ind]) == prod(A.shape[ind:]).
  • ind (int) – индекс, по которому нужно вычислить обратное значение torch.tensordot(). По умолчанию: 2.
Ключевые аргументы:

out (Tensor, необязательно) – выходной тензор. Игнорируется, если None. По умолчанию: None.

Возбуждает:

RuntimeError – если преобразованный A необратим или произведение первых ind измерений не равно произведению остальных.

Примеры:

>>> A = torch.eye(4 * 6).reshape((4, 6, 8, 3))
>>> Ainv = torch.linalg.tensorinv(A, ind=2)
>>> Ainv.shape
torch.Size([8, 3, 4, 6])
>>> B = torch.randn(4, 6)
>>> torch.allclose(torch.tensordot(Ainv, B), torch.linalg.tensorsolve(A, B))
True

>>> A = torch.randn(4, 4)
>>> Atensorinv = torch.linalg.tensorinv(A, ind=1)
>>> Ainv = torch.linalg.inverse(A)
>>> torch.allclose(Atensorinv, Ainv)
True

© 2024, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://pytorch.org/docs/1.13/generated/torch.linalg.tensorinv.html

Spec-Zone.ru

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