in

Regresión logística en MNIST con PyTorch

1xFhICZgdr2VEZQ C4FLUEA

Regresión logística en MNIST con PyTorch

Asad Mahmood

27 de abril de 2019·3 min de lectura

Regresión logística se utiliza para describir datos y explicar la relación entre una variable binaria dependiente y una o más variables independientes nominales, ordinales, de intervalo o de razón[1]. La siguiente figura muestra la diferencia entre Logístico y Lineal regresión.

1*xFhICZgdr2VEZQ C4FLUEA

En esta publicación, mostraré cómo codificar un modelo de regresión logística en PyTorch.

Intentaremos resolver el problema de clasificación del conjunto de datos MNIST. Primero, importemos todas las bibliotecas que necesitaremos.

import torch
from torch.autograd import Variable
import torchvision.transforms as transforms
import torchvision.datasets as dsets

Prefiero tener la siguiente lista de pasos delante de mí al crear un modelo. Esta lista está presente en el sitio web de PyTorch [2].

# Step 1. Load Dataset
# Step 2. Make Dataset Iterable
# Step 3. Create Model Class
# Step 4. Instantiate Model Class
# Step 5. Instantiate Loss Class
# Step 6. Instantiate Optimizer Class
# Step 7. Train Model

Entonces lVeamos estos pasos uno por uno.

Cargar conjunto de datos

Para cargar el conjunto de datos, utilizamos torchvision.datasets, una biblioteca que tiene casi todos los conjuntos de datos populares utilizados en Machine Learning. Puede consultar la lista completa de conjuntos de datos en [3].

train_dataset = dsets.MNIST(root='./data', train=True, transform=transforms.ToTensor(), download=False)
test_dataset = dsets.MNIST(root='./data', train=False, transform=transforms.ToTensor())

Hacer que el conjunto de datos sea iterable

Usaremos la clase DataLoader para hacer que nuestro conjunto de datos sea iterable usando las siguientes líneas de código.

train_loader = torch.utils.data.DataLoader(dataset=train_dataset, batch_size=batch_size, shuffle=True)
test_loader = torch.utils.data.DataLoader(dataset=test_dataset, batch_size=batch_size, shuffle=False)

Crear la clase de modelo

Ahora, crearemos una clase que defina la arquitectura de Regresión logística.

class LogisticRegression(torch.nn.Module):
def __init__(self, input_dim, output_dim):
super(LogisticRegression, self).__init__()
self.linear = torch.nn.Linear(input_dim, output_dim)

def forward(self, x):
outputs = self.linear(x)
return outputs

Crear una instancia de la clase de modelo

Antes de la instanciación, inicializaremos algunos parámetros como los siguientes.

batch_size = 100
n_iters = 3000
epochs = n_iters / (len(train_dataset) / batch_size)
input_dim = 784
output_dim = 10
lr_rate = 0.001

Ahora, inicializamos nuestro modelo de regresión logística.

model = LogisticRegression(input_dim, output_dim)

Instancia de la clase de pérdida

Usamos la entropía cruzada para calcular la pérdida.

criterion = torch.nn.CrossEntropyLoss() # computes softmax and then the cross entropy

Instale la clase Optimizer

El optimizador será el algoritmo de aprendizaje que usemos. En este caso, usaremos el Descenso de gradiente estocástico.

optimizer = torch.optim.SGD(model.parameters(), lr=lr_rate)

Entrena el modelo

Ahora, en el último paso, entrenaremos el modelo usando el siguiente código.

iter = 0
for epoch in range(int(epochs)):
for i, (images, labels) in enumerate(train_loader):
images = Variable(images.view(-1, 28 * 28))
labels = Variable(labels)

optimizer.zero_grad()
outputs = model(images)
loss = criterion(outputs, labels)
loss.backward()
optimizer.step()

iter+=1
if iter%500==0:
# calculate Accuracy
correct = 0
total = 0
for images, labels in test_loader:
images = Variable(images.view(-1, 28*28))
outputs = model(images)
_, predicted = torch.max(outputs.data, 1)
total+= labels.size(0)
# for gpu, bring the predicted and labels back to cpu fro python operations to work
correct+= (predicted == labels).sum()
accuracy = 100 * correct/total
print("Iteration: {}. Loss: {}. Accuracy: {}.".format(iter, loss.item(), accuracy))

Entrenando, este modelo por solo 3000 iteraciones da una precisión del 82%. Puede seguir adelante y ajustar un poco los parámetros para ver si la precisión aumenta o no.

Un buen ejercicio para obtener una comprensión más profunda de los modelos de regresión logística en PyTorch sería aplicar esto a cualquier problema de clasificación que se le ocurra. Por ejemplo, puede entrenar un modelo de regresión logística para clasificar las imágenes de su favorito Superhéroes de Marvel (no debería ser muy difícil ya que la mitad de ellos se han ido :)).

Referencias

[1] https://www.statisticssolutions.com/what-is-logistic-regression/

[2] https://pytorch.org/tutorials/beginner/blitz/neural_networks_tutorial.html#sphx-glr-beginner-blitz-neural-networks-tutorial-py

[3] https://pytorch.org/docs/stable/torchvision/datasets.html

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

HxxfUiVf8cRgAC6fSB56LF 1200 80

El mejor reloj inteligente barato 2021: dispositivos de gran presupuesto para su muñeca

Archivo Java Web Start