Inicialización y activación
Los problemas de gradientes inestables (que desaparecen o explotan) son un reto que se plantea a menudo en el entrenamiento de redes neuronales profundas. En este ejercicio y en los siguientes, ampliarás la arquitectura del modelo que construiste para la tarea de clasificación de la potabilidad del agua para hacerla más inmune a esos problemas.
Como primer paso, mejorarás la inicialización de los pesos mediante la estrategia de inicialización He (Kaiming). Para ello, tendrás que llamar al inicializador adecuado desde el módulo torch.nn.init
, que se ha importado como init
. A continuación, actualizarás las funciones de activación de la ReLU predeterminada a la ELU, a menudo mejor.
Este ejercicio forma parte del curso
Aprendizaje profundo intermedio con PyTorch
Instrucciones del ejercicio
- Llama al inicializador He (Kaiming) en el atributo peso de la segunda capa,
fc2
, de forma similar a como se hace confc1
. - Llama al inicializador He (Kaiming) en el atributo peso de la tercera capa,
fc3
, y ten en cuenta la función de activación diferente utilizada en la capa final. - Actualiza las funciones de activación en el método
forward()
derelu
aelu
.
Ejercicio interactivo práctico
Prueba este ejercicio completando el código de muestra.
class Net(nn.Module):
def __init__(self):
super().__init__()
self.fc1 = nn.Linear(9, 16)
self.fc2 = nn.Linear(16, 8)
self.fc3 = nn.Linear(8, 1)
# Apply He initialization
init.kaiming_uniform_(self.fc1.weight)
____(____)
____(____, ____)
def forward(self, x):
# Update ReLU activation to ELU
x = nn.functional.relu(self.fc1(x))
x = nn.functional.relu(self.fc2(x))
x = nn.functional.sigmoid(self.fc3(x))
return x