Modelo do PyTorch
Você usará a abordagem OOP para definir a arquitetura do modelo. Lembre-se de que isso requer a configuração de uma classe de modelo e a definição de dois métodos dentro dela:
.__init__()
na qual você define as camadas que deseja usar;forward()
, na qual você define o que acontece com as entradas do modelo depois que ele as recebe; é aqui que você passa as entradas por camadas predefinidas.
Vamos criar um modelo com três camadas lineares e ativações de ReLU. Após a última camada linear, você precisa de uma ativação sigmoide, que é adequada para tarefas de classificação binária, como o nosso problema de previsão de potabilidade da água. Aqui está o modelo definido usando nn.Sequential()
, com o qual você talvez esteja mais familiarizado:
net = nn.Sequential(
nn.Linear(9, 16),
nn.ReLU(),
nn.Linear(16, 8),
nn.ReLU(),
nn.Linear(8, 1),
nn.Sigmoid(),
)
Vamos reescrever esse modelo como uma classe!
Este exercício faz parte do curso
Aprendizagem profunda intermediária com PyTorch
Instruções de exercício
- No método
.__init__()
, defina as três camadas lineares com dimensões correspondentes à definição de modelo fornecida e atribua-as aself.fc1
,self.fc2
eself.fc3
, respectivamente. - No método
forward()
, passe a entrada do modelox
por todas as camadas, lembrando-se de adicionar ativações em cima delas, da mesma forma como já foi feito para a primeira camada.
Exercício interativo prático
Experimente este exercício preenchendo este código de exemplo.
import torch.nn as nn
import torch.nn.functional as F
class Net(nn.Module):
def __init__(self):
super().__init__()
# Define the three linear layers
self.fc1 = ____
self.fc2 = ____
self.fc3 = ____
def forward(self, x):
# Pass x through linear layers adding activations
x = nn.functional.relu(self.fc1(x))
x = ____
x = ____
return x