ComenzarEmpieza gratis

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

Ver curso

Instrucciones del ejercicio

  • Llama al inicializador He (Kaiming) en el atributo peso de la segunda capa, fc2, de forma similar a como se hace con fc1.
  • 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() de relu a elu.

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
Editar y ejecutar código