Otimizadores, treino e avaliação

Aprendizagem profunda intermediária com PyTorch

Michal Oleszak

Machine Learning Engineer

Loop de treino

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

criterion = nn.BCELoss()
otimizer = 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()
  • Defina função de perda e otimizador
    • BCELoss para classificação binária
    • Otimizador SGD
  • Itere por épocas e batches de treino
  • Zere os gradientes
  • Passagem forward: obtenha saídas
  • Calcule a perda
  • Calcule os gradientes
  • Passo do otimizador: atualize parâmetros
Aprendizagem profunda intermediária com PyTorch

Como um otimizador funciona

 

Dois vetores de tamanho 2: um com parâmetros (1 e 0,5) e outro com gradientes (0,9 e -0,2).

Aprendizagem profunda intermediária com PyTorch

Como um otimizador funciona

 

Setas mostram como os vetores de parâmetros e gradientes entram no otimizador, desenhado como um alvo.

Aprendizagem profunda intermediária com PyTorch

Como um otimizador funciona

 

Uma seta do otimizador aponta para um vetor com duas atualizações de parâmetro: -0,5 e 0,5.

Aprendizagem profunda intermediária com PyTorch

Como um otimizador funciona

 

Setas de atualizações de parâmetros apontam para os novos valores: 0,5 e 1,0

Aprendizagem profunda intermediária com PyTorch

Como um otimizador funciona

 

Setas de atualizações de parâmetros apontam para os novos valores: 0,5 e 1,0

Aprendizagem profunda intermediária com PyTorch

Descida do Gradiente Estocástico (SGD)

otimizer = optim.SGD(net.parameters(), lr=0.01)
  • Atualização depende da taxa de aprendizado
  • Simples e eficiente para modelos básicos
  • Raramente usado na prática
Aprendizagem profunda intermediária com PyTorch

Gradiente Adaptativo (Adagrad)

otimizer = optim.Adagrad(net.parameters(), lr=0.01)
  • Adapta a taxa de aprendizado por parâmetro
  • Bom para dados esparsos
  • Pode reduzir a taxa rápido demais
Aprendizagem profunda intermediária com PyTorch

Propagação da Média Quadrática (RMSprop)

otimizer = optim.RMSprop(net.parameters(), lr=0.01)
  • Atualiza cada parâmetro pelo tamanho dos gradientes anteriores
Aprendizagem profunda intermediária com PyTorch

Estimativa de Momento Adaptativo (Adam)

otimizer = optim.Adam(net.parameters(), lr=0.01)
  • Provavelmente o mais versátil e usado
  • RMSprop + momento do gradiente
  • Geralmente o padrão
Aprendizagem profunda intermediária com PyTorch

Avaliação do 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
  • Configure a métrica de acurácia
  • Coloque o modelo em eval e itere no teste sem gradientes
  • Passe dados ao modelo para probabilidades previstas
  • Calcule rótulos previstos
  • Atualize a acurácia
Aprendizagem profunda intermediária com PyTorch

Vamos praticar!

Aprendizagem profunda intermediária com PyTorch

Preparing Video For Download...