Я недавно начал внедрять нейронную сеть с использованием 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
. Как получить словарь с весом и уклоном каждого слоя, используя это?
Спасибо!