torch.gradient
-
torch.gradient(input, *, spacing=1, dim=None, edge_order=1) → List of Tensors -
Оценивает градиент функции в одном или нескольких измерениях с помощью метода центральных разностей второго порядка точности и оценок первого или второго порядка на границах.
Градиент оценивается по выборкам. По умолчанию, если
spacingне указан, выборки полностью задаются с помощьюinput, а соответствие входных координат выходным значениям совпадает с соответствием индексов тензора значениям. Например, для трехмерногоinputописывается функция , и .Если указать
spacing, оно изменяет связь междуinputи входными координатами. Подробнее об этом см. в разделе «Именованные аргументы» ниже.Градиент оценивается путем независимого вычисления каждой частной производной функции . Эта оценка точна, если функция принадлежит классу (имеет как минимум три непрерывные производные), а точность оценки можно повысить, используя более близкие выборки. Математически значение частной производной в каждой внутренней точке оценивается с помощью теоремы Тейлора с остаточным членом. Пусть — внутренняя точка, а и — соседние с ней точки слева и справа соответственно. Значения и можно оценить следующим образом:
Используя тот факт, что , и решая систему линейных уравнений, получаем:
Примечание
Мы аналогичным образом оцениваем градиент функций в комплексной области .
Значение каждой частной производной в граничных точках вычисляется иначе. См. описание edge_order ниже.
- Параметры:
-
input (
Tensor) – тензор, представляющий значения функции - Именованные аргументы:
-
-
spacing (
scalar,list of scalar,list of Tensor, необязательно) –spacingможно использовать для изменения соответствия индексов тензораinputкоординатам выборок. Еслиspacing— скаляр, индексы умножаются на этот скаляр для получения координат. Например, еслиspacing=2, индексы (1, 2, 3) преобразуются в координаты (2, 4, 6). Еслиspacing— список скаляров, каждый соответствующий индекс умножается на свой скаляр. Например, еслиspacing=(2, -1, 3), индексы (1, 2, 3) преобразуются в координаты (2, -2, 9). Наконец, еслиspacing— список одномерных тензоров, каждый тензор задает координаты соответствующего измерения. Например, если индексы равны (1, 2, 3), а тензоры — (t0, t1, t2), координаты будут равны (t0[1], t1[2], t2[3]) -
dim (
int,list of int, необязательно) – измерение или измерения, по которым вычисляется приближение градиента. По умолчанию вычисляется частная производная по каждому измерению. Обратите внимание: если указаноdim, элементы аргументаspacingдолжны соответствовать указанным измерениям.» -
edge_order (
int, необязательно) – 1 или 2 для оценки граничных («краевых») значений первого порядка или второго порядка соответственно. Обратите внимание: если указаноedge_order, размер каждого измеренияinputдолжен быть не меньше edge_order+1
-
spacing (
Примеры:
>>> # Estimates the gradient of f(x)=x^2 at points [-2, -1, 2, 4] >>> coordinates = (torch.tensor([-2., -1., 1., 4.]),) >>> values = torch.tensor([4., 1., 1., 16.], ) >>> torch.gradient(values, spacing = coordinates) (tensor([-3., -2., 2., 5.]),) >>> # Estimates the gradient of the R^2 -> R function whose samples are >>> # described by the tensor t. Implicit coordinates are [0, 1] for the outermost >>> # dimension and [0, 1, 2, 3] for the innermost dimension, and function estimates >>> # partial derivative for both dimensions. >>> t = torch.tensor([[1, 2, 4, 8], [10, 20, 40, 80]]) >>> torch.gradient(t) (tensor([[ 9., 18., 36., 72.], [ 9., 18., 36., 72.]]), tensor([[ 1.0000, 1.5000, 3.0000, 4.0000], [10.0000, 15.0000, 30.0000, 40.0000]])) >>> # A scalar value for spacing modifies the relationship between tensor indices >>> # and input coordinates by multiplying the indices to find the >>> # coordinates. For example, below the indices of the innermost >>> # 0, 1, 2, 3 translate to coordinates of [0, 2, 4, 6], and the indices of >>> # the outermost dimension 0, 1 translate to coordinates of [0, 2]. >>> torch.gradient(t, spacing = 2.0) # dim = None (implicitly [0, 1]) (tensor([[ 4.5000, 9.0000, 18.0000, 36.0000], [ 4.5000, 9.0000, 18.0000, 36.0000]]), tensor([[ 0.5000, 0.7500, 1.5000, 2.0000], [ 5.0000, 7.5000, 15.0000, 20.0000]])) >>> # doubling the spacing between samples halves the estimated partial gradients. >>> >>> # Estimates only the partial derivative for dimension 1 >>> torch.gradient(t, dim = 1) # spacing = None (implicitly 1.) (tensor([[ 1.0000, 1.5000, 3.0000, 4.0000], [10.0000, 15.0000, 30.0000, 40.0000]]),) >>> # When spacing is a list of scalars, the relationship between the tensor >>> # indices and input coordinates changes based on dimension. >>> # For example, below, the indices of the innermost dimension 0, 1, 2, 3 translate >>> # to coordinates of [0, 3, 6, 9], and the indices of the outermost dimension >>> # 0, 1 translate to coordinates of [0, 2]. >>> torch.gradient(t, spacing = [3., 2.]) (tensor([[ 4.5000, 9.0000, 18.0000, 36.0000], [ 4.5000, 9.0000, 18.0000, 36.0000]]), tensor([[ 0.3333, 0.5000, 1.0000, 1.3333], [ 3.3333, 5.0000, 10.0000, 13.3333]])) >>> # The following example is a replication of the previous one with explicit >>> # coordinates. >>> coords = (torch.tensor([0, 2]), torch.tensor([0, 3, 6, 9])) >>> torch.gradient(t, spacing = coords) (tensor([[ 4.5000, 9.0000, 18.0000, 36.0000], [ 4.5000, 9.0000, 18.0000, 36.0000]]), tensor([[ 0.3333, 0.5000, 1.0000, 1.3333], [ 3.3333, 5.0000, 10.0000, 13.3333]]))
© 2026, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://docs.pytorch.org/docs/2.14/generated/torch.gradient.html