[Marco de Pytorch] 2.1.4 Carga y preprocesamiento de datos

Conceptos básicos de PyTorch: carga y preprocesamiento de datos

PyTorch encapsula la carga de datos de uso común a través de torch.utils.data, que puede realizar fácilmente la lectura previa y la carga por lotes de datos de múltiples subprocesos.
Y torchvision ha preimplementado conjuntos de datos de imágenes de uso común, incluidos los conjuntos de datos CIFAR-10, ImageNet, COCO, MNIST, LSUN y otros conjuntos de datos utilizados anteriormente, que se pueden llamar fácilmente a través de torchvision.

# 首先要引入相关的包
import torch
#打印一下版本
torch.__version__
'1.0.1.post2'

Conjunto de datos

El conjunto de datos es una clase abstracta. Para que se pueda leer fácilmente, los datos que se utilizarán deben estar empaquetados como una clase de conjunto de datos.
El conjunto de datos personalizado debe heredarlo e implementar dos métodos de miembro:

  1. __getitem__()Este método define el uso de index ( 0to len(self)) para obtener un dato o una muestra
  2. __len__() Este método devuelve la longitud total del conjunto de datos.

A continuación, usamos un libro azul de competencia para excavadoras en kaggle para personalizar un conjunto de datos. Para la conveniencia de la introducción, usamos el diccionario de datos en el interior para ilustrar (porque el número de entradas es pequeño)

#引用
from torch.utils.data import Dataset
import pandas as pd
#定义一个数据集
class BulldozerDataset(Dataset):
    """ 数据集演示 """
    def __init__(self, csv_file):
        """实现初始化方法,在初始化的时候将数据读载入"""
        self.df=pd.read_csv(csv_file)
    def __len__(self):
        '''
        返回df的长度
        '''
        return len(self.df)
    def __getitem__(self, idx):
        '''
        根据 idx 返回一行数据
        '''
        return self.df.iloc[idx].SalePrice

En este punto, nuestro conjunto de datos ha sido definido y podemos usar una instancia de un objeto para acceder a él.

ds_demo= BulldozerDataset('median_benchmark.csv')

Podemos usar directamente el siguiente comando para ver los datos del conjunto de datos

#实现了 __len__ 方法所以可以直接使用len获取数据总数
len(ds_demo)
11573
#用索引可以直接访问对应的数据,对应 __getitem__ 方法
ds_demo[0]
24000.0

Se ha creado el conjunto de datos personalizado. A continuación, usamos el cargador de datos oficial para leer los datos

Cargador de datos

DataLoader nos proporciona la operación de lectura del conjunto de datos. Los parámetros comunes son: batch_size (tamaño de cada lote), shuffle (si se realiza la operación shuffle), num_workers (usar varios subprocesos al cargar datos). Haga una operación simple a continuación

dl = torch.utils.data.DataLoader(ds_demo, batch_size=10, shuffle=True, num_workers=0)

Lo que devuelve DataLoader es un objeto iterable, podemos usar el iterador para obtener datos en etapas

idata=iter(dl)
print(next(idata))
tensor([24000., 24000., 24000., 24000., 24000., 24000., 24000., 24000., 24000.,
        24000.], dtype=torch.float64)

El uso común es usar for loop para atravesarlo

for i, data in enumerate(dl):
    print(i,data)
    # 为了节约空间,这里只循环一遍
    break
0 tensor([24000., 24000., 24000., 24000., 24000., 24000., 24000., 24000., 24000.,
        24000.], dtype=torch.float64)

Ya podemos definir conjuntos de datos a través de conjuntos de datos y usar Datalorder para cargar y recorrer los conjuntos de datos. Además de estos, PyTorch también proporciona un paquete de extensión de visión por computadora capaz de torcvision, que está encapsulado

bolsa de antorcha

torchvision es una biblioteca dedicada al procesamiento de imágenes en PyTorch. La última instalación de pip torchvision en el tutorial de instalación en el sitio web oficial de PyTorch es instalar este paquete.

torchvision.datasets

torchvision.datasets puede entenderse como el conjunto de datos personalizado por el equipo de PyTorch. Estos conjuntos de datos nos ayudan a procesar una gran cantidad de conjuntos de datos de imágenes por adelantado y podemos usarlos directamente:

  • MNIST
  • COCO
  • Subtítulos
  • Detección
  • LSUN
  • ImageFolder
  • Imagenet-12
  • CIFAR
  • STL10
  • SVHN

  • Podemos usar PhotoTour directamente, un ejemplo es el siguiente:
import torchvision.datasets as datasets
trainset = datasets.MNIST(root='./data', # 表示 MNIST 数据的加载的目录
                                      train=True,  # 表示是否加载数据库的训练集,false的时候加载测试集
                                      download=True, # 表示是否自动下载 MNIST 数据集
                                      transform=None) # 表示是否需要对数据进行预处理,none为不进行预处理

torchvision.models

Torchvision no solo proporciona conjuntos de datos de imágenes de uso común, sino que también proporciona modelos entrenados, que se pueden usar directamente después de la carga, o la
siguiente estructura de modelo se incluye en el submódulo del módulo torchvision.models para el aprendizaje de la migración .

  • AlexNet
  • VGG
  • ResNet
  • SqueezeNet
  • DenseNet
#我们直接可以使用训练好的模型,当然这个与datasets相同,都是需要从服务器下载的
import torchvision.models as models
resnet18 = models.resnet18(pretrained=True)

torchvision.transforms

El módulo de transformaciones proporciona clases generales de operaciones de transformación de imágenes para el procesamiento y la mejora de datos.

from torchvision import transforms as transforms
transform = transforms.Compose([
    transforms.RandomCrop(32, padding=4),  #先四周填充0,在把图像随机裁剪成32*32
    transforms.RandomHorizontalFlip(),  #图像一半的概率翻转,一半的概率不翻转
    transforms.RandomRotation((-45,45)), #随机旋转
    transforms.ToTensor(),
    transforms.Normalize((0.4914, 0.4822, 0.4465), (0.229, 0.224, 0.225)), #R,G,B每层的归一化用到的均值和方差
])

Alguien definitivamente preguntará: (0.485, 0.456, 0.406), (0.2023, 0.1994, 0.2010) ¿Qué significan estos números?

La publicación oficial tiene instrucciones detalladas:
https://discuss.pytorch.org/t/normalization-in-the-mnist-example/457/21
Estos son parámetros de normalización entrenados en ImageNet y se pueden usar directamente. Creemos que esto es un Valor fijo.

Hemos completado la introducción del contenido básico de Python. A continuación, presentaremos las bases teóricas de las redes neuronales. Usamos PyTorch para implementar las fórmulas y así sucesivamente.

Supongo que te gusta

Origin blog.csdn.net/yegeli/article/details/113686201
Recomendado
Clasificación