Uno, el tipo y tipo de datos de tensor en Pytorch
torch.Tensor
Es una matriz multidimensional que contiene elementos, pero estos elementos pertenecen a un solo elemento de tipo de datos (a diferencia de la lista, que puede almacenar diferentes tipos de elementos en la misma secuencia).
1.0 Tipo predeterminado y tipo de datos
torch.Tensor
Es torch.FlaotTensor
la abreviatura del tipo de tensor predeterminado ( ), y se coloca en la CPU de manera predeterminada.Cuando se usa esta declaración torch.FloatTensor
de tipo , se generarán datos de tipo y tipo de datos torch.float32
.
torch.ensor
Es torch.LongTensor
la abreviatura del tipo de tensor predeterminado ( ), y se coloca en la CPU de manera predeterminada.Cuando se usa esta declaración torch.LongTensor
de tipo , se generarán datos de tipo y tipo de datos torch.int64
.
Nota: no existe torch.cuda.Tensor
otorch.cuda.tensor
import torch
print("测试开始")
print("==默认Tensor数据类型==")
tensor= torch.Tensor([1,2])
print("type(tensor):",type(tensor))
print("tensor.type():",tensor.type())
print("tensor.dtype:",tensor.dtype)
print("tensor.is_cuda:",tensor.is_cuda)
print("==默认tensor数据类型==")
tensor= torch.tensor([1,2])
print("type(tensor):",type(tensor))
print("tensor.type():",tensor.type())
print("tensor.dtype:",tensor.dtype)
print("tensor.is_cuda:",tensor.is_cuda)
1.1 Resumen de tipos de tensor y tipos de datos
Pytorch define 8种CPU张量类型
y correspondiente 8种GPU张量类型
, (lo mismo CPU张量
, el GPU张量
tipo corresponde al mismo tipo de datos de almacenamiento), la correspondencia específica se muestra en la siguiente tabla:
Tipo de datos | Tensor de CPU | Tensor de GPU |
---|---|---|
Coma flotante de 32 bits -> torch.float32 |
torch.FloatTensor |
torch.cuda.FloatTensor |
Punto flotante de 64 bits -> torch.float64 |
torch.DoubleTensor |
torch.cuda.DoubleTensor |
Punto flotante de 16 bits -> torch.float16 |
torch.HalfTensor |
torch.cuda.HalfTensor |
Entero de 8 bits (sin firmar) -> torch.uint8 |
torch.ByteTensor |
torch.cuda.ByteTensor |
Entero de 8 bits (con signo) -> torch.int8 |
torch.CharTensor |
torch.cuda.CharTensor |
Entero de 16 bits (con signo) -> torch.int16 |
torch.ShortTensor |
torch.cuda.ShortTensor |
Entero de 32 bits (con signo) -> torch.int32 |
torch.IntTensor |
torch.cuda.IntTensor |
Entero de 64 bits (con signo) -> torch.int64 |
torch.LongTensor |
torch.cuda.LongTensor |
1.2 Visualización del tipo de tensor y tipo de datos
Los resultados obtenidos para este 16种tensor变量
uso type()函数
son<class 'torch.Tensor'>
Resuelve 张量类型
necesidades específicas de uso,tensor_name.type()
Resuelve la 数据存储类型
necesidad de uso correspondiente ,tensor_name.dtype
Ejemplo: ver 1.0
1.3 ¿Los datos del tensor pertenecen a la pantalla cuda?
Para saber si es necesario utilizar un tensor específico del tipo cuda,tensor_name.iscuda
Ejemplo: ver 1.0
1.4 Ejemplo: 16 tipos de inicialización de matriz y visualización de tipo de datos
import torch
print("测试开始")
print("===torch.FloatTensor===")
tensor = torch.FloatTensor([1,2])
print("type(FloatTensor):",type(tensor))
print("FloatTensor.type():",tensor.type())
print("FloatTensor.dtype:",tensor.dtype)
print("FloatTensor.is_cuda:",tensor.is_cuda)
print("===torch.cuda.FloatTensor===")
tensor = torch.cuda.FloatTensor([1,2])
print("type(cuda_FloatTensor):",type(tensor))
print("cuda_FloatTensor.type():",tensor.type())
print("cuda_FloatTensor.dtype:",tensor.dtype)
print("cuda_FloatTensor.is_cuda:",tensor.is_cuda)
print("===torch.DoubleTensor===")
tensor = torch.DoubleTensor([1,2])
print("type(DoubleTensor):",type(tensor))
print("DoubleTensor.type():",tensor.type())
print("DoubleTensor.dtype:",tensor.dtype)
print("DoubleTensor.is_cuda:",tensor.is_cuda)
print("===torch.cuda.DoubleTensor===")
tensor = torch.cuda.DoubleTensor([1,2])
print("type(cuda_DoubleTensor):",type(tensor))
print("cuda_DoubleTensor.type():",tensor.type())
print("cuda_DoubleTensor.dtype:",tensor.dtype)
print("cuda_DoubleTensor.is_cuda:",tensor.is_cuda)
print("===torch.HalfTensor===")
tensor = torch.HalfTensor([1,2])
print("type(cuda_DoubleTensor):",type(tensor))
print("HalfTensor.type():",tensor.type())
print("HalfTensor.dtype:",tensor.dtype)
print("HalfTensor.is_cuda:",tensor.is_cuda)
print("===torch.cuda.HalfTensor===")
tensor = torch.cuda.HalfTensor([1,2])
print("type(cuda_HalfTensor):",type(tensor))
print("cuda_HalfTensor.type():",tensor.type())
print("cuda_HalfTensor.dtype:",tensor.dtype)
print("cuda_HalfTensor.is_cuda:",tensor.is_cuda)
print("===torch.ByteTensor===")
tensor = torch.ByteTensor([1,2])
print("type(ByteTensor):",type(tensor))
print("ByteTensor.type():",tensor.type())
print("ByteTensor.dtype:",tensor.dtype)
print("ByteTensor.is_cuda:",tensor.is_cuda)
print("===torch.cuda.ByteTensor===")
tensor = torch.cuda.ByteTensor([1,2])
print("type(cuda_ByteTensor):",type(tensor))
print("cuda_ByteTensor.type():",tensor.type())
print("cuda_ByteTensor.dtype:",tensor.dtype)
print("cuda_ByteTensor.is_cuda:",tensor.is_cuda)
print("===torch.CharTensor===")
tensor = torch.CharTensor([1,2])
print("type(CharTensor):",type(tensor))
print("CharTensor.type():",tensor.type())
print("CharTensor.dtype:",tensor.dtype)
print("CharTensor.is_cuda:",tensor.is_cuda)
print("===torch.cuda.CharTensor===")
tensor = torch.cuda.CharTensor([1,2])
print("type(cuda_CharTensor):",type(tensor))
print("cuda_CharTensor.type():",tensor.type())
print("cuda_CharTensor.dtype:",tensor.dtype)
print("cuda_CharTensor.is_cuda:",tensor.is_cuda)
print("===torch.ShortTensor===")
tensor = torch.ShortTensor([1,2])
print("type(ShortTensor):",type(tensor))
print("ShortTensor.type():",tensor.type())
print("ShortTensor.dtype:",tensor.dtype)
print("ShortTensor.is_cuda:",tensor.is_cuda)
print("===torch.cuda.ShortTensor===")
tensor = torch.cuda.ShortTensor([1,2])
print("type(cuda_ShortTensor):",type(tensor))
print("cuda_ShortTensor.type():",tensor.type())
print("cuda_ShortTensor.dtype:",tensor.dtype)
print("cuda_ShortTensor.is_cuda:",tensor.is_cuda)
print("===torch.IntTensor===")
tensor = torch.IntTensor([1,2])
print("type(IntTensor):",type(tensor))
print("IntTensor.type():",tensor.type())
print("IntTensor.dtype:",tensor.dtype)
print("IntTensor.is_cuda:",tensor.is_cuda)
print("===torch.cuda.IntTensor===")
tensor = torch.cuda.IntTensor([1,2])
print("type(cuda_IntTensor):",type(tensor))
print("cuda_IntTensor.type():",tensor.type())
print("cuda_IntTensor.dtype:",tensor.dtype)
print("cuda_IntTensor.is_cuda:",tensor.is_cuda)
print("===torch.LongTensor===")
tensor = torch.LongTensor([1,2])
print("type(LongTensor):",type(tensor))
print("LongTensor.type():",tensor.type())
print("LongTensor.dtype:",tensor.dtype)
print("LongTensor.is_cuda:",tensor.is_cuda)
print("===torch.cuda.LongTensor===")
tensor = torch.cuda.LongTensor([1,2])
print("type(cuda_LongTensor):",type(tensor))
print("cuda_LongTensor.type():",tensor.type())
print("cuda_LongTensor.dtype:",tensor.dtype)
print("cuda_LongTensor.is_cuda:",tensor.is_cuda)
En segundo lugar, la conversión entre tipos de datos de tensor
2.0 La necesidad de conversión de datos
Tensor puede hacer el mismo tipo de operación, ya sea en CPU
y GPU
la misma especie, si el mismo tipo de almacenamiento de datos
2.1 Conversión del tipo de tensor de CPU y tipo de tensor de GPU
cpu_tensor.cuda()
gpu_tensor.cpu()
Por ejemplo
import torch
print("测试开始")
print("==默认数据类型==")
tensor= torch.FloatTensor([1,2])
print("初始化CPU张量是否在GPU上:",tensor.is_cuda)
tensor.cuda()
print("CPU张量使用.cuda()后是否在GPU上:",tensor.is_cuda)
tensor = tensor.cuda()
print("CPU张量使用.cuda()并重新赋值后是否在GPU上:",tensor.is_cuda)
print("="*10)
tensor= torch.cuda.FloatTensor([1,2])
print("初始化GPU张量是否在GPU上:",tensor.is_cuda)
tensor.cpu()
print("GPU张量使用.cpu()并重新赋值后是否在GPU上:",tensor.is_cuda)
tensor = tensor.cpu()
print("GPU张量使用.cpu()并重新赋值后是否在GPU上:",tensor.is_cuda)
2.2 Otras conversiones de tipos de datos que no involucran CPU y GPU
2.2.1 tensor.int () proyecta el tensor al tipo int
Los ocho tipos de CPU se convierten en torch.IntTensor, y el tipo de almacenamiento de datos es el tipo torch.int32
Los ocho tipos de GPU se convierten a torch.cuda.IntTensor, y el tipo de almacenamiento de datos es el tipo torch.int32
2.2.2 tensor.long () proyecta el tensor como tipo largo
Los ocho tipos de CPU se convierten en torch.LongTensor y el tipo de almacenamiento de datos es torch.int64
Los ocho tipos de GPU se convierten a torch.cuda.LongTensor y el tipo de almacenamiento de datos es torch.int64
2.2.3 tensor.half () proyecta el tensor como un tipo de punto flotante de precisión media
Los ocho tipos de CPU se convierten en torch.HalfTensor, y el tipo de almacenamiento de datos es torch.float16
Los ocho tipos de GPU se convierten a torch.cuda.HalfTensor y el tipo de almacenamiento de datos es torch.float16
2.2.4 tensor.double () proyecta el tensor a tipo doble
Los ocho tipos de CPU se convierten en torch.DoubleTensor, y el tipo de almacenamiento de datos es torch.float64
Los ocho tipos de GPU se convierten a torch.cuda.DoubleTensor, y el tipo de almacenamiento de datos es el tipo torch.float64
2.2.5 tensor.float () proyecta el tensor como un tipo flotante
Los ocho tipos de CPU se convierten en torch.FloatTensor, y el tipo de almacenamiento de datos es el tipo torch.float32
Los ocho tipos de GPU se convierten a torch.cuda.FloatTensor, y el tipo de almacenamiento de datos es torch.float32
2.2.6 tensor.char () proyecta el tensor al tipo char
Los ocho tipos de CPU se convierten a torch.CharTensor y el tipo de almacenamiento de datos es el tipo torch.int8
Los ocho tipos de GPU se convierten a torch.cuda.CharTensor, y el tipo de almacenamiento de datos es torch.int8
2.2.7 tensor.byte () proyecta el tensor al tipo de byte
Los ocho tipos de CPU se convierten en torch.ByteTensor, y el tipo de almacenamiento de datos es el tipo torch.uint8
Los ocho tipos de GPU se convierten a torch.cuda.ByteTensor, y el tipo de almacenamiento de datos es el tipo torch.uint8
2.2.8 tensor.short () proyecta el tensor al tipo corto
Los ocho tipos de CPU se convierten en torch.ShortTensor, y el tipo de almacenamiento de datos es torch.int16
Los ocho tipos de GPU se convierten a torch.cuda.ShortTensor, y el tipo de almacenamiento de datos es torch.int16
2.3 Usar la función tensor.type ()
La función de esta función es convertir el tensor a otro tipo de tensor, que puede convertir el tipo de CPU y el tipo de GPU simultáneamente, como torch.IntTensor -> torch.cuda.floatTensor
La sintaxis es la siguiente:
tensor_new = tensor.type(new_type=None, async=False)
Por ejemplo:
import torch
print("测试开始")
tensor = torch.FloatTensor([1,2])
print("before type function:",tensor.type())
tensor = tensor.type(torch.int32)
print("after type function:",tensor.type())
2.4 Use type_as (tesnor) para convertir un tensor en un tensor de un tipo dado
La función de esta función es convertir el tensor a otro tipo de tensor, que puede convertir el tipo de CPU y el tipo de GPU simultáneamente, como torch.IntTensor -> torch.cuda.floatTensor
Si el tensor ya es del tipo especificado, no se realizará ninguna conversión.
La sintaxis es la siguiente:
tensor_new = tensor1.type_as(tensor2)
Por ejemplo:
import torch
print("测试开始")
tensor1 = torch.FloatTensor([1,2])
tensor2 = torch.IntTensor([1,2])
print("before type_as function:",tensor1.type())
tensor1 = tensor1.type_as(tensor2)
print("after type function:",tensor1.type())
resultado de la operación:
ÚLTIMO, referencias
pytorch determina el tipo de variable y si es cuda_ Ipoh No. 2 -CSDN blog
torch.Tensor - PyTorch Documento chino
pytorch: tipo de construcción y conversión de tensor _JNing-CSDN blog
Pytorch tensor soporta tipos de datos y su conversión - conozca casi el
conocimiento de pytorch de declaraciones de datos de un tensor, conversión de tipos. Ajuste los puntos de atención de rensnet34. _yangdeshun888's blog -CSDN blog
Pytorch basic data types_torrent source -CSDN blog_pytorch data types