Понимание типа градиентного спуска и того, как оно рассчитывается в среде Pytorch и как сделать его более динамичным - PullRequest
1 голос
/ 23 февраля 2020

Я недавно начал внедрять нейронную сеть с использованием Pytorch Framework, и вот мой код:

      class NN(nn.Module):

         def __init__(self):
            super(NN,self).__init__()
            self.f1 = nn.Linear(1,h)#,bias = False) 
            self.f2 = nn.Linear(h,1)#,bias = False)
         def forward(self,x):
            x = self.f1(x)
            x = f.relu(x)
            x = self.f2(x)
            return x

     model = NN()
     loss_type = nn.MSELoss()


     optimizer = torch.optim.Adam(model.parameters(), lr=0.1)

     l = []
     for i in range(epochs):
        y_pred = model.forward(X_train)

        loss = loss_type(y_pred,Y_train)
        l.append(loss.item())
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()

У меня есть несколько вопросов, связанных с этим:

(1) Это обновление весов в каждой точке данных / обучающем примере, которая представляет собой стохастический c градиентный коэффициент (SGD) или его усредненный вес, а затем обновляется в каждом эпо c.?

(2). Почему это super(NN,self).__init__() используется?

(3) Вместо передачи x = f.relu(x) могу ли я сделать его более динамичным c, как, например, для примера, можно ли динамически передавать следующие параметры, сохраняя ту же архитектуру и запуская модель для каждой комбинации и сохранение результата или потери для каждой комбинации.

  { hiddenLayer=[10,20,30],activation_function=['sigmoid','relu'],learning rate=[0.1,0.2], epoc=[10,20,30] }

   How can I modify the above code to implement this. So that everytime I do not have to change my hyperparemeters.

(4) Что содержится в NN.parameters. Как получить словарь с весом и уклоном каждого слоя, используя это?

Спасибо!

...