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
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 parafc1
. - 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()
derelu
paraelu
.
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