Optimizadores, formación y evaluación

Aprendizaje profundo intermedio con PyTorch

Michal Oleszak

Machine Learning Engineer

Bucle de entrenamiento

import torch.nn as nn
import torch.optim as optim

criterion = nn.BCELoss()
optimizer = optim.SGD(net.parameters(), lr=0.01)


for epoch in range(1000): for features, labels in dataloader_train:
optimizer.zero_grad()
outputs = net(features)
loss = criterion( outputs, labels.view(-1, 1) )
loss.backward()
optimizer.step()
  • Define la función de pérdida y el optimizador.
    • BCELoss para clasificación binaria
    • Optimizador
  • Repite las épocas y los lotes de entrenamiento.
  • Gradientes claros
  • Pase hacia adelante: obtener los resultados del modelo
  • Calcular la pérdida
  • Calcular gradientes
  • Paso del optimizador: actualizar parámetros
Aprendizaje profundo intermedio con PyTorch

Cómo funciona un optimizador

 

Dos vectores de longitud dos: uno con valores de parámetros (1 y 0,5) y otro con gradientes (0,9 y -0,2).

Aprendizaje profundo intermedio con PyTorch

Cómo funciona un optimizador

 

Las flechas indican cómo se pasan los dos vectores con parámetros y gradientes al optimizador, representado como un tablero.

Aprendizaje profundo intermedio con PyTorch

Cómo funciona un optimizador

 

Una flecha del optimizador apunta hacia un vector con dos actualizaciones de parámetros: -0,5 y 0,5.

Aprendizaje profundo intermedio con PyTorch

Cómo funciona un optimizador

 

![Las flechas de las actualizaciones de los parámetros apuntan hacia los valores actualizados de los parámetros: El 0.5 y el 1.0

Aprendizaje profundo intermedio con PyTorch

Cómo funciona un optimizador

 

![Las flechas de las actualizaciones de los parámetros apuntan hacia los valores actualizados de los parámetros: El 0.5 y el 1.0

Aprendizaje profundo intermedio con PyTorch

Descenso de gradiente estocástico (SGD)

optimizer = optim.SGD(net.parameters(), lr=0.01)
  • La actualización depende de la tasa de aprendizaje.
  • Sencillo y eficiente, para modelos básicos.
  • Rara vez utilizado en la práctica.
Aprendizaje profundo intermedio con PyTorch

Gradiente adaptativo (Adagrad)

optimizer = optim.Adagrad(net.parameters(), lr=0.01)
  • Adapta la velocidad de aprendizaje para cada parámetro.
  • Bueno para datos dispersos
  • Puede reducir la velocidad de aprendizaje demasiado rápido.
Aprendizaje profundo intermedio con PyTorch

Propagación de la media cuadrática (RMSprop)

optimizer = optim.RMSprop(net.parameters(), lr=0.01)
  • Actualiza cada parámetro en función del tamaño de sus gradientes anteriores.
Aprendizaje profundo intermedio con PyTorch

Estimación adaptativa del momento (Adam)

optimizer = optim.Adam(net.parameters(), lr=0.01)
  • Podría decirse que es el más versátil y utilizado.
  • RMSprop + impulso de gradiente
  • A menudo utilizado como optimizador de referencia.
Aprendizaje profundo intermedio con PyTorch

Evaluación del modelo

from torchmetrics import Accuracy

acc = Accuracy(task="binary")


net.eval() with torch.no_grad(): for features, labels in dataloader_test:
outputs = net(features)
preds = (outputs >= 0.5).float()
acc(preds, labels.view(-1, 1))
accuracy = acc.compute() print(f"Accuracy: {accuracy}")
Accuracy: 0.6759443283081055
  • Configurar métrica de precisión
  • Pon el modelo en modo de evaluación y repite los lotes de datos de prueba sin gradientes.
  • Pasar datos al modelo para obtener probabilidades previstas.
  • Calcular etiquetas predichas
  • Actualizar métrica de precisión
Aprendizaje profundo intermedio con PyTorch

¡Vamos a practicar!

Aprendizaje profundo intermedio con PyTorch

Preparing Video For Download...