Точность LSTM различна для train () и eval () для одного и того же набора данных (набор данных train) - PullRequest
0 голосов
/ 16 января 2019

Я создал модель customLSTM для задачи прогнозирования, над которой я работал, и потери при обучении довольно низкие, поэтому я знаю, что она хорошо тренировалась. Однако сразу после тренировки, когда я запускаю точно такой же набор данных в режиме model.eval () или использую torch.no_grad () и не применяя оптимизатор и функцию потерь, потери резко возрастают. Поскольку модель после тренировки дает примерно такой же прогноз, как и во время тренировки, хотя я понимаю, что вычисление градиента может изменить модель, она не должна отвечать за увеличение ошибки с порядка e-03 до e-01 или даже выше. , Я не совсем уверен, что я делаю неправильно. Модель относится к типу:

super(customLSTM, self).__init__()
self.lstm1 = nn.LSTM(5, 50, num_layers=2).cuda() 
self.linear = nn.Linear(50, 5).cuda()

Пользовательская функция пересылки:

    outputs = []
    input = input.cuda()
    #each = each.view(1,1,-1)
    self.lstm1.flatten_parameters()
    h_t1, c_t1 = self.lstm1(input)# (h_t1, c_t1))
    self.prev_c_t1 = c_t1
    h_t1 = h_t1.double()
    h_t1.cuda()
    output = self.linear(h_t1) #regression
    return output

Обучение более или менее:

            self.zero_grad()
            out = self.forward(each)

                loss = criterion(out, loss_cmp) #loss_cmp is the correct value, out is the prediction

            optimizer.zero_grad()
            loss.backward()     
            optimizer.step()

при проверке функции:

    out = self.forward(each)
    loss = criterion(out, loss_cmp)

Первый раз здесь, так что дайте мне знать, если я делаю что-то не так!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...