torch.Tensor.view
-
Tensor.view(*shape) → Tensor -
Возвращает новый тензор с теми же данными, что и тензор
self, но с другимshape.Возвращаемый тензор использует те же данные и должен иметь то же количество элементов, но может иметь другой размер. Для того, чтобы тензор можно было просмотреть, размер нового представления должен быть совместим с его исходным размером и шагом, т. е. каждая новая размерность представления должна быть подпространством исходной размерности или охватывать только исходные размерности , которые удовлетворяют следующему условию, аналогичному условию непрерывности, что ,
В противном случае невозможно просмотреть тензор
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])
© 2024, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://pytorch.org/docs/2.1/generated/torch.Tensor.view.html