НачатьНачать бесплатно

Инициализация и функции активации

Нестабильные градиенты — как исчезающие, так и взрывные — представляют собой распространённую проблему при обучении глубоких нейронных сетей. В этом и следующем упражнениях вы расширите архитектуру модели, созданной для задачи классификации пригодности воды, чтобы сделать её более устойчивой к подобным проблемам.

На первом шаге вы улучшите инициализацию весов, применив стратегию инициализации Хе (Kaiming). Для этого потребуется вызвать соответствующую функцию из модуля torch.nn.init, который уже импортирован под именем init. Затем вы замените функции активации: вместо стандартной ReLU будет использоваться ELU, которая нередко показывает лучшие результаты.

Это упражнение является частью курса

Глубокое обучение на PyTorch: средний уровень

Посмотреть курс

Инструкции к упражнению

  • Примените инициализатор Хе (Kaiming) к атрибуту весов второго слоя, fc2, аналогично тому, как это сделано для fc1.
  • Примените инициализатор Хе (Kaiming) к атрибуту весов третьего слоя, fc3, учитывая функцию активации, используемую в финальном слое.
  • Обновите функции активации в методе forward(): замените relu на elu.

Интерактивное практическое упражнение

Попробуйте выполнить это упражнение, дополнив этот пример кода.

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
Редактировать и запускать код