ComeçarComece gratuitamente

Inicialização e ativação

Os problemas de gradientes instáveis (que desaparecem ou explodem) são um desafio que surge com frequência no treinamento de redes neurais profundas. Neste e nos próximos exercícios, você expandirá a arquitetura do modelo que criou para a tarefa de classificação da potabilidade da água para torná-la mais imune a esses problemas.

Como primeira etapa, você aprimorará a inicialização dos pesos usando a estratégia de inicialização He (Kaiming). Para fazer isso, você precisará chamar o inicializador adequado do módulo torch.nn.init, que foi importado para você como init. Em seguida, você atualizará as funções de ativação do padrão ReLU para o frequentemente melhor ELU.

Este exercício faz parte do curso

Aprendizagem profunda intermediária com PyTorch

Ver Curso

Instruções de exercício

  • Chame o inicializador He (Kaiming) no atributo de peso da segunda camada, fc2, de modo semelhante ao que foi feito para fc1.
  • Chame o inicializador He (Kaiming) no atributo de peso da terceira camada, fc3, levando em conta a função de ativação diferente usada na camada final.
  • Atualize as funções de ativação no método forward() de relu para elu.

Exercício interativo prático

Experimente este exercício preenchendo este código de exemplo.

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 e executar código