Н.Н. Регрессия не учится - PullRequest
0 голосов
/ 04 февраля 2020

Я пытаюсь сделать так, чтобы моя модель регрессии NN соответствовала моим данным. Я использовал следующие настройки:

x имеет форму: (12, 132399) y имеет форму: (1, 132399) Количество обучающих примеров m: 132399 Количество функций в примерах: 12 Активация Relu Инициализация Адама Оптимизация

Я пробовал разные скорости обучения, количество слоев, узлов и эпох, но переоснащение не происходит. Наилучший прогноз для моей регрессии был R ^ 2 = 0,6.

Я буду признателен, если вы сообщите мне об ошибке в моем коде:

class NN(nn.Module):

    #Constructor
    def __init__(self,layers):
        super(NN,self).__init__()
        self.hidden=nn.ModuleList()

        for D_in, D_out in zip(layers,layers[1:]):
            linear_transform=nn.Linear(D_in,D_out)
            torch.nn.init.kaiming_uniform_(linear_transform.weight, nonlinearity='relu')
            self.hidden.append(linear_transform)

    #Prediction
    def forward(self,x):
        L=len(self.hidden)
        for l,transform in zip(range(L),self.hidden):
            if l<L:
                x=relu(transform(x))
            else:
                x=transform(x)
        return x
def train(model, criterion, trainloader, optimizer,scheduler, epochs = 100):
    cost=[]
    total=0
    i=0
    for epoch in range(epochs):
        total=0

        for x,y in trainloader:
            optimizer.zero_grad()
            yhat=model(x)
            loss=criterion(yhat,y)
            loss.backward()
            optimizer.step()
            total+=loss.item()

        scheduler.step()
        i+=1    
        cost.append(total)
        print(str(i)+':   '+str(total))
    return cost 
model=NN(layers)
criterion=nn.MSELoss()
lr=0.00003
optimizer=optim.Adam(model.parameters(),lr=lr)
milestones=[500,1000]
scheduler=optim.lr_scheduler.MultiStepLR(optimizer, milestones, gamma=0.6, last_epoch=-1)
cost=train(model,criterion,trainloader,optimizer,scheduler,epochs=1000)
...