Directorio de artículos
prefacio
Este artículo presenta principalmente los métodos de conversión entre algunos formatos de datos comunes en Python, especialmente las operaciones de datos relacionadas con la conversión del tipo de tensor en Pytorch.
1. entumecido
El tipo de punto flotante predeterminado creado por Numpy es np.float64
Los ndarrays enteros creados por Numpy son np.int32
(1) Convertir numpy a tensor
1. Utilice directamente la función torch.tensor -------- copia profunda
2. Usa el método torch.from_numpy --- copia superficial
En comparación con estos dos métodos, usar el método torch.from_numpy es mejor y más seguro.
Cuando solo hay un elemento (tamaño = 1), los escalares se pueden convertir usando el método item().
(2) Convertir numpy a lista
1. Numpy tiene su propia función nump.tolist() - preste atención a la dimensión de los datos en la lista
(3) Convertir numpy a PIL. Tipo de datos de imagen
1. Use el método Image.fromarray()
Nota : Image.fromarray() requiere que el dtype de entrada sea del tipo uint8
(4) Convertir numpy a tipo de datos pandas
1. Utilice el método pd.DataFrame()
2. tensor
El tipo de tensor de punto flotante predeterminado en torch es de tipo float32
El tipo de tensor de entero predeterminado en torch es de tipo int64
[note la diferencia con numpy]
Primero observe los dos métodos torch.tensor() y torch.Tensor(). Ambos son métodos de copia profunda. Si bien devuelven tensores, no comparten memoria con los datos originales, por lo que no se ven afectados por los cambios en los datos originales .
Entendamos la diferencia de nuevo:
- torch.Tensor() es un alias de torch.FloatTensor(), que es una clase de Python, y todos los tensores son instancias de torch.Tensor. Convierta la entrada a torch.FloatTensor()
- torch.tensor() es una función. Convierta al tipo de datos correspondiente según el tipo de datos de entrada.
El método para crear un tensot vacío:
#两种方法
torch.Tensor()
torch.tensor(())
(1) Método de conversión universal: método torch.as_tensor(), que convierte otros tipos a tipo tensor.
torch.as_tensor(data, dtype=None, device=None)->Tensor
data: puede ser lista, tupla, ndarray, escalar, etc.
dtype: puede especificar el tipo de datos en el tensor,
dispositivo: especifica la ubicación del tensor devuelto, el valor predeterminado es cpu
Nota : torch.as_tensor() es un método de copia superficial por defecto, y es una copia profunda cuando el tipo de dtype y el tipo de datos especificados son inconsistentes.
(2) convertir tensor a numpy
1. Use la función .numpy -------- copia superficial
2. Use la función torch.Tensor.numpy() -------- copia superficial
(3) Conversión de tensor en cpu y gpu
En el proceso de usar el entrenamiento de Pytorch, a menudo es necesario colocar los datos en la gpu para el entrenamiento, o colocar los datos del modelo entrenados en la GPU en la cpu para la prueba. Por lo tanto, el tipo de tensor a menudo necesita ser convertido de un lado a otro.La siguiente es una breve introducción a algunos métodos de conversión.
1. Convertir de CPU a GPU
1. Utilice el método .cuda()
2. Utilice el método torch.set_default_tensor_type() para establecer el tipo de punto flotante predeterminado en el tipo cuda.
2. Convertir de GPU a CPU
#把数据转到CPU----.cpu()方法
gpu_tensor.cpu()
Forma común de escribir:
si la gpu existe, colóquela en la gpu; de lo contrario, colóquela en la cpu.
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
tensor1 = tensor1.to(device)
tensor2 = tensor2.to(device)
#......
(4) convertir tensor a escalar
Como antes, usa el método item()
(5) convertir tensor a lista
1. método tolist
3. El tipo de datos al leer la imagen.
(1)cv2
La función cv2.imread() se utiliza principalmente al leer imágenes.
El uso es:
img = cv2.imread(filename, flags)
#filename:图片路径
#flags:读取图片的格式。默认为1:彩色图片;0:灰度图片;
Y devuelve el tipo numpy.
Nota :
- Los canales de imagen leídos por la función cv2.imread() se almacenan en el orden BGR , no RGB . Se puede mostrar normalmente usando cv2.imshow(), pero necesita convertirse cuando se usan otras bibliotecas para mostrar.
- La forma de la imagen leída por cv2.imread() convertida en una matriz es [H, W, C], mientras que la forma requerida para la entrada en Pytorch es [B, C, H, W].
- cv2.imread() no admite rutas chinas , si no desea cambiar el nombre de la ruta, puede leerlo de la siguiente manera:
import numpy as np
import cv2
img=cv2.imdecode(np.fromfile(imgpath, dtype=np.uint8), cv2.IMREAD_COLOR)
- Cuando use cv2.imshow() para mostrar la imagen, puede parpadear, puede agregar una línea de declaración: cv2.waitKey(0) , y el nombre de la primera ventana en imshow() no se puede omitir.
que muestra correctamente:
(2)PIL
Los métodos de lectura y visualización de imágenes son los siguientes:
from PIL import Image
img = Image.open('E:\A.png')
img.show()
print(type(img))
producción:
- El formato de imagen leído por Image está en formato W x H , y la lectura es " RGB ", y el tamaño de la forma después de convertir a numnpy es
[ C, H, W ]
1. Convertir PIL a tensor
Para usar la biblioteca de gráficos torchvision en pytorch , y torchvision.transforms se usa principalmente para algunas transformaciones de gráficos comunes.
El uso es el siguiente:
No lo escriba como: torchvision.transforms.ToTensor(img)
Nota : el método ToTensor() convierte el rango de escala de grises de 0-255 a 0-1 cuando se conviertea tensor
Resumir
De hecho, todavía hay mucho contenido, que se agregará más adelante.