Modelo PyTorch
Utilizarás el enfoque OOP para definir la arquitectura del modelo. Recuerda que para esto hay que crear una clase modelo y definir dos métodos dentro de ella:
.__init__()
, en el que defines las capas que quieres utilizar.forward()
, en el que defines lo que ocurre con las entradas del modelo una vez que este las recibe; aquí es donde pasas las entradas a través de capas predefinidas.
Construyamos un modelo con tres capas lineales y activaciones ReLU. Después de la última capa lineal, necesitas en su lugar una activación sigmoidea, que viene muy bien para tareas de clasificación binaria como nuestro problema de predicción de la potabilidad del agua. Aquí tienes el modelo que se ha definido mediante nn.Sequential()
, con el que quizá estés más familiarizado:
net = nn.Sequential(
nn.Linear(9, 16),
nn.ReLU(),
nn.Linear(16, 8),
nn.ReLU(),
nn.Linear(8, 1),
nn.Sigmoid(),
)
Reescribamos este modelo como una clase.
Este ejercicio forma parte del curso
Aprendizaje profundo intermedio con PyTorch
Instrucciones de ejercicio
- En el método
.__init__()
, define las tres capas lineales con las dimensiones correspondientes a la definición proporcionada del modelo y asígnalas aself.fc1
,self.fc2
yself.fc3
, respectivamente. - En el método
forward()
, pasa la entrada del modelox
por todas las capas y acuérdate de añadir activaciones sobre ellas, de forma similar a como ya se ha hecho para la primera capa.
Ejercicio interactivo práctico
Pruebe este ejercicio completando este código de muestra.
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