-
Notifications
You must be signed in to change notification settings - Fork 7
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Models #4
Comments
Sugestão para implementação de modelosModelos de aprendizado profundo normalmente são escritos em Frameworks especializados em auto-diferenciação como Pytorch, Tensorflow etc. Dos diversos frameworks, sugiro o Pytorch Lightning, que é uma extensão do Pytorch que facilita a implementação de modelos de aprendizado profundo. Motivação para o Pytorch LightningO Pytorch Lightning é um framework que abstrai a implementação de modelos de aprendizado profundo, facilitando a reprodutibilidade e a depuração. Ele fornece uma API bem definida para a implementação, treinamento e teste de modelos de aprendizado profundo; gerenciamento de logs e checkpoints; facilidades para treinamento distribuído e heterogêneo; e facilidades para treinamento em clusters de GPUs (e.g. SLURM). APIs do Pytorch LightningOs modelos de aprendizado profundo são implementados através de uma classe que herda de
Exemplo de modelosA implementação de um modelo de aprendizado profundo em Pytorch Lightning é mostrada a seguir. Neste exemplo, o modelo é uma rede neural Multilayer Perceptron (MLP) com uma camada oculta. import torch
import torch.nn as nn
import lightning as L
class MLP(L.LightningModule):
def __init__(self, input_size, hidden_size, output_size):
super().__init__()
self.input_size = input_size
self.hidden_size = hidden_size
self.output_size = output_size
self.fc1 = nn.Linear(input_size, hidden_size)
self.fc2 = nn.Linear(hidden_size, output_size)
self.relu = nn.ReLU()
def forward(self, x):
# Realiza a inferência do modelo
x = self.fc1(x)
x = self.relu(x)
x = self.fc2(x)
return x
def training_step(self, batch, batch_idx):
# Define o que acontece em cada passo de treinamento
x, y = batch
y_hat = self(x)
loss = nn.CrossEntropyLoss()(y_hat, y)
return loss
def configure_optimizers(self):
# Define o otimizador do modelo.
# Os parametros do modelo são acessados através do atributo self.parameters()
return torch.optim.Adam(self.parameters(), lr=1e-3) TreinamentoUma vez definido o modelo, o treinamento é feito através da classe from lightning import Trainer
...
model = MLP(input_size, hidden_size, output_size)
trainer = Trainer(max_epochs=10)
trainer.fit(model, train_dataloader, val_dataloader) O método Extensão por meio de callbacksA extensão do funcionamento do método LoggingO Lighning oferece uma ferramenta para gerenciamento de logs que permite o registro de métricas e hiperparâmetros do modelo. Por exemplo, métricas de treinamento e validação podem ser registradas através do método def training_step(self, batch, batch_idx):
...
self.log('train_loss', loss)
return loss Os logs são armazenados em arquivos no formato Tensorboard e podem ser visualizados através do comando Sugestão de implementaçãoComo descrito acima, o Pytorch Lightning abstrai a implementação de modelos de aprendizado profundo, além de facilitar a reprodutibilidade, organização e a depuração. Entretanto, a implementação de modelos não segue uma receita de bolo e depende do problema a ser resolvido. Desta forma, além de sugerir a implementação dos nossos modelos usando Pytorch Lightning, sugiro algumas diretrizes para a implementação e uso dos modelos:
def training_step(self, batch, batch_idx):
...
self.log('train_loss', loss, on_epoch=True, on_step=False, prog_bar=True, logger=True)
return loss
from lightning.pytorch.callbacks import ModelCheckpoint
checkpoint_callback = ModelCheckpoint(
mode='min',
monitor='val_loss',
dirpath='checkpoints/',
filename='model-{epoch:02d}-{val_loss:.2f}',
)
trainer = Trainer(
callbacks=[checkpoint_callback],
...
) |
Collection of models
Features to be Implemented
The text was updated successfully, but these errors were encountered: