Saltar al contenido

Clasificación de imágenes con PyTorch

Lo bien que el modelo puede aprender depende de la variedad y el volumen de los datos. Necesitamos dividir nuestros datos en un conjunto de entrenamiento y un conjunto de validación usando train_test_split.

Conjunto de datos de entrenamiento : El modelo aprende de los ejemplos de este conjunto de datos. Ajusta un parámetro a un clasificador.

Clasificación de imágenes con PyTorch
Clasificación de imágenes con PyTorch

Conjunto de datos de validación : Los ejemplos del conjunto de datos de validación se utilizan para afinar los hiperparámetros, como la tasa de aprendizaje y las épocas. El objetivo de la creación de un conjunto de validación es evitar una gran sobrecarga del modelo. Se trata de un punto de control para saber si el modelo se ajusta bien al conjunto de datos de formación.

Conjunto de datos de prueba : Este conjunto de datos prueba la evolución final del modelo, midiendo cuán bien ha aprendido y ha predicho el resultado deseado. Contiene datos no vistos, de la vida real.

1train, valid_data = train_test_split(labels, stratify=labels.has_cactus, test_size=0.2)

python

123train_data = CactiDataset(train, train_path, train_transform )

pitón

Definir los valores de los hiperparámetros.

123456# Hyper parametersnum_epochs =35num_classes =2batch_size =25learning_rate =0.001

pitón

Cada vez que se inicializa el lote de imágenes, está en la CPU para el cálculo por defecto. La función torch.cuda.is_available() comprobará si hay una GPU presente. Si CUDA está presente, .device(«cuda») dirigirá el tensor a la GPU para el cálculo.

1234# CPU o GPUdevice = torch.device($0027cuda:0$0027if torch.cuda.is_available()else$0027cpu$0027)device

pitón

El dispositivo usará CUDA con un solo procesador de GPU. Esto hará que nuestros cálculos sean más rápidos. Si tiene una CPU en su sistema, no hay problema. Puedes usar Google Colab, que proporciona una GPU gratuita.

En el código que figura a continuación, dataloader ombina un conjunto de datos y un muestreador y proporciona un iterable sobre el conjunto de datos dado. dataset()indica qué conjunto de datos cargar de los datos disponibles. Para más detalles, lea esta documentación.

123train_loader = DataLoader(dataset = datos_del_tren, batch_size = tamaño_del_batch, shuffle=True, num_workers=0)valid_loader = DataLoader(dataset = datos_válidos, batch_size = tamaño_batch, shuffle=Falso, num_workers=0)test_loader = DataLoader(dataset = test_data, batch_size = tamaño_batch, shuffle=Falso, num_workers=0)

python

123456789101112131415161718192021222324import numpy as npimport matplotlib.pyplot as pltdefimshow(image, ax=None, title=None, normalize=True):if ax isNone: fig, ax = plt. subplots() image = image.numpy().transpose((1,2,0))if normalize: mean = np.array([0.485,0.456,0.406]) std = np.array([0.229,0.224,0. 225]) image = std * image + mean image = np.clip(image,0,1) ax.imshow(image) ax.spines[$0027top$0027].set_visible(False) ax.spines[$0027right$0027].set_visible(False) ax.spines[$0027left$0027]. set_visible(Falso) ax.spines[$0027bottom$0027].set_visible(Falso) ax.tick_params(axis=$0027both$0027, length=0) ax.set_xticklabels($0027$0027) ax.set_yticklabels($0027$0027)return ax

python

123456789trainimages, trainlabels =next(iter(train_loader))fig, axes = plt.subplots(figsize=(12,12), ncols=5)print($0027training images$0027)for i inrange(5): axe1 = axes[i] imshow(trainimages[i], ax=axe1, normalize=False)print(trainimages[0].size())

pitón

El siguiente paso es hacer un modelo de CNN que aprenda del conjunto de datos de entrenamiento manipulado.