Spec-Zone.ru › PyTorch 2.14

torch.Tensor.view

Tensor.view(*shape) → Tensor

Возвращает новый тензор с теми же данными, что и тензор self, но с другим shape.

Возвращённый тензор использует те же данные и должен содержать то же количество элементов, но может иметь другой размер. Чтобы тензор можно было представить в виде представления, его новый размер должен быть совместим с исходным размером и шагом, то есть каждое новое измерение представления должно быть либо подпространством исходного измерения, либо охватывать только исходные измерения d,d+1,…,d+kd, d+1, \dots, d+k, удовлетворяющие следующему условию, аналогичному условию непрерывности, для которого ∀i=d,…,d+k−1\forall i = d, \dots, d+k-1,

stride[i]=stride[i+1]×size[i+1]\text{stride}[i] = \text{stride}[i+1] \times \text{size}[i+1]

В противном случае тензор self невозможно будет представить в виде shape без копирования (например, с помощью contiguous()). Если неясно, можно ли выполнить view(), рекомендуется использовать reshape(): эта функция возвращает представление, если размеры совместимы, и в противном случае копирует данные (эквивалентно вызову contiguous()).

Параметры:

shape (torch.Size или int...) – требуемый размер

Пример:

>>> x = torch.randn(4, 4)
>>> x.size()
torch.Size([4, 4])
>>> y = x.view(16)
>>> y.size()
torch.Size([16])
>>> z = x.view(-1, 8)  # the size -1 is inferred from other dimensions
>>> z.size()
torch.Size([2, 8])

>>> a = torch.randn(1, 2, 3, 4)
>>> a.size()
torch.Size([1, 2, 3, 4])
>>> b = a.transpose(1, 2)  # Swaps 2nd and 3rd dimension
>>> b.size()
torch.Size([1, 3, 2, 4])
>>> c = a.view(1, 3, 2, 4)  # Does not change tensor layout in memory
>>> c.size()
torch.Size([1, 3, 2, 4])
>>> torch.equal(b, c)
False
view(dtype) → Tensor

Возвращает новый тензор с теми же данными, что и тензор self, но с другим dtype.

Если размер элемента у dtype отличается от размера элемента у self.dtype, размер последнего измерения выходного тензора будет пропорционально изменён. Например, если размер элемента у dtype вдвое больше, чем у self.dtype, каждая пара элементов в последнем измерении self будет объединена, а размер последнего измерения выходного тензора будет вдвое меньше, чем у self. Если размер элемента у dtype вдвое меньше, чем у self.dtype, каждый элемент в последнем измерении self будет разделён на два, а размер последнего измерения выходного тензора будет вдвое больше, чем у self. Для этого должны выполняться следующие условия:

  • self.dim() должно быть больше 0.
  • self.stride(-1) должно быть равно 1.

Кроме того, если размер элемента у dtype больше, чем у self.dtype, должны также выполняться следующие условия:

  • self.size(-1) должно делиться на отношение размеров элементов типов данных.
  • self.storage_offset() должно делиться на отношение размеров элементов типов данных.
  • Шаги всех измерений, кроме последнего, должны делиться на отношение размеров элементов типов данных.

Если какое-либо из перечисленных выше условий не выполняется, возникает ошибка.

Предупреждение

Эта перегрузка не поддерживается TorchScript, и её использование в программе TorchScript приведёт к неопределённому поведению.

Параметры:

dtype (torch.dtype) – требуемый тип данных

Пример:

>>> x = torch.randn(4, 4)
>>> x
tensor([[ 0.9482, -0.0310,  1.4999, -0.5316],
        [-0.1520,  0.7472,  0.5617, -0.8649],
        [-2.4724, -0.0334, -0.2976, -0.8499],
        [-0.2109,  1.9913, -0.9607, -0.6123]])
>>> x.dtype
torch.float32

>>> y = x.view(torch.int32)
>>> y
tensor([[ 1064483442, -1124191867,  1069546515, -1089989247],
        [-1105482831,  1061112040,  1057999968, -1084397505],
        [-1071760287, -1123489973, -1097310419, -1084649136],
        [-1101533110,  1073668768, -1082790149, -1088634448]],
    dtype=torch.int32)
>>> y[0, 0] = 1000000000
>>> x
tensor([[ 0.0047, -0.0310,  1.4999, -0.5316],
        [-0.1520,  0.7472,  0.5617, -0.8649],
        [-2.4724, -0.0334, -0.2976, -0.8499],
        [-0.2109,  1.9913, -0.9607, -0.6123]])

>>> x.view(torch.cfloat)
tensor([[ 0.0047-0.0310j,  1.4999-0.5316j],
        [-0.1520+0.7472j,  0.5617-0.8649j],
        [-2.4724-0.0334j, -0.2976-0.8499j],
        [-0.2109+1.9913j, -0.9607-0.6123j]])
>>> x.view(torch.cfloat).size()
torch.Size([4, 2])

>>> x.view(torch.uint8)
tensor([[  0, 202, 154,  59, 182, 243, 253, 188, 185, 252, 191,  63, 240,  22,
           8, 191],
        [227, 165,  27, 190, 128,  72,  63,  63, 146, 203,  15,  63,  22, 106,
          93, 191],
        [205,  59,  30, 192, 112, 206,   8, 189,   7,  95, 152, 190,  12, 147,
          89, 191],
        [ 43, 246,  87, 190, 235, 226, 254,  63, 111, 240, 117, 191, 177, 191,
          28, 191]], dtype=torch.uint8)
>>> x.view(torch.uint8).size()
torch.Size([4, 16])

© 2026, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://docs.pytorch.org/docs/2.14/generated/torch.Tensor.view.html

Spec-Zone.ru

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