Модель PyTorch
Вы будете использовать объектно-ориентированный подход для определения архитектуры модели. Напомним, что для этого необходимо создать класс модели и определить в нём два метода:
.__init__()— здесь вы задаёте слои, которые хотите использовать;forward()— здесь вы описываете, что происходит с входными данными модели после их получения; именно здесь входные данные проходят через заранее определённые слои.
Давайте построим модель с тремя линейными слоями и функциями активации ReLU. После последнего линейного слоя нужно использовать активацию сигмоид, которая хорошо подходит для задач бинарной классификации — таких как наша задача прогнозирования пригодности воды для питья. Вот модель, определённая с помощью nn.Sequential(), с которой вы, возможно, уже знакомы:
net = nn.Sequential(
nn.Linear(9, 16),
nn.ReLU(),
nn.Linear(16, 8),
nn.ReLU(),
nn.Linear(8, 1),
nn.Sigmoid(),
)
Теперь перепишем эту модель в виде класса!
Это упражнение является частью курса
Глубокое обучение на PyTorch: средний уровень
Инструкции к упражнению
- В методе
.__init__()определите три линейных слоя с размерностями, соответствующими приведённому определению модели, и присвойте ихself.fc1,self.fc2иself.fc3соответственно. - В методе
forward()пропустите входные данные моделиxчерез все слои, не забывая добавлять функции активации после каждого из них — аналогично тому, как это уже сделано для первого слоя.
Интерактивное практическое упражнение
Попробуйте выполнить это упражнение, дополнив этот пример кода.
import torch.nn as nn
import torch.nn.functional as F
class Net(nn.Module):
def __init__(self):
super().__init__()
# Define the three linear layers
self.fc1 = ____
self.fc2 = ____
self.fc3 = ____
def forward(self, x):
# Pass x through linear layers adding activations
x = nn.functional.relu(self.fc1(x))
x = ____
x = ____
return x